diff --git a/.buildkite/scripts/steps/artifacts/docker_image.sh b/.buildkite/scripts/steps/artifacts/docker_image.sh index 558fc7d02a1c1..f21efabd1870e 100755 --- a/.buildkite/scripts/steps/artifacts/docker_image.sh +++ b/.buildkite/scripts/steps/artifacts/docker_image.sh @@ -126,15 +126,15 @@ steps: env: CONTAINER: "$KIBANA_IMAGE" soft_fail: true - - label: ":argo: Update kibana image tag for kibana-controller using gpctl" + - label: ":serverless::argo: Run synthetics tests and update kibana image tag to ${GIT_ABBREV_COMMIT} for kibana-controller" branches: main - trigger: gpctl-promote-with-e2e-tests + trigger: gpctl-promote-after-serverless-devenv-synthetics build: env: SERVICE_COMMIT_HASH: "$GIT_ABBREV_COMMIT" SERVICE: kibana REMOTE_SERVICE_CONFIG: https://raw.githubusercontent.com/elastic/serverless-gitops/main/gen/gpctl/kibana/dev.yaml - DRY_RUN: "${DRY_RUN:-false}" + GPCTL_PROMOTE_DRY_RUN: ${DRY_RUN:-false} EOF else diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 307cecba44651..54c268ba2ef4b 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -476,7 +476,7 @@ src/plugins/files_management @elastic/appex-sharedux src/plugins/files @elastic/appex-sharedux packages/kbn-find-used-node-modules @elastic/kibana-operations x-pack/plugins/fleet @elastic/fleet -packages/kbn-flot-charts @elastic/kibana-operations +packages/kbn-flot-charts @elastic/kibana-presentation @elastic/stack-monitoring x-pack/test/ui_capabilities/common/plugins/foo_plugin @elastic/kibana-security packages/kbn-formatters @elastic/obs-ux-logs-team src/plugins/ftr_apis @elastic/kibana-core @@ -610,6 +610,7 @@ x-pack/packages/ml/data_view_utils @elastic/ml-ui x-pack/packages/ml/date_picker @elastic/ml-ui x-pack/packages/ml/date_utils @elastic/ml-ui x-pack/packages/ml/error_utils @elastic/ml-ui +x-pack/packages/ml/field_stats_flyout @elastic/ml-ui x-pack/packages/ml/in_memory_table @elastic/ml-ui x-pack/packages/ml/is_defined @elastic/ml-ui x-pack/packages/ml/is_populated_object @elastic/ml-ui @@ -617,6 +618,7 @@ x-pack/packages/ml/kibana_theme @elastic/ml-ui x-pack/packages/ml/local_storage @elastic/ml-ui x-pack/packages/ml/nested_property @elastic/ml-ui x-pack/packages/ml/number_utils @elastic/ml-ui +x-pack/packages/ml/parse_interval @elastic/ml-ui x-pack/plugins/ml @elastic/ml-ui x-pack/packages/ml/query_utils @elastic/ml-ui x-pack/packages/ml/random_sampler_utils @elastic/ml-ui @@ -628,6 +630,7 @@ x-pack/packages/ml/time_buckets @elastic/ml-ui x-pack/packages/ml/trained_models_utils @elastic/ml-ui x-pack/packages/ml/ui_actions @elastic/ml-ui x-pack/packages/ml/url_state @elastic/ml-ui +x-pack/packages/ml/validators @elastic/ml-ui packages/kbn-mock-idp-plugin @elastic/kibana-security packages/kbn-mock-idp-utils @elastic/kibana-security packages/kbn-monaco @elastic/appex-sharedux diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index 35ad4814bdb77..3be71b0d7b2ee 100644 --- a/api_docs/actions.mdx +++ b/api_docs/actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/actions title: "actions" image: https://source.unsplash.com/400x175/?github description: API docs for the actions plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'actions'] --- import actionsObj from './actions.devdocs.json'; diff --git a/api_docs/advanced_settings.mdx b/api_docs/advanced_settings.mdx index ec3deb5a4bc1d..4b990089b7b7d 100644 --- a/api_docs/advanced_settings.mdx +++ b/api_docs/advanced_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/advancedSettings title: "advancedSettings" image: https://source.unsplash.com/400x175/?github description: API docs for the advancedSettings plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings'] --- import advancedSettingsObj from './advanced_settings.devdocs.json'; diff --git a/api_docs/ai_assistant_management_selection.mdx b/api_docs/ai_assistant_management_selection.mdx index 832dc0148fc16..fdc2aa6c0e00c 100644 --- a/api_docs/ai_assistant_management_selection.mdx +++ b/api_docs/ai_assistant_management_selection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiAssistantManagementSelection title: "aiAssistantManagementSelection" image: https://source.unsplash.com/400x175/?github description: API docs for the aiAssistantManagementSelection plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiAssistantManagementSelection'] --- import aiAssistantManagementSelectionObj from './ai_assistant_management_selection.devdocs.json'; diff --git a/api_docs/aiops.mdx b/api_docs/aiops.mdx index 8a1af6c7ed4d9..f200dfbc25ea7 100644 --- a/api_docs/aiops.mdx +++ b/api_docs/aiops.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiops title: "aiops" image: https://source.unsplash.com/400x175/?github description: API docs for the aiops plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiops'] --- import aiopsObj from './aiops.devdocs.json'; diff --git a/api_docs/alerting.mdx b/api_docs/alerting.mdx index f84ea0fce4f9a..801506b2d6628 100644 --- a/api_docs/alerting.mdx +++ b/api_docs/alerting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/alerting title: "alerting" image: https://source.unsplash.com/400x175/?github description: API docs for the alerting plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'alerting'] --- import alertingObj from './alerting.devdocs.json'; diff --git a/api_docs/apm.devdocs.json b/api_docs/apm.devdocs.json index 7a76874a7835b..5316e7fb7fccf 100644 --- a/api_docs/apm.devdocs.json +++ b/api_docs/apm.devdocs.json @@ -2502,23 +2502,53 @@ "<[", "LiteralC", "<", - "IndexLifecyclePhaseSelectOption", + { + "pluginId": "observabilityShared", + "scope": "common", + "docId": "kibObservabilitySharedPluginApi", + "section": "def-common.IndexLifecyclePhaseSelectOption", + "text": "IndexLifecyclePhaseSelectOption" + }, ".All>, ", "LiteralC", "<", - "IndexLifecyclePhaseSelectOption", + { + "pluginId": "observabilityShared", + "scope": "common", + "docId": "kibObservabilitySharedPluginApi", + "section": "def-common.IndexLifecyclePhaseSelectOption", + "text": "IndexLifecyclePhaseSelectOption" + }, ".Hot>, ", "LiteralC", "<", - "IndexLifecyclePhaseSelectOption", + { + "pluginId": "observabilityShared", + "scope": "common", + "docId": "kibObservabilitySharedPluginApi", + "section": "def-common.IndexLifecyclePhaseSelectOption", + "text": "IndexLifecyclePhaseSelectOption" + }, ".Warm>, ", "LiteralC", "<", - "IndexLifecyclePhaseSelectOption", + { + "pluginId": "observabilityShared", + "scope": "common", + "docId": "kibObservabilitySharedPluginApi", + "section": "def-common.IndexLifecyclePhaseSelectOption", + "text": "IndexLifecyclePhaseSelectOption" + }, ".Cold>, ", "LiteralC", "<", - "IndexLifecyclePhaseSelectOption", + { + "pluginId": "observabilityShared", + "scope": "common", + "docId": "kibObservabilitySharedPluginApi", + "section": "def-common.IndexLifecyclePhaseSelectOption", + "text": "IndexLifecyclePhaseSelectOption" + }, ".Frozen>]>; }>, ", "TypeC", "<{ environment: ", @@ -2584,23 +2614,53 @@ "<[", "LiteralC", "<", - "IndexLifecyclePhaseSelectOption", + { + "pluginId": "observabilityShared", + "scope": "common", + "docId": "kibObservabilitySharedPluginApi", + "section": "def-common.IndexLifecyclePhaseSelectOption", + "text": "IndexLifecyclePhaseSelectOption" + }, ".All>, ", "LiteralC", "<", - "IndexLifecyclePhaseSelectOption", + { + "pluginId": "observabilityShared", + "scope": "common", + "docId": "kibObservabilitySharedPluginApi", + "section": "def-common.IndexLifecyclePhaseSelectOption", + "text": "IndexLifecyclePhaseSelectOption" + }, ".Hot>, ", "LiteralC", "<", - "IndexLifecyclePhaseSelectOption", + { + "pluginId": "observabilityShared", + "scope": "common", + "docId": "kibObservabilitySharedPluginApi", + "section": "def-common.IndexLifecyclePhaseSelectOption", + "text": "IndexLifecyclePhaseSelectOption" + }, ".Warm>, ", "LiteralC", "<", - "IndexLifecyclePhaseSelectOption", + { + "pluginId": "observabilityShared", + "scope": "common", + "docId": "kibObservabilitySharedPluginApi", + "section": "def-common.IndexLifecyclePhaseSelectOption", + "text": "IndexLifecyclePhaseSelectOption" + }, ".Cold>, ", "LiteralC", "<", - "IndexLifecyclePhaseSelectOption", + { + "pluginId": "observabilityShared", + "scope": "common", + "docId": "kibObservabilitySharedPluginApi", + "section": "def-common.IndexLifecyclePhaseSelectOption", + "text": "IndexLifecyclePhaseSelectOption" + }, ".Frozen>]>; }>, ", "TypeC", "<{ probability: ", @@ -2672,23 +2732,53 @@ "<[", "LiteralC", "<", - "IndexLifecyclePhaseSelectOption", + { + "pluginId": "observabilityShared", + "scope": "common", + "docId": "kibObservabilitySharedPluginApi", + "section": "def-common.IndexLifecyclePhaseSelectOption", + "text": "IndexLifecyclePhaseSelectOption" + }, ".All>, ", "LiteralC", "<", - "IndexLifecyclePhaseSelectOption", + { + "pluginId": "observabilityShared", + "scope": "common", + "docId": "kibObservabilitySharedPluginApi", + "section": "def-common.IndexLifecyclePhaseSelectOption", + "text": "IndexLifecyclePhaseSelectOption" + }, ".Hot>, ", "LiteralC", "<", - "IndexLifecyclePhaseSelectOption", + { + "pluginId": "observabilityShared", + "scope": "common", + "docId": "kibObservabilitySharedPluginApi", + "section": "def-common.IndexLifecyclePhaseSelectOption", + "text": "IndexLifecyclePhaseSelectOption" + }, ".Warm>, ", "LiteralC", "<", - "IndexLifecyclePhaseSelectOption", + { + "pluginId": "observabilityShared", + "scope": "common", + "docId": "kibObservabilitySharedPluginApi", + "section": "def-common.IndexLifecyclePhaseSelectOption", + "text": "IndexLifecyclePhaseSelectOption" + }, ".Cold>, ", "LiteralC", "<", - "IndexLifecyclePhaseSelectOption", + { + "pluginId": "observabilityShared", + "scope": "common", + "docId": "kibObservabilitySharedPluginApi", + "section": "def-common.IndexLifecyclePhaseSelectOption", + "text": "IndexLifecyclePhaseSelectOption" + }, ".Frozen>]>; }>, ", "TypeC", "<{ probability: ", @@ -2752,23 +2842,53 @@ "<[", "LiteralC", "<", - "IndexLifecyclePhaseSelectOption", + { + "pluginId": "observabilityShared", + "scope": "common", + "docId": "kibObservabilitySharedPluginApi", + "section": "def-common.IndexLifecyclePhaseSelectOption", + "text": "IndexLifecyclePhaseSelectOption" + }, ".All>, ", "LiteralC", "<", - "IndexLifecyclePhaseSelectOption", + { + "pluginId": "observabilityShared", + "scope": "common", + "docId": "kibObservabilitySharedPluginApi", + "section": "def-common.IndexLifecyclePhaseSelectOption", + "text": "IndexLifecyclePhaseSelectOption" + }, ".Hot>, ", "LiteralC", "<", - "IndexLifecyclePhaseSelectOption", + { + "pluginId": "observabilityShared", + "scope": "common", + "docId": "kibObservabilitySharedPluginApi", + "section": "def-common.IndexLifecyclePhaseSelectOption", + "text": "IndexLifecyclePhaseSelectOption" + }, ".Warm>, ", "LiteralC", "<", - "IndexLifecyclePhaseSelectOption", + { + "pluginId": "observabilityShared", + "scope": "common", + "docId": "kibObservabilitySharedPluginApi", + "section": "def-common.IndexLifecyclePhaseSelectOption", + "text": "IndexLifecyclePhaseSelectOption" + }, ".Cold>, ", "LiteralC", "<", - "IndexLifecyclePhaseSelectOption", + { + "pluginId": "observabilityShared", + "scope": "common", + "docId": "kibObservabilitySharedPluginApi", + "section": "def-common.IndexLifecyclePhaseSelectOption", + "text": "IndexLifecyclePhaseSelectOption" + }, ".Frozen>]>; }>, ", "TypeC", "<{ probability: ", @@ -2828,23 +2948,53 @@ "<[", "LiteralC", "<", - "IndexLifecyclePhaseSelectOption", + { + "pluginId": "observabilityShared", + "scope": "common", + "docId": "kibObservabilitySharedPluginApi", + "section": "def-common.IndexLifecyclePhaseSelectOption", + "text": "IndexLifecyclePhaseSelectOption" + }, ".All>, ", "LiteralC", "<", - "IndexLifecyclePhaseSelectOption", + { + "pluginId": "observabilityShared", + "scope": "common", + "docId": "kibObservabilitySharedPluginApi", + "section": "def-common.IndexLifecyclePhaseSelectOption", + "text": "IndexLifecyclePhaseSelectOption" + }, ".Hot>, ", "LiteralC", "<", - "IndexLifecyclePhaseSelectOption", + { + "pluginId": "observabilityShared", + "scope": "common", + "docId": "kibObservabilitySharedPluginApi", + "section": "def-common.IndexLifecyclePhaseSelectOption", + "text": "IndexLifecyclePhaseSelectOption" + }, ".Warm>, ", "LiteralC", "<", - "IndexLifecyclePhaseSelectOption", + { + "pluginId": "observabilityShared", + "scope": "common", + "docId": "kibObservabilitySharedPluginApi", + "section": "def-common.IndexLifecyclePhaseSelectOption", + "text": "IndexLifecyclePhaseSelectOption" + }, ".Cold>, ", "LiteralC", "<", - "IndexLifecyclePhaseSelectOption", + { + "pluginId": "observabilityShared", + "scope": "common", + "docId": "kibObservabilitySharedPluginApi", + "section": "def-common.IndexLifecyclePhaseSelectOption", + "text": "IndexLifecyclePhaseSelectOption" + }, ".Frozen>]>; }>, ", "TypeC", "<{ probability: ", diff --git a/api_docs/apm.mdx b/api_docs/apm.mdx index 805621f44124c..4eb84d1b24390 100644 --- a/api_docs/apm.mdx +++ b/api_docs/apm.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apm title: "apm" image: https://source.unsplash.com/400x175/?github description: API docs for the apm plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apm'] --- import apmObj from './apm.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/te | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 29 | 0 | 29 | 119 | +| 29 | 0 | 29 | 118 | ## Client diff --git a/api_docs/apm_data_access.devdocs.json b/api_docs/apm_data_access.devdocs.json index 365d08f247e17..be97ce96ca40e 100644 --- a/api_docs/apm_data_access.devdocs.json +++ b/api_docs/apm_data_access.devdocs.json @@ -295,7 +295,9 @@ "label": "fieldCaps", "description": [], "signature": [ - "(operationName: string, params: APMEventFieldCapsRequest) => Promise<", + "(operationName: string, params: ", + "APMEventFieldCapsRequest", + ") => Promise<", "FieldCapsResponse", ">" ], @@ -344,7 +346,9 @@ "label": "termsEnum", "description": [], "signature": [ - "(operationName: string, params: APMEventTermsEnumRequest) => Promise<", + "(operationName: string, params: ", + "APMEventTermsEnumRequest", + ") => Promise<", "TermsEnumResponse", ">" ], @@ -1886,7 +1890,15 @@ }, ", ", "InspectResponse", - "> | undefined; }" + "> | undefined; excludedDataTiers?: ", + { + "pluginId": "observabilityShared", + "scope": "common", + "docId": "kibObservabilitySharedPluginApi", + "section": "def-common.DataTier", + "text": "DataTier" + }, + "[] | undefined; }" ], "path": "x-pack/plugins/observability_solution/apm_data_access/server/lib/helpers/create_es_client/create_apm_event_client/index.ts", "deprecated": false, diff --git a/api_docs/apm_data_access.mdx b/api_docs/apm_data_access.mdx index 1c86ea4253378..c02c76077f977 100644 --- a/api_docs/apm_data_access.mdx +++ b/api_docs/apm_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apmDataAccess title: "apmDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the apmDataAccess plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apmDataAccess'] --- import apmDataAccessObj from './apm_data_access.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs- | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 93 | 0 | 93 | 1 | +| 93 | 0 | 93 | 3 | ## Server diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index 444d5bdae536c..117ad063ac0f6 100644 --- a/api_docs/banners.mdx +++ b/api_docs/banners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/banners title: "banners" image: https://source.unsplash.com/400x175/?github description: API docs for the banners plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'banners'] --- import bannersObj from './banners.devdocs.json'; diff --git a/api_docs/bfetch.mdx b/api_docs/bfetch.mdx index 368cbbd4b250b..64677de285d8a 100644 --- a/api_docs/bfetch.mdx +++ b/api_docs/bfetch.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/bfetch title: "bfetch" image: https://source.unsplash.com/400x175/?github description: API docs for the bfetch plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'bfetch'] --- import bfetchObj from './bfetch.devdocs.json'; diff --git a/api_docs/canvas.mdx b/api_docs/canvas.mdx index 3eb2bea386ac9..0a0b7d30d7209 100644 --- a/api_docs/canvas.mdx +++ b/api_docs/canvas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/canvas title: "canvas" image: https://source.unsplash.com/400x175/?github description: API docs for the canvas plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'canvas'] --- import canvasObj from './canvas.devdocs.json'; diff --git a/api_docs/cases.mdx b/api_docs/cases.mdx index 263fa4e8c6da2..35eddcb09af7a 100644 --- a/api_docs/cases.mdx +++ b/api_docs/cases.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cases title: "cases" image: https://source.unsplash.com/400x175/?github description: API docs for the cases plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cases'] --- import casesObj from './cases.devdocs.json'; diff --git a/api_docs/charts.mdx b/api_docs/charts.mdx index 438ab5bdbf27b..1bebd34e16e5e 100644 --- a/api_docs/charts.mdx +++ b/api_docs/charts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/charts title: "charts" image: https://source.unsplash.com/400x175/?github description: API docs for the charts plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'charts'] --- import chartsObj from './charts.devdocs.json'; diff --git a/api_docs/cloud.mdx b/api_docs/cloud.mdx index 356d069211f3a..27564887b3996 100644 --- a/api_docs/cloud.mdx +++ b/api_docs/cloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloud title: "cloud" image: https://source.unsplash.com/400x175/?github description: API docs for the cloud plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloud'] --- import cloudObj from './cloud.devdocs.json'; diff --git a/api_docs/cloud_data_migration.mdx b/api_docs/cloud_data_migration.mdx index 7bf7712e6416e..5d8f6d1a7a099 100644 --- a/api_docs/cloud_data_migration.mdx +++ b/api_docs/cloud_data_migration.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDataMigration title: "cloudDataMigration" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDataMigration plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudDataMigration'] --- import cloudDataMigrationObj from './cloud_data_migration.devdocs.json'; diff --git a/api_docs/cloud_defend.mdx b/api_docs/cloud_defend.mdx index efe9ab2122970..a9e7116900f71 100644 --- a/api_docs/cloud_defend.mdx +++ b/api_docs/cloud_defend.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDefend title: "cloudDefend" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDefend plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudDefend'] --- import cloudDefendObj from './cloud_defend.devdocs.json'; diff --git a/api_docs/cloud_security_posture.mdx b/api_docs/cloud_security_posture.mdx index b04ffbebe34d6..1bb2b7101b2df 100644 --- a/api_docs/cloud_security_posture.mdx +++ b/api_docs/cloud_security_posture.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudSecurityPosture title: "cloudSecurityPosture" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudSecurityPosture plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudSecurityPosture'] --- import cloudSecurityPostureObj from './cloud_security_posture.devdocs.json'; diff --git a/api_docs/console.mdx b/api_docs/console.mdx index b1ba453d27262..10268fde8986b 100644 --- a/api_docs/console.mdx +++ b/api_docs/console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/console title: "console" image: https://source.unsplash.com/400x175/?github description: API docs for the console plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'console'] --- import consoleObj from './console.devdocs.json'; diff --git a/api_docs/content_management.mdx b/api_docs/content_management.mdx index b346e7e7869ba..8f50afffae5f1 100644 --- a/api_docs/content_management.mdx +++ b/api_docs/content_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/contentManagement title: "contentManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the contentManagement plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'contentManagement'] --- import contentManagementObj from './content_management.devdocs.json'; diff --git a/api_docs/controls.mdx b/api_docs/controls.mdx index 828ebf90b5f85..d7354b0b00abe 100644 --- a/api_docs/controls.mdx +++ b/api_docs/controls.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/controls title: "controls" image: https://source.unsplash.com/400x175/?github description: API docs for the controls plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'controls'] --- import controlsObj from './controls.devdocs.json'; diff --git a/api_docs/custom_integrations.mdx b/api_docs/custom_integrations.mdx index 8953357ee4a5d..78775b0d0ce9d 100644 --- a/api_docs/custom_integrations.mdx +++ b/api_docs/custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/customIntegrations title: "customIntegrations" image: https://source.unsplash.com/400x175/?github description: API docs for the customIntegrations plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'customIntegrations'] --- import customIntegrationsObj from './custom_integrations.devdocs.json'; diff --git a/api_docs/dashboard.devdocs.json b/api_docs/dashboard.devdocs.json index 8cb2ab4a82d47..0a0720d46b3bc 100644 --- a/api_docs/dashboard.devdocs.json +++ b/api_docs/dashboard.devdocs.json @@ -812,6 +812,22 @@ "text": "HasAppContext" }, " & ", + { + "pluginId": "@kbn/presentation-containers", + "scope": "public", + "docId": "kibKbnPresentationContainersPluginApi", + "section": "def-public.HasRuntimeChildState", + "text": "HasRuntimeChildState" + }, + " & ", + { + "pluginId": "@kbn/presentation-containers", + "scope": "public", + "docId": "kibKbnPresentationContainersPluginApi", + "section": "def-public.HasSerializedChildState", + "text": "HasSerializedChildState" + }, + " & ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -835,6 +851,14 @@ "section": "def-public.PublishesDataViews", "text": "PublishesDataViews" }, + " & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesPanelDescription", + "text": "PublishesPanelDescription" + }, " & Pick<", { "pluginId": "@kbn/presentation-publishing", @@ -907,7 +931,15 @@ "section": "def-public.TracksOverlays", "text": "TracksOverlays" }, - " & { addFromLibrary: () => void; asyncResetToLastSavedState: () => Promise; controlGroupApi$: ", + " & { addFromLibrary: () => void; animatePanelTransforms$: ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishingSubject", + "text": "PublishingSubject" + }, + "; asyncResetToLastSavedState: () => Promise; controlGroupApi$: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -923,7 +955,15 @@ "section": "def-public.ControlGroupApi", "text": "ControlGroupApi" }, - " | undefined>; fullScreenMode$: ", + " | undefined>; embeddedExternally$: ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishingSubject", + "text": "PublishingSubject" + }, + "; fullScreenMode$: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -939,7 +979,27 @@ "section": "def-public.PublishingSubject", "text": "PublishingSubject" }, - "; forceRefresh: () => void; getDashboardPanelFromId: (id: string) => Promise<", + "; forceRefresh: () => void; getRuntimeStateForControlGroup: () => ", + "UnsavedPanelState", + " | undefined; getSerializedStateForControlGroup: () => ", + { + "pluginId": "@kbn/presentation-containers", + "scope": "public", + "docId": "kibKbnPresentationContainersPluginApi", + "section": "def-public.SerializedPanelState", + "text": "SerializedPanelState" + }, + "<", + { + "pluginId": "controls", + "scope": "common", + "docId": "kibControlsPluginApi", + "section": "def-common.ControlGroupSerializedState", + "text": "ControlGroupSerializedState" + }, + ">; getSettings: () => ", + "DashboardStateFromSettingsFlyout", + "; getDashboardPanelFromId: (id: string) => Promise<", { "pluginId": "dashboard", "scope": "common", @@ -955,15 +1015,7 @@ "section": "def-common.SavedObjectEmbeddableInput", "text": "SavedObjectEmbeddableInput" }, - ">>; getPanelsState: () => ", - { - "pluginId": "dashboard", - "scope": "common", - "docId": "kibDashboardPluginApi", - "section": "def-common.DashboardPanelMap", - "text": "DashboardPanelMap" - }, - "; hasOverlays$: ", + ">>; hasOverlays$: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -987,7 +1039,7 @@ "section": "def-public.PublishingSubject", "text": "PublishingSubject" }, - "; managed$: ", + "; highlightPanel: (panelRef: HTMLDivElement) => void; highlightPanelId$: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -995,7 +1047,39 @@ "section": "def-public.PublishingSubject", "text": "PublishingSubject" }, - "; runInteractiveSave: (interactionMode: ", + "; managed$: ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishingSubject", + "text": "PublishingSubject" + }, + "; panels$: ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishingSubject", + "text": "PublishingSubject" + }, + "<", + { + "pluginId": "dashboard", + "scope": "common", + "docId": "kibDashboardPluginApi", + "section": "def-common.DashboardPanelMap", + "text": "DashboardPanelMap" + }, + ">; registerChildApi: (api: ", + { + "pluginId": "embeddable", + "scope": "public", + "docId": "kibEmbeddablePluginApi", + "section": "def-public.DefaultEmbeddableApi", + "text": "DefaultEmbeddableApi" + }, + ") => void; runInteractiveSave: (interactionMode: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -1005,7 +1089,25 @@ }, ") => Promise<", "SaveDashboardReturn", - " | undefined>; runQuickSave: () => Promise; scrollToTop: () => void; setFilters: (filters?: ", + " | undefined>; runQuickSave: () => Promise; scrollToPanel: (panelRef: HTMLDivElement) => void; scrollToPanelId$: ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishingSubject", + "text": "PublishingSubject" + }, + "; scrollToTop: () => void; setControlGroupApi: (controlGroupApi: ", + { + "pluginId": "controls", + "scope": "public", + "docId": "kibControlsPluginApi", + "section": "def-public.ControlGroupApi", + "text": "ControlGroupApi" + }, + ") => void; setSettings: (settings: ", + "DashboardStateFromSettingsFlyout", + ") => void; setFilters: (filters?: ", { "pluginId": "@kbn/es-query", "scope": "common", @@ -1013,7 +1115,15 @@ "section": "def-common.Filter", "text": "Filter" }, - "[] | undefined) => void; setFullScreenMode: (fullScreenMode: boolean) => void; setQuery: (query?: ", + "[] | undefined) => void; setFullScreenMode: (fullScreenMode: boolean) => void; setPanels: (panels: ", + { + "pluginId": "dashboard", + "scope": "common", + "docId": "kibDashboardPluginApi", + "section": "def-common.DashboardPanelMap", + "text": "DashboardPanelMap" + }, + ") => void; setQuery: (query?: ", { "pluginId": "@kbn/es-query", "scope": "common", @@ -1037,7 +1147,55 @@ "section": "def-public.ViewMode", "text": "ViewMode" }, - ") => void; openSettingsFlyout: () => void; }" + ") => void; useMargins$: ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishingSubject", + "text": "PublishingSubject" + }, + "; uuid$: ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishingSubject", + "text": "PublishingSubject" + }, + "; untilEmbeddableLoaded: (id: string) => Promise<", + { + "pluginId": "embeddable", + "scope": "public", + "docId": "kibEmbeddablePluginApi", + "section": "def-public.IEmbeddable", + "text": "IEmbeddable" + }, + "<", + { + "pluginId": "embeddable", + "scope": "common", + "docId": "kibEmbeddablePluginApi", + "section": "def-common.EmbeddableInput", + "text": "EmbeddableInput" + }, + ", ", + { + "pluginId": "embeddable", + "scope": "public", + "docId": "kibEmbeddablePluginApi", + "section": "def-public.EmbeddableOutput", + "text": "EmbeddableOutput" + }, + ", any> | ", + { + "pluginId": "embeddable", + "scope": "public", + "docId": "kibEmbeddablePluginApi", + "section": "def-public.ErrorEmbeddable", + "text": "ErrorEmbeddable" + }, + ">; }" ], "path": "src/plugins/dashboard/public/dashboard_api/types.ts", "deprecated": false, diff --git a/api_docs/dashboard.mdx b/api_docs/dashboard.mdx index 787ea074ae56f..ba55f8b65d9d8 100644 --- a/api_docs/dashboard.mdx +++ b/api_docs/dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboard title: "dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboard plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboard'] --- import dashboardObj from './dashboard.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kib | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 128 | 0 | 123 | 13 | +| 128 | 0 | 123 | 15 | ## Client diff --git a/api_docs/dashboard_enhanced.mdx b/api_docs/dashboard_enhanced.mdx index b7193bdad55a2..cd01dba945656 100644 --- a/api_docs/dashboard_enhanced.mdx +++ b/api_docs/dashboard_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboardEnhanced title: "dashboardEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboardEnhanced plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboardEnhanced'] --- import dashboardEnhancedObj from './dashboard_enhanced.devdocs.json'; diff --git a/api_docs/data.mdx b/api_docs/data.mdx index aff51e317e940..41ea2c3b3fd68 100644 --- a/api_docs/data.mdx +++ b/api_docs/data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data title: "data" image: https://source.unsplash.com/400x175/?github description: API docs for the data plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data'] --- import dataObj from './data.devdocs.json'; diff --git a/api_docs/data_quality.mdx b/api_docs/data_quality.mdx index c9232391a7a37..d4901e57d18ef 100644 --- a/api_docs/data_quality.mdx +++ b/api_docs/data_quality.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataQuality title: "dataQuality" image: https://source.unsplash.com/400x175/?github description: API docs for the dataQuality plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataQuality'] --- import dataQualityObj from './data_quality.devdocs.json'; diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx index 18c76189bbdc1..5e76857e6f9e6 100644 --- a/api_docs/data_query.mdx +++ b/api_docs/data_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-query title: "data.query" image: https://source.unsplash.com/400x175/?github description: API docs for the data.query plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.query'] --- import dataQueryObj from './data_query.devdocs.json'; diff --git a/api_docs/data_search.mdx b/api_docs/data_search.mdx index 0a8beabf4a094..207bdf56aeb86 100644 --- a/api_docs/data_search.mdx +++ b/api_docs/data_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-search title: "data.search" image: https://source.unsplash.com/400x175/?github description: API docs for the data.search plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.search'] --- import dataSearchObj from './data_search.devdocs.json'; diff --git a/api_docs/data_usage.mdx b/api_docs/data_usage.mdx index 998b0ebf701f4..fe9525106d015 100644 --- a/api_docs/data_usage.mdx +++ b/api_docs/data_usage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataUsage title: "dataUsage" image: https://source.unsplash.com/400x175/?github description: API docs for the dataUsage plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataUsage'] --- import dataUsageObj from './data_usage.devdocs.json'; diff --git a/api_docs/data_view_editor.mdx b/api_docs/data_view_editor.mdx index 69b7fabcc9c15..0ee98e18ad3f8 100644 --- a/api_docs/data_view_editor.mdx +++ b/api_docs/data_view_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewEditor title: "dataViewEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewEditor plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewEditor'] --- import dataViewEditorObj from './data_view_editor.devdocs.json'; diff --git a/api_docs/data_view_field_editor.mdx b/api_docs/data_view_field_editor.mdx index 6726baec9021a..f21c5862645b9 100644 --- a/api_docs/data_view_field_editor.mdx +++ b/api_docs/data_view_field_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewFieldEditor title: "dataViewFieldEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewFieldEditor plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewFieldEditor'] --- import dataViewFieldEditorObj from './data_view_field_editor.devdocs.json'; diff --git a/api_docs/data_view_management.mdx b/api_docs/data_view_management.mdx index d6ef9036e376e..b62c8b1955dc3 100644 --- a/api_docs/data_view_management.mdx +++ b/api_docs/data_view_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewManagement title: "dataViewManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewManagement plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewManagement'] --- import dataViewManagementObj from './data_view_management.devdocs.json'; diff --git a/api_docs/data_views.mdx b/api_docs/data_views.mdx index f175b39c846b2..40df85143f5b4 100644 --- a/api_docs/data_views.mdx +++ b/api_docs/data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViews title: "dataViews" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViews plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViews'] --- import dataViewsObj from './data_views.devdocs.json'; diff --git a/api_docs/data_visualizer.mdx b/api_docs/data_visualizer.mdx index f5d9baae2b729..565c1f8bb3a4e 100644 --- a/api_docs/data_visualizer.mdx +++ b/api_docs/data_visualizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataVisualizer title: "dataVisualizer" image: https://source.unsplash.com/400x175/?github description: API docs for the dataVisualizer plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataVisualizer'] --- import dataVisualizerObj from './data_visualizer.devdocs.json'; diff --git a/api_docs/dataset_quality.mdx b/api_docs/dataset_quality.mdx index ed346bb4f6136..93cec4d7788aa 100644 --- a/api_docs/dataset_quality.mdx +++ b/api_docs/dataset_quality.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/datasetQuality title: "datasetQuality" image: https://source.unsplash.com/400x175/?github description: API docs for the datasetQuality plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'datasetQuality'] --- import datasetQualityObj from './dataset_quality.devdocs.json'; diff --git a/api_docs/deprecations_by_api.mdx b/api_docs/deprecations_by_api.mdx index 510fd282bfb48..e72849e0a05fb 100644 --- a/api_docs/deprecations_by_api.mdx +++ b/api_docs/deprecations_by_api.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByApi slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-api title: Deprecated API usage by API description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index 90decb28037bf..9f47e2ab1bd18 100644 --- a/api_docs/deprecations_by_plugin.mdx +++ b/api_docs/deprecations_by_plugin.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByPlugin slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-plugin title: Deprecated API usage by plugin description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -1344,8 +1344,8 @@ migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/ | | [wrap_search_source_client.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_preview/api/preview_rules/wrap_search_source_client.test.ts#:~:text=fetch), [wrap_search_source_client.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_preview/api/preview_rules/wrap_search_source_client.test.ts#:~:text=fetch), [wrap_search_source_client.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_preview/api/preview_rules/wrap_search_source_client.test.ts#:~:text=fetch), [wrap_search_source_client.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_preview/api/preview_rules/wrap_search_source_client.test.ts#:~:text=fetch) | - | | | [api.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/hooks/eql/api.ts#:~:text=options) | - | | | [create_sourcerer_data_view.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/sourcerer/containers/create_sourcerer_data_view.ts#:~:text=title), [create_sourcerer_data_view.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/sourcerer/containers/create_sourcerer_data_view.ts#:~:text=title), [create_sourcerer_data_view.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/sourcerer/containers/create_sourcerer_data_view.ts#:~:text=title), [validators.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/eql_query_bar/validators.ts#:~:text=title) | - | -| | [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/view/index.tsx#:~:text=policy_id), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/view/index.tsx#:~:text=policy_id), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/view/index.tsx#:~:text=policy_id), [fleet_services.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/common/fleet_services.ts#:~:text=policy_id), [fleet_services.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/common/fleet_services.ts#:~:text=policy_id), [endpoint_metadata_service.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/services/metadata/endpoint_metadata_service.test.ts#:~:text=policy_id), [endpoint_package_policies.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/routes/metadata/support/endpoint_package_policies.test.ts#:~:text=policy_id), [policy_settings_middleware.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/policy/store/policy_details/middleware/policy_settings_middleware.ts#:~:text=policy_id), [policy_settings_middleware.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/policy/store/policy_details/middleware/policy_settings_middleware.ts#:~:text=policy_id), [index.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/policy/store/policy_details/index.test.ts#:~:text=policy_id) | - | -| | [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/view/index.tsx#:~:text=policy_id), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/view/index.tsx#:~:text=policy_id), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/view/index.tsx#:~:text=policy_id), [fleet_services.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/common/fleet_services.ts#:~:text=policy_id), [fleet_services.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/common/fleet_services.ts#:~:text=policy_id), [endpoint_metadata_service.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/services/metadata/endpoint_metadata_service.test.ts#:~:text=policy_id), [endpoint_package_policies.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/routes/metadata/support/endpoint_package_policies.test.ts#:~:text=policy_id), [policy_settings_middleware.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/policy/store/policy_details/middleware/policy_settings_middleware.ts#:~:text=policy_id), [policy_settings_middleware.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/policy/store/policy_details/middleware/policy_settings_middleware.ts#:~:text=policy_id), [index.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/policy/store/policy_details/index.test.ts#:~:text=policy_id) | - | +| | [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/view/index.tsx#:~:text=policy_id), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/view/index.tsx#:~:text=policy_id), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/view/index.tsx#:~:text=policy_id), [fleet_services.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/common/fleet_services.ts#:~:text=policy_id), [fleet_services.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/common/fleet_services.ts#:~:text=policy_id), [endpoint_metadata_service.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/services/metadata/endpoint_metadata_service.test.ts#:~:text=policy_id), [endpoint_package_policies.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/routes/metadata/support/endpoint_package_policies.test.ts#:~:text=policy_id), [policy_settings_middleware.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/policy/store/policy_details/middleware/policy_settings_middleware.ts#:~:text=policy_id), [index.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/policy/store/policy_details/index.test.ts#:~:text=policy_id) | - | +| | [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/view/index.tsx#:~:text=policy_id), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/view/index.tsx#:~:text=policy_id), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/view/index.tsx#:~:text=policy_id), [fleet_services.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/common/fleet_services.ts#:~:text=policy_id), [fleet_services.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/common/fleet_services.ts#:~:text=policy_id), [endpoint_metadata_service.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/services/metadata/endpoint_metadata_service.test.ts#:~:text=policy_id), [endpoint_package_policies.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/routes/metadata/support/endpoint_package_policies.test.ts#:~:text=policy_id), [policy_settings_middleware.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/policy/store/policy_details/middleware/policy_settings_middleware.ts#:~:text=policy_id), [index.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/policy/store/policy_details/index.test.ts#:~:text=policy_id) | - | | | [policy_config.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/license/policy_config.test.ts#:~:text=mode), [policy_config.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/license/policy_config.test.ts#:~:text=mode), [policy_config.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/license/policy_config.test.ts#:~:text=mode), [fleet_integration.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/fleet_integration.test.ts#:~:text=mode), [fleet_integration.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/fleet_integration.test.ts#:~:text=mode), [create_default_policy.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/handlers/create_default_policy.test.ts#:~:text=mode), [create_default_policy.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/handlers/create_default_policy.test.ts#:~:text=mode), [license_watch.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/policy/license_watch.test.ts#:~:text=mode), [license_watch.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/policy/license_watch.test.ts#:~:text=mode), [license_watch.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/policy/license_watch.test.ts#:~:text=mode)+ 7 more | 8.8.0 | | | [policy_config.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/license/policy_config.test.ts#:~:text=mode), [policy_config.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/license/policy_config.test.ts#:~:text=mode), [policy_config.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/license/policy_config.test.ts#:~:text=mode), [fleet_integration.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/fleet_integration.test.ts#:~:text=mode), [fleet_integration.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/fleet_integration.test.ts#:~:text=mode), [create_default_policy.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/handlers/create_default_policy.test.ts#:~:text=mode), [create_default_policy.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/handlers/create_default_policy.test.ts#:~:text=mode), [license_watch.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/policy/license_watch.test.ts#:~:text=mode), [license_watch.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/policy/license_watch.test.ts#:~:text=mode), [license_watch.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/policy/license_watch.test.ts#:~:text=mode)+ 7 more | 8.8.0 | | | [get_is_alert_suppression_active.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_is_alert_suppression_active.ts#:~:text=license%24), [create_threat_signals.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/threat_mapping/create_threat_signals.ts#:~:text=license%24), [query.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/query/query.ts#:~:text=license%24), [threshold.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/threshold/threshold.ts#:~:text=license%24), [get_is_alert_suppression_active.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_is_alert_suppression_active.test.ts#:~:text=license%24), [get_is_alert_suppression_active.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_is_alert_suppression_active.test.ts#:~:text=license%24), [get_is_alert_suppression_active.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_is_alert_suppression_active.test.ts#:~:text=license%24) | 8.8.0 | @@ -1366,16 +1366,16 @@ migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/ | | [links.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/links.ts#:~:text=authc), [hooks.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/lib/kibana/hooks.ts#:~:text=authc) | - | | | [use_bulk_get_user_profiles.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/user_profiles/use_bulk_get_user_profiles.tsx#:~:text=userProfiles), [use_get_current_user_profile.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/user_profiles/use_get_current_user_profile.tsx#:~:text=userProfiles), [overlay.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/assistant/overlay.tsx#:~:text=userProfiles) | - | | | [request_context_factory.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/request_context_factory.ts#:~:text=audit), [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/plugin.ts#:~:text=audit) | - | -| | [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/constants.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/constants.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [api_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/service/api_client.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [api_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/service/api_client.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [api_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/service/api_client.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [policy_hooks.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_hooks.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [policy_hooks.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_hooks.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [lists.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/artifacts/lists.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [lists.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/artifacts/lists.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [trusted_app_validator.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lists_integration/endpoint/validators/trusted_app_validator.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID)+ 25 more | - | +| | [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/constants.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/constants.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [policy_hooks.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_hooks.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [policy_hooks.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_hooks.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [lists.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/artifacts/lists.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [lists.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/artifacts/lists.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [trusted_app_validator.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lists_integration/endpoint/validators/trusted_app_validator.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [trusted_app_validator.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lists_integration/endpoint/validators/trusted_app_validator.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [exceptions_list_item_generator.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/endpoint/data_generators/exceptions_list_item_generator.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [exceptions_list_item_generator.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/endpoint/data_generators/exceptions_list_item_generator.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID)+ 22 more | - | | | [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/constants.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_NAME), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/constants.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_NAME), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/trusted_apps/index.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_NAME), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/trusted_apps/index.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_NAME) | - | | | [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/constants.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_DESCRIPTION), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/constants.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_DESCRIPTION), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/trusted_apps/index.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_DESCRIPTION), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/trusted_apps/index.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_DESCRIPTION) | - | -| | [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/event_filters/constants.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_ID), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/event_filters/constants.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_ID), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/event_filters/constants.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_ID), [form.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/event_filters/view/components/form.tsx#:~:text=ENDPOINT_EVENT_FILTERS_LIST_ID), [form.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/event_filters/view/components/form.tsx#:~:text=ENDPOINT_EVENT_FILTERS_LIST_ID), [utils.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/event_filters/view/utils.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_ID), [utils.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/event_filters/view/utils.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_ID), [service_actions.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/event_filters/service/service_actions.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_ID), [service_actions.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/event_filters/service/service_actions.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_ID), [service_actions.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/event_filters/service/service_actions.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_ID)+ 24 more | - | +| | [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/event_filters/constants.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_ID), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/event_filters/constants.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_ID), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/event_filters/constants.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_ID), [form.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/event_filters/view/components/form.tsx#:~:text=ENDPOINT_EVENT_FILTERS_LIST_ID), [form.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/event_filters/view/components/form.tsx#:~:text=ENDPOINT_EVENT_FILTERS_LIST_ID), [utils.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/event_filters/view/utils.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_ID), [utils.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/event_filters/view/utils.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_ID), [service_actions.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/event_filters/service/service_actions.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_ID), [service_actions.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/event_filters/service/service_actions.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_ID), [service_actions.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/event_filters/service/service_actions.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_ID)+ 21 more | - | | | [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/event_filters/constants.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_NAME), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/event_filters/constants.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_NAME), [create_event_filters.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/handlers/create_event_filters.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_NAME), [create_event_filters.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/handlers/create_event_filters.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_NAME), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/event_filters/index.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_NAME), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/event_filters/index.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_NAME) | - | | | [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/event_filters/constants.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_DESCRIPTION), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/event_filters/constants.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_DESCRIPTION), [create_event_filters.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/handlers/create_event_filters.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_DESCRIPTION), [create_event_filters.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/handlers/create_event_filters.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_DESCRIPTION), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/event_filters/index.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_DESCRIPTION), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/event_filters/index.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_DESCRIPTION) | - | -| | [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/host_isolation_exceptions/constants.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_ID), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/host_isolation_exceptions/constants.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_ID), [host_isolation_exceptions_api_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/host_isolation_exceptions/host_isolation_exceptions_api_client.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_ID), [host_isolation_exceptions_api_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/host_isolation_exceptions/host_isolation_exceptions_api_client.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_ID), [host_isolation_exceptions_api_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/host_isolation_exceptions/host_isolation_exceptions_api_client.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_ID), [lists.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/artifacts/lists.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_ID), [lists.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/artifacts/lists.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_ID), [host_isolation_exceptions_validator.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lists_integration/endpoint/validators/host_isolation_exceptions_validator.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_ID), [host_isolation_exceptions_validator.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lists_integration/endpoint/validators/host_isolation_exceptions_validator.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_ID), [exceptions_list_item_generator.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/endpoint/data_generators/exceptions_list_item_generator.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_ID)+ 8 more | - | +| | [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/host_isolation_exceptions/constants.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_ID), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/host_isolation_exceptions/constants.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_ID), [lists.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/artifacts/lists.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_ID), [lists.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/artifacts/lists.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_ID), [host_isolation_exceptions_validator.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lists_integration/endpoint/validators/host_isolation_exceptions_validator.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_ID), [host_isolation_exceptions_validator.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lists_integration/endpoint/validators/host_isolation_exceptions_validator.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_ID), [exceptions_list_item_generator.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/endpoint/data_generators/exceptions_list_item_generator.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_ID), [exceptions_list_item_generator.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/endpoint/data_generators/exceptions_list_item_generator.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_ID), [host_isolation_exception_generator.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/endpoint/data_generators/host_isolation_exception_generator.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_ID), [host_isolation_exception_generator.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/endpoint/data_generators/host_isolation_exception_generator.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_ID)+ 5 more | - | | | [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/host_isolation_exceptions/constants.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_NAME), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/host_isolation_exceptions/constants.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_NAME), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/host_isolation_exceptions/index.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_NAME), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/host_isolation_exceptions/index.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_NAME) | - | | | [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/host_isolation_exceptions/constants.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_DESCRIPTION), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/host_isolation_exceptions/constants.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_DESCRIPTION), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/host_isolation_exceptions/index.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_DESCRIPTION), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/host_isolation_exceptions/index.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_DESCRIPTION) | - | -| | [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/blocklist/constants.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/blocklist/constants.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [blocklists_api_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/blocklist/services/blocklists_api_client.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [blocklists_api_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/blocklist/services/blocklists_api_client.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [blocklists_api_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/blocklist/services/blocklists_api_client.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [policy_hooks.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_hooks.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [policy_hooks.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_hooks.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [lists.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/artifacts/lists.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [lists.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/artifacts/lists.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [exceptions_list_item_generator.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/endpoint/data_generators/exceptions_list_item_generator.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID)+ 6 more | - | +| | [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/blocklist/constants.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/blocklist/constants.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [policy_hooks.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_hooks.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [policy_hooks.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_hooks.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [lists.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/artifacts/lists.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [lists.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/artifacts/lists.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [exceptions_list_item_generator.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/endpoint/data_generators/exceptions_list_item_generator.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [exceptions_list_item_generator.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/endpoint/data_generators/exceptions_list_item_generator.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/blocklists/index.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/blocklists/index.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID)+ 3 more | - | | | [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/blocklist/constants.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_NAME), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/blocklist/constants.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_NAME), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/blocklists/index.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_NAME), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/blocklists/index.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_NAME) | - | | | [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/blocklist/constants.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_DESCRIPTION), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/blocklist/constants.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_DESCRIPTION), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/blocklists/index.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_DESCRIPTION), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/blocklists/index.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_DESCRIPTION) | - | | | [use_colors.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/resolver/view/use_colors.ts#:~:text=darkMode), [use_colors.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/resolver/view/use_colors.ts#:~:text=darkMode), [use_colors.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/resolver/view/use_colors.ts#:~:text=darkMode), [use_colors.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/resolver/view/use_colors.ts#:~:text=darkMode), [use_colors.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/resolver/view/use_colors.ts#:~:text=darkMode) | - | diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index 338a02ad98539..c1ddf8234bbff 100644 --- a/api_docs/deprecations_by_team.mdx +++ b/api_docs/deprecations_by_team.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsDueByTeam slug: /kibana-dev-docs/api-meta/deprecations-due-by-team title: Deprecated APIs due to be removed, by team description: Lists the teams that are referencing deprecated APIs with a remove by date. -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index 657e376b63954..23a2f5927e310 100644 --- a/api_docs/dev_tools.mdx +++ b/api_docs/dev_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/devTools title: "devTools" image: https://source.unsplash.com/400x175/?github description: API docs for the devTools plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'devTools'] --- import devToolsObj from './dev_tools.devdocs.json'; diff --git a/api_docs/discover.mdx b/api_docs/discover.mdx index 41762cbdf56fe..75be1da771d08 100644 --- a/api_docs/discover.mdx +++ b/api_docs/discover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discover title: "discover" image: https://source.unsplash.com/400x175/?github description: API docs for the discover plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discover'] --- import discoverObj from './discover.devdocs.json'; diff --git a/api_docs/discover_enhanced.mdx b/api_docs/discover_enhanced.mdx index 7ba88702a6dd0..79e40d50372ed 100644 --- a/api_docs/discover_enhanced.mdx +++ b/api_docs/discover_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverEnhanced title: "discoverEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverEnhanced plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced'] --- import discoverEnhancedObj from './discover_enhanced.devdocs.json'; diff --git a/api_docs/discover_shared.mdx b/api_docs/discover_shared.mdx index cb18e2eb1833a..3bfcda67b08db 100644 --- a/api_docs/discover_shared.mdx +++ b/api_docs/discover_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverShared title: "discoverShared" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverShared plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverShared'] --- import discoverSharedObj from './discover_shared.devdocs.json'; diff --git a/api_docs/ecs_data_quality_dashboard.mdx b/api_docs/ecs_data_quality_dashboard.mdx index b6daf0319568b..2093ab448bd5f 100644 --- a/api_docs/ecs_data_quality_dashboard.mdx +++ b/api_docs/ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ecsDataQualityDashboard title: "ecsDataQualityDashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the ecsDataQualityDashboard plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ecsDataQualityDashboard'] --- import ecsDataQualityDashboardObj from './ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/elastic_assistant.mdx b/api_docs/elastic_assistant.mdx index a7fab4235ca9f..4e21c15dc8b24 100644 --- a/api_docs/elastic_assistant.mdx +++ b/api_docs/elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/elasticAssistant title: "elasticAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the elasticAssistant plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'elasticAssistant'] --- import elasticAssistantObj from './elastic_assistant.devdocs.json'; diff --git a/api_docs/embeddable.devdocs.json b/api_docs/embeddable.devdocs.json index 6b628765d44af..c0489ce48f626 100644 --- a/api_docs/embeddable.devdocs.json +++ b/api_docs/embeddable.devdocs.json @@ -1000,7 +1000,7 @@ "section": "def-public.IEmbeddable", "text": "IEmbeddable" }, - ">(type: string, explicitInput: Partial, attributes?: unknown) => Promise>(type: string, explicitInput: Partial, attributes?: unknown) => Promise<", { "pluginId": "embeddable", "scope": "public", @@ -1008,7 +1008,7 @@ "section": "def-public.ErrorEmbeddable", "text": "ErrorEmbeddable" }, - ">" + " | E>" ], "path": "src/plugins/embeddable/public/lib/containers/container.ts", "deprecated": false, @@ -10322,7 +10322,7 @@ "section": "def-public.ContainerOutput", "text": "ContainerOutput" }, - "> | undefined) => Promise | undefined) => Promise<", { "pluginId": "embeddable", "scope": "public", @@ -10330,7 +10330,7 @@ "section": "def-public.ErrorEmbeddable", "text": "ErrorEmbeddable" }, - ">" + " | TEmbeddable>" ], "path": "src/plugins/embeddable/public/lib/embeddables/embeddable_factory.ts", "deprecated": false, @@ -10443,7 +10443,7 @@ "section": "def-public.ContainerOutput", "text": "ContainerOutput" }, - "> | undefined) => Promise | undefined) => Promise<", { "pluginId": "embeddable", "scope": "public", @@ -10451,7 +10451,7 @@ "section": "def-public.ErrorEmbeddable", "text": "ErrorEmbeddable" }, - " | undefined>" + " | TEmbeddable | undefined>" ], "path": "src/plugins/embeddable/public/lib/embeddables/embeddable_factory.ts", "deprecated": false, diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx index a3d122feb00d8..6ded01a4ed3d1 100644 --- a/api_docs/embeddable.mdx +++ b/api_docs/embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddable title: "embeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddable plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'embeddable'] --- import embeddableObj from './embeddable.devdocs.json'; diff --git a/api_docs/embeddable_enhanced.mdx b/api_docs/embeddable_enhanced.mdx index 422668bbf2dcd..227bde7e254b8 100644 --- a/api_docs/embeddable_enhanced.mdx +++ b/api_docs/embeddable_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddableEnhanced title: "embeddableEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddableEnhanced plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'embeddableEnhanced'] --- import embeddableEnhancedObj from './embeddable_enhanced.devdocs.json'; diff --git a/api_docs/encrypted_saved_objects.mdx b/api_docs/encrypted_saved_objects.mdx index 932f0d19f5124..685d8eed5cd78 100644 --- a/api_docs/encrypted_saved_objects.mdx +++ b/api_docs/encrypted_saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/encryptedSavedObjects title: "encryptedSavedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the encryptedSavedObjects plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'encryptedSavedObjects'] --- import encryptedSavedObjectsObj from './encrypted_saved_objects.devdocs.json'; diff --git a/api_docs/enterprise_search.mdx b/api_docs/enterprise_search.mdx index 5ab0d4227eda9..53924a85e4733 100644 --- a/api_docs/enterprise_search.mdx +++ b/api_docs/enterprise_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/enterpriseSearch title: "enterpriseSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the enterpriseSearch plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'enterpriseSearch'] --- import enterpriseSearchObj from './enterprise_search.devdocs.json'; diff --git a/api_docs/entities_data_access.mdx b/api_docs/entities_data_access.mdx index c6f6f28744668..9b144d2ecbdcb 100644 --- a/api_docs/entities_data_access.mdx +++ b/api_docs/entities_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/entitiesDataAccess title: "entitiesDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the entitiesDataAccess plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'entitiesDataAccess'] --- import entitiesDataAccessObj from './entities_data_access.devdocs.json'; diff --git a/api_docs/entity_manager.mdx b/api_docs/entity_manager.mdx index 9af13b2901cad..a3d66178a5d7e 100644 --- a/api_docs/entity_manager.mdx +++ b/api_docs/entity_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/entityManager title: "entityManager" image: https://source.unsplash.com/400x175/?github description: API docs for the entityManager plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'entityManager'] --- import entityManagerObj from './entity_manager.devdocs.json'; diff --git a/api_docs/es_ui_shared.mdx b/api_docs/es_ui_shared.mdx index cfbbe006a111b..9b391cf586ced 100644 --- a/api_docs/es_ui_shared.mdx +++ b/api_docs/es_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esUiShared title: "esUiShared" image: https://source.unsplash.com/400x175/?github description: API docs for the esUiShared plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared'] --- import esUiSharedObj from './es_ui_shared.devdocs.json'; diff --git a/api_docs/esql.devdocs.json b/api_docs/esql.devdocs.json index 772be100e7465..29c31d5f3b749 100644 --- a/api_docs/esql.devdocs.json +++ b/api_docs/esql.devdocs.json @@ -5,19 +5,19 @@ "functions": [ { "parentPluginId": "esql", - "id": "def-public.TextBasedLangEditor", + "id": "def-public.ESQLLangEditor", "type": "Function", "tags": [], - "label": "TextBasedLangEditor", + "label": "ESQLLangEditor", "description": [], "signature": [ "(props: ", { - "pluginId": "@kbn/text-based-editor", + "pluginId": "@kbn/esql-editor", "scope": "public", - "docId": "kibKbnTextBasedEditorPluginApi", - "section": "def-public.TextBasedLanguagesEditorProps", - "text": "TextBasedLanguagesEditorProps" + "docId": "kibKbnEsqlEditorPluginApi", + "section": "def-public.ESQLEditorProps", + "text": "ESQLEditorProps" }, ") => JSX.Element" ], @@ -27,18 +27,18 @@ "children": [ { "parentPluginId": "esql", - "id": "def-public.TextBasedLangEditor.$1", + "id": "def-public.ESQLLangEditor.$1", "type": "Object", "tags": [], "label": "props", "description": [], "signature": [ { - "pluginId": "@kbn/text-based-editor", + "pluginId": "@kbn/esql-editor", "scope": "public", - "docId": "kibKbnTextBasedEditorPluginApi", - "section": "def-public.TextBasedLanguagesEditorProps", - "text": "TextBasedLanguagesEditorProps" + "docId": "kibKbnEsqlEditorPluginApi", + "section": "def-public.ESQLEditorProps", + "text": "ESQLEditorProps" } ], "path": "src/plugins/esql/public/create_editor.tsx", @@ -54,62 +54,18 @@ "interfaces": [ { "parentPluginId": "esql", - "id": "def-public.EsqlPluginStart", - "type": "Interface", - "tags": [], - "label": "EsqlPluginStart", - "description": [], - "path": "src/plugins/esql/public/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "esql", - "id": "def-public.EsqlPluginStart.Editor", - "type": "CompoundType", - "tags": [], - "label": "Editor", - "description": [], - "signature": [ - "React.ComponentClass<", - { - "pluginId": "@kbn/text-based-editor", - "scope": "public", - "docId": "kibKbnTextBasedEditorPluginApi", - "section": "def-public.TextBasedLanguagesEditorProps", - "text": "TextBasedLanguagesEditorProps" - }, - ", any> | React.FunctionComponent<", - { - "pluginId": "@kbn/text-based-editor", - "scope": "public", - "docId": "kibKbnTextBasedEditorPluginApi", - "section": "def-public.TextBasedLanguagesEditorProps", - "text": "TextBasedLanguagesEditorProps" - }, - ">" - ], - "path": "src/plugins/esql/public/types.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "esql", - "id": "def-public.TextBasedLanguagesEditorProps", + "id": "def-public.ESQLEditorProps", "type": "Interface", "tags": [], - "label": "TextBasedLanguagesEditorProps", + "label": "ESQLEditorProps", "description": [], - "path": "packages/kbn-text-based-editor/src/types.ts", + "path": "packages/kbn-esql-editor/src/types.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "esql", - "id": "def-public.TextBasedLanguagesEditorProps.query", + "id": "def-public.ESQLEditorProps.query", "type": "Object", "tags": [], "label": "query", @@ -119,13 +75,13 @@ "signature": [ "{ esql: string; }" ], - "path": "packages/kbn-text-based-editor/src/types.ts", + "path": "packages/kbn-esql-editor/src/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "esql", - "id": "def-public.TextBasedLanguagesEditorProps.onTextLangQueryChange", + "id": "def-public.ESQLEditorProps.onTextLangQueryChange", "type": "Function", "tags": [], "label": "onTextLangQueryChange", @@ -143,13 +99,13 @@ }, ") => void" ], - "path": "packages/kbn-text-based-editor/src/types.ts", + "path": "packages/kbn-esql-editor/src/types.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "esql", - "id": "def-public.TextBasedLanguagesEditorProps.onTextLangQueryChange.$1", + "id": "def-public.ESQLEditorProps.onTextLangQueryChange.$1", "type": "Object", "tags": [], "label": "query", @@ -163,7 +119,7 @@ "text": "AggregateQuery" } ], - "path": "packages/kbn-text-based-editor/src/types.ts", + "path": "packages/kbn-esql-editor/src/types.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -173,7 +129,7 @@ }, { "parentPluginId": "esql", - "id": "def-public.TextBasedLanguagesEditorProps.onTextLangQuerySubmit", + "id": "def-public.ESQLEditorProps.onTextLangQuerySubmit", "type": "Function", "tags": [], "label": "onTextLangQuerySubmit", @@ -191,13 +147,13 @@ }, " | undefined, abortController?: AbortController | undefined) => Promise" ], - "path": "packages/kbn-text-based-editor/src/types.ts", + "path": "packages/kbn-esql-editor/src/types.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "esql", - "id": "def-public.TextBasedLanguagesEditorProps.onTextLangQuerySubmit.$1", + "id": "def-public.ESQLEditorProps.onTextLangQuerySubmit.$1", "type": "Object", "tags": [], "label": "query", @@ -212,14 +168,14 @@ }, " | undefined" ], - "path": "packages/kbn-text-based-editor/src/types.ts", + "path": "packages/kbn-esql-editor/src/types.ts", "deprecated": false, "trackAdoption": false, "isRequired": false }, { "parentPluginId": "esql", - "id": "def-public.TextBasedLanguagesEditorProps.onTextLangQuerySubmit.$2", + "id": "def-public.ESQLEditorProps.onTextLangQuerySubmit.$2", "type": "Object", "tags": [], "label": "abortController", @@ -227,7 +183,7 @@ "signature": [ "AbortController | undefined" ], - "path": "packages/kbn-text-based-editor/src/types.ts", + "path": "packages/kbn-esql-editor/src/types.ts", "deprecated": false, "trackAdoption": false, "isRequired": false @@ -237,7 +193,7 @@ }, { "parentPluginId": "esql", - "id": "def-public.TextBasedLanguagesEditorProps.detectedTimestamp", + "id": "def-public.ESQLEditorProps.detectedTimestamp", "type": "string", "tags": [], "label": "detectedTimestamp", @@ -247,13 +203,13 @@ "signature": [ "string | undefined" ], - "path": "packages/kbn-text-based-editor/src/types.ts", + "path": "packages/kbn-esql-editor/src/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "esql", - "id": "def-public.TextBasedLanguagesEditorProps.errors", + "id": "def-public.ESQLEditorProps.errors", "type": "Array", "tags": [], "label": "errors", @@ -263,13 +219,13 @@ "signature": [ "Error[] | undefined" ], - "path": "packages/kbn-text-based-editor/src/types.ts", + "path": "packages/kbn-esql-editor/src/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "esql", - "id": "def-public.TextBasedLanguagesEditorProps.warning", + "id": "def-public.ESQLEditorProps.warning", "type": "string", "tags": [], "label": "warning", @@ -279,13 +235,13 @@ "signature": [ "string | undefined" ], - "path": "packages/kbn-text-based-editor/src/types.ts", + "path": "packages/kbn-esql-editor/src/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "esql", - "id": "def-public.TextBasedLanguagesEditorProps.isLoading", + "id": "def-public.ESQLEditorProps.isLoading", "type": "CompoundType", "tags": [], "label": "isLoading", @@ -295,13 +251,13 @@ "signature": [ "boolean | undefined" ], - "path": "packages/kbn-text-based-editor/src/types.ts", + "path": "packages/kbn-esql-editor/src/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "esql", - "id": "def-public.TextBasedLanguagesEditorProps.isDisabled", + "id": "def-public.ESQLEditorProps.isDisabled", "type": "CompoundType", "tags": [], "label": "isDisabled", @@ -311,13 +267,13 @@ "signature": [ "boolean | undefined" ], - "path": "packages/kbn-text-based-editor/src/types.ts", + "path": "packages/kbn-esql-editor/src/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "esql", - "id": "def-public.TextBasedLanguagesEditorProps.dataTestSubj", + "id": "def-public.ESQLEditorProps.dataTestSubj", "type": "string", "tags": [], "label": "dataTestSubj", @@ -325,13 +281,13 @@ "signature": [ "string | undefined" ], - "path": "packages/kbn-text-based-editor/src/types.ts", + "path": "packages/kbn-esql-editor/src/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "esql", - "id": "def-public.TextBasedLanguagesEditorProps.hideRunQueryText", + "id": "def-public.ESQLEditorProps.hideRunQueryText", "type": "CompoundType", "tags": [], "label": "hideRunQueryText", @@ -341,13 +297,13 @@ "signature": [ "boolean | undefined" ], - "path": "packages/kbn-text-based-editor/src/types.ts", + "path": "packages/kbn-esql-editor/src/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "esql", - "id": "def-public.TextBasedLanguagesEditorProps.editorIsInline", + "id": "def-public.ESQLEditorProps.editorIsInline", "type": "CompoundType", "tags": [], "label": "editorIsInline", @@ -357,13 +313,13 @@ "signature": [ "boolean | undefined" ], - "path": "packages/kbn-text-based-editor/src/types.ts", + "path": "packages/kbn-esql-editor/src/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "esql", - "id": "def-public.TextBasedLanguagesEditorProps.disableSubmitAction", + "id": "def-public.ESQLEditorProps.disableSubmitAction", "type": "CompoundType", "tags": [], "label": "disableSubmitAction", @@ -373,13 +329,13 @@ "signature": [ "boolean | undefined" ], - "path": "packages/kbn-text-based-editor/src/types.ts", + "path": "packages/kbn-esql-editor/src/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "esql", - "id": "def-public.TextBasedLanguagesEditorProps.allowQueryCancellation", + "id": "def-public.ESQLEditorProps.allowQueryCancellation", "type": "CompoundType", "tags": [], "label": "allowQueryCancellation", @@ -389,13 +345,13 @@ "signature": [ "boolean | undefined" ], - "path": "packages/kbn-text-based-editor/src/types.ts", + "path": "packages/kbn-esql-editor/src/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "esql", - "id": "def-public.TextBasedLanguagesEditorProps.hideTimeFilterInfo", + "id": "def-public.ESQLEditorProps.hideTimeFilterInfo", "type": "CompoundType", "tags": [], "label": "hideTimeFilterInfo", @@ -405,13 +361,13 @@ "signature": [ "boolean | undefined" ], - "path": "packages/kbn-text-based-editor/src/types.ts", + "path": "packages/kbn-esql-editor/src/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "esql", - "id": "def-public.TextBasedLanguagesEditorProps.hideQueryHistory", + "id": "def-public.ESQLEditorProps.hideQueryHistory", "type": "CompoundType", "tags": [], "label": "hideQueryHistory", @@ -421,13 +377,13 @@ "signature": [ "boolean | undefined" ], - "path": "packages/kbn-text-based-editor/src/types.ts", + "path": "packages/kbn-esql-editor/src/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "esql", - "id": "def-public.TextBasedLanguagesEditorProps.hasOutline", + "id": "def-public.ESQLEditorProps.hasOutline", "type": "CompoundType", "tags": [], "label": "hasOutline", @@ -437,13 +393,13 @@ "signature": [ "boolean | undefined" ], - "path": "packages/kbn-text-based-editor/src/types.ts", + "path": "packages/kbn-esql-editor/src/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "esql", - "id": "def-public.TextBasedLanguagesEditorProps.displayDocumentationAsFlyout", + "id": "def-public.ESQLEditorProps.displayDocumentationAsFlyout", "type": "CompoundType", "tags": [], "label": "displayDocumentationAsFlyout", @@ -453,7 +409,51 @@ "signature": [ "boolean | undefined" ], - "path": "packages/kbn-text-based-editor/src/types.ts", + "path": "packages/kbn-esql-editor/src/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "esql", + "id": "def-public.EsqlPluginStart", + "type": "Interface", + "tags": [], + "label": "EsqlPluginStart", + "description": [], + "path": "src/plugins/esql/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "esql", + "id": "def-public.EsqlPluginStart.Editor", + "type": "CompoundType", + "tags": [], + "label": "Editor", + "description": [], + "signature": [ + "React.ComponentClass<", + { + "pluginId": "@kbn/esql-editor", + "scope": "public", + "docId": "kibKbnEsqlEditorPluginApi", + "section": "def-public.ESQLEditorProps", + "text": "ESQLEditorProps" + }, + ", any> | React.FunctionComponent<", + { + "pluginId": "@kbn/esql-editor", + "scope": "public", + "docId": "kibKbnEsqlEditorPluginApi", + "section": "def-public.ESQLEditorProps", + "text": "ESQLEditorProps" + }, + ">" + ], + "path": "src/plugins/esql/public/types.ts", "deprecated": false, "trackAdoption": false } diff --git a/api_docs/esql.mdx b/api_docs/esql.mdx index 69b083d4da898..545ff3b813c0b 100644 --- a/api_docs/esql.mdx +++ b/api_docs/esql.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esql title: "esql" image: https://source.unsplash.com/400x175/?github description: API docs for the esql plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esql'] --- import esqlObj from './esql.devdocs.json'; diff --git a/api_docs/esql_data_grid.mdx b/api_docs/esql_data_grid.mdx index bc93b6299f454..2ad129aebbd84 100644 --- a/api_docs/esql_data_grid.mdx +++ b/api_docs/esql_data_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esqlDataGrid title: "esqlDataGrid" image: https://source.unsplash.com/400x175/?github description: API docs for the esqlDataGrid plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esqlDataGrid'] --- import esqlDataGridObj from './esql_data_grid.devdocs.json'; diff --git a/api_docs/event_annotation.mdx b/api_docs/event_annotation.mdx index 048fb53c21021..ae7e07315f425 100644 --- a/api_docs/event_annotation.mdx +++ b/api_docs/event_annotation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotation title: "eventAnnotation" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotation plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotation'] --- import eventAnnotationObj from './event_annotation.devdocs.json'; diff --git a/api_docs/event_annotation_listing.mdx b/api_docs/event_annotation_listing.mdx index 2d0f4d86336de..8bd754d3de05b 100644 --- a/api_docs/event_annotation_listing.mdx +++ b/api_docs/event_annotation_listing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotationListing title: "eventAnnotationListing" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotationListing plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotationListing'] --- import eventAnnotationListingObj from './event_annotation_listing.devdocs.json'; diff --git a/api_docs/event_log.mdx b/api_docs/event_log.mdx index 667d3856064a3..b507de9ca3932 100644 --- a/api_docs/event_log.mdx +++ b/api_docs/event_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventLog title: "eventLog" image: https://source.unsplash.com/400x175/?github description: API docs for the eventLog plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventLog'] --- import eventLogObj from './event_log.devdocs.json'; diff --git a/api_docs/exploratory_view.mdx b/api_docs/exploratory_view.mdx index 48659743aef7b..706f26230fd0f 100644 --- a/api_docs/exploratory_view.mdx +++ b/api_docs/exploratory_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/exploratoryView title: "exploratoryView" image: https://source.unsplash.com/400x175/?github description: API docs for the exploratoryView plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'exploratoryView'] --- import exploratoryViewObj from './exploratory_view.devdocs.json'; diff --git a/api_docs/expression_error.mdx b/api_docs/expression_error.mdx index 170f3a43e0dd6..9ff03bd4c80d1 100644 --- a/api_docs/expression_error.mdx +++ b/api_docs/expression_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionError title: "expressionError" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionError plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionError'] --- import expressionErrorObj from './expression_error.devdocs.json'; diff --git a/api_docs/expression_gauge.mdx b/api_docs/expression_gauge.mdx index 203e92bfa12ef..2a5118358602a 100644 --- a/api_docs/expression_gauge.mdx +++ b/api_docs/expression_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionGauge title: "expressionGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionGauge plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionGauge'] --- import expressionGaugeObj from './expression_gauge.devdocs.json'; diff --git a/api_docs/expression_heatmap.mdx b/api_docs/expression_heatmap.mdx index e54d35f29b3d8..8a6de20e60044 100644 --- a/api_docs/expression_heatmap.mdx +++ b/api_docs/expression_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionHeatmap title: "expressionHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionHeatmap plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionHeatmap'] --- import expressionHeatmapObj from './expression_heatmap.devdocs.json'; diff --git a/api_docs/expression_image.mdx b/api_docs/expression_image.mdx index e2068a08af1da..43c251ac56dcb 100644 --- a/api_docs/expression_image.mdx +++ b/api_docs/expression_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionImage title: "expressionImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionImage plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionImage'] --- import expressionImageObj from './expression_image.devdocs.json'; diff --git a/api_docs/expression_legacy_metric_vis.mdx b/api_docs/expression_legacy_metric_vis.mdx index 0d78ea0ebe73b..012ea006f31b8 100644 --- a/api_docs/expression_legacy_metric_vis.mdx +++ b/api_docs/expression_legacy_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionLegacyMetricVis title: "expressionLegacyMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionLegacyMetricVis plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionLegacyMetricVis'] --- import expressionLegacyMetricVisObj from './expression_legacy_metric_vis.devdocs.json'; diff --git a/api_docs/expression_metric.mdx b/api_docs/expression_metric.mdx index 410b3326a166a..e6f74f93f31a1 100644 --- a/api_docs/expression_metric.mdx +++ b/api_docs/expression_metric.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetric title: "expressionMetric" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetric plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionMetric'] --- import expressionMetricObj from './expression_metric.devdocs.json'; diff --git a/api_docs/expression_metric_vis.mdx b/api_docs/expression_metric_vis.mdx index d07bdccd3715f..9e70987f7577f 100644 --- a/api_docs/expression_metric_vis.mdx +++ b/api_docs/expression_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetricVis title: "expressionMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetricVis plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionMetricVis'] --- import expressionMetricVisObj from './expression_metric_vis.devdocs.json'; diff --git a/api_docs/expression_partition_vis.mdx b/api_docs/expression_partition_vis.mdx index 0b7d9d8319e00..e9ee171baff71 100644 --- a/api_docs/expression_partition_vis.mdx +++ b/api_docs/expression_partition_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionPartitionVis title: "expressionPartitionVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionPartitionVis plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionPartitionVis'] --- import expressionPartitionVisObj from './expression_partition_vis.devdocs.json'; diff --git a/api_docs/expression_repeat_image.mdx b/api_docs/expression_repeat_image.mdx index 60f3ff0e65a7f..79e74312d17c1 100644 --- a/api_docs/expression_repeat_image.mdx +++ b/api_docs/expression_repeat_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRepeatImage title: "expressionRepeatImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRepeatImage plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionRepeatImage'] --- import expressionRepeatImageObj from './expression_repeat_image.devdocs.json'; diff --git a/api_docs/expression_reveal_image.mdx b/api_docs/expression_reveal_image.mdx index a91258587d0fa..091e6692178eb 100644 --- a/api_docs/expression_reveal_image.mdx +++ b/api_docs/expression_reveal_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRevealImage title: "expressionRevealImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRevealImage plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionRevealImage'] --- import expressionRevealImageObj from './expression_reveal_image.devdocs.json'; diff --git a/api_docs/expression_shape.mdx b/api_docs/expression_shape.mdx index 1a8bdcff2906b..9e9b1b57ab2c5 100644 --- a/api_docs/expression_shape.mdx +++ b/api_docs/expression_shape.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionShape title: "expressionShape" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionShape plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionShape'] --- import expressionShapeObj from './expression_shape.devdocs.json'; diff --git a/api_docs/expression_tagcloud.mdx b/api_docs/expression_tagcloud.mdx index 710cfd3cb0a0f..e190321f2c888 100644 --- a/api_docs/expression_tagcloud.mdx +++ b/api_docs/expression_tagcloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionTagcloud title: "expressionTagcloud" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionTagcloud plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionTagcloud'] --- import expressionTagcloudObj from './expression_tagcloud.devdocs.json'; diff --git a/api_docs/expression_x_y.mdx b/api_docs/expression_x_y.mdx index 7d9f43c97005b..51607e0f71513 100644 --- a/api_docs/expression_x_y.mdx +++ b/api_docs/expression_x_y.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionXY title: "expressionXY" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionXY plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionXY'] --- import expressionXYObj from './expression_x_y.devdocs.json'; diff --git a/api_docs/expressions.mdx b/api_docs/expressions.mdx index 3b6d9e10572e2..5eaa48dfaf8c6 100644 --- a/api_docs/expressions.mdx +++ b/api_docs/expressions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressions title: "expressions" image: https://source.unsplash.com/400x175/?github description: API docs for the expressions plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressions'] --- import expressionsObj from './expressions.devdocs.json'; diff --git a/api_docs/features.mdx b/api_docs/features.mdx index cf27946387260..9f7b6716646e1 100644 --- a/api_docs/features.mdx +++ b/api_docs/features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/features title: "features" image: https://source.unsplash.com/400x175/?github description: API docs for the features plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'features'] --- import featuresObj from './features.devdocs.json'; diff --git a/api_docs/field_formats.mdx b/api_docs/field_formats.mdx index 0c0fcebcdd25d..779a7786d0952 100644 --- a/api_docs/field_formats.mdx +++ b/api_docs/field_formats.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldFormats title: "fieldFormats" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldFormats plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldFormats'] --- import fieldFormatsObj from './field_formats.devdocs.json'; diff --git a/api_docs/fields_metadata.mdx b/api_docs/fields_metadata.mdx index d142d487f17db..7f2ea1ba3ef01 100644 --- a/api_docs/fields_metadata.mdx +++ b/api_docs/fields_metadata.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldsMetadata title: "fieldsMetadata" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldsMetadata plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldsMetadata'] --- import fieldsMetadataObj from './fields_metadata.devdocs.json'; diff --git a/api_docs/file_upload.mdx b/api_docs/file_upload.mdx index ee8533dc63e73..3c1a022afe914 100644 --- a/api_docs/file_upload.mdx +++ b/api_docs/file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fileUpload title: "fileUpload" image: https://source.unsplash.com/400x175/?github description: API docs for the fileUpload plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fileUpload'] --- import fileUploadObj from './file_upload.devdocs.json'; diff --git a/api_docs/files.mdx b/api_docs/files.mdx index c4d67f2e5c3d4..b7a7127d7bc47 100644 --- a/api_docs/files.mdx +++ b/api_docs/files.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/files title: "files" image: https://source.unsplash.com/400x175/?github description: API docs for the files plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'files'] --- import filesObj from './files.devdocs.json'; diff --git a/api_docs/files_management.mdx b/api_docs/files_management.mdx index 84b2e56d30778..336c9600a3525 100644 --- a/api_docs/files_management.mdx +++ b/api_docs/files_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/filesManagement title: "filesManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the filesManagement plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'filesManagement'] --- import filesManagementObj from './files_management.devdocs.json'; diff --git a/api_docs/fleet.devdocs.json b/api_docs/fleet.devdocs.json index a0ebb6ff1e8b3..18135489b76cd 100644 --- a/api_docs/fleet.devdocs.json +++ b/api_docs/fleet.devdocs.json @@ -1552,10 +1552,6 @@ "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/public/management/pages/policy/store/policy_details/middleware/policy_settings_middleware.ts" }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/management/pages/policy/store/policy_details/middleware/policy_settings_middleware.ts" - }, { "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/public/management/pages/policy/store/policy_details/index.test.ts" @@ -10955,7 +10951,7 @@ "section": "def-server.SavedObjectsClientContract", "text": "SavedObjectsClientContract" }, - ", pkgName: string, logger?: ", + ", pkgName: string, options?: { logger?: ", { "pluginId": "@kbn/logging", "scope": "common", @@ -10963,7 +10959,7 @@ "section": "def-common.Logger", "text": "Logger" }, - " | undefined) => Promise<", + " | undefined; installMissingPackage?: boolean | undefined; } | undefined) => Promise<", { "pluginId": "fleet", "scope": "common", @@ -11018,22 +11014,48 @@ "id": "def-server.PackagePolicyClient.buildPackagePolicyFromPackage.$3", "type": "Object", "tags": [], - "label": "logger", + "label": "options", "description": [], - "signature": [ - { - "pluginId": "@kbn/logging", - "scope": "common", - "docId": "kibKbnLoggingPluginApi", - "section": "def-common.Logger", - "text": "Logger" - }, - " | undefined" - ], "path": "x-pack/plugins/fleet/server/services/package_policy_service.ts", "deprecated": false, "trackAdoption": false, - "isRequired": false + "children": [ + { + "parentPluginId": "fleet", + "id": "def-server.PackagePolicyClient.buildPackagePolicyFromPackage.$3.logger", + "type": "Object", + "tags": [], + "label": "logger", + "description": [], + "signature": [ + { + "pluginId": "@kbn/logging", + "scope": "common", + "docId": "kibKbnLoggingPluginApi", + "section": "def-common.Logger", + "text": "Logger" + }, + " | undefined" + ], + "path": "x-pack/plugins/fleet/server/services/package_policy_service.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "fleet", + "id": "def-server.PackagePolicyClient.buildPackagePolicyFromPackage.$3.installMissingPackage", + "type": "CompoundType", + "tags": [], + "label": "installMissingPackage", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "x-pack/plugins/fleet/server/services/package_policy_service.ts", + "deprecated": false, + "trackAdoption": false + } + ] } ], "returnComment": [] @@ -23889,10 +23911,6 @@ "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/public/management/pages/policy/store/policy_details/middleware/policy_settings_middleware.ts" }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/management/pages/policy/store/policy_details/middleware/policy_settings_middleware.ts" - }, { "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/public/management/pages/policy/store/policy_details/index.test.ts" diff --git a/api_docs/fleet.mdx b/api_docs/fleet.mdx index 8629c06773f43..2fd0fc8f6481a 100644 --- a/api_docs/fleet.mdx +++ b/api_docs/fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fleet title: "fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the fleet plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fleet'] --- import fleetObj from './fleet.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/fleet](https://github.com/orgs/elastic/teams/fleet) for questi | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 1364 | 5 | 1241 | 74 | +| 1366 | 5 | 1243 | 74 | ## Client diff --git a/api_docs/global_search.mdx b/api_docs/global_search.mdx index 872e356706dbc..119b589817ce1 100644 --- a/api_docs/global_search.mdx +++ b/api_docs/global_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/globalSearch title: "globalSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the globalSearch plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'globalSearch'] --- import globalSearchObj from './global_search.devdocs.json'; diff --git a/api_docs/guided_onboarding.mdx b/api_docs/guided_onboarding.mdx index 0a05893662545..ca9f16125bc7e 100644 --- a/api_docs/guided_onboarding.mdx +++ b/api_docs/guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/guidedOnboarding title: "guidedOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the guidedOnboarding plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'guidedOnboarding'] --- import guidedOnboardingObj from './guided_onboarding.devdocs.json'; diff --git a/api_docs/home.mdx b/api_docs/home.mdx index f17cf5c15ada2..b195115d691f6 100644 --- a/api_docs/home.mdx +++ b/api_docs/home.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/home title: "home" image: https://source.unsplash.com/400x175/?github description: API docs for the home plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'home'] --- import homeObj from './home.devdocs.json'; diff --git a/api_docs/image_embeddable.mdx b/api_docs/image_embeddable.mdx index 9049b20281b5f..cf6d24cb49c14 100644 --- a/api_docs/image_embeddable.mdx +++ b/api_docs/image_embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/imageEmbeddable title: "imageEmbeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the imageEmbeddable plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'imageEmbeddable'] --- import imageEmbeddableObj from './image_embeddable.devdocs.json'; diff --git a/api_docs/index_lifecycle_management.mdx b/api_docs/index_lifecycle_management.mdx index 235229cc67312..c2da5ac065aca 100644 --- a/api_docs/index_lifecycle_management.mdx +++ b/api_docs/index_lifecycle_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexLifecycleManagement title: "indexLifecycleManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexLifecycleManagement plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexLifecycleManagement'] --- import indexLifecycleManagementObj from './index_lifecycle_management.devdocs.json'; diff --git a/api_docs/index_management.devdocs.json b/api_docs/index_management.devdocs.json index d7125c7bcee9d..3c17b83af210e 100644 --- a/api_docs/index_management.devdocs.json +++ b/api_docs/index_management.devdocs.json @@ -552,6 +552,73 @@ } ], "returnComment": [] + }, + { + "parentPluginId": "indexManagement", + "id": "def-public.IndexManagementPluginStart.getIndexSettingsComponent", + "type": "Function", + "tags": [], + "label": "getIndexSettingsComponent", + "description": [], + "signature": [ + "(deps: { history: ", + { + "pluginId": "@kbn/core-application-browser", + "scope": "public", + "docId": "kibKbnCoreApplicationBrowserPluginApi", + "section": "def-public.ScopedHistory", + "text": "ScopedHistory" + }, + "; }) => React.FC<", + { + "pluginId": "@kbn/index-management-shared-types", + "scope": "common", + "docId": "kibKbnIndexManagementSharedTypesPluginApi", + "section": "def-common.IndexSettingProps", + "text": "IndexSettingProps" + }, + ">" + ], + "path": "x-pack/packages/index-management/index_management_shared_types/src/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "indexManagement", + "id": "def-public.IndexManagementPluginStart.getIndexSettingsComponent.$1", + "type": "Object", + "tags": [], + "label": "deps", + "description": [], + "path": "x-pack/packages/index-management/index_management_shared_types/src/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "indexManagement", + "id": "def-public.IndexManagementPluginStart.getIndexSettingsComponent.$1.history", + "type": "Object", + "tags": [], + "label": "history", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-application-browser", + "scope": "public", + "docId": "kibKbnCoreApplicationBrowserPluginApi", + "section": "def-public.ScopedHistory", + "text": "ScopedHistory" + }, + "" + ], + "path": "x-pack/packages/index-management/index_management_shared_types/src/types.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "returnComment": [] } ], "lifecycle": "start", diff --git a/api_docs/index_management.mdx b/api_docs/index_management.mdx index 4f5a15d8155fd..82bc362f0fbfd 100644 --- a/api_docs/index_management.mdx +++ b/api_docs/index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexManagement title: "indexManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexManagement plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexManagement'] --- import indexManagementObj from './index_management.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kiban | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 243 | 0 | 238 | 1 | +| 246 | 0 | 241 | 1 | ## Client diff --git a/api_docs/inference.mdx b/api_docs/inference.mdx index bbe87f141d4f6..615e13e6d008e 100644 --- a/api_docs/inference.mdx +++ b/api_docs/inference.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inference title: "inference" image: https://source.unsplash.com/400x175/?github description: API docs for the inference plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inference'] --- import inferenceObj from './inference.devdocs.json'; diff --git a/api_docs/infra.mdx b/api_docs/infra.mdx index a2ac0dcf4f298..adf7ad58f9b4f 100644 --- a/api_docs/infra.mdx +++ b/api_docs/infra.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/infra title: "infra" image: https://source.unsplash.com/400x175/?github description: API docs for the infra plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'infra'] --- import infraObj from './infra.devdocs.json'; diff --git a/api_docs/ingest_pipelines.mdx b/api_docs/ingest_pipelines.mdx index e15c16e85aedb..f31266d077c5a 100644 --- a/api_docs/ingest_pipelines.mdx +++ b/api_docs/ingest_pipelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ingestPipelines title: "ingestPipelines" image: https://source.unsplash.com/400x175/?github description: API docs for the ingestPipelines plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ingestPipelines'] --- import ingestPipelinesObj from './ingest_pipelines.devdocs.json'; diff --git a/api_docs/inspector.mdx b/api_docs/inspector.mdx index aa9bfcf0cd663..a49bce514b1a3 100644 --- a/api_docs/inspector.mdx +++ b/api_docs/inspector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inspector title: "inspector" image: https://source.unsplash.com/400x175/?github description: API docs for the inspector plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inspector'] --- import inspectorObj from './inspector.devdocs.json'; diff --git a/api_docs/integration_assistant.mdx b/api_docs/integration_assistant.mdx index a690a6a8defae..293fa59da7dda 100644 --- a/api_docs/integration_assistant.mdx +++ b/api_docs/integration_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/integrationAssistant title: "integrationAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the integrationAssistant plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'integrationAssistant'] --- import integrationAssistantObj from './integration_assistant.devdocs.json'; diff --git a/api_docs/interactive_setup.mdx b/api_docs/interactive_setup.mdx index 62c33ea5d9f3f..0abf90f2b1a70 100644 --- a/api_docs/interactive_setup.mdx +++ b/api_docs/interactive_setup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/interactiveSetup title: "interactiveSetup" image: https://source.unsplash.com/400x175/?github description: API docs for the interactiveSetup plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'interactiveSetup'] --- import interactiveSetupObj from './interactive_setup.devdocs.json'; diff --git a/api_docs/inventory.devdocs.json b/api_docs/inventory.devdocs.json index d58433a956b01..d5617956891ae 100644 --- a/api_docs/inventory.devdocs.json +++ b/api_docs/inventory.devdocs.json @@ -50,7 +50,31 @@ "label": "InventoryServerRouteRepository", "description": [], "signature": [ - "{ \"GET /internal/inventory/entities\": ", + "{ \"GET /internal/inventory/has_data\": ", + { + "pluginId": "@kbn/server-route-repository-utils", + "scope": "common", + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" + }, + "<\"GET /internal/inventory/has_data\", undefined, ", + "InventoryRouteHandlerResources", + ", { hasData: boolean; }, ", + "InventoryRouteCreateOptions", + ">; \"GET /internal/inventory/entities/types\": ", + { + "pluginId": "@kbn/server-route-repository-utils", + "scope": "common", + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" + }, + "<\"GET /internal/inventory/entities/types\", undefined, ", + "InventoryRouteHandlerResources", + ", { entityTypes: (\"service\" | \"host\" | \"container\")[]; }, ", + "InventoryRouteCreateOptions", + ">; \"GET /internal/inventory/entities\": ", { "pluginId": "@kbn/server-route-repository-utils", "scope": "common", @@ -76,7 +100,9 @@ "PartialC", "<{ entityTypes: ", "Type", - "<(\"service\" | \"host\" | \"container\")[], string, unknown>; }>]>; }>, ", + "<(\"service\" | \"host\" | \"container\")[], string, unknown>; kuery: ", + "StringC", + "; }>]>; }>, ", "InventoryRouteHandlerResources", ", { entities: ", "LatestEntity", diff --git a/api_docs/inventory.mdx b/api_docs/inventory.mdx index 1f78420c8ff8b..f455c3eaa5663 100644 --- a/api_docs/inventory.mdx +++ b/api_docs/inventory.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inventory title: "inventory" image: https://source.unsplash.com/400x175/?github description: API docs for the inventory plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inventory'] --- import inventoryObj from './inventory.devdocs.json'; diff --git a/api_docs/investigate.mdx b/api_docs/investigate.mdx index 9cf9face3de83..4421e894b2bae 100644 --- a/api_docs/investigate.mdx +++ b/api_docs/investigate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/investigate title: "investigate" image: https://source.unsplash.com/400x175/?github description: API docs for the investigate plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'investigate'] --- import investigateObj from './investigate.devdocs.json'; diff --git a/api_docs/investigate_app.mdx b/api_docs/investigate_app.mdx index f7f900f1d0a77..66bad52f5e0d2 100644 --- a/api_docs/investigate_app.mdx +++ b/api_docs/investigate_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/investigateApp title: "investigateApp" image: https://source.unsplash.com/400x175/?github description: API docs for the investigateApp plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'investigateApp'] --- import investigateAppObj from './investigate_app.devdocs.json'; diff --git a/api_docs/kbn_ace.mdx b/api_docs/kbn_ace.mdx index 223bef365590a..601fdbbc2a164 100644 --- a/api_docs/kbn_ace.mdx +++ b/api_docs/kbn_ace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ace title: "@kbn/ace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ace plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ace'] --- import kbnAceObj from './kbn_ace.devdocs.json'; diff --git a/api_docs/kbn_actions_types.mdx b/api_docs/kbn_actions_types.mdx index 75a9b76c7977e..803121fddb382 100644 --- a/api_docs/kbn_actions_types.mdx +++ b/api_docs/kbn_actions_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-actions-types title: "@kbn/actions-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/actions-types plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/actions-types'] --- import kbnActionsTypesObj from './kbn_actions_types.devdocs.json'; diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx index 13403c78daa5e..c2af186ca0b23 100644 --- a/api_docs/kbn_aiops_components.mdx +++ b/api_docs/kbn_aiops_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-components title: "@kbn/aiops-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-components plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components'] --- import kbnAiopsComponentsObj from './kbn_aiops_components.devdocs.json'; diff --git a/api_docs/kbn_aiops_log_pattern_analysis.mdx b/api_docs/kbn_aiops_log_pattern_analysis.mdx index f9cfbf17ec235..8b16767aaac3e 100644 --- a/api_docs/kbn_aiops_log_pattern_analysis.mdx +++ b/api_docs/kbn_aiops_log_pattern_analysis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-log-pattern-analysis title: "@kbn/aiops-log-pattern-analysis" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-log-pattern-analysis plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-log-pattern-analysis'] --- import kbnAiopsLogPatternAnalysisObj from './kbn_aiops_log_pattern_analysis.devdocs.json'; diff --git a/api_docs/kbn_aiops_log_rate_analysis.mdx b/api_docs/kbn_aiops_log_rate_analysis.mdx index 06db362fa0e67..c3984c8a57dfd 100644 --- a/api_docs/kbn_aiops_log_rate_analysis.mdx +++ b/api_docs/kbn_aiops_log_rate_analysis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-log-rate-analysis title: "@kbn/aiops-log-rate-analysis" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-log-rate-analysis plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-log-rate-analysis'] --- import kbnAiopsLogRateAnalysisObj from './kbn_aiops_log_rate_analysis.devdocs.json'; diff --git a/api_docs/kbn_alerting_api_integration_helpers.mdx b/api_docs/kbn_alerting_api_integration_helpers.mdx index cc78a9a6a3ca7..f6568d3401f1c 100644 --- a/api_docs/kbn_alerting_api_integration_helpers.mdx +++ b/api_docs/kbn_alerting_api_integration_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-api-integration-helpers title: "@kbn/alerting-api-integration-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-api-integration-helpers plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-api-integration-helpers'] --- import kbnAlertingApiIntegrationHelpersObj from './kbn_alerting_api_integration_helpers.devdocs.json'; diff --git a/api_docs/kbn_alerting_comparators.mdx b/api_docs/kbn_alerting_comparators.mdx index 19ff3f819f4eb..b3344a6f76e1c 100644 --- a/api_docs/kbn_alerting_comparators.mdx +++ b/api_docs/kbn_alerting_comparators.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-comparators title: "@kbn/alerting-comparators" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-comparators plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-comparators'] --- import kbnAlertingComparatorsObj from './kbn_alerting_comparators.devdocs.json'; diff --git a/api_docs/kbn_alerting_state_types.mdx b/api_docs/kbn_alerting_state_types.mdx index aefbfa43fedc1..6f3e47b2f04fd 100644 --- a/api_docs/kbn_alerting_state_types.mdx +++ b/api_docs/kbn_alerting_state_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-state-types title: "@kbn/alerting-state-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-state-types plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-state-types'] --- import kbnAlertingStateTypesObj from './kbn_alerting_state_types.devdocs.json'; diff --git a/api_docs/kbn_alerting_types.mdx b/api_docs/kbn_alerting_types.mdx index 7f4c4d1754e02..1255350a5d2e8 100644 --- a/api_docs/kbn_alerting_types.mdx +++ b/api_docs/kbn_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-types title: "@kbn/alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-types plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-types'] --- import kbnAlertingTypesObj from './kbn_alerting_types.devdocs.json'; diff --git a/api_docs/kbn_alerts_as_data_utils.mdx b/api_docs/kbn_alerts_as_data_utils.mdx index 96e8bfd263664..01ca9eaac694a 100644 --- a/api_docs/kbn_alerts_as_data_utils.mdx +++ b/api_docs/kbn_alerts_as_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-as-data-utils title: "@kbn/alerts-as-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-as-data-utils plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-as-data-utils'] --- import kbnAlertsAsDataUtilsObj from './kbn_alerts_as_data_utils.devdocs.json'; diff --git a/api_docs/kbn_alerts_grouping.mdx b/api_docs/kbn_alerts_grouping.mdx index 3d8d52b82115d..a44efc2b2584a 100644 --- a/api_docs/kbn_alerts_grouping.mdx +++ b/api_docs/kbn_alerts_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-grouping title: "@kbn/alerts-grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-grouping plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-grouping'] --- import kbnAlertsGroupingObj from './kbn_alerts_grouping.devdocs.json'; diff --git a/api_docs/kbn_alerts_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx index d993d7cde041c..ad6cf50992b4b 100644 --- a/api_docs/kbn_alerts_ui_shared.mdx +++ b/api_docs/kbn_alerts_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-ui-shared title: "@kbn/alerts-ui-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-ui-shared plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-ui-shared'] --- import kbnAlertsUiSharedObj from './kbn_alerts_ui_shared.devdocs.json'; diff --git a/api_docs/kbn_analytics.mdx b/api_docs/kbn_analytics.mdx index ecf18883e4caa..e1891354e6906 100644 --- a/api_docs/kbn_analytics.mdx +++ b/api_docs/kbn_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics title: "@kbn/analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics'] --- import kbnAnalyticsObj from './kbn_analytics.devdocs.json'; diff --git a/api_docs/kbn_analytics_collection_utils.mdx b/api_docs/kbn_analytics_collection_utils.mdx index d418b6c484928..59498c5ff1f45 100644 --- a/api_docs/kbn_analytics_collection_utils.mdx +++ b/api_docs/kbn_analytics_collection_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-collection-utils title: "@kbn/analytics-collection-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-collection-utils plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-collection-utils'] --- import kbnAnalyticsCollectionUtilsObj from './kbn_analytics_collection_utils.devdocs.json'; diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index 4e2c15838912d..eea6840e7e4ef 100644 --- a/api_docs/kbn_apm_config_loader.mdx +++ b/api_docs/kbn_apm_config_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-config-loader title: "@kbn/apm-config-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-config-loader plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-config-loader'] --- import kbnApmConfigLoaderObj from './kbn_apm_config_loader.devdocs.json'; diff --git a/api_docs/kbn_apm_data_view.mdx b/api_docs/kbn_apm_data_view.mdx index a8c0305f6150c..bf10085e497d0 100644 --- a/api_docs/kbn_apm_data_view.mdx +++ b/api_docs/kbn_apm_data_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-data-view title: "@kbn/apm-data-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-data-view plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-data-view'] --- import kbnApmDataViewObj from './kbn_apm_data_view.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace.mdx b/api_docs/kbn_apm_synthtrace.mdx index 7b3e0e5edc359..b934d6aa8afc9 100644 --- a/api_docs/kbn_apm_synthtrace.mdx +++ b/api_docs/kbn_apm_synthtrace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace title: "@kbn/apm-synthtrace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace'] --- import kbnApmSynthtraceObj from './kbn_apm_synthtrace.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace_client.mdx b/api_docs/kbn_apm_synthtrace_client.mdx index 3da033437336b..d93cfd115f15f 100644 --- a/api_docs/kbn_apm_synthtrace_client.mdx +++ b/api_docs/kbn_apm_synthtrace_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace-client title: "@kbn/apm-synthtrace-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace-client plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace-client'] --- import kbnApmSynthtraceClientObj from './kbn_apm_synthtrace_client.devdocs.json'; diff --git a/api_docs/kbn_apm_types.mdx b/api_docs/kbn_apm_types.mdx index 4d63a2bce4ad9..f12cec7dd0a3f 100644 --- a/api_docs/kbn_apm_types.mdx +++ b/api_docs/kbn_apm_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-types title: "@kbn/apm-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-types plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-types'] --- import kbnApmTypesObj from './kbn_apm_types.devdocs.json'; diff --git a/api_docs/kbn_apm_utils.mdx b/api_docs/kbn_apm_utils.mdx index 30568f136c9af..95ab7e3ce87e2 100644 --- a/api_docs/kbn_apm_utils.mdx +++ b/api_docs/kbn_apm_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-utils title: "@kbn/apm-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-utils plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-utils'] --- import kbnApmUtilsObj from './kbn_apm_utils.devdocs.json'; diff --git a/api_docs/kbn_avc_banner.mdx b/api_docs/kbn_avc_banner.mdx index 6914e4d17b2d5..400d8d4b17482 100644 --- a/api_docs/kbn_avc_banner.mdx +++ b/api_docs/kbn_avc_banner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-avc-banner title: "@kbn/avc-banner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/avc-banner plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/avc-banner'] --- import kbnAvcBannerObj from './kbn_avc_banner.devdocs.json'; diff --git a/api_docs/kbn_axe_config.mdx b/api_docs/kbn_axe_config.mdx index 54fe0e7af796b..071744aad88b5 100644 --- a/api_docs/kbn_axe_config.mdx +++ b/api_docs/kbn_axe_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-axe-config title: "@kbn/axe-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/axe-config plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/axe-config'] --- import kbnAxeConfigObj from './kbn_axe_config.devdocs.json'; diff --git a/api_docs/kbn_bfetch_error.mdx b/api_docs/kbn_bfetch_error.mdx index 4b3ce4f3b7a0b..6acfe9c9e78cc 100644 --- a/api_docs/kbn_bfetch_error.mdx +++ b/api_docs/kbn_bfetch_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-bfetch-error title: "@kbn/bfetch-error" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/bfetch-error plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/bfetch-error'] --- import kbnBfetchErrorObj from './kbn_bfetch_error.devdocs.json'; diff --git a/api_docs/kbn_calculate_auto.mdx b/api_docs/kbn_calculate_auto.mdx index 300f6a8b014cd..168242658ade8 100644 --- a/api_docs/kbn_calculate_auto.mdx +++ b/api_docs/kbn_calculate_auto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-calculate-auto title: "@kbn/calculate-auto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/calculate-auto plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/calculate-auto'] --- import kbnCalculateAutoObj from './kbn_calculate_auto.devdocs.json'; diff --git a/api_docs/kbn_calculate_width_from_char_count.mdx b/api_docs/kbn_calculate_width_from_char_count.mdx index 2096ccac4090d..e8fe9c837b601 100644 --- a/api_docs/kbn_calculate_width_from_char_count.mdx +++ b/api_docs/kbn_calculate_width_from_char_count.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-calculate-width-from-char-count title: "@kbn/calculate-width-from-char-count" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/calculate-width-from-char-count plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/calculate-width-from-char-count'] --- import kbnCalculateWidthFromCharCountObj from './kbn_calculate_width_from_char_count.devdocs.json'; diff --git a/api_docs/kbn_cases_components.mdx b/api_docs/kbn_cases_components.mdx index d41720408675d..7ef2c71557efb 100644 --- a/api_docs/kbn_cases_components.mdx +++ b/api_docs/kbn_cases_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cases-components title: "@kbn/cases-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cases-components plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cases-components'] --- import kbnCasesComponentsObj from './kbn_cases_components.devdocs.json'; diff --git a/api_docs/kbn_cbor.mdx b/api_docs/kbn_cbor.mdx index 27ac176c8cf32..e08707072658e 100644 --- a/api_docs/kbn_cbor.mdx +++ b/api_docs/kbn_cbor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cbor title: "@kbn/cbor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cbor plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cbor'] --- import kbnCborObj from './kbn_cbor.devdocs.json'; diff --git a/api_docs/kbn_cell_actions.mdx b/api_docs/kbn_cell_actions.mdx index 7c0938d1e26db..323e833a441cc 100644 --- a/api_docs/kbn_cell_actions.mdx +++ b/api_docs/kbn_cell_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cell-actions title: "@kbn/cell-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cell-actions plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cell-actions'] --- import kbnCellActionsObj from './kbn_cell_actions.devdocs.json'; diff --git a/api_docs/kbn_chart_expressions_common.mdx b/api_docs/kbn_chart_expressions_common.mdx index 9b78eaf259dbe..4a411286c717e 100644 --- a/api_docs/kbn_chart_expressions_common.mdx +++ b/api_docs/kbn_chart_expressions_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-expressions-common title: "@kbn/chart-expressions-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-expressions-common plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/chart-expressions-common'] --- import kbnChartExpressionsCommonObj from './kbn_chart_expressions_common.devdocs.json'; diff --git a/api_docs/kbn_chart_icons.mdx b/api_docs/kbn_chart_icons.mdx index 1eed2b9bc6890..420fb0ceee600 100644 --- a/api_docs/kbn_chart_icons.mdx +++ b/api_docs/kbn_chart_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-icons title: "@kbn/chart-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-icons plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/chart-icons'] --- import kbnChartIconsObj from './kbn_chart_icons.devdocs.json'; diff --git a/api_docs/kbn_ci_stats_core.mdx b/api_docs/kbn_ci_stats_core.mdx index 2ed7486db39a2..d9e45b1f6bce2 100644 --- a/api_docs/kbn_ci_stats_core.mdx +++ b/api_docs/kbn_ci_stats_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-core title: "@kbn/ci-stats-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-core plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-core'] --- import kbnCiStatsCoreObj from './kbn_ci_stats_core.devdocs.json'; diff --git a/api_docs/kbn_ci_stats_performance_metrics.mdx b/api_docs/kbn_ci_stats_performance_metrics.mdx index 4b16b5201bcb0..fc027cf436d8c 100644 --- a/api_docs/kbn_ci_stats_performance_metrics.mdx +++ b/api_docs/kbn_ci_stats_performance_metrics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-performance-metrics title: "@kbn/ci-stats-performance-metrics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-performance-metrics plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-performance-metrics'] --- import kbnCiStatsPerformanceMetricsObj from './kbn_ci_stats_performance_metrics.devdocs.json'; diff --git a/api_docs/kbn_ci_stats_reporter.mdx b/api_docs/kbn_ci_stats_reporter.mdx index 3b7a10aba6001..db6f75be0a43a 100644 --- a/api_docs/kbn_ci_stats_reporter.mdx +++ b/api_docs/kbn_ci_stats_reporter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-reporter title: "@kbn/ci-stats-reporter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-reporter plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-reporter'] --- import kbnCiStatsReporterObj from './kbn_ci_stats_reporter.devdocs.json'; diff --git a/api_docs/kbn_cli_dev_mode.mdx b/api_docs/kbn_cli_dev_mode.mdx index 9fd6a7e3b867b..b6438ab0b4925 100644 --- a/api_docs/kbn_cli_dev_mode.mdx +++ b/api_docs/kbn_cli_dev_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cli-dev-mode title: "@kbn/cli-dev-mode" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cli-dev-mode plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cli-dev-mode'] --- import kbnCliDevModeObj from './kbn_cli_dev_mode.devdocs.json'; diff --git a/api_docs/kbn_cloud_security_posture.mdx b/api_docs/kbn_cloud_security_posture.mdx index 691626a71a317..c77ae99b0c23e 100644 --- a/api_docs/kbn_cloud_security_posture.mdx +++ b/api_docs/kbn_cloud_security_posture.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cloud-security-posture title: "@kbn/cloud-security-posture" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cloud-security-posture plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cloud-security-posture'] --- import kbnCloudSecurityPostureObj from './kbn_cloud_security_posture.devdocs.json'; diff --git a/api_docs/kbn_cloud_security_posture_common.mdx b/api_docs/kbn_cloud_security_posture_common.mdx index 17eb8b25275aa..8c2b06f5b662e 100644 --- a/api_docs/kbn_cloud_security_posture_common.mdx +++ b/api_docs/kbn_cloud_security_posture_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cloud-security-posture-common title: "@kbn/cloud-security-posture-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cloud-security-posture-common plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cloud-security-posture-common'] --- import kbnCloudSecurityPostureCommonObj from './kbn_cloud_security_posture_common.devdocs.json'; diff --git a/api_docs/kbn_code_editor.mdx b/api_docs/kbn_code_editor.mdx index 82682a7f71edb..264f1fc78fb21 100644 --- a/api_docs/kbn_code_editor.mdx +++ b/api_docs/kbn_code_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor title: "@kbn/code-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor'] --- import kbnCodeEditorObj from './kbn_code_editor.devdocs.json'; diff --git a/api_docs/kbn_code_editor_mock.mdx b/api_docs/kbn_code_editor_mock.mdx index e783fcab60b15..83cc6ee1a4643 100644 --- a/api_docs/kbn_code_editor_mock.mdx +++ b/api_docs/kbn_code_editor_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor-mock title: "@kbn/code-editor-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor-mock plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor-mock'] --- import kbnCodeEditorMockObj from './kbn_code_editor_mock.devdocs.json'; diff --git a/api_docs/kbn_code_owners.mdx b/api_docs/kbn_code_owners.mdx index cad5babc102ce..f4341745a7d42 100644 --- a/api_docs/kbn_code_owners.mdx +++ b/api_docs/kbn_code_owners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-owners title: "@kbn/code-owners" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-owners plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-owners'] --- import kbnCodeOwnersObj from './kbn_code_owners.devdocs.json'; diff --git a/api_docs/kbn_coloring.mdx b/api_docs/kbn_coloring.mdx index e2c8154445726..d4106d08324ea 100644 --- a/api_docs/kbn_coloring.mdx +++ b/api_docs/kbn_coloring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-coloring title: "@kbn/coloring" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/coloring plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/coloring'] --- import kbnColoringObj from './kbn_coloring.devdocs.json'; diff --git a/api_docs/kbn_config.mdx b/api_docs/kbn_config.mdx index b0a57f489dd65..1b7843ca654af 100644 --- a/api_docs/kbn_config.mdx +++ b/api_docs/kbn_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config title: "@kbn/config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config'] --- import kbnConfigObj from './kbn_config.devdocs.json'; diff --git a/api_docs/kbn_config_mocks.mdx b/api_docs/kbn_config_mocks.mdx index b07591481d449..bcd6517f9ab37 100644 --- a/api_docs/kbn_config_mocks.mdx +++ b/api_docs/kbn_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-mocks title: "@kbn/config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-mocks'] --- import kbnConfigMocksObj from './kbn_config_mocks.devdocs.json'; diff --git a/api_docs/kbn_config_schema.mdx b/api_docs/kbn_config_schema.mdx index 9613201257629..fd85b6b30a5f9 100644 --- a/api_docs/kbn_config_schema.mdx +++ b/api_docs/kbn_config_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-schema title: "@kbn/config-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-schema plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-schema'] --- import kbnConfigSchemaObj from './kbn_config_schema.devdocs.json'; diff --git a/api_docs/kbn_content_management_content_editor.mdx b/api_docs/kbn_content_management_content_editor.mdx index fba75dfb37d0b..dd1da0ca1854e 100644 --- a/api_docs/kbn_content_management_content_editor.mdx +++ b/api_docs/kbn_content_management_content_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-editor title: "@kbn/content-management-content-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-editor plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-editor'] --- import kbnContentManagementContentEditorObj from './kbn_content_management_content_editor.devdocs.json'; diff --git a/api_docs/kbn_content_management_content_insights_public.mdx b/api_docs/kbn_content_management_content_insights_public.mdx index acfd3607beeb1..48d95f61fecb3 100644 --- a/api_docs/kbn_content_management_content_insights_public.mdx +++ b/api_docs/kbn_content_management_content_insights_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-insights-public title: "@kbn/content-management-content-insights-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-insights-public plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-insights-public'] --- import kbnContentManagementContentInsightsPublicObj from './kbn_content_management_content_insights_public.devdocs.json'; diff --git a/api_docs/kbn_content_management_content_insights_server.mdx b/api_docs/kbn_content_management_content_insights_server.mdx index 96948fd3e472a..1b0b48bec99d5 100644 --- a/api_docs/kbn_content_management_content_insights_server.mdx +++ b/api_docs/kbn_content_management_content_insights_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-insights-server title: "@kbn/content-management-content-insights-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-insights-server plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-insights-server'] --- import kbnContentManagementContentInsightsServerObj from './kbn_content_management_content_insights_server.devdocs.json'; diff --git a/api_docs/kbn_content_management_favorites_public.mdx b/api_docs/kbn_content_management_favorites_public.mdx index a8097901e5762..ee6b3e4cdcce9 100644 --- a/api_docs/kbn_content_management_favorites_public.mdx +++ b/api_docs/kbn_content_management_favorites_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-favorites-public title: "@kbn/content-management-favorites-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-favorites-public plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-favorites-public'] --- import kbnContentManagementFavoritesPublicObj from './kbn_content_management_favorites_public.devdocs.json'; diff --git a/api_docs/kbn_content_management_favorites_server.mdx b/api_docs/kbn_content_management_favorites_server.mdx index 30bb73888d630..f902e2c1e38e6 100644 --- a/api_docs/kbn_content_management_favorites_server.mdx +++ b/api_docs/kbn_content_management_favorites_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-favorites-server title: "@kbn/content-management-favorites-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-favorites-server plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-favorites-server'] --- import kbnContentManagementFavoritesServerObj from './kbn_content_management_favorites_server.devdocs.json'; diff --git a/api_docs/kbn_content_management_tabbed_table_list_view.mdx b/api_docs/kbn_content_management_tabbed_table_list_view.mdx index d51ad9435f37c..683986de27722 100644 --- a/api_docs/kbn_content_management_tabbed_table_list_view.mdx +++ b/api_docs/kbn_content_management_tabbed_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-tabbed-table-list-view title: "@kbn/content-management-tabbed-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-tabbed-table-list-view plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-tabbed-table-list-view'] --- import kbnContentManagementTabbedTableListViewObj from './kbn_content_management_tabbed_table_list_view.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view.mdx b/api_docs/kbn_content_management_table_list_view.mdx index c25636de5b881..69b61ff30fcf2 100644 --- a/api_docs/kbn_content_management_table_list_view.mdx +++ b/api_docs/kbn_content_management_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view title: "@kbn/content-management-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view'] --- import kbnContentManagementTableListViewObj from './kbn_content_management_table_list_view.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view_common.mdx b/api_docs/kbn_content_management_table_list_view_common.mdx index 8cec9381c2e09..c6c820608e033 100644 --- a/api_docs/kbn_content_management_table_list_view_common.mdx +++ b/api_docs/kbn_content_management_table_list_view_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-common title: "@kbn/content-management-table-list-view-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-common plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-common'] --- import kbnContentManagementTableListViewCommonObj from './kbn_content_management_table_list_view_common.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view_table.mdx b/api_docs/kbn_content_management_table_list_view_table.mdx index cefa6049ed1f2..bc73f788ad888 100644 --- a/api_docs/kbn_content_management_table_list_view_table.mdx +++ b/api_docs/kbn_content_management_table_list_view_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-table title: "@kbn/content-management-table-list-view-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-table plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-table'] --- import kbnContentManagementTableListViewTableObj from './kbn_content_management_table_list_view_table.devdocs.json'; diff --git a/api_docs/kbn_content_management_user_profiles.mdx b/api_docs/kbn_content_management_user_profiles.mdx index f2787cb616266..2f18e71457308 100644 --- a/api_docs/kbn_content_management_user_profiles.mdx +++ b/api_docs/kbn_content_management_user_profiles.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-user-profiles title: "@kbn/content-management-user-profiles" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-user-profiles plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-user-profiles'] --- import kbnContentManagementUserProfilesObj from './kbn_content_management_user_profiles.devdocs.json'; diff --git a/api_docs/kbn_content_management_utils.mdx b/api_docs/kbn_content_management_utils.mdx index 18200b9f8e0b2..c262e6e0d5101 100644 --- a/api_docs/kbn_content_management_utils.mdx +++ b/api_docs/kbn_content_management_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-utils title: "@kbn/content-management-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-utils plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-utils'] --- import kbnContentManagementUtilsObj from './kbn_content_management_utils.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser.devdocs.json b/api_docs/kbn_core_analytics_browser.devdocs.json index 8b02dae4fa8ca..a3ab5ce2d9925 100644 --- a/api_docs/kbn_core_analytics_browser.devdocs.json +++ b/api_docs/kbn_core_analytics_browser.devdocs.json @@ -1708,6 +1708,10 @@ "plugin": "security", "path": "x-pack/plugins/security/public/analytics/register_user_context.ts" }, + { + "plugin": "discover", + "path": "src/plugins/discover/public/services/discover_ebt_context_manager.ts" + }, { "plugin": "telemetry", "path": "src/plugins/telemetry/server/plugin.ts" @@ -1776,6 +1780,10 @@ "plugin": "security", "path": "x-pack/plugins/security/public/analytics/register_user_context.test.ts" }, + { + "plugin": "discover", + "path": "src/plugins/discover/public/services/discover_ebt_context_manager.test.ts" + }, { "plugin": "@kbn/core-application-browser-internal", "path": "packages/core/application/core-application-browser-internal/src/register_analytics_context_provider.test.ts" diff --git a/api_docs/kbn_core_analytics_browser.mdx b/api_docs/kbn_core_analytics_browser.mdx index 3df1a69e6174e..f25885ca4bd66 100644 --- a/api_docs/kbn_core_analytics_browser.mdx +++ b/api_docs/kbn_core_analytics_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser title: "@kbn/core-analytics-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser'] --- import kbnCoreAnalyticsBrowserObj from './kbn_core_analytics_browser.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser_internal.mdx b/api_docs/kbn_core_analytics_browser_internal.mdx index c96b5e320ab6b..cf593df1b9d65 100644 --- a/api_docs/kbn_core_analytics_browser_internal.mdx +++ b/api_docs/kbn_core_analytics_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-internal title: "@kbn/core-analytics-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-internal plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser-internal'] --- import kbnCoreAnalyticsBrowserInternalObj from './kbn_core_analytics_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser_mocks.mdx b/api_docs/kbn_core_analytics_browser_mocks.mdx index f4f858e5b2d7a..42aad14b340eb 100644 --- a/api_docs/kbn_core_analytics_browser_mocks.mdx +++ b/api_docs/kbn_core_analytics_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-mocks title: "@kbn/core-analytics-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser-mocks'] --- import kbnCoreAnalyticsBrowserMocksObj from './kbn_core_analytics_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_server.devdocs.json b/api_docs/kbn_core_analytics_server.devdocs.json index d6c06f0d5d20c..4a2bba119600e 100644 --- a/api_docs/kbn_core_analytics_server.devdocs.json +++ b/api_docs/kbn_core_analytics_server.devdocs.json @@ -1716,6 +1716,10 @@ "plugin": "security", "path": "x-pack/plugins/security/public/analytics/register_user_context.ts" }, + { + "plugin": "discover", + "path": "src/plugins/discover/public/services/discover_ebt_context_manager.ts" + }, { "plugin": "telemetry", "path": "src/plugins/telemetry/server/plugin.ts" @@ -1784,6 +1788,10 @@ "plugin": "security", "path": "x-pack/plugins/security/public/analytics/register_user_context.test.ts" }, + { + "plugin": "discover", + "path": "src/plugins/discover/public/services/discover_ebt_context_manager.test.ts" + }, { "plugin": "@kbn/core-application-browser-internal", "path": "packages/core/application/core-application-browser-internal/src/register_analytics_context_provider.test.ts" diff --git a/api_docs/kbn_core_analytics_server.mdx b/api_docs/kbn_core_analytics_server.mdx index 16f5d3717632a..2d01cab7578c8 100644 --- a/api_docs/kbn_core_analytics_server.mdx +++ b/api_docs/kbn_core_analytics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server title: "@kbn/core-analytics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server'] --- import kbnCoreAnalyticsServerObj from './kbn_core_analytics_server.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_server_internal.mdx b/api_docs/kbn_core_analytics_server_internal.mdx index a5cf641e919f3..5f77f70e6f8fb 100644 --- a/api_docs/kbn_core_analytics_server_internal.mdx +++ b/api_docs/kbn_core_analytics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-internal title: "@kbn/core-analytics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-internal plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server-internal'] --- import kbnCoreAnalyticsServerInternalObj from './kbn_core_analytics_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_server_mocks.mdx b/api_docs/kbn_core_analytics_server_mocks.mdx index 60be05ba7e737..1cb87a1d85986 100644 --- a/api_docs/kbn_core_analytics_server_mocks.mdx +++ b/api_docs/kbn_core_analytics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-mocks title: "@kbn/core-analytics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server-mocks'] --- import kbnCoreAnalyticsServerMocksObj from './kbn_core_analytics_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_application_browser.mdx b/api_docs/kbn_core_application_browser.mdx index be42486b562d4..857aab81224a8 100644 --- a/api_docs/kbn_core_application_browser.mdx +++ b/api_docs/kbn_core_application_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser title: "@kbn/core-application-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser'] --- import kbnCoreApplicationBrowserObj from './kbn_core_application_browser.devdocs.json'; diff --git a/api_docs/kbn_core_application_browser_internal.mdx b/api_docs/kbn_core_application_browser_internal.mdx index 205a250d1930f..774a6b0e633f7 100644 --- a/api_docs/kbn_core_application_browser_internal.mdx +++ b/api_docs/kbn_core_application_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-internal title: "@kbn/core-application-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-internal plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser-internal'] --- import kbnCoreApplicationBrowserInternalObj from './kbn_core_application_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_application_browser_mocks.mdx b/api_docs/kbn_core_application_browser_mocks.mdx index c41a646fe5221..983e413fb9294 100644 --- a/api_docs/kbn_core_application_browser_mocks.mdx +++ b/api_docs/kbn_core_application_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-mocks title: "@kbn/core-application-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser-mocks'] --- import kbnCoreApplicationBrowserMocksObj from './kbn_core_application_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_application_common.mdx b/api_docs/kbn_core_application_common.mdx index 199985afc9f9d..1599d73027c3a 100644 --- a/api_docs/kbn_core_application_common.mdx +++ b/api_docs/kbn_core_application_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-common title: "@kbn/core-application-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-common plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-common'] --- import kbnCoreApplicationCommonObj from './kbn_core_application_common.devdocs.json'; diff --git a/api_docs/kbn_core_apps_browser_internal.mdx b/api_docs/kbn_core_apps_browser_internal.mdx index 119ac3ed0c04d..0a8fbdf23b19c 100644 --- a/api_docs/kbn_core_apps_browser_internal.mdx +++ b/api_docs/kbn_core_apps_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-internal title: "@kbn/core-apps-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-internal plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-browser-internal'] --- import kbnCoreAppsBrowserInternalObj from './kbn_core_apps_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_apps_browser_mocks.mdx b/api_docs/kbn_core_apps_browser_mocks.mdx index 782e77c9ce722..638a978d74cd8 100644 --- a/api_docs/kbn_core_apps_browser_mocks.mdx +++ b/api_docs/kbn_core_apps_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-mocks title: "@kbn/core-apps-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-browser-mocks'] --- import kbnCoreAppsBrowserMocksObj from './kbn_core_apps_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_apps_server_internal.mdx b/api_docs/kbn_core_apps_server_internal.mdx index 5d999e66afed4..f7230d762e176 100644 --- a/api_docs/kbn_core_apps_server_internal.mdx +++ b/api_docs/kbn_core_apps_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-server-internal title: "@kbn/core-apps-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-server-internal plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-server-internal'] --- import kbnCoreAppsServerInternalObj from './kbn_core_apps_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_base_browser_mocks.mdx b/api_docs/kbn_core_base_browser_mocks.mdx index 6261ffe7253f4..ac9d96a1ea124 100644 --- a/api_docs/kbn_core_base_browser_mocks.mdx +++ b/api_docs/kbn_core_base_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-browser-mocks title: "@kbn/core-base-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-browser-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-browser-mocks'] --- import kbnCoreBaseBrowserMocksObj from './kbn_core_base_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_base_common.mdx b/api_docs/kbn_core_base_common.mdx index 83a086198b20e..f241b381f7582 100644 --- a/api_docs/kbn_core_base_common.mdx +++ b/api_docs/kbn_core_base_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-common title: "@kbn/core-base-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-common plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-common'] --- import kbnCoreBaseCommonObj from './kbn_core_base_common.devdocs.json'; diff --git a/api_docs/kbn_core_base_server_internal.mdx b/api_docs/kbn_core_base_server_internal.mdx index 9711ba19a7bd6..a8aab78edacbf 100644 --- a/api_docs/kbn_core_base_server_internal.mdx +++ b/api_docs/kbn_core_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-internal title: "@kbn/core-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-internal plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-server-internal'] --- import kbnCoreBaseServerInternalObj from './kbn_core_base_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_base_server_mocks.mdx b/api_docs/kbn_core_base_server_mocks.mdx index 1755fb65da97b..4bc5f4951cfc7 100644 --- a/api_docs/kbn_core_base_server_mocks.mdx +++ b/api_docs/kbn_core_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-mocks title: "@kbn/core-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-server-mocks'] --- import kbnCoreBaseServerMocksObj from './kbn_core_base_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_browser_mocks.mdx b/api_docs/kbn_core_capabilities_browser_mocks.mdx index f526e3e0e4647..6a6bf590305b7 100644 --- a/api_docs/kbn_core_capabilities_browser_mocks.mdx +++ b/api_docs/kbn_core_capabilities_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-browser-mocks title: "@kbn/core-capabilities-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-browser-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-browser-mocks'] --- import kbnCoreCapabilitiesBrowserMocksObj from './kbn_core_capabilities_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_common.mdx b/api_docs/kbn_core_capabilities_common.mdx index 29da7fdc03769..285e039fbb55f 100644 --- a/api_docs/kbn_core_capabilities_common.mdx +++ b/api_docs/kbn_core_capabilities_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-common title: "@kbn/core-capabilities-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-common plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-common'] --- import kbnCoreCapabilitiesCommonObj from './kbn_core_capabilities_common.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_server.mdx b/api_docs/kbn_core_capabilities_server.mdx index 4701a1361bc4e..b11aa307e05bb 100644 --- a/api_docs/kbn_core_capabilities_server.mdx +++ b/api_docs/kbn_core_capabilities_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server title: "@kbn/core-capabilities-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-server'] --- import kbnCoreCapabilitiesServerObj from './kbn_core_capabilities_server.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_server_mocks.mdx b/api_docs/kbn_core_capabilities_server_mocks.mdx index 4a42206bfddd4..4b9f4d5d37cbc 100644 --- a/api_docs/kbn_core_capabilities_server_mocks.mdx +++ b/api_docs/kbn_core_capabilities_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server-mocks title: "@kbn/core-capabilities-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-server-mocks'] --- import kbnCoreCapabilitiesServerMocksObj from './kbn_core_capabilities_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_chrome_browser.devdocs.json b/api_docs/kbn_core_chrome_browser.devdocs.json index 947e0b5b92e53..90af2b41148d2 100644 --- a/api_docs/kbn_core_chrome_browser.devdocs.json +++ b/api_docs/kbn_core_chrome_browser.devdocs.json @@ -2740,7 +2740,25 @@ "signature": [ "{ getIsCollapsed$(): ", "Observable", - "; setIsCollapsed(isCollapsed: boolean): void; }" + "; setIsCollapsed(isCollapsed: boolean): void; getPanelSelectedNode$: () => ", + "Observable", + "<", + { + "pluginId": "@kbn/core-chrome-browser", + "scope": "public", + "docId": "kibKbnCoreChromeBrowserPluginApi", + "section": "def-public.PanelSelectedNode", + "text": "PanelSelectedNode" + }, + " | null>; setPanelSelectedNode(node: string | ", + { + "pluginId": "@kbn/core-chrome-browser", + "scope": "public", + "docId": "kibKbnCoreChromeBrowserPluginApi", + "section": "def-public.PanelSelectedNode", + "text": "PanelSelectedNode" + }, + " | null): void; }" ], "path": "packages/core/chrome/core-chrome-browser/src/contracts.ts", "deprecated": false, @@ -4007,6 +4025,29 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/core-chrome-browser", + "id": "def-public.PanelSelectedNode", + "type": "Type", + "tags": [], + "label": "PanelSelectedNode", + "description": [], + "signature": [ + "Pick<", + { + "pluginId": "@kbn/core-chrome-browser", + "scope": "public", + "docId": "kibKbnCoreChromeBrowserPluginApi", + "section": "def-public.ChromeProjectNavigationNode", + "text": "ChromeProjectNavigationNode" + }, + ", \"id\" | \"children\" | \"path\" | \"sideNavStatus\" | \"deepLink\"> & { title: React.ReactNode; }" + ], + "path": "packages/core/chrome/core-chrome-browser/src/project_navigation.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/core-chrome-browser", "id": "def-public.RenderAs", diff --git a/api_docs/kbn_core_chrome_browser.mdx b/api_docs/kbn_core_chrome_browser.mdx index f91ce095a8381..a78fa54cc5265 100644 --- a/api_docs/kbn_core_chrome_browser.mdx +++ b/api_docs/kbn_core_chrome_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser title: "@kbn/core-chrome-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-chrome-browser'] --- import kbnCoreChromeBrowserObj from './kbn_core_chrome_browser.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sh | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 207 | 0 | 101 | 0 | +| 208 | 0 | 102 | 0 | ## Client diff --git a/api_docs/kbn_core_chrome_browser_mocks.mdx b/api_docs/kbn_core_chrome_browser_mocks.mdx index ee61bc9c6a7eb..e8ec914df9fe1 100644 --- a/api_docs/kbn_core_chrome_browser_mocks.mdx +++ b/api_docs/kbn_core_chrome_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser-mocks title: "@kbn/core-chrome-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-chrome-browser-mocks'] --- import kbnCoreChromeBrowserMocksObj from './kbn_core_chrome_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_config_server_internal.mdx b/api_docs/kbn_core_config_server_internal.mdx index b7668081d4ee3..eea0b8aa44e76 100644 --- a/api_docs/kbn_core_config_server_internal.mdx +++ b/api_docs/kbn_core_config_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-config-server-internal title: "@kbn/core-config-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-config-server-internal plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-config-server-internal'] --- import kbnCoreConfigServerInternalObj from './kbn_core_config_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_browser.mdx b/api_docs/kbn_core_custom_branding_browser.mdx index e48e917415d0b..73897addfc274 100644 --- a/api_docs/kbn_core_custom_branding_browser.mdx +++ b/api_docs/kbn_core_custom_branding_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser title: "@kbn/core-custom-branding-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser'] --- import kbnCoreCustomBrandingBrowserObj from './kbn_core_custom_branding_browser.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_browser_internal.mdx b/api_docs/kbn_core_custom_branding_browser_internal.mdx index 95cf740feff7a..5eb197e0f968e 100644 --- a/api_docs/kbn_core_custom_branding_browser_internal.mdx +++ b/api_docs/kbn_core_custom_branding_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-internal title: "@kbn/core-custom-branding-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-internal plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser-internal'] --- import kbnCoreCustomBrandingBrowserInternalObj from './kbn_core_custom_branding_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_browser_mocks.mdx b/api_docs/kbn_core_custom_branding_browser_mocks.mdx index 9ceacd82ea55f..7cd17f38eae71 100644 --- a/api_docs/kbn_core_custom_branding_browser_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-mocks title: "@kbn/core-custom-branding-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser-mocks'] --- import kbnCoreCustomBrandingBrowserMocksObj from './kbn_core_custom_branding_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_common.mdx b/api_docs/kbn_core_custom_branding_common.mdx index 3022568b2d394..31a4b6dfdaeb1 100644 --- a/api_docs/kbn_core_custom_branding_common.mdx +++ b/api_docs/kbn_core_custom_branding_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-common title: "@kbn/core-custom-branding-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-common plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-common'] --- import kbnCoreCustomBrandingCommonObj from './kbn_core_custom_branding_common.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_server.mdx b/api_docs/kbn_core_custom_branding_server.mdx index b38405d330388..742fc00257c53 100644 --- a/api_docs/kbn_core_custom_branding_server.mdx +++ b/api_docs/kbn_core_custom_branding_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server title: "@kbn/core-custom-branding-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server'] --- import kbnCoreCustomBrandingServerObj from './kbn_core_custom_branding_server.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_server_internal.mdx b/api_docs/kbn_core_custom_branding_server_internal.mdx index 81f3b6504ecac..d8b3b3b62381d 100644 --- a/api_docs/kbn_core_custom_branding_server_internal.mdx +++ b/api_docs/kbn_core_custom_branding_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-internal title: "@kbn/core-custom-branding-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-internal plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server-internal'] --- import kbnCoreCustomBrandingServerInternalObj from './kbn_core_custom_branding_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_server_mocks.mdx b/api_docs/kbn_core_custom_branding_server_mocks.mdx index 949467426e44f..6c92ceb3ea879 100644 --- a/api_docs/kbn_core_custom_branding_server_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-mocks title: "@kbn/core-custom-branding-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server-mocks'] --- import kbnCoreCustomBrandingServerMocksObj from './kbn_core_custom_branding_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_browser.mdx b/api_docs/kbn_core_deprecations_browser.mdx index 27fa7e7ad6f52..a1428a6834ce5 100644 --- a/api_docs/kbn_core_deprecations_browser.mdx +++ b/api_docs/kbn_core_deprecations_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser title: "@kbn/core-deprecations-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser'] --- import kbnCoreDeprecationsBrowserObj from './kbn_core_deprecations_browser.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_browser_internal.mdx b/api_docs/kbn_core_deprecations_browser_internal.mdx index 0ce1fe6cab123..a4bd60a9e633c 100644 --- a/api_docs/kbn_core_deprecations_browser_internal.mdx +++ b/api_docs/kbn_core_deprecations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-internal title: "@kbn/core-deprecations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-internal plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser-internal'] --- import kbnCoreDeprecationsBrowserInternalObj from './kbn_core_deprecations_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_browser_mocks.mdx b/api_docs/kbn_core_deprecations_browser_mocks.mdx index 7823847efc55e..4610706b3737d 100644 --- a/api_docs/kbn_core_deprecations_browser_mocks.mdx +++ b/api_docs/kbn_core_deprecations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-mocks title: "@kbn/core-deprecations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser-mocks'] --- import kbnCoreDeprecationsBrowserMocksObj from './kbn_core_deprecations_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_common.mdx b/api_docs/kbn_core_deprecations_common.mdx index 2ca1a9a5995d7..f7b58021d63c5 100644 --- a/api_docs/kbn_core_deprecations_common.mdx +++ b/api_docs/kbn_core_deprecations_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-common title: "@kbn/core-deprecations-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-common plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-common'] --- import kbnCoreDeprecationsCommonObj from './kbn_core_deprecations_common.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_server.mdx b/api_docs/kbn_core_deprecations_server.mdx index 05a6fc2800d45..2720fba36158d 100644 --- a/api_docs/kbn_core_deprecations_server.mdx +++ b/api_docs/kbn_core_deprecations_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server title: "@kbn/core-deprecations-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server'] --- import kbnCoreDeprecationsServerObj from './kbn_core_deprecations_server.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_server_internal.mdx b/api_docs/kbn_core_deprecations_server_internal.mdx index 76401015261f3..a34ed7a13dc37 100644 --- a/api_docs/kbn_core_deprecations_server_internal.mdx +++ b/api_docs/kbn_core_deprecations_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-internal title: "@kbn/core-deprecations-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-internal plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server-internal'] --- import kbnCoreDeprecationsServerInternalObj from './kbn_core_deprecations_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_server_mocks.mdx b/api_docs/kbn_core_deprecations_server_mocks.mdx index f26999c9ccb92..9f16ec2a425ae 100644 --- a/api_docs/kbn_core_deprecations_server_mocks.mdx +++ b/api_docs/kbn_core_deprecations_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-mocks title: "@kbn/core-deprecations-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server-mocks'] --- import kbnCoreDeprecationsServerMocksObj from './kbn_core_deprecations_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_browser.mdx b/api_docs/kbn_core_doc_links_browser.mdx index 89510f89fb446..53ccd241e5816 100644 --- a/api_docs/kbn_core_doc_links_browser.mdx +++ b/api_docs/kbn_core_doc_links_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser title: "@kbn/core-doc-links-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-browser'] --- import kbnCoreDocLinksBrowserObj from './kbn_core_doc_links_browser.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_browser_mocks.mdx b/api_docs/kbn_core_doc_links_browser_mocks.mdx index e2ace01f4d91a..14f3d2a930787 100644 --- a/api_docs/kbn_core_doc_links_browser_mocks.mdx +++ b/api_docs/kbn_core_doc_links_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser-mocks title: "@kbn/core-doc-links-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-browser-mocks'] --- import kbnCoreDocLinksBrowserMocksObj from './kbn_core_doc_links_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_server.mdx b/api_docs/kbn_core_doc_links_server.mdx index cb0e47e526147..36577ea40bc50 100644 --- a/api_docs/kbn_core_doc_links_server.mdx +++ b/api_docs/kbn_core_doc_links_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server title: "@kbn/core-doc-links-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-server'] --- import kbnCoreDocLinksServerObj from './kbn_core_doc_links_server.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_server_mocks.mdx b/api_docs/kbn_core_doc_links_server_mocks.mdx index cd6c785eb9766..c6586df21dbb1 100644 --- a/api_docs/kbn_core_doc_links_server_mocks.mdx +++ b/api_docs/kbn_core_doc_links_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server-mocks title: "@kbn/core-doc-links-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-server-mocks'] --- import kbnCoreDocLinksServerMocksObj from './kbn_core_doc_links_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx index a64c8e76457c0..3d282dafbb4f8 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-internal title: "@kbn/core-elasticsearch-client-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-internal plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-client-server-internal'] --- import kbnCoreElasticsearchClientServerInternalObj from './kbn_core_elasticsearch_client_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx index d318ce092bde2..cafbc595fe337 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-mocks title: "@kbn/core-elasticsearch-client-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-client-server-mocks'] --- import kbnCoreElasticsearchClientServerMocksObj from './kbn_core_elasticsearch_client_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_server.mdx b/api_docs/kbn_core_elasticsearch_server.mdx index d7a7d8dd79fb1..cf544ca2a7c0a 100644 --- a/api_docs/kbn_core_elasticsearch_server.mdx +++ b/api_docs/kbn_core_elasticsearch_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server title: "@kbn/core-elasticsearch-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server'] --- import kbnCoreElasticsearchServerObj from './kbn_core_elasticsearch_server.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_server_internal.mdx b/api_docs/kbn_core_elasticsearch_server_internal.mdx index 28b041ffda656..eaf722abb841e 100644 --- a/api_docs/kbn_core_elasticsearch_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-internal title: "@kbn/core-elasticsearch-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-internal plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server-internal'] --- import kbnCoreElasticsearchServerInternalObj from './kbn_core_elasticsearch_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_server_mocks.mdx b/api_docs/kbn_core_elasticsearch_server_mocks.mdx index a4d11955f590b..3a5aff3d753bf 100644 --- a/api_docs/kbn_core_elasticsearch_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-mocks title: "@kbn/core-elasticsearch-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server-mocks'] --- import kbnCoreElasticsearchServerMocksObj from './kbn_core_elasticsearch_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_environment_server_internal.mdx b/api_docs/kbn_core_environment_server_internal.mdx index a878b7bb2d05a..405e79889a53d 100644 --- a/api_docs/kbn_core_environment_server_internal.mdx +++ b/api_docs/kbn_core_environment_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-internal title: "@kbn/core-environment-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-internal plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-environment-server-internal'] --- import kbnCoreEnvironmentServerInternalObj from './kbn_core_environment_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_environment_server_mocks.mdx b/api_docs/kbn_core_environment_server_mocks.mdx index f65a6cfa25bac..e603e1fd7b5cd 100644 --- a/api_docs/kbn_core_environment_server_mocks.mdx +++ b/api_docs/kbn_core_environment_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-mocks title: "@kbn/core-environment-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-environment-server-mocks'] --- import kbnCoreEnvironmentServerMocksObj from './kbn_core_environment_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_browser.mdx b/api_docs/kbn_core_execution_context_browser.mdx index e18bbbd590468..e5e91c30b1fec 100644 --- a/api_docs/kbn_core_execution_context_browser.mdx +++ b/api_docs/kbn_core_execution_context_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser title: "@kbn/core-execution-context-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser'] --- import kbnCoreExecutionContextBrowserObj from './kbn_core_execution_context_browser.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_browser_internal.mdx b/api_docs/kbn_core_execution_context_browser_internal.mdx index eb02a6e79738b..ebeb115e4d90c 100644 --- a/api_docs/kbn_core_execution_context_browser_internal.mdx +++ b/api_docs/kbn_core_execution_context_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-internal title: "@kbn/core-execution-context-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-internal plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser-internal'] --- import kbnCoreExecutionContextBrowserInternalObj from './kbn_core_execution_context_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_browser_mocks.mdx b/api_docs/kbn_core_execution_context_browser_mocks.mdx index e4be154316277..3c032b7923706 100644 --- a/api_docs/kbn_core_execution_context_browser_mocks.mdx +++ b/api_docs/kbn_core_execution_context_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-mocks title: "@kbn/core-execution-context-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser-mocks'] --- import kbnCoreExecutionContextBrowserMocksObj from './kbn_core_execution_context_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_common.mdx b/api_docs/kbn_core_execution_context_common.mdx index 0fec1d4fd393c..29d59a8620904 100644 --- a/api_docs/kbn_core_execution_context_common.mdx +++ b/api_docs/kbn_core_execution_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-common title: "@kbn/core-execution-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-common plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-common'] --- import kbnCoreExecutionContextCommonObj from './kbn_core_execution_context_common.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_server.mdx b/api_docs/kbn_core_execution_context_server.mdx index d041cff71dab2..66666e86bf6a4 100644 --- a/api_docs/kbn_core_execution_context_server.mdx +++ b/api_docs/kbn_core_execution_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server title: "@kbn/core-execution-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server'] --- import kbnCoreExecutionContextServerObj from './kbn_core_execution_context_server.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_server_internal.mdx b/api_docs/kbn_core_execution_context_server_internal.mdx index c9014070e632a..4fe2b26c142ad 100644 --- a/api_docs/kbn_core_execution_context_server_internal.mdx +++ b/api_docs/kbn_core_execution_context_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-internal title: "@kbn/core-execution-context-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-internal plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server-internal'] --- import kbnCoreExecutionContextServerInternalObj from './kbn_core_execution_context_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_server_mocks.mdx b/api_docs/kbn_core_execution_context_server_mocks.mdx index ff4178f885f5d..fccb58df8c7e4 100644 --- a/api_docs/kbn_core_execution_context_server_mocks.mdx +++ b/api_docs/kbn_core_execution_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-mocks title: "@kbn/core-execution-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server-mocks'] --- import kbnCoreExecutionContextServerMocksObj from './kbn_core_execution_context_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_fatal_errors_browser.mdx b/api_docs/kbn_core_fatal_errors_browser.mdx index 94b91df2ade37..fa6debfeef589 100644 --- a/api_docs/kbn_core_fatal_errors_browser.mdx +++ b/api_docs/kbn_core_fatal_errors_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser title: "@kbn/core-fatal-errors-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-fatal-errors-browser'] --- import kbnCoreFatalErrorsBrowserObj from './kbn_core_fatal_errors_browser.devdocs.json'; diff --git a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx index 5ae9ae2e2c637..0987bd7a5fbcd 100644 --- a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx +++ b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser-mocks title: "@kbn/core-fatal-errors-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-fatal-errors-browser-mocks'] --- import kbnCoreFatalErrorsBrowserMocksObj from './kbn_core_fatal_errors_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_browser.mdx b/api_docs/kbn_core_feature_flags_browser.mdx index 837e3e33a632c..23c783dd34cdf 100644 --- a/api_docs/kbn_core_feature_flags_browser.mdx +++ b/api_docs/kbn_core_feature_flags_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-browser title: "@kbn/core-feature-flags-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-browser plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-browser'] --- import kbnCoreFeatureFlagsBrowserObj from './kbn_core_feature_flags_browser.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_browser_internal.mdx b/api_docs/kbn_core_feature_flags_browser_internal.mdx index 8f9b324aa48fa..eb87854ef4a5b 100644 --- a/api_docs/kbn_core_feature_flags_browser_internal.mdx +++ b/api_docs/kbn_core_feature_flags_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-browser-internal title: "@kbn/core-feature-flags-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-browser-internal plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-browser-internal'] --- import kbnCoreFeatureFlagsBrowserInternalObj from './kbn_core_feature_flags_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_browser_mocks.mdx b/api_docs/kbn_core_feature_flags_browser_mocks.mdx index 6ddb387cac9d0..c4cf792fd41ec 100644 --- a/api_docs/kbn_core_feature_flags_browser_mocks.mdx +++ b/api_docs/kbn_core_feature_flags_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-browser-mocks title: "@kbn/core-feature-flags-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-browser-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-browser-mocks'] --- import kbnCoreFeatureFlagsBrowserMocksObj from './kbn_core_feature_flags_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_server.mdx b/api_docs/kbn_core_feature_flags_server.mdx index 5b1946b309e32..030ef6826f1ca 100644 --- a/api_docs/kbn_core_feature_flags_server.mdx +++ b/api_docs/kbn_core_feature_flags_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-server title: "@kbn/core-feature-flags-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-server plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-server'] --- import kbnCoreFeatureFlagsServerObj from './kbn_core_feature_flags_server.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_server_internal.mdx b/api_docs/kbn_core_feature_flags_server_internal.mdx index 4fec14f7aab91..2b9674bb37a59 100644 --- a/api_docs/kbn_core_feature_flags_server_internal.mdx +++ b/api_docs/kbn_core_feature_flags_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-server-internal title: "@kbn/core-feature-flags-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-server-internal plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-server-internal'] --- import kbnCoreFeatureFlagsServerInternalObj from './kbn_core_feature_flags_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_server_mocks.mdx b/api_docs/kbn_core_feature_flags_server_mocks.mdx index bb595ca54c5b5..a54a03d0c7d00 100644 --- a/api_docs/kbn_core_feature_flags_server_mocks.mdx +++ b/api_docs/kbn_core_feature_flags_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-server-mocks title: "@kbn/core-feature-flags-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-server-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-server-mocks'] --- import kbnCoreFeatureFlagsServerMocksObj from './kbn_core_feature_flags_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_browser.mdx b/api_docs/kbn_core_http_browser.mdx index e6b8cd311ee63..36f3969b2d5de 100644 --- a/api_docs/kbn_core_http_browser.mdx +++ b/api_docs/kbn_core_http_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser title: "@kbn/core-http-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser'] --- import kbnCoreHttpBrowserObj from './kbn_core_http_browser.devdocs.json'; diff --git a/api_docs/kbn_core_http_browser_internal.mdx b/api_docs/kbn_core_http_browser_internal.mdx index 8dcf27cacafce..3a47530908e90 100644 --- a/api_docs/kbn_core_http_browser_internal.mdx +++ b/api_docs/kbn_core_http_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-internal title: "@kbn/core-http-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-internal plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser-internal'] --- import kbnCoreHttpBrowserInternalObj from './kbn_core_http_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_browser_mocks.mdx b/api_docs/kbn_core_http_browser_mocks.mdx index 9369f65971af7..44103774d4d44 100644 --- a/api_docs/kbn_core_http_browser_mocks.mdx +++ b/api_docs/kbn_core_http_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-mocks title: "@kbn/core-http-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser-mocks'] --- import kbnCoreHttpBrowserMocksObj from './kbn_core_http_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_common.mdx b/api_docs/kbn_core_http_common.mdx index f1d1f27d7d1b0..3e34dfd8af40a 100644 --- a/api_docs/kbn_core_http_common.mdx +++ b/api_docs/kbn_core_http_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-common title: "@kbn/core-http-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-common plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-common'] --- import kbnCoreHttpCommonObj from './kbn_core_http_common.devdocs.json'; diff --git a/api_docs/kbn_core_http_context_server_mocks.mdx b/api_docs/kbn_core_http_context_server_mocks.mdx index db25080fbfe34..1cf2835a50d33 100644 --- a/api_docs/kbn_core_http_context_server_mocks.mdx +++ b/api_docs/kbn_core_http_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-context-server-mocks title: "@kbn/core-http-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-context-server-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-context-server-mocks'] --- import kbnCoreHttpContextServerMocksObj from './kbn_core_http_context_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_request_handler_context_server.mdx b/api_docs/kbn_core_http_request_handler_context_server.mdx index 68278c812c48d..fcbaaa44fe931 100644 --- a/api_docs/kbn_core_http_request_handler_context_server.mdx +++ b/api_docs/kbn_core_http_request_handler_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-request-handler-context-server title: "@kbn/core-http-request-handler-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-request-handler-context-server plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-request-handler-context-server'] --- import kbnCoreHttpRequestHandlerContextServerObj from './kbn_core_http_request_handler_context_server.devdocs.json'; diff --git a/api_docs/kbn_core_http_resources_server.mdx b/api_docs/kbn_core_http_resources_server.mdx index 8be0dbf992f29..2fc384fa401c8 100644 --- a/api_docs/kbn_core_http_resources_server.mdx +++ b/api_docs/kbn_core_http_resources_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server title: "@kbn/core-http-resources-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server'] --- import kbnCoreHttpResourcesServerObj from './kbn_core_http_resources_server.devdocs.json'; diff --git a/api_docs/kbn_core_http_resources_server_internal.mdx b/api_docs/kbn_core_http_resources_server_internal.mdx index 1407c288d0d11..5b25c8917f806 100644 --- a/api_docs/kbn_core_http_resources_server_internal.mdx +++ b/api_docs/kbn_core_http_resources_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-internal title: "@kbn/core-http-resources-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-internal plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server-internal'] --- import kbnCoreHttpResourcesServerInternalObj from './kbn_core_http_resources_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_resources_server_mocks.mdx b/api_docs/kbn_core_http_resources_server_mocks.mdx index 4a68a3b2a6730..9aedacae763de 100644 --- a/api_docs/kbn_core_http_resources_server_mocks.mdx +++ b/api_docs/kbn_core_http_resources_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-mocks title: "@kbn/core-http-resources-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server-mocks'] --- import kbnCoreHttpResourcesServerMocksObj from './kbn_core_http_resources_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_router_server_internal.mdx b/api_docs/kbn_core_http_router_server_internal.mdx index e3dfaae50bad8..49d655d0087df 100644 --- a/api_docs/kbn_core_http_router_server_internal.mdx +++ b/api_docs/kbn_core_http_router_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-internal title: "@kbn/core-http-router-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-internal plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-internal'] --- import kbnCoreHttpRouterServerInternalObj from './kbn_core_http_router_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_router_server_mocks.mdx b/api_docs/kbn_core_http_router_server_mocks.mdx index d6647890e2a91..0bbea907672c8 100644 --- a/api_docs/kbn_core_http_router_server_mocks.mdx +++ b/api_docs/kbn_core_http_router_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-mocks title: "@kbn/core-http-router-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-mocks'] --- import kbnCoreHttpRouterServerMocksObj from './kbn_core_http_router_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index 2e4af146f8ebb..3edef1c88203b 100644 --- a/api_docs/kbn_core_http_server.mdx +++ b/api_docs/kbn_core_http_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server title: "@kbn/core-http-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server'] --- import kbnCoreHttpServerObj from './kbn_core_http_server.devdocs.json'; diff --git a/api_docs/kbn_core_http_server_internal.mdx b/api_docs/kbn_core_http_server_internal.mdx index 77084a93da169..bb483a202168c 100644 --- a/api_docs/kbn_core_http_server_internal.mdx +++ b/api_docs/kbn_core_http_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-internal title: "@kbn/core-http-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-internal plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-internal'] --- import kbnCoreHttpServerInternalObj from './kbn_core_http_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_server_mocks.mdx b/api_docs/kbn_core_http_server_mocks.mdx index 1eab4edff9c52..bd9ece7f62799 100644 --- a/api_docs/kbn_core_http_server_mocks.mdx +++ b/api_docs/kbn_core_http_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-mocks title: "@kbn/core-http-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-mocks'] --- import kbnCoreHttpServerMocksObj from './kbn_core_http_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_browser.mdx b/api_docs/kbn_core_i18n_browser.mdx index a4f8c0fd2cbe5..be024b977afc1 100644 --- a/api_docs/kbn_core_i18n_browser.mdx +++ b/api_docs/kbn_core_i18n_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser title: "@kbn/core-i18n-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-browser'] --- import kbnCoreI18nBrowserObj from './kbn_core_i18n_browser.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_browser_mocks.mdx b/api_docs/kbn_core_i18n_browser_mocks.mdx index 15cfc791df38d..439f672542446 100644 --- a/api_docs/kbn_core_i18n_browser_mocks.mdx +++ b/api_docs/kbn_core_i18n_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser-mocks title: "@kbn/core-i18n-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-browser-mocks'] --- import kbnCoreI18nBrowserMocksObj from './kbn_core_i18n_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_server.mdx b/api_docs/kbn_core_i18n_server.mdx index bb18ae0f8a60c..661862c64a4bd 100644 --- a/api_docs/kbn_core_i18n_server.mdx +++ b/api_docs/kbn_core_i18n_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server title: "@kbn/core-i18n-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server'] --- import kbnCoreI18nServerObj from './kbn_core_i18n_server.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_server_internal.mdx b/api_docs/kbn_core_i18n_server_internal.mdx index e2d19c3d25631..ed5884b14bd1a 100644 --- a/api_docs/kbn_core_i18n_server_internal.mdx +++ b/api_docs/kbn_core_i18n_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-internal title: "@kbn/core-i18n-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-internal plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server-internal'] --- import kbnCoreI18nServerInternalObj from './kbn_core_i18n_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_server_mocks.mdx b/api_docs/kbn_core_i18n_server_mocks.mdx index e44a4572314cd..579119c5a61ad 100644 --- a/api_docs/kbn_core_i18n_server_mocks.mdx +++ b/api_docs/kbn_core_i18n_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-mocks title: "@kbn/core-i18n-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server-mocks'] --- import kbnCoreI18nServerMocksObj from './kbn_core_i18n_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx index 5e6b40e7fcf81..3e0553129d19c 100644 --- a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx +++ b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-injected-metadata-browser-mocks title: "@kbn/core-injected-metadata-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-injected-metadata-browser-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-injected-metadata-browser-mocks'] --- import kbnCoreInjectedMetadataBrowserMocksObj from './kbn_core_injected_metadata_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_integrations_browser_internal.mdx b/api_docs/kbn_core_integrations_browser_internal.mdx index 57c01c416bf0d..e967bebd80039 100644 --- a/api_docs/kbn_core_integrations_browser_internal.mdx +++ b/api_docs/kbn_core_integrations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-internal title: "@kbn/core-integrations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-internal plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-integrations-browser-internal'] --- import kbnCoreIntegrationsBrowserInternalObj from './kbn_core_integrations_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_integrations_browser_mocks.mdx b/api_docs/kbn_core_integrations_browser_mocks.mdx index 51537ccdaf7d2..37b3cb9c2319c 100644 --- a/api_docs/kbn_core_integrations_browser_mocks.mdx +++ b/api_docs/kbn_core_integrations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-mocks title: "@kbn/core-integrations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-integrations-browser-mocks'] --- import kbnCoreIntegrationsBrowserMocksObj from './kbn_core_integrations_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_browser.mdx b/api_docs/kbn_core_lifecycle_browser.mdx index 87ac6c95413d2..4c712673339cc 100644 --- a/api_docs/kbn_core_lifecycle_browser.mdx +++ b/api_docs/kbn_core_lifecycle_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser title: "@kbn/core-lifecycle-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-browser'] --- import kbnCoreLifecycleBrowserObj from './kbn_core_lifecycle_browser.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_browser_mocks.mdx b/api_docs/kbn_core_lifecycle_browser_mocks.mdx index affa19778068b..587fbbb08941f 100644 --- a/api_docs/kbn_core_lifecycle_browser_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser-mocks title: "@kbn/core-lifecycle-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-browser-mocks'] --- import kbnCoreLifecycleBrowserMocksObj from './kbn_core_lifecycle_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_server.mdx b/api_docs/kbn_core_lifecycle_server.mdx index c4d7d63de5056..1bb397388ad29 100644 --- a/api_docs/kbn_core_lifecycle_server.mdx +++ b/api_docs/kbn_core_lifecycle_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server title: "@kbn/core-lifecycle-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-server'] --- import kbnCoreLifecycleServerObj from './kbn_core_lifecycle_server.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_server_mocks.mdx b/api_docs/kbn_core_lifecycle_server_mocks.mdx index 3a891fb4544e5..fd8f2a43f8225 100644 --- a/api_docs/kbn_core_lifecycle_server_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server-mocks title: "@kbn/core-lifecycle-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-server-mocks'] --- import kbnCoreLifecycleServerMocksObj from './kbn_core_lifecycle_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_logging_browser_mocks.mdx b/api_docs/kbn_core_logging_browser_mocks.mdx index fc775df783422..9ab41c01406c5 100644 --- a/api_docs/kbn_core_logging_browser_mocks.mdx +++ b/api_docs/kbn_core_logging_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-browser-mocks title: "@kbn/core-logging-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-browser-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-browser-mocks'] --- import kbnCoreLoggingBrowserMocksObj from './kbn_core_logging_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_logging_common_internal.mdx b/api_docs/kbn_core_logging_common_internal.mdx index 31d862162945c..182d3429489b2 100644 --- a/api_docs/kbn_core_logging_common_internal.mdx +++ b/api_docs/kbn_core_logging_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-common-internal title: "@kbn/core-logging-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-common-internal plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-common-internal'] --- import kbnCoreLoggingCommonInternalObj from './kbn_core_logging_common_internal.devdocs.json'; diff --git a/api_docs/kbn_core_logging_server.mdx b/api_docs/kbn_core_logging_server.mdx index 07d1af4780246..25dc798b2f5e5 100644 --- a/api_docs/kbn_core_logging_server.mdx +++ b/api_docs/kbn_core_logging_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server title: "@kbn/core-logging-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server'] --- import kbnCoreLoggingServerObj from './kbn_core_logging_server.devdocs.json'; diff --git a/api_docs/kbn_core_logging_server_internal.mdx b/api_docs/kbn_core_logging_server_internal.mdx index 7e1a3d308c6e6..a45a6d50de128 100644 --- a/api_docs/kbn_core_logging_server_internal.mdx +++ b/api_docs/kbn_core_logging_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-internal title: "@kbn/core-logging-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-internal plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server-internal'] --- import kbnCoreLoggingServerInternalObj from './kbn_core_logging_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_logging_server_mocks.mdx b/api_docs/kbn_core_logging_server_mocks.mdx index 1fa6a538f1a4f..afd94150192d4 100644 --- a/api_docs/kbn_core_logging_server_mocks.mdx +++ b/api_docs/kbn_core_logging_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-mocks title: "@kbn/core-logging-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server-mocks'] --- import kbnCoreLoggingServerMocksObj from './kbn_core_logging_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_collectors_server_internal.mdx b/api_docs/kbn_core_metrics_collectors_server_internal.mdx index 4216acde77ada..a0517082441a2 100644 --- a/api_docs/kbn_core_metrics_collectors_server_internal.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-internal title: "@kbn/core-metrics-collectors-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-internal plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-collectors-server-internal'] --- import kbnCoreMetricsCollectorsServerInternalObj from './kbn_core_metrics_collectors_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx index f69efae675890..a63a56afdc225 100644 --- a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-mocks title: "@kbn/core-metrics-collectors-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-collectors-server-mocks'] --- import kbnCoreMetricsCollectorsServerMocksObj from './kbn_core_metrics_collectors_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_server.mdx b/api_docs/kbn_core_metrics_server.mdx index 0aedefa5eb611..86bfbc7fe0822 100644 --- a/api_docs/kbn_core_metrics_server.mdx +++ b/api_docs/kbn_core_metrics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server title: "@kbn/core-metrics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server'] --- import kbnCoreMetricsServerObj from './kbn_core_metrics_server.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_server_internal.mdx b/api_docs/kbn_core_metrics_server_internal.mdx index a853bf3e68453..9d3d95af1d297 100644 --- a/api_docs/kbn_core_metrics_server_internal.mdx +++ b/api_docs/kbn_core_metrics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-internal title: "@kbn/core-metrics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-internal plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server-internal'] --- import kbnCoreMetricsServerInternalObj from './kbn_core_metrics_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_server_mocks.mdx b/api_docs/kbn_core_metrics_server_mocks.mdx index 04bcdf30a541b..05b4b3ea723f5 100644 --- a/api_docs/kbn_core_metrics_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-mocks title: "@kbn/core-metrics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server-mocks'] --- import kbnCoreMetricsServerMocksObj from './kbn_core_metrics_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_mount_utils_browser.mdx b/api_docs/kbn_core_mount_utils_browser.mdx index ca1f8c737bc4d..8960cbfc78009 100644 --- a/api_docs/kbn_core_mount_utils_browser.mdx +++ b/api_docs/kbn_core_mount_utils_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-mount-utils-browser title: "@kbn/core-mount-utils-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-mount-utils-browser plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-mount-utils-browser'] --- import kbnCoreMountUtilsBrowserObj from './kbn_core_mount_utils_browser.devdocs.json'; diff --git a/api_docs/kbn_core_node_server.mdx b/api_docs/kbn_core_node_server.mdx index af8203ba16d6b..694cbc620bcf0 100644 --- a/api_docs/kbn_core_node_server.mdx +++ b/api_docs/kbn_core_node_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server title: "@kbn/core-node-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server'] --- import kbnCoreNodeServerObj from './kbn_core_node_server.devdocs.json'; diff --git a/api_docs/kbn_core_node_server_internal.mdx b/api_docs/kbn_core_node_server_internal.mdx index 406099649b20c..804e40000071f 100644 --- a/api_docs/kbn_core_node_server_internal.mdx +++ b/api_docs/kbn_core_node_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-internal title: "@kbn/core-node-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-internal plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server-internal'] --- import kbnCoreNodeServerInternalObj from './kbn_core_node_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_node_server_mocks.mdx b/api_docs/kbn_core_node_server_mocks.mdx index 4fd0ccf534623..d5b92d5a70f59 100644 --- a/api_docs/kbn_core_node_server_mocks.mdx +++ b/api_docs/kbn_core_node_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-mocks title: "@kbn/core-node-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server-mocks'] --- import kbnCoreNodeServerMocksObj from './kbn_core_node_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_notifications_browser.mdx b/api_docs/kbn_core_notifications_browser.mdx index 3f328d5fd528a..a5a64f2ff84ea 100644 --- a/api_docs/kbn_core_notifications_browser.mdx +++ b/api_docs/kbn_core_notifications_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser title: "@kbn/core-notifications-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser'] --- import kbnCoreNotificationsBrowserObj from './kbn_core_notifications_browser.devdocs.json'; diff --git a/api_docs/kbn_core_notifications_browser_internal.mdx b/api_docs/kbn_core_notifications_browser_internal.mdx index 67ed0a8bdbcc4..3d834a498b4f5 100644 --- a/api_docs/kbn_core_notifications_browser_internal.mdx +++ b/api_docs/kbn_core_notifications_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-internal title: "@kbn/core-notifications-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-internal plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser-internal'] --- import kbnCoreNotificationsBrowserInternalObj from './kbn_core_notifications_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_notifications_browser_mocks.mdx b/api_docs/kbn_core_notifications_browser_mocks.mdx index 2db575f4214ff..e78fe41a24604 100644 --- a/api_docs/kbn_core_notifications_browser_mocks.mdx +++ b/api_docs/kbn_core_notifications_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-mocks title: "@kbn/core-notifications-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser-mocks'] --- import kbnCoreNotificationsBrowserMocksObj from './kbn_core_notifications_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_overlays_browser.mdx b/api_docs/kbn_core_overlays_browser.mdx index 65a9eea7ef721..5229345b0f000 100644 --- a/api_docs/kbn_core_overlays_browser.mdx +++ b/api_docs/kbn_core_overlays_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser title: "@kbn/core-overlays-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser'] --- import kbnCoreOverlaysBrowserObj from './kbn_core_overlays_browser.devdocs.json'; diff --git a/api_docs/kbn_core_overlays_browser_internal.mdx b/api_docs/kbn_core_overlays_browser_internal.mdx index c903a18965096..96e53d8fb1e56 100644 --- a/api_docs/kbn_core_overlays_browser_internal.mdx +++ b/api_docs/kbn_core_overlays_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-internal title: "@kbn/core-overlays-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-internal plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser-internal'] --- import kbnCoreOverlaysBrowserInternalObj from './kbn_core_overlays_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_overlays_browser_mocks.mdx b/api_docs/kbn_core_overlays_browser_mocks.mdx index 23ccca8c3830e..609296255cabc 100644 --- a/api_docs/kbn_core_overlays_browser_mocks.mdx +++ b/api_docs/kbn_core_overlays_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-mocks title: "@kbn/core-overlays-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser-mocks'] --- import kbnCoreOverlaysBrowserMocksObj from './kbn_core_overlays_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_browser.mdx b/api_docs/kbn_core_plugins_browser.mdx index b16f285fe3142..de3ed53d35226 100644 --- a/api_docs/kbn_core_plugins_browser.mdx +++ b/api_docs/kbn_core_plugins_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser title: "@kbn/core-plugins-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser'] --- import kbnCorePluginsBrowserObj from './kbn_core_plugins_browser.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_browser_mocks.mdx b/api_docs/kbn_core_plugins_browser_mocks.mdx index 29b8824299f38..3e09c3cab1f31 100644 --- a/api_docs/kbn_core_plugins_browser_mocks.mdx +++ b/api_docs/kbn_core_plugins_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser-mocks title: "@kbn/core-plugins-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser-mocks'] --- import kbnCorePluginsBrowserMocksObj from './kbn_core_plugins_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_contracts_browser.mdx b/api_docs/kbn_core_plugins_contracts_browser.mdx index 7f88e41b9d32d..723a130bc436f 100644 --- a/api_docs/kbn_core_plugins_contracts_browser.mdx +++ b/api_docs/kbn_core_plugins_contracts_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-contracts-browser title: "@kbn/core-plugins-contracts-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-contracts-browser plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-contracts-browser'] --- import kbnCorePluginsContractsBrowserObj from './kbn_core_plugins_contracts_browser.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_contracts_server.mdx b/api_docs/kbn_core_plugins_contracts_server.mdx index 5aa93ae65598f..0fda1f9456b86 100644 --- a/api_docs/kbn_core_plugins_contracts_server.mdx +++ b/api_docs/kbn_core_plugins_contracts_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-contracts-server title: "@kbn/core-plugins-contracts-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-contracts-server plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-contracts-server'] --- import kbnCorePluginsContractsServerObj from './kbn_core_plugins_contracts_server.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_server.mdx b/api_docs/kbn_core_plugins_server.mdx index 6b7c1cb0e3e52..fbfef5c664c78 100644 --- a/api_docs/kbn_core_plugins_server.mdx +++ b/api_docs/kbn_core_plugins_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server title: "@kbn/core-plugins-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-server'] --- import kbnCorePluginsServerObj from './kbn_core_plugins_server.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_server_mocks.mdx b/api_docs/kbn_core_plugins_server_mocks.mdx index 714f322fc6027..60c6116a12e69 100644 --- a/api_docs/kbn_core_plugins_server_mocks.mdx +++ b/api_docs/kbn_core_plugins_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server-mocks title: "@kbn/core-plugins-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-server-mocks'] --- import kbnCorePluginsServerMocksObj from './kbn_core_plugins_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_preboot_server.mdx b/api_docs/kbn_core_preboot_server.mdx index 7edc7d68323b6..2f64eba21bf9a 100644 --- a/api_docs/kbn_core_preboot_server.mdx +++ b/api_docs/kbn_core_preboot_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server title: "@kbn/core-preboot-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-preboot-server'] --- import kbnCorePrebootServerObj from './kbn_core_preboot_server.devdocs.json'; diff --git a/api_docs/kbn_core_preboot_server_mocks.mdx b/api_docs/kbn_core_preboot_server_mocks.mdx index d063c725f3972..c1918858809b1 100644 --- a/api_docs/kbn_core_preboot_server_mocks.mdx +++ b/api_docs/kbn_core_preboot_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server-mocks title: "@kbn/core-preboot-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-preboot-server-mocks'] --- import kbnCorePrebootServerMocksObj from './kbn_core_preboot_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_browser_mocks.mdx b/api_docs/kbn_core_rendering_browser_mocks.mdx index 07d54b4cb8684..4dbb04706d1ae 100644 --- a/api_docs/kbn_core_rendering_browser_mocks.mdx +++ b/api_docs/kbn_core_rendering_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-browser-mocks title: "@kbn/core-rendering-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-browser-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-browser-mocks'] --- import kbnCoreRenderingBrowserMocksObj from './kbn_core_rendering_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_server_internal.mdx b/api_docs/kbn_core_rendering_server_internal.mdx index 92820e3d64972..c18e1765f01a6 100644 --- a/api_docs/kbn_core_rendering_server_internal.mdx +++ b/api_docs/kbn_core_rendering_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-internal title: "@kbn/core-rendering-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-internal plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-server-internal'] --- import kbnCoreRenderingServerInternalObj from './kbn_core_rendering_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_server_mocks.mdx b/api_docs/kbn_core_rendering_server_mocks.mdx index 9079f89e087d9..a2266c59f93f0 100644 --- a/api_docs/kbn_core_rendering_server_mocks.mdx +++ b/api_docs/kbn_core_rendering_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-mocks title: "@kbn/core-rendering-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-server-mocks'] --- import kbnCoreRenderingServerMocksObj from './kbn_core_rendering_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_root_server_internal.mdx b/api_docs/kbn_core_root_server_internal.mdx index 6218d4de657a8..25620c1c3ef27 100644 --- a/api_docs/kbn_core_root_server_internal.mdx +++ b/api_docs/kbn_core_root_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-root-server-internal title: "@kbn/core-root-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-root-server-internal plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-root-server-internal'] --- import kbnCoreRootServerInternalObj from './kbn_core_root_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_browser.mdx b/api_docs/kbn_core_saved_objects_api_browser.mdx index 1633a36f8c337..cd0053cb95c29 100644 --- a/api_docs/kbn_core_saved_objects_api_browser.mdx +++ b/api_docs/kbn_core_saved_objects_api_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-browser title: "@kbn/core-saved-objects-api-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-browser plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-browser'] --- import kbnCoreSavedObjectsApiBrowserObj from './kbn_core_saved_objects_api_browser.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_server.mdx b/api_docs/kbn_core_saved_objects_api_server.mdx index ad0fe6b3c998a..edbeede79f213 100644 --- a/api_docs/kbn_core_saved_objects_api_server.mdx +++ b/api_docs/kbn_core_saved_objects_api_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server title: "@kbn/core-saved-objects-api-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server'] --- import kbnCoreSavedObjectsApiServerObj from './kbn_core_saved_objects_api_server.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx index 6fab97d53cfcc..49e52d5de674a 100644 --- a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-mocks title: "@kbn/core-saved-objects-api-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server-mocks'] --- import kbnCoreSavedObjectsApiServerMocksObj from './kbn_core_saved_objects_api_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_base_server_internal.mdx b/api_docs/kbn_core_saved_objects_base_server_internal.mdx index 7d9cef51ef466..e7a93aceed830 100644 --- a/api_docs/kbn_core_saved_objects_base_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-internal title: "@kbn/core-saved-objects-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-internal plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-base-server-internal'] --- import kbnCoreSavedObjectsBaseServerInternalObj from './kbn_core_saved_objects_base_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx index 25fc98860f37d..1b179e1f848d7 100644 --- a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-mocks title: "@kbn/core-saved-objects-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-base-server-mocks'] --- import kbnCoreSavedObjectsBaseServerMocksObj from './kbn_core_saved_objects_base_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_browser.mdx b/api_docs/kbn_core_saved_objects_browser.mdx index 19c1c438ef70a..4caad103d21c1 100644 --- a/api_docs/kbn_core_saved_objects_browser.mdx +++ b/api_docs/kbn_core_saved_objects_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser title: "@kbn/core-saved-objects-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser'] --- import kbnCoreSavedObjectsBrowserObj from './kbn_core_saved_objects_browser.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_browser_internal.mdx b/api_docs/kbn_core_saved_objects_browser_internal.mdx index 8530211f6f79f..a1332d59b0cba 100644 --- a/api_docs/kbn_core_saved_objects_browser_internal.mdx +++ b/api_docs/kbn_core_saved_objects_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-internal title: "@kbn/core-saved-objects-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-internal plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser-internal'] --- import kbnCoreSavedObjectsBrowserInternalObj from './kbn_core_saved_objects_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_browser_mocks.mdx b/api_docs/kbn_core_saved_objects_browser_mocks.mdx index a4b2fc329a2ae..1fac7f383e85b 100644 --- a/api_docs/kbn_core_saved_objects_browser_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-mocks title: "@kbn/core-saved-objects-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser-mocks'] --- import kbnCoreSavedObjectsBrowserMocksObj from './kbn_core_saved_objects_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_common.mdx b/api_docs/kbn_core_saved_objects_common.mdx index 40f466e485ddd..d786823a9ff83 100644 --- a/api_docs/kbn_core_saved_objects_common.mdx +++ b/api_docs/kbn_core_saved_objects_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-common title: "@kbn/core-saved-objects-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-common plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-common'] --- import kbnCoreSavedObjectsCommonObj from './kbn_core_saved_objects_common.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx index 7f8c90761846f..ae641462e64ee 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-internal title: "@kbn/core-saved-objects-import-export-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-internal plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-import-export-server-internal'] --- import kbnCoreSavedObjectsImportExportServerInternalObj from './kbn_core_saved_objects_import_export_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx index 5f823a88de866..f6004c77a4838 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-mocks title: "@kbn/core-saved-objects-import-export-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-import-export-server-mocks'] --- import kbnCoreSavedObjectsImportExportServerMocksObj from './kbn_core_saved_objects_import_export_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx index 6486972bba111..a7faaa131ba65 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-internal title: "@kbn/core-saved-objects-migration-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-internal plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-migration-server-internal'] --- import kbnCoreSavedObjectsMigrationServerInternalObj from './kbn_core_saved_objects_migration_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx index 71154fc04758b..c2ad01cc1319e 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-mocks title: "@kbn/core-saved-objects-migration-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-migration-server-mocks'] --- import kbnCoreSavedObjectsMigrationServerMocksObj from './kbn_core_saved_objects_migration_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server.mdx b/api_docs/kbn_core_saved_objects_server.mdx index f8ccda3f7d1bb..bd66bab423594 100644 --- a/api_docs/kbn_core_saved_objects_server.mdx +++ b/api_docs/kbn_core_saved_objects_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server title: "@kbn/core-saved-objects-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server'] --- import kbnCoreSavedObjectsServerObj from './kbn_core_saved_objects_server.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server_internal.devdocs.json b/api_docs/kbn_core_saved_objects_server_internal.devdocs.json index 15beae7f68086..fd3c2bfbcd0a3 100644 --- a/api_docs/kbn_core_saved_objects_server_internal.devdocs.json +++ b/api_docs/kbn_core_saved_objects_server_internal.devdocs.json @@ -772,7 +772,7 @@ "signature": [ "(router: ", "InternalSavedObjectRouter", - ", { kibanaVersion, coreUsageData, logger, }: { kibanaVersion: string; coreUsageData: ", + ", { kibanaVersion, coreUsageData, logger, access, }: { kibanaVersion: string; coreUsageData: ", "InternalCoreUsageDataSetup", "; logger: ", { @@ -782,6 +782,14 @@ "section": "def-common.Logger", "text": "Logger" }, + "; access: ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.RouteAccess", + "text": "RouteAccess" + }, "; }) => void" ], "path": "packages/core/saved-objects/core-saved-objects-server-internal/src/routes/legacy_import_export/export.ts", @@ -808,7 +816,7 @@ "id": "def-server.registerLegacyExportRoute.$2", "type": "Object", "tags": [], - "label": "{\n kibanaVersion,\n coreUsageData,\n logger,\n }", + "label": "{\n kibanaVersion,\n coreUsageData,\n logger,\n access,\n }", "description": [], "path": "packages/core/saved-objects/core-saved-objects-server-internal/src/routes/legacy_import_export/export.ts", "deprecated": false, @@ -858,6 +866,20 @@ "path": "packages/core/saved-objects/core-saved-objects-server-internal/src/routes/legacy_import_export/export.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-server-internal", + "id": "def-server.registerLegacyExportRoute.$2.access", + "type": "CompoundType", + "tags": [], + "label": "access", + "description": [], + "signature": [ + "\"internal\" | \"public\"" + ], + "path": "packages/core/saved-objects/core-saved-objects-server-internal/src/routes/legacy_import_export/export.ts", + "deprecated": false, + "trackAdoption": false } ] } @@ -875,7 +897,7 @@ "signature": [ "(router: ", "InternalSavedObjectRouter", - ", { maxImportPayloadBytes, coreUsageData, logger, }: { maxImportPayloadBytes: number; coreUsageData: ", + ", { maxImportPayloadBytes, coreUsageData, logger, access, }: { maxImportPayloadBytes: number; coreUsageData: ", "InternalCoreUsageDataSetup", "; logger: ", { @@ -885,6 +907,14 @@ "section": "def-common.Logger", "text": "Logger" }, + "; access: ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.RouteAccess", + "text": "RouteAccess" + }, "; }) => void" ], "path": "packages/core/saved-objects/core-saved-objects-server-internal/src/routes/legacy_import_export/import.ts", @@ -911,7 +941,7 @@ "id": "def-server.registerLegacyImportRoute.$2", "type": "Object", "tags": [], - "label": "{\n maxImportPayloadBytes,\n coreUsageData,\n logger,\n }", + "label": "{\n maxImportPayloadBytes,\n coreUsageData,\n logger,\n access,\n }", "description": [], "path": "packages/core/saved-objects/core-saved-objects-server-internal/src/routes/legacy_import_export/import.ts", "deprecated": false, @@ -961,6 +991,20 @@ "path": "packages/core/saved-objects/core-saved-objects-server-internal/src/routes/legacy_import_export/import.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-server-internal", + "id": "def-server.registerLegacyImportRoute.$2.access", + "type": "CompoundType", + "tags": [], + "label": "access", + "description": [], + "signature": [ + "\"internal\" | \"public\"" + ], + "path": "packages/core/saved-objects/core-saved-objects-server-internal/src/routes/legacy_import_export/import.ts", + "deprecated": false, + "trackAdoption": false } ] } diff --git a/api_docs/kbn_core_saved_objects_server_internal.mdx b/api_docs/kbn_core_saved_objects_server_internal.mdx index a55da08ff21ba..2d448853e828c 100644 --- a/api_docs/kbn_core_saved_objects_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-internal title: "@kbn/core-saved-objects-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-internal plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server-internal'] --- import kbnCoreSavedObjectsServerInternalObj from './kbn_core_saved_objects_server_internal.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 71 | 0 | 70 | 5 | +| 73 | 0 | 72 | 5 | ## Server diff --git a/api_docs/kbn_core_saved_objects_server_mocks.mdx b/api_docs/kbn_core_saved_objects_server_mocks.mdx index 17869c68b780e..efb5201301f4b 100644 --- a/api_docs/kbn_core_saved_objects_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-mocks title: "@kbn/core-saved-objects-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server-mocks'] --- import kbnCoreSavedObjectsServerMocksObj from './kbn_core_saved_objects_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_utils_server.mdx b/api_docs/kbn_core_saved_objects_utils_server.mdx index e97cdfbaa797c..4e6990668dcb0 100644 --- a/api_docs/kbn_core_saved_objects_utils_server.mdx +++ b/api_docs/kbn_core_saved_objects_utils_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-utils-server title: "@kbn/core-saved-objects-utils-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-utils-server plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-utils-server'] --- import kbnCoreSavedObjectsUtilsServerObj from './kbn_core_saved_objects_utils_server.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser.mdx b/api_docs/kbn_core_security_browser.mdx index 5b0dd0a3cc671..24836f9da2208 100644 --- a/api_docs/kbn_core_security_browser.mdx +++ b/api_docs/kbn_core_security_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser title: "@kbn/core-security-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser'] --- import kbnCoreSecurityBrowserObj from './kbn_core_security_browser.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser_internal.mdx b/api_docs/kbn_core_security_browser_internal.mdx index ca57c9be043ad..7755b8d076160 100644 --- a/api_docs/kbn_core_security_browser_internal.mdx +++ b/api_docs/kbn_core_security_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser-internal title: "@kbn/core-security-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser-internal plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser-internal'] --- import kbnCoreSecurityBrowserInternalObj from './kbn_core_security_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser_mocks.mdx b/api_docs/kbn_core_security_browser_mocks.mdx index ce45682d04a39..a93d4da169fb4 100644 --- a/api_docs/kbn_core_security_browser_mocks.mdx +++ b/api_docs/kbn_core_security_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser-mocks title: "@kbn/core-security-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser-mocks'] --- import kbnCoreSecurityBrowserMocksObj from './kbn_core_security_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_security_common.mdx b/api_docs/kbn_core_security_common.mdx index 587556bc1fed6..8669a58358d83 100644 --- a/api_docs/kbn_core_security_common.mdx +++ b/api_docs/kbn_core_security_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-common title: "@kbn/core-security-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-common plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-common'] --- import kbnCoreSecurityCommonObj from './kbn_core_security_common.devdocs.json'; diff --git a/api_docs/kbn_core_security_server.mdx b/api_docs/kbn_core_security_server.mdx index d5720cf4d8ee0..986eeac419dc0 100644 --- a/api_docs/kbn_core_security_server.mdx +++ b/api_docs/kbn_core_security_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server title: "@kbn/core-security-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server'] --- import kbnCoreSecurityServerObj from './kbn_core_security_server.devdocs.json'; diff --git a/api_docs/kbn_core_security_server_internal.mdx b/api_docs/kbn_core_security_server_internal.mdx index 3bc87b9b6b31a..56a7999eeec85 100644 --- a/api_docs/kbn_core_security_server_internal.mdx +++ b/api_docs/kbn_core_security_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server-internal title: "@kbn/core-security-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server-internal plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server-internal'] --- import kbnCoreSecurityServerInternalObj from './kbn_core_security_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_security_server_mocks.mdx b/api_docs/kbn_core_security_server_mocks.mdx index d8fd38089b569..759ec02e20272 100644 --- a/api_docs/kbn_core_security_server_mocks.mdx +++ b/api_docs/kbn_core_security_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server-mocks title: "@kbn/core-security-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server-mocks'] --- import kbnCoreSecurityServerMocksObj from './kbn_core_security_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_status_common.mdx b/api_docs/kbn_core_status_common.mdx index 437af097eb034..e4d1259a40321 100644 --- a/api_docs/kbn_core_status_common.mdx +++ b/api_docs/kbn_core_status_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common title: "@kbn/core-status-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-common'] --- import kbnCoreStatusCommonObj from './kbn_core_status_common.devdocs.json'; diff --git a/api_docs/kbn_core_status_common_internal.mdx b/api_docs/kbn_core_status_common_internal.mdx index 47a7a13a2f986..40340f75888be 100644 --- a/api_docs/kbn_core_status_common_internal.mdx +++ b/api_docs/kbn_core_status_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common-internal title: "@kbn/core-status-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common-internal plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-common-internal'] --- import kbnCoreStatusCommonInternalObj from './kbn_core_status_common_internal.devdocs.json'; diff --git a/api_docs/kbn_core_status_server.mdx b/api_docs/kbn_core_status_server.mdx index 261c01f4b8d54..d8ece287de62e 100644 --- a/api_docs/kbn_core_status_server.mdx +++ b/api_docs/kbn_core_status_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server title: "@kbn/core-status-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server'] --- import kbnCoreStatusServerObj from './kbn_core_status_server.devdocs.json'; diff --git a/api_docs/kbn_core_status_server_internal.mdx b/api_docs/kbn_core_status_server_internal.mdx index 8c16ca745633d..ed73bc2fddd96 100644 --- a/api_docs/kbn_core_status_server_internal.mdx +++ b/api_docs/kbn_core_status_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-internal title: "@kbn/core-status-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-internal plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server-internal'] --- import kbnCoreStatusServerInternalObj from './kbn_core_status_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_status_server_mocks.mdx b/api_docs/kbn_core_status_server_mocks.mdx index a2c3da7cb79d0..9d895c9b69ec0 100644 --- a/api_docs/kbn_core_status_server_mocks.mdx +++ b/api_docs/kbn_core_status_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-mocks title: "@kbn/core-status-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server-mocks'] --- import kbnCoreStatusServerMocksObj from './kbn_core_status_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx index 05beae7a392b8..e976f54da89b2 100644 --- a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx +++ b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-deprecations-getters title: "@kbn/core-test-helpers-deprecations-getters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-deprecations-getters plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-deprecations-getters'] --- import kbnCoreTestHelpersDeprecationsGettersObj from './kbn_core_test_helpers_deprecations_getters.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx index 35fe4ef4201ba..ddc4c6c68d529 100644 --- a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx +++ b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-http-setup-browser title: "@kbn/core-test-helpers-http-setup-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-http-setup-browser plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-http-setup-browser'] --- import kbnCoreTestHelpersHttpSetupBrowserObj from './kbn_core_test_helpers_http_setup_browser.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_kbn_server.mdx b/api_docs/kbn_core_test_helpers_kbn_server.mdx index 390b950a797c9..eb88bbf06d4c1 100644 --- a/api_docs/kbn_core_test_helpers_kbn_server.mdx +++ b/api_docs/kbn_core_test_helpers_kbn_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-kbn-server title: "@kbn/core-test-helpers-kbn-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-kbn-server plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-kbn-server'] --- import kbnCoreTestHelpersKbnServerObj from './kbn_core_test_helpers_kbn_server.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_model_versions.mdx b/api_docs/kbn_core_test_helpers_model_versions.mdx index 10b31a192613c..881a28ea56dba 100644 --- a/api_docs/kbn_core_test_helpers_model_versions.mdx +++ b/api_docs/kbn_core_test_helpers_model_versions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-model-versions title: "@kbn/core-test-helpers-model-versions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-model-versions plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-model-versions'] --- import kbnCoreTestHelpersModelVersionsObj from './kbn_core_test_helpers_model_versions.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx index ae560d98dea8e..991162e2dc9ca 100644 --- a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx +++ b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-so-type-serializer title: "@kbn/core-test-helpers-so-type-serializer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-so-type-serializer plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-so-type-serializer'] --- import kbnCoreTestHelpersSoTypeSerializerObj from './kbn_core_test_helpers_so_type_serializer.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_test_utils.mdx b/api_docs/kbn_core_test_helpers_test_utils.mdx index 10da68c7c119c..e23fa35c980b9 100644 --- a/api_docs/kbn_core_test_helpers_test_utils.mdx +++ b/api_docs/kbn_core_test_helpers_test_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-test-utils title: "@kbn/core-test-helpers-test-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-test-utils plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-test-utils'] --- import kbnCoreTestHelpersTestUtilsObj from './kbn_core_test_helpers_test_utils.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser.mdx b/api_docs/kbn_core_theme_browser.mdx index 8e04d58b85fa2..33fcbbbc58054 100644 --- a/api_docs/kbn_core_theme_browser.mdx +++ b/api_docs/kbn_core_theme_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser title: "@kbn/core-theme-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser'] --- import kbnCoreThemeBrowserObj from './kbn_core_theme_browser.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser_mocks.mdx b/api_docs/kbn_core_theme_browser_mocks.mdx index a609e539c7caa..fe80ad0270cd3 100644 --- a/api_docs/kbn_core_theme_browser_mocks.mdx +++ b/api_docs/kbn_core_theme_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-mocks title: "@kbn/core-theme-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser-mocks'] --- import kbnCoreThemeBrowserMocksObj from './kbn_core_theme_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_browser.mdx b/api_docs/kbn_core_ui_settings_browser.mdx index 628bd1977ccb8..f28b0407da029 100644 --- a/api_docs/kbn_core_ui_settings_browser.mdx +++ b/api_docs/kbn_core_ui_settings_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser title: "@kbn/core-ui-settings-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser'] --- import kbnCoreUiSettingsBrowserObj from './kbn_core_ui_settings_browser.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_browser_internal.mdx b/api_docs/kbn_core_ui_settings_browser_internal.mdx index e9ccf2a9746bc..568d6533dd17f 100644 --- a/api_docs/kbn_core_ui_settings_browser_internal.mdx +++ b/api_docs/kbn_core_ui_settings_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-internal title: "@kbn/core-ui-settings-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-internal plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser-internal'] --- import kbnCoreUiSettingsBrowserInternalObj from './kbn_core_ui_settings_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_browser_mocks.mdx b/api_docs/kbn_core_ui_settings_browser_mocks.mdx index 818a098a0efe6..cb3bf2c502682 100644 --- a/api_docs/kbn_core_ui_settings_browser_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-mocks title: "@kbn/core-ui-settings-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser-mocks'] --- import kbnCoreUiSettingsBrowserMocksObj from './kbn_core_ui_settings_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_common.mdx b/api_docs/kbn_core_ui_settings_common.mdx index d0a835c7a8249..9a1a600e1fccc 100644 --- a/api_docs/kbn_core_ui_settings_common.mdx +++ b/api_docs/kbn_core_ui_settings_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-common title: "@kbn/core-ui-settings-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-common plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-common'] --- import kbnCoreUiSettingsCommonObj from './kbn_core_ui_settings_common.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_server.mdx b/api_docs/kbn_core_ui_settings_server.mdx index b9d6c66e2a498..739c90a6e6026 100644 --- a/api_docs/kbn_core_ui_settings_server.mdx +++ b/api_docs/kbn_core_ui_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server title: "@kbn/core-ui-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server'] --- import kbnCoreUiSettingsServerObj from './kbn_core_ui_settings_server.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_server_internal.mdx b/api_docs/kbn_core_ui_settings_server_internal.mdx index 88773a76d6a16..0a258a4483d95 100644 --- a/api_docs/kbn_core_ui_settings_server_internal.mdx +++ b/api_docs/kbn_core_ui_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-internal title: "@kbn/core-ui-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-internal plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server-internal'] --- import kbnCoreUiSettingsServerInternalObj from './kbn_core_ui_settings_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_server_mocks.mdx b/api_docs/kbn_core_ui_settings_server_mocks.mdx index af896fd4460f4..d32b3d7564973 100644 --- a/api_docs/kbn_core_ui_settings_server_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-mocks title: "@kbn/core-ui-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server-mocks'] --- import kbnCoreUiSettingsServerMocksObj from './kbn_core_ui_settings_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_usage_data_server.mdx b/api_docs/kbn_core_usage_data_server.mdx index 65a647a301dd5..a0f0890f630c2 100644 --- a/api_docs/kbn_core_usage_data_server.mdx +++ b/api_docs/kbn_core_usage_data_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server title: "@kbn/core-usage-data-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server'] --- import kbnCoreUsageDataServerObj from './kbn_core_usage_data_server.devdocs.json'; diff --git a/api_docs/kbn_core_usage_data_server_internal.mdx b/api_docs/kbn_core_usage_data_server_internal.mdx index 9d32d0d062140..2e18f461f7a26 100644 --- a/api_docs/kbn_core_usage_data_server_internal.mdx +++ b/api_docs/kbn_core_usage_data_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-internal title: "@kbn/core-usage-data-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-internal plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-internal'] --- import kbnCoreUsageDataServerInternalObj from './kbn_core_usage_data_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_usage_data_server_mocks.mdx b/api_docs/kbn_core_usage_data_server_mocks.mdx index 7f9476d3b0512..89a789e2525ee 100644 --- a/api_docs/kbn_core_usage_data_server_mocks.mdx +++ b/api_docs/kbn_core_usage_data_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-mocks title: "@kbn/core-usage-data-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-mocks'] --- import kbnCoreUsageDataServerMocksObj from './kbn_core_usage_data_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser.mdx b/api_docs/kbn_core_user_profile_browser.mdx index ad6ddaf9454a8..0baa980f88fd3 100644 --- a/api_docs/kbn_core_user_profile_browser.mdx +++ b/api_docs/kbn_core_user_profile_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser title: "@kbn/core-user-profile-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser'] --- import kbnCoreUserProfileBrowserObj from './kbn_core_user_profile_browser.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser_internal.mdx b/api_docs/kbn_core_user_profile_browser_internal.mdx index a222c881003e8..550d056697f73 100644 --- a/api_docs/kbn_core_user_profile_browser_internal.mdx +++ b/api_docs/kbn_core_user_profile_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser-internal title: "@kbn/core-user-profile-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser-internal plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser-internal'] --- import kbnCoreUserProfileBrowserInternalObj from './kbn_core_user_profile_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser_mocks.mdx b/api_docs/kbn_core_user_profile_browser_mocks.mdx index 05ca54ae3a50f..721291ed804af 100644 --- a/api_docs/kbn_core_user_profile_browser_mocks.mdx +++ b/api_docs/kbn_core_user_profile_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser-mocks title: "@kbn/core-user-profile-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser-mocks'] --- import kbnCoreUserProfileBrowserMocksObj from './kbn_core_user_profile_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_common.mdx b/api_docs/kbn_core_user_profile_common.mdx index 2fe79c73f31ab..36bc66fc6fd38 100644 --- a/api_docs/kbn_core_user_profile_common.mdx +++ b/api_docs/kbn_core_user_profile_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-common title: "@kbn/core-user-profile-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-common plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-common'] --- import kbnCoreUserProfileCommonObj from './kbn_core_user_profile_common.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server.mdx b/api_docs/kbn_core_user_profile_server.mdx index 530ca6ef4db78..be7a88f1884fb 100644 --- a/api_docs/kbn_core_user_profile_server.mdx +++ b/api_docs/kbn_core_user_profile_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server title: "@kbn/core-user-profile-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server'] --- import kbnCoreUserProfileServerObj from './kbn_core_user_profile_server.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server_internal.mdx b/api_docs/kbn_core_user_profile_server_internal.mdx index 80a149ad5b1d0..c313170eca0d5 100644 --- a/api_docs/kbn_core_user_profile_server_internal.mdx +++ b/api_docs/kbn_core_user_profile_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server-internal title: "@kbn/core-user-profile-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server-internal plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server-internal'] --- import kbnCoreUserProfileServerInternalObj from './kbn_core_user_profile_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server_mocks.mdx b/api_docs/kbn_core_user_profile_server_mocks.mdx index 7bda5bd6128be..ee821b43fc8e4 100644 --- a/api_docs/kbn_core_user_profile_server_mocks.mdx +++ b/api_docs/kbn_core_user_profile_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server-mocks title: "@kbn/core-user-profile-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server-mocks'] --- import kbnCoreUserProfileServerMocksObj from './kbn_core_user_profile_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server.mdx b/api_docs/kbn_core_user_settings_server.mdx index e5aa8d61b6358..68b7481c84200 100644 --- a/api_docs/kbn_core_user_settings_server.mdx +++ b/api_docs/kbn_core_user_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server title: "@kbn/core-user-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server'] --- import kbnCoreUserSettingsServerObj from './kbn_core_user_settings_server.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server_mocks.mdx b/api_docs/kbn_core_user_settings_server_mocks.mdx index 7368d5c511a72..e310ccbbd2b2b 100644 --- a/api_docs/kbn_core_user_settings_server_mocks.mdx +++ b/api_docs/kbn_core_user_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-mocks title: "@kbn/core-user-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server-mocks'] --- import kbnCoreUserSettingsServerMocksObj from './kbn_core_user_settings_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_crypto.mdx b/api_docs/kbn_crypto.mdx index c8e0fdca4b427..fdd1a0581b48f 100644 --- a/api_docs/kbn_crypto.mdx +++ b/api_docs/kbn_crypto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto title: "@kbn/crypto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto'] --- import kbnCryptoObj from './kbn_crypto.devdocs.json'; diff --git a/api_docs/kbn_crypto_browser.mdx b/api_docs/kbn_crypto_browser.mdx index 4ad2cd407b4eb..a2a65e3e73f67 100644 --- a/api_docs/kbn_crypto_browser.mdx +++ b/api_docs/kbn_crypto_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto-browser title: "@kbn/crypto-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto-browser plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto-browser'] --- import kbnCryptoBrowserObj from './kbn_crypto_browser.devdocs.json'; diff --git a/api_docs/kbn_custom_icons.mdx b/api_docs/kbn_custom_icons.mdx index 6fb423169bca1..4069ed90de92d 100644 --- a/api_docs/kbn_custom_icons.mdx +++ b/api_docs/kbn_custom_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-custom-icons title: "@kbn/custom-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/custom-icons plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/custom-icons'] --- import kbnCustomIconsObj from './kbn_custom_icons.devdocs.json'; diff --git a/api_docs/kbn_custom_integrations.mdx b/api_docs/kbn_custom_integrations.mdx index a2b59efce2016..8131d8407616f 100644 --- a/api_docs/kbn_custom_integrations.mdx +++ b/api_docs/kbn_custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-custom-integrations title: "@kbn/custom-integrations" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/custom-integrations plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/custom-integrations'] --- import kbnCustomIntegrationsObj from './kbn_custom_integrations.devdocs.json'; diff --git a/api_docs/kbn_cypress_config.mdx b/api_docs/kbn_cypress_config.mdx index 86f7892f60a2e..52b187ce3bf78 100644 --- a/api_docs/kbn_cypress_config.mdx +++ b/api_docs/kbn_cypress_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cypress-config title: "@kbn/cypress-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cypress-config plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cypress-config'] --- import kbnCypressConfigObj from './kbn_cypress_config.devdocs.json'; diff --git a/api_docs/kbn_data_forge.mdx b/api_docs/kbn_data_forge.mdx index df182db59ddc1..4eb71f13f0cdb 100644 --- a/api_docs/kbn_data_forge.mdx +++ b/api_docs/kbn_data_forge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-forge title: "@kbn/data-forge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-forge plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-forge'] --- import kbnDataForgeObj from './kbn_data_forge.devdocs.json'; diff --git a/api_docs/kbn_data_service.mdx b/api_docs/kbn_data_service.mdx index 31ff87ecce731..193ea4e3f5a1d 100644 --- a/api_docs/kbn_data_service.mdx +++ b/api_docs/kbn_data_service.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-service title: "@kbn/data-service" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-service plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-service'] --- import kbnDataServiceObj from './kbn_data_service.devdocs.json'; diff --git a/api_docs/kbn_data_stream_adapter.mdx b/api_docs/kbn_data_stream_adapter.mdx index 4c4a7af436d8f..23d9056ca06b6 100644 --- a/api_docs/kbn_data_stream_adapter.mdx +++ b/api_docs/kbn_data_stream_adapter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-stream-adapter title: "@kbn/data-stream-adapter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-stream-adapter plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-stream-adapter'] --- import kbnDataStreamAdapterObj from './kbn_data_stream_adapter.devdocs.json'; diff --git a/api_docs/kbn_data_view_utils.mdx b/api_docs/kbn_data_view_utils.mdx index 9294e9dad74e2..5eb56cc875917 100644 --- a/api_docs/kbn_data_view_utils.mdx +++ b/api_docs/kbn_data_view_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-view-utils title: "@kbn/data-view-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-view-utils plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-view-utils'] --- import kbnDataViewUtilsObj from './kbn_data_view_utils.devdocs.json'; diff --git a/api_docs/kbn_datemath.mdx b/api_docs/kbn_datemath.mdx index 00a0091b4e25a..b4f58eb63b478 100644 --- a/api_docs/kbn_datemath.mdx +++ b/api_docs/kbn_datemath.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-datemath title: "@kbn/datemath" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/datemath plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/datemath'] --- import kbnDatemathObj from './kbn_datemath.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_analytics.mdx b/api_docs/kbn_deeplinks_analytics.mdx index 1ab560b521fba..06994fa1b07f0 100644 --- a/api_docs/kbn_deeplinks_analytics.mdx +++ b/api_docs/kbn_deeplinks_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-analytics title: "@kbn/deeplinks-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-analytics plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-analytics'] --- import kbnDeeplinksAnalyticsObj from './kbn_deeplinks_analytics.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_devtools.mdx b/api_docs/kbn_deeplinks_devtools.mdx index 333d5e971fc79..78ec50be162d3 100644 --- a/api_docs/kbn_deeplinks_devtools.mdx +++ b/api_docs/kbn_deeplinks_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-devtools title: "@kbn/deeplinks-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-devtools plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-devtools'] --- import kbnDeeplinksDevtoolsObj from './kbn_deeplinks_devtools.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_fleet.mdx b/api_docs/kbn_deeplinks_fleet.mdx index fa860e767f515..9794462ce84c9 100644 --- a/api_docs/kbn_deeplinks_fleet.mdx +++ b/api_docs/kbn_deeplinks_fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-fleet title: "@kbn/deeplinks-fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-fleet plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-fleet'] --- import kbnDeeplinksFleetObj from './kbn_deeplinks_fleet.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_management.mdx b/api_docs/kbn_deeplinks_management.mdx index cfce275d8f5a7..1ec77c8d6a149 100644 --- a/api_docs/kbn_deeplinks_management.mdx +++ b/api_docs/kbn_deeplinks_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-management title: "@kbn/deeplinks-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-management plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-management'] --- import kbnDeeplinksManagementObj from './kbn_deeplinks_management.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_ml.mdx b/api_docs/kbn_deeplinks_ml.mdx index 28d7b85129a78..9aa8edead1831 100644 --- a/api_docs/kbn_deeplinks_ml.mdx +++ b/api_docs/kbn_deeplinks_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-ml title: "@kbn/deeplinks-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-ml plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-ml'] --- import kbnDeeplinksMlObj from './kbn_deeplinks_ml.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_observability.mdx b/api_docs/kbn_deeplinks_observability.mdx index 44764c9eebdba..6d7a079c0eccf 100644 --- a/api_docs/kbn_deeplinks_observability.mdx +++ b/api_docs/kbn_deeplinks_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-observability title: "@kbn/deeplinks-observability" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-observability plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-observability'] --- import kbnDeeplinksObservabilityObj from './kbn_deeplinks_observability.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_search.mdx b/api_docs/kbn_deeplinks_search.mdx index 0c7586b782191..09eb6a218a640 100644 --- a/api_docs/kbn_deeplinks_search.mdx +++ b/api_docs/kbn_deeplinks_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-search title: "@kbn/deeplinks-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-search plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-search'] --- import kbnDeeplinksSearchObj from './kbn_deeplinks_search.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_security.mdx b/api_docs/kbn_deeplinks_security.mdx index 6685fc795dd59..1a43737e97dd3 100644 --- a/api_docs/kbn_deeplinks_security.mdx +++ b/api_docs/kbn_deeplinks_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-security title: "@kbn/deeplinks-security" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-security plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-security'] --- import kbnDeeplinksSecurityObj from './kbn_deeplinks_security.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_shared.mdx b/api_docs/kbn_deeplinks_shared.mdx index d49678efcf267..ccc72a89126ea 100644 --- a/api_docs/kbn_deeplinks_shared.mdx +++ b/api_docs/kbn_deeplinks_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-shared title: "@kbn/deeplinks-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-shared plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-shared'] --- import kbnDeeplinksSharedObj from './kbn_deeplinks_shared.devdocs.json'; diff --git a/api_docs/kbn_default_nav_analytics.mdx b/api_docs/kbn_default_nav_analytics.mdx index c474e0d80dd97..1990aea5265f2 100644 --- a/api_docs/kbn_default_nav_analytics.mdx +++ b/api_docs/kbn_default_nav_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-analytics title: "@kbn/default-nav-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-analytics plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-analytics'] --- import kbnDefaultNavAnalyticsObj from './kbn_default_nav_analytics.devdocs.json'; diff --git a/api_docs/kbn_default_nav_devtools.mdx b/api_docs/kbn_default_nav_devtools.mdx index ceb026c1ace28..00c2d5ff9a72e 100644 --- a/api_docs/kbn_default_nav_devtools.mdx +++ b/api_docs/kbn_default_nav_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-devtools title: "@kbn/default-nav-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-devtools plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-devtools'] --- import kbnDefaultNavDevtoolsObj from './kbn_default_nav_devtools.devdocs.json'; diff --git a/api_docs/kbn_default_nav_management.mdx b/api_docs/kbn_default_nav_management.mdx index cf9dcfc6ad8bf..c114a62bde87a 100644 --- a/api_docs/kbn_default_nav_management.mdx +++ b/api_docs/kbn_default_nav_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-management title: "@kbn/default-nav-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-management plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-management'] --- import kbnDefaultNavManagementObj from './kbn_default_nav_management.devdocs.json'; diff --git a/api_docs/kbn_default_nav_ml.mdx b/api_docs/kbn_default_nav_ml.mdx index ad251be44742b..4f99433dd2b61 100644 --- a/api_docs/kbn_default_nav_ml.mdx +++ b/api_docs/kbn_default_nav_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-ml title: "@kbn/default-nav-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-ml plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-ml'] --- import kbnDefaultNavMlObj from './kbn_default_nav_ml.devdocs.json'; diff --git a/api_docs/kbn_dev_cli_errors.mdx b/api_docs/kbn_dev_cli_errors.mdx index fed28786cb4c3..49760215ccb6e 100644 --- a/api_docs/kbn_dev_cli_errors.mdx +++ b/api_docs/kbn_dev_cli_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-errors title: "@kbn/dev-cli-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-errors plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-cli-errors'] --- import kbnDevCliErrorsObj from './kbn_dev_cli_errors.devdocs.json'; diff --git a/api_docs/kbn_dev_cli_runner.mdx b/api_docs/kbn_dev_cli_runner.mdx index 40e82da067937..b519cbedd0877 100644 --- a/api_docs/kbn_dev_cli_runner.mdx +++ b/api_docs/kbn_dev_cli_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-runner title: "@kbn/dev-cli-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-runner plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-cli-runner'] --- import kbnDevCliRunnerObj from './kbn_dev_cli_runner.devdocs.json'; diff --git a/api_docs/kbn_dev_proc_runner.mdx b/api_docs/kbn_dev_proc_runner.mdx index 33d242ac18540..480c3cdeb5d5c 100644 --- a/api_docs/kbn_dev_proc_runner.mdx +++ b/api_docs/kbn_dev_proc_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-proc-runner title: "@kbn/dev-proc-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-proc-runner plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-proc-runner'] --- import kbnDevProcRunnerObj from './kbn_dev_proc_runner.devdocs.json'; diff --git a/api_docs/kbn_dev_utils.mdx b/api_docs/kbn_dev_utils.mdx index 0012a1a8b17be..7ec3fb3c92847 100644 --- a/api_docs/kbn_dev_utils.mdx +++ b/api_docs/kbn_dev_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-utils title: "@kbn/dev-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-utils plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-utils'] --- import kbnDevUtilsObj from './kbn_dev_utils.devdocs.json'; diff --git a/api_docs/kbn_discover_utils.mdx b/api_docs/kbn_discover_utils.mdx index a61fae2d2cee9..12c18f3ecb84c 100644 --- a/api_docs/kbn_discover_utils.mdx +++ b/api_docs/kbn_discover_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-discover-utils title: "@kbn/discover-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/discover-utils plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/discover-utils'] --- import kbnDiscoverUtilsObj from './kbn_discover_utils.devdocs.json'; diff --git a/api_docs/kbn_doc_links.mdx b/api_docs/kbn_doc_links.mdx index 1539bb867dcbc..2b88f45c1b656 100644 --- a/api_docs/kbn_doc_links.mdx +++ b/api_docs/kbn_doc_links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-doc-links title: "@kbn/doc-links" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/doc-links plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/doc-links'] --- import kbnDocLinksObj from './kbn_doc_links.devdocs.json'; diff --git a/api_docs/kbn_docs_utils.mdx b/api_docs/kbn_docs_utils.mdx index 6b10346fa89d4..fee2ac8c6be4f 100644 --- a/api_docs/kbn_docs_utils.mdx +++ b/api_docs/kbn_docs_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-docs-utils title: "@kbn/docs-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/docs-utils plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/docs-utils'] --- import kbnDocsUtilsObj from './kbn_docs_utils.devdocs.json'; diff --git a/api_docs/kbn_dom_drag_drop.mdx b/api_docs/kbn_dom_drag_drop.mdx index 2af9237f2b094..903e05e8e6650 100644 --- a/api_docs/kbn_dom_drag_drop.mdx +++ b/api_docs/kbn_dom_drag_drop.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dom-drag-drop title: "@kbn/dom-drag-drop" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dom-drag-drop plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dom-drag-drop'] --- import kbnDomDragDropObj from './kbn_dom_drag_drop.devdocs.json'; diff --git a/api_docs/kbn_ebt_tools.mdx b/api_docs/kbn_ebt_tools.mdx index 6c40665c51af3..b3e63da8b29d3 100644 --- a/api_docs/kbn_ebt_tools.mdx +++ b/api_docs/kbn_ebt_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ebt-tools title: "@kbn/ebt-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ebt-tools plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ebt-tools'] --- import kbnEbtToolsObj from './kbn_ebt_tools.devdocs.json'; diff --git a/api_docs/kbn_ecs_data_quality_dashboard.mdx b/api_docs/kbn_ecs_data_quality_dashboard.mdx index 3e1e59b44d7da..8b97de1d79e4a 100644 --- a/api_docs/kbn_ecs_data_quality_dashboard.mdx +++ b/api_docs/kbn_ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs-data-quality-dashboard title: "@kbn/ecs-data-quality-dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs-data-quality-dashboard plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs-data-quality-dashboard'] --- import kbnEcsDataQualityDashboardObj from './kbn_ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/kbn_elastic_agent_utils.mdx b/api_docs/kbn_elastic_agent_utils.mdx index 08ec1d8c5b895..c5bdc6150670f 100644 --- a/api_docs/kbn_elastic_agent_utils.mdx +++ b/api_docs/kbn_elastic_agent_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-agent-utils title: "@kbn/elastic-agent-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-agent-utils plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-agent-utils'] --- import kbnElasticAgentUtilsObj from './kbn_elastic_agent_utils.devdocs.json'; diff --git a/api_docs/kbn_elastic_assistant.mdx b/api_docs/kbn_elastic_assistant.mdx index b11f52d280ac1..df9cbcffeba2d 100644 --- a/api_docs/kbn_elastic_assistant.mdx +++ b/api_docs/kbn_elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant title: "@kbn/elastic-assistant" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant'] --- import kbnElasticAssistantObj from './kbn_elastic_assistant.devdocs.json'; diff --git a/api_docs/kbn_elastic_assistant_common.mdx b/api_docs/kbn_elastic_assistant_common.mdx index b94b9f5f33d98..1dcaf62faf8c8 100644 --- a/api_docs/kbn_elastic_assistant_common.mdx +++ b/api_docs/kbn_elastic_assistant_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant-common title: "@kbn/elastic-assistant-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant-common plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant-common'] --- import kbnElasticAssistantCommonObj from './kbn_elastic_assistant_common.devdocs.json'; diff --git a/api_docs/kbn_entities_schema.mdx b/api_docs/kbn_entities_schema.mdx index 8d719f787b7e1..8ecc5538f129e 100644 --- a/api_docs/kbn_entities_schema.mdx +++ b/api_docs/kbn_entities_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-entities-schema title: "@kbn/entities-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/entities-schema plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/entities-schema'] --- import kbnEntitiesSchemaObj from './kbn_entities_schema.devdocs.json'; diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx index ffd46ffe37600..b31a2f0baef43 100644 --- a/api_docs/kbn_es.mdx +++ b/api_docs/kbn_es.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es title: "@kbn/es" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es'] --- import kbnEsObj from './kbn_es.devdocs.json'; diff --git a/api_docs/kbn_es_archiver.mdx b/api_docs/kbn_es_archiver.mdx index 23a296f918f8f..71ca4d1b6f0d0 100644 --- a/api_docs/kbn_es_archiver.mdx +++ b/api_docs/kbn_es_archiver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-archiver title: "@kbn/es-archiver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-archiver plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-archiver'] --- import kbnEsArchiverObj from './kbn_es_archiver.devdocs.json'; diff --git a/api_docs/kbn_es_errors.mdx b/api_docs/kbn_es_errors.mdx index 3c6a0011f72cb..1265476dbcf73 100644 --- a/api_docs/kbn_es_errors.mdx +++ b/api_docs/kbn_es_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-errors title: "@kbn/es-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-errors plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-errors'] --- import kbnEsErrorsObj from './kbn_es_errors.devdocs.json'; diff --git a/api_docs/kbn_es_query.mdx b/api_docs/kbn_es_query.mdx index d4cb67acee503..c1e67dbab43db 100644 --- a/api_docs/kbn_es_query.mdx +++ b/api_docs/kbn_es_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-query title: "@kbn/es-query" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-query plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-query'] --- import kbnEsQueryObj from './kbn_es_query.devdocs.json'; diff --git a/api_docs/kbn_es_types.mdx b/api_docs/kbn_es_types.mdx index 96e0807e16bd1..c912ac2fc3d5f 100644 --- a/api_docs/kbn_es_types.mdx +++ b/api_docs/kbn_es_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-types title: "@kbn/es-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-types plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-types'] --- import kbnEsTypesObj from './kbn_es_types.devdocs.json'; diff --git a/api_docs/kbn_eslint_plugin_imports.mdx b/api_docs/kbn_eslint_plugin_imports.mdx index 69242ac642d6d..7f48c205fb1a7 100644 --- a/api_docs/kbn_eslint_plugin_imports.mdx +++ b/api_docs/kbn_eslint_plugin_imports.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-eslint-plugin-imports title: "@kbn/eslint-plugin-imports" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/eslint-plugin-imports plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports'] --- import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json'; diff --git a/api_docs/kbn_esql_ast.mdx b/api_docs/kbn_esql_ast.mdx index 9f7edd14d028b..e90729e183a2d 100644 --- a/api_docs/kbn_esql_ast.mdx +++ b/api_docs/kbn_esql_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-ast title: "@kbn/esql-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-ast plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-ast'] --- import kbnEsqlAstObj from './kbn_esql_ast.devdocs.json'; diff --git a/api_docs/kbn_esql_editor.devdocs.json b/api_docs/kbn_esql_editor.devdocs.json new file mode 100644 index 0000000000000..4e3942cddc17c --- /dev/null +++ b/api_docs/kbn_esql_editor.devdocs.json @@ -0,0 +1,608 @@ +{ + "id": "@kbn/esql-editor", + "client": { + "classes": [], + "functions": [ + { + "parentPluginId": "@kbn/esql-editor", + "id": "def-public.ESQLEditor", + "type": "Function", + "tags": [], + "label": "ESQLEditor", + "description": [], + "signature": [ + "React.NamedExoticComponent<", + { + "pluginId": "@kbn/esql-editor", + "scope": "public", + "docId": "kibKbnEsqlEditorPluginApi", + "section": "def-public.ESQLEditorProps", + "text": "ESQLEditorProps" + }, + ">" + ], + "path": "packages/kbn-esql-editor/src/esql_editor.tsx", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "@kbn/esql-editor", + "id": "def-public.ESQLEditor.$1", + "type": "Uncategorized", + "tags": [], + "label": "props", + "description": [], + "signature": [ + "P" + ], + "path": "node_modules/@types/react/index.d.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/esql-editor", + "id": "def-public.fetchFieldsFromESQL", + "type": "Function", + "tags": [], + "label": "fetchFieldsFromESQL", + "description": [], + "signature": [ + "(query: ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.Query", + "text": "Query" + }, + " | ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.AggregateQuery", + "text": "AggregateQuery" + }, + ", expressions: ", + { + "pluginId": "expressions", + "scope": "public", + "docId": "kibExpressionsPluginApi", + "section": "def-public.ExpressionsStart", + "text": "ExpressionsStart" + }, + ", time: ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.TimeRange", + "text": "TimeRange" + }, + " | undefined, abortController: AbortController | undefined, dataView: ", + { + "pluginId": "dataViews", + "scope": "common", + "docId": "kibDataViewsPluginApi", + "section": "def-common.DataView", + "text": "DataView" + }, + " | undefined) => Promise<", + { + "pluginId": "expressions", + "scope": "common", + "docId": "kibExpressionsPluginApi", + "section": "def-common.Datatable", + "text": "Datatable" + }, + " | undefined>" + ], + "path": "packages/kbn-esql-editor/src/fetch_fields_from_esql.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-editor", + "id": "def-public.fetchFieldsFromESQL.$1", + "type": "CompoundType", + "tags": [], + "label": "query", + "description": [], + "signature": [ + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.Query", + "text": "Query" + }, + " | ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.AggregateQuery", + "text": "AggregateQuery" + } + ], + "path": "packages/kbn-esql-editor/src/fetch_fields_from_esql.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/esql-editor", + "id": "def-public.fetchFieldsFromESQL.$2", + "type": "Object", + "tags": [], + "label": "expressions", + "description": [], + "signature": [ + { + "pluginId": "expressions", + "scope": "public", + "docId": "kibExpressionsPluginApi", + "section": "def-public.ExpressionsStart", + "text": "ExpressionsStart" + } + ], + "path": "packages/kbn-esql-editor/src/fetch_fields_from_esql.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/esql-editor", + "id": "def-public.fetchFieldsFromESQL.$3", + "type": "Object", + "tags": [], + "label": "time", + "description": [], + "signature": [ + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.TimeRange", + "text": "TimeRange" + }, + " | undefined" + ], + "path": "packages/kbn-esql-editor/src/fetch_fields_from_esql.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + }, + { + "parentPluginId": "@kbn/esql-editor", + "id": "def-public.fetchFieldsFromESQL.$4", + "type": "Object", + "tags": [], + "label": "abortController", + "description": [], + "signature": [ + "AbortController | undefined" + ], + "path": "packages/kbn-esql-editor/src/fetch_fields_from_esql.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + }, + { + "parentPluginId": "@kbn/esql-editor", + "id": "def-public.fetchFieldsFromESQL.$5", + "type": "Object", + "tags": [], + "label": "dataView", + "description": [], + "signature": [ + { + "pluginId": "dataViews", + "scope": "common", + "docId": "kibDataViewsPluginApi", + "section": "def-common.DataView", + "text": "DataView" + }, + " | undefined" + ], + "path": "packages/kbn-esql-editor/src/fetch_fields_from_esql.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [], + "initialIsOpen": false + } + ], + "interfaces": [ + { + "parentPluginId": "@kbn/esql-editor", + "id": "def-public.ESQLEditorProps", + "type": "Interface", + "tags": [], + "label": "ESQLEditorProps", + "description": [], + "path": "packages/kbn-esql-editor/src/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-editor", + "id": "def-public.ESQLEditorProps.query", + "type": "Object", + "tags": [], + "label": "query", + "description": [ + "The aggregate type query" + ], + "signature": [ + "{ esql: string; }" + ], + "path": "packages/kbn-esql-editor/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/esql-editor", + "id": "def-public.ESQLEditorProps.onTextLangQueryChange", + "type": "Function", + "tags": [], + "label": "onTextLangQueryChange", + "description": [ + "Callback running everytime the query changes" + ], + "signature": [ + "(query: ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.AggregateQuery", + "text": "AggregateQuery" + }, + ") => void" + ], + "path": "packages/kbn-esql-editor/src/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-editor", + "id": "def-public.ESQLEditorProps.onTextLangQueryChange.$1", + "type": "Object", + "tags": [], + "label": "query", + "description": [], + "signature": [ + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.AggregateQuery", + "text": "AggregateQuery" + } + ], + "path": "packages/kbn-esql-editor/src/types.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/esql-editor", + "id": "def-public.ESQLEditorProps.onTextLangQuerySubmit", + "type": "Function", + "tags": [], + "label": "onTextLangQuerySubmit", + "description": [ + "Callback running when the user submits the query" + ], + "signature": [ + "(query?: ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.AggregateQuery", + "text": "AggregateQuery" + }, + " | undefined, abortController?: AbortController | undefined) => Promise" + ], + "path": "packages/kbn-esql-editor/src/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-editor", + "id": "def-public.ESQLEditorProps.onTextLangQuerySubmit.$1", + "type": "Object", + "tags": [], + "label": "query", + "description": [], + "signature": [ + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.AggregateQuery", + "text": "AggregateQuery" + }, + " | undefined" + ], + "path": "packages/kbn-esql-editor/src/types.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + }, + { + "parentPluginId": "@kbn/esql-editor", + "id": "def-public.ESQLEditorProps.onTextLangQuerySubmit.$2", + "type": "Object", + "tags": [], + "label": "abortController", + "description": [], + "signature": [ + "AbortController | undefined" + ], + "path": "packages/kbn-esql-editor/src/types.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/esql-editor", + "id": "def-public.ESQLEditorProps.detectedTimestamp", + "type": "string", + "tags": [], + "label": "detectedTimestamp", + "description": [ + "If it is true, the editor displays the message @timestamp found\nThe text based queries are relying on adhoc dataviews which\ncan have an @timestamp timefield or nothing" + ], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-esql-editor/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/esql-editor", + "id": "def-public.ESQLEditorProps.errors", + "type": "Array", + "tags": [], + "label": "errors", + "description": [ + "Array of errors" + ], + "signature": [ + "Error[] | undefined" + ], + "path": "packages/kbn-esql-editor/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/esql-editor", + "id": "def-public.ESQLEditorProps.warning", + "type": "string", + "tags": [], + "label": "warning", + "description": [ + "Warning string as it comes from ES" + ], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-esql-editor/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/esql-editor", + "id": "def-public.ESQLEditorProps.isLoading", + "type": "CompoundType", + "tags": [], + "label": "isLoading", + "description": [ + "Disables the editor and displays loading icon in run button\nIt is also used for hiding the history component if it is not defined" + ], + "signature": [ + "boolean | undefined" + ], + "path": "packages/kbn-esql-editor/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/esql-editor", + "id": "def-public.ESQLEditorProps.isDisabled", + "type": "CompoundType", + "tags": [], + "label": "isDisabled", + "description": [ + "Disables the editor" + ], + "signature": [ + "boolean | undefined" + ], + "path": "packages/kbn-esql-editor/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/esql-editor", + "id": "def-public.ESQLEditorProps.dataTestSubj", + "type": "string", + "tags": [], + "label": "dataTestSubj", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-esql-editor/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/esql-editor", + "id": "def-public.ESQLEditorProps.hideRunQueryText", + "type": "CompoundType", + "tags": [], + "label": "hideRunQueryText", + "description": [ + "Hide the Run query information which appears on the footer" + ], + "signature": [ + "boolean | undefined" + ], + "path": "packages/kbn-esql-editor/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/esql-editor", + "id": "def-public.ESQLEditorProps.editorIsInline", + "type": "CompoundType", + "tags": [], + "label": "editorIsInline", + "description": [ + "This is used for applications (such as the inline editing flyout in dashboards)\nwhich want to add the editor without being part of the Unified search component\nIt renders a submit query button inside the editor" + ], + "signature": [ + "boolean | undefined" + ], + "path": "packages/kbn-esql-editor/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/esql-editor", + "id": "def-public.ESQLEditorProps.disableSubmitAction", + "type": "CompoundType", + "tags": [], + "label": "disableSubmitAction", + "description": [ + "Disables the submit query action" + ], + "signature": [ + "boolean | undefined" + ], + "path": "packages/kbn-esql-editor/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/esql-editor", + "id": "def-public.ESQLEditorProps.allowQueryCancellation", + "type": "CompoundType", + "tags": [], + "label": "allowQueryCancellation", + "description": [ + "when set to true enables query cancellation" + ], + "signature": [ + "boolean | undefined" + ], + "path": "packages/kbn-esql-editor/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/esql-editor", + "id": "def-public.ESQLEditorProps.hideTimeFilterInfo", + "type": "CompoundType", + "tags": [], + "label": "hideTimeFilterInfo", + "description": [ + "hide @timestamp info" + ], + "signature": [ + "boolean | undefined" + ], + "path": "packages/kbn-esql-editor/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/esql-editor", + "id": "def-public.ESQLEditorProps.hideQueryHistory", + "type": "CompoundType", + "tags": [], + "label": "hideQueryHistory", + "description": [ + "hide query history" + ], + "signature": [ + "boolean | undefined" + ], + "path": "packages/kbn-esql-editor/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/esql-editor", + "id": "def-public.ESQLEditorProps.hasOutline", + "type": "CompoundType", + "tags": [], + "label": "hasOutline", + "description": [ + "adds border in the editor" + ], + "signature": [ + "boolean | undefined" + ], + "path": "packages/kbn-esql-editor/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/esql-editor", + "id": "def-public.ESQLEditorProps.displayDocumentationAsFlyout", + "type": "CompoundType", + "tags": [], + "label": "displayDocumentationAsFlyout", + "description": [ + "adds a documentation icon in the footer which opens the inline docs as a flyout" + ], + "signature": [ + "boolean | undefined" + ], + "path": "packages/kbn-esql-editor/src/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + } + ], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "common": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/kbn_esql_editor.mdx b/api_docs/kbn_esql_editor.mdx new file mode 100644 index 0000000000000..88393630c2e1e --- /dev/null +++ b/api_docs/kbn_esql_editor.mdx @@ -0,0 +1,33 @@ +--- +#### +#### This document is auto-generated and is meant to be viewed inside our experimental, new docs system. +#### Reach out in #docs-engineering for more info. +#### +id: kibKbnEsqlEditorPluginApi +slug: /kibana-dev-docs/api/kbn-esql-editor +title: "@kbn/esql-editor" +image: https://source.unsplash.com/400x175/?github +description: API docs for the @kbn/esql-editor plugin +date: 2024-09-25 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-editor'] +--- +import kbnEsqlEditorObj from './kbn_esql_editor.devdocs.json'; + + + +Contact [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 29 | 0 | 12 | 0 | + +## Client + +### Functions + + +### Interfaces + + diff --git a/api_docs/kbn_esql_utils.mdx b/api_docs/kbn_esql_utils.mdx index df8162b9811ac..2c9468dd1a98a 100644 --- a/api_docs/kbn_esql_utils.mdx +++ b/api_docs/kbn_esql_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-utils title: "@kbn/esql-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-utils plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-utils'] --- import kbnEsqlUtilsObj from './kbn_esql_utils.devdocs.json'; diff --git a/api_docs/kbn_esql_validation_autocomplete.mdx b/api_docs/kbn_esql_validation_autocomplete.mdx index a2531506312ab..1bebf6c003750 100644 --- a/api_docs/kbn_esql_validation_autocomplete.mdx +++ b/api_docs/kbn_esql_validation_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-validation-autocomplete title: "@kbn/esql-validation-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-validation-autocomplete plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-validation-autocomplete'] --- import kbnEsqlValidationAutocompleteObj from './kbn_esql_validation_autocomplete.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_common.mdx b/api_docs/kbn_event_annotation_common.mdx index 9bdc5db15b39e..90f1bafbd19bd 100644 --- a/api_docs/kbn_event_annotation_common.mdx +++ b/api_docs/kbn_event_annotation_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-common title: "@kbn/event-annotation-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-common plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/event-annotation-common'] --- import kbnEventAnnotationCommonObj from './kbn_event_annotation_common.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_components.mdx b/api_docs/kbn_event_annotation_components.mdx index 07896aff3c309..5f99d34b6dfa0 100644 --- a/api_docs/kbn_event_annotation_components.mdx +++ b/api_docs/kbn_event_annotation_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-components title: "@kbn/event-annotation-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-components plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/event-annotation-components'] --- import kbnEventAnnotationComponentsObj from './kbn_event_annotation_components.devdocs.json'; diff --git a/api_docs/kbn_expandable_flyout.mdx b/api_docs/kbn_expandable_flyout.mdx index 10d0e62ac4d7c..6713332383f3c 100644 --- a/api_docs/kbn_expandable_flyout.mdx +++ b/api_docs/kbn_expandable_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-expandable-flyout title: "@kbn/expandable-flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/expandable-flyout plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/expandable-flyout'] --- import kbnExpandableFlyoutObj from './kbn_expandable_flyout.devdocs.json'; diff --git a/api_docs/kbn_field_types.mdx b/api_docs/kbn_field_types.mdx index 2921dad0145fe..86dc7b8662acc 100644 --- a/api_docs/kbn_field_types.mdx +++ b/api_docs/kbn_field_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-types title: "@kbn/field-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-types plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-types'] --- import kbnFieldTypesObj from './kbn_field_types.devdocs.json'; diff --git a/api_docs/kbn_field_utils.mdx b/api_docs/kbn_field_utils.mdx index 31cc07ce9e31e..1a6bb80575cfe 100644 --- a/api_docs/kbn_field_utils.mdx +++ b/api_docs/kbn_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-utils title: "@kbn/field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-utils plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-utils'] --- import kbnFieldUtilsObj from './kbn_field_utils.devdocs.json'; diff --git a/api_docs/kbn_find_used_node_modules.mdx b/api_docs/kbn_find_used_node_modules.mdx index 7b3935680f5ea..e68dff3abc141 100644 --- a/api_docs/kbn_find_used_node_modules.mdx +++ b/api_docs/kbn_find_used_node_modules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-find-used-node-modules title: "@kbn/find-used-node-modules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/find-used-node-modules plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/find-used-node-modules'] --- import kbnFindUsedNodeModulesObj from './kbn_find_used_node_modules.devdocs.json'; diff --git a/api_docs/kbn_formatters.mdx b/api_docs/kbn_formatters.mdx index 99f6b7a4bf6ae..fa065e173e97e 100644 --- a/api_docs/kbn_formatters.mdx +++ b/api_docs/kbn_formatters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-formatters title: "@kbn/formatters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/formatters plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/formatters'] --- import kbnFormattersObj from './kbn_formatters.devdocs.json'; diff --git a/api_docs/kbn_ftr_common_functional_services.mdx b/api_docs/kbn_ftr_common_functional_services.mdx index 0b01afe6d040c..3f737d857d4a1 100644 --- a/api_docs/kbn_ftr_common_functional_services.mdx +++ b/api_docs/kbn_ftr_common_functional_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-services title: "@kbn/ftr-common-functional-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-services plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-services'] --- import kbnFtrCommonFunctionalServicesObj from './kbn_ftr_common_functional_services.devdocs.json'; diff --git a/api_docs/kbn_ftr_common_functional_ui_services.mdx b/api_docs/kbn_ftr_common_functional_ui_services.mdx index 7f434326f7fbc..77b3bfaee2b78 100644 --- a/api_docs/kbn_ftr_common_functional_ui_services.mdx +++ b/api_docs/kbn_ftr_common_functional_ui_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-ui-services title: "@kbn/ftr-common-functional-ui-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-ui-services plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-ui-services'] --- import kbnFtrCommonFunctionalUiServicesObj from './kbn_ftr_common_functional_ui_services.devdocs.json'; diff --git a/api_docs/kbn_generate.mdx b/api_docs/kbn_generate.mdx index ebd8c583cf605..4044dc5fde017 100644 --- a/api_docs/kbn_generate.mdx +++ b/api_docs/kbn_generate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate title: "@kbn/generate" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate'] --- import kbnGenerateObj from './kbn_generate.devdocs.json'; diff --git a/api_docs/kbn_generate_console_definitions.mdx b/api_docs/kbn_generate_console_definitions.mdx index 868ed29f3b812..a69f7ed383fe3 100644 --- a/api_docs/kbn_generate_console_definitions.mdx +++ b/api_docs/kbn_generate_console_definitions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-console-definitions title: "@kbn/generate-console-definitions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-console-definitions plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-console-definitions'] --- import kbnGenerateConsoleDefinitionsObj from './kbn_generate_console_definitions.devdocs.json'; diff --git a/api_docs/kbn_generate_csv.mdx b/api_docs/kbn_generate_csv.mdx index 4e1510ea3a4cf..308c0942bd7a1 100644 --- a/api_docs/kbn_generate_csv.mdx +++ b/api_docs/kbn_generate_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-csv title: "@kbn/generate-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-csv plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv'] --- import kbnGenerateCsvObj from './kbn_generate_csv.devdocs.json'; diff --git a/api_docs/kbn_grid_layout.mdx b/api_docs/kbn_grid_layout.mdx index 611d2de1d982f..0b4b8daa5fe4d 100644 --- a/api_docs/kbn_grid_layout.mdx +++ b/api_docs/kbn_grid_layout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-grid-layout title: "@kbn/grid-layout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/grid-layout plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/grid-layout'] --- import kbnGridLayoutObj from './kbn_grid_layout.devdocs.json'; diff --git a/api_docs/kbn_grouping.mdx b/api_docs/kbn_grouping.mdx index e8de165e89275..4e5c48fa562df 100644 --- a/api_docs/kbn_grouping.mdx +++ b/api_docs/kbn_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-grouping title: "@kbn/grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/grouping plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/grouping'] --- import kbnGroupingObj from './kbn_grouping.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index 275deed3fdbdc..c2d3867bbfd9b 100644 --- a/api_docs/kbn_guided_onboarding.mdx +++ b/api_docs/kbn_guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-guided-onboarding title: "@kbn/guided-onboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/guided-onboarding plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/guided-onboarding'] --- import kbnGuidedOnboardingObj from './kbn_guided_onboarding.devdocs.json'; diff --git a/api_docs/kbn_handlebars.mdx b/api_docs/kbn_handlebars.mdx index 2625bd075157e..e06a5a0220b31 100644 --- a/api_docs/kbn_handlebars.mdx +++ b/api_docs/kbn_handlebars.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-handlebars title: "@kbn/handlebars" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/handlebars plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/handlebars'] --- import kbnHandlebarsObj from './kbn_handlebars.devdocs.json'; diff --git a/api_docs/kbn_hapi_mocks.mdx b/api_docs/kbn_hapi_mocks.mdx index 0de11a46c7612..995286be5a133 100644 --- a/api_docs/kbn_hapi_mocks.mdx +++ b/api_docs/kbn_hapi_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-hapi-mocks title: "@kbn/hapi-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/hapi-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/hapi-mocks'] --- import kbnHapiMocksObj from './kbn_hapi_mocks.devdocs.json'; diff --git a/api_docs/kbn_health_gateway_server.mdx b/api_docs/kbn_health_gateway_server.mdx index 77f9a691a60f2..4c4cc13c49612 100644 --- a/api_docs/kbn_health_gateway_server.mdx +++ b/api_docs/kbn_health_gateway_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-health-gateway-server title: "@kbn/health-gateway-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/health-gateway-server plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/health-gateway-server'] --- import kbnHealthGatewayServerObj from './kbn_health_gateway_server.devdocs.json'; diff --git a/api_docs/kbn_home_sample_data_card.mdx b/api_docs/kbn_home_sample_data_card.mdx index c5a3c60751653..52ad1e299486e 100644 --- a/api_docs/kbn_home_sample_data_card.mdx +++ b/api_docs/kbn_home_sample_data_card.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-card title: "@kbn/home-sample-data-card" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-card plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/home-sample-data-card'] --- import kbnHomeSampleDataCardObj from './kbn_home_sample_data_card.devdocs.json'; diff --git a/api_docs/kbn_home_sample_data_tab.mdx b/api_docs/kbn_home_sample_data_tab.mdx index d336e64f848ee..86e14cbcd1827 100644 --- a/api_docs/kbn_home_sample_data_tab.mdx +++ b/api_docs/kbn_home_sample_data_tab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-tab title: "@kbn/home-sample-data-tab" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-tab plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/home-sample-data-tab'] --- import kbnHomeSampleDataTabObj from './kbn_home_sample_data_tab.devdocs.json'; diff --git a/api_docs/kbn_i18n.mdx b/api_docs/kbn_i18n.mdx index 9de15eceddd4b..19e20f30e5a6b 100644 --- a/api_docs/kbn_i18n.mdx +++ b/api_docs/kbn_i18n.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n title: "@kbn/i18n" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/i18n'] --- import kbnI18nObj from './kbn_i18n.devdocs.json'; diff --git a/api_docs/kbn_i18n_react.mdx b/api_docs/kbn_i18n_react.mdx index 9a1721e7d5238..98fc92b2041b6 100644 --- a/api_docs/kbn_i18n_react.mdx +++ b/api_docs/kbn_i18n_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n-react title: "@kbn/i18n-react" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n-react plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/i18n-react'] --- import kbnI18nReactObj from './kbn_i18n_react.devdocs.json'; diff --git a/api_docs/kbn_import_resolver.mdx b/api_docs/kbn_import_resolver.mdx index 28e030581846a..30cf16a9e05a9 100644 --- a/api_docs/kbn_import_resolver.mdx +++ b/api_docs/kbn_import_resolver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-import-resolver title: "@kbn/import-resolver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/import-resolver plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] --- import kbnImportResolverObj from './kbn_import_resolver.devdocs.json'; diff --git a/api_docs/kbn_index_management_shared_types.devdocs.json b/api_docs/kbn_index_management_shared_types.devdocs.json index 84acbf41cb81b..346fe84c2a0d3 100644 --- a/api_docs/kbn_index_management_shared_types.devdocs.json +++ b/api_docs/kbn_index_management_shared_types.devdocs.json @@ -1343,6 +1343,73 @@ } ], "returnComment": [] + }, + { + "parentPluginId": "@kbn/index-management-shared-types", + "id": "def-common.IndexManagementPluginStart.getIndexSettingsComponent", + "type": "Function", + "tags": [], + "label": "getIndexSettingsComponent", + "description": [], + "signature": [ + "(deps: { history: ", + { + "pluginId": "@kbn/core-application-browser", + "scope": "public", + "docId": "kibKbnCoreApplicationBrowserPluginApi", + "section": "def-public.ScopedHistory", + "text": "ScopedHistory" + }, + "; }) => React.FC<", + { + "pluginId": "@kbn/index-management-shared-types", + "scope": "common", + "docId": "kibKbnIndexManagementSharedTypesPluginApi", + "section": "def-common.IndexSettingProps", + "text": "IndexSettingProps" + }, + ">" + ], + "path": "x-pack/packages/index-management/index_management_shared_types/src/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/index-management-shared-types", + "id": "def-common.IndexManagementPluginStart.getIndexSettingsComponent.$1", + "type": "Object", + "tags": [], + "label": "deps", + "description": [], + "path": "x-pack/packages/index-management/index_management_shared_types/src/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/index-management-shared-types", + "id": "def-common.IndexManagementPluginStart.getIndexSettingsComponent.$1.history", + "type": "Object", + "tags": [], + "label": "history", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-application-browser", + "scope": "public", + "docId": "kibKbnCoreApplicationBrowserPluginApi", + "section": "def-public.ScopedHistory", + "text": "ScopedHistory" + }, + "" + ], + "path": "x-pack/packages/index-management/index_management_shared_types/src/types.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "returnComment": [] } ], "initialIsOpen": false @@ -1396,6 +1463,31 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/index-management-shared-types", + "id": "def-common.IndexSettingProps", + "type": "Interface", + "tags": [], + "label": "IndexSettingProps", + "description": [], + "path": "x-pack/packages/index-management/index_management_shared_types/src/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/index-management-shared-types", + "id": "def-common.IndexSettingProps.indexName", + "type": "string", + "tags": [], + "label": "indexName", + "description": [], + "path": "x-pack/packages/index-management/index_management_shared_types/src/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/index-management-shared-types", "id": "def-common.IndexToggle", diff --git a/api_docs/kbn_index_management_shared_types.mdx b/api_docs/kbn_index_management_shared_types.mdx index 71e31aca65572..fd6ec77d5599d 100644 --- a/api_docs/kbn_index_management_shared_types.mdx +++ b/api_docs/kbn_index_management_shared_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-index-management-shared-types title: "@kbn/index-management-shared-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/index-management-shared-types plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/index-management-shared-types'] --- import kbnIndexManagementSharedTypesObj from './kbn_index_management_shared_types.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kiban | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 109 | 3 | 109 | 0 | +| 114 | 3 | 114 | 0 | ## Common diff --git a/api_docs/kbn_inference_integration_flyout.mdx b/api_docs/kbn_inference_integration_flyout.mdx index 93ba346755a27..fcb84f38ca0bc 100644 --- a/api_docs/kbn_inference_integration_flyout.mdx +++ b/api_docs/kbn_inference_integration_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-inference_integration_flyout title: "@kbn/inference_integration_flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/inference_integration_flyout plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/inference_integration_flyout'] --- import kbnInferenceIntegrationFlyoutObj from './kbn_inference_integration_flyout.devdocs.json'; diff --git a/api_docs/kbn_infra_forge.mdx b/api_docs/kbn_infra_forge.mdx index f0934e6a1fb19..323022afbec8f 100644 --- a/api_docs/kbn_infra_forge.mdx +++ b/api_docs/kbn_infra_forge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-infra-forge title: "@kbn/infra-forge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/infra-forge plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/infra-forge'] --- import kbnInfraForgeObj from './kbn_infra_forge.devdocs.json'; diff --git a/api_docs/kbn_interpreter.mdx b/api_docs/kbn_interpreter.mdx index 1af1924b18213..e912965777bc6 100644 --- a/api_docs/kbn_interpreter.mdx +++ b/api_docs/kbn_interpreter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-interpreter title: "@kbn/interpreter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/interpreter plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/interpreter'] --- import kbnInterpreterObj from './kbn_interpreter.devdocs.json'; diff --git a/api_docs/kbn_investigation_shared.mdx b/api_docs/kbn_investigation_shared.mdx index c8ccd6f73f5cf..69eee43ccf096 100644 --- a/api_docs/kbn_investigation_shared.mdx +++ b/api_docs/kbn_investigation_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-investigation-shared title: "@kbn/investigation-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/investigation-shared plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/investigation-shared'] --- import kbnInvestigationSharedObj from './kbn_investigation_shared.devdocs.json'; diff --git a/api_docs/kbn_io_ts_utils.mdx b/api_docs/kbn_io_ts_utils.mdx index 4d99772315f37..bb405c5d8cd0c 100644 --- a/api_docs/kbn_io_ts_utils.mdx +++ b/api_docs/kbn_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-io-ts-utils title: "@kbn/io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/io-ts-utils plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/io-ts-utils'] --- import kbnIoTsUtilsObj from './kbn_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_ipynb.mdx b/api_docs/kbn_ipynb.mdx index a69412659157c..18e866ab80ed9 100644 --- a/api_docs/kbn_ipynb.mdx +++ b/api_docs/kbn_ipynb.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ipynb title: "@kbn/ipynb" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ipynb plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ipynb'] --- import kbnIpynbObj from './kbn_ipynb.devdocs.json'; diff --git a/api_docs/kbn_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx index ee64021bda464..454a53ceaf7fe 100644 --- a/api_docs/kbn_jest_serializers.mdx +++ b/api_docs/kbn_jest_serializers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-jest-serializers title: "@kbn/jest-serializers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/jest-serializers plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/jest-serializers'] --- import kbnJestSerializersObj from './kbn_jest_serializers.devdocs.json'; diff --git a/api_docs/kbn_journeys.mdx b/api_docs/kbn_journeys.mdx index e86743aad8296..4f0448831db72 100644 --- a/api_docs/kbn_journeys.mdx +++ b/api_docs/kbn_journeys.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-journeys title: "@kbn/journeys" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/journeys plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/journeys'] --- import kbnJourneysObj from './kbn_journeys.devdocs.json'; diff --git a/api_docs/kbn_json_ast.mdx b/api_docs/kbn_json_ast.mdx index 2b27d1c94f5fe..728ccef029129 100644 --- a/api_docs/kbn_json_ast.mdx +++ b/api_docs/kbn_json_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-ast title: "@kbn/json-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-ast plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-ast'] --- import kbnJsonAstObj from './kbn_json_ast.devdocs.json'; diff --git a/api_docs/kbn_json_schemas.mdx b/api_docs/kbn_json_schemas.mdx index 960b977c357fa..c92113f07dc08 100644 --- a/api_docs/kbn_json_schemas.mdx +++ b/api_docs/kbn_json_schemas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-schemas title: "@kbn/json-schemas" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-schemas plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-schemas'] --- import kbnJsonSchemasObj from './kbn_json_schemas.devdocs.json'; diff --git a/api_docs/kbn_kibana_manifest_schema.mdx b/api_docs/kbn_kibana_manifest_schema.mdx index 8e6c94a7fe5c5..1fe35a64de827 100644 --- a/api_docs/kbn_kibana_manifest_schema.mdx +++ b/api_docs/kbn_kibana_manifest_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-kibana-manifest-schema title: "@kbn/kibana-manifest-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/kibana-manifest-schema plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/kibana-manifest-schema'] --- import kbnKibanaManifestSchemaObj from './kbn_kibana_manifest_schema.devdocs.json'; diff --git a/api_docs/kbn_language_documentation.devdocs.json b/api_docs/kbn_language_documentation.devdocs.json new file mode 100644 index 0000000000000..09a01624ef1c6 --- /dev/null +++ b/api_docs/kbn_language_documentation.devdocs.json @@ -0,0 +1,199 @@ +{ + "id": "@kbn/language-documentation", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "common": { + "classes": [], + "functions": [ + { + "parentPluginId": "@kbn/language-documentation", + "id": "def-common.LanguageDocumentationFlyout", + "type": "Function", + "tags": [], + "label": "LanguageDocumentationFlyout", + "description": [], + "signature": [ + "React.NamedExoticComponent & { readonly type: ({ searchInDescription, linkToDocumentation, isHelpMenuOpen, onHelpMenuVisibilityChange, }: DocumentationFlyoutProps) => JSX.Element; }" + ], + "path": "packages/kbn-language-documentation/src/components/as_flyout/index.tsx", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "@kbn/language-documentation", + "id": "def-common.LanguageDocumentationFlyout.$1", + "type": "Uncategorized", + "tags": [], + "label": "props", + "description": [], + "signature": [ + "P" + ], + "path": "node_modules/@types/react/index.d.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/language-documentation", + "id": "def-common.LanguageDocumentationInline", + "type": "Function", + "tags": [], + "label": "LanguageDocumentationInline", + "description": [], + "signature": [ + "React.NamedExoticComponent & { readonly type: ({ searchInDescription, height }: DocumentationInlineProps) => JSX.Element; }" + ], + "path": "packages/kbn-language-documentation/src/components/as_inline/index.tsx", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "@kbn/language-documentation", + "id": "def-common.LanguageDocumentationInline.$1", + "type": "Uncategorized", + "tags": [], + "label": "props", + "description": [], + "signature": [ + "P" + ], + "path": "node_modules/@types/react/index.d.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/language-documentation", + "id": "def-common.LanguageDocumentationPopover", + "type": "Function", + "tags": [], + "label": "LanguageDocumentationPopover", + "description": [], + "signature": [ + "React.NamedExoticComponent & { readonly type: ({ language, sections, buttonProps, searchInDescription, linkToDocumentation, isHelpMenuOpen, onHelpMenuVisibilityChange, }: DocumentationPopoverProps) => JSX.Element; }" + ], + "path": "packages/kbn-language-documentation/src/components/as_popover/index.tsx", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "@kbn/language-documentation", + "id": "def-common.LanguageDocumentationPopover.$1", + "type": "Uncategorized", + "tags": [], + "label": "props", + "description": [], + "signature": [ + "P" + ], + "path": "node_modules/@types/react/index.d.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/language-documentation", + "id": "def-common.LanguageDocumentationPopoverContent", + "type": "Function", + "tags": [], + "label": "LanguageDocumentationPopoverContent", + "description": [], + "signature": [ + "React.NamedExoticComponent & { readonly type: ({ language, sections, searchInDescription, linkToDocumentation, }: DocumentationProps) => JSX.Element; }" + ], + "path": "packages/kbn-language-documentation/src/components/as_popover/popover_content.tsx", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "@kbn/language-documentation", + "id": "def-common.LanguageDocumentationPopoverContent.$1", + "type": "Uncategorized", + "tags": [], + "label": "props", + "description": [], + "signature": [ + "P" + ], + "path": "node_modules/@types/react/index.d.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + } + ], + "interfaces": [ + { + "parentPluginId": "@kbn/language-documentation", + "id": "def-common.LanguageDocumentationSections", + "type": "Interface", + "tags": [], + "label": "LanguageDocumentationSections", + "description": [], + "path": "packages/kbn-language-documentation/src/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/language-documentation", + "id": "def-common.LanguageDocumentationSections.groups", + "type": "Array", + "tags": [], + "label": "groups", + "description": [], + "signature": [ + "{ label: string; description?: string | undefined; items: { label: string; description?: JSX.Element | undefined; }[]; }[]" + ], + "path": "packages/kbn-language-documentation/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/language-documentation", + "id": "def-common.LanguageDocumentationSections.initialSection", + "type": "Object", + "tags": [], + "label": "initialSection", + "description": [], + "signature": [ + "JSX.Element" + ], + "path": "packages/kbn-language-documentation/src/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + } + ], + "enums": [], + "misc": [], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/kbn_language_documentation.mdx b/api_docs/kbn_language_documentation.mdx new file mode 100644 index 0000000000000..0be97a23abd6f --- /dev/null +++ b/api_docs/kbn_language_documentation.mdx @@ -0,0 +1,33 @@ +--- +#### +#### This document is auto-generated and is meant to be viewed inside our experimental, new docs system. +#### Reach out in #docs-engineering for more info. +#### +id: kibKbnLanguageDocumentationPluginApi +slug: /kibana-dev-docs/api/kbn-language-documentation +title: "@kbn/language-documentation" +image: https://source.unsplash.com/400x175/?github +description: API docs for the @kbn/language-documentation plugin +date: 2024-09-25 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/language-documentation'] +--- +import kbnLanguageDocumentationObj from './kbn_language_documentation.devdocs.json'; + + + +Contact [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 11 | 0 | 7 | 0 | + +## Common + +### Functions + + +### Interfaces + + diff --git a/api_docs/kbn_lens_embeddable_utils.mdx b/api_docs/kbn_lens_embeddable_utils.mdx index 3d0e122faa3ed..75f971ff5584a 100644 --- a/api_docs/kbn_lens_embeddable_utils.mdx +++ b/api_docs/kbn_lens_embeddable_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-lens-embeddable-utils title: "@kbn/lens-embeddable-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/lens-embeddable-utils plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/lens-embeddable-utils'] --- import kbnLensEmbeddableUtilsObj from './kbn_lens_embeddable_utils.devdocs.json'; diff --git a/api_docs/kbn_lens_formula_docs.mdx b/api_docs/kbn_lens_formula_docs.mdx index ea64fc29ae107..f47a7158f948a 100644 --- a/api_docs/kbn_lens_formula_docs.mdx +++ b/api_docs/kbn_lens_formula_docs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-lens-formula-docs title: "@kbn/lens-formula-docs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/lens-formula-docs plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/lens-formula-docs'] --- import kbnLensFormulaDocsObj from './kbn_lens_formula_docs.devdocs.json'; diff --git a/api_docs/kbn_logging.mdx b/api_docs/kbn_logging.mdx index d8cffe4ccc85e..12e13d185451f 100644 --- a/api_docs/kbn_logging.mdx +++ b/api_docs/kbn_logging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging title: "@kbn/logging" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging'] --- import kbnLoggingObj from './kbn_logging.devdocs.json'; diff --git a/api_docs/kbn_logging_mocks.mdx b/api_docs/kbn_logging_mocks.mdx index 8bc93766c482e..872b7d6b670cc 100644 --- a/api_docs/kbn_logging_mocks.mdx +++ b/api_docs/kbn_logging_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging-mocks title: "@kbn/logging-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging-mocks'] --- import kbnLoggingMocksObj from './kbn_logging_mocks.devdocs.json'; diff --git a/api_docs/kbn_managed_content_badge.mdx b/api_docs/kbn_managed_content_badge.mdx index 561498e5fed4a..cafb66cbeac86 100644 --- a/api_docs/kbn_managed_content_badge.mdx +++ b/api_docs/kbn_managed_content_badge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-content-badge title: "@kbn/managed-content-badge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-content-badge plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/managed-content-badge'] --- import kbnManagedContentBadgeObj from './kbn_managed_content_badge.devdocs.json'; diff --git a/api_docs/kbn_managed_vscode_config.mdx b/api_docs/kbn_managed_vscode_config.mdx index e4d60bd081150..219a11d309bb0 100644 --- a/api_docs/kbn_managed_vscode_config.mdx +++ b/api_docs/kbn_managed_vscode_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-vscode-config title: "@kbn/managed-vscode-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-vscode-config plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/managed-vscode-config'] --- import kbnManagedVscodeConfigObj from './kbn_managed_vscode_config.devdocs.json'; diff --git a/api_docs/kbn_management_cards_navigation.mdx b/api_docs/kbn_management_cards_navigation.mdx index 92e1e9bfb8567..d9eae3d58679f 100644 --- a/api_docs/kbn_management_cards_navigation.mdx +++ b/api_docs/kbn_management_cards_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-cards-navigation title: "@kbn/management-cards-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-cards-navigation plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-cards-navigation'] --- import kbnManagementCardsNavigationObj from './kbn_management_cards_navigation.devdocs.json'; diff --git a/api_docs/kbn_management_settings_application.mdx b/api_docs/kbn_management_settings_application.mdx index bd69288458650..0ff38be1d05e8 100644 --- a/api_docs/kbn_management_settings_application.mdx +++ b/api_docs/kbn_management_settings_application.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-application title: "@kbn/management-settings-application" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-application plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-application'] --- import kbnManagementSettingsApplicationObj from './kbn_management_settings_application.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_field_category.mdx b/api_docs/kbn_management_settings_components_field_category.mdx index 64992b8b4fa5e..e46895bf04e25 100644 --- a/api_docs/kbn_management_settings_components_field_category.mdx +++ b/api_docs/kbn_management_settings_components_field_category.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-category title: "@kbn/management-settings-components-field-category" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-category plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-category'] --- import kbnManagementSettingsComponentsFieldCategoryObj from './kbn_management_settings_components_field_category.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_field_input.mdx b/api_docs/kbn_management_settings_components_field_input.mdx index f2e83f90fd4d3..1c482eaf6de8f 100644 --- a/api_docs/kbn_management_settings_components_field_input.mdx +++ b/api_docs/kbn_management_settings_components_field_input.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-input title: "@kbn/management-settings-components-field-input" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-input plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-input'] --- import kbnManagementSettingsComponentsFieldInputObj from './kbn_management_settings_components_field_input.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_field_row.mdx b/api_docs/kbn_management_settings_components_field_row.mdx index 9f53a5b60ec0d..1930369cc0691 100644 --- a/api_docs/kbn_management_settings_components_field_row.mdx +++ b/api_docs/kbn_management_settings_components_field_row.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-row title: "@kbn/management-settings-components-field-row" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-row plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-row'] --- import kbnManagementSettingsComponentsFieldRowObj from './kbn_management_settings_components_field_row.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_form.mdx b/api_docs/kbn_management_settings_components_form.mdx index 3fc1641619df5..182724cbf02ab 100644 --- a/api_docs/kbn_management_settings_components_form.mdx +++ b/api_docs/kbn_management_settings_components_form.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-form title: "@kbn/management-settings-components-form" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-form plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-form'] --- import kbnManagementSettingsComponentsFormObj from './kbn_management_settings_components_form.devdocs.json'; diff --git a/api_docs/kbn_management_settings_field_definition.mdx b/api_docs/kbn_management_settings_field_definition.mdx index 4a12af56fbcbf..c26df187e6106 100644 --- a/api_docs/kbn_management_settings_field_definition.mdx +++ b/api_docs/kbn_management_settings_field_definition.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-field-definition title: "@kbn/management-settings-field-definition" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-field-definition plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-field-definition'] --- import kbnManagementSettingsFieldDefinitionObj from './kbn_management_settings_field_definition.devdocs.json'; diff --git a/api_docs/kbn_management_settings_ids.mdx b/api_docs/kbn_management_settings_ids.mdx index 32c8a42e879cf..dcbf76f96de5f 100644 --- a/api_docs/kbn_management_settings_ids.mdx +++ b/api_docs/kbn_management_settings_ids.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-ids title: "@kbn/management-settings-ids" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-ids plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-ids'] --- import kbnManagementSettingsIdsObj from './kbn_management_settings_ids.devdocs.json'; diff --git a/api_docs/kbn_management_settings_section_registry.mdx b/api_docs/kbn_management_settings_section_registry.mdx index 37cfbf9a6ee5a..e289f6c8f6ef3 100644 --- a/api_docs/kbn_management_settings_section_registry.mdx +++ b/api_docs/kbn_management_settings_section_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-section-registry title: "@kbn/management-settings-section-registry" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-section-registry plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-section-registry'] --- import kbnManagementSettingsSectionRegistryObj from './kbn_management_settings_section_registry.devdocs.json'; diff --git a/api_docs/kbn_management_settings_types.mdx b/api_docs/kbn_management_settings_types.mdx index 7fe34f1f7499e..66a3bd6d6ebdb 100644 --- a/api_docs/kbn_management_settings_types.mdx +++ b/api_docs/kbn_management_settings_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-types title: "@kbn/management-settings-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-types plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-types'] --- import kbnManagementSettingsTypesObj from './kbn_management_settings_types.devdocs.json'; diff --git a/api_docs/kbn_management_settings_utilities.mdx b/api_docs/kbn_management_settings_utilities.mdx index 147aca08d1c80..2987ca73ccff9 100644 --- a/api_docs/kbn_management_settings_utilities.mdx +++ b/api_docs/kbn_management_settings_utilities.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-utilities title: "@kbn/management-settings-utilities" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-utilities plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-utilities'] --- import kbnManagementSettingsUtilitiesObj from './kbn_management_settings_utilities.devdocs.json'; diff --git a/api_docs/kbn_management_storybook_config.mdx b/api_docs/kbn_management_storybook_config.mdx index cee63cb3e1cb1..0ac2e4af2819e 100644 --- a/api_docs/kbn_management_storybook_config.mdx +++ b/api_docs/kbn_management_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-storybook-config title: "@kbn/management-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-storybook-config plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-storybook-config'] --- import kbnManagementStorybookConfigObj from './kbn_management_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_mapbox_gl.mdx b/api_docs/kbn_mapbox_gl.mdx index 8608dc57bc6a7..9f92ccdfb2195 100644 --- a/api_docs/kbn_mapbox_gl.mdx +++ b/api_docs/kbn_mapbox_gl.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mapbox-gl title: "@kbn/mapbox-gl" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mapbox-gl plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/mapbox-gl'] --- import kbnMapboxGlObj from './kbn_mapbox_gl.devdocs.json'; diff --git a/api_docs/kbn_maps_vector_tile_utils.mdx b/api_docs/kbn_maps_vector_tile_utils.mdx index 0c5af93071e02..1a2a11db0476e 100644 --- a/api_docs/kbn_maps_vector_tile_utils.mdx +++ b/api_docs/kbn_maps_vector_tile_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-maps-vector-tile-utils title: "@kbn/maps-vector-tile-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/maps-vector-tile-utils plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/maps-vector-tile-utils'] --- import kbnMapsVectorTileUtilsObj from './kbn_maps_vector_tile_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_agg_utils.mdx b/api_docs/kbn_ml_agg_utils.mdx index 4c113b69ed52d..24c411f19b23d 100644 --- a/api_docs/kbn_ml_agg_utils.mdx +++ b/api_docs/kbn_ml_agg_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-agg-utils title: "@kbn/ml-agg-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-agg-utils plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-agg-utils'] --- import kbnMlAggUtilsObj from './kbn_ml_agg_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_anomaly_utils.mdx b/api_docs/kbn_ml_anomaly_utils.mdx index 0302a54f6d0c1..94f493a85465f 100644 --- a/api_docs/kbn_ml_anomaly_utils.mdx +++ b/api_docs/kbn_ml_anomaly_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-anomaly-utils title: "@kbn/ml-anomaly-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-anomaly-utils plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-anomaly-utils'] --- import kbnMlAnomalyUtilsObj from './kbn_ml_anomaly_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_cancellable_search.mdx b/api_docs/kbn_ml_cancellable_search.mdx index 330bbc438ebf4..76d361271a276 100644 --- a/api_docs/kbn_ml_cancellable_search.mdx +++ b/api_docs/kbn_ml_cancellable_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-cancellable-search title: "@kbn/ml-cancellable-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-cancellable-search plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-cancellable-search'] --- import kbnMlCancellableSearchObj from './kbn_ml_cancellable_search.devdocs.json'; diff --git a/api_docs/kbn_ml_category_validator.mdx b/api_docs/kbn_ml_category_validator.mdx index 8428901ef144a..75c7cde55d972 100644 --- a/api_docs/kbn_ml_category_validator.mdx +++ b/api_docs/kbn_ml_category_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-category-validator title: "@kbn/ml-category-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-category-validator plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-category-validator'] --- import kbnMlCategoryValidatorObj from './kbn_ml_category_validator.devdocs.json'; diff --git a/api_docs/kbn_ml_chi2test.mdx b/api_docs/kbn_ml_chi2test.mdx index cec9210edece5..1e60255edab7b 100644 --- a/api_docs/kbn_ml_chi2test.mdx +++ b/api_docs/kbn_ml_chi2test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-chi2test title: "@kbn/ml-chi2test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-chi2test plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-chi2test'] --- import kbnMlChi2testObj from './kbn_ml_chi2test.devdocs.json'; diff --git a/api_docs/kbn_ml_data_frame_analytics_utils.mdx b/api_docs/kbn_ml_data_frame_analytics_utils.mdx index eee4921d398f3..7520e84282116 100644 --- a/api_docs/kbn_ml_data_frame_analytics_utils.mdx +++ b/api_docs/kbn_ml_data_frame_analytics_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-frame-analytics-utils title: "@kbn/ml-data-frame-analytics-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-frame-analytics-utils plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-data-frame-analytics-utils'] --- import kbnMlDataFrameAnalyticsUtilsObj from './kbn_ml_data_frame_analytics_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_data_grid.mdx b/api_docs/kbn_ml_data_grid.mdx index 6249238c7100e..d781e28e53d8d 100644 --- a/api_docs/kbn_ml_data_grid.mdx +++ b/api_docs/kbn_ml_data_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-grid title: "@kbn/ml-data-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-grid plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-data-grid'] --- import kbnMlDataGridObj from './kbn_ml_data_grid.devdocs.json'; diff --git a/api_docs/kbn_ml_date_picker.mdx b/api_docs/kbn_ml_date_picker.mdx index 83bcbb3817b0f..035179464dde3 100644 --- a/api_docs/kbn_ml_date_picker.mdx +++ b/api_docs/kbn_ml_date_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-picker title: "@kbn/ml-date-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-picker plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-date-picker'] --- import kbnMlDatePickerObj from './kbn_ml_date_picker.devdocs.json'; diff --git a/api_docs/kbn_ml_date_utils.mdx b/api_docs/kbn_ml_date_utils.mdx index fbbe0626d1b25..9c56c21dcf4cf 100644 --- a/api_docs/kbn_ml_date_utils.mdx +++ b/api_docs/kbn_ml_date_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-utils title: "@kbn/ml-date-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-utils plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-date-utils'] --- import kbnMlDateUtilsObj from './kbn_ml_date_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_error_utils.mdx b/api_docs/kbn_ml_error_utils.mdx index 4d8967ce4716d..eac3b5fdc5520 100644 --- a/api_docs/kbn_ml_error_utils.mdx +++ b/api_docs/kbn_ml_error_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-error-utils title: "@kbn/ml-error-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-error-utils plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-error-utils'] --- import kbnMlErrorUtilsObj from './kbn_ml_error_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_field_stats_flyout.devdocs.json b/api_docs/kbn_ml_field_stats_flyout.devdocs.json new file mode 100644 index 0000000000000..5920645b6870f --- /dev/null +++ b/api_docs/kbn_ml_field_stats_flyout.devdocs.json @@ -0,0 +1,716 @@ +{ + "id": "@kbn/ml-field-stats-flyout", + "client": { + "classes": [], + "functions": [ + { + "parentPluginId": "@kbn/ml-field-stats-flyout", + "id": "def-public.EuiComboBoxWithFieldStats", + "type": "Function", + "tags": [ + "component" + ], + "label": "EuiComboBoxWithFieldStats", + "description": [ + "\nReact component that wraps the EuiComboBox component and adds field statistics functionality.\n" + ], + "signature": [ + "(props: React.PropsWithChildren<", + { + "pluginId": "@kbn/ml-field-stats-flyout", + "scope": "public", + "docId": "kibKbnMlFieldStatsFlyoutPluginApi", + "section": "def-public.EuiComboBoxWithFieldStatsProps", + "text": "EuiComboBoxWithFieldStatsProps" + }, + ">) => JSX.Element" + ], + "path": "x-pack/packages/ml/field_stats_flyout/eui_combo_box_with_field_stats.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/ml-field-stats-flyout", + "id": "def-public.EuiComboBoxWithFieldStats.$1", + "type": "CompoundType", + "tags": [], + "label": "props", + "description": [ + "- The component props." + ], + "signature": [ + "React.PropsWithChildren<", + { + "pluginId": "@kbn/ml-field-stats-flyout", + "scope": "public", + "docId": "kibKbnMlFieldStatsFlyoutPluginApi", + "section": "def-public.EuiComboBoxWithFieldStatsProps", + "text": "EuiComboBoxWithFieldStatsProps" + }, + ">" + ], + "path": "x-pack/packages/ml/field_stats_flyout/eui_combo_box_with_field_stats.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/ml-field-stats-flyout", + "id": "def-public.FieldStatsContent", + "type": "Function", + "tags": [], + "label": "FieldStatsContent", + "description": [ + "\nRenders the content for the field statistics flyout." + ], + "signature": [ + "(props: React.PropsWithChildren<", + { + "pluginId": "@kbn/ml-field-stats-flyout", + "scope": "public", + "docId": "kibKbnMlFieldStatsFlyoutPluginApi", + "section": "def-public.FieldStatsFlyoutProps", + "text": "FieldStatsFlyoutProps" + }, + ">) => JSX.Element | null" + ], + "path": "x-pack/packages/ml/field_stats_flyout/field_stats_content.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/ml-field-stats-flyout", + "id": "def-public.FieldStatsContent.$1", + "type": "CompoundType", + "tags": [], + "label": "props", + "description": [ + "- The props for the FieldStatsContent component." + ], + "signature": [ + "React.PropsWithChildren<", + { + "pluginId": "@kbn/ml-field-stats-flyout", + "scope": "public", + "docId": "kibKbnMlFieldStatsFlyoutPluginApi", + "section": "def-public.FieldStatsFlyoutProps", + "text": "FieldStatsFlyoutProps" + }, + ">" + ], + "path": "x-pack/packages/ml/field_stats_flyout/field_stats_content.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "The rendered FieldStatsContent component." + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/ml-field-stats-flyout", + "id": "def-public.FieldStatsFlyout", + "type": "Function", + "tags": [ + "component" + ], + "label": "FieldStatsFlyout", + "description": [ + "\nRenders a flyout component for displaying field statistics.\n" + ], + "signature": [ + "(props: React.PropsWithChildren<", + { + "pluginId": "@kbn/ml-field-stats-flyout", + "scope": "public", + "docId": "kibKbnMlFieldStatsFlyoutPluginApi", + "section": "def-public.FieldStatsFlyoutProps", + "text": "FieldStatsFlyoutProps" + }, + ">) => JSX.Element | null" + ], + "path": "x-pack/packages/ml/field_stats_flyout/field_stats_flyout.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/ml-field-stats-flyout", + "id": "def-public.FieldStatsFlyout.$1", + "type": "CompoundType", + "tags": [], + "label": "props", + "description": [ + "- The component props." + ], + "signature": [ + "React.PropsWithChildren<", + { + "pluginId": "@kbn/ml-field-stats-flyout", + "scope": "public", + "docId": "kibKbnMlFieldStatsFlyoutPluginApi", + "section": "def-public.FieldStatsFlyoutProps", + "text": "FieldStatsFlyoutProps" + }, + ">" + ], + "path": "x-pack/packages/ml/field_stats_flyout/field_stats_flyout.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/ml-field-stats-flyout", + "id": "def-public.FieldStatsFlyoutProvider", + "type": "Function", + "tags": [ + "component" + ], + "label": "FieldStatsFlyoutProvider", + "description": [ + "\nProvides field statistics in a flyout component.\n" + ], + "signature": [ + "(props: React.PropsWithChildren<", + { + "pluginId": "@kbn/ml-field-stats-flyout", + "scope": "public", + "docId": "kibKbnMlFieldStatsFlyoutPluginApi", + "section": "def-public.FieldStatsFlyoutProviderProps", + "text": "FieldStatsFlyoutProviderProps" + }, + ">) => JSX.Element" + ], + "path": "x-pack/packages/ml/field_stats_flyout/field_stats_flyout_provider.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/ml-field-stats-flyout", + "id": "def-public.FieldStatsFlyoutProvider.$1", + "type": "CompoundType", + "tags": [], + "label": "props", + "description": [ + "- The component props." + ], + "signature": [ + "React.PropsWithChildren<", + { + "pluginId": "@kbn/ml-field-stats-flyout", + "scope": "public", + "docId": "kibKbnMlFieldStatsFlyoutPluginApi", + "section": "def-public.FieldStatsFlyoutProviderProps", + "text": "FieldStatsFlyoutProviderProps" + }, + ">" + ], + "path": "x-pack/packages/ml/field_stats_flyout/field_stats_flyout_provider.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/ml-field-stats-flyout", + "id": "def-public.FieldStatsInfoButton", + "type": "Function", + "tags": [ + "component" + ], + "label": "FieldStatsInfoButton", + "description": [ + "\nRenders a button component for field statistics information.\n" + ], + "signature": [ + "(props: React.PropsWithChildren<", + { + "pluginId": "@kbn/ml-field-stats-flyout", + "scope": "public", + "docId": "kibKbnMlFieldStatsFlyoutPluginApi", + "section": "def-public.FieldStatsInfoButtonProps", + "text": "FieldStatsInfoButtonProps" + }, + ">) => JSX.Element" + ], + "path": "x-pack/packages/ml/field_stats_flyout/field_stats_info_button.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/ml-field-stats-flyout", + "id": "def-public.FieldStatsInfoButton.$1", + "type": "CompoundType", + "tags": [], + "label": "props", + "description": [ + "- The props for the FieldStatsInfoButton component." + ], + "signature": [ + "React.PropsWithChildren<", + { + "pluginId": "@kbn/ml-field-stats-flyout", + "scope": "public", + "docId": "kibKbnMlFieldStatsFlyoutPluginApi", + "section": "def-public.FieldStatsInfoButtonProps", + "text": "FieldStatsInfoButtonProps" + }, + ">" + ], + "path": "x-pack/packages/ml/field_stats_flyout/field_stats_info_button.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/ml-field-stats-flyout", + "id": "def-public.useFieldStatsFlyoutContext", + "type": "Function", + "tags": [], + "label": "useFieldStatsFlyoutContext", + "description": [ + "\nRetrieves the context for the field stats flyout." + ], + "signature": [ + "() => MLJobWizardFieldStatsFlyoutProps" + ], + "path": "x-pack/packages/ml/field_stats_flyout/use_field_stats_flyout_context.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [ + "The field stats flyout context." + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/ml-field-stats-flyout", + "id": "def-public.useFieldStatsTrigger", + "type": "Function", + "tags": [], + "label": "useFieldStatsTrigger", + "description": [ + "\nCustom hook for managing field statistics trigger functionality.\n" + ], + "signature": [ + "() => { renderOption: (option: ", + "EuiComboBoxOptionOption", + ", searchValue: string) => React.ReactNode; setIsFlyoutVisible: (v: boolean) => void; setFieldName: (v: string | undefined) => void; handleFieldStatsButtonClick: (field: ", + { + "pluginId": "@kbn/ml-field-stats-flyout", + "scope": "public", + "docId": "kibKbnMlFieldStatsFlyoutPluginApi", + "section": "def-public.FieldForStats", + "text": "FieldForStats" + }, + ") => void; closeFlyout: () => void; optionCss: ", + "SerializedStyles", + "; populatedFields: Set | undefined; }" + ], + "path": "x-pack/packages/ml/field_stats_flyout/use_field_stats_trigger.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [ + "An object containing the following properties and functions:\n- `renderOption`: A callback function for rendering options in a combo box.\n- `setIsFlyoutVisible`: A function for setting the visibility of the flyout.\n- `setFieldName`: A function for setting the field name.\n- `handleFieldStatsButtonClick`: A callback function for handling field stats button click.\n- `closeFlyout`: A callback function for closing the flyout.\n- `optionCss`: CSS styles for the options in the combo box.\n- `populatedFields`: A set of populated fields." + ], + "initialIsOpen": false + } + ], + "interfaces": [ + { + "parentPluginId": "@kbn/ml-field-stats-flyout", + "id": "def-public.FieldStatsFlyoutProps", + "type": "Interface", + "tags": [], + "label": "FieldStatsFlyoutProps", + "description": [ + "\nRepresents the props for the FieldStatsFlyout component." + ], + "path": "x-pack/packages/ml/field_stats_flyout/field_stats_content.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/ml-field-stats-flyout", + "id": "def-public.FieldStatsFlyoutProps.dataView", + "type": "Object", + "tags": [], + "label": "dataView", + "description": [ + "\nThe data view object." + ], + "signature": [ + { + "pluginId": "dataViews", + "scope": "common", + "docId": "kibDataViewsPluginApi", + "section": "def-common.DataView", + "text": "DataView" + } + ], + "path": "x-pack/packages/ml/field_stats_flyout/field_stats_content.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ml-field-stats-flyout", + "id": "def-public.FieldStatsFlyoutProps.fieldStatsServices", + "type": "Object", + "tags": [], + "label": "fieldStatsServices", + "description": [ + "\nServices required for field statistics." + ], + "signature": [ + { + "pluginId": "@kbn/unified-field-list", + "scope": "public", + "docId": "kibKbnUnifiedFieldListPluginApi", + "section": "def-public.FieldStatsServices", + "text": "FieldStatsServices" + } + ], + "path": "x-pack/packages/ml/field_stats_flyout/field_stats_content.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ml-field-stats-flyout", + "id": "def-public.FieldStatsFlyoutProps.timeRangeMs", + "type": "Object", + "tags": [], + "label": "timeRangeMs", + "description": [ + "\nOptional time range in milliseconds." + ], + "signature": [ + { + "pluginId": "@kbn/ml-date-picker", + "scope": "public", + "docId": "kibKbnMlDatePickerPluginApi", + "section": "def-public.TimeRange", + "text": "TimeRange" + }, + " | undefined" + ], + "path": "x-pack/packages/ml/field_stats_flyout/field_stats_content.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ml-field-stats-flyout", + "id": "def-public.FieldStatsFlyoutProps.dslQuery", + "type": "Uncategorized", + "tags": [], + "label": "dslQuery", + "description": [ + "\nOptional DSL query for filtering field statistics." + ], + "signature": [ + "object | undefined" + ], + "path": "x-pack/packages/ml/field_stats_flyout/field_stats_content.tsx", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/ml-field-stats-flyout", + "id": "def-public.FieldStatsInfoButtonProps", + "type": "Interface", + "tags": [], + "label": "FieldStatsInfoButtonProps", + "description": [ + "\nRepresents the props for the FieldStatsInfoButton component." + ], + "path": "x-pack/packages/ml/field_stats_flyout/field_stats_info_button.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/ml-field-stats-flyout", + "id": "def-public.FieldStatsInfoButtonProps.field", + "type": "Object", + "tags": [], + "label": "field", + "description": [ + "\nThe field for which to display statistics." + ], + "signature": [ + "{ id: string; type: ", + { + "pluginId": "@kbn/field-types", + "scope": "common", + "docId": "kibKbnFieldTypesPluginApi", + "section": "def-common.ES_FIELD_TYPES", + "text": "ES_FIELD_TYPES" + }, + "; }" + ], + "path": "x-pack/packages/ml/field_stats_flyout/field_stats_info_button.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ml-field-stats-flyout", + "id": "def-public.FieldStatsInfoButtonProps.label", + "type": "string", + "tags": [], + "label": "label", + "description": [ + "\nThe label for the field." + ], + "path": "x-pack/packages/ml/field_stats_flyout/field_stats_info_button.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ml-field-stats-flyout", + "id": "def-public.FieldStatsInfoButtonProps.onButtonClick", + "type": "Function", + "tags": [], + "label": "onButtonClick", + "description": [ + "\nButton click callback function." + ], + "signature": [ + "((field: ", + { + "pluginId": "@kbn/ml-field-stats-flyout", + "scope": "public", + "docId": "kibKbnMlFieldStatsFlyoutPluginApi", + "section": "def-public.FieldForStats", + "text": "FieldForStats" + }, + ") => void) | undefined" + ], + "path": "x-pack/packages/ml/field_stats_flyout/field_stats_info_button.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/ml-field-stats-flyout", + "id": "def-public.FieldStatsInfoButtonProps.onButtonClick.$1", + "type": "Object", + "tags": [], + "label": "field", + "description": [ + "- The field for which to display statistics." + ], + "signature": [ + { + "pluginId": "@kbn/ml-field-stats-flyout", + "scope": "public", + "docId": "kibKbnMlFieldStatsFlyoutPluginApi", + "section": "def-public.FieldForStats", + "text": "FieldForStats" + } + ], + "path": "x-pack/packages/ml/field_stats_flyout/field_stats_info_button.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "void" + ] + }, + { + "parentPluginId": "@kbn/ml-field-stats-flyout", + "id": "def-public.FieldStatsInfoButtonProps.disabled", + "type": "CompoundType", + "tags": [], + "label": "disabled", + "description": [ + "\nIf true, the button is disabled." + ], + "signature": [ + "boolean | undefined" + ], + "path": "x-pack/packages/ml/field_stats_flyout/field_stats_info_button.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ml-field-stats-flyout", + "id": "def-public.FieldStatsInfoButtonProps.isEmpty", + "type": "CompoundType", + "tags": [], + "label": "isEmpty", + "description": [ + "\nIf true, the field is empty." + ], + "signature": [ + "boolean | undefined" + ], + "path": "x-pack/packages/ml/field_stats_flyout/field_stats_info_button.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ml-field-stats-flyout", + "id": "def-public.FieldStatsInfoButtonProps.hideTrigger", + "type": "CompoundType", + "tags": [], + "label": "hideTrigger", + "description": [ + "\nIf true, the trigger is hidden." + ], + "signature": [ + "boolean | undefined" + ], + "path": "x-pack/packages/ml/field_stats_flyout/field_stats_info_button.tsx", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + } + ], + "enums": [], + "misc": [ + { + "parentPluginId": "@kbn/ml-field-stats-flyout", + "id": "def-public.EuiComboBoxWithFieldStatsProps", + "type": "Type", + "tags": [], + "label": "EuiComboBoxWithFieldStatsProps", + "description": [ + "\nProps for the EuiComboBoxWithFieldStats component." + ], + "signature": [ + "Omit<", + "_EuiComboBoxProps", + ", \"options\" | \"selectedOptions\" | \"optionMatcher\" | \"async\" | \"compressed\" | \"fullWidth\" | \"isClearable\" | \"singleSelection\" | \"prepend\" | \"append\" | \"sortMatchesBy\"> & Partial>" + ], + "path": "x-pack/packages/ml/field_stats_flyout/eui_combo_box_with_field_stats.tsx", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/ml-field-stats-flyout", + "id": "def-public.FieldForStats", + "type": "Type", + "tags": [], + "label": "FieldForStats", + "description": [ + "\nRepresents a field used for statistics." + ], + "signature": [ + "{ id: string; type: ", + { + "pluginId": "@kbn/field-types", + "scope": "common", + "docId": "kibKbnFieldTypesPluginApi", + "section": "def-common.ES_FIELD_TYPES", + "text": "ES_FIELD_TYPES" + }, + "; }" + ], + "path": "x-pack/packages/ml/field_stats_flyout/field_stats_info_button.tsx", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/ml-field-stats-flyout", + "id": "def-public.FieldStatsFlyoutProviderProps", + "type": "Type", + "tags": [ + "typedef" + ], + "label": "FieldStatsFlyoutProviderProps", + "description": [ + "\nProps for the FieldStatsFlyoutProvider component.\n" + ], + "signature": [ + "{ dataView: ", + { + "pluginId": "dataViews", + "scope": "common", + "docId": "kibDataViewsPluginApi", + "section": "def-common.DataView", + "text": "DataView" + }, + "; fieldStatsServices: ", + { + "pluginId": "@kbn/unified-field-list", + "scope": "public", + "docId": "kibKbnUnifiedFieldListPluginApi", + "section": "def-public.FieldStatsServices", + "text": "FieldStatsServices" + }, + "; timeRangeMs?: ", + { + "pluginId": "@kbn/ml-date-picker", + "scope": "public", + "docId": "kibKbnMlDatePickerPluginApi", + "section": "def-public.TimeRange", + "text": "TimeRange" + }, + " | undefined; dslQuery?: object | undefined; disablePopulatedFields?: boolean | undefined; } & { children?: React.ReactNode; }" + ], + "path": "x-pack/packages/ml/field_stats_flyout/field_stats_flyout_provider.tsx", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "objects": [ + { + "parentPluginId": "@kbn/ml-field-stats-flyout", + "id": "def-public.MLFieldStatsFlyoutContext", + "type": "Object", + "tags": [], + "label": "MLFieldStatsFlyoutContext", + "description": [ + "\nContext for the ML Field Stats Flyout." + ], + "signature": [ + "React.Context" + ], + "path": "x-pack/packages/ml/field_stats_flyout/use_field_stats_flyout_context.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "common": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/kbn_ml_field_stats_flyout.mdx b/api_docs/kbn_ml_field_stats_flyout.mdx new file mode 100644 index 0000000000000..e839f020cb8e2 --- /dev/null +++ b/api_docs/kbn_ml_field_stats_flyout.mdx @@ -0,0 +1,39 @@ +--- +#### +#### This document is auto-generated and is meant to be viewed inside our experimental, new docs system. +#### Reach out in #docs-engineering for more info. +#### +id: kibKbnMlFieldStatsFlyoutPluginApi +slug: /kibana-dev-docs/api/kbn-ml-field-stats-flyout +title: "@kbn/ml-field-stats-flyout" +image: https://source.unsplash.com/400x175/?github +description: API docs for the @kbn/ml-field-stats-flyout plugin +date: 2024-09-25 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-field-stats-flyout'] +--- +import kbnMlFieldStatsFlyoutObj from './kbn_ml_field_stats_flyout.devdocs.json'; + + + +Contact [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 29 | 0 | 0 | 0 | + +## Client + +### Objects + + +### Functions + + +### Interfaces + + +### Consts, variables and types + + diff --git a/api_docs/kbn_ml_in_memory_table.mdx b/api_docs/kbn_ml_in_memory_table.mdx index cf72734da4aff..a9ccc6bc0ded1 100644 --- a/api_docs/kbn_ml_in_memory_table.mdx +++ b/api_docs/kbn_ml_in_memory_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-in-memory-table title: "@kbn/ml-in-memory-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-in-memory-table plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-in-memory-table'] --- import kbnMlInMemoryTableObj from './kbn_ml_in_memory_table.devdocs.json'; diff --git a/api_docs/kbn_ml_is_defined.mdx b/api_docs/kbn_ml_is_defined.mdx index d60a2105d1a09..9fc6f32ff7ce4 100644 --- a/api_docs/kbn_ml_is_defined.mdx +++ b/api_docs/kbn_ml_is_defined.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-defined title: "@kbn/ml-is-defined" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-defined plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-is-defined'] --- import kbnMlIsDefinedObj from './kbn_ml_is_defined.devdocs.json'; diff --git a/api_docs/kbn_ml_is_populated_object.mdx b/api_docs/kbn_ml_is_populated_object.mdx index c771ed4b4d36b..b4ed796e7f00b 100644 --- a/api_docs/kbn_ml_is_populated_object.mdx +++ b/api_docs/kbn_ml_is_populated_object.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-populated-object title: "@kbn/ml-is-populated-object" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-populated-object plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-is-populated-object'] --- import kbnMlIsPopulatedObjectObj from './kbn_ml_is_populated_object.devdocs.json'; diff --git a/api_docs/kbn_ml_kibana_theme.mdx b/api_docs/kbn_ml_kibana_theme.mdx index 0b53670964b75..fbe97de9b8ce7 100644 --- a/api_docs/kbn_ml_kibana_theme.mdx +++ b/api_docs/kbn_ml_kibana_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-kibana-theme title: "@kbn/ml-kibana-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-kibana-theme plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-kibana-theme'] --- import kbnMlKibanaThemeObj from './kbn_ml_kibana_theme.devdocs.json'; diff --git a/api_docs/kbn_ml_local_storage.mdx b/api_docs/kbn_ml_local_storage.mdx index f4492fc4f7e1d..0e376e48aa986 100644 --- a/api_docs/kbn_ml_local_storage.mdx +++ b/api_docs/kbn_ml_local_storage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-local-storage title: "@kbn/ml-local-storage" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-local-storage plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-local-storage'] --- import kbnMlLocalStorageObj from './kbn_ml_local_storage.devdocs.json'; diff --git a/api_docs/kbn_ml_nested_property.mdx b/api_docs/kbn_ml_nested_property.mdx index f11a3dbc91b40..2c0dda56c7831 100644 --- a/api_docs/kbn_ml_nested_property.mdx +++ b/api_docs/kbn_ml_nested_property.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-nested-property title: "@kbn/ml-nested-property" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-nested-property plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-nested-property'] --- import kbnMlNestedPropertyObj from './kbn_ml_nested_property.devdocs.json'; diff --git a/api_docs/kbn_ml_number_utils.mdx b/api_docs/kbn_ml_number_utils.mdx index 7078beea82198..ae5c74a05ee58 100644 --- a/api_docs/kbn_ml_number_utils.mdx +++ b/api_docs/kbn_ml_number_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-number-utils title: "@kbn/ml-number-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-number-utils plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-number-utils'] --- import kbnMlNumberUtilsObj from './kbn_ml_number_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_parse_interval.devdocs.json b/api_docs/kbn_ml_parse_interval.devdocs.json new file mode 100644 index 0000000000000..6f189fe473c4f --- /dev/null +++ b/api_docs/kbn_ml_parse_interval.devdocs.json @@ -0,0 +1,84 @@ +{ + "id": "@kbn/ml-parse-interval", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "common": { + "classes": [], + "functions": [ + { + "parentPluginId": "@kbn/ml-parse-interval", + "id": "def-common.parseInterval", + "type": "Function", + "tags": [], + "label": "parseInterval", + "description": [ + "\nParses an interval string, such as 7d, 1h, or 30m to a moment duration.\nOptionally carries out an additional check that the interval is supported as a\ntime unit by Elasticsearch, as units greater than 'd' for example cannot be used\nfor anomaly detection job bucket spans.\n\nDiffers from the Kibana ui/utils/parse_interval in the following ways:\n1. A value-less interval such as 'm' is not allowed - in line with the ML back-end\n not accepting such interval strings for the bucket span of a job.\n2. Zero length durations 0ms, 0s, 0m, and 0h are accepted as-is.\n Note that when adding or subtracting fractional durations, moment is only designed\n to work with units less than 'day'.\n3. Fractional intervals e.g. 1.5h or 4.5d are not allowed, in line with the behaviour\n of the Elasticsearch date histogram aggregation.\n" + ], + "signature": [ + "(interval: string | number, checkValidEsUnit: boolean) => moment.Duration | null" + ], + "path": "x-pack/packages/ml/parse_interval/parse_interval.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/ml-parse-interval", + "id": "def-common.parseInterval.$1", + "type": "CompoundType", + "tags": [], + "label": "interval", + "description": [ + "- The interval to parse." + ], + "signature": [ + "string | number" + ], + "path": "x-pack/packages/ml/parse_interval/parse_interval.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/ml-parse-interval", + "id": "def-common.parseInterval.$2", + "type": "boolean", + "tags": [], + "label": "checkValidEsUnit", + "description": [ + "- Optional. Specifies whether to check if the unit is a valid Elasticsearch duration unit. Default is false." + ], + "signature": [ + "boolean" + ], + "path": "x-pack/packages/ml/parse_interval/parse_interval.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "The parsed Duration object, or null if the interval is invalid." + ], + "initialIsOpen": false + } + ], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/kbn_ml_parse_interval.mdx b/api_docs/kbn_ml_parse_interval.mdx new file mode 100644 index 0000000000000..0970373ddb7c4 --- /dev/null +++ b/api_docs/kbn_ml_parse_interval.mdx @@ -0,0 +1,30 @@ +--- +#### +#### This document is auto-generated and is meant to be viewed inside our experimental, new docs system. +#### Reach out in #docs-engineering for more info. +#### +id: kibKbnMlParseIntervalPluginApi +slug: /kibana-dev-docs/api/kbn-ml-parse-interval +title: "@kbn/ml-parse-interval" +image: https://source.unsplash.com/400x175/?github +description: API docs for the @kbn/ml-parse-interval plugin +date: 2024-09-25 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-parse-interval'] +--- +import kbnMlParseIntervalObj from './kbn_ml_parse_interval.devdocs.json'; + + + +Contact [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 3 | 0 | 0 | 0 | + +## Common + +### Functions + + diff --git a/api_docs/kbn_ml_query_utils.devdocs.json b/api_docs/kbn_ml_query_utils.devdocs.json index a6c6032165c6f..853cbabd7a299 100644 --- a/api_docs/kbn_ml_query_utils.devdocs.json +++ b/api_docs/kbn_ml_query_utils.devdocs.json @@ -183,7 +183,7 @@ "() => ", "QueryDslQueryContainer" ], - "path": "x-pack/packages/ml/query_utils/src/get_default_query.ts", + "path": "x-pack/packages/ml/query_utils/src/get_default_dsl_query.ts", "deprecated": false, "trackAdoption": false, "children": [], diff --git a/api_docs/kbn_ml_query_utils.mdx b/api_docs/kbn_ml_query_utils.mdx index b7e43de80739d..59f35531b7f75 100644 --- a/api_docs/kbn_ml_query_utils.mdx +++ b/api_docs/kbn_ml_query_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-query-utils title: "@kbn/ml-query-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-query-utils plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-query-utils'] --- import kbnMlQueryUtilsObj from './kbn_ml_query_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_random_sampler_utils.mdx b/api_docs/kbn_ml_random_sampler_utils.mdx index 1d5fef27ddf5e..686bc46550d01 100644 --- a/api_docs/kbn_ml_random_sampler_utils.mdx +++ b/api_docs/kbn_ml_random_sampler_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-random-sampler-utils title: "@kbn/ml-random-sampler-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-random-sampler-utils plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-random-sampler-utils'] --- import kbnMlRandomSamplerUtilsObj from './kbn_ml_random_sampler_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_route_utils.mdx b/api_docs/kbn_ml_route_utils.mdx index 4ac3d0802dd8e..cbca24e66b18f 100644 --- a/api_docs/kbn_ml_route_utils.mdx +++ b/api_docs/kbn_ml_route_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-route-utils title: "@kbn/ml-route-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-route-utils plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-route-utils'] --- import kbnMlRouteUtilsObj from './kbn_ml_route_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_runtime_field_utils.mdx b/api_docs/kbn_ml_runtime_field_utils.mdx index 9c62d8e102ceb..d5144aeff9205 100644 --- a/api_docs/kbn_ml_runtime_field_utils.mdx +++ b/api_docs/kbn_ml_runtime_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-runtime-field-utils title: "@kbn/ml-runtime-field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-runtime-field-utils plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-runtime-field-utils'] --- import kbnMlRuntimeFieldUtilsObj from './kbn_ml_runtime_field_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_string_hash.mdx b/api_docs/kbn_ml_string_hash.mdx index c5fd2c474a42e..eddeabaa739ea 100644 --- a/api_docs/kbn_ml_string_hash.mdx +++ b/api_docs/kbn_ml_string_hash.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-string-hash title: "@kbn/ml-string-hash" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-string-hash plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-string-hash'] --- import kbnMlStringHashObj from './kbn_ml_string_hash.devdocs.json'; diff --git a/api_docs/kbn_ml_time_buckets.mdx b/api_docs/kbn_ml_time_buckets.mdx index e2c52a88f341f..be35a87769147 100644 --- a/api_docs/kbn_ml_time_buckets.mdx +++ b/api_docs/kbn_ml_time_buckets.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-time-buckets title: "@kbn/ml-time-buckets" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-time-buckets plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-time-buckets'] --- import kbnMlTimeBucketsObj from './kbn_ml_time_buckets.devdocs.json'; diff --git a/api_docs/kbn_ml_trained_models_utils.mdx b/api_docs/kbn_ml_trained_models_utils.mdx index e6455263686a9..63412c92dab2f 100644 --- a/api_docs/kbn_ml_trained_models_utils.mdx +++ b/api_docs/kbn_ml_trained_models_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-trained-models-utils title: "@kbn/ml-trained-models-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-trained-models-utils plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-trained-models-utils'] --- import kbnMlTrainedModelsUtilsObj from './kbn_ml_trained_models_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_ui_actions.mdx b/api_docs/kbn_ml_ui_actions.mdx index a46f15a08be6d..b41b9dddd3bb2 100644 --- a/api_docs/kbn_ml_ui_actions.mdx +++ b/api_docs/kbn_ml_ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-ui-actions title: "@kbn/ml-ui-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-ui-actions plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-ui-actions'] --- import kbnMlUiActionsObj from './kbn_ml_ui_actions.devdocs.json'; diff --git a/api_docs/kbn_ml_url_state.mdx b/api_docs/kbn_ml_url_state.mdx index 19c30dd290bdf..29f5c047fda5d 100644 --- a/api_docs/kbn_ml_url_state.mdx +++ b/api_docs/kbn_ml_url_state.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-url-state title: "@kbn/ml-url-state" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-url-state plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-url-state'] --- import kbnMlUrlStateObj from './kbn_ml_url_state.devdocs.json'; diff --git a/api_docs/kbn_ml_validators.devdocs.json b/api_docs/kbn_ml_validators.devdocs.json new file mode 100644 index 0000000000000..ee66386f35dfa --- /dev/null +++ b/api_docs/kbn_ml_validators.devdocs.json @@ -0,0 +1,601 @@ +{ + "id": "@kbn/ml-validators", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "common": { + "classes": [], + "functions": [ + { + "parentPluginId": "@kbn/ml-validators", + "id": "def-common.composeValidators", + "type": "Function", + "tags": [], + "label": "composeValidators", + "description": [ + "\nFactory that composes multiple validators into a single function.\n" + ], + "signature": [ + "(validators: ((value: any) => { [key: string]: any; } | null)[]) => (value: any) => { [key: string]: any; } | null" + ], + "path": "x-pack/packages/ml/validators/validators.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/ml-validators", + "id": "def-common.composeValidators.$1", + "type": "Array", + "tags": [], + "label": "validators", + "description": [ + "List of validators to compose." + ], + "signature": [ + "((value: any) => { [key: string]: any; } | null)[]" + ], + "path": "x-pack/packages/ml/validators/validators.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "A validator function that runs all the validators." + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/ml-validators", + "id": "def-common.dictionaryValidator", + "type": "Function", + "tags": [], + "label": "dictionaryValidator", + "description": [ + "\nFactory to create a dictionary validator function." + ], + "signature": [ + "(dict: string[], shouldInclude: boolean) => (value: string) => { matchDict: string; } | null" + ], + "path": "x-pack/packages/ml/validators/validators.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/ml-validators", + "id": "def-common.dictionaryValidator.$1", + "type": "Array", + "tags": [], + "label": "dict", + "description": [ + "Dictionary to check against." + ], + "signature": [ + "string[]" + ], + "path": "x-pack/packages/ml/validators/validators.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/ml-validators", + "id": "def-common.dictionaryValidator.$2", + "type": "boolean", + "tags": [], + "label": "shouldInclude", + "description": [ + "Whether the value should be included in the dictionary." + ], + "signature": [ + "boolean" + ], + "path": "x-pack/packages/ml/validators/validators.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "A validator function that checks if the value is in the dictionary." + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/ml-validators", + "id": "def-common.maxLengthValidator", + "type": "Function", + "tags": [], + "label": "maxLengthValidator", + "description": [ + "\nProvides a validator function for maximum allowed input length." + ], + "signature": [ + "(maxLength: number) => (value: string) => { maxLength: { requiredLength: number; actualLength: number; }; } | null" + ], + "path": "x-pack/packages/ml/validators/validators.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/ml-validators", + "id": "def-common.maxLengthValidator.$1", + "type": "number", + "tags": [], + "label": "maxLength", + "description": [ + "Maximum length allowed." + ], + "signature": [ + "number" + ], + "path": "x-pack/packages/ml/validators/validators.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/ml-validators", + "id": "def-common.memoryInputValidator", + "type": "Function", + "tags": [], + "label": "memoryInputValidator", + "description": [ + "\nFactory for creating a memory input validator function.\n" + ], + "signature": [ + "(allowedUnits: string[]) => (value: T) => { invalidUnits: { allowedUnits: string; }; } | null" + ], + "path": "x-pack/packages/ml/validators/validators.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/ml-validators", + "id": "def-common.memoryInputValidator.$1", + "type": "Array", + "tags": [], + "label": "allowedUnits", + "description": [ + "Allowed units for the memory input." + ], + "signature": [ + "string[]" + ], + "path": "x-pack/packages/ml/validators/validators.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "A validator function that checks if the value is a valid memory input." + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/ml-validators", + "id": "def-common.patternValidator", + "type": "Function", + "tags": [], + "label": "patternValidator", + "description": [ + "\nFactory that provides a validator function for checking against pattern." + ], + "signature": [ + "(pattern: RegExp) => (value: string) => { pattern: { matchPattern: string; }; } | null" + ], + "path": "x-pack/packages/ml/validators/validators.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/ml-validators", + "id": "def-common.patternValidator.$1", + "type": "Object", + "tags": [], + "label": "pattern", + "description": [ + "Pattern to check against." + ], + "signature": [ + "RegExp" + ], + "path": "x-pack/packages/ml/validators/validators.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "A validator function that checks if the value matches the pattern." + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/ml-validators", + "id": "def-common.requiredValidator", + "type": "Function", + "tags": [], + "label": "requiredValidator", + "description": [ + "\nFactory to create a required validator function." + ], + "signature": [ + "() => (value: T) => { required: boolean; } | null" + ], + "path": "x-pack/packages/ml/validators/validators.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [ + "A validator function that checks if the value is empty." + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/ml-validators", + "id": "def-common.timeIntervalInputValidator", + "type": "Function", + "tags": [], + "label": "timeIntervalInputValidator", + "description": [ + "\nFactory for creating a time interval input validator function.\n" + ], + "signature": [ + "() => (value: string) => { invalidTimeInterval: boolean; } | null" + ], + "path": "x-pack/packages/ml/validators/validators.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [ + "A validator function that checks if the value is a valid time interval." + ], + "initialIsOpen": false + } + ], + "interfaces": [ + { + "parentPluginId": "@kbn/ml-validators", + "id": "def-common.CalloutMessage", + "type": "Interface", + "tags": [], + "label": "CalloutMessage", + "description": [ + "\nInterface for a callout message." + ], + "path": "x-pack/packages/ml/validators/constants.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/ml-validators", + "id": "def-common.CalloutMessage.id", + "type": "string", + "tags": [], + "label": "id", + "description": [ + "\nUnique identifier for the callout message." + ], + "path": "x-pack/packages/ml/validators/constants.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ml-validators", + "id": "def-common.CalloutMessage.heading", + "type": "string", + "tags": [], + "label": "heading", + "description": [ + "\nHeading of the callout message." + ], + "path": "x-pack/packages/ml/validators/constants.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ml-validators", + "id": "def-common.CalloutMessage.status", + "type": "Enum", + "tags": [], + "label": "status", + "description": [ + "\nStatus of the callout message." + ], + "signature": [ + { + "pluginId": "@kbn/ml-validators", + "scope": "common", + "docId": "kibKbnMlValidatorsPluginApi", + "section": "def-common.VALIDATION_STATUS", + "text": "VALIDATION_STATUS" + } + ], + "path": "x-pack/packages/ml/validators/constants.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ml-validators", + "id": "def-common.CalloutMessage.text", + "type": "string", + "tags": [], + "label": "text", + "description": [ + "\nText of the callout message." + ], + "path": "x-pack/packages/ml/validators/constants.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ml-validators", + "id": "def-common.CalloutMessage.url", + "type": "string", + "tags": [], + "label": "url", + "description": [ + "\nOptional URL for the callout message." + ], + "signature": [ + "string | undefined" + ], + "path": "x-pack/packages/ml/validators/constants.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + } + ], + "enums": [ + { + "parentPluginId": "@kbn/ml-validators", + "id": "def-common.VALIDATION_STATUS", + "type": "Enum", + "tags": [], + "label": "VALIDATION_STATUS", + "description": [ + "\nEnum for the validation status." + ], + "path": "x-pack/packages/ml/validators/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "misc": [ + { + "parentPluginId": "@kbn/ml-validators", + "id": "def-common.ALL_CATEGORIES", + "type": "number", + "tags": [], + "label": "ALL_CATEGORIES", + "description": [ + "\nConst for all categories." + ], + "signature": [ + "-1" + ], + "path": "x-pack/packages/ml/validators/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/ml-validators", + "id": "def-common.ALLOWED_DATA_UNITS", + "type": "Array", + "tags": [], + "label": "ALLOWED_DATA_UNITS", + "description": [ + "\nConst for allowed data units." + ], + "signature": [ + "string[]" + ], + "path": "x-pack/packages/ml/validators/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/ml-validators", + "id": "def-common.FRACTION_EMPTY_LIMIT", + "type": "number", + "tags": [], + "label": "FRACTION_EMPTY_LIMIT", + "description": [ + "\nConst for the fraction empty limit." + ], + "signature": [ + "0.3" + ], + "path": "x-pack/packages/ml/validators/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/ml-validators", + "id": "def-common.INCLUDED_FIELDS_THRESHOLD", + "type": "number", + "tags": [], + "label": "INCLUDED_FIELDS_THRESHOLD", + "description": [ + "\nConst for the threshold of included fields." + ], + "signature": [ + "100" + ], + "path": "x-pack/packages/ml/validators/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/ml-validators", + "id": "def-common.JOB_ID_MAX_LENGTH", + "type": "number", + "tags": [], + "label": "JOB_ID_MAX_LENGTH", + "description": [ + "\nConst for the maximum length of a job ID." + ], + "signature": [ + "64" + ], + "path": "x-pack/packages/ml/validators/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/ml-validators", + "id": "def-common.MemoryInputValidatorResult", + "type": "Type", + "tags": [], + "label": "MemoryInputValidatorResult", + "description": [ + "\nType for the result of a memory input validation." + ], + "signature": [ + "{ invalidUnits: { allowedUnits: string; }; } | null" + ], + "path": "x-pack/packages/ml/validators/validators.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/ml-validators", + "id": "def-common.MINIMUM_NUM_FIELD_FOR_CHECK", + "type": "number", + "tags": [], + "label": "MINIMUM_NUM_FIELD_FOR_CHECK", + "description": [ + "\nConst for the minimum number of fields for check." + ], + "signature": [ + "25" + ], + "path": "x-pack/packages/ml/validators/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/ml-validators", + "id": "def-common.NUM_CATEGORIES_THRESHOLD", + "type": "number", + "tags": [], + "label": "NUM_CATEGORIES_THRESHOLD", + "description": [ + "\nConst for the maximum length of categories." + ], + "signature": [ + "10" + ], + "path": "x-pack/packages/ml/validators/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/ml-validators", + "id": "def-common.SKIP_BUCKET_SPAN_ESTIMATION", + "type": "boolean", + "tags": [], + "label": "SKIP_BUCKET_SPAN_ESTIMATION", + "description": [ + "\nBoolean const for skipping the bucket span estimation." + ], + "signature": [ + "true" + ], + "path": "x-pack/packages/ml/validators/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/ml-validators", + "id": "def-common.TRAINING_DOCS_LOWER", + "type": "number", + "tags": [], + "label": "TRAINING_DOCS_LOWER", + "description": [ + "\nConst for the lower limit of training documents." + ], + "signature": [ + "200" + ], + "path": "x-pack/packages/ml/validators/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/ml-validators", + "id": "def-common.TRAINING_DOCS_UPPER", + "type": "number", + "tags": [], + "label": "TRAINING_DOCS_UPPER", + "description": [ + "\nConst for the upper limit of training documents." + ], + "signature": [ + "200000" + ], + "path": "x-pack/packages/ml/validators/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/ml-validators", + "id": "def-common.ValidateAnalyticsJobResponse", + "type": "Type", + "tags": [], + "label": "ValidateAnalyticsJobResponse", + "description": [ + "\nType for the response of the validate analytics job API." + ], + "signature": [ + { + "pluginId": "@kbn/ml-validators", + "scope": "common", + "docId": "kibKbnMlValidatorsPluginApi", + "section": "def-common.CalloutMessage", + "text": "CalloutMessage" + }, + "[]" + ], + "path": "x-pack/packages/ml/validators/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/kbn_ml_validators.mdx b/api_docs/kbn_ml_validators.mdx new file mode 100644 index 0000000000000..7157c32a5741d --- /dev/null +++ b/api_docs/kbn_ml_validators.mdx @@ -0,0 +1,39 @@ +--- +#### +#### This document is auto-generated and is meant to be viewed inside our experimental, new docs system. +#### Reach out in #docs-engineering for more info. +#### +id: kibKbnMlValidatorsPluginApi +slug: /kibana-dev-docs/api/kbn-ml-validators +title: "@kbn/ml-validators" +image: https://source.unsplash.com/400x175/?github +description: API docs for the @kbn/ml-validators plugin +date: 2024-09-25 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-validators'] +--- +import kbnMlValidatorsObj from './kbn_ml_validators.devdocs.json'; + + + +Contact [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 32 | 0 | 0 | 0 | + +## Common + +### Functions + + +### Interfaces + + +### Enums + + +### Consts, variables and types + + diff --git a/api_docs/kbn_mock_idp_utils.mdx b/api_docs/kbn_mock_idp_utils.mdx index 626f33e40318b..f1ff61ff4af47 100644 --- a/api_docs/kbn_mock_idp_utils.mdx +++ b/api_docs/kbn_mock_idp_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mock-idp-utils title: "@kbn/mock-idp-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mock-idp-utils plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/mock-idp-utils'] --- import kbnMockIdpUtilsObj from './kbn_mock_idp_utils.devdocs.json'; diff --git a/api_docs/kbn_monaco.mdx b/api_docs/kbn_monaco.mdx index 967b9dc9b0a5f..604d149994cc7 100644 --- a/api_docs/kbn_monaco.mdx +++ b/api_docs/kbn_monaco.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-monaco title: "@kbn/monaco" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/monaco plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/monaco'] --- import kbnMonacoObj from './kbn_monaco.devdocs.json'; diff --git a/api_docs/kbn_object_versioning.mdx b/api_docs/kbn_object_versioning.mdx index 3951f8e7a0410..25ab491caf883 100644 --- a/api_docs/kbn_object_versioning.mdx +++ b/api_docs/kbn_object_versioning.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-object-versioning title: "@kbn/object-versioning" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/object-versioning plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/object-versioning'] --- import kbnObjectVersioningObj from './kbn_object_versioning.devdocs.json'; diff --git a/api_docs/kbn_object_versioning_utils.mdx b/api_docs/kbn_object_versioning_utils.mdx index 3217a9f73542b..b7841d415c897 100644 --- a/api_docs/kbn_object_versioning_utils.mdx +++ b/api_docs/kbn_object_versioning_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-object-versioning-utils title: "@kbn/object-versioning-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/object-versioning-utils plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/object-versioning-utils'] --- import kbnObjectVersioningUtilsObj from './kbn_object_versioning_utils.devdocs.json'; diff --git a/api_docs/kbn_observability_alert_details.mdx b/api_docs/kbn_observability_alert_details.mdx index 2b4e94b45cfa3..a004a5637339b 100644 --- a/api_docs/kbn_observability_alert_details.mdx +++ b/api_docs/kbn_observability_alert_details.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alert-details title: "@kbn/observability-alert-details" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alert-details plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alert-details'] --- import kbnObservabilityAlertDetailsObj from './kbn_observability_alert_details.devdocs.json'; diff --git a/api_docs/kbn_observability_alerting_rule_utils.mdx b/api_docs/kbn_observability_alerting_rule_utils.mdx index dd36cbc2aa500..9191f383f3c4f 100644 --- a/api_docs/kbn_observability_alerting_rule_utils.mdx +++ b/api_docs/kbn_observability_alerting_rule_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alerting-rule-utils title: "@kbn/observability-alerting-rule-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alerting-rule-utils plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alerting-rule-utils'] --- import kbnObservabilityAlertingRuleUtilsObj from './kbn_observability_alerting_rule_utils.devdocs.json'; diff --git a/api_docs/kbn_observability_alerting_test_data.mdx b/api_docs/kbn_observability_alerting_test_data.mdx index 560d2ee996014..0dc435a25f032 100644 --- a/api_docs/kbn_observability_alerting_test_data.mdx +++ b/api_docs/kbn_observability_alerting_test_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alerting-test-data title: "@kbn/observability-alerting-test-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alerting-test-data plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alerting-test-data'] --- import kbnObservabilityAlertingTestDataObj from './kbn_observability_alerting_test_data.devdocs.json'; diff --git a/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx b/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx index a1bba7021a37e..07c727f952ccc 100644 --- a/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx +++ b/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-get-padded-alert-time-range-util title: "@kbn/observability-get-padded-alert-time-range-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-get-padded-alert-time-range-util plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-get-padded-alert-time-range-util'] --- import kbnObservabilityGetPaddedAlertTimeRangeUtilObj from './kbn_observability_get_padded_alert_time_range_util.devdocs.json'; diff --git a/api_docs/kbn_openapi_bundler.mdx b/api_docs/kbn_openapi_bundler.mdx index 5ade1ce96ac66..d110b75e10492 100644 --- a/api_docs/kbn_openapi_bundler.mdx +++ b/api_docs/kbn_openapi_bundler.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-openapi-bundler title: "@kbn/openapi-bundler" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/openapi-bundler plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/openapi-bundler'] --- import kbnOpenapiBundlerObj from './kbn_openapi_bundler.devdocs.json'; diff --git a/api_docs/kbn_openapi_generator.mdx b/api_docs/kbn_openapi_generator.mdx index 71e36a7054d43..e6af7d5062c32 100644 --- a/api_docs/kbn_openapi_generator.mdx +++ b/api_docs/kbn_openapi_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-openapi-generator title: "@kbn/openapi-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/openapi-generator plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/openapi-generator'] --- import kbnOpenapiGeneratorObj from './kbn_openapi_generator.devdocs.json'; diff --git a/api_docs/kbn_optimizer.mdx b/api_docs/kbn_optimizer.mdx index 9dd0338036648..088260e074c33 100644 --- a/api_docs/kbn_optimizer.mdx +++ b/api_docs/kbn_optimizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer title: "@kbn/optimizer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/optimizer'] --- import kbnOptimizerObj from './kbn_optimizer.devdocs.json'; diff --git a/api_docs/kbn_optimizer_webpack_helpers.mdx b/api_docs/kbn_optimizer_webpack_helpers.mdx index c61c32e1d4d76..1be011c5b83ec 100644 --- a/api_docs/kbn_optimizer_webpack_helpers.mdx +++ b/api_docs/kbn_optimizer_webpack_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer-webpack-helpers title: "@kbn/optimizer-webpack-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer-webpack-helpers plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/optimizer-webpack-helpers'] --- import kbnOptimizerWebpackHelpersObj from './kbn_optimizer_webpack_helpers.devdocs.json'; diff --git a/api_docs/kbn_osquery_io_ts_types.mdx b/api_docs/kbn_osquery_io_ts_types.mdx index 783c3e9fdebe1..062ab80c42dd1 100644 --- a/api_docs/kbn_osquery_io_ts_types.mdx +++ b/api_docs/kbn_osquery_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-osquery-io-ts-types title: "@kbn/osquery-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/osquery-io-ts-types plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/osquery-io-ts-types'] --- import kbnOsqueryIoTsTypesObj from './kbn_osquery_io_ts_types.devdocs.json'; diff --git a/api_docs/kbn_panel_loader.mdx b/api_docs/kbn_panel_loader.mdx index f84e89b2cd9e8..60c95666ba464 100644 --- a/api_docs/kbn_panel_loader.mdx +++ b/api_docs/kbn_panel_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-panel-loader title: "@kbn/panel-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/panel-loader plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/panel-loader'] --- import kbnPanelLoaderObj from './kbn_panel_loader.devdocs.json'; diff --git a/api_docs/kbn_performance_testing_dataset_extractor.mdx b/api_docs/kbn_performance_testing_dataset_extractor.mdx index 74f0ba2a3e699..8af4e8f5559ea 100644 --- a/api_docs/kbn_performance_testing_dataset_extractor.mdx +++ b/api_docs/kbn_performance_testing_dataset_extractor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-performance-testing-dataset-extractor title: "@kbn/performance-testing-dataset-extractor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/performance-testing-dataset-extractor plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/performance-testing-dataset-extractor'] --- import kbnPerformanceTestingDatasetExtractorObj from './kbn_performance_testing_dataset_extractor.devdocs.json'; diff --git a/api_docs/kbn_plugin_check.mdx b/api_docs/kbn_plugin_check.mdx index 96938025d5f12..17a0df71fc4ab 100644 --- a/api_docs/kbn_plugin_check.mdx +++ b/api_docs/kbn_plugin_check.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-check title: "@kbn/plugin-check" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-check plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-check'] --- import kbnPluginCheckObj from './kbn_plugin_check.devdocs.json'; diff --git a/api_docs/kbn_plugin_generator.mdx b/api_docs/kbn_plugin_generator.mdx index a2b4440e01cd9..12c7441b99190 100644 --- a/api_docs/kbn_plugin_generator.mdx +++ b/api_docs/kbn_plugin_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-generator title: "@kbn/plugin-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-generator plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-generator'] --- import kbnPluginGeneratorObj from './kbn_plugin_generator.devdocs.json'; diff --git a/api_docs/kbn_plugin_helpers.mdx b/api_docs/kbn_plugin_helpers.mdx index e8a5d612921f8..b55cf52da5079 100644 --- a/api_docs/kbn_plugin_helpers.mdx +++ b/api_docs/kbn_plugin_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-helpers title: "@kbn/plugin-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-helpers plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-helpers'] --- import kbnPluginHelpersObj from './kbn_plugin_helpers.devdocs.json'; diff --git a/api_docs/kbn_presentation_containers.mdx b/api_docs/kbn_presentation_containers.mdx index 093268d1c5e48..2294ed8e99ee4 100644 --- a/api_docs/kbn_presentation_containers.mdx +++ b/api_docs/kbn_presentation_containers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-presentation-containers title: "@kbn/presentation-containers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/presentation-containers plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-containers'] --- import kbnPresentationContainersObj from './kbn_presentation_containers.devdocs.json'; diff --git a/api_docs/kbn_presentation_publishing.mdx b/api_docs/kbn_presentation_publishing.mdx index e52d6723bc59e..6b91b30a5fcb6 100644 --- a/api_docs/kbn_presentation_publishing.mdx +++ b/api_docs/kbn_presentation_publishing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-presentation-publishing title: "@kbn/presentation-publishing" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/presentation-publishing plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-publishing'] --- import kbnPresentationPublishingObj from './kbn_presentation_publishing.devdocs.json'; diff --git a/api_docs/kbn_profiling_utils.mdx b/api_docs/kbn_profiling_utils.mdx index f1526632ac998..9441f3580ac1a 100644 --- a/api_docs/kbn_profiling_utils.mdx +++ b/api_docs/kbn_profiling_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-profiling-utils title: "@kbn/profiling-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/profiling-utils plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/profiling-utils'] --- import kbnProfilingUtilsObj from './kbn_profiling_utils.devdocs.json'; diff --git a/api_docs/kbn_random_sampling.mdx b/api_docs/kbn_random_sampling.mdx index c5c501bbd0468..73af2429c6b7d 100644 --- a/api_docs/kbn_random_sampling.mdx +++ b/api_docs/kbn_random_sampling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-random-sampling title: "@kbn/random-sampling" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/random-sampling plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/random-sampling'] --- import kbnRandomSamplingObj from './kbn_random_sampling.devdocs.json'; diff --git a/api_docs/kbn_react_field.mdx b/api_docs/kbn_react_field.mdx index 43507c21c5d55..5644f6ab872ae 100644 --- a/api_docs/kbn_react_field.mdx +++ b/api_docs/kbn_react_field.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-field title: "@kbn/react-field" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-field plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field'] --- import kbnReactFieldObj from './kbn_react_field.devdocs.json'; diff --git a/api_docs/kbn_react_hooks.mdx b/api_docs/kbn_react_hooks.mdx index 7a025fb416b72..2e9b324ce0ced 100644 --- a/api_docs/kbn_react_hooks.mdx +++ b/api_docs/kbn_react_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-hooks title: "@kbn/react-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-hooks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-hooks'] --- import kbnReactHooksObj from './kbn_react_hooks.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_common.mdx b/api_docs/kbn_react_kibana_context_common.mdx index 3d5f558bfcdc3..0e604133214ab 100644 --- a/api_docs/kbn_react_kibana_context_common.mdx +++ b/api_docs/kbn_react_kibana_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-common title: "@kbn/react-kibana-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-common plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-common'] --- import kbnReactKibanaContextCommonObj from './kbn_react_kibana_context_common.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_render.mdx b/api_docs/kbn_react_kibana_context_render.mdx index 6a4070152d7b2..82841f8c0b3a4 100644 --- a/api_docs/kbn_react_kibana_context_render.mdx +++ b/api_docs/kbn_react_kibana_context_render.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-render title: "@kbn/react-kibana-context-render" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-render plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-render'] --- import kbnReactKibanaContextRenderObj from './kbn_react_kibana_context_render.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_root.mdx b/api_docs/kbn_react_kibana_context_root.mdx index 17427b1839000..581499fc0db22 100644 --- a/api_docs/kbn_react_kibana_context_root.mdx +++ b/api_docs/kbn_react_kibana_context_root.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-root title: "@kbn/react-kibana-context-root" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-root plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-root'] --- import kbnReactKibanaContextRootObj from './kbn_react_kibana_context_root.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_styled.mdx b/api_docs/kbn_react_kibana_context_styled.mdx index c14c49f13bf2c..a774c12606d0f 100644 --- a/api_docs/kbn_react_kibana_context_styled.mdx +++ b/api_docs/kbn_react_kibana_context_styled.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-styled title: "@kbn/react-kibana-context-styled" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-styled plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-styled'] --- import kbnReactKibanaContextStyledObj from './kbn_react_kibana_context_styled.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_theme.mdx b/api_docs/kbn_react_kibana_context_theme.mdx index b43391865cd14..94f31c7cedad2 100644 --- a/api_docs/kbn_react_kibana_context_theme.mdx +++ b/api_docs/kbn_react_kibana_context_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-theme title: "@kbn/react-kibana-context-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-theme plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-theme'] --- import kbnReactKibanaContextThemeObj from './kbn_react_kibana_context_theme.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_mount.mdx b/api_docs/kbn_react_kibana_mount.mdx index b28ede79412b5..b6808d27a44e3 100644 --- a/api_docs/kbn_react_kibana_mount.mdx +++ b/api_docs/kbn_react_kibana_mount.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-mount title: "@kbn/react-kibana-mount" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-mount plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-mount'] --- import kbnReactKibanaMountObj from './kbn_react_kibana_mount.devdocs.json'; diff --git a/api_docs/kbn_recently_accessed.mdx b/api_docs/kbn_recently_accessed.mdx index 013f293e89ad0..2a7b4c976490c 100644 --- a/api_docs/kbn_recently_accessed.mdx +++ b/api_docs/kbn_recently_accessed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-recently-accessed title: "@kbn/recently-accessed" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/recently-accessed plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/recently-accessed'] --- import kbnRecentlyAccessedObj from './kbn_recently_accessed.devdocs.json'; diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx index 330d2abdb797e..1a298b3ddbd09 100644 --- a/api_docs/kbn_repo_file_maps.mdx +++ b/api_docs/kbn_repo_file_maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-file-maps title: "@kbn/repo-file-maps" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-file-maps plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-file-maps'] --- import kbnRepoFileMapsObj from './kbn_repo_file_maps.devdocs.json'; diff --git a/api_docs/kbn_repo_linter.mdx b/api_docs/kbn_repo_linter.mdx index 007dbefecd0d2..7de8b4f3fe4ac 100644 --- a/api_docs/kbn_repo_linter.mdx +++ b/api_docs/kbn_repo_linter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-linter title: "@kbn/repo-linter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-linter plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-linter'] --- import kbnRepoLinterObj from './kbn_repo_linter.devdocs.json'; diff --git a/api_docs/kbn_repo_path.mdx b/api_docs/kbn_repo_path.mdx index 308a7ef29bb0e..f1b969cc34550 100644 --- a/api_docs/kbn_repo_path.mdx +++ b/api_docs/kbn_repo_path.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-path title: "@kbn/repo-path" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-path plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-path'] --- import kbnRepoPathObj from './kbn_repo_path.devdocs.json'; diff --git a/api_docs/kbn_repo_source_classifier.mdx b/api_docs/kbn_repo_source_classifier.mdx index e29c251a102fd..07d6cd45eff05 100644 --- a/api_docs/kbn_repo_source_classifier.mdx +++ b/api_docs/kbn_repo_source_classifier.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-source-classifier title: "@kbn/repo-source-classifier" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-source-classifier plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-source-classifier'] --- import kbnRepoSourceClassifierObj from './kbn_repo_source_classifier.devdocs.json'; diff --git a/api_docs/kbn_reporting_common.mdx b/api_docs/kbn_reporting_common.mdx index 625fd8b8e6244..668824236c55e 100644 --- a/api_docs/kbn_reporting_common.mdx +++ b/api_docs/kbn_reporting_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-common title: "@kbn/reporting-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-common plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-common'] --- import kbnReportingCommonObj from './kbn_reporting_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_csv_share_panel.mdx b/api_docs/kbn_reporting_csv_share_panel.mdx index d066ae0847f95..5c93ee8b37dca 100644 --- a/api_docs/kbn_reporting_csv_share_panel.mdx +++ b/api_docs/kbn_reporting_csv_share_panel.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-csv-share-panel title: "@kbn/reporting-csv-share-panel" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-csv-share-panel plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-csv-share-panel'] --- import kbnReportingCsvSharePanelObj from './kbn_reporting_csv_share_panel.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_csv.mdx b/api_docs/kbn_reporting_export_types_csv.mdx index db072fbe60154..c7675a2a9bf8e 100644 --- a/api_docs/kbn_reporting_export_types_csv.mdx +++ b/api_docs/kbn_reporting_export_types_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-csv title: "@kbn/reporting-export-types-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-csv plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-csv'] --- import kbnReportingExportTypesCsvObj from './kbn_reporting_export_types_csv.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_csv_common.mdx b/api_docs/kbn_reporting_export_types_csv_common.mdx index 22b8aa3f81a79..1ff319ca95a16 100644 --- a/api_docs/kbn_reporting_export_types_csv_common.mdx +++ b/api_docs/kbn_reporting_export_types_csv_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-csv-common title: "@kbn/reporting-export-types-csv-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-csv-common plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-csv-common'] --- import kbnReportingExportTypesCsvCommonObj from './kbn_reporting_export_types_csv_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_pdf.mdx b/api_docs/kbn_reporting_export_types_pdf.mdx index 93d7aa50342ac..c914c581c1ee5 100644 --- a/api_docs/kbn_reporting_export_types_pdf.mdx +++ b/api_docs/kbn_reporting_export_types_pdf.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-pdf title: "@kbn/reporting-export-types-pdf" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-pdf plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-pdf'] --- import kbnReportingExportTypesPdfObj from './kbn_reporting_export_types_pdf.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_pdf_common.mdx b/api_docs/kbn_reporting_export_types_pdf_common.mdx index 4ab3a75890cd4..13012768c17cd 100644 --- a/api_docs/kbn_reporting_export_types_pdf_common.mdx +++ b/api_docs/kbn_reporting_export_types_pdf_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-pdf-common title: "@kbn/reporting-export-types-pdf-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-pdf-common plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-pdf-common'] --- import kbnReportingExportTypesPdfCommonObj from './kbn_reporting_export_types_pdf_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_png.mdx b/api_docs/kbn_reporting_export_types_png.mdx index a8d72e96ab6df..fbc3d220f498f 100644 --- a/api_docs/kbn_reporting_export_types_png.mdx +++ b/api_docs/kbn_reporting_export_types_png.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-png title: "@kbn/reporting-export-types-png" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-png plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-png'] --- import kbnReportingExportTypesPngObj from './kbn_reporting_export_types_png.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_png_common.mdx b/api_docs/kbn_reporting_export_types_png_common.mdx index 5f62347638c95..b11ebfcabb99a 100644 --- a/api_docs/kbn_reporting_export_types_png_common.mdx +++ b/api_docs/kbn_reporting_export_types_png_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-png-common title: "@kbn/reporting-export-types-png-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-png-common plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-png-common'] --- import kbnReportingExportTypesPngCommonObj from './kbn_reporting_export_types_png_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_mocks_server.mdx b/api_docs/kbn_reporting_mocks_server.mdx index 35dc2dcc5021e..6c7c4e2ee29d6 100644 --- a/api_docs/kbn_reporting_mocks_server.mdx +++ b/api_docs/kbn_reporting_mocks_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-mocks-server title: "@kbn/reporting-mocks-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-mocks-server plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-mocks-server'] --- import kbnReportingMocksServerObj from './kbn_reporting_mocks_server.devdocs.json'; diff --git a/api_docs/kbn_reporting_public.mdx b/api_docs/kbn_reporting_public.mdx index d6e176f90971d..00c2156223eb8 100644 --- a/api_docs/kbn_reporting_public.mdx +++ b/api_docs/kbn_reporting_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-public title: "@kbn/reporting-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-public plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-public'] --- import kbnReportingPublicObj from './kbn_reporting_public.devdocs.json'; diff --git a/api_docs/kbn_reporting_server.mdx b/api_docs/kbn_reporting_server.mdx index c5839b6e455fa..bf0e07fe2fd98 100644 --- a/api_docs/kbn_reporting_server.mdx +++ b/api_docs/kbn_reporting_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-server title: "@kbn/reporting-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-server plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-server'] --- import kbnReportingServerObj from './kbn_reporting_server.devdocs.json'; diff --git a/api_docs/kbn_resizable_layout.mdx b/api_docs/kbn_resizable_layout.mdx index b73272d3ee342..85ce79d3a68e0 100644 --- a/api_docs/kbn_resizable_layout.mdx +++ b/api_docs/kbn_resizable_layout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-resizable-layout title: "@kbn/resizable-layout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/resizable-layout plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/resizable-layout'] --- import kbnResizableLayoutObj from './kbn_resizable_layout.devdocs.json'; diff --git a/api_docs/kbn_response_ops_feature_flag_service.mdx b/api_docs/kbn_response_ops_feature_flag_service.mdx index b11bce7147c35..0cd3acbe03bb1 100644 --- a/api_docs/kbn_response_ops_feature_flag_service.mdx +++ b/api_docs/kbn_response_ops_feature_flag_service.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-response-ops-feature-flag-service title: "@kbn/response-ops-feature-flag-service" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/response-ops-feature-flag-service plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/response-ops-feature-flag-service'] --- import kbnResponseOpsFeatureFlagServiceObj from './kbn_response_ops_feature_flag_service.devdocs.json'; diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx index 5847166a54698..fb7982606875a 100644 --- a/api_docs/kbn_rison.mdx +++ b/api_docs/kbn_rison.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rison title: "@kbn/rison" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rison plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_rollup.mdx b/api_docs/kbn_rollup.mdx index 5ba66ef55d0e4..377b79f7f964f 100644 --- a/api_docs/kbn_rollup.mdx +++ b/api_docs/kbn_rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rollup title: "@kbn/rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rollup plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rollup'] --- import kbnRollupObj from './kbn_rollup.devdocs.json'; diff --git a/api_docs/kbn_router_to_openapispec.mdx b/api_docs/kbn_router_to_openapispec.mdx index ca2d2c607866a..4b8ae4d4b14e4 100644 --- a/api_docs/kbn_router_to_openapispec.mdx +++ b/api_docs/kbn_router_to_openapispec.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-router-to-openapispec title: "@kbn/router-to-openapispec" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/router-to-openapispec plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/router-to-openapispec'] --- import kbnRouterToOpenapispecObj from './kbn_router_to_openapispec.devdocs.json'; diff --git a/api_docs/kbn_router_utils.mdx b/api_docs/kbn_router_utils.mdx index 9f7088a41f727..89617194b15e5 100644 --- a/api_docs/kbn_router_utils.mdx +++ b/api_docs/kbn_router_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-router-utils title: "@kbn/router-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/router-utils plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/router-utils'] --- import kbnRouterUtilsObj from './kbn_router_utils.devdocs.json'; diff --git a/api_docs/kbn_rrule.mdx b/api_docs/kbn_rrule.mdx index 761e219f44a45..545b6b4abf281 100644 --- a/api_docs/kbn_rrule.mdx +++ b/api_docs/kbn_rrule.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rrule title: "@kbn/rrule" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rrule plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rrule'] --- import kbnRruleObj from './kbn_rrule.devdocs.json'; diff --git a/api_docs/kbn_rule_data_utils.mdx b/api_docs/kbn_rule_data_utils.mdx index dd294080f2912..ff1e828a8a43f 100644 --- a/api_docs/kbn_rule_data_utils.mdx +++ b/api_docs/kbn_rule_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rule-data-utils title: "@kbn/rule-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rule-data-utils plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rule-data-utils'] --- import kbnRuleDataUtilsObj from './kbn_rule_data_utils.devdocs.json'; diff --git a/api_docs/kbn_saved_objects_settings.mdx b/api_docs/kbn_saved_objects_settings.mdx index d0264c0a1256d..25504818f9033 100644 --- a/api_docs/kbn_saved_objects_settings.mdx +++ b/api_docs/kbn_saved_objects_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-saved-objects-settings title: "@kbn/saved-objects-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/saved-objects-settings plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/saved-objects-settings'] --- import kbnSavedObjectsSettingsObj from './kbn_saved_objects_settings.devdocs.json'; diff --git a/api_docs/kbn_screenshotting_server.mdx b/api_docs/kbn_screenshotting_server.mdx index d534f1b236dec..c13282bfde765 100644 --- a/api_docs/kbn_screenshotting_server.mdx +++ b/api_docs/kbn_screenshotting_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-screenshotting-server title: "@kbn/screenshotting-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/screenshotting-server plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/screenshotting-server'] --- import kbnScreenshottingServerObj from './kbn_screenshotting_server.devdocs.json'; diff --git a/api_docs/kbn_search_api_panels.mdx b/api_docs/kbn_search_api_panels.mdx index bdbb8230ef336..8e7297a1c7090 100644 --- a/api_docs/kbn_search_api_panels.mdx +++ b/api_docs/kbn_search_api_panels.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-api-panels title: "@kbn/search-api-panels" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-api-panels plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-api-panels'] --- import kbnSearchApiPanelsObj from './kbn_search_api_panels.devdocs.json'; diff --git a/api_docs/kbn_search_connectors.mdx b/api_docs/kbn_search_connectors.mdx index 0bc67b9ff7ba5..3f89c5a0bf160 100644 --- a/api_docs/kbn_search_connectors.mdx +++ b/api_docs/kbn_search_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-connectors title: "@kbn/search-connectors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-connectors plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-connectors'] --- import kbnSearchConnectorsObj from './kbn_search_connectors.devdocs.json'; diff --git a/api_docs/kbn_search_errors.mdx b/api_docs/kbn_search_errors.mdx index d89cc987031b7..a10a16c127752 100644 --- a/api_docs/kbn_search_errors.mdx +++ b/api_docs/kbn_search_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-errors title: "@kbn/search-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-errors plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-errors'] --- import kbnSearchErrorsObj from './kbn_search_errors.devdocs.json'; diff --git a/api_docs/kbn_search_index_documents.mdx b/api_docs/kbn_search_index_documents.mdx index a9d521133f4be..604602ce88350 100644 --- a/api_docs/kbn_search_index_documents.mdx +++ b/api_docs/kbn_search_index_documents.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-index-documents title: "@kbn/search-index-documents" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-index-documents plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-index-documents'] --- import kbnSearchIndexDocumentsObj from './kbn_search_index_documents.devdocs.json'; diff --git a/api_docs/kbn_search_response_warnings.mdx b/api_docs/kbn_search_response_warnings.mdx index 9c44887a59fac..f27628e6dff31 100644 --- a/api_docs/kbn_search_response_warnings.mdx +++ b/api_docs/kbn_search_response_warnings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-response-warnings title: "@kbn/search-response-warnings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-response-warnings plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-response-warnings'] --- import kbnSearchResponseWarningsObj from './kbn_search_response_warnings.devdocs.json'; diff --git a/api_docs/kbn_search_types.mdx b/api_docs/kbn_search_types.mdx index d1ff681fd4f44..5c99036f639b8 100644 --- a/api_docs/kbn_search_types.mdx +++ b/api_docs/kbn_search_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-types title: "@kbn/search-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-types plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-types'] --- import kbnSearchTypesObj from './kbn_search_types.devdocs.json'; diff --git a/api_docs/kbn_security_api_key_management.mdx b/api_docs/kbn_security_api_key_management.mdx index 430201c3823e9..b117a8ab5a4f2 100644 --- a/api_docs/kbn_security_api_key_management.mdx +++ b/api_docs/kbn_security_api_key_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-api-key-management title: "@kbn/security-api-key-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-api-key-management plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-api-key-management'] --- import kbnSecurityApiKeyManagementObj from './kbn_security_api_key_management.devdocs.json'; diff --git a/api_docs/kbn_security_authorization_core.mdx b/api_docs/kbn_security_authorization_core.mdx index 551b7cb7e2ed7..649ea0c396373 100644 --- a/api_docs/kbn_security_authorization_core.mdx +++ b/api_docs/kbn_security_authorization_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-authorization-core title: "@kbn/security-authorization-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-authorization-core plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-authorization-core'] --- import kbnSecurityAuthorizationCoreObj from './kbn_security_authorization_core.devdocs.json'; diff --git a/api_docs/kbn_security_form_components.mdx b/api_docs/kbn_security_form_components.mdx index b977eb5c6b07f..96d5366e4ecb6 100644 --- a/api_docs/kbn_security_form_components.mdx +++ b/api_docs/kbn_security_form_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-form-components title: "@kbn/security-form-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-form-components plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-form-components'] --- import kbnSecurityFormComponentsObj from './kbn_security_form_components.devdocs.json'; diff --git a/api_docs/kbn_security_hardening.mdx b/api_docs/kbn_security_hardening.mdx index 93d97b71a654d..53a4abab602b7 100644 --- a/api_docs/kbn_security_hardening.mdx +++ b/api_docs/kbn_security_hardening.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-hardening title: "@kbn/security-hardening" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-hardening plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-hardening'] --- import kbnSecurityHardeningObj from './kbn_security_hardening.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_common.mdx b/api_docs/kbn_security_plugin_types_common.mdx index 907803e38525b..93cba3d0b435c 100644 --- a/api_docs/kbn_security_plugin_types_common.mdx +++ b/api_docs/kbn_security_plugin_types_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-common title: "@kbn/security-plugin-types-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-common plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-common'] --- import kbnSecurityPluginTypesCommonObj from './kbn_security_plugin_types_common.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_public.devdocs.json b/api_docs/kbn_security_plugin_types_public.devdocs.json index 3dee61c995c96..bd68a41ab5e36 100644 --- a/api_docs/kbn_security_plugin_types_public.devdocs.json +++ b/api_docs/kbn_security_plugin_types_public.devdocs.json @@ -207,6 +207,97 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/security-plugin-types-public", + "id": "def-public.BulkUpdatePayload", + "type": "Interface", + "tags": [], + "label": "BulkUpdatePayload", + "description": [], + "path": "x-pack/packages/security/plugin_types_public/src/roles/roles_api_client.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-plugin-types-public", + "id": "def-public.BulkUpdatePayload.rolesUpdate", + "type": "Array", + "tags": [], + "label": "rolesUpdate", + "description": [], + "signature": [ + { + "pluginId": "@kbn/security-plugin-types-common", + "scope": "common", + "docId": "kibKbnSecurityPluginTypesCommonPluginApi", + "section": "def-common.Role", + "text": "Role" + }, + "[]" + ], + "path": "x-pack/packages/security/plugin_types_public/src/roles/roles_api_client.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/security-plugin-types-public", + "id": "def-public.BulkUpdateRoleResponse", + "type": "Interface", + "tags": [], + "label": "BulkUpdateRoleResponse", + "description": [], + "path": "x-pack/packages/security/plugin_types_public/src/roles/roles_api_client.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-plugin-types-public", + "id": "def-public.BulkUpdateRoleResponse.created", + "type": "Array", + "tags": [], + "label": "created", + "description": [], + "signature": [ + "string[] | undefined" + ], + "path": "x-pack/packages/security/plugin_types_public/src/roles/roles_api_client.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/security-plugin-types-public", + "id": "def-public.BulkUpdateRoleResponse.updated", + "type": "Array", + "tags": [], + "label": "updated", + "description": [], + "signature": [ + "string[] | undefined" + ], + "path": "x-pack/packages/security/plugin_types_public/src/roles/roles_api_client.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/security-plugin-types-public", + "id": "def-public.BulkUpdateRoleResponse.errors", + "type": "Object", + "tags": [], + "label": "errors", + "description": [], + "signature": [ + "Record | undefined" + ], + "path": "x-pack/packages/security/plugin_types_public/src/roles/roles_api_client.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/security-plugin-types-public", "id": "def-public.GetUserProfileResponse", @@ -514,6 +605,60 @@ } ], "returnComment": [] + }, + { + "parentPluginId": "@kbn/security-plugin-types-public", + "id": "def-public.RolesAPIClient.bulkUpdateRoles", + "type": "Function", + "tags": [], + "label": "bulkUpdateRoles", + "description": [], + "signature": [ + "(payload: ", + { + "pluginId": "@kbn/security-plugin-types-public", + "scope": "public", + "docId": "kibKbnSecurityPluginTypesPublicPluginApi", + "section": "def-public.BulkUpdatePayload", + "text": "BulkUpdatePayload" + }, + ") => Promise<", + { + "pluginId": "@kbn/security-plugin-types-public", + "scope": "public", + "docId": "kibKbnSecurityPluginTypesPublicPluginApi", + "section": "def-public.BulkUpdateRoleResponse", + "text": "BulkUpdateRoleResponse" + }, + ">" + ], + "path": "x-pack/packages/security/plugin_types_public/src/roles/roles_api_client.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-plugin-types-public", + "id": "def-public.RolesAPIClient.bulkUpdateRoles.$1", + "type": "Object", + "tags": [], + "label": "payload", + "description": [], + "signature": [ + { + "pluginId": "@kbn/security-plugin-types-public", + "scope": "public", + "docId": "kibKbnSecurityPluginTypesPublicPluginApi", + "section": "def-public.BulkUpdatePayload", + "text": "BulkUpdatePayload" + } + ], + "path": "x-pack/packages/security/plugin_types_public/src/roles/roles_api_client.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] } ], "initialIsOpen": false diff --git a/api_docs/kbn_security_plugin_types_public.mdx b/api_docs/kbn_security_plugin_types_public.mdx index 226d97fb685e4..28319a4c6ec6d 100644 --- a/api_docs/kbn_security_plugin_types_public.mdx +++ b/api_docs/kbn_security_plugin_types_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-public title: "@kbn/security-plugin-types-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-public plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-public'] --- import kbnSecurityPluginTypesPublicObj from './kbn_security_plugin_types_public.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana- | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 58 | 0 | 31 | 0 | +| 66 | 0 | 39 | 0 | ## Client diff --git a/api_docs/kbn_security_plugin_types_server.mdx b/api_docs/kbn_security_plugin_types_server.mdx index 4c98ea2d4ba89..d01f5165a5381 100644 --- a/api_docs/kbn_security_plugin_types_server.mdx +++ b/api_docs/kbn_security_plugin_types_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-server title: "@kbn/security-plugin-types-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-server plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-server'] --- import kbnSecurityPluginTypesServerObj from './kbn_security_plugin_types_server.devdocs.json'; diff --git a/api_docs/kbn_security_role_management_model.mdx b/api_docs/kbn_security_role_management_model.mdx index 73a5349592f9f..95b9132327276 100644 --- a/api_docs/kbn_security_role_management_model.mdx +++ b/api_docs/kbn_security_role_management_model.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-role-management-model title: "@kbn/security-role-management-model" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-role-management-model plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-role-management-model'] --- import kbnSecurityRoleManagementModelObj from './kbn_security_role_management_model.devdocs.json'; diff --git a/api_docs/kbn_security_solution_common.mdx b/api_docs/kbn_security_solution_common.mdx index 2d1be761995a4..a696ee2b56278 100644 --- a/api_docs/kbn_security_solution_common.mdx +++ b/api_docs/kbn_security_solution_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-common title: "@kbn/security-solution-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-common plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-common'] --- import kbnSecuritySolutionCommonObj from './kbn_security_solution_common.devdocs.json'; diff --git a/api_docs/kbn_security_solution_distribution_bar.mdx b/api_docs/kbn_security_solution_distribution_bar.mdx index 8503aa5d74388..66789d7c46d82 100644 --- a/api_docs/kbn_security_solution_distribution_bar.mdx +++ b/api_docs/kbn_security_solution_distribution_bar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-distribution-bar title: "@kbn/security-solution-distribution-bar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-distribution-bar plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-distribution-bar'] --- import kbnSecuritySolutionDistributionBarObj from './kbn_security_solution_distribution_bar.devdocs.json'; diff --git a/api_docs/kbn_security_solution_features.mdx b/api_docs/kbn_security_solution_features.mdx index ccfa1fa9d7d13..cec1627e51170 100644 --- a/api_docs/kbn_security_solution_features.mdx +++ b/api_docs/kbn_security_solution_features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-features title: "@kbn/security-solution-features" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-features plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-features'] --- import kbnSecuritySolutionFeaturesObj from './kbn_security_solution_features.devdocs.json'; diff --git a/api_docs/kbn_security_solution_navigation.mdx b/api_docs/kbn_security_solution_navigation.mdx index fe03fe3b0e13a..5c361f591377f 100644 --- a/api_docs/kbn_security_solution_navigation.mdx +++ b/api_docs/kbn_security_solution_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-navigation title: "@kbn/security-solution-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-navigation plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-navigation'] --- import kbnSecuritySolutionNavigationObj from './kbn_security_solution_navigation.devdocs.json'; diff --git a/api_docs/kbn_security_solution_side_nav.mdx b/api_docs/kbn_security_solution_side_nav.mdx index d4dc7d870615b..ebb7472ecbcdb 100644 --- a/api_docs/kbn_security_solution_side_nav.mdx +++ b/api_docs/kbn_security_solution_side_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-side-nav title: "@kbn/security-solution-side-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-side-nav plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-side-nav'] --- import kbnSecuritySolutionSideNavObj from './kbn_security_solution_side_nav.devdocs.json'; diff --git a/api_docs/kbn_security_solution_storybook_config.mdx b/api_docs/kbn_security_solution_storybook_config.mdx index 4c9e135f87832..39f1edc1ccb5d 100644 --- a/api_docs/kbn_security_solution_storybook_config.mdx +++ b/api_docs/kbn_security_solution_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-storybook-config title: "@kbn/security-solution-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-storybook-config plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-storybook-config'] --- import kbnSecuritySolutionStorybookConfigObj from './kbn_security_solution_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_security_ui_components.devdocs.json b/api_docs/kbn_security_ui_components.devdocs.json index 9a0cd5098d114..20238b9a4bcc4 100644 --- a/api_docs/kbn_security_ui_components.devdocs.json +++ b/api_docs/kbn_security_ui_components.devdocs.json @@ -71,6 +71,17 @@ "path": "x-pack/packages/security/ui_components/src/kibana_privilege_table/feature_table.tsx", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "@kbn/security-ui-components", + "id": "def-common.FeatureTable.defaultProps.showTitle", + "type": "boolean", + "tags": [], + "label": "showTitle", + "description": [], + "path": "x-pack/packages/security/ui_components/src/kibana_privilege_table/feature_table.tsx", + "deprecated": false, + "trackAdoption": false } ] }, diff --git a/api_docs/kbn_security_ui_components.mdx b/api_docs/kbn_security_ui_components.mdx index e83036d5ab054..87fcba07bdca2 100644 --- a/api_docs/kbn_security_ui_components.mdx +++ b/api_docs/kbn_security_ui_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-ui-components title: "@kbn/security-ui-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-ui-components plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-ui-components'] --- import kbnSecurityUiComponentsObj from './kbn_security_ui_components.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana- | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 47 | 0 | 12 | 0 | +| 48 | 0 | 13 | 0 | ## Common diff --git a/api_docs/kbn_securitysolution_autocomplete.mdx b/api_docs/kbn_securitysolution_autocomplete.mdx index 833aeb7ad7fbb..bb400a005cbbe 100644 --- a/api_docs/kbn_securitysolution_autocomplete.mdx +++ b/api_docs/kbn_securitysolution_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-autocomplete title: "@kbn/securitysolution-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-autocomplete plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-autocomplete'] --- import kbnSecuritysolutionAutocompleteObj from './kbn_securitysolution_autocomplete.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_data_table.mdx b/api_docs/kbn_securitysolution_data_table.mdx index 8ba7ec8de8e0e..13190b552438e 100644 --- a/api_docs/kbn_securitysolution_data_table.mdx +++ b/api_docs/kbn_securitysolution_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-data-table title: "@kbn/securitysolution-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-data-table plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-data-table'] --- import kbnSecuritysolutionDataTableObj from './kbn_securitysolution_data_table.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_ecs.mdx b/api_docs/kbn_securitysolution_ecs.mdx index 498e5e5fed3bf..e3e3add556d3c 100644 --- a/api_docs/kbn_securitysolution_ecs.mdx +++ b/api_docs/kbn_securitysolution_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-ecs title: "@kbn/securitysolution-ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-ecs plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-ecs'] --- import kbnSecuritysolutionEcsObj from './kbn_securitysolution_ecs.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_es_utils.mdx b/api_docs/kbn_securitysolution_es_utils.mdx index 531a468db9243..5c54f4b148bb6 100644 --- a/api_docs/kbn_securitysolution_es_utils.mdx +++ b/api_docs/kbn_securitysolution_es_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-es-utils title: "@kbn/securitysolution-es-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-es-utils plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-es-utils'] --- import kbnSecuritysolutionEsUtilsObj from './kbn_securitysolution_es_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_exception_list_components.mdx b/api_docs/kbn_securitysolution_exception_list_components.mdx index 686633330f022..ee1d9e9f5b571 100644 --- a/api_docs/kbn_securitysolution_exception_list_components.mdx +++ b/api_docs/kbn_securitysolution_exception_list_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-exception-list-components title: "@kbn/securitysolution-exception-list-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-exception-list-components plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-exception-list-components'] --- import kbnSecuritysolutionExceptionListComponentsObj from './kbn_securitysolution_exception_list_components.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx index 9fc84aa46b2b4..9b0a12c260a5e 100644 --- a/api_docs/kbn_securitysolution_hook_utils.mdx +++ b/api_docs/kbn_securitysolution_hook_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-hook-utils title: "@kbn/securitysolution-hook-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-hook-utils plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-hook-utils'] --- import kbnSecuritysolutionHookUtilsObj from './kbn_securitysolution_hook_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx index ef945a4a42ca1..a843ea9007a72 100644 --- a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-alerting-types title: "@kbn/securitysolution-io-ts-alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-alerting-types plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-alerting-types'] --- import kbnSecuritysolutionIoTsAlertingTypesObj from './kbn_securitysolution_io_ts_alerting_types.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_list_types.mdx b/api_docs/kbn_securitysolution_io_ts_list_types.mdx index 318a63cc4d18d..28fd22bdae45d 100644 --- a/api_docs/kbn_securitysolution_io_ts_list_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_list_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-list-types title: "@kbn/securitysolution-io-ts-list-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-list-types plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-list-types'] --- import kbnSecuritysolutionIoTsListTypesObj from './kbn_securitysolution_io_ts_list_types.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_types.mdx b/api_docs/kbn_securitysolution_io_ts_types.mdx index 36736d13b18d3..93e44b0c3d399 100644 --- a/api_docs/kbn_securitysolution_io_ts_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-types title: "@kbn/securitysolution-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-types plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-types'] --- import kbnSecuritysolutionIoTsTypesObj from './kbn_securitysolution_io_ts_types.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_utils.mdx b/api_docs/kbn_securitysolution_io_ts_utils.mdx index 1f9321708acd7..67a8cdacde930 100644 --- a/api_docs/kbn_securitysolution_io_ts_utils.mdx +++ b/api_docs/kbn_securitysolution_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-utils title: "@kbn/securitysolution-io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-utils plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-utils'] --- import kbnSecuritysolutionIoTsUtilsObj from './kbn_securitysolution_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_api.mdx b/api_docs/kbn_securitysolution_list_api.mdx index c56286a1cf17a..479323db2c9a3 100644 --- a/api_docs/kbn_securitysolution_list_api.mdx +++ b/api_docs/kbn_securitysolution_list_api.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-api title: "@kbn/securitysolution-list-api" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-api plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-api'] --- import kbnSecuritysolutionListApiObj from './kbn_securitysolution_list_api.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_constants.devdocs.json b/api_docs/kbn_securitysolution_list_constants.devdocs.json index e1069bb51c152..0723d3a24ca19 100644 --- a/api_docs/kbn_securitysolution_list_constants.devdocs.json +++ b/api_docs/kbn_securitysolution_list_constants.devdocs.json @@ -75,18 +75,6 @@ "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/public/management/pages/blocklist/constants.ts" }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/management/pages/blocklist/services/blocklists_api_client.ts" - }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/management/pages/blocklist/services/blocklists_api_client.ts" - }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/management/pages/blocklist/services/blocklists_api_client.ts" - }, { "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/public/management/pages/policy/view/policy_hooks.ts" @@ -259,18 +247,6 @@ "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/public/management/pages/event_filters/service/service_actions.ts" }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/management/pages/event_filters/service/api_client.ts" - }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/management/pages/event_filters/service/api_client.ts" - }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/management/pages/event_filters/service/api_client.ts" - }, { "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/public/management/pages/policy/view/policy_hooks.ts" @@ -451,18 +427,6 @@ "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/public/management/pages/host_isolation_exceptions/constants.ts" }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/management/pages/host_isolation_exceptions/host_isolation_exceptions_api_client.ts" - }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/management/pages/host_isolation_exceptions/host_isolation_exceptions_api_client.ts" - }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/management/pages/host_isolation_exceptions/host_isolation_exceptions_api_client.ts" - }, { "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/server/endpoint/lib/artifacts/lists.ts" @@ -752,18 +716,6 @@ "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/public/management/pages/trusted_apps/constants.ts" }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/management/pages/trusted_apps/service/api_client.ts" - }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/management/pages/trusted_apps/service/api_client.ts" - }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/management/pages/trusted_apps/service/api_client.ts" - }, { "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/public/management/pages/policy/view/policy_hooks.ts" diff --git a/api_docs/kbn_securitysolution_list_constants.mdx b/api_docs/kbn_securitysolution_list_constants.mdx index a3f01236e42be..65e245cdf720c 100644 --- a/api_docs/kbn_securitysolution_list_constants.mdx +++ b/api_docs/kbn_securitysolution_list_constants.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-constants title: "@kbn/securitysolution-list-constants" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-constants plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-constants'] --- import kbnSecuritysolutionListConstantsObj from './kbn_securitysolution_list_constants.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_hooks.mdx b/api_docs/kbn_securitysolution_list_hooks.mdx index 773e1daec362c..1f869b1a66dfc 100644 --- a/api_docs/kbn_securitysolution_list_hooks.mdx +++ b/api_docs/kbn_securitysolution_list_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-hooks title: "@kbn/securitysolution-list-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-hooks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-hooks'] --- import kbnSecuritysolutionListHooksObj from './kbn_securitysolution_list_hooks.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_utils.mdx b/api_docs/kbn_securitysolution_list_utils.mdx index bf31df6242884..4947988cd0523 100644 --- a/api_docs/kbn_securitysolution_list_utils.mdx +++ b/api_docs/kbn_securitysolution_list_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-utils title: "@kbn/securitysolution-list-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-utils plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-utils'] --- import kbnSecuritysolutionListUtilsObj from './kbn_securitysolution_list_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_rules.mdx b/api_docs/kbn_securitysolution_rules.mdx index b5c2c0ab5d945..8d16efd97f382 100644 --- a/api_docs/kbn_securitysolution_rules.mdx +++ b/api_docs/kbn_securitysolution_rules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-rules title: "@kbn/securitysolution-rules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-rules plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-rules'] --- import kbnSecuritysolutionRulesObj from './kbn_securitysolution_rules.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_t_grid.mdx b/api_docs/kbn_securitysolution_t_grid.mdx index 749914a01e6d7..779331289f069 100644 --- a/api_docs/kbn_securitysolution_t_grid.mdx +++ b/api_docs/kbn_securitysolution_t_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-t-grid title: "@kbn/securitysolution-t-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-t-grid plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-t-grid'] --- import kbnSecuritysolutionTGridObj from './kbn_securitysolution_t_grid.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_utils.mdx b/api_docs/kbn_securitysolution_utils.mdx index 6079071cfb138..ce4a347986b19 100644 --- a/api_docs/kbn_securitysolution_utils.mdx +++ b/api_docs/kbn_securitysolution_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-utils title: "@kbn/securitysolution-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-utils plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-utils'] --- import kbnSecuritysolutionUtilsObj from './kbn_securitysolution_utils.devdocs.json'; diff --git a/api_docs/kbn_server_http_tools.mdx b/api_docs/kbn_server_http_tools.mdx index 9396d7c2232e2..1d7c0dc1afb13 100644 --- a/api_docs/kbn_server_http_tools.mdx +++ b/api_docs/kbn_server_http_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-http-tools title: "@kbn/server-http-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-http-tools plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-http-tools'] --- import kbnServerHttpToolsObj from './kbn_server_http_tools.devdocs.json'; diff --git a/api_docs/kbn_server_route_repository.mdx b/api_docs/kbn_server_route_repository.mdx index b44dc646e392e..606ece565d9e2 100644 --- a/api_docs/kbn_server_route_repository.mdx +++ b/api_docs/kbn_server_route_repository.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository title: "@kbn/server-route-repository" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository'] --- import kbnServerRouteRepositoryObj from './kbn_server_route_repository.devdocs.json'; diff --git a/api_docs/kbn_server_route_repository_client.mdx b/api_docs/kbn_server_route_repository_client.mdx index 0add7375192b1..f5efd4f9dd7eb 100644 --- a/api_docs/kbn_server_route_repository_client.mdx +++ b/api_docs/kbn_server_route_repository_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository-client title: "@kbn/server-route-repository-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository-client plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository-client'] --- import kbnServerRouteRepositoryClientObj from './kbn_server_route_repository_client.devdocs.json'; diff --git a/api_docs/kbn_server_route_repository_utils.mdx b/api_docs/kbn_server_route_repository_utils.mdx index d1debbddaca93..f5e6634a2a7a9 100644 --- a/api_docs/kbn_server_route_repository_utils.mdx +++ b/api_docs/kbn_server_route_repository_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository-utils title: "@kbn/server-route-repository-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository-utils plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository-utils'] --- import kbnServerRouteRepositoryUtilsObj from './kbn_server_route_repository_utils.devdocs.json'; diff --git a/api_docs/kbn_serverless_common_settings.mdx b/api_docs/kbn_serverless_common_settings.mdx index e400e245a5666..ec22b1eeffd2a 100644 --- a/api_docs/kbn_serverless_common_settings.mdx +++ b/api_docs/kbn_serverless_common_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-common-settings title: "@kbn/serverless-common-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-common-settings plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-common-settings'] --- import kbnServerlessCommonSettingsObj from './kbn_serverless_common_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_observability_settings.mdx b/api_docs/kbn_serverless_observability_settings.mdx index 69e176fcb4826..e29ec127a3097 100644 --- a/api_docs/kbn_serverless_observability_settings.mdx +++ b/api_docs/kbn_serverless_observability_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-observability-settings title: "@kbn/serverless-observability-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-observability-settings plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-observability-settings'] --- import kbnServerlessObservabilitySettingsObj from './kbn_serverless_observability_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_project_switcher.mdx b/api_docs/kbn_serverless_project_switcher.mdx index 63bf5abb87465..140e5cabc6452 100644 --- a/api_docs/kbn_serverless_project_switcher.mdx +++ b/api_docs/kbn_serverless_project_switcher.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-project-switcher title: "@kbn/serverless-project-switcher" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-project-switcher plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-project-switcher'] --- import kbnServerlessProjectSwitcherObj from './kbn_serverless_project_switcher.devdocs.json'; diff --git a/api_docs/kbn_serverless_search_settings.mdx b/api_docs/kbn_serverless_search_settings.mdx index 88d04b09705c6..228071878d311 100644 --- a/api_docs/kbn_serverless_search_settings.mdx +++ b/api_docs/kbn_serverless_search_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-search-settings title: "@kbn/serverless-search-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-search-settings plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-search-settings'] --- import kbnServerlessSearchSettingsObj from './kbn_serverless_search_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_security_settings.mdx b/api_docs/kbn_serverless_security_settings.mdx index e1e55d16279c3..68f679bcc3a7c 100644 --- a/api_docs/kbn_serverless_security_settings.mdx +++ b/api_docs/kbn_serverless_security_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-security-settings title: "@kbn/serverless-security-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-security-settings plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-security-settings'] --- import kbnServerlessSecuritySettingsObj from './kbn_serverless_security_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_storybook_config.mdx b/api_docs/kbn_serverless_storybook_config.mdx index 49c01eff9f08b..27af1fca08fe9 100644 --- a/api_docs/kbn_serverless_storybook_config.mdx +++ b/api_docs/kbn_serverless_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-storybook-config title: "@kbn/serverless-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-storybook-config plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-storybook-config'] --- import kbnServerlessStorybookConfigObj from './kbn_serverless_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_shared_svg.mdx b/api_docs/kbn_shared_svg.mdx index 08a357609c485..ea3ba510a8fbf 100644 --- a/api_docs/kbn_shared_svg.mdx +++ b/api_docs/kbn_shared_svg.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-svg title: "@kbn/shared-svg" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-svg plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-svg'] --- import kbnSharedSvgObj from './kbn_shared_svg.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_avatar_solution.mdx b/api_docs/kbn_shared_ux_avatar_solution.mdx index fb3eaac8e1e27..edf5dd44b3e62 100644 --- a/api_docs/kbn_shared_ux_avatar_solution.mdx +++ b/api_docs/kbn_shared_ux_avatar_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-solution title: "@kbn/shared-ux-avatar-solution" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-solution plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-solution'] --- import kbnSharedUxAvatarSolutionObj from './kbn_shared_ux_avatar_solution.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx index de3cc1de65686..63b5d1b016c8a 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen title: "@kbn/shared-ux-button-exit-full-screen" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen'] --- import kbnSharedUxButtonExitFullScreenObj from './kbn_shared_ux_button_exit_full_screen.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_toolbar.mdx b/api_docs/kbn_shared_ux_button_toolbar.mdx index ea3a14ecee95e..07020e3c5754e 100644 --- a/api_docs/kbn_shared_ux_button_toolbar.mdx +++ b/api_docs/kbn_shared_ux_button_toolbar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-toolbar title: "@kbn/shared-ux-button-toolbar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-toolbar plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-toolbar'] --- import kbnSharedUxButtonToolbarObj from './kbn_shared_ux_button_toolbar.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_card_no_data.mdx b/api_docs/kbn_shared_ux_card_no_data.mdx index 2c885efc3b477..ab444a042ab68 100644 --- a/api_docs/kbn_shared_ux_card_no_data.mdx +++ b/api_docs/kbn_shared_ux_card_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data title: "@kbn/shared-ux-card-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-card-no-data'] --- import kbnSharedUxCardNoDataObj from './kbn_shared_ux_card_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx index 17cc3985df693..e06619a2d2219 100644 --- a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data-mocks title: "@kbn/shared-ux-card-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-card-no-data-mocks'] --- import kbnSharedUxCardNoDataMocksObj from './kbn_shared_ux_card_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_chrome_navigation.devdocs.json b/api_docs/kbn_shared_ux_chrome_navigation.devdocs.json index 5d4477ab0e5b6..08f97d756a027 100644 --- a/api_docs/kbn_shared_ux_chrome_navigation.devdocs.json +++ b/api_docs/kbn_shared_ux_chrome_navigation.devdocs.json @@ -212,7 +212,25 @@ }, "[]>; }; sideNav: { getIsCollapsed$: () => ", "Observable", - "; }; }; http: { basePath: ", + "; getPanelSelectedNode$: () => ", + "Observable", + "<", + { + "pluginId": "@kbn/core-chrome-browser", + "scope": "public", + "docId": "kibKbnCoreChromeBrowserPluginApi", + "section": "def-public.PanelSelectedNode", + "text": "PanelSelectedNode" + }, + " | null>; setPanelSelectedNode(node: string | ", + { + "pluginId": "@kbn/core-chrome-browser", + "scope": "public", + "docId": "kibKbnCoreChromeBrowserPluginApi", + "section": "def-public.PanelSelectedNode", + "text": "PanelSelectedNode" + }, + " | null): void; }; }; http: { basePath: ", "BasePathService", "; getLoadingCount$(): ", "Observable", @@ -413,6 +431,74 @@ "path": "packages/shared-ux/chrome/navigation/src/types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "@kbn/shared-ux-chrome-navigation", + "id": "def-public.NavigationServices.selectedPanelNode", + "type": "CompoundType", + "tags": [], + "label": "selectedPanelNode", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-chrome-browser", + "scope": "public", + "docId": "kibKbnCoreChromeBrowserPluginApi", + "section": "def-public.PanelSelectedNode", + "text": "PanelSelectedNode" + }, + " | null | undefined" + ], + "path": "packages/shared-ux/chrome/navigation/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/shared-ux-chrome-navigation", + "id": "def-public.NavigationServices.setSelectedPanelNode", + "type": "Function", + "tags": [], + "label": "setSelectedPanelNode", + "description": [], + "signature": [ + "((node: ", + { + "pluginId": "@kbn/core-chrome-browser", + "scope": "public", + "docId": "kibKbnCoreChromeBrowserPluginApi", + "section": "def-public.PanelSelectedNode", + "text": "PanelSelectedNode" + }, + " | null) => void) | undefined" + ], + "path": "packages/shared-ux/chrome/navigation/src/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/shared-ux-chrome-navigation", + "id": "def-public.NavigationServices.setSelectedPanelNode.$1", + "type": "CompoundType", + "tags": [], + "label": "node", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-chrome-browser", + "scope": "public", + "docId": "kibKbnCoreChromeBrowserPluginApi", + "section": "def-public.PanelSelectedNode", + "text": "PanelSelectedNode" + }, + " | null" + ], + "path": "packages/shared-ux/chrome/navigation/src/types.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [] } ], "initialIsOpen": false diff --git a/api_docs/kbn_shared_ux_chrome_navigation.mdx b/api_docs/kbn_shared_ux_chrome_navigation.mdx index 2fe86f20afe94..7787863df63cc 100644 --- a/api_docs/kbn_shared_ux_chrome_navigation.mdx +++ b/api_docs/kbn_shared_ux_chrome_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-chrome-navigation title: "@kbn/shared-ux-chrome-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-chrome-navigation plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-chrome-navigation'] --- import kbnSharedUxChromeNavigationObj from './kbn_shared_ux_chrome_navigation.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sh | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 35 | 0 | 26 | 2 | +| 38 | 0 | 29 | 2 | ## Client diff --git a/api_docs/kbn_shared_ux_error_boundary.mdx b/api_docs/kbn_shared_ux_error_boundary.mdx index 8a6ea5e7d5e1a..2a74ecbb9b9c5 100644 --- a/api_docs/kbn_shared_ux_error_boundary.mdx +++ b/api_docs/kbn_shared_ux_error_boundary.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-error-boundary title: "@kbn/shared-ux-error-boundary" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-error-boundary plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-error-boundary'] --- import kbnSharedUxErrorBoundaryObj from './kbn_shared_ux_error_boundary.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_context.mdx b/api_docs/kbn_shared_ux_file_context.mdx index 1f3d3787e97b3..c1ecea252c0eb 100644 --- a/api_docs/kbn_shared_ux_file_context.mdx +++ b/api_docs/kbn_shared_ux_file_context.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-context title: "@kbn/shared-ux-file-context" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-context plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-context'] --- import kbnSharedUxFileContextObj from './kbn_shared_ux_file_context.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_image.mdx b/api_docs/kbn_shared_ux_file_image.mdx index d7c5702615c03..69441b82c9282 100644 --- a/api_docs/kbn_shared_ux_file_image.mdx +++ b/api_docs/kbn_shared_ux_file_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image title: "@kbn/shared-ux-file-image" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-image'] --- import kbnSharedUxFileImageObj from './kbn_shared_ux_file_image.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_image_mocks.mdx b/api_docs/kbn_shared_ux_file_image_mocks.mdx index 433920e7f2a82..bdae0b5ffa21e 100644 --- a/api_docs/kbn_shared_ux_file_image_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_image_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image-mocks title: "@kbn/shared-ux-file-image-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-image-mocks'] --- import kbnSharedUxFileImageMocksObj from './kbn_shared_ux_file_image_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_mocks.mdx b/api_docs/kbn_shared_ux_file_mocks.mdx index 776c77925ca2c..c8641d2af24cc 100644 --- a/api_docs/kbn_shared_ux_file_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-mocks title: "@kbn/shared-ux-file-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-mocks'] --- import kbnSharedUxFileMocksObj from './kbn_shared_ux_file_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_picker.mdx b/api_docs/kbn_shared_ux_file_picker.mdx index ff85e6cb9ef13..0e667e03e1c8e 100644 --- a/api_docs/kbn_shared_ux_file_picker.mdx +++ b/api_docs/kbn_shared_ux_file_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-picker title: "@kbn/shared-ux-file-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-picker plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-picker'] --- import kbnSharedUxFilePickerObj from './kbn_shared_ux_file_picker.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_types.mdx b/api_docs/kbn_shared_ux_file_types.mdx index c34da905340bf..ad2807203c4ea 100644 --- a/api_docs/kbn_shared_ux_file_types.mdx +++ b/api_docs/kbn_shared_ux_file_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-types title: "@kbn/shared-ux-file-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-types plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-types'] --- import kbnSharedUxFileTypesObj from './kbn_shared_ux_file_types.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_upload.mdx b/api_docs/kbn_shared_ux_file_upload.mdx index 7e2e1d3cdf8be..8146da09eb345 100644 --- a/api_docs/kbn_shared_ux_file_upload.mdx +++ b/api_docs/kbn_shared_ux_file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-upload title: "@kbn/shared-ux-file-upload" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-upload plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-upload'] --- import kbnSharedUxFileUploadObj from './kbn_shared_ux_file_upload.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_util.mdx b/api_docs/kbn_shared_ux_file_util.mdx index 2916508704eed..077d17a9de578 100644 --- a/api_docs/kbn_shared_ux_file_util.mdx +++ b/api_docs/kbn_shared_ux_file_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-util title: "@kbn/shared-ux-file-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-util plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-util'] --- import kbnSharedUxFileUtilObj from './kbn_shared_ux_file_util.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_link_redirect_app.mdx b/api_docs/kbn_shared_ux_link_redirect_app.mdx index 3fb8e93c040f5..75585410c7f24 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app title: "@kbn/shared-ux-link-redirect-app" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-link-redirect-app'] --- import kbnSharedUxLinkRedirectAppObj from './kbn_shared_ux_link_redirect_app.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx index 468a75505fc68..2a1bfd9765b82 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app-mocks title: "@kbn/shared-ux-link-redirect-app-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-link-redirect-app-mocks'] --- import kbnSharedUxLinkRedirectAppMocksObj from './kbn_shared_ux_link_redirect_app_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_markdown.mdx b/api_docs/kbn_shared_ux_markdown.mdx index b7e26e3a325a1..a6e2765366c54 100644 --- a/api_docs/kbn_shared_ux_markdown.mdx +++ b/api_docs/kbn_shared_ux_markdown.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown title: "@kbn/shared-ux-markdown" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-markdown'] --- import kbnSharedUxMarkdownObj from './kbn_shared_ux_markdown.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_markdown_mocks.mdx b/api_docs/kbn_shared_ux_markdown_mocks.mdx index a9af6dd596ee8..6b4bb1b0e4f05 100644 --- a/api_docs/kbn_shared_ux_markdown_mocks.mdx +++ b/api_docs/kbn_shared_ux_markdown_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown-mocks title: "@kbn/shared-ux-markdown-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-markdown-mocks'] --- import kbnSharedUxMarkdownMocksObj from './kbn_shared_ux_markdown_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx index 50ced0c469c6a..d487024e7553c 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data title: "@kbn/shared-ux-page-analytics-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-analytics-no-data'] --- import kbnSharedUxPageAnalyticsNoDataObj from './kbn_shared_ux_page_analytics_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx index 9b0d832459f6a..02573ef498ad0 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data-mocks title: "@kbn/shared-ux-page-analytics-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-analytics-no-data-mocks'] --- import kbnSharedUxPageAnalyticsNoDataMocksObj from './kbn_shared_ux_page_analytics_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx index c6efae402cd7d..ddf857cf27a64 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data title: "@kbn/shared-ux-page-kibana-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-no-data'] --- import kbnSharedUxPageKibanaNoDataObj from './kbn_shared_ux_page_kibana_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx index a610a7d039891..88ed71458f34c 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data-mocks title: "@kbn/shared-ux-page-kibana-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-no-data-mocks'] --- import kbnSharedUxPageKibanaNoDataMocksObj from './kbn_shared_ux_page_kibana_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_template.mdx b/api_docs/kbn_shared_ux_page_kibana_template.mdx index c0e6fc9cce67e..3458d55aeaa70 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template title: "@kbn/shared-ux-page-kibana-template" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-template'] --- import kbnSharedUxPageKibanaTemplateObj from './kbn_shared_ux_page_kibana_template.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx index 15ac61055a3c4..87e74658f7dc3 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template-mocks title: "@kbn/shared-ux-page-kibana-template-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-template-mocks'] --- import kbnSharedUxPageKibanaTemplateMocksObj from './kbn_shared_ux_page_kibana_template_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data.mdx b/api_docs/kbn_shared_ux_page_no_data.mdx index 732e72914177f..6c5e326cf1068 100644 --- a/api_docs/kbn_shared_ux_page_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data title: "@kbn/shared-ux-page-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data'] --- import kbnSharedUxPageNoDataObj from './kbn_shared_ux_page_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data_config.mdx b/api_docs/kbn_shared_ux_page_no_data_config.mdx index 04e01ad524697..0b29cd711e519 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config title: "@kbn/shared-ux-page-no-data-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-config'] --- import kbnSharedUxPageNoDataConfigObj from './kbn_shared_ux_page_no_data_config.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx index fd6efac3677b8..183cbfaf7955c 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config-mocks title: "@kbn/shared-ux-page-no-data-config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-config-mocks'] --- import kbnSharedUxPageNoDataConfigMocksObj from './kbn_shared_ux_page_no_data_config_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx index 640aacf851153..55773ac03c6e1 100644 --- a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-mocks title: "@kbn/shared-ux-page-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-mocks'] --- import kbnSharedUxPageNoDataMocksObj from './kbn_shared_ux_page_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_solution_nav.mdx b/api_docs/kbn_shared_ux_page_solution_nav.mdx index 55da6e727db31..a4f50b8c7eae5 100644 --- a/api_docs/kbn_shared_ux_page_solution_nav.mdx +++ b/api_docs/kbn_shared_ux_page_solution_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-solution-nav title: "@kbn/shared-ux-page-solution-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-solution-nav plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-solution-nav'] --- import kbnSharedUxPageSolutionNavObj from './kbn_shared_ux_page_solution_nav.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx index 3cca1c55c90c1..019d4a585b2d4 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views title: "@kbn/shared-ux-prompt-no-data-views" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-no-data-views'] --- import kbnSharedUxPromptNoDataViewsObj from './kbn_shared_ux_prompt_no_data_views.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx index 013b6710af92b..8dc5f2db50f21 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views-mocks title: "@kbn/shared-ux-prompt-no-data-views-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-no-data-views-mocks'] --- import kbnSharedUxPromptNoDataViewsMocksObj from './kbn_shared_ux_prompt_no_data_views_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_prompt_not_found.mdx b/api_docs/kbn_shared_ux_prompt_not_found.mdx index 1e75b502b6071..7f16f937e3da7 100644 --- a/api_docs/kbn_shared_ux_prompt_not_found.mdx +++ b/api_docs/kbn_shared_ux_prompt_not_found.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-not-found title: "@kbn/shared-ux-prompt-not-found" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-not-found plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-not-found'] --- import kbnSharedUxPromptNotFoundObj from './kbn_shared_ux_prompt_not_found.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_router.mdx b/api_docs/kbn_shared_ux_router.mdx index 7f81a25577314..607dede534344 100644 --- a/api_docs/kbn_shared_ux_router.mdx +++ b/api_docs/kbn_shared_ux_router.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router title: "@kbn/shared-ux-router" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-router'] --- import kbnSharedUxRouterObj from './kbn_shared_ux_router.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_router_mocks.mdx b/api_docs/kbn_shared_ux_router_mocks.mdx index 3df06efe880ef..a6eabefb68a84 100644 --- a/api_docs/kbn_shared_ux_router_mocks.mdx +++ b/api_docs/kbn_shared_ux_router_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router-mocks title: "@kbn/shared-ux-router-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router-mocks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-router-mocks'] --- import kbnSharedUxRouterMocksObj from './kbn_shared_ux_router_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_storybook_config.mdx b/api_docs/kbn_shared_ux_storybook_config.mdx index 0f1819b81ad26..c5af15eb24236 100644 --- a/api_docs/kbn_shared_ux_storybook_config.mdx +++ b/api_docs/kbn_shared_ux_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-config title: "@kbn/shared-ux-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-config plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-config'] --- import kbnSharedUxStorybookConfigObj from './kbn_shared_ux_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_storybook_mock.mdx b/api_docs/kbn_shared_ux_storybook_mock.mdx index 7cae455e6a1e0..4db1d4a4794a6 100644 --- a/api_docs/kbn_shared_ux_storybook_mock.mdx +++ b/api_docs/kbn_shared_ux_storybook_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-mock title: "@kbn/shared-ux-storybook-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-mock plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-mock'] --- import kbnSharedUxStorybookMockObj from './kbn_shared_ux_storybook_mock.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_tabbed_modal.mdx b/api_docs/kbn_shared_ux_tabbed_modal.mdx index af59b63499e6d..a98e6781d3137 100644 --- a/api_docs/kbn_shared_ux_tabbed_modal.mdx +++ b/api_docs/kbn_shared_ux_tabbed_modal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-tabbed-modal title: "@kbn/shared-ux-tabbed-modal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-tabbed-modal plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-tabbed-modal'] --- import kbnSharedUxTabbedModalObj from './kbn_shared_ux_tabbed_modal.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_table_persist.mdx b/api_docs/kbn_shared_ux_table_persist.mdx index 10d777179400b..96fe9b278f473 100644 --- a/api_docs/kbn_shared_ux_table_persist.mdx +++ b/api_docs/kbn_shared_ux_table_persist.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-table-persist title: "@kbn/shared-ux-table-persist" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-table-persist plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-table-persist'] --- import kbnSharedUxTablePersistObj from './kbn_shared_ux_table_persist.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx index 848c4c296e70b..12eb34601ef6a 100644 --- a/api_docs/kbn_shared_ux_utility.mdx +++ b/api_docs/kbn_shared_ux_utility.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-utility title: "@kbn/shared-ux-utility" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-utility plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-utility'] --- import kbnSharedUxUtilityObj from './kbn_shared_ux_utility.devdocs.json'; diff --git a/api_docs/kbn_slo_schema.mdx b/api_docs/kbn_slo_schema.mdx index a234e4cbe481e..dd8b5aabc5d8e 100644 --- a/api_docs/kbn_slo_schema.mdx +++ b/api_docs/kbn_slo_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-slo-schema title: "@kbn/slo-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/slo-schema plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/slo-schema'] --- import kbnSloSchemaObj from './kbn_slo_schema.devdocs.json'; diff --git a/api_docs/kbn_some_dev_log.mdx b/api_docs/kbn_some_dev_log.mdx index fc34df579d514..8b6a4f6dee914 100644 --- a/api_docs/kbn_some_dev_log.mdx +++ b/api_docs/kbn_some_dev_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-some-dev-log title: "@kbn/some-dev-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/some-dev-log plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/some-dev-log'] --- import kbnSomeDevLogObj from './kbn_some_dev_log.devdocs.json'; diff --git a/api_docs/kbn_sort_predicates.mdx b/api_docs/kbn_sort_predicates.mdx index 38c3c1117245e..759f78f8bd20a 100644 --- a/api_docs/kbn_sort_predicates.mdx +++ b/api_docs/kbn_sort_predicates.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sort-predicates title: "@kbn/sort-predicates" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sort-predicates plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sort-predicates'] --- import kbnSortPredicatesObj from './kbn_sort_predicates.devdocs.json'; diff --git a/api_docs/kbn_sse_utils.mdx b/api_docs/kbn_sse_utils.mdx index 0568e570fc1c5..c695355350382 100644 --- a/api_docs/kbn_sse_utils.mdx +++ b/api_docs/kbn_sse_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sse-utils title: "@kbn/sse-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sse-utils plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sse-utils'] --- import kbnSseUtilsObj from './kbn_sse_utils.devdocs.json'; diff --git a/api_docs/kbn_sse_utils_client.mdx b/api_docs/kbn_sse_utils_client.mdx index 40647dd4610de..4206a9b6e2547 100644 --- a/api_docs/kbn_sse_utils_client.mdx +++ b/api_docs/kbn_sse_utils_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sse-utils-client title: "@kbn/sse-utils-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sse-utils-client plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sse-utils-client'] --- import kbnSseUtilsClientObj from './kbn_sse_utils_client.devdocs.json'; diff --git a/api_docs/kbn_sse_utils_server.mdx b/api_docs/kbn_sse_utils_server.mdx index 668403a8ff8d1..543c150d28e85 100644 --- a/api_docs/kbn_sse_utils_server.mdx +++ b/api_docs/kbn_sse_utils_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sse-utils-server title: "@kbn/sse-utils-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sse-utils-server plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sse-utils-server'] --- import kbnSseUtilsServerObj from './kbn_sse_utils_server.devdocs.json'; diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx index e5efc79a74b52..dc58830367035 100644 --- a/api_docs/kbn_std.mdx +++ b/api_docs/kbn_std.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-std title: "@kbn/std" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/std plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/std'] --- import kbnStdObj from './kbn_std.devdocs.json'; diff --git a/api_docs/kbn_stdio_dev_helpers.mdx b/api_docs/kbn_stdio_dev_helpers.mdx index 9404f3632c20a..2328bd2b8b3d1 100644 --- a/api_docs/kbn_stdio_dev_helpers.mdx +++ b/api_docs/kbn_stdio_dev_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-stdio-dev-helpers title: "@kbn/stdio-dev-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/stdio-dev-helpers plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/stdio-dev-helpers'] --- import kbnStdioDevHelpersObj from './kbn_stdio_dev_helpers.devdocs.json'; diff --git a/api_docs/kbn_storybook.mdx b/api_docs/kbn_storybook.mdx index 9e268bfbb941e..e1caf60bed0d5 100644 --- a/api_docs/kbn_storybook.mdx +++ b/api_docs/kbn_storybook.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-storybook title: "@kbn/storybook" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/storybook plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook'] --- import kbnStorybookObj from './kbn_storybook.devdocs.json'; diff --git a/api_docs/kbn_synthetics_e2e.mdx b/api_docs/kbn_synthetics_e2e.mdx index d78169ef551f5..fe5580ce96874 100644 --- a/api_docs/kbn_synthetics_e2e.mdx +++ b/api_docs/kbn_synthetics_e2e.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-synthetics-e2e title: "@kbn/synthetics-e2e" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/synthetics-e2e plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/synthetics-e2e'] --- import kbnSyntheticsE2eObj from './kbn_synthetics_e2e.devdocs.json'; diff --git a/api_docs/kbn_synthetics_private_location.mdx b/api_docs/kbn_synthetics_private_location.mdx index 7fcda51c5d677..59dbf0ad89b52 100644 --- a/api_docs/kbn_synthetics_private_location.mdx +++ b/api_docs/kbn_synthetics_private_location.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-synthetics-private-location title: "@kbn/synthetics-private-location" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/synthetics-private-location plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/synthetics-private-location'] --- import kbnSyntheticsPrivateLocationObj from './kbn_synthetics_private_location.devdocs.json'; diff --git a/api_docs/kbn_telemetry_tools.mdx b/api_docs/kbn_telemetry_tools.mdx index dd053904dfae6..7465ae29ba69a 100644 --- a/api_docs/kbn_telemetry_tools.mdx +++ b/api_docs/kbn_telemetry_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-telemetry-tools title: "@kbn/telemetry-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/telemetry-tools plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/telemetry-tools'] --- import kbnTelemetryToolsObj from './kbn_telemetry_tools.devdocs.json'; diff --git a/api_docs/kbn_test.devdocs.json b/api_docs/kbn_test.devdocs.json index a8df40b09e765..0d76ad2a80c02 100644 --- a/api_docs/kbn_test.devdocs.json +++ b/api_docs/kbn_test.devdocs.json @@ -3313,6 +3313,20 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "@kbn/test", + "id": "def-common.CreateTestEsClusterOptions.esVersion", + "type": "string", + "tags": [], + "label": "esVersion", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-test/src/es/test_es_cluster.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "@kbn/test", "id": "def-common.CreateTestEsClusterOptions.esFrom", diff --git a/api_docs/kbn_test.mdx b/api_docs/kbn_test.mdx index 523844ac6b3db..18f64050540cc 100644 --- a/api_docs/kbn_test.mdx +++ b/api_docs/kbn_test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test title: "@kbn/test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test'] --- import kbnTestObj from './kbn_test.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kiban | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 315 | 4 | 267 | 14 | +| 316 | 4 | 268 | 14 | ## Common diff --git a/api_docs/kbn_test_eui_helpers.mdx b/api_docs/kbn_test_eui_helpers.mdx index 62146c2d53d3f..33aea02fd29e1 100644 --- a/api_docs/kbn_test_eui_helpers.mdx +++ b/api_docs/kbn_test_eui_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-eui-helpers title: "@kbn/test-eui-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-eui-helpers plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-eui-helpers'] --- import kbnTestEuiHelpersObj from './kbn_test_eui_helpers.devdocs.json'; diff --git a/api_docs/kbn_test_jest_helpers.mdx b/api_docs/kbn_test_jest_helpers.mdx index caff33e1682d3..6bc31602f3def 100644 --- a/api_docs/kbn_test_jest_helpers.mdx +++ b/api_docs/kbn_test_jest_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-jest-helpers title: "@kbn/test-jest-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-jest-helpers plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-jest-helpers'] --- import kbnTestJestHelpersObj from './kbn_test_jest_helpers.devdocs.json'; diff --git a/api_docs/kbn_test_subj_selector.mdx b/api_docs/kbn_test_subj_selector.mdx index 5f459edbdc56f..06c5e8b415d57 100644 --- a/api_docs/kbn_test_subj_selector.mdx +++ b/api_docs/kbn_test_subj_selector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-subj-selector title: "@kbn/test-subj-selector" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-subj-selector plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-subj-selector'] --- import kbnTestSubjSelectorObj from './kbn_test_subj_selector.devdocs.json'; diff --git a/api_docs/kbn_timerange.mdx b/api_docs/kbn_timerange.mdx index 6699d6636baf4..60dc7e6ba39b8 100644 --- a/api_docs/kbn_timerange.mdx +++ b/api_docs/kbn_timerange.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-timerange title: "@kbn/timerange" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/timerange plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/timerange'] --- import kbnTimerangeObj from './kbn_timerange.devdocs.json'; diff --git a/api_docs/kbn_tooling_log.mdx b/api_docs/kbn_tooling_log.mdx index 073e449b295de..763aaa959e24c 100644 --- a/api_docs/kbn_tooling_log.mdx +++ b/api_docs/kbn_tooling_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-tooling-log title: "@kbn/tooling-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/tooling-log plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log'] --- import kbnToolingLogObj from './kbn_tooling_log.devdocs.json'; diff --git a/api_docs/kbn_triggers_actions_ui_types.mdx b/api_docs/kbn_triggers_actions_ui_types.mdx index 5849a9efd2b90..58edcd43b8638 100644 --- a/api_docs/kbn_triggers_actions_ui_types.mdx +++ b/api_docs/kbn_triggers_actions_ui_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-triggers-actions-ui-types title: "@kbn/triggers-actions-ui-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/triggers-actions-ui-types plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/triggers-actions-ui-types'] --- import kbnTriggersActionsUiTypesObj from './kbn_triggers_actions_ui_types.devdocs.json'; diff --git a/api_docs/kbn_try_in_console.mdx b/api_docs/kbn_try_in_console.mdx index 69bcf41fd473f..ad7ff1eecba32 100644 --- a/api_docs/kbn_try_in_console.mdx +++ b/api_docs/kbn_try_in_console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-try-in-console title: "@kbn/try-in-console" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/try-in-console plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/try-in-console'] --- import kbnTryInConsoleObj from './kbn_try_in_console.devdocs.json'; diff --git a/api_docs/kbn_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx index 6a054f4a256ea..0dc3c3e4aed34 100644 --- a/api_docs/kbn_ts_projects.mdx +++ b/api_docs/kbn_ts_projects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ts-projects title: "@kbn/ts-projects" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ts-projects plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ts-projects'] --- import kbnTsProjectsObj from './kbn_ts_projects.devdocs.json'; diff --git a/api_docs/kbn_typed_react_router_config.mdx b/api_docs/kbn_typed_react_router_config.mdx index 1ac4cba85ef1c..c3b53d11265e3 100644 --- a/api_docs/kbn_typed_react_router_config.mdx +++ b/api_docs/kbn_typed_react_router_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-typed-react-router-config title: "@kbn/typed-react-router-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/typed-react-router-config plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/typed-react-router-config'] --- import kbnTypedReactRouterConfigObj from './kbn_typed_react_router_config.devdocs.json'; diff --git a/api_docs/kbn_ui_actions_browser.mdx b/api_docs/kbn_ui_actions_browser.mdx index 43a43ac88b405..4ffc8bc2a9d77 100644 --- a/api_docs/kbn_ui_actions_browser.mdx +++ b/api_docs/kbn_ui_actions_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-actions-browser title: "@kbn/ui-actions-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-actions-browser plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-actions-browser'] --- import kbnUiActionsBrowserObj from './kbn_ui_actions_browser.devdocs.json'; diff --git a/api_docs/kbn_ui_shared_deps_src.mdx b/api_docs/kbn_ui_shared_deps_src.mdx index 7f7ec69fed93c..0081b1fd560cc 100644 --- a/api_docs/kbn_ui_shared_deps_src.mdx +++ b/api_docs/kbn_ui_shared_deps_src.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-shared-deps-src title: "@kbn/ui-shared-deps-src" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-shared-deps-src plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-shared-deps-src'] --- import kbnUiSharedDepsSrcObj from './kbn_ui_shared_deps_src.devdocs.json'; diff --git a/api_docs/kbn_ui_theme.mdx b/api_docs/kbn_ui_theme.mdx index 23194ca7186a8..aa19691b417b8 100644 --- a/api_docs/kbn_ui_theme.mdx +++ b/api_docs/kbn_ui_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-theme title: "@kbn/ui-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-theme plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-theme'] --- import kbnUiThemeObj from './kbn_ui_theme.devdocs.json'; diff --git a/api_docs/kbn_unified_data_table.mdx b/api_docs/kbn_unified_data_table.mdx index d2d8042d94608..e24f2743eeae1 100644 --- a/api_docs/kbn_unified_data_table.mdx +++ b/api_docs/kbn_unified_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-data-table title: "@kbn/unified-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-data-table plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-data-table'] --- import kbnUnifiedDataTableObj from './kbn_unified_data_table.devdocs.json'; diff --git a/api_docs/kbn_unified_doc_viewer.mdx b/api_docs/kbn_unified_doc_viewer.mdx index c767f5609cd6e..90e93ac44caee 100644 --- a/api_docs/kbn_unified_doc_viewer.mdx +++ b/api_docs/kbn_unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-doc-viewer title: "@kbn/unified-doc-viewer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-doc-viewer plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-doc-viewer'] --- import kbnUnifiedDocViewerObj from './kbn_unified_doc_viewer.devdocs.json'; diff --git a/api_docs/kbn_unified_field_list.mdx b/api_docs/kbn_unified_field_list.mdx index 15511689dce59..a8a878f0c94c4 100644 --- a/api_docs/kbn_unified_field_list.mdx +++ b/api_docs/kbn_unified_field_list.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-field-list title: "@kbn/unified-field-list" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-field-list plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-field-list'] --- import kbnUnifiedFieldListObj from './kbn_unified_field_list.devdocs.json'; diff --git a/api_docs/kbn_unsaved_changes_badge.mdx b/api_docs/kbn_unsaved_changes_badge.mdx index cc98e7bcf8abd..eb677510b2278 100644 --- a/api_docs/kbn_unsaved_changes_badge.mdx +++ b/api_docs/kbn_unsaved_changes_badge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unsaved-changes-badge title: "@kbn/unsaved-changes-badge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unsaved-changes-badge plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-badge'] --- import kbnUnsavedChangesBadgeObj from './kbn_unsaved_changes_badge.devdocs.json'; diff --git a/api_docs/kbn_unsaved_changes_prompt.mdx b/api_docs/kbn_unsaved_changes_prompt.mdx index 58f68d5fe539a..ecc27a6a23ef3 100644 --- a/api_docs/kbn_unsaved_changes_prompt.mdx +++ b/api_docs/kbn_unsaved_changes_prompt.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unsaved-changes-prompt title: "@kbn/unsaved-changes-prompt" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unsaved-changes-prompt plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-prompt'] --- import kbnUnsavedChangesPromptObj from './kbn_unsaved_changes_prompt.devdocs.json'; diff --git a/api_docs/kbn_use_tracked_promise.mdx b/api_docs/kbn_use_tracked_promise.mdx index 0accc62d598bd..2852989d4d939 100644 --- a/api_docs/kbn_use_tracked_promise.mdx +++ b/api_docs/kbn_use_tracked_promise.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-use-tracked-promise title: "@kbn/use-tracked-promise" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/use-tracked-promise plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/use-tracked-promise'] --- import kbnUseTrackedPromiseObj from './kbn_use_tracked_promise.devdocs.json'; diff --git a/api_docs/kbn_user_profile_components.mdx b/api_docs/kbn_user_profile_components.mdx index c9074c9340112..8b919daf43e9c 100644 --- a/api_docs/kbn_user_profile_components.mdx +++ b/api_docs/kbn_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-user-profile-components title: "@kbn/user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/user-profile-components plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/user-profile-components'] --- import kbnUserProfileComponentsObj from './kbn_user_profile_components.devdocs.json'; diff --git a/api_docs/kbn_utility_types.mdx b/api_docs/kbn_utility_types.mdx index 18de608035626..0aae889a47cbd 100644 --- a/api_docs/kbn_utility_types.mdx +++ b/api_docs/kbn_utility_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types title: "@kbn/utility-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utility-types'] --- import kbnUtilityTypesObj from './kbn_utility_types.devdocs.json'; diff --git a/api_docs/kbn_utility_types_jest.mdx b/api_docs/kbn_utility_types_jest.mdx index ea4d16e397320..1031aa98d2a04 100644 --- a/api_docs/kbn_utility_types_jest.mdx +++ b/api_docs/kbn_utility_types_jest.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types-jest title: "@kbn/utility-types-jest" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types-jest plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utility-types-jest'] --- import kbnUtilityTypesJestObj from './kbn_utility_types_jest.devdocs.json'; diff --git a/api_docs/kbn_utils.mdx b/api_docs/kbn_utils.mdx index d85908c75994d..773d7d7b55333 100644 --- a/api_docs/kbn_utils.mdx +++ b/api_docs/kbn_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utils title: "@kbn/utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utils plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utils'] --- import kbnUtilsObj from './kbn_utils.devdocs.json'; diff --git a/api_docs/kbn_visualization_ui_components.mdx b/api_docs/kbn_visualization_ui_components.mdx index 60e4fa629510e..9a9ac14bc64b7 100644 --- a/api_docs/kbn_visualization_ui_components.mdx +++ b/api_docs/kbn_visualization_ui_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-ui-components title: "@kbn/visualization-ui-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-ui-components plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/visualization-ui-components'] --- import kbnVisualizationUiComponentsObj from './kbn_visualization_ui_components.devdocs.json'; diff --git a/api_docs/kbn_visualization_utils.mdx b/api_docs/kbn_visualization_utils.mdx index 71d386525023e..1e930c3b5bef3 100644 --- a/api_docs/kbn_visualization_utils.mdx +++ b/api_docs/kbn_visualization_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-utils title: "@kbn/visualization-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-utils plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/visualization-utils'] --- import kbnVisualizationUtilsObj from './kbn_visualization_utils.devdocs.json'; diff --git a/api_docs/kbn_xstate_utils.mdx b/api_docs/kbn_xstate_utils.mdx index b3cf6d985e582..36b47ff36526a 100644 --- a/api_docs/kbn_xstate_utils.mdx +++ b/api_docs/kbn_xstate_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-xstate-utils title: "@kbn/xstate-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/xstate-utils plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/xstate-utils'] --- import kbnXstateUtilsObj from './kbn_xstate_utils.devdocs.json'; diff --git a/api_docs/kbn_yarn_lock_validator.mdx b/api_docs/kbn_yarn_lock_validator.mdx index 07d23c127a61d..9f92b24574ad1 100644 --- a/api_docs/kbn_yarn_lock_validator.mdx +++ b/api_docs/kbn_yarn_lock_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-yarn-lock-validator title: "@kbn/yarn-lock-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/yarn-lock-validator plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator'] --- import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json'; diff --git a/api_docs/kbn_zod.mdx b/api_docs/kbn_zod.mdx index a77c60d4644f3..fa0c4d7210a9e 100644 --- a/api_docs/kbn_zod.mdx +++ b/api_docs/kbn_zod.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-zod title: "@kbn/zod" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/zod plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/zod'] --- import kbnZodObj from './kbn_zod.devdocs.json'; diff --git a/api_docs/kbn_zod_helpers.mdx b/api_docs/kbn_zod_helpers.mdx index c76a867b5ee30..7cbed37cacca1 100644 --- a/api_docs/kbn_zod_helpers.mdx +++ b/api_docs/kbn_zod_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-zod-helpers title: "@kbn/zod-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/zod-helpers plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/zod-helpers'] --- import kbnZodHelpersObj from './kbn_zod_helpers.devdocs.json'; diff --git a/api_docs/kibana_overview.mdx b/api_docs/kibana_overview.mdx index 17f937cf9f3e2..7d627135d8e15 100644 --- a/api_docs/kibana_overview.mdx +++ b/api_docs/kibana_overview.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaOverview title: "kibanaOverview" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaOverview plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaOverview'] --- import kibanaOverviewObj from './kibana_overview.devdocs.json'; diff --git a/api_docs/kibana_react.mdx b/api_docs/kibana_react.mdx index 437428377c8b5..28a79c8a162d5 100644 --- a/api_docs/kibana_react.mdx +++ b/api_docs/kibana_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaReact title: "kibanaReact" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaReact plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaReact'] --- import kibanaReactObj from './kibana_react.devdocs.json'; diff --git a/api_docs/kibana_utils.mdx b/api_docs/kibana_utils.mdx index f3e1d6c1412da..0a77f636a6255 100644 --- a/api_docs/kibana_utils.mdx +++ b/api_docs/kibana_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaUtils title: "kibanaUtils" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaUtils plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaUtils'] --- import kibanaUtilsObj from './kibana_utils.devdocs.json'; diff --git a/api_docs/kubernetes_security.mdx b/api_docs/kubernetes_security.mdx index c458665807d59..c97a92882e40a 100644 --- a/api_docs/kubernetes_security.mdx +++ b/api_docs/kubernetes_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kubernetesSecurity title: "kubernetesSecurity" image: https://source.unsplash.com/400x175/?github description: API docs for the kubernetesSecurity plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kubernetesSecurity'] --- import kubernetesSecurityObj from './kubernetes_security.devdocs.json'; diff --git a/api_docs/lens.mdx b/api_docs/lens.mdx index 8fba5488d8c70..3de1aaf2c47f6 100644 --- a/api_docs/lens.mdx +++ b/api_docs/lens.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lens title: "lens" image: https://source.unsplash.com/400x175/?github description: API docs for the lens plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lens'] --- import lensObj from './lens.devdocs.json'; diff --git a/api_docs/license_api_guard.mdx b/api_docs/license_api_guard.mdx index be600342673f0..9fbf23a102cb6 100644 --- a/api_docs/license_api_guard.mdx +++ b/api_docs/license_api_guard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseApiGuard title: "licenseApiGuard" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseApiGuard plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licenseApiGuard'] --- import licenseApiGuardObj from './license_api_guard.devdocs.json'; diff --git a/api_docs/license_management.mdx b/api_docs/license_management.mdx index 62f4e10570268..84a353a918269 100644 --- a/api_docs/license_management.mdx +++ b/api_docs/license_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseManagement title: "licenseManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseManagement plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licenseManagement'] --- import licenseManagementObj from './license_management.devdocs.json'; diff --git a/api_docs/licensing.mdx b/api_docs/licensing.mdx index 730f2b64ea891..eb96965d61a42 100644 --- a/api_docs/licensing.mdx +++ b/api_docs/licensing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licensing title: "licensing" image: https://source.unsplash.com/400x175/?github description: API docs for the licensing plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licensing'] --- import licensingObj from './licensing.devdocs.json'; diff --git a/api_docs/links.mdx b/api_docs/links.mdx index b1c144fb68c21..998a1c1a4998e 100644 --- a/api_docs/links.mdx +++ b/api_docs/links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/links title: "links" image: https://source.unsplash.com/400x175/?github description: API docs for the links plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'links'] --- import linksObj from './links.devdocs.json'; diff --git a/api_docs/lists.mdx b/api_docs/lists.mdx index 29908ca7177d6..21be8da07cd03 100644 --- a/api_docs/lists.mdx +++ b/api_docs/lists.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lists title: "lists" image: https://source.unsplash.com/400x175/?github description: API docs for the lists plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/logs_data_access.mdx b/api_docs/logs_data_access.mdx index 005b3e40d53f5..23028913180c0 100644 --- a/api_docs/logs_data_access.mdx +++ b/api_docs/logs_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsDataAccess title: "logsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the logsDataAccess plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsDataAccess'] --- import logsDataAccessObj from './logs_data_access.devdocs.json'; diff --git a/api_docs/logs_explorer.mdx b/api_docs/logs_explorer.mdx index 8b3b74dd89d24..b225223935be2 100644 --- a/api_docs/logs_explorer.mdx +++ b/api_docs/logs_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsExplorer title: "logsExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the logsExplorer plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsExplorer'] --- import logsExplorerObj from './logs_explorer.devdocs.json'; diff --git a/api_docs/logs_shared.mdx b/api_docs/logs_shared.mdx index 395b4c14ec7da..7f008ba5d5f11 100644 --- a/api_docs/logs_shared.mdx +++ b/api_docs/logs_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsShared title: "logsShared" image: https://source.unsplash.com/400x175/?github description: API docs for the logsShared plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsShared'] --- import logsSharedObj from './logs_shared.devdocs.json'; diff --git a/api_docs/management.mdx b/api_docs/management.mdx index 97df0a3060425..25de408633a15 100644 --- a/api_docs/management.mdx +++ b/api_docs/management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/management title: "management" image: https://source.unsplash.com/400x175/?github description: API docs for the management plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'management'] --- import managementObj from './management.devdocs.json'; diff --git a/api_docs/maps.devdocs.json b/api_docs/maps.devdocs.json index 090a1c847410d..7d1769c0a287a 100644 --- a/api_docs/maps.devdocs.json +++ b/api_docs/maps.devdocs.json @@ -3056,7 +3056,7 @@ "MapExtent", " | undefined; mapSettings?: Partial<", "MapSettings", - "> | undefined; hiddenLayers?: string[] | undefined; hideFilterActions?: boolean | undefined; timeRange?: ", + "> | undefined; hiddenLayers?: string[] | undefined; timeRange?: ", { "pluginId": "@kbn/es-query", "scope": "common", @@ -3064,9 +3064,7 @@ "section": "def-common.TimeRange", "text": "TimeRange" }, - " | undefined; filterByMapExtent?: boolean | undefined; isMovementSynchronized?: boolean | undefined; isSharable?: boolean | undefined; tooltipRenderer?: ", - "RenderToolTipContent", - " | undefined; }" + " | undefined; filterByMapExtent?: boolean | undefined; isMovementSynchronized?: boolean | undefined; }" ], "path": "x-pack/plugins/maps/public/react_embeddable/types.ts", "deprecated": false, diff --git a/api_docs/maps.mdx b/api_docs/maps.mdx index d40e59fac52b3..8c31d7f87dc71 100644 --- a/api_docs/maps.mdx +++ b/api_docs/maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/maps title: "maps" image: https://source.unsplash.com/400x175/?github description: API docs for the maps plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'maps'] --- import mapsObj from './maps.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kib | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 209 | 0 | 205 | 28 | +| 209 | 0 | 205 | 27 | ## Client diff --git a/api_docs/maps_ems.mdx b/api_docs/maps_ems.mdx index 0a4468b6d80ac..e8afb7cedc61a 100644 --- a/api_docs/maps_ems.mdx +++ b/api_docs/maps_ems.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mapsEms title: "mapsEms" image: https://source.unsplash.com/400x175/?github description: API docs for the mapsEms plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mapsEms'] --- import mapsEmsObj from './maps_ems.devdocs.json'; diff --git a/api_docs/metrics_data_access.mdx b/api_docs/metrics_data_access.mdx index e9645d3a5ecb9..18748103aeb3d 100644 --- a/api_docs/metrics_data_access.mdx +++ b/api_docs/metrics_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/metricsDataAccess title: "metricsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the metricsDataAccess plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'metricsDataAccess'] --- import metricsDataAccessObj from './metrics_data_access.devdocs.json'; diff --git a/api_docs/ml.devdocs.json b/api_docs/ml.devdocs.json index bfecb993411ef..979ceb82c1d18 100644 --- a/api_docs/ml.devdocs.json +++ b/api_docs/ml.devdocs.json @@ -88,25 +88,6 @@ } ], "functions": [ - { - "parentPluginId": "ml", - "id": "def-public.getMlSharedImports", - "type": "Function", - "tags": [], - "label": "getMlSharedImports", - "description": [], - "signature": [ - "() => Promise" - ], - "path": "x-pack/plugins/ml/public/index.ts", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [], - "initialIsOpen": false - }, { "parentPluginId": "ml", "id": "def-public.MLJobsAwaitingNodeWarning", @@ -1078,22 +1059,6 @@ "trackAdoption": false, "initialIsOpen": false }, - { - "parentPluginId": "ml", - "id": "def-public.GetMlSharedImportsReturnType", - "type": "Type", - "tags": [], - "label": "GetMlSharedImportsReturnType", - "description": [], - "signature": [ - "typeof ", - "x-pack/plugins/ml/public/shared" - ], - "path": "x-pack/plugins/ml/public/index.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, { "parentPluginId": "ml", "id": "def-public.MlLocator", @@ -1419,7 +1384,13 @@ "text": "DataFrameAnalyticsConfig" }, ">): Promise<", - "ValidateAnalyticsJobResponse", + { + "pluginId": "@kbn/ml-validators", + "scope": "common", + "docId": "kibKbnMlValidatorsPluginApi", + "section": "def-common.ValidateAnalyticsJobResponse", + "text": "ValidateAnalyticsJobResponse" + }, ">; newJobCapsAnalytics(indexPatternTitle: string, isRollup?: boolean): Promise<", { "pluginId": "@kbn/ml-anomaly-utils", @@ -2710,41 +2681,6 @@ "common": { "classes": [], "functions": [ - { - "parentPluginId": "ml", - "id": "def-common.composeValidators", - "type": "Function", - "tags": [], - "label": "composeValidators", - "description": [ - "\nComposes multiple validators into a single function" - ], - "signature": [ - "(validators: ((value: any) => { [key: string]: any; } | null)[]) => (value: any) => { [key: string]: any; } | null" - ], - "path": "x-pack/plugins/ml/common/util/validators.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "ml", - "id": "def-common.composeValidators.$1", - "type": "Array", - "tags": [], - "label": "validators", - "description": [], - "signature": [ - "((value: any) => { [key: string]: any; } | null)[]" - ], - "path": "x-pack/plugins/ml/common/util/validators.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [], - "initialIsOpen": false - }, { "parentPluginId": "ml", "id": "def-common.getDefaultCapabilities", @@ -2762,41 +2698,6 @@ "children": [], "returnComment": [], "initialIsOpen": false - }, - { - "parentPluginId": "ml", - "id": "def-common.patternValidator", - "type": "Function", - "tags": [], - "label": "patternValidator", - "description": [ - "\nProvides a validator function for checking against pattern." - ], - "signature": [ - "(pattern: RegExp) => (value: string) => { pattern: { matchPattern: string; }; } | null" - ], - "path": "x-pack/plugins/ml/common/util/validators.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "ml", - "id": "def-common.patternValidator.$1", - "type": "Object", - "tags": [], - "label": "pattern", - "description": [], - "signature": [ - "RegExp" - ], - "path": "x-pack/plugins/ml/common/util/validators.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [], - "initialIsOpen": false } ], "interfaces": [ diff --git a/api_docs/ml.mdx b/api_docs/ml.mdx index 2f72e76e742ba..d9c1375d6e751 100644 --- a/api_docs/ml.mdx +++ b/api_docs/ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ml title: "ml" image: https://source.unsplash.com/400x175/?github description: API docs for the ml plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ml'] --- import mlObj from './ml.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) for questi | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 154 | 3 | 67 | 102 | +| 148 | 3 | 63 | 100 | ## Client diff --git a/api_docs/mock_idp_plugin.mdx b/api_docs/mock_idp_plugin.mdx index c8b06dc79ee7e..bc5455fafba51 100644 --- a/api_docs/mock_idp_plugin.mdx +++ b/api_docs/mock_idp_plugin.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mockIdpPlugin title: "mockIdpPlugin" image: https://source.unsplash.com/400x175/?github description: API docs for the mockIdpPlugin plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mockIdpPlugin'] --- import mockIdpPluginObj from './mock_idp_plugin.devdocs.json'; diff --git a/api_docs/monitoring.mdx b/api_docs/monitoring.mdx index 52498e3021eb4..57cf7ccf16231 100644 --- a/api_docs/monitoring.mdx +++ b/api_docs/monitoring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoring title: "monitoring" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoring plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'monitoring'] --- import monitoringObj from './monitoring.devdocs.json'; diff --git a/api_docs/monitoring_collection.mdx b/api_docs/monitoring_collection.mdx index b452d7a4f165c..dead15972230d 100644 --- a/api_docs/monitoring_collection.mdx +++ b/api_docs/monitoring_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoringCollection title: "monitoringCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoringCollection plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'monitoringCollection'] --- import monitoringCollectionObj from './monitoring_collection.devdocs.json'; diff --git a/api_docs/navigation.mdx b/api_docs/navigation.mdx index dbd826c7ebb41..c5af9b0af52b7 100644 --- a/api_docs/navigation.mdx +++ b/api_docs/navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/navigation title: "navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the navigation plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'navigation'] --- import navigationObj from './navigation.devdocs.json'; diff --git a/api_docs/newsfeed.mdx b/api_docs/newsfeed.mdx index 9473bb748ee3d..c975ba7f295b1 100644 --- a/api_docs/newsfeed.mdx +++ b/api_docs/newsfeed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/newsfeed title: "newsfeed" image: https://source.unsplash.com/400x175/?github description: API docs for the newsfeed plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'newsfeed'] --- import newsfeedObj from './newsfeed.devdocs.json'; diff --git a/api_docs/no_data_page.mdx b/api_docs/no_data_page.mdx index fedbed7c1793e..c0f92a0c41187 100644 --- a/api_docs/no_data_page.mdx +++ b/api_docs/no_data_page.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/noDataPage title: "noDataPage" image: https://source.unsplash.com/400x175/?github description: API docs for the noDataPage plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'noDataPage'] --- import noDataPageObj from './no_data_page.devdocs.json'; diff --git a/api_docs/notifications.mdx b/api_docs/notifications.mdx index 400ea784baa30..6d555b7a84c0f 100644 --- a/api_docs/notifications.mdx +++ b/api_docs/notifications.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/notifications title: "notifications" image: https://source.unsplash.com/400x175/?github description: API docs for the notifications plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'notifications'] --- import notificationsObj from './notifications.devdocs.json'; diff --git a/api_docs/observability.devdocs.json b/api_docs/observability.devdocs.json index e62ffba52ccab..f0c544c7902b2 100644 --- a/api_docs/observability.devdocs.json +++ b/api_docs/observability.devdocs.json @@ -11147,7 +11147,7 @@ "label": "value", "description": [], "signature": [ - "false" + "true" ], "path": "x-pack/plugins/observability_solution/observability/server/ui_settings.ts", "deprecated": false, @@ -11161,7 +11161,7 @@ "label": "requiresPageReload", "description": [], "signature": [ - "false" + "true" ], "path": "x-pack/plugins/observability_solution/observability/server/ui_settings.ts", "deprecated": false, diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx index 6ca920895ba28..9856e671b6a11 100644 --- a/api_docs/observability.mdx +++ b/api_docs/observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observability title: "observability" image: https://source.unsplash.com/400x175/?github description: API docs for the observability plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability'] --- import observabilityObj from './observability.devdocs.json'; diff --git a/api_docs/observability_a_i_assistant.mdx b/api_docs/observability_a_i_assistant.mdx index f79e798207057..fea8cc2a5ba8c 100644 --- a/api_docs/observability_a_i_assistant.mdx +++ b/api_docs/observability_a_i_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistant title: "observabilityAIAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAIAssistant plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistant'] --- import observabilityAIAssistantObj from './observability_a_i_assistant.devdocs.json'; diff --git a/api_docs/observability_a_i_assistant_app.mdx b/api_docs/observability_a_i_assistant_app.mdx index 16fc7cd5c797e..0389bfad34a27 100644 --- a/api_docs/observability_a_i_assistant_app.mdx +++ b/api_docs/observability_a_i_assistant_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistantApp title: "observabilityAIAssistantApp" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAIAssistantApp plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistantApp'] --- import observabilityAIAssistantAppObj from './observability_a_i_assistant_app.devdocs.json'; diff --git a/api_docs/observability_ai_assistant_management.mdx b/api_docs/observability_ai_assistant_management.mdx index 954eddd6cdae7..38008d6a5cc39 100644 --- a/api_docs/observability_ai_assistant_management.mdx +++ b/api_docs/observability_ai_assistant_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAiAssistantManagement title: "observabilityAiAssistantManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAiAssistantManagement plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAiAssistantManagement'] --- import observabilityAiAssistantManagementObj from './observability_ai_assistant_management.devdocs.json'; diff --git a/api_docs/observability_logs_explorer.mdx b/api_docs/observability_logs_explorer.mdx index c59c54939a458..079c7a6be1d28 100644 --- a/api_docs/observability_logs_explorer.mdx +++ b/api_docs/observability_logs_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityLogsExplorer title: "observabilityLogsExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityLogsExplorer plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityLogsExplorer'] --- import observabilityLogsExplorerObj from './observability_logs_explorer.devdocs.json'; diff --git a/api_docs/observability_onboarding.mdx b/api_docs/observability_onboarding.mdx index 39caf81cfa8d3..742c30486acc1 100644 --- a/api_docs/observability_onboarding.mdx +++ b/api_docs/observability_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityOnboarding title: "observabilityOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityOnboarding plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityOnboarding'] --- import observabilityOnboardingObj from './observability_onboarding.devdocs.json'; diff --git a/api_docs/observability_shared.devdocs.json b/api_docs/observability_shared.devdocs.json index 3f8a9696ceff3..5f36898d96148 100644 --- a/api_docs/observability_shared.devdocs.json +++ b/api_docs/observability_shared.devdocs.json @@ -6189,6 +6189,18 @@ } ], "enums": [ + { + "parentPluginId": "observabilityShared", + "id": "def-common.IndexLifecyclePhaseSelectOption", + "type": "Enum", + "tags": [], + "label": "IndexLifecyclePhaseSelectOption", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_shared/common/ilm_types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "observabilityShared", "id": "def-common.ObservabilityTriggerId", @@ -6545,6 +6557,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "observabilityShared", + "id": "def-common.DataTier", + "type": "Type", + "tags": [], + "label": "DataTier", + "description": [], + "signature": [ + "\"data_hot\" | \"data_warm\" | \"data_cold\" | \"data_frozen\"" + ], + "path": "x-pack/plugins/observability_solution/observability_shared/common/ilm_types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "observabilityShared", "id": "def-common.DESTINATION_ADDRESS", @@ -8613,6 +8640,22 @@ "initialIsOpen": false } ], - "objects": [] + "objects": [ + { + "parentPluginId": "observabilityShared", + "id": "def-common.indexLifeCyclePhaseToDataTier", + "type": "Object", + "tags": [], + "label": "indexLifeCyclePhaseToDataTier", + "description": [], + "signature": [ + "{ readonly hot: \"data_hot\"; readonly warm: \"data_warm\"; readonly cold: \"data_cold\"; readonly frozen: \"data_frozen\"; }" + ], + "path": "x-pack/plugins/observability_solution/observability_shared/common/ilm_types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ] } } \ No newline at end of file diff --git a/api_docs/observability_shared.mdx b/api_docs/observability_shared.mdx index 46b3b22e43bbe..36a0967277405 100644 --- a/api_docs/observability_shared.mdx +++ b/api_docs/observability_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityShared title: "observabilityShared" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityShared plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityShared'] --- import observabilitySharedObj from './observability_shared.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/observability-ui](https://github.com/orgs/elastic/teams/observ | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 474 | 1 | 469 | 19 | +| 477 | 1 | 472 | 19 | ## Client @@ -42,6 +42,9 @@ Contact [@elastic/observability-ui](https://github.com/orgs/elastic/teams/observ ## Common +### Objects + + ### Functions diff --git a/api_docs/osquery.mdx b/api_docs/osquery.mdx index 793481f8788f1..cb8c070864dfa 100644 --- a/api_docs/osquery.mdx +++ b/api_docs/osquery.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/osquery title: "osquery" image: https://source.unsplash.com/400x175/?github description: API docs for the osquery plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'osquery'] --- import osqueryObj from './osquery.devdocs.json'; diff --git a/api_docs/painless_lab.mdx b/api_docs/painless_lab.mdx index 754356556a777..bb56b946c10e2 100644 --- a/api_docs/painless_lab.mdx +++ b/api_docs/painless_lab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/painlessLab title: "painlessLab" image: https://source.unsplash.com/400x175/?github description: API docs for the painlessLab plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'painlessLab'] --- import painlessLabObj from './painless_lab.devdocs.json'; diff --git a/api_docs/plugin_directory.mdx b/api_docs/plugin_directory.mdx index a26787722b3fe..da2ea3ecb16df 100644 --- a/api_docs/plugin_directory.mdx +++ b/api_docs/plugin_directory.mdx @@ -7,7 +7,7 @@ id: kibDevDocsPluginDirectory slug: /kibana-dev-docs/api-meta/plugin-api-directory title: Directory description: Directory of public APIs available through plugins or packages. -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -15,13 +15,13 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Count | Plugins or Packages with a
public API | Number of teams | |--------------|----------|------------------------| -| 861 | 734 | 45 | +| 864 | 737 | 45 | ### Public API health stats | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 53179 | 245 | 39881 | 1963 | +| 53270 | 245 | 39910 | 1964 | ## Plugin Directory @@ -32,8 +32,8 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 4 | 0 | 4 | 1 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | AIOps plugin maintained by ML team. | 74 | 0 | 9 | 2 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 875 | 1 | 843 | 52 | -| | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | The user interface for Elastic APM | 29 | 0 | 29 | 119 | -| | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 93 | 0 | 93 | 1 | +| | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | The user interface for Elastic APM | 29 | 0 | 29 | 118 | +| | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 93 | 0 | 93 | 3 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 9 | 0 | 9 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Considering using bfetch capabilities when fetching large amounts of data. This services supports batching HTTP requests and streaming responses back. | 83 | 1 | 73 | 2 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds Canvas application to Kibana | 9 | 0 | 8 | 3 | @@ -53,7 +53,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | crossClusterReplication | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 0 | 0 | 0 | 0 | | customBranding | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Enables customization of Kibana | 0 | 0 | 0 | 0 | | | [@elastic/fleet](https://github.com/orgs/elastic/teams/fleet) | Add custom data integrations so they can be displayed in the Fleet integrations app | 271 | 0 | 252 | 1 | -| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds the Dashboard app to Kibana | 128 | 0 | 123 | 13 | +| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds the Dashboard app to Kibana | 128 | 0 | 123 | 15 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | - | 54 | 0 | 51 | 0 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Data services are useful for searching and querying data from Elasticsearch. Helpful utilities include: a re-usable react query bar, KQL autocomplete, async search, Data Views (Index Patterns) and field formatters. | 3209 | 31 | 2594 | 24 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 5 | 0 | 5 | 0 | @@ -103,7 +103,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | The file upload plugin contains components and services for uploading a file, analyzing its data, and then importing the data into an Elasticsearch index. Supported file types include CSV, TSV, newline-delimited JSON and GeoJSON. | 88 | 0 | 88 | 8 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | File upload, download, sharing, and serving over HTTP implementation in Kibana. | 240 | 0 | 24 | 9 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Simple UI for managing files in Kibana | 3 | 0 | 3 | 0 | -| | [@elastic/fleet](https://github.com/orgs/elastic/teams/fleet) | - | 1364 | 5 | 1241 | 74 | +| | [@elastic/fleet](https://github.com/orgs/elastic/teams/fleet) | - | 1366 | 5 | 1243 | 74 | | ftrApis | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 0 | 0 | 0 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 72 | 0 | 14 | 5 | | globalSearchBar | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 0 | 0 | 0 | 0 | @@ -114,7 +114,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 149 | 0 | 111 | 1 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Image embeddable | 1 | 0 | 1 | 0 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 4 | 0 | 4 | 0 | -| | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 243 | 0 | 238 | 1 | +| | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 246 | 0 | 241 | 1 | | | [@elastic/appex-ai-infra](https://github.com/orgs/elastic/teams/appex-ai-infra) | - | 49 | 0 | 44 | 15 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | This plugin visualizes data from Filebeat and Metricbeat, and integrates with other Observability solutions | 23 | 0 | 23 | 5 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 4 | 0 | 4 | 0 | @@ -141,10 +141,10 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | Exposes the shared components and APIs to access and visualize logs. | 310 | 0 | 281 | 32 | | logstash | [@elastic/logstash](https://github.com/orgs/elastic/teams/logstash) | - | 0 | 0 | 0 | 0 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 44 | 0 | 44 | 7 | -| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | - | 209 | 0 | 205 | 28 | +| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | - | 209 | 0 | 205 | 27 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | - | 60 | 0 | 60 | 0 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | Exposes utilities for accessing metrics data | 137 | 8 | 137 | 5 | -| | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | This plugin provides access to the machine learning features provided by Elastic. | 154 | 3 | 67 | 102 | +| | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | This plugin provides access to the machine learning features provided by Elastic. | 148 | 3 | 63 | 100 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | - | 2 | 0 | 2 | 0 | | | [@elastic/stack-monitoring](https://github.com/orgs/elastic/teams/stack-monitoring) | - | 15 | 3 | 13 | 1 | | | [@elastic/stack-monitoring](https://github.com/orgs/elastic/teams/stack-monitoring) | - | 9 | 0 | 9 | 0 | @@ -158,7 +158,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/obs-ai-assistant](https://github.com/orgs/elastic/teams/obs-ai-assistant) | - | 2 | 0 | 2 | 0 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | This plugin exposes and registers observability log consumption features. | 19 | 0 | 19 | 1 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 23 | 0 | 23 | 0 | -| | [@elastic/observability-ui](https://github.com/orgs/elastic/teams/observability-ui) | - | 474 | 1 | 469 | 19 | +| | [@elastic/observability-ui](https://github.com/orgs/elastic/teams/observability-ui) | - | 477 | 1 | 472 | 19 | | | [@elastic/security-defend-workflows](https://github.com/orgs/elastic/teams/security-defend-workflows) | - | 23 | 0 | 23 | 7 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 2 | 0 | 2 | 0 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds a standardized Presentation panel which allows any forward ref component to interface with various Kibana systems. | 11 | 0 | 11 | 4 | @@ -187,7 +187,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) | - | 21 | 0 | 15 | 1 | | searchprofiler | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 0 | 0 | 0 | 0 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides authentication and authorization features, and exposes functionality to understand the capabilities of the currently authenticated user. | 448 | 0 | 231 | 0 | -| | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | - | 193 | 0 | 124 | 34 | +| | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | - | 193 | 0 | 124 | 33 | | | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | ESS customizations for Security Solution. | 6 | 0 | 6 | 0 | | | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | Serverless customizations for security. | 7 | 0 | 7 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | The core Serverless plugin, providing APIs to Serverless Project plugins. | 25 | 0 | 24 | 0 | @@ -197,11 +197,11 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Adds URL Service and sharing capabilities to Kibana | 121 | 0 | 60 | 12 | | | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 59 | 0 | 59 | 1 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 22 | 1 | 22 | 1 | -| | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides the Spaces feature, which allows saved objects to be organized into meaningful categories. | 262 | 0 | 67 | 0 | +| | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides the Spaces feature, which allows saved objects to be organized into meaningful categories. | 266 | 0 | 71 | 1 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 25 | 0 | 25 | 3 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 10 | 0 | 10 | 0 | | synthetics | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | This plugin visualizes data from Synthetics and Heartbeat, and integrates with other Observability solutions. | 0 | 0 | 0 | 1 | -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 108 | 0 | 64 | 6 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 108 | 0 | 64 | 7 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 45 | 0 | 1 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 31 | 0 | 26 | 6 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 1 | 0 | 1 | 0 | @@ -317,7 +317,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 5 | 0 | 0 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 20 | 0 | 7 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 6 | 0 | 6 | 0 | -| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 207 | 0 | 101 | 0 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 208 | 0 | 102 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 3 | 0 | 3 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 6 | 0 | 1 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 8 | 0 | 8 | 0 | @@ -432,7 +432,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 128 | 0 | 94 | 44 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 12 | 0 | 12 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 562 | 1 | 134 | 4 | -| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 71 | 0 | 70 | 5 | +| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 73 | 0 | 72 | 5 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 14 | 0 | 14 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 36 | 0 | 6 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 10 | 0 | 3 | 0 | @@ -518,6 +518,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 27 | 0 | 27 | 1 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 2 | 0 | 1 | 0 | | | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 177 | 1 | 139 | 20 | +| | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 29 | 0 | 12 | 0 | | | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 73 | 0 | 69 | 0 | | | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 199 | 0 | 187 | 12 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 40 | 0 | 40 | 0 | @@ -543,7 +544,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 37 | 0 | 27 | 2 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 36 | 0 | 7 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 47 | 0 | 40 | 0 | -| | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 109 | 3 | 109 | 0 | +| | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 114 | 3 | 114 | 0 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 7 | 1 | 7 | 1 | | | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 9 | 0 | 9 | 0 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 52 | 12 | 43 | 0 | @@ -555,7 +556,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 41 | 2 | 35 | 0 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 9 | 0 | 7 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 108 | 0 | 107 | 0 | -| | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 11 | 0 | 7 | 0 | +| | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 11 | 0 | 7 | 0 | | | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 193 | 0 | 190 | 6 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 172 | 0 | 172 | 1 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 28 | 0 | 2 | 2 | @@ -586,6 +587,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 50 | 0 | 0 | 0 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 11 | 0 | 0 | 0 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 36 | 4 | 8 | 0 | +| | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 29 | 0 | 0 | 0 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 12 | 0 | 1 | 0 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 2 | 0 | 0 | 0 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 3 | 0 | 2 | 0 | @@ -593,6 +595,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 5 | 0 | 3 | 0 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 8 | 2 | 8 | 0 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 3 | 0 | 0 | 0 | +| | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 3 | 0 | 0 | 0 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 29 | 0 | 1 | 0 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 30 | 0 | 0 | 0 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 5 | 0 | 0 | 0 | @@ -602,6 +605,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 46 | 0 | 40 | 1 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 18 | 0 | 18 | 0 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 42 | 1 | 35 | 1 | +| | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 32 | 0 | 0 | 0 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | - | 22 | 0 | 16 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 123 | 0 | 123 | 3 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 55 | 1 | 50 | 0 | @@ -669,7 +673,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | - | 35 | 0 | 25 | 0 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | - | 7 | 0 | 7 | 0 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | - | 118 | 0 | 59 | 0 | -| | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | - | 58 | 0 | 31 | 0 | +| | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | - | 66 | 0 | 39 | 0 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | - | 275 | 1 | 154 | 0 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | - | 75 | 0 | 74 | 0 | | | [@elastic/security-threat-hunting-investigations](https://github.com/orgs/elastic/teams/security-threat-hunting-investigations) | - | 59 | 0 | 38 | 5 | @@ -678,7 +682,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | - | 54 | 0 | 49 | 0 | | | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | - | 30 | 0 | 24 | 0 | | | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | - | 2 | 0 | 0 | 0 | -| | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | - | 47 | 0 | 12 | 0 | +| | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | - | 48 | 0 | 13 | 0 | | | [@elastic/security-detection-engine](https://github.com/orgs/elastic/teams/security-detection-engine) | - | 56 | 1 | 41 | 1 | | | [@elastic/security-threat-hunting-investigations](https://github.com/orgs/elastic/teams/security-threat-hunting-investigations) | - | 92 | 0 | 70 | 6 | | | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | - | 341 | 1 | 337 | 32 | @@ -712,7 +716,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 30 | 0 | 8 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 10 | 0 | 4 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 32 | 0 | 28 | 0 | -| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 35 | 0 | 26 | 2 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 38 | 0 | 29 | 2 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 6 | 0 | 2 | 1 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 5 | 0 | 4 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 3 | 0 | 2 | 0 | @@ -759,11 +763,10 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 32 | 2 | 32 | 0 | | | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 19 | 0 | 19 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 7 | 0 | 5 | 1 | -| | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 315 | 4 | 267 | 14 | +| | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 316 | 4 | 268 | 14 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 37 | 1 | 19 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 131 | 3 | 98 | 2 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 2 | 0 | 1 | 0 | -| | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 29 | 0 | 12 | 0 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 8 | 0 | 8 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 74 | 0 | 55 | 0 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 15 | 0 | 15 | 0 | diff --git a/api_docs/presentation_panel.mdx b/api_docs/presentation_panel.mdx index 25dd271be08e0..6f52f8a3fb3fc 100644 --- a/api_docs/presentation_panel.mdx +++ b/api_docs/presentation_panel.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationPanel title: "presentationPanel" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationPanel plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationPanel'] --- import presentationPanelObj from './presentation_panel.devdocs.json'; diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx index e957b448a3cdc..200e2cefe8a98 100644 --- a/api_docs/presentation_util.mdx +++ b/api_docs/presentation_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationUtil title: "presentationUtil" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationUtil plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationUtil'] --- import presentationUtilObj from './presentation_util.devdocs.json'; diff --git a/api_docs/profiling.mdx b/api_docs/profiling.mdx index b97212faa6938..2c1e7f4200ddd 100644 --- a/api_docs/profiling.mdx +++ b/api_docs/profiling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profiling title: "profiling" image: https://source.unsplash.com/400x175/?github description: API docs for the profiling plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profiling'] --- import profilingObj from './profiling.devdocs.json'; diff --git a/api_docs/profiling_data_access.mdx b/api_docs/profiling_data_access.mdx index 69e88b72cbd17..8af04547feaaf 100644 --- a/api_docs/profiling_data_access.mdx +++ b/api_docs/profiling_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profilingDataAccess title: "profilingDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the profilingDataAccess plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profilingDataAccess'] --- import profilingDataAccessObj from './profiling_data_access.devdocs.json'; diff --git a/api_docs/remote_clusters.mdx b/api_docs/remote_clusters.mdx index 08f49f79c6635..54f091899b56e 100644 --- a/api_docs/remote_clusters.mdx +++ b/api_docs/remote_clusters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/remoteClusters title: "remoteClusters" image: https://source.unsplash.com/400x175/?github description: API docs for the remoteClusters plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'remoteClusters'] --- import remoteClustersObj from './remote_clusters.devdocs.json'; diff --git a/api_docs/reporting.mdx b/api_docs/reporting.mdx index bc7d06f99d3ba..e3ac5a786eeb2 100644 --- a/api_docs/reporting.mdx +++ b/api_docs/reporting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/reporting title: "reporting" image: https://source.unsplash.com/400x175/?github description: API docs for the reporting plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'reporting'] --- import reportingObj from './reporting.devdocs.json'; diff --git a/api_docs/rollup.mdx b/api_docs/rollup.mdx index 9bc85d037cd9d..71f3023c90661 100644 --- a/api_docs/rollup.mdx +++ b/api_docs/rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/rollup title: "rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the rollup plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'rollup'] --- import rollupObj from './rollup.devdocs.json'; diff --git a/api_docs/rule_registry.mdx b/api_docs/rule_registry.mdx index e4c485f91ea13..cd0f6d0bce5bf 100644 --- a/api_docs/rule_registry.mdx +++ b/api_docs/rule_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ruleRegistry title: "ruleRegistry" image: https://source.unsplash.com/400x175/?github description: API docs for the ruleRegistry plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ruleRegistry'] --- import ruleRegistryObj from './rule_registry.devdocs.json'; diff --git a/api_docs/runtime_fields.mdx b/api_docs/runtime_fields.mdx index 19d03aa4ca963..dffeb5ea73390 100644 --- a/api_docs/runtime_fields.mdx +++ b/api_docs/runtime_fields.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/runtimeFields title: "runtimeFields" image: https://source.unsplash.com/400x175/?github description: API docs for the runtimeFields plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'runtimeFields'] --- import runtimeFieldsObj from './runtime_fields.devdocs.json'; diff --git a/api_docs/saved_objects.mdx b/api_docs/saved_objects.mdx index 09e318b3a648c..f248492cbff19 100644 --- a/api_docs/saved_objects.mdx +++ b/api_docs/saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjects title: "savedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjects plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjects'] --- import savedObjectsObj from './saved_objects.devdocs.json'; diff --git a/api_docs/saved_objects_finder.mdx b/api_docs/saved_objects_finder.mdx index f31b19553c1aa..e0df3db06c2f0 100644 --- a/api_docs/saved_objects_finder.mdx +++ b/api_docs/saved_objects_finder.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsFinder title: "savedObjectsFinder" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsFinder plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsFinder'] --- import savedObjectsFinderObj from './saved_objects_finder.devdocs.json'; diff --git a/api_docs/saved_objects_management.mdx b/api_docs/saved_objects_management.mdx index 65b10728be4db..9144c1c3166c2 100644 --- a/api_docs/saved_objects_management.mdx +++ b/api_docs/saved_objects_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsManagement title: "savedObjectsManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsManagement plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsManagement'] --- import savedObjectsManagementObj from './saved_objects_management.devdocs.json'; diff --git a/api_docs/saved_objects_tagging.mdx b/api_docs/saved_objects_tagging.mdx index a695b0307aeb9..82c04eb2eb74a 100644 --- a/api_docs/saved_objects_tagging.mdx +++ b/api_docs/saved_objects_tagging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTagging title: "savedObjectsTagging" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTagging plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTagging'] --- import savedObjectsTaggingObj from './saved_objects_tagging.devdocs.json'; diff --git a/api_docs/saved_objects_tagging_oss.mdx b/api_docs/saved_objects_tagging_oss.mdx index efbc92ee83aee..d62dae4ca2972 100644 --- a/api_docs/saved_objects_tagging_oss.mdx +++ b/api_docs/saved_objects_tagging_oss.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTaggingOss title: "savedObjectsTaggingOss" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTaggingOss plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTaggingOss'] --- import savedObjectsTaggingOssObj from './saved_objects_tagging_oss.devdocs.json'; diff --git a/api_docs/saved_search.mdx b/api_docs/saved_search.mdx index 30b6412e07490..e38fadc1aec6c 100644 --- a/api_docs/saved_search.mdx +++ b/api_docs/saved_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedSearch title: "savedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the savedSearch plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedSearch'] --- import savedSearchObj from './saved_search.devdocs.json'; diff --git a/api_docs/screenshot_mode.mdx b/api_docs/screenshot_mode.mdx index 83b1568ddd63f..49571ed42342c 100644 --- a/api_docs/screenshot_mode.mdx +++ b/api_docs/screenshot_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotMode title: "screenshotMode" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotMode plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotMode'] --- import screenshotModeObj from './screenshot_mode.devdocs.json'; diff --git a/api_docs/screenshotting.mdx b/api_docs/screenshotting.mdx index 37394a6a64db9..65f8f7fc58153 100644 --- a/api_docs/screenshotting.mdx +++ b/api_docs/screenshotting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotting title: "screenshotting" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotting plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting'] --- import screenshottingObj from './screenshotting.devdocs.json'; diff --git a/api_docs/search_assistant.mdx b/api_docs/search_assistant.mdx index 3ca251b7c0df3..126890cff4009 100644 --- a/api_docs/search_assistant.mdx +++ b/api_docs/search_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchAssistant title: "searchAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the searchAssistant plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchAssistant'] --- import searchAssistantObj from './search_assistant.devdocs.json'; diff --git a/api_docs/search_connectors.mdx b/api_docs/search_connectors.mdx index 440505ea855ec..719dd08b6d8d2 100644 --- a/api_docs/search_connectors.mdx +++ b/api_docs/search_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchConnectors title: "searchConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the searchConnectors plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchConnectors'] --- import searchConnectorsObj from './search_connectors.devdocs.json'; diff --git a/api_docs/search_homepage.mdx b/api_docs/search_homepage.mdx index c9b3d047e0778..1b13cbe0171a4 100644 --- a/api_docs/search_homepage.mdx +++ b/api_docs/search_homepage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchHomepage title: "searchHomepage" image: https://source.unsplash.com/400x175/?github description: API docs for the searchHomepage plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchHomepage'] --- import searchHomepageObj from './search_homepage.devdocs.json'; diff --git a/api_docs/search_indices.mdx b/api_docs/search_indices.mdx index acd87ac4e0d3d..f0a5a041b6836 100644 --- a/api_docs/search_indices.mdx +++ b/api_docs/search_indices.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchIndices title: "searchIndices" image: https://source.unsplash.com/400x175/?github description: API docs for the searchIndices plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchIndices'] --- import searchIndicesObj from './search_indices.devdocs.json'; diff --git a/api_docs/search_inference_endpoints.mdx b/api_docs/search_inference_endpoints.mdx index 82520afbe5577..af1699b7b9e78 100644 --- a/api_docs/search_inference_endpoints.mdx +++ b/api_docs/search_inference_endpoints.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchInferenceEndpoints title: "searchInferenceEndpoints" image: https://source.unsplash.com/400x175/?github description: API docs for the searchInferenceEndpoints plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchInferenceEndpoints'] --- import searchInferenceEndpointsObj from './search_inference_endpoints.devdocs.json'; diff --git a/api_docs/search_notebooks.mdx b/api_docs/search_notebooks.mdx index 5435f7a4f0a6d..a6555ff872594 100644 --- a/api_docs/search_notebooks.mdx +++ b/api_docs/search_notebooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchNotebooks title: "searchNotebooks" image: https://source.unsplash.com/400x175/?github description: API docs for the searchNotebooks plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchNotebooks'] --- import searchNotebooksObj from './search_notebooks.devdocs.json'; diff --git a/api_docs/search_playground.mdx b/api_docs/search_playground.mdx index e308621bfbb2d..258501bacd167 100644 --- a/api_docs/search_playground.mdx +++ b/api_docs/search_playground.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchPlayground title: "searchPlayground" image: https://source.unsplash.com/400x175/?github description: API docs for the searchPlayground plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchPlayground'] --- import searchPlaygroundObj from './search_playground.devdocs.json'; diff --git a/api_docs/security.mdx b/api_docs/security.mdx index 025444c46d86d..40eb059990a5e 100644 --- a/api_docs/security.mdx +++ b/api_docs/security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/security title: "security" image: https://source.unsplash.com/400x175/?github description: API docs for the security plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'security'] --- import securityObj from './security.devdocs.json'; diff --git a/api_docs/security_solution.devdocs.json b/api_docs/security_solution.devdocs.json index 3d03c6a9812c5..c2905aad736d5 100644 --- a/api_docs/security_solution.devdocs.json +++ b/api_docs/security_solution.devdocs.json @@ -1158,9 +1158,7 @@ "label": "pinnedEventsSaveObject", "description": [], "signature": [ - "{ [x: string]: ", - "PinnedEvent", - "; }" + "{ [x: string]: { version: string; eventId: string; timelineId: string; pinnedEventId: string; createdBy?: string | null | undefined; updatedBy?: string | null | undefined; created?: number | null | undefined; updated?: number | null | undefined; }; }" ], "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx index 7e88952aedb10..f5902ae9f47c9 100644 --- a/api_docs/security_solution.mdx +++ b/api_docs/security_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolution title: "securitySolution" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolution plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolution'] --- import securitySolutionObj from './security_solution.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/security-solution](https://github.com/orgs/elastic/teams/secur | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 193 | 0 | 124 | 34 | +| 193 | 0 | 124 | 33 | ## Client diff --git a/api_docs/security_solution_ess.mdx b/api_docs/security_solution_ess.mdx index acf6df88eecd4..3d31786b8c47a 100644 --- a/api_docs/security_solution_ess.mdx +++ b/api_docs/security_solution_ess.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionEss title: "securitySolutionEss" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionEss plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolutionEss'] --- import securitySolutionEssObj from './security_solution_ess.devdocs.json'; diff --git a/api_docs/security_solution_serverless.mdx b/api_docs/security_solution_serverless.mdx index 7f89d9bbbea79..d686b1c1a9ad2 100644 --- a/api_docs/security_solution_serverless.mdx +++ b/api_docs/security_solution_serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionServerless title: "securitySolutionServerless" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionServerless plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolutionServerless'] --- import securitySolutionServerlessObj from './security_solution_serverless.devdocs.json'; diff --git a/api_docs/serverless.mdx b/api_docs/serverless.mdx index 6bd064b11f2e9..953ed6336a412 100644 --- a/api_docs/serverless.mdx +++ b/api_docs/serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverless title: "serverless" image: https://source.unsplash.com/400x175/?github description: API docs for the serverless plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverless'] --- import serverlessObj from './serverless.devdocs.json'; diff --git a/api_docs/serverless_observability.mdx b/api_docs/serverless_observability.mdx index 75b78d6919403..9ecbce3bad0ed 100644 --- a/api_docs/serverless_observability.mdx +++ b/api_docs/serverless_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessObservability title: "serverlessObservability" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessObservability plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverlessObservability'] --- import serverlessObservabilityObj from './serverless_observability.devdocs.json'; diff --git a/api_docs/serverless_search.mdx b/api_docs/serverless_search.mdx index a81bdfb064957..d240bc6a2ffc5 100644 --- a/api_docs/serverless_search.mdx +++ b/api_docs/serverless_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessSearch title: "serverlessSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessSearch plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverlessSearch'] --- import serverlessSearchObj from './serverless_search.devdocs.json'; diff --git a/api_docs/session_view.mdx b/api_docs/session_view.mdx index fc4ea3738486c..59d2c51d9bc42 100644 --- a/api_docs/session_view.mdx +++ b/api_docs/session_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/sessionView title: "sessionView" image: https://source.unsplash.com/400x175/?github description: API docs for the sessionView plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'sessionView'] --- import sessionViewObj from './session_view.devdocs.json'; diff --git a/api_docs/share.mdx b/api_docs/share.mdx index cea50918cd223..a47059099e4c2 100644 --- a/api_docs/share.mdx +++ b/api_docs/share.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/share title: "share" image: https://source.unsplash.com/400x175/?github description: API docs for the share plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share'] --- import shareObj from './share.devdocs.json'; diff --git a/api_docs/slo.mdx b/api_docs/slo.mdx index 61db3de922873..4bd760a3d6455 100644 --- a/api_docs/slo.mdx +++ b/api_docs/slo.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/slo title: "slo" image: https://source.unsplash.com/400x175/?github description: API docs for the slo plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'slo'] --- import sloObj from './slo.devdocs.json'; diff --git a/api_docs/snapshot_restore.mdx b/api_docs/snapshot_restore.mdx index 4f75d10d318a8..0edb4516d2d04 100644 --- a/api_docs/snapshot_restore.mdx +++ b/api_docs/snapshot_restore.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/snapshotRestore title: "snapshotRestore" image: https://source.unsplash.com/400x175/?github description: API docs for the snapshotRestore plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'snapshotRestore'] --- import snapshotRestoreObj from './snapshot_restore.devdocs.json'; diff --git a/api_docs/spaces.devdocs.json b/api_docs/spaces.devdocs.json index c21f0b6a20fc3..0673f18fb64fe 100644 --- a/api_docs/spaces.devdocs.json +++ b/api_docs/spaces.devdocs.json @@ -727,6 +727,80 @@ "trackAdoption": false, "children": [], "returnComment": [] + }, + { + "parentPluginId": "spaces", + "id": "def-public.SpacesManager.getContentForSpace", + "type": "Function", + "tags": [], + "label": "getContentForSpace", + "description": [], + "signature": [ + "(id: string) => Promise<{ summary: ", + "SpaceContentTypeSummaryItem", + "[]; total: number; }>" + ], + "path": "x-pack/plugins/spaces/public/spaces_manager/spaces_manager.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "spaces", + "id": "def-public.SpacesManager.getContentForSpace.$1", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "signature": [ + "string" + ], + "path": "x-pack/plugins/spaces/public/spaces_manager/spaces_manager.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "spaces", + "id": "def-public.SpacesManager.getRolesForSpace", + "type": "Function", + "tags": [], + "label": "getRolesForSpace", + "description": [], + "signature": [ + "(id: string) => Promise<", + { + "pluginId": "@kbn/security-plugin-types-common", + "scope": "common", + "docId": "kibKbnSecurityPluginTypesCommonPluginApi", + "section": "def-common.Role", + "text": "Role" + }, + "[]>" + ], + "path": "x-pack/plugins/spaces/public/spaces_manager/spaces_manager.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "spaces", + "id": "def-public.SpacesManager.getRolesForSpace.$1", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "signature": [ + "string" + ], + "path": "x-pack/plugins/spaces/public/spaces_manager/spaces_manager.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] } ], "initialIsOpen": false diff --git a/api_docs/spaces.mdx b/api_docs/spaces.mdx index e878688b719db..c6b321c223333 100644 --- a/api_docs/spaces.mdx +++ b/api_docs/spaces.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/spaces title: "spaces" image: https://source.unsplash.com/400x175/?github description: API docs for the spaces plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'spaces'] --- import spacesObj from './spaces.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana- | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 262 | 0 | 67 | 0 | +| 266 | 0 | 71 | 1 | ## Client diff --git a/api_docs/stack_alerts.mdx b/api_docs/stack_alerts.mdx index e06c7713ef821..2050d9134c3e1 100644 --- a/api_docs/stack_alerts.mdx +++ b/api_docs/stack_alerts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackAlerts title: "stackAlerts" image: https://source.unsplash.com/400x175/?github description: API docs for the stackAlerts plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackAlerts'] --- import stackAlertsObj from './stack_alerts.devdocs.json'; diff --git a/api_docs/stack_connectors.mdx b/api_docs/stack_connectors.mdx index a4b0b1d830fde..a60f9873048fb 100644 --- a/api_docs/stack_connectors.mdx +++ b/api_docs/stack_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackConnectors title: "stackConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the stackConnectors plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackConnectors'] --- import stackConnectorsObj from './stack_connectors.devdocs.json'; diff --git a/api_docs/task_manager.devdocs.json b/api_docs/task_manager.devdocs.json index 8a7db40cdda12..88f728716be0e 100644 --- a/api_docs/task_manager.devdocs.json +++ b/api_docs/task_manager.devdocs.json @@ -667,15 +667,8 @@ "\nlist of failed tasks and errors caused failure" ], "signature": [ - "{ type: string; id: string; error: ", - { - "pluginId": "@kbn/core-saved-objects-common", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsCommonPluginApi", - "section": "def-common.SavedObjectError", - "text": "SavedObjectError" - }, - "; }[]" + "ErrorOutput", + "[]" ], "path": "x-pack/plugins/task_manager/server/task_scheduling.ts", "deprecated": false, diff --git a/api_docs/task_manager.mdx b/api_docs/task_manager.mdx index e096a9a005dcb..1053a73588c4b 100644 --- a/api_docs/task_manager.mdx +++ b/api_docs/task_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/taskManager title: "taskManager" image: https://source.unsplash.com/400x175/?github description: API docs for the taskManager plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'taskManager'] --- import taskManagerObj from './task_manager.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-o | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 108 | 0 | 64 | 6 | +| 108 | 0 | 64 | 7 | ## Server diff --git a/api_docs/telemetry.mdx b/api_docs/telemetry.mdx index b7a85bb64fbe2..a4d00ce9ebe82 100644 --- a/api_docs/telemetry.mdx +++ b/api_docs/telemetry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetry title: "telemetry" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetry plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetry'] --- import telemetryObj from './telemetry.devdocs.json'; diff --git a/api_docs/telemetry_collection_manager.mdx b/api_docs/telemetry_collection_manager.mdx index 25b1ff709bedf..62c360f1e72ce 100644 --- a/api_docs/telemetry_collection_manager.mdx +++ b/api_docs/telemetry_collection_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionManager title: "telemetryCollectionManager" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionManager plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionManager'] --- import telemetryCollectionManagerObj from './telemetry_collection_manager.devdocs.json'; diff --git a/api_docs/telemetry_collection_xpack.mdx b/api_docs/telemetry_collection_xpack.mdx index 199d608420efd..8035625feaf46 100644 --- a/api_docs/telemetry_collection_xpack.mdx +++ b/api_docs/telemetry_collection_xpack.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionXpack title: "telemetryCollectionXpack" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionXpack plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionXpack'] --- import telemetryCollectionXpackObj from './telemetry_collection_xpack.devdocs.json'; diff --git a/api_docs/telemetry_management_section.mdx b/api_docs/telemetry_management_section.mdx index 815a6b8974690..d1bd4dd91c76a 100644 --- a/api_docs/telemetry_management_section.mdx +++ b/api_docs/telemetry_management_section.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryManagementSection title: "telemetryManagementSection" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryManagementSection plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection'] --- import telemetryManagementSectionObj from './telemetry_management_section.devdocs.json'; diff --git a/api_docs/threat_intelligence.mdx b/api_docs/threat_intelligence.mdx index de406fb22c6d9..02f140c30ae19 100644 --- a/api_docs/threat_intelligence.mdx +++ b/api_docs/threat_intelligence.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/threatIntelligence title: "threatIntelligence" image: https://source.unsplash.com/400x175/?github description: API docs for the threatIntelligence plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'threatIntelligence'] --- import threatIntelligenceObj from './threat_intelligence.devdocs.json'; diff --git a/api_docs/timelines.devdocs.json b/api_docs/timelines.devdocs.json index 01a2502d9bcf6..6988125bc3dc9 100644 --- a/api_docs/timelines.devdocs.json +++ b/api_docs/timelines.devdocs.json @@ -4310,7 +4310,7 @@ "label": "TimelineEventsDetailsRequestOptionsInput", "description": [], "signature": [ - "{ indexName: string; factoryQueryType: ", + "{ indexName: string; eventId: string; factoryQueryType: ", { "pluginId": "timelines", "scope": "common", @@ -4318,7 +4318,7 @@ "section": "def-common.TimelineEventsQueries", "text": "TimelineEventsQueries" }, - ".details; eventId: string; params?: any; id?: string | undefined; indexType?: string | undefined; timerange?: { interval: string; from: string; to: string; } | undefined; defaultIndex?: string[] | undefined; runtimeMappings?: Record; id: string; } | undefined; fetch_fields?: string[] | undefined; input_field?: string | undefined; target_field?: string | undefined; target_index?: string | undefined; }> | undefined; filterQuery?: string | Record | { range: Record; } | { query_string: { query: string; analyze_wildcard: boolean; }; } | { match: Record; } | { term: Record; } | { bool: { filter: {}[]; should: {}[]; must: {}[]; must_not: {}[]; }; } | undefined; entityType?: \"events\" | \"sessions\" | undefined; filterStatus?: \"open\" | \"closed\" | \"acknowledged\" | undefined; pagination?: Zod.objectInputType<{ activePage: Zod.ZodNumber; cursorStart: Zod.ZodOptional; querySize: Zod.ZodNumber; }, Zod.ZodTypeAny, \"passthrough\"> | undefined; authFilter?: {} | undefined; }" + ".details; params?: any; id?: string | undefined; indexType?: string | undefined; timerange?: { interval: string; from: string; to: string; } | undefined; defaultIndex?: string[] | undefined; runtimeMappings?: Record; id: string; } | undefined; fetch_fields?: string[] | undefined; input_field?: string | undefined; target_field?: string | undefined; target_index?: string | undefined; }> | undefined; filterQuery?: string | Record | { range: Record; } | { query_string: { query: string; analyze_wildcard: boolean; }; } | { match: Record; } | { term: Record; } | { bool: { filter: {}[]; should: {}[]; must: {}[]; must_not: {}[]; }; } | undefined; entityType?: \"events\" | \"sessions\" | undefined; filterStatus?: \"open\" | \"closed\" | \"acknowledged\" | undefined; pagination?: Zod.objectInputType<{ activePage: Zod.ZodNumber; cursorStart: Zod.ZodOptional; querySize: Zod.ZodNumber; }, Zod.ZodTypeAny, \"passthrough\"> | undefined; authFilter?: {} | undefined; }" ], "path": "x-pack/plugins/timelines/common/api/search_strategy/timeline/events_details.ts", "deprecated": false, diff --git a/api_docs/timelines.mdx b/api_docs/timelines.mdx index d4bbc4707ce05..85e19a779fcb1 100644 --- a/api_docs/timelines.mdx +++ b/api_docs/timelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/timelines title: "timelines" image: https://source.unsplash.com/400x175/?github description: API docs for the timelines plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'timelines'] --- import timelinesObj from './timelines.devdocs.json'; diff --git a/api_docs/transform.mdx b/api_docs/transform.mdx index 39147e5378e60..affa02d717003 100644 --- a/api_docs/transform.mdx +++ b/api_docs/transform.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/transform title: "transform" image: https://source.unsplash.com/400x175/?github description: API docs for the transform plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'transform'] --- import transformObj from './transform.devdocs.json'; diff --git a/api_docs/triggers_actions_ui.mdx b/api_docs/triggers_actions_ui.mdx index 083bda21eb2d1..0d47bd15b0aa5 100644 --- a/api_docs/triggers_actions_ui.mdx +++ b/api_docs/triggers_actions_ui.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/triggersActionsUi title: "triggersActionsUi" image: https://source.unsplash.com/400x175/?github description: API docs for the triggersActionsUi plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'triggersActionsUi'] --- import triggersActionsUiObj from './triggers_actions_ui.devdocs.json'; diff --git a/api_docs/ui_actions.mdx b/api_docs/ui_actions.mdx index 2e6b20381c07c..31ec44123b680 100644 --- a/api_docs/ui_actions.mdx +++ b/api_docs/ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActions title: "uiActions" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActions plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActions'] --- import uiActionsObj from './ui_actions.devdocs.json'; diff --git a/api_docs/ui_actions_enhanced.mdx b/api_docs/ui_actions_enhanced.mdx index 1ca86ba226eaa..fd03fafd47578 100644 --- a/api_docs/ui_actions_enhanced.mdx +++ b/api_docs/ui_actions_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActionsEnhanced title: "uiActionsEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActionsEnhanced plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActionsEnhanced'] --- import uiActionsEnhancedObj from './ui_actions_enhanced.devdocs.json'; diff --git a/api_docs/unified_doc_viewer.mdx b/api_docs/unified_doc_viewer.mdx index 482e7e5576d75..be329f1d68424 100644 --- a/api_docs/unified_doc_viewer.mdx +++ b/api_docs/unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedDocViewer title: "unifiedDocViewer" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedDocViewer plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedDocViewer'] --- import unifiedDocViewerObj from './unified_doc_viewer.devdocs.json'; diff --git a/api_docs/unified_histogram.mdx b/api_docs/unified_histogram.mdx index 4361ece3e61c3..f87e40b23574c 100644 --- a/api_docs/unified_histogram.mdx +++ b/api_docs/unified_histogram.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedHistogram title: "unifiedHistogram" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedHistogram plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedHistogram'] --- import unifiedHistogramObj from './unified_histogram.devdocs.json'; diff --git a/api_docs/unified_search.mdx b/api_docs/unified_search.mdx index b7b31034f335a..543fbbed47f12 100644 --- a/api_docs/unified_search.mdx +++ b/api_docs/unified_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch title: "unifiedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch'] --- import unifiedSearchObj from './unified_search.devdocs.json'; diff --git a/api_docs/unified_search_autocomplete.mdx b/api_docs/unified_search_autocomplete.mdx index 27cca2576d67c..3704aa7fee9fb 100644 --- a/api_docs/unified_search_autocomplete.mdx +++ b/api_docs/unified_search_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch-autocomplete title: "unifiedSearch.autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch.autocomplete plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch.autocomplete'] --- import unifiedSearchAutocompleteObj from './unified_search_autocomplete.devdocs.json'; diff --git a/api_docs/uptime.mdx b/api_docs/uptime.mdx index c71cf9136aad6..131ac1a9e3fa3 100644 --- a/api_docs/uptime.mdx +++ b/api_docs/uptime.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uptime title: "uptime" image: https://source.unsplash.com/400x175/?github description: API docs for the uptime plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uptime'] --- import uptimeObj from './uptime.devdocs.json'; diff --git a/api_docs/url_forwarding.mdx b/api_docs/url_forwarding.mdx index c45c4af4b5fd9..1a66f0ce90e5d 100644 --- a/api_docs/url_forwarding.mdx +++ b/api_docs/url_forwarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/urlForwarding title: "urlForwarding" image: https://source.unsplash.com/400x175/?github description: API docs for the urlForwarding plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'urlForwarding'] --- import urlForwardingObj from './url_forwarding.devdocs.json'; diff --git a/api_docs/usage_collection.mdx b/api_docs/usage_collection.mdx index 73d9fd481c4bb..8cbb15b98d332 100644 --- a/api_docs/usage_collection.mdx +++ b/api_docs/usage_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/usageCollection title: "usageCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the usageCollection plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'usageCollection'] --- import usageCollectionObj from './usage_collection.devdocs.json'; diff --git a/api_docs/ux.mdx b/api_docs/ux.mdx index 426722344bb39..44a3838fc663c 100644 --- a/api_docs/ux.mdx +++ b/api_docs/ux.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ux title: "ux" image: https://source.unsplash.com/400x175/?github description: API docs for the ux plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ux'] --- import uxObj from './ux.devdocs.json'; diff --git a/api_docs/vis_default_editor.mdx b/api_docs/vis_default_editor.mdx index 8e21a32e0d1fe..a9d4ecaa9905f 100644 --- a/api_docs/vis_default_editor.mdx +++ b/api_docs/vis_default_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visDefaultEditor title: "visDefaultEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the visDefaultEditor plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visDefaultEditor'] --- import visDefaultEditorObj from './vis_default_editor.devdocs.json'; diff --git a/api_docs/vis_type_gauge.mdx b/api_docs/vis_type_gauge.mdx index 4e681895a92be..1649ba09e851e 100644 --- a/api_docs/vis_type_gauge.mdx +++ b/api_docs/vis_type_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeGauge title: "visTypeGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeGauge plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeGauge'] --- import visTypeGaugeObj from './vis_type_gauge.devdocs.json'; diff --git a/api_docs/vis_type_heatmap.mdx b/api_docs/vis_type_heatmap.mdx index 7f3c0cafd870a..6aa1ae0f7b41b 100644 --- a/api_docs/vis_type_heatmap.mdx +++ b/api_docs/vis_type_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeHeatmap title: "visTypeHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeHeatmap plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeHeatmap'] --- import visTypeHeatmapObj from './vis_type_heatmap.devdocs.json'; diff --git a/api_docs/vis_type_pie.mdx b/api_docs/vis_type_pie.mdx index b223a85dcb514..1127676e828c9 100644 --- a/api_docs/vis_type_pie.mdx +++ b/api_docs/vis_type_pie.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypePie title: "visTypePie" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypePie plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypePie'] --- import visTypePieObj from './vis_type_pie.devdocs.json'; diff --git a/api_docs/vis_type_table.mdx b/api_docs/vis_type_table.mdx index 92ca2c666f06d..59b92af7a6bf9 100644 --- a/api_docs/vis_type_table.mdx +++ b/api_docs/vis_type_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTable title: "visTypeTable" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTable plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTable'] --- import visTypeTableObj from './vis_type_table.devdocs.json'; diff --git a/api_docs/vis_type_timelion.mdx b/api_docs/vis_type_timelion.mdx index adad07c2041a7..27e8173ef6b31 100644 --- a/api_docs/vis_type_timelion.mdx +++ b/api_docs/vis_type_timelion.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimelion title: "visTypeTimelion" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimelion plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTimelion'] --- import visTypeTimelionObj from './vis_type_timelion.devdocs.json'; diff --git a/api_docs/vis_type_timeseries.mdx b/api_docs/vis_type_timeseries.mdx index 6015e51eb77fb..9514bfc168543 100644 --- a/api_docs/vis_type_timeseries.mdx +++ b/api_docs/vis_type_timeseries.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimeseries title: "visTypeTimeseries" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimeseries plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTimeseries'] --- import visTypeTimeseriesObj from './vis_type_timeseries.devdocs.json'; diff --git a/api_docs/vis_type_vega.mdx b/api_docs/vis_type_vega.mdx index c1a79ce86e11b..5a380a4eb9e8e 100644 --- a/api_docs/vis_type_vega.mdx +++ b/api_docs/vis_type_vega.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVega title: "visTypeVega" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVega plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeVega'] --- import visTypeVegaObj from './vis_type_vega.devdocs.json'; diff --git a/api_docs/vis_type_vislib.mdx b/api_docs/vis_type_vislib.mdx index 596e91ecb0594..202a97028f16f 100644 --- a/api_docs/vis_type_vislib.mdx +++ b/api_docs/vis_type_vislib.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVislib title: "visTypeVislib" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVislib plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeVislib'] --- import visTypeVislibObj from './vis_type_vislib.devdocs.json'; diff --git a/api_docs/vis_type_xy.mdx b/api_docs/vis_type_xy.mdx index 108c46cbc03b0..903cafb919b35 100644 --- a/api_docs/vis_type_xy.mdx +++ b/api_docs/vis_type_xy.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeXy title: "visTypeXy" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeXy plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeXy'] --- import visTypeXyObj from './vis_type_xy.devdocs.json'; diff --git a/api_docs/visualizations.mdx b/api_docs/visualizations.mdx index fc9c4d760ced3..cdb97c7827aaf 100644 --- a/api_docs/visualizations.mdx +++ b/api_docs/visualizations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visualizations title: "visualizations" image: https://source.unsplash.com/400x175/?github description: API docs for the visualizations plugin -date: 2024-09-23 +date: 2024-09-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; diff --git a/docs/CHANGELOG.asciidoc b/docs/CHANGELOG.asciidoc index c164708bc12d8..03bc26d3824ca 100644 --- a/docs/CHANGELOG.asciidoc +++ b/docs/CHANGELOG.asciidoc @@ -10,6 +10,7 @@ Review important information about the {kib} 8.x releases. +* <> * <> * <> * <> @@ -72,6 +73,52 @@ Review important information about the {kib} 8.x releases. -- +[[release-notes-8.15.2]] +== {kib} 8.15.2 + +The 8.15.2 release includes the following enhancements and bug fixes. + +[float] +[[enhancement-v8.15.2]] +=== Enhancements +Elastic Security solution:: +For the Elastic Security 8.15.2 release information, refer to {security-guide}/release-notes.html[_Elastic Security Solution Release Notes_]. +Fleet:: +* Bumps maximum supported package spec version to 3.2 ({kibana-pull}193574[#193574]). +Kibana security:: +* Adds a feature to add support for handling `syslogs with unsupported message body` ({kibana-pull}192817[#192817]). +* Automatic Import now performs reproducible sampling from the list of log entries instead of just truncating them ({kibana-pull}191598[#191598]). +* Adds support for Google Gemini, OpenAI, and Azure OpenAI connectors to Automatic Import ({kibana-pull}191577[#191577]). +* Displays better error messages for issues with logs sample file upload in Automatic Import ({kibana-pull}191310[#191310]). + +[float] +[[fixes-v8.15.2]] +=== Bug fixes +Alerting:: +* Fixes error when saving a rule after toggling alerts filter properties on and off ({kibana-pull}192522[#192522]). +Dashboards:: +* Fixes map layers that disappear from map panel when using session storage to continue editing a dashboard ({kibana-pull}193629[#193629]). +Discover:: +* Fixes "View conflicts" button when a data view ID has special characters ({kibana-pull}192374[#192374]). +Elastic Observability solution:: +* Fixes OpenTelemetry agent names ({kibana-pull}193134[#193134]). +* Resolves an issue for multi-step browser journeys where timings for cached resources within the same step were inaccurate within the waterfall chart ({kibana-pull}193089[#193089]). +* Updates parsing to skip replacing missing values in Synthetics monitors ({kibana-pull}192662[#192662]). +Elastic Security solution:: +For the Elastic Security 8.15.2 release information, refer to {security-guide}/release-notes.html[_Elastic Security Solution Release Notes_]. +Fleet:: +* Prevents extra agent_status call with empty policyId ({kibana-pull}192549[#192549]). +* Sets correct title for Restart upgrade agent modal under agent list ({kibana-pull}192536[#192536]). +Kibana security:: +* Stops removing message field for unstructured logs when using Automatic Import ({kibana-pull}193678[#193678]). +* Integrations created using Automatic Import now indicate that they have been developed by the `Community` instead of Elastic ({kibana-pull}193002[#193002]). +* Fixes issues with rendering the package manifest in Automatic Import ({kibana-pull}192316[#192316]). +Machine Learning:: +* Fixes deletion in Check interval input for anomaly detection rule ({kibana-pull}193420[#193420]). +* Fixes unnecessary ML services initialization during plugin setup ({kibana-pull}193153[#193153]). +* Fixes link to anomaly detection wizard from pattern analysis in Discover ({kibana-pull}192375[#192375]). +* Fixes an issue with the `http_endpoint` input config loading incorrectly in an Automatic Import workflow ({kibana-pull}191964[#191964]). + [[release-notes-8.15.1]] == {kib} 8.15.1 diff --git a/docs/setup/upgrade/resolving-migration-failures.asciidoc b/docs/setup/upgrade/resolving-migration-failures.asciidoc index 596674237eb7a..81ddac9a94900 100644 --- a/docs/setup/upgrade/resolving-migration-failures.asciidoc +++ b/docs/setup/upgrade/resolving-migration-failures.asciidoc @@ -120,10 +120,7 @@ If you fail to remedy this, your upgrade to 8.0+ will fail with a message like: [source,sh] -------------------------------------------- -Unable to complete saved object migrations for the [.kibana] index: Migration failed because some documents were found which use unknown saved object types: -- "firstDocId" (type "someType") -- "secondtDocId" (type "someType") -- "thirdDocId" (type "someOtherType") +Unable to complete saved object migrations for the [.kibana] index: Migration failed because some documents were found which use unknown saved object types: someType,someOtherType To proceed with the migration you can configure Kibana to discard unknown saved objects for this migration. -------------------------------------------- diff --git a/docs/user/ml/index.asciidoc b/docs/user/ml/index.asciidoc index 2e9e4bf0e007f..c13c1127124e6 100644 --- a/docs/user/ml/index.asciidoc +++ b/docs/user/ml/index.asciidoc @@ -19,10 +19,22 @@ if your data is stored in {es} and contains a time field, you can use the [role="screenshot"] image::user/ml/images/ml-data-visualizer-sample.png[{data-viz} for sample flight data] -You can also upload a CSV, NDJSON, or log file. The *{data-viz}* -identifies the file format and field mappings. You can then optionally import -that data into an {es} index. To change the default file size limit, see -<>. +You can upload different file formats for analysis with the *{data-viz}*. + +File formats supported up to 500 MB: +* CSV +* TSV +* NDJSON +* Log files + +File formats supported up to 60 MB: +* PDF +* Microsoft Office files (Word, Excel, PowerPoint) +* Plain Text (TXT) +* Rich Text (RTF) +* Open Document Format (ODF) + +The *{data-viz}* identifies the file format and field mappings, and you can import the data into an {es} index. To change the default file size limit, see <> in advanced settings. If {stack-security-features} are enabled, users must have the necessary privileges to use {ml-features}. Refer to diff --git a/examples/embeddable_examples/public/react_embeddables/saved_book/saved_book_editor.tsx b/examples/embeddable_examples/public/react_embeddables/saved_book/saved_book_editor.tsx index 69fb6053d882d..8a028eeadd49e 100644 --- a/examples/embeddable_examples/public/react_embeddables/saved_book/saved_book_editor.tsx +++ b/examples/embeddable_examples/public/react_embeddables/saved_book/saved_book_editor.tsx @@ -17,7 +17,6 @@ import { EuiFlyoutBody, EuiFlyoutFooter, EuiFlyoutHeader, - EuiFormControlLayout, EuiFormRow, EuiSwitch, EuiTextArea, @@ -128,48 +127,46 @@ export const SavedBookEditor = ({ - - - attributesManager.authorName.next(e.target.value)} - /> - - - attributesManager.bookTitle.next(e.target.value)} - /> - - - attributesManager.numberOfPages.next(+e.target.value)} - /> - - - attributesManager.bookSynopsis.next(e.target.value)} - /> - - + + attributesManager.authorName.next(e.target.value)} + /> + + + attributesManager.bookTitle.next(e.target.value)} + /> + + + attributesManager.numberOfPages.next(+e.target.value)} + /> + + + attributesManager.bookSynopsis.next(e.target.value)} + /> + diff --git a/oas_docs/output/kibana.serverless.staging.yaml b/oas_docs/output/kibana.serverless.staging.yaml index 15790040e6a46..58abfc3e1f7f9 100644 --- a/oas_docs/output/kibana.serverless.staging.yaml +++ b/oas_docs/output/kibana.serverless.staging.yaml @@ -5419,8 +5419,7 @@ paths: name: id_field required: true schema: - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_IdField + $ref: '#/components/schemas/Security_Entity_Analytics_API_IdField' - description: If 'wait_for' the request will wait for the index refresh. in: query name: refresh @@ -5443,7 +5442,7 @@ paths: type: boolean record: $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_AssetCriticalityRecord + #/components/schemas/Security_Entity_Analytics_API_AssetCriticalityRecord description: The deleted record if it existed. required: - deleted @@ -5452,7 +5451,7 @@ paths: description: Invalid request summary: Delete an asset criticality record tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API get: description: Get the asset criticality record for a specific entity. operationId: GetAssetCriticalityRecord @@ -5469,15 +5468,14 @@ paths: name: id_field required: true schema: - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_IdField + $ref: '#/components/schemas/Security_Entity_Analytics_API_IdField' responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_AssetCriticalityRecord + #/components/schemas/Security_Entity_Analytics_API_AssetCriticalityRecord description: Successful response '400': description: Invalid request @@ -5485,7 +5483,7 @@ paths: description: Criticality record not found summary: Get an asset criticality record tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API post: description: > Create or update an asset criticality record for a specific entity. @@ -5501,7 +5499,7 @@ paths: schema: allOf: - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_CreateAssetCriticalityRecord + #/components/schemas/Security_Entity_Analytics_API_CreateAssetCriticalityRecord - type: object properties: refresh: @@ -5518,13 +5516,13 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_AssetCriticalityRecord + #/components/schemas/Security_Entity_Analytics_API_AssetCriticalityRecord description: Successful response '400': description: Invalid request summary: Upsert an asset criticality record tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API /api/asset_criticality/bulk: post: description: > @@ -5553,7 +5551,7 @@ paths: records: items: $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_CreateAssetCriticalityRecord + #/components/schemas/Security_Entity_Analytics_API_CreateAssetCriticalityRecord maxItems: 1000 minItems: 1 type: array @@ -5577,11 +5575,11 @@ paths: errors: items: $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_AssetCriticalityBulkUploadErrorItem + #/components/schemas/Security_Entity_Analytics_API_AssetCriticalityBulkUploadErrorItem type: array stats: $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_AssetCriticalityBulkUploadStats + #/components/schemas/Security_Entity_Analytics_API_AssetCriticalityBulkUploadStats required: - errors - stats @@ -5590,7 +5588,7 @@ paths: description: File too large summary: Bulk upsert asset criticality records tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API /api/asset_criticality/list: get: description: List asset criticality records, paging, sorting and filtering as needed. @@ -5654,7 +5652,7 @@ paths: records: items: $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_AssetCriticalityRecord + #/components/schemas/Security_Entity_Analytics_API_AssetCriticalityRecord type: array total: minimum: 0 @@ -5667,7 +5665,7 @@ paths: description: Bulk upload successful summary: List asset criticality records tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API /api/data_views: get: operationId: getAllDataViewsDefault @@ -6224,18 +6222,17 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse + #/components/schemas/Security_Detections_API_PlatformErrorResponse description: Unsuccessful authentication response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Detections_API_SiemErrorResponse' description: Internal server error response summary: Returns user privileges for the Kibana space tags: - - Security Solution Detections API + - Security Detections API - Privileges API /api/detection_engine/rules: delete: @@ -6247,25 +6244,23 @@ paths: name: id required: false schema: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleObjectId' + $ref: '#/components/schemas/Security_Detections_API_RuleObjectId' - description: The rule's `rule_id` value. in: query name: rule_id required: false schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleResponse + $ref: '#/components/schemas/Security_Detections_API_RuleResponse' description: Indicates a successful call. summary: Delete a detection rule tags: - - Security Solution Detections API + - Security Detections API - Rules API get: description: Retrieve a detection rule using the `rule_id` or `id` field. @@ -6276,25 +6271,23 @@ paths: name: id required: false schema: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleObjectId' + $ref: '#/components/schemas/Security_Detections_API_RuleObjectId' - description: The rule's `rule_id` value. in: query name: rule_id required: false schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleResponse + $ref: '#/components/schemas/Security_Detections_API_RuleResponse' description: Indicates a successful call. summary: Retrieve a detection rule tags: - - Security Solution Detections API + - Security Detections API - Rules API patch: description: >- @@ -6305,20 +6298,18 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RulePatchProps + $ref: '#/components/schemas/Security_Detections_API_RulePatchProps' required: true responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleResponse + $ref: '#/components/schemas/Security_Detections_API_RuleResponse' description: Indicates a successful call. summary: Patch a detection rule tags: - - Security Solution Detections API + - Security Detections API - Rules API post: description: Create a new detection rule. @@ -6327,20 +6318,18 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleCreateProps + $ref: '#/components/schemas/Security_Detections_API_RuleCreateProps' required: true responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleResponse + $ref: '#/components/schemas/Security_Detections_API_RuleResponse' description: Indicates a successful call. summary: Create a detection rule tags: - - Security Solution Detections API + - Security Detections API - Rules API put: description: > @@ -6355,20 +6344,18 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleUpdateProps + $ref: '#/components/schemas/Security_Detections_API_RuleUpdateProps' required: true responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleResponse + $ref: '#/components/schemas/Security_Detections_API_RuleResponse' description: Indicates a successful call. summary: Update a detection rule tags: - - Security Solution Detections API + - Security Detections API - Rules API /api/detection_engine/rules/_bulk_action: post: @@ -6389,20 +6376,16 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: oneOf: + - $ref: '#/components/schemas/Security_Detections_API_BulkDeleteRules' - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkDeleteRules - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkDisableRules - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkEnableRules - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkExportRules + #/components/schemas/Security_Detections_API_BulkDisableRules + - $ref: '#/components/schemas/Security_Detections_API_BulkEnableRules' + - $ref: '#/components/schemas/Security_Detections_API_BulkExportRules' - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkDuplicateRules + #/components/schemas/Security_Detections_API_BulkDuplicateRules - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkManualRuleRun - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkEditRules + #/components/schemas/Security_Detections_API_BulkManualRuleRun + - $ref: '#/components/schemas/Security_Detections_API_BulkEditRules' responses: '200': content: @@ -6410,13 +6393,13 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkEditActionResponse + #/components/schemas/Security_Detections_API_BulkEditActionResponse - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkExportActionResponse + #/components/schemas/Security_Detections_API_BulkExportActionResponse description: OK summary: Apply a bulk action to detection rules tags: - - Security Solution Detections API + - Security Detections API - Bulk API /api/detection_engine/rules/_export: post: @@ -6463,7 +6446,7 @@ paths: properties: rule_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + #/components/schemas/Security_Detections_API_RuleSignatureId required: - rule_id type: array @@ -6481,7 +6464,7 @@ paths: description: Indicates a successful call. summary: Export detection rules tags: - - Security Solution Detections API + - Security Detections API - Import/Export API /api/detection_engine/rules/_find: get: @@ -6508,14 +6491,13 @@ paths: name: sort_field required: false schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_FindRulesSortField + $ref: '#/components/schemas/Security_Detections_API_FindRulesSortField' - description: Sort order in: query name: sort_order required: false schema: - $ref: '#/components/schemas/Security_Solution_Detections_API_SortOrder' + $ref: '#/components/schemas/Security_Detections_API_SortOrder' - description: Page number in: query name: page @@ -6542,7 +6524,7 @@ paths: data: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleResponse + #/components/schemas/Security_Detections_API_RuleResponse type: array page: type: integer @@ -6558,7 +6540,7 @@ paths: description: Successful response summary: List all detection rules tags: - - Security Solution Detections API + - Security Detections API - Rules API /api/detection_engine/rules/_import: post: @@ -6626,8 +6608,7 @@ paths: properties: action_connectors_errors: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ErrorSchema + $ref: '#/components/schemas/Security_Detections_API_ErrorSchema' type: array action_connectors_success: type: boolean @@ -6637,17 +6618,15 @@ paths: action_connectors_warnings: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_WarningSchema + #/components/schemas/Security_Detections_API_WarningSchema type: array errors: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ErrorSchema + $ref: '#/components/schemas/Security_Detections_API_ErrorSchema' type: array exceptions_errors: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ErrorSchema + $ref: '#/components/schemas/Security_Detections_API_ErrorSchema' type: array exceptions_success: type: boolean @@ -6677,7 +6656,7 @@ paths: description: Indicates a successful call. summary: Import detection rules tags: - - Security Solution Detections API + - Security Detections API - Import/Export API /api/detection_engine/rules/{id}/exceptions: post: @@ -6689,7 +6668,7 @@ paths: name: id required: true schema: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_RuleId' + $ref: '#/components/schemas/Security_Exceptions_API_RuleId' requestBody: content: application/json; Elastic-Api-Version=2023-10-31: @@ -6699,7 +6678,7 @@ paths: items: items: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_CreateRuleExceptionListItemProps + #/components/schemas/Security_Exceptions_API_CreateRuleExceptionListItemProps type: array required: - items @@ -6712,7 +6691,7 @@ paths: schema: items: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItem + #/components/schemas/Security_Exceptions_API_ExceptionListItem type: array description: Successful response '400': @@ -6721,34 +6700,33 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Exceptions_API_SiemErrorResponse description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Not enough privileges response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response summary: Create rule exception list items tags: - - Security Solution Exceptions API + - Security Exceptions API /api/detection_engine/rules/preview: post: operationId: RulePreview @@ -6768,44 +6746,44 @@ paths: anyOf: - allOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlRuleCreateProps + #/components/schemas/Security_Detections_API_EqlRuleCreateProps - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RulePreviewParams + #/components/schemas/Security_Detections_API_RulePreviewParams - allOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRuleCreateProps + #/components/schemas/Security_Detections_API_QueryRuleCreateProps - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RulePreviewParams + #/components/schemas/Security_Detections_API_RulePreviewParams - allOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRuleCreateProps + #/components/schemas/Security_Detections_API_SavedQueryRuleCreateProps - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RulePreviewParams + #/components/schemas/Security_Detections_API_RulePreviewParams - allOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRuleCreateProps + #/components/schemas/Security_Detections_API_ThresholdRuleCreateProps - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RulePreviewParams + #/components/schemas/Security_Detections_API_RulePreviewParams - allOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRuleCreateProps + #/components/schemas/Security_Detections_API_ThreatMatchRuleCreateProps - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RulePreviewParams + #/components/schemas/Security_Detections_API_RulePreviewParams - allOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRuleCreateProps + #/components/schemas/Security_Detections_API_MachineLearningRuleCreateProps - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RulePreviewParams + #/components/schemas/Security_Detections_API_RulePreviewParams - allOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRuleCreateProps + #/components/schemas/Security_Detections_API_NewTermsRuleCreateProps - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RulePreviewParams + #/components/schemas/Security_Detections_API_RulePreviewParams - allOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlRuleCreateProps + #/components/schemas/Security_Detections_API_EsqlRuleCreateProps - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RulePreviewParams + #/components/schemas/Security_Detections_API_RulePreviewParams discriminator: propertyName: type description: >- @@ -6824,11 +6802,11 @@ paths: logs: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RulePreviewLogs + #/components/schemas/Security_Detections_API_RulePreviewLogs type: array previewId: $ref: >- - #/components/schemas/Security_Solution_Detections_API_NonEmptyString + #/components/schemas/Security_Detections_API_NonEmptyString required: - logs description: Successful response @@ -6838,27 +6816,26 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse + #/components/schemas/Security_Detections_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse + #/components/schemas/Security_Detections_API_SiemErrorResponse description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse + #/components/schemas/Security_Detections_API_PlatformErrorResponse description: Unsuccessful authentication response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Detections_API_SiemErrorResponse' description: Internal server error response summary: Preview rule alerts generated on specified time range tags: - - Security Solution Detections API + - Security Detections API - Rule preview API /api/detection_engine/signals/assignees: post: @@ -6874,12 +6851,10 @@ paths: type: object properties: assignees: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertAssignees + $ref: '#/components/schemas/Security_Detections_API_AlertAssignees' description: Details about the assignees to assign and unassign. ids: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertIds + $ref: '#/components/schemas/Security_Detections_API_AlertIds' description: List of alerts ids to assign and unassign passed assignees. required: - assignees @@ -6892,7 +6867,7 @@ paths: description: Invalid request. summary: Assign and unassign users from detection alerts tags: - - Security Solution Detections API + - Security Detections API /api/detection_engine/signals/search: post: description: Find and/or aggregate detection alerts that match the given query. @@ -6928,8 +6903,7 @@ paths: minimum: 0 type: integer sort: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsSort + $ref: '#/components/schemas/Security_Detections_API_AlertsSort' track_total_hits: type: boolean description: Search and/or aggregation query @@ -6949,27 +6923,26 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse + #/components/schemas/Security_Detections_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse + #/components/schemas/Security_Detections_API_SiemErrorResponse description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse + #/components/schemas/Security_Detections_API_PlatformErrorResponse description: Unsuccessful authentication response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Detections_API_SiemErrorResponse' description: Internal server error response summary: Find and/or aggregate detection alerts tags: - - Security Solution Detections API + - Security Detections API - Alerts API /api/detection_engine/signals/status: post: @@ -6981,9 +6954,9 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SetAlertsStatusByIds + #/components/schemas/Security_Detections_API_SetAlertsStatusByIds - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SetAlertsStatusByQuery + #/components/schemas/Security_Detections_API_SetAlertsStatusByQuery description: >- An object containing desired status and explicit alert ids or a query to select alerts @@ -7003,27 +6976,26 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse + #/components/schemas/Security_Detections_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse + #/components/schemas/Security_Detections_API_SiemErrorResponse description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse + #/components/schemas/Security_Detections_API_PlatformErrorResponse description: Unsuccessful authentication response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Detections_API_SiemErrorResponse' description: Internal server error response summary: Set a detection alert status tags: - - Security Solution Detections API + - Security Detections API - Alerts API /api/detection_engine/signals/tags: post: @@ -7039,11 +7011,9 @@ paths: type: object properties: ids: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertIds + $ref: '#/components/schemas/Security_Detections_API_AlertIds' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SetAlertTags + $ref: '#/components/schemas/Security_Detections_API_SetAlertTags' required: - ids - tags @@ -7066,27 +7036,26 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse + #/components/schemas/Security_Detections_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse + #/components/schemas/Security_Detections_API_SiemErrorResponse description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse + #/components/schemas/Security_Detections_API_PlatformErrorResponse description: Unsuccessful authentication response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Detections_API_SiemErrorResponse' description: Internal server error response summary: Add and remove detection alert tags tags: - - Security Solution Detections API + - Security Detections API - Alerts API /api/detection_engine/tags: get: @@ -7097,12 +7066,11 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' description: Indicates a successful call summary: List all detection rule tags tags: - - Security Solution Detections API + - Security Detections API - Tags API /api/endpoint_list: post: @@ -7117,7 +7085,7 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_EndpointList + #/components/schemas/Security_Endpoint_Exceptions_API_EndpointList description: Successful response '400': content: @@ -7125,34 +7093,34 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_SiemErrorResponse description: Invalid input data '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_PlatformErrorResponse description: Unsuccessful authentication '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_PlatformErrorResponse description: Insufficient privileges '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_SiemErrorResponse description: Internal server error summary: Create an endpoint exception list tags: - - Security Solution Endpoint Exceptions API + - Security Endpoint Exceptions API /api/endpoint_list/items: delete: description: >- @@ -7166,21 +7134,21 @@ paths: required: false schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemId + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemId - description: Either `id` or `item_id` must be specified in: query name: item_id required: false schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemHumanId + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemHumanId responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_EndpointListItem + #/components/schemas/Security_Endpoint_Exceptions_API_EndpointListItem description: Successful response '400': content: @@ -7188,41 +7156,41 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_SiemErrorResponse description: Invalid input data '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_PlatformErrorResponse description: Unsuccessful authentication '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_PlatformErrorResponse description: Insufficient privileges '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_SiemErrorResponse description: Endpoint list item not found '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_SiemErrorResponse description: Internal server error summary: Delete an endpoint exception list item tags: - - Security Solution Endpoint Exceptions API + - Security Endpoint Exceptions API get: description: >- Get the details of an endpoint exception list item using the `id` or @@ -7235,14 +7203,14 @@ paths: required: false schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemId + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemId - description: Either `id` or `item_id` must be specified in: query name: item_id required: false schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemHumanId + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemHumanId responses: '200': content: @@ -7250,7 +7218,7 @@ paths: schema: items: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_EndpointListItem + #/components/schemas/Security_Endpoint_Exceptions_API_EndpointListItem type: array description: Successful response '400': @@ -7259,41 +7227,41 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_SiemErrorResponse description: Invalid input data '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_PlatformErrorResponse description: Unsuccessful authentication '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_PlatformErrorResponse description: Insufficient privileges '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_SiemErrorResponse description: Endpoint list item not found '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_SiemErrorResponse description: Internal server error summary: Get an endpoint exception list item tags: - - Security Solution Endpoint Exceptions API + - Security Endpoint Exceptions API post: description: >- Create an endpoint exception list item, and associate it with the @@ -7307,34 +7275,34 @@ paths: properties: comments: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemCommentArray + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemCommentArray default: [] description: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemDescription + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemDescription entries: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryArray + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemEntryArray item_id: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemHumanId + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemHumanId meta: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemMeta + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemMeta name: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemName + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemName os_types: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemOsTypeArray + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemOsTypeArray default: [] tags: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemTags + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemTags default: [] type: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemType + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemType required: - type - name @@ -7348,7 +7316,7 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_EndpointListItem + #/components/schemas/Security_Endpoint_Exceptions_API_EndpointListItem description: Successful response '400': content: @@ -7356,41 +7324,41 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_SiemErrorResponse description: Invalid input data '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_PlatformErrorResponse description: Unsuccessful authentication '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_PlatformErrorResponse description: Insufficient privileges '409': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_SiemErrorResponse description: Endpoint list item already exists '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_SiemErrorResponse description: Internal server error summary: Create an endpoint exception list item tags: - - Security Solution Endpoint Exceptions API + - Security Endpoint Exceptions API put: description: >- Update an endpoint exception list item using the `id` or `item_id` @@ -7406,38 +7374,38 @@ paths: type: string comments: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemCommentArray + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemCommentArray default: [] description: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemDescription + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemDescription entries: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryArray + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemEntryArray id: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemId + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemId description: Either `id` or `item_id` must be specified item_id: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemHumanId + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemHumanId description: Either `id` or `item_id` must be specified meta: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemMeta + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemMeta name: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemName + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemName os_types: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemOsTypeArray + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemOsTypeArray default: [] tags: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemTags + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemTags type: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemType + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemType required: - type - name @@ -7451,7 +7419,7 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_EndpointListItem + #/components/schemas/Security_Endpoint_Exceptions_API_EndpointListItem description: Successful response '400': content: @@ -7459,41 +7427,41 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_SiemErrorResponse description: Invalid input data '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_PlatformErrorResponse description: Unsuccessful authentication '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_PlatformErrorResponse description: Insufficient privileges '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_SiemErrorResponse description: Endpoint list item not found '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_SiemErrorResponse description: Internal server error summary: Update an endpoint exception list item tags: - - Security Solution Endpoint Exceptions API + - Security Endpoint Exceptions API /api/endpoint_list/items/_find: get: description: Get a list of all endpoint exception list items. @@ -7509,7 +7477,7 @@ paths: required: false schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_FindEndpointListItemsFilter + #/components/schemas/Security_Endpoint_Exceptions_API_FindEndpointListItemsFilter - description: The page number to return in: query name: page @@ -7530,7 +7498,7 @@ paths: required: false schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString + #/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString - description: Determines the sort order, which can be `desc` or `asc` in: query name: sort_order @@ -7550,7 +7518,7 @@ paths: data: items: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_EndpointListItem + #/components/schemas/Security_Endpoint_Exceptions_API_EndpointListItem type: array page: minimum: 0 @@ -7575,41 +7543,41 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_SiemErrorResponse description: Invalid input data '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_PlatformErrorResponse description: Unsuccessful authentication '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_PlatformErrorResponse description: Insufficient privileges '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_SiemErrorResponse description: Endpoint list not found '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_SiemErrorResponse description: Internal server error summary: Get endpoint exception list items tags: - - Security Solution Endpoint Exceptions API + - Security Endpoint Exceptions API /api/endpoint/action: get: description: Get a list of all response actions. @@ -7620,18 +7588,18 @@ paths: required: true schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_GetEndpointActionListRouteQuery + #/components/schemas/Security_Endpoint_Management_API_GetEndpointActionListRouteQuery responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse + #/components/schemas/Security_Endpoint_Management_API_SuccessResponse description: OK summary: Get response actions tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action_log/{agent_id}: get: deprecated: true @@ -7642,25 +7610,24 @@ paths: name: agent_id required: true schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentId + $ref: '#/components/schemas/Security_Endpoint_Management_API_AgentId' - in: query name: query required: true schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_ActionLogRequestQuery + #/components/schemas/Security_Endpoint_Management_API_ActionLogRequestQuery responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse + #/components/schemas/Security_Endpoint_Management_API_SuccessResponse description: OK summary: Get an action request log tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action_status: get: description: Get the status of response actions for the specified agent IDs. @@ -7673,19 +7640,18 @@ paths: type: object properties: agent_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentIds + $ref: '#/components/schemas/Security_Endpoint_Management_API_AgentIds' responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_ActionStatusSuccessResponse + #/components/schemas/Security_Endpoint_Management_API_ActionStatusSuccessResponse description: OK summary: Get response actions status tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action/{action_id}: get: description: Get the details of a response action using the action ID. @@ -7702,11 +7668,11 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse + #/components/schemas/Security_Endpoint_Management_API_SuccessResponse description: OK summary: Get action details tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action/{action_id}/file/{file_id}: get: description: Get information for the specified file using the file ID. @@ -7728,11 +7694,11 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse + #/components/schemas/Security_Endpoint_Management_API_SuccessResponse description: OK summary: Get file information tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action/{action_id}/file/{file_id}/download: get: description: Download a file from an endpoint. @@ -7754,11 +7720,11 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse + #/components/schemas/Security_Endpoint_Management_API_SuccessResponse description: OK summary: Download a file tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action/execute: post: description: Run a shell command on an endpoint. @@ -7768,7 +7734,7 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_ExecuteRouteRequestBody + #/components/schemas/Security_Endpoint_Management_API_ExecuteRouteRequestBody required: true responses: '200': @@ -7776,11 +7742,11 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse + #/components/schemas/Security_Endpoint_Management_API_SuccessResponse description: OK summary: Run a command tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action/get_file: post: description: Get a file from an endpoint. @@ -7790,7 +7756,7 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_GetFileRouteRequestBody + #/components/schemas/Security_Endpoint_Management_API_GetFileRouteRequestBody required: true responses: '200': @@ -7798,11 +7764,11 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse + #/components/schemas/Security_Endpoint_Management_API_SuccessResponse description: OK summary: Get a file tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action/isolate: post: description: >- @@ -7814,7 +7780,7 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_IsolateRouteRequestBody + #/components/schemas/Security_Endpoint_Management_API_IsolateRouteRequestBody required: true responses: '200': @@ -7822,11 +7788,11 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse + #/components/schemas/Security_Endpoint_Management_API_SuccessResponse description: OK summary: Isolate an endpoint tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action/kill_process: post: description: Terminate a running process on an endpoint. @@ -7836,7 +7802,7 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_KillProcessRouteRequestBody + #/components/schemas/Security_Endpoint_Management_API_KillProcessRouteRequestBody required: true responses: '200': @@ -7844,11 +7810,11 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse + #/components/schemas/Security_Endpoint_Management_API_SuccessResponse description: OK summary: Terminate a process tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action/running_procs: post: description: Get a list of all processes running on an endpoint. @@ -7858,7 +7824,7 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_GetProcessesRouteRequestBody + #/components/schemas/Security_Endpoint_Management_API_GetProcessesRouteRequestBody required: true responses: '200': @@ -7866,11 +7832,11 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse + #/components/schemas/Security_Endpoint_Management_API_SuccessResponse description: OK summary: Get running processes tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action/scan: post: description: Scan a specific file or directory on an endpoint for malware. @@ -7880,7 +7846,7 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_ScanRouteRequestBody + #/components/schemas/Security_Endpoint_Management_API_ScanRouteRequestBody required: true responses: '200': @@ -7888,11 +7854,11 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse + #/components/schemas/Security_Endpoint_Management_API_SuccessResponse description: OK summary: Scan a file or directory tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action/state: get: description: >- @@ -7905,11 +7871,11 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_ActionStateSuccessResponse + #/components/schemas/Security_Endpoint_Management_API_ActionStateSuccessResponse description: OK summary: Get actions state tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action/suspend_process: post: description: Suspend a running process on an endpoint. @@ -7919,7 +7885,7 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuspendProcessRouteRequestBody + #/components/schemas/Security_Endpoint_Management_API_SuspendProcessRouteRequestBody required: true responses: '200': @@ -7927,11 +7893,11 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse + #/components/schemas/Security_Endpoint_Management_API_SuccessResponse description: OK summary: Suspend a process tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action/unisolate: post: description: Release an isolated endpoint, allowing it to rejoin a network. @@ -7941,7 +7907,7 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_UnisolateRouteRequestBody + #/components/schemas/Security_Endpoint_Management_API_UnisolateRouteRequestBody required: true responses: '200': @@ -7949,11 +7915,11 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse + #/components/schemas/Security_Endpoint_Management_API_SuccessResponse description: OK summary: Release an isolated endpoint tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action/upload: post: description: Upload a file to an endpoint. @@ -7963,7 +7929,7 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_UploadRouteRequestBody + #/components/schemas/Security_Endpoint_Management_API_UploadRouteRequestBody required: true responses: '200': @@ -7971,11 +7937,11 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse + #/components/schemas/Security_Endpoint_Management_API_SuccessResponse description: OK summary: Upload a file tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/metadata: get: operationId: GetEndpointMetadataList @@ -7985,18 +7951,18 @@ paths: required: true schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_ListRequestQuery + #/components/schemas/Security_Endpoint_Management_API_ListRequestQuery responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse + #/components/schemas/Security_Endpoint_Management_API_SuccessResponse description: OK summary: Get a metadata list tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/metadata/{id}: get: operationId: GetEndpointMetadata @@ -8012,11 +7978,11 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse + #/components/schemas/Security_Endpoint_Management_API_SuccessResponse description: OK summary: Get metadata tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/metadata/transforms: get: operationId: GetEndpointMetadataTransform @@ -8026,11 +7992,11 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse + #/components/schemas/Security_Endpoint_Management_API_SuccessResponse description: OK summary: Get metadata transforms tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/policy_response: get: operationId: GetPolicyResponse @@ -8042,19 +8008,18 @@ paths: type: object properties: agentId: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentId + $ref: '#/components/schemas/Security_Endpoint_Management_API_AgentId' responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse + #/components/schemas/Security_Endpoint_Management_API_SuccessResponse description: OK summary: Get a policy response tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/policy/summaries: get: deprecated: true @@ -8077,11 +8042,11 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse + #/components/schemas/Security_Endpoint_Management_API_SuccessResponse description: OK summary: Get an agent policy summary tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/protection_updates_note/{package_policy_id}: get: operationId: GetProtectionUpdatesNote @@ -8097,11 +8062,11 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_ProtectionUpdatesNoteResponse + #/components/schemas/Security_Endpoint_Management_API_ProtectionUpdatesNoteResponse description: OK summary: Get a protection updates note tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API post: operationId: CreateUpdateProtectionUpdatesNote parameters: @@ -8125,11 +8090,11 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_ProtectionUpdatesNoteResponse + #/components/schemas/Security_Endpoint_Management_API_ProtectionUpdatesNoteResponse description: OK summary: Create or update a protection updates note tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/suggestions/{suggestion_type}: post: operationId: GetEndpointSuggestions @@ -8162,14 +8127,14 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse + #/components/schemas/Security_Endpoint_Management_API_SuccessResponse description: OK summary: Get suggestions tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/entity_store/engines: get: - operationId: ListEntityStoreEngines + operationId: ListEntityEngines responses: '200': content: @@ -8182,23 +8147,22 @@ paths: engines: items: $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_EngineDescriptor + #/components/schemas/Security_Entity_Analytics_API_EngineDescriptor type: array description: Successful response - summary: List the Entity Store engines + summary: List the Entity Engines tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API /api/entity_store/engines/{entityType}: delete: - operationId: DeleteEntityStore + operationId: DeleteEntityEngine parameters: - - description: The entity type of the store (either 'user' or 'host'). + - description: The entity type of the engine (either 'user' or 'host'). in: path name: entityType required: true schema: - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_EntityType + $ref: '#/components/schemas/Security_Entity_Analytics_API_EntityType' - description: Control flag to also delete the entity data. in: query name: data @@ -8215,41 +8179,39 @@ paths: deleted: type: boolean description: Successful response - summary: Delete the Entity Store engine + summary: Delete the Entity Engine tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API get: - operationId: GetEntityStoreEngine + operationId: GetEntityEngine parameters: - - description: The entity type of the store (either 'user' or 'host'). + - description: The entity type of the engine (either 'user' or 'host'). in: path name: entityType required: true schema: - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_EntityType + $ref: '#/components/schemas/Security_Entity_Analytics_API_EntityType' responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_EngineDescriptor + #/components/schemas/Security_Entity_Analytics_API_EngineDescriptor description: Successful response - summary: Get the Entity Store engine + summary: Get an Entity Engine tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API /api/entity_store/engines/{entityType}/init: post: - operationId: InitEntityStore + operationId: InitEntityEngine parameters: - - description: The entity type of the store (either 'user' or 'host'). + - description: The entity type of the engine (either 'user' or 'host'). in: path name: entityType required: true schema: - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_EntityType + $ref: '#/components/schemas/Security_Entity_Analytics_API_EntityType' requestBody: content: application/json; Elastic-Api-Version=2023-10-31: @@ -8260,7 +8222,7 @@ paths: type: string indexPattern: $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_IndexPattern + #/components/schemas/Security_Entity_Analytics_API_IndexPattern description: Schema for the engine initialization required: true responses: @@ -8269,22 +8231,21 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_EngineDescriptor + #/components/schemas/Security_Entity_Analytics_API_EngineDescriptor description: Successful response - summary: Initialize the Entity Store + summary: Initialize an Entity Engine tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API /api/entity_store/engines/{entityType}/start: post: - operationId: StartEntityStore + operationId: StartEntityEngine parameters: - - description: The entity type of the store (either 'user' or 'host'). + - description: The entity type of the engine (either 'user' or 'host'). in: path name: entityType required: true schema: - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_EntityType + $ref: '#/components/schemas/Security_Entity_Analytics_API_EntityType' responses: '200': content: @@ -8295,20 +8256,19 @@ paths: started: type: boolean description: Successful response - summary: Start the Entity Store engine + summary: Start an Entity Engine tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API /api/entity_store/engines/{entityType}/stats: post: - operationId: GetEntityStoreStats + operationId: GetEntityEngineStats parameters: - - description: The entity type of the store (either 'user' or 'host'). + - description: The entity type of the engine (either 'user' or 'host'). in: path name: entityType required: true schema: - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_EntityType + $ref: '#/components/schemas/Security_Entity_Analytics_API_EntityType' responses: '200': content: @@ -8318,36 +8278,35 @@ paths: properties: indexPattern: $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_IndexPattern + #/components/schemas/Security_Entity_Analytics_API_IndexPattern indices: items: type: object type: array status: $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_EngineStatus + #/components/schemas/Security_Entity_Analytics_API_EngineStatus transforms: items: type: object type: array type: $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_EntityType + #/components/schemas/Security_Entity_Analytics_API_EntityType description: Successful response - summary: Get the Entity Store engine stats + summary: Get Entity Engine stats tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API /api/entity_store/engines/{entityType}/stop: post: - operationId: StopEntityStore + operationId: StopEntityEngine parameters: - - description: The entity type of the store (either 'user' or 'host'). + - description: The entity type of the engine (either 'user' or 'host'). in: path name: entityType required: true schema: - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_EntityType + $ref: '#/components/schemas/Security_Entity_Analytics_API_EntityType' responses: '200': content: @@ -8358,9 +8317,9 @@ paths: stopped: type: boolean description: Successful response - summary: Stop the Entity Store engine + summary: Stop an Entity Engine tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API /api/entity_store/entities/list: get: description: List entities records, paging, sorting and filtering as needed. @@ -8403,8 +8362,7 @@ paths: required: true schema: items: - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_EntityType + $ref: '#/components/schemas/Security_Entity_Analytics_API_EntityType' type: array responses: '200': @@ -8415,7 +8373,7 @@ paths: properties: inspect: $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_InspectQuery + #/components/schemas/Security_Entity_Analytics_API_InspectQuery page: minimum: 1 type: integer @@ -8426,7 +8384,7 @@ paths: records: items: $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_Entity + #/components/schemas/Security_Entity_Analytics_API_Entity type: array total: minimum: 0 @@ -8439,7 +8397,7 @@ paths: description: Entities returned successfully summary: List Entity Store Entities tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API /api/exception_lists: delete: description: Delete an exception list using the `id` or `list_id` field. @@ -8450,29 +8408,26 @@ paths: name: id required: false schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListId + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListId' - description: Either `id` or `list_id` must be specified in: query name: list_id required: false schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListHumanId + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListHumanId' - in: query name: namespace_type required: false schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType + #/components/schemas/Security_Exceptions_API_ExceptionNamespaceType default: single responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionList + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionList' description: Successful response '400': content: @@ -8480,41 +8435,39 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Exceptions_API_SiemErrorResponse description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Exception list not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response summary: Delete an exception list tags: - - Security Solution Exceptions API + - Security Exceptions API get: description: Get the details of an exception list using the `id` or `list_id` field. operationId: ReadExceptionList @@ -8524,29 +8477,26 @@ paths: name: id required: false schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListId + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListId' - description: Either `id` or `list_id` must be specified in: query name: list_id required: false schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListHumanId + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListHumanId' - in: query name: namespace_type required: false schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType + #/components/schemas/Security_Exceptions_API_ExceptionNamespaceType default: single responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionList + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionList' description: Successful response '400': content: @@ -8554,41 +8504,39 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Exceptions_API_SiemErrorResponse description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Exception list item not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response summary: Get exception list details tags: - - Security Solution Exceptions API + - Security Exceptions API post: description: > An exception list groups exception items and can be associated with @@ -8612,33 +8560,33 @@ paths: properties: description: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListDescription + #/components/schemas/Security_Exceptions_API_ExceptionListDescription list_id: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListHumanId + #/components/schemas/Security_Exceptions_API_ExceptionListHumanId meta: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListMeta + #/components/schemas/Security_Exceptions_API_ExceptionListMeta name: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListName + #/components/schemas/Security_Exceptions_API_ExceptionListName namespace_type: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType + #/components/schemas/Security_Exceptions_API_ExceptionNamespaceType default: single os_types: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListOsTypeArray + #/components/schemas/Security_Exceptions_API_ExceptionListOsTypeArray tags: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListTags + #/components/schemas/Security_Exceptions_API_ExceptionListTags default: [] type: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListType + #/components/schemas/Security_Exceptions_API_ExceptionListType version: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListVersion + #/components/schemas/Security_Exceptions_API_ExceptionListVersion default: 1 required: - name @@ -8651,8 +8599,7 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionList + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionList' description: Successful response '400': content: @@ -8660,41 +8607,39 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Exceptions_API_SiemErrorResponse description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Not enough privileges response '409': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Exception list already exists response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response summary: Create an exception list tags: - - Security Solution Exceptions API + - Security Exceptions API put: description: Update an exception list using the `id` or `list_id` field. operationId: UpdateExceptionList @@ -8708,36 +8653,35 @@ paths: type: string description: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListDescription + #/components/schemas/Security_Exceptions_API_ExceptionListDescription id: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListId + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListId' list_id: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListHumanId + #/components/schemas/Security_Exceptions_API_ExceptionListHumanId meta: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListMeta + #/components/schemas/Security_Exceptions_API_ExceptionListMeta name: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListName + #/components/schemas/Security_Exceptions_API_ExceptionListName namespace_type: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType + #/components/schemas/Security_Exceptions_API_ExceptionNamespaceType default: single os_types: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListOsTypeArray + #/components/schemas/Security_Exceptions_API_ExceptionListOsTypeArray default: [] tags: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListTags + #/components/schemas/Security_Exceptions_API_ExceptionListTags type: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListType + #/components/schemas/Security_Exceptions_API_ExceptionListType version: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListVersion + #/components/schemas/Security_Exceptions_API_ExceptionListVersion required: - name - description @@ -8749,8 +8693,7 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionList + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionList' description: Successful response '400': content: @@ -8758,41 +8701,39 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Exceptions_API_SiemErrorResponse description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Exception list not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response summary: Update an exception list tags: - - Security Solution Exceptions API + - Security Exceptions API /api/exception_lists/_duplicate: post: description: Duplicate an existing exception list. @@ -8803,14 +8744,13 @@ paths: name: list_id required: true schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListHumanId + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListHumanId' - in: query name: namespace_type required: true schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType + #/components/schemas/Security_Exceptions_API_ExceptionNamespaceType - description: >- Determines whether to include expired exceptions in the exported list @@ -8828,8 +8768,7 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionList + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionList' description: Successful response '400': content: @@ -8837,41 +8776,39 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Exceptions_API_SiemErrorResponse description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Not enough privileges response '405': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Exception list to duplicate not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response summary: Duplicate an exception list tags: - - Security Solution Exceptions API + - Security Exceptions API /api/exception_lists/_export: post: description: Export an exception list and its associated items to an NDJSON file. @@ -8882,21 +8819,19 @@ paths: name: id required: true schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListId + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListId' - description: Exception list's human identifier in: query name: list_id required: true schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListHumanId + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListHumanId' - in: query name: namespace_type required: true schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType + #/components/schemas/Security_Exceptions_API_ExceptionNamespaceType - description: >- Determines whether to include expired exceptions in the exported list @@ -8926,41 +8861,39 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Exceptions_API_SiemErrorResponse description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Exception list not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response summary: Export an exception list tags: - - Security Solution Exceptions API + - Security Exceptions API /api/exception_lists/_find: get: description: Get a list of all exception lists. @@ -8984,7 +8917,7 @@ paths: required: false schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_FindExceptionListsFilter + #/components/schemas/Security_Exceptions_API_FindExceptionListsFilter - description: > Determines whether the returned containers are Kibana associated with a Kibana space @@ -8998,7 +8931,7 @@ paths: - single items: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType + #/components/schemas/Security_Exceptions_API_ExceptionNamespaceType type: array - description: The page number to return in: query @@ -9039,7 +8972,7 @@ paths: data: items: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionList + #/components/schemas/Security_Exceptions_API_ExceptionList type: array page: minimum: 1 @@ -9062,34 +8995,33 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Exceptions_API_SiemErrorResponse description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Not enough privileges response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response summary: Get exception lists tags: - - Security Solution Exceptions API + - Security Exceptions API /api/exception_lists/_import: post: description: Import an exception list and its associated items from an NDJSON file. @@ -9153,7 +9085,7 @@ paths: properties: errors: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListsImportBulkErrorArray + #/components/schemas/Security_Exceptions_API_ExceptionListsImportBulkErrorArray success: type: boolean success_count: @@ -9184,34 +9116,33 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Exceptions_API_SiemErrorResponse description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Not enough privileges response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response summary: Import an exception list tags: - - Security Solution Exceptions API + - Security Exceptions API /api/exception_lists/items: delete: description: Delete an exception list item using the `id` or `item_id` field. @@ -9222,29 +9153,27 @@ paths: name: id required: false schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemId + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemId' - description: Either `id` or `item_id` must be specified in: query name: item_id required: false schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemHumanId + #/components/schemas/Security_Exceptions_API_ExceptionListItemHumanId - in: query name: namespace_type required: false schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType + #/components/schemas/Security_Exceptions_API_ExceptionNamespaceType default: single responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItem + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItem' description: Successful response '400': content: @@ -9252,41 +9181,39 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Exceptions_API_SiemErrorResponse description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Exception list item not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response summary: Delete an exception list item tags: - - Security Solution Exceptions API + - Security Exceptions API get: description: >- Get the details of an exception list item using the `id` or `item_id` @@ -9298,29 +9225,27 @@ paths: name: id required: false schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemId + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemId' - description: Either `id` or `item_id` must be specified in: query name: item_id required: false schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemHumanId + #/components/schemas/Security_Exceptions_API_ExceptionListItemHumanId - in: query name: namespace_type required: false schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType + #/components/schemas/Security_Exceptions_API_ExceptionNamespaceType default: single responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItem + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItem' description: Successful response '400': content: @@ -9328,41 +9253,39 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Exceptions_API_SiemErrorResponse description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Exception list item not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response summary: Get an exception list item tags: - - Security Solution Exceptions API + - Security Exceptions API post: description: > Create an exception item and associate it with the specified exception @@ -9380,44 +9303,44 @@ paths: properties: comments: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_CreateExceptionListItemCommentArray + #/components/schemas/Security_Exceptions_API_CreateExceptionListItemCommentArray default: [] description: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemDescription + #/components/schemas/Security_Exceptions_API_ExceptionListItemDescription entries: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryArray + #/components/schemas/Security_Exceptions_API_ExceptionListItemEntryArray expire_time: format: date-time type: string item_id: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemHumanId + #/components/schemas/Security_Exceptions_API_ExceptionListItemHumanId list_id: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListHumanId + #/components/schemas/Security_Exceptions_API_ExceptionListHumanId meta: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemMeta + #/components/schemas/Security_Exceptions_API_ExceptionListItemMeta name: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemName + #/components/schemas/Security_Exceptions_API_ExceptionListItemName namespace_type: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType + #/components/schemas/Security_Exceptions_API_ExceptionNamespaceType default: single os_types: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemOsTypeArray + #/components/schemas/Security_Exceptions_API_ExceptionListItemOsTypeArray default: [] tags: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemTags + #/components/schemas/Security_Exceptions_API_ExceptionListItemTags default: [] type: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemType + #/components/schemas/Security_Exceptions_API_ExceptionListItemType required: - list_id - type @@ -9431,8 +9354,7 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItem + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItem' description: Successful response '400': content: @@ -9440,41 +9362,39 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Exceptions_API_SiemErrorResponse description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Not enough privileges response '409': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Exception list item already exists response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response summary: Create an exception list item tags: - - Security Solution Exceptions API + - Security Exceptions API put: description: Update an exception list item using the `id` or `item_id` field. operationId: UpdateExceptionListItem @@ -9488,48 +9408,48 @@ paths: type: string comments: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_UpdateExceptionListItemCommentArray + #/components/schemas/Security_Exceptions_API_UpdateExceptionListItemCommentArray default: [] description: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemDescription + #/components/schemas/Security_Exceptions_API_ExceptionListItemDescription entries: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryArray + #/components/schemas/Security_Exceptions_API_ExceptionListItemEntryArray expire_time: format: date-time type: string id: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemId + #/components/schemas/Security_Exceptions_API_ExceptionListItemId description: Either `id` or `item_id` must be specified item_id: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemHumanId + #/components/schemas/Security_Exceptions_API_ExceptionListItemHumanId description: Either `id` or `item_id` must be specified list_id: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListHumanId + #/components/schemas/Security_Exceptions_API_ExceptionListHumanId meta: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemMeta + #/components/schemas/Security_Exceptions_API_ExceptionListItemMeta name: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemName + #/components/schemas/Security_Exceptions_API_ExceptionListItemName namespace_type: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType + #/components/schemas/Security_Exceptions_API_ExceptionNamespaceType default: single os_types: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemOsTypeArray + #/components/schemas/Security_Exceptions_API_ExceptionListItemOsTypeArray default: [] tags: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemTags + #/components/schemas/Security_Exceptions_API_ExceptionListItemTags type: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemType + #/components/schemas/Security_Exceptions_API_ExceptionListItemType required: - type - name @@ -9542,8 +9462,7 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItem + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItem' description: Successful response '400': content: @@ -9551,41 +9470,39 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Exceptions_API_SiemErrorResponse description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Exception list item not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response summary: Update an exception list item tags: - - Security Solution Exceptions API + - Security Exceptions API /api/exception_lists/items/_find: get: description: Get a list of all exception list items in the specified list. @@ -9598,7 +9515,7 @@ paths: schema: items: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListHumanId + #/components/schemas/Security_Exceptions_API_ExceptionListHumanId type: array - description: > Filters the returned results according to the value of the specified @@ -9612,7 +9529,7 @@ paths: default: [] items: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_FindExceptionListItemsFilter + #/components/schemas/Security_Exceptions_API_FindExceptionListItemsFilter type: array - description: > Determines whether the returned containers are Kibana associated @@ -9627,7 +9544,7 @@ paths: - single items: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType + #/components/schemas/Security_Exceptions_API_ExceptionNamespaceType type: array - in: query name: search @@ -9653,8 +9570,7 @@ paths: name: sort_field required: false schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_NonEmptyString + $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' - description: Determines the sort order, which can be `desc` or `asc` in: query name: sort_order @@ -9674,7 +9590,7 @@ paths: data: items: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItem + #/components/schemas/Security_Exceptions_API_ExceptionListItem type: array page: minimum: 1 @@ -9699,41 +9615,39 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Exceptions_API_SiemErrorResponse description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Exception list not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response summary: Get exception list items tags: - - Security Solution Exceptions API + - Security Exceptions API /api/exception_lists/summary: get: description: Get a summary of the specified exception list. @@ -9744,21 +9658,19 @@ paths: name: id required: false schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListId + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListId' - description: Exception list's human readable identifier in: query name: list_id required: false schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListHumanId + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListHumanId' - in: query name: namespace_type required: false schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType + #/components/schemas/Security_Exceptions_API_ExceptionNamespaceType default: single - description: Search filter clause in: query @@ -9792,41 +9704,39 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Exceptions_API_SiemErrorResponse description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Exception list not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response summary: Get an exception list summary tags: - - Security Solution Exceptions API + - Security Exceptions API /api/exceptions/shared: post: description: > @@ -9851,10 +9761,10 @@ paths: properties: description: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListDescription + #/components/schemas/Security_Exceptions_API_ExceptionListDescription name: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListName + #/components/schemas/Security_Exceptions_API_ExceptionListName required: - name - description @@ -9864,8 +9774,7 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionList + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionList' description: Successful response '400': content: @@ -9873,41 +9782,39 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Exceptions_API_SiemErrorResponse description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Not enough privileges response '409': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Exception list already exists response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response summary: Create a shared exception list tags: - - Security Solution Exceptions API + - Security Exceptions API /api/fleet/agent_download_sources: get: operationId: get-download-sources @@ -13618,7 +13525,7 @@ paths: name: id required: true schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' + $ref: '#/components/schemas/Security_Lists_API_ListId' - in: query name: deleteReferences required: false @@ -13636,7 +13543,7 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_List' + $ref: '#/components/schemas/Security_Lists_API_List' description: Successful response '400': content: @@ -13644,41 +13551,36 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + #/components/schemas/Security_Lists_API_PlatformErrorResponse + - $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: List not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response summary: Delete a list tags: - - Security Solution Lists API + - Security Lists API get: description: Get the details of a list using the list ID. operationId: ReadList @@ -13688,13 +13590,13 @@ paths: name: id required: true schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' + $ref: '#/components/schemas/Security_Lists_API_ListId' responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_List' + $ref: '#/components/schemas/Security_Lists_API_List' description: Successful response '400': content: @@ -13702,41 +13604,36 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + #/components/schemas/Security_Lists_API_PlatformErrorResponse + - $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: List not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response summary: Get list details tags: - - Security Solution Lists API + - Security Lists API patch: description: Update specific fields of an existing list using the list ID. operationId: PatchList @@ -13749,15 +13646,13 @@ paths: _version: type: string description: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListDescription + $ref: '#/components/schemas/Security_Lists_API_ListDescription' id: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' + $ref: '#/components/schemas/Security_Lists_API_ListId' meta: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListMetadata + $ref: '#/components/schemas/Security_Lists_API_ListMetadata' name: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListName' + $ref: '#/components/schemas/Security_Lists_API_ListName' version: minimum: 1 type: integer @@ -13770,7 +13665,7 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_List' + $ref: '#/components/schemas/Security_Lists_API_List' description: Successful response '400': content: @@ -13778,41 +13673,36 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + #/components/schemas/Security_Lists_API_PlatformErrorResponse + - $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: List not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response summary: Patch a list tags: - - Security Solution Lists API + - Security Lists API post: description: Create a new list. operationId: CreateList @@ -13823,21 +13713,19 @@ paths: type: object properties: description: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListDescription + $ref: '#/components/schemas/Security_Lists_API_ListDescription' deserializer: type: string id: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' + $ref: '#/components/schemas/Security_Lists_API_ListId' meta: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListMetadata + $ref: '#/components/schemas/Security_Lists_API_ListMetadata' name: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListName' + $ref: '#/components/schemas/Security_Lists_API_ListName' serializer: type: string type: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListType' + $ref: '#/components/schemas/Security_Lists_API_ListType' version: default: 1 minimum: 1 @@ -13853,7 +13741,7 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_List' + $ref: '#/components/schemas/Security_Lists_API_List' description: Successful response '400': content: @@ -13861,41 +13749,36 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + #/components/schemas/Security_Lists_API_PlatformErrorResponse + - $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '409': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: List already exists response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response summary: Create a list tags: - - Security Solution Lists API + - Security Lists API put: description: > Update a list using the list ID. The original list is replaced, and all @@ -13914,15 +13797,13 @@ paths: _version: type: string description: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListDescription + $ref: '#/components/schemas/Security_Lists_API_ListDescription' id: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' + $ref: '#/components/schemas/Security_Lists_API_ListId' meta: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListMetadata + $ref: '#/components/schemas/Security_Lists_API_ListMetadata' name: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListName' + $ref: '#/components/schemas/Security_Lists_API_ListName' version: minimum: 1 type: integer @@ -13937,7 +13818,7 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_List' + $ref: '#/components/schemas/Security_Lists_API_List' description: Successful response '400': content: @@ -13945,41 +13826,36 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + #/components/schemas/Security_Lists_API_PlatformErrorResponse + - $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: List not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response summary: Update a list tags: - - Security Solution Lists API + - Security Lists API /api/lists/_find: get: description: >- @@ -14004,7 +13880,7 @@ paths: name: sort_field required: false schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_NonEmptyString' + $ref: '#/components/schemas/Security_Lists_API_NonEmptyString' - description: Determines the sort order, which can be `desc` or `asc` in: query name: sort_order @@ -14027,7 +13903,7 @@ paths: name: cursor required: false schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_FindListsCursor' + $ref: '#/components/schemas/Security_Lists_API_FindListsCursor' - description: > Filters the returned results according to the value of the specified field, @@ -14037,7 +13913,7 @@ paths: name: filter required: false schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_FindListsFilter' + $ref: '#/components/schemas/Security_Lists_API_FindListsFilter' responses: '200': content: @@ -14046,11 +13922,10 @@ paths: type: object properties: cursor: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_FindListsCursor + $ref: '#/components/schemas/Security_Lists_API_FindListsCursor' data: items: - $ref: '#/components/schemas/Security_Solution_Lists_API_List' + $ref: '#/components/schemas/Security_Lists_API_List' type: array page: minimum: 0 @@ -14074,34 +13949,30 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + #/components/schemas/Security_Lists_API_PlatformErrorResponse + - $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response summary: Get lists tags: - - Security Solution Lists API + - Security Lists API /api/lists/index: delete: description: Delete the `.lists` and `.items` data streams. @@ -14124,41 +13995,36 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + #/components/schemas/Security_Lists_API_PlatformErrorResponse + - $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: List data stream not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response summary: Delete list data streams tags: - - Security Solution Lists API + - Security Lists API get: description: Verify that `.lists` and `.items` data streams exist. operationId: ReadListIndex @@ -14183,41 +14049,36 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + #/components/schemas/Security_Lists_API_PlatformErrorResponse + - $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: List data stream(s) not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response summary: Get status of list data streams tags: - - Security Solution Lists API + - Security Lists API post: description: Create `.lists` and `.items` data streams in the relevant space. operationId: CreateListIndex @@ -14239,41 +14100,36 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + #/components/schemas/Security_Lists_API_PlatformErrorResponse + - $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '409': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: List data stream exists response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response summary: Create list data streams tags: - - Security Solution Lists API + - Security Lists API /api/lists/items: delete: description: Delete a list item using its `id`, or its `list_id` and `value` fields. @@ -14284,13 +14140,13 @@ paths: name: id required: false schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' + $ref: '#/components/schemas/Security_Lists_API_ListId' - description: Required if `id` is not specified in: query name: list_id required: false schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' + $ref: '#/components/schemas/Security_Lists_API_ListId' - description: Required if `id` is not specified in: query name: value @@ -14316,10 +14172,9 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: oneOf: - - $ref: '#/components/schemas/Security_Solution_Lists_API_ListItem' + - $ref: '#/components/schemas/Security_Lists_API_ListItem' - items: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListItem + $ref: '#/components/schemas/Security_Lists_API_ListItem' type: array description: Successful response '400': @@ -14328,41 +14183,36 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + #/components/schemas/Security_Lists_API_PlatformErrorResponse + - $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: List item not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response summary: Delete a list item tags: - - Security Solution Lists API + - Security Lists API get: description: Get the details of a list item. operationId: ReadListItem @@ -14372,13 +14222,13 @@ paths: name: id required: false schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' + $ref: '#/components/schemas/Security_Lists_API_ListId' - description: Required if `id` is not specified in: query name: list_id required: false schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' + $ref: '#/components/schemas/Security_Lists_API_ListId' - description: Required if `id` is not specified in: query name: value @@ -14391,10 +14241,9 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: oneOf: - - $ref: '#/components/schemas/Security_Solution_Lists_API_ListItem' + - $ref: '#/components/schemas/Security_Lists_API_ListItem' - items: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListItem + $ref: '#/components/schemas/Security_Lists_API_ListItem' type: array description: Successful response '400': @@ -14403,41 +14252,36 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + #/components/schemas/Security_Lists_API_PlatformErrorResponse + - $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: List item not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response summary: Get a list item tags: - - Security Solution Lists API + - Security Lists API patch: description: Update specific fields of an existing list item using the list item ID. operationId: PatchListItem @@ -14450,10 +14294,9 @@ paths: _version: type: string id: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListItemId' + $ref: '#/components/schemas/Security_Lists_API_ListItemId' meta: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListItemMetadata + $ref: '#/components/schemas/Security_Lists_API_ListItemMetadata' refresh: description: >- Determines when changes made by the request are made visible @@ -14464,8 +14307,7 @@ paths: - wait_for type: string value: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListItemValue + $ref: '#/components/schemas/Security_Lists_API_ListItemValue' required: - id description: List item's properties @@ -14475,7 +14317,7 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListItem' + $ref: '#/components/schemas/Security_Lists_API_ListItem' description: Successful response '400': content: @@ -14483,41 +14325,36 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + #/components/schemas/Security_Lists_API_PlatformErrorResponse + - $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: List item not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response summary: Patch a list item tags: - - Security Solution Lists API + - Security Lists API post: description: > Create a list item and associate it with the specified list. @@ -14537,12 +14374,11 @@ paths: type: object properties: id: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListItemId' + $ref: '#/components/schemas/Security_Lists_API_ListItemId' list_id: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' + $ref: '#/components/schemas/Security_Lists_API_ListId' meta: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListItemMetadata + $ref: '#/components/schemas/Security_Lists_API_ListItemMetadata' refresh: description: >- Determines when changes made by the request are made visible @@ -14553,8 +14389,7 @@ paths: - wait_for type: string value: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListItemValue + $ref: '#/components/schemas/Security_Lists_API_ListItemValue' required: - list_id - value @@ -14565,7 +14400,7 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListItem' + $ref: '#/components/schemas/Security_Lists_API_ListItem' description: Successful response '400': content: @@ -14573,41 +14408,36 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + #/components/schemas/Security_Lists_API_PlatformErrorResponse + - $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '409': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: List item already exists response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response summary: Create a list item tags: - - Security Solution Lists API + - Security Lists API put: description: > Update a list item using the list item ID. The original list item is @@ -14626,13 +14456,11 @@ paths: _version: type: string id: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListItemId' + $ref: '#/components/schemas/Security_Lists_API_ListItemId' meta: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListItemMetadata + $ref: '#/components/schemas/Security_Lists_API_ListItemMetadata' value: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListItemValue + $ref: '#/components/schemas/Security_Lists_API_ListItemValue' required: - id - value @@ -14643,7 +14471,7 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListItem' + $ref: '#/components/schemas/Security_Lists_API_ListItem' description: Successful response '400': content: @@ -14651,41 +14479,36 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + #/components/schemas/Security_Lists_API_PlatformErrorResponse + - $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: List item not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response summary: Update a list item tags: - - Security Solution Lists API + - Security Lists API /api/lists/items/_export: post: description: Export list item values from the specified list. @@ -14696,7 +14519,7 @@ paths: name: list_id required: true schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' + $ref: '#/components/schemas/Security_Lists_API_ListId' responses: '200': content: @@ -14712,41 +14535,36 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + #/components/schemas/Security_Lists_API_PlatformErrorResponse + - $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: List not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response summary: Export list items tags: - - Security Solution Lists API + - Security Lists API /api/lists/items/_find: get: description: Get all list items in the specified list. @@ -14757,7 +14575,7 @@ paths: name: list_id required: true schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' + $ref: '#/components/schemas/Security_Lists_API_ListId' - description: The page number to return in: query name: page @@ -14775,7 +14593,7 @@ paths: name: sort_field required: false schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_NonEmptyString' + $ref: '#/components/schemas/Security_Lists_API_NonEmptyString' - description: Determines the sort order, which can be `desc` or `asc` in: query name: sort_order @@ -14798,8 +14616,7 @@ paths: name: cursor required: false schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_FindListItemsCursor + $ref: '#/components/schemas/Security_Lists_API_FindListItemsCursor' - description: > Filters the returned results according to the value of the specified field, @@ -14809,8 +14626,7 @@ paths: name: filter required: false schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_FindListItemsFilter + $ref: '#/components/schemas/Security_Lists_API_FindListItemsFilter' responses: '200': content: @@ -14820,11 +14636,10 @@ paths: properties: cursor: $ref: >- - #/components/schemas/Security_Solution_Lists_API_FindListItemsCursor + #/components/schemas/Security_Lists_API_FindListItemsCursor data: items: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListItem + $ref: '#/components/schemas/Security_Lists_API_ListItem' type: array page: minimum: 0 @@ -14848,34 +14663,30 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + #/components/schemas/Security_Lists_API_PlatformErrorResponse + - $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response summary: Get list items tags: - - Security Solution Lists API + - Security Lists API /api/lists/items/_import: post: description: > @@ -14894,7 +14705,7 @@ paths: name: list_id required: false schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' + $ref: '#/components/schemas/Security_Lists_API_ListId' - description: > Type of the importing list. @@ -14905,7 +14716,7 @@ paths: name: type required: false schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListType' + $ref: '#/components/schemas/Security_Lists_API_ListType' - in: query name: serializer required: false @@ -14946,7 +14757,7 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_List' + $ref: '#/components/schemas/Security_Lists_API_List' description: Successful response '400': content: @@ -14954,41 +14765,36 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + #/components/schemas/Security_Lists_API_PlatformErrorResponse + - $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '409': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: List with specified list_id does not exist response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response summary: Import list items tags: - - Security Solution Lists API + - Security Lists API /api/lists/privileges: get: operationId: ReadListPrivileges @@ -15002,11 +14808,9 @@ paths: is_authenticated: type: boolean listItems: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListItemPrivileges + $ref: '#/components/schemas/Security_Lists_API_ListItemPrivileges' lists: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListPrivileges + $ref: '#/components/schemas/Security_Lists_API_ListPrivileges' required: - lists - listItems @@ -15018,34 +14822,30 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + #/components/schemas/Security_Lists_API_PlatformErrorResponse + - $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response summary: Get list privileges tags: - - Security Solution Lists API + - Security Lists API /api/ml/saved_objects/sync: get: description: > @@ -15090,7 +14890,8 @@ paths: type: string required: - noteId - - type: object + - nullable: true + type: object properties: noteIds: items: @@ -15113,7 +14914,7 @@ paths: description: Indicates the note was successfully deleted. summary: Delete a note tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution get: description: Get all notes for a given document. @@ -15121,19 +14922,18 @@ paths: parameters: - in: query name: documentIds - required: true schema: - $ref: '#/components/schemas/Security_Solution_Timeline_API_DocumentIds' + $ref: '#/components/schemas/Security_Timeline_API_DocumentIds' - in: query name: page schema: nullable: true - type: number + type: string - in: query name: perPage schema: nullable: true - type: number + type: string - in: query name: search schema: @@ -15156,10 +14956,16 @@ paths: type: string responses: '200': + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + oneOf: + - $ref: '#/components/schemas/Security_Timeline_API_GetNotesResult' + - type: object description: Indicates the requested notes were returned. summary: Get notes tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution patch: description: Add a note to a Timeline or update an existing note. @@ -15180,7 +14986,7 @@ paths: nullable: true type: string note: - $ref: '#/components/schemas/Security_Solution_Timeline_API_BareNote' + $ref: '#/components/schemas/Security_Timeline_API_BareNote' noteId: nullable: true type: string @@ -15205,19 +15011,8 @@ paths: type: object properties: persistNote: - type: object - properties: - code: - type: number - message: - type: string - note: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_Note - required: - - code - - message - - note + $ref: >- + #/components/schemas/Security_Timeline_API_ResponseNote required: - persistNote required: @@ -15225,7 +15020,7 @@ paths: description: Indicates the note was successfully created. summary: Add or update a note tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution /api/osquery/live_queries: get: @@ -15237,18 +15032,18 @@ paths: required: true schema: $ref: >- - #/components/schemas/Security_Solution_Osquery_API_FindLiveQueryRequestQuery + #/components/schemas/Security_Osquery_API_FindLiveQueryRequestQuery responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse + #/components/schemas/Security_Osquery_API_DefaultSuccessResponse description: OK summary: Get live queries tags: - - Security Solution Osquery API + - Security Osquery API post: description: Create and run a live query. operationId: OsqueryCreateLiveQuery @@ -15257,7 +15052,7 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Osquery_API_CreateLiveQueryRequestBody + #/components/schemas/Security_Osquery_API_CreateLiveQueryRequestBody required: true responses: '200': @@ -15265,11 +15060,11 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse + #/components/schemas/Security_Osquery_API_DefaultSuccessResponse description: OK summary: Create a live query tags: - - Security Solution Osquery API + - Security Osquery API /api/osquery/live_queries/{id}: get: description: Get the details of a live query using the query ID. @@ -15279,7 +15074,7 @@ paths: name: id required: true schema: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Id' + $ref: '#/components/schemas/Security_Osquery_API_Id' - in: query name: query schema: @@ -15291,11 +15086,11 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse + #/components/schemas/Security_Osquery_API_DefaultSuccessResponse description: OK summary: Get live query details tags: - - Security Solution Osquery API + - Security Osquery API /api/osquery/live_queries/{id}/results/{actionId}: get: description: Get the results of a live query using the query action ID. @@ -15305,29 +15100,29 @@ paths: name: id required: true schema: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Id' + $ref: '#/components/schemas/Security_Osquery_API_Id' - in: path name: actionId required: true schema: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Id' + $ref: '#/components/schemas/Security_Osquery_API_Id' - in: query name: query required: true schema: $ref: >- - #/components/schemas/Security_Solution_Osquery_API_GetLiveQueryResultsRequestQuery + #/components/schemas/Security_Osquery_API_GetLiveQueryResultsRequestQuery responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse + #/components/schemas/Security_Osquery_API_DefaultSuccessResponse description: OK summary: Get live query results tags: - - Security Solution Osquery API + - Security Osquery API /api/osquery/packs: get: description: Get a list of all query packs. @@ -15337,19 +15132,18 @@ paths: name: query required: true schema: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_FindPacksRequestQuery + $ref: '#/components/schemas/Security_Osquery_API_FindPacksRequestQuery' responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse + #/components/schemas/Security_Osquery_API_DefaultSuccessResponse description: OK summary: Get packs tags: - - Security Solution Osquery API + - Security Osquery API post: description: Create a query pack. operationId: OsqueryCreatePacks @@ -15357,8 +15151,7 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_CreatePacksRequestBody + $ref: '#/components/schemas/Security_Osquery_API_CreatePacksRequestBody' required: true responses: '200': @@ -15366,11 +15159,11 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse + #/components/schemas/Security_Osquery_API_DefaultSuccessResponse description: OK summary: Create a pack tags: - - Security Solution Osquery API + - Security Osquery API /api/osquery/packs/{id}: delete: description: Delete a query pack using the pack ID. @@ -15380,18 +15173,18 @@ paths: name: id required: true schema: - $ref: '#/components/schemas/Security_Solution_Osquery_API_PackId' + $ref: '#/components/schemas/Security_Osquery_API_PackId' responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse + #/components/schemas/Security_Osquery_API_DefaultSuccessResponse description: OK summary: Delete a pack tags: - - Security Solution Osquery API + - Security Osquery API get: description: Get the details of a query pack using the pack ID. operationId: OsqueryGetPacksDetails @@ -15400,18 +15193,18 @@ paths: name: id required: true schema: - $ref: '#/components/schemas/Security_Solution_Osquery_API_PackId' + $ref: '#/components/schemas/Security_Osquery_API_PackId' responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse + #/components/schemas/Security_Osquery_API_DefaultSuccessResponse description: OK summary: Get pack details tags: - - Security Solution Osquery API + - Security Osquery API put: description: | Update a query pack using the pack ID. @@ -15423,13 +15216,12 @@ paths: name: id required: true schema: - $ref: '#/components/schemas/Security_Solution_Osquery_API_PackId' + $ref: '#/components/schemas/Security_Osquery_API_PackId' requestBody: content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_UpdatePacksRequestBody + $ref: '#/components/schemas/Security_Osquery_API_UpdatePacksRequestBody' required: true responses: '200': @@ -15437,11 +15229,11 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse + #/components/schemas/Security_Osquery_API_DefaultSuccessResponse description: OK summary: Update a pack tags: - - Security Solution Osquery API + - Security Osquery API /api/osquery/saved_queries: get: description: Get a list of all saved queries. @@ -15452,18 +15244,18 @@ paths: required: true schema: $ref: >- - #/components/schemas/Security_Solution_Osquery_API_FindSavedQueryRequestQuery + #/components/schemas/Security_Osquery_API_FindSavedQueryRequestQuery responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse + #/components/schemas/Security_Osquery_API_DefaultSuccessResponse description: OK summary: Get saved queries tags: - - Security Solution Osquery API + - Security Osquery API post: description: Create and run a saved query. operationId: OsqueryCreateSavedQuery @@ -15472,7 +15264,7 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Osquery_API_CreateSavedQueryRequestBody + #/components/schemas/Security_Osquery_API_CreateSavedQueryRequestBody required: true responses: '200': @@ -15480,11 +15272,11 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse + #/components/schemas/Security_Osquery_API_DefaultSuccessResponse description: OK summary: Create a saved query tags: - - Security Solution Osquery API + - Security Osquery API /api/osquery/saved_queries/{id}: delete: description: Delete a saved query using the query ID. @@ -15494,18 +15286,18 @@ paths: name: id required: true schema: - $ref: '#/components/schemas/Security_Solution_Osquery_API_SavedQueryId' + $ref: '#/components/schemas/Security_Osquery_API_SavedQueryId' responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse + #/components/schemas/Security_Osquery_API_DefaultSuccessResponse description: OK summary: Delete a saved query tags: - - Security Solution Osquery API + - Security Osquery API get: description: Get the details of a saved query using the query ID. operationId: OsqueryGetSavedQueryDetails @@ -15514,18 +15306,18 @@ paths: name: id required: true schema: - $ref: '#/components/schemas/Security_Solution_Osquery_API_SavedQueryId' + $ref: '#/components/schemas/Security_Osquery_API_SavedQueryId' responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse + #/components/schemas/Security_Osquery_API_DefaultSuccessResponse description: OK summary: Get saved query details tags: - - Security Solution Osquery API + - Security Osquery API put: description: | Update a saved query using the query ID. @@ -15537,13 +15329,13 @@ paths: name: id required: true schema: - $ref: '#/components/schemas/Security_Solution_Osquery_API_SavedQueryId' + $ref: '#/components/schemas/Security_Osquery_API_SavedQueryId' requestBody: content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Osquery_API_UpdateSavedQueryRequestBody + #/components/schemas/Security_Osquery_API_UpdateSavedQueryRequestBody required: true responses: '200': @@ -15551,11 +15343,11 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse + #/components/schemas/Security_Osquery_API_DefaultSuccessResponse description: OK summary: Update a saved query tags: - - Security Solution Osquery API + - Security Osquery API /api/pinned_event: patch: description: Pin an event to an existing Timeline. @@ -15589,15 +15381,8 @@ paths: type: object properties: persistPinnedEventOnTimeline: - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_PinnedEvent - - type: object - properties: - code: - type: number - message: - type: string + $ref: >- + #/components/schemas/Security_Timeline_API_PersistPinnedEventResponse required: - persistPinnedEventOnTimeline required: @@ -15605,8 +15390,41 @@ paths: description: Indicates the event was successfully pinned to the Timeline. summary: Pin an event tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution + /api/risk_score/engine/dangerously_delete_data: + delete: + description: >- + Cleaning up the the Risk Engine by removing the indices, mapping and + transforms + operationId: CleanUpRiskEngine + responses: + '200': + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + type: object + properties: + cleanup_successful: + type: boolean + description: Successful response + '400': + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + $ref: >- + #/components/schemas/Security_Entity_Analytics_API_TaskManagerUnavailableResponse + description: Task manager is unavailable + default: + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + $ref: >- + #/components/schemas/Security_Entity_Analytics_API_CleanUpRiskEngineErrorResponse + description: Unexpected error + summary: Cleanup the Risk Engine + tags: + - Security Entity Analytics API /api/risk_score/engine/schedule_now: post: description: >- @@ -15623,25 +15441,25 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_RiskEngineScheduleNowResponse + #/components/schemas/Security_Entity_Analytics_API_RiskEngineScheduleNowResponse description: Successful response '400': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_TaskManagerUnavailableResponse + #/components/schemas/Security_Entity_Analytics_API_TaskManagerUnavailableResponse description: Task manager is unavailable default: content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_RiskEngineScheduleNowErrorResponse + #/components/schemas/Security_Entity_Analytics_API_RiskEngineScheduleNowErrorResponse description: Unexpected error summary: Run the risk scoring engine tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API /api/saved_objects/_export: post: description: > @@ -16520,7 +16338,7 @@ paths: description: Indicates the Timeline was successfully deleted. summary: Delete Timelines or Timeline templates tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution get: description: Get the details of an existing saved Timeline or Timeline template. @@ -16548,7 +16366,7 @@ paths: properties: getOneTimeline: $ref: >- - #/components/schemas/Security_Solution_Timeline_API_TimelineResponse + #/components/schemas/Security_Timeline_API_TimelineResponse nullable: true required: - getOneTimeline @@ -16557,7 +16375,7 @@ paths: description: Indicates that the (template) Timeline was found and returned. summary: Get Timeline or Timeline template details tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution patch: description: >- @@ -16572,8 +16390,7 @@ paths: type: object properties: timeline: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_SavedTimeline + $ref: '#/components/schemas/Security_Timeline_API_SavedTimeline' timelineId: nullable: true type: string @@ -16601,7 +16418,7 @@ paths: properties: timeline: $ref: >- - #/components/schemas/Security_Solution_Timeline_API_TimelineResponse + #/components/schemas/Security_Timeline_API_TimelineResponse required: - timeline required: @@ -16627,7 +16444,7 @@ paths: a draft Timeline. summary: Update a Timeline tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution post: description: Create a new Timeline or Timeline template. @@ -16639,8 +16456,7 @@ paths: type: object properties: status: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_TimelineStatus + $ref: '#/components/schemas/Security_Timeline_API_TimelineStatus' nullable: true templateTimelineId: nullable: true @@ -16649,14 +16465,12 @@ paths: nullable: true type: number timeline: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_SavedTimeline + $ref: '#/components/schemas/Security_Timeline_API_SavedTimeline' timelineId: nullable: true type: string timelineType: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_TimelineType + $ref: '#/components/schemas/Security_Timeline_API_TimelineType' nullable: true version: nullable: true @@ -16682,7 +16496,7 @@ paths: properties: timeline: $ref: >- - #/components/schemas/Security_Solution_Timeline_API_TimelineResponse + #/components/schemas/Security_Timeline_API_TimelineResponse required: - persistTimeline required: @@ -16701,7 +16515,7 @@ paths: description: Indicates that there was an error in the Timeline creation. summary: Create a Timeline or Timeline template tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution /api/timeline/_draft: get: @@ -16715,7 +16529,7 @@ paths: name: timelineType required: true schema: - $ref: '#/components/schemas/Security_Solution_Timeline_API_TimelineType' + $ref: '#/components/schemas/Security_Timeline_API_TimelineType' responses: '200': content: @@ -16731,7 +16545,7 @@ paths: properties: timeline: $ref: >- - #/components/schemas/Security_Solution_Timeline_API_TimelineResponse + #/components/schemas/Security_Timeline_API_TimelineResponse required: - timeline required: @@ -16769,7 +16583,7 @@ paths: draft Timeline with the given `timelineId`. summary: Get draft Timeline or Timeline template details tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution post: description: > @@ -16787,8 +16601,7 @@ paths: type: object properties: timelineType: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_TimelineType + $ref: '#/components/schemas/Security_Timeline_API_TimelineType' required: - timelineType description: >- @@ -16810,7 +16623,7 @@ paths: properties: timeline: $ref: >- - #/components/schemas/Security_Solution_Timeline_API_TimelineResponse + #/components/schemas/Security_Timeline_API_TimelineResponse required: - timeline required: @@ -16849,7 +16662,7 @@ paths: `timelineId`. summary: Create a clean draft Timeline or Timeline template tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution /api/timeline/_export: post: @@ -16896,7 +16709,7 @@ paths: description: Indicates that the export size limit was exceeded. summary: Export Timelines tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution /api/timeline/_favorite: patch: @@ -16918,8 +16731,7 @@ paths: nullable: true type: string timelineType: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_TimelineType + $ref: '#/components/schemas/Security_Timeline_API_TimelineType' nullable: true required: - timelineId @@ -16940,7 +16752,7 @@ paths: properties: persistFavorite: $ref: >- - #/components/schemas/Security_Solution_Timeline_API_FavoriteTimelineResponse + #/components/schemas/Security_Timeline_API_FavoriteTimelineResponse required: - persistFavorite required: @@ -16961,7 +16773,7 @@ paths: the favorite status. summary: Favorite a Timeline or Timeline template tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution /api/timeline/_import: post: @@ -16975,8 +16787,7 @@ paths: properties: file: allOf: - - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_Readable + - $ref: '#/components/schemas/Security_Timeline_API_Readable' - type: object properties: hapi: @@ -17007,7 +16818,7 @@ paths: properties: data: $ref: >- - #/components/schemas/Security_Solution_Timeline_API_ImportTimelineResult + #/components/schemas/Security_Timeline_API_ImportTimelineResult required: - data description: Indicates the import of Timelines was successful. @@ -17054,7 +16865,7 @@ paths: description: Indicates the import of Timelines was unsuccessful. summary: Import Timelines tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution /api/timeline/_prepackaged: post: @@ -17068,19 +16879,16 @@ paths: properties: prepackagedTimelines: items: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_SavedTimeline + $ref: '#/components/schemas/Security_Timeline_API_SavedTimeline' type: array timelinesToInstall: items: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_ImportTimelines + $ref: '#/components/schemas/Security_Timeline_API_ImportTimelines' nullable: true type: array timelinesToUpdate: items: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_ImportTimelines + $ref: '#/components/schemas/Security_Timeline_API_ImportTimelines' nullable: true type: array required: @@ -17098,7 +16906,7 @@ paths: properties: data: $ref: >- - #/components/schemas/Security_Solution_Timeline_API_ImportTimelineResult + #/components/schemas/Security_Timeline_API_ImportTimelineResult required: - data description: Indicates the installation of prepackaged Timelines was successful. @@ -17117,7 +16925,7 @@ paths: unsuccessful. summary: Install prepackaged Timelines tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution /api/timeline/resolve: get: @@ -17145,7 +16953,7 @@ paths: properties: getOneTimeline: $ref: >- - #/components/schemas/Security_Solution_Timeline_API_TimelineResponse + #/components/schemas/Security_Timeline_API_TimelineResponse nullable: true required: - getOneTimeline @@ -17158,7 +16966,7 @@ paths: description: The (template) Timeline was not found summary: Get an existing saved Timeline or Timeline template tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution /api/timelines: get: @@ -17179,13 +16987,12 @@ paths: - in: query name: timeline_type schema: - $ref: '#/components/schemas/Security_Solution_Timeline_API_TimelineType' + $ref: '#/components/schemas/Security_Timeline_API_TimelineType' nullable: true - in: query name: sort_field schema: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_SortFieldTimeline + $ref: '#/components/schemas/Security_Timeline_API_SortFieldTimeline' - in: query name: sort_order schema: @@ -17211,7 +17018,7 @@ paths: - in: query name: status schema: - $ref: '#/components/schemas/Security_Solution_Timeline_API_TimelineStatus' + $ref: '#/components/schemas/Security_Timeline_API_TimelineStatus' nullable: true responses: '200': @@ -17236,7 +17043,7 @@ paths: timelines: items: $ref: >- - #/components/schemas/Security_Solution_Timeline_API_TimelineResponse + #/components/schemas/Security_Timeline_API_TimelineResponse type: array totalCount: type: number @@ -17264,7 +17071,7 @@ paths: description: Bad request. The user supplied invalid data. summary: Get Timelines or Timeline templates tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution /s/{spaceId}/api/observability/slos: get: @@ -23214,72 +23021,68 @@ components: name: description: User name type: string - Security_Solution_Detections_API_AlertAssignees: + Security_Detections_API_AlertAssignees: type: object properties: add: description: A list of users ids to assign. items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NonEmptyString + $ref: '#/components/schemas/Security_Detections_API_NonEmptyString' type: array remove: description: A list of users ids to unassign. items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NonEmptyString + $ref: '#/components/schemas/Security_Detections_API_NonEmptyString' type: array required: - add - remove - Security_Solution_Detections_API_AlertIds: + Security_Detections_API_AlertIds: description: A list of alerts ids. items: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' + $ref: '#/components/schemas/Security_Detections_API_NonEmptyString' minItems: 1 type: array - Security_Solution_Detections_API_AlertsIndex: + Security_Detections_API_AlertsIndex: deprecated: true description: (deprecated) Has no effect. type: string - Security_Solution_Detections_API_AlertsIndexNamespace: + Security_Detections_API_AlertsIndexNamespace: description: Has no effect. type: string - Security_Solution_Detections_API_AlertsSort: + Security_Detections_API_AlertsSort: oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsSortCombinations + - $ref: '#/components/schemas/Security_Detections_API_AlertsSortCombinations' - items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsSortCombinations + #/components/schemas/Security_Detections_API_AlertsSortCombinations type: array - Security_Solution_Detections_API_AlertsSortCombinations: + Security_Detections_API_AlertsSortCombinations: anyOf: - type: string - additionalProperties: true type: object - Security_Solution_Detections_API_AlertStatus: + Security_Detections_API_AlertStatus: enum: - open - closed - acknowledged - in-progress type: string - Security_Solution_Detections_API_AlertSuppression: + Security_Detections_API_AlertSuppression: type: object properties: duration: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertSuppressionDuration + #/components/schemas/Security_Detections_API_AlertSuppressionDuration group_by: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertSuppressionGroupBy + $ref: '#/components/schemas/Security_Detections_API_AlertSuppressionGroupBy' missing_fields_strategy: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertSuppressionMissingFieldsStrategy + #/components/schemas/Security_Detections_API_AlertSuppressionMissingFieldsStrategy required: - group_by - Security_Solution_Detections_API_AlertSuppressionDuration: + Security_Detections_API_AlertSuppressionDuration: type: object properties: unit: @@ -23294,13 +23097,13 @@ components: required: - value - unit - Security_Solution_Detections_API_AlertSuppressionGroupBy: + Security_Detections_API_AlertSuppressionGroupBy: items: type: string maxItems: 3 minItems: 1 type: array - Security_Solution_Detections_API_AlertSuppressionMissingFieldsStrategy: + Security_Detections_API_AlertSuppressionMissingFieldsStrategy: description: >- Describes how alerts will be generated for documents with missing suppress by fields: @@ -23312,38 +23115,38 @@ components: - doNotSuppress - suppress type: string - Security_Solution_Detections_API_AlertTag: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' - Security_Solution_Detections_API_AlertTags: + Security_Detections_API_AlertTag: + $ref: '#/components/schemas/Security_Detections_API_NonEmptyString' + Security_Detections_API_AlertTags: items: - $ref: '#/components/schemas/Security_Solution_Detections_API_AlertTag' + $ref: '#/components/schemas/Security_Detections_API_AlertTag' type: array - Security_Solution_Detections_API_AnomalyThreshold: + Security_Detections_API_AnomalyThreshold: description: Anomaly threshold minimum: 0 type: integer - Security_Solution_Detections_API_BuildingBlockType: + Security_Detections_API_BuildingBlockType: description: >- Determines if the rule acts as a building block. By default, building-block alerts are not displayed in the UI. These rules are used as a foundation for other rules that do generate alerts. Its value must be default. type: string - Security_Solution_Detections_API_BulkActionEditPayload: + Security_Detections_API_BulkActionEditPayload: anyOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkActionEditPayloadTags + #/components/schemas/Security_Detections_API_BulkActionEditPayloadTags - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkActionEditPayloadIndexPatterns + #/components/schemas/Security_Detections_API_BulkActionEditPayloadIndexPatterns - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkActionEditPayloadInvestigationFields + #/components/schemas/Security_Detections_API_BulkActionEditPayloadInvestigationFields - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkActionEditPayloadTimeline + #/components/schemas/Security_Detections_API_BulkActionEditPayloadTimeline - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkActionEditPayloadRuleActions + #/components/schemas/Security_Detections_API_BulkActionEditPayloadRuleActions - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkActionEditPayloadSchedule - Security_Solution_Detections_API_BulkActionEditPayloadIndexPatterns: + #/components/schemas/Security_Detections_API_BulkActionEditPayloadSchedule + Security_Detections_API_BulkActionEditPayloadIndexPatterns: type: object properties: overwrite_data_views: @@ -23355,12 +23158,11 @@ components: - set_index_patterns type: string value: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IndexPatternArray + $ref: '#/components/schemas/Security_Detections_API_IndexPatternArray' required: - type - value - Security_Solution_Detections_API_BulkActionEditPayloadInvestigationFields: + Security_Detections_API_BulkActionEditPayloadInvestigationFields: type: object properties: type: @@ -23370,12 +23172,11 @@ components: - set_investigation_fields type: string value: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' required: - type - value - Security_Solution_Detections_API_BulkActionEditPayloadRuleActions: + Security_Detections_API_BulkActionEditPayloadRuleActions: type: object properties: type: @@ -23389,17 +23190,17 @@ components: actions: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_NormalizedRuleAction + #/components/schemas/Security_Detections_API_NormalizedRuleAction type: array throttle: $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThrottleForBulkActions + #/components/schemas/Security_Detections_API_ThrottleForBulkActions required: - actions required: - type - value - Security_Solution_Detections_API_BulkActionEditPayloadSchedule: + Security_Detections_API_BulkActionEditPayloadSchedule: type: object properties: type: @@ -23427,7 +23228,7 @@ components: required: - type - value - Security_Solution_Detections_API_BulkActionEditPayloadTags: + Security_Detections_API_BulkActionEditPayloadTags: type: object properties: type: @@ -23437,11 +23238,11 @@ components: - set_tags type: string value: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleTagArray' + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' required: - type - value - Security_Solution_Detections_API_BulkActionEditPayloadTimeline: + Security_Detections_API_BulkActionEditPayloadTimeline: type: object properties: type: @@ -23452,18 +23253,17 @@ components: type: object properties: timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle required: - timeline_id - timeline_title required: - type - value - Security_Solution_Detections_API_BulkActionsDryRunErrCode: + Security_Detections_API_BulkActionsDryRunErrCode: enum: - IMMUTABLE - MACHINE_LEARNING_AUTH @@ -23472,7 +23272,7 @@ components: - MANUAL_RULE_RUN_FEATURE - MANUAL_RULE_RUN_DISABLED_RULE type: string - Security_Solution_Detections_API_BulkActionSkipResult: + Security_Detections_API_BulkActionSkipResult: type: object properties: id: @@ -23480,12 +23280,11 @@ components: name: type: string skip_reason: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkEditSkipReason + $ref: '#/components/schemas/Security_Detections_API_BulkEditSkipReason' required: - id - skip_reason - Security_Solution_Detections_API_BulkDeleteRules: + Security_Detections_API_BulkDeleteRules: type: object properties: action: @@ -23503,7 +23302,7 @@ components: type: string required: - action - Security_Solution_Detections_API_BulkDisableRules: + Security_Detections_API_BulkDisableRules: type: object properties: action: @@ -23521,7 +23320,7 @@ components: type: string required: - action - Security_Solution_Detections_API_BulkDuplicateRules: + Security_Detections_API_BulkDuplicateRules: type: object properties: action: @@ -23551,7 +23350,7 @@ components: type: string required: - action - Security_Solution_Detections_API_BulkEditActionResponse: + Security_Detections_API_BulkEditActionResponse: type: object properties: attributes: @@ -23560,14 +23359,14 @@ components: errors: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_NormalizedRuleError + #/components/schemas/Security_Detections_API_NormalizedRuleError type: array results: $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkEditActionResults + #/components/schemas/Security_Detections_API_BulkEditActionResults summary: $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkEditActionSummary + #/components/schemas/Security_Detections_API_BulkEditActionSummary required: - results - summary @@ -23581,32 +23380,31 @@ components: type: boolean required: - attributes - Security_Solution_Detections_API_BulkEditActionResults: + Security_Detections_API_BulkEditActionResults: type: object properties: created: items: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleResponse' + $ref: '#/components/schemas/Security_Detections_API_RuleResponse' type: array deleted: items: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleResponse' + $ref: '#/components/schemas/Security_Detections_API_RuleResponse' type: array skipped: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkActionSkipResult + $ref: '#/components/schemas/Security_Detections_API_BulkActionSkipResult' type: array updated: items: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleResponse' + $ref: '#/components/schemas/Security_Detections_API_RuleResponse' type: array required: - updated - created - deleted - skipped - Security_Solution_Detections_API_BulkEditActionSummary: + Security_Detections_API_BulkEditActionSummary: type: object properties: failed: @@ -23622,7 +23420,7 @@ components: - skipped - succeeded - total - Security_Solution_Detections_API_BulkEditRules: + Security_Detections_API_BulkEditRules: type: object properties: action: @@ -23632,8 +23430,7 @@ components: edit: description: Array of objects containing the edit operations items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkActionEditPayload + $ref: '#/components/schemas/Security_Detections_API_BulkActionEditPayload' minItems: 1 type: array ids: @@ -23648,11 +23445,11 @@ components: required: - action - edit - Security_Solution_Detections_API_BulkEditSkipReason: + Security_Detections_API_BulkEditSkipReason: enum: - RULE_NOT_MODIFIED type: string - Security_Solution_Detections_API_BulkEnableRules: + Security_Detections_API_BulkEnableRules: type: object properties: action: @@ -23670,9 +23467,9 @@ components: type: string required: - action - Security_Solution_Detections_API_BulkExportActionResponse: + Security_Detections_API_BulkExportActionResponse: type: string - Security_Solution_Detections_API_BulkExportRules: + Security_Detections_API_BulkExportRules: type: object properties: action: @@ -23690,7 +23487,7 @@ components: type: string required: - action - Security_Solution_Detections_API_BulkManualRuleRun: + Security_Detections_API_BulkManualRuleRun: type: object properties: action: @@ -23720,12 +23517,12 @@ components: required: - action - run - Security_Solution_Detections_API_ConcurrentSearches: + Security_Detections_API_ConcurrentSearches: minimum: 1 type: integer - Security_Solution_Detections_API_DataViewId: + Security_Detections_API_DataViewId: type: string - Security_Solution_Detections_API_DefaultParams: + Security_Detections_API_DefaultParams: type: object properties: command: @@ -23736,7 +23533,7 @@ components: type: string required: - command - Security_Solution_Detections_API_EcsMapping: + Security_Detections_API_EcsMapping: additionalProperties: type: object properties: @@ -23749,7 +23546,7 @@ components: type: string type: array type: object - Security_Solution_Detections_API_EndpointResponseAction: + Security_Detections_API_EndpointResponseAction: type: object properties: action_type_id: @@ -23758,53 +23555,44 @@ components: type: string params: oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_DefaultParams - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ProcessesParams + - $ref: '#/components/schemas/Security_Detections_API_DefaultParams' + - $ref: '#/components/schemas/Security_Detections_API_ProcessesParams' required: - action_type_id - params - Security_Solution_Detections_API_EqlOptionalFields: + Security_Detections_API_EqlOptionalFields: type: object properties: alert_suppression: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertSuppression + $ref: '#/components/schemas/Security_Detections_API_AlertSuppression' data_view_id: - $ref: '#/components/schemas/Security_Solution_Detections_API_DataViewId' + $ref: '#/components/schemas/Security_Detections_API_DataViewId' event_category_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EventCategoryOverride + $ref: '#/components/schemas/Security_Detections_API_EventCategoryOverride' filters: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFilterArray + $ref: '#/components/schemas/Security_Detections_API_RuleFilterArray' index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IndexPatternArray + $ref: '#/components/schemas/Security_Detections_API_IndexPatternArray' response_actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ResponseAction + $ref: '#/components/schemas/Security_Detections_API_ResponseAction' type: array tiebreaker_field: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TiebreakerField + $ref: '#/components/schemas/Security_Detections_API_TiebreakerField' timestamp_field: - $ref: '#/components/schemas/Security_Solution_Detections_API_TimestampField' - Security_Solution_Detections_API_EqlQueryLanguage: + $ref: '#/components/schemas/Security_Detections_API_TimestampField' + Security_Detections_API_EqlQueryLanguage: enum: - eql type: string - Security_Solution_Detections_API_EqlRequiredFields: + Security_Detections_API_EqlRequiredFields: type: object properties: language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlQueryLanguage + $ref: '#/components/schemas/Security_Detections_API_EqlQueryLanguage' description: Query language to use query: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleQuery' + $ref: '#/components/schemas/Security_Detections_API_RuleQuery' description: EQL query to execute type: description: Rule type @@ -23815,125 +23603,101 @@ components: - type - query - language - Security_Solution_Detections_API_EqlRule: + Security_Detections_API_EqlRule: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' required: - name - description @@ -23957,428 +23721,341 @@ components: - setup - related_integrations - required_fields - - $ref: '#/components/schemas/Security_Solution_Detections_API_ResponseFields' - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlRuleResponseFields - Security_Solution_Detections_API_EqlRuleCreateFields: + - $ref: '#/components/schemas/Security_Detections_API_ResponseFields' + - $ref: '#/components/schemas/Security_Detections_API_EqlRuleResponseFields' + Security_Detections_API_EqlRuleCreateFields: allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlRequiredFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlOptionalFields - Security_Solution_Detections_API_EqlRuleCreateProps: + - $ref: '#/components/schemas/Security_Detections_API_EqlRequiredFields' + - $ref: '#/components/schemas/Security_Detections_API_EqlOptionalFields' + Security_Detections_API_EqlRuleCreateProps: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' required: - name - description - risk_score - severity - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlRuleCreateFields - Security_Solution_Detections_API_EqlRulePatchFields: + - $ref: '#/components/schemas/Security_Detections_API_EqlRuleCreateFields' + Security_Detections_API_EqlRulePatchFields: allOf: - type: object properties: language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlQueryLanguage + $ref: '#/components/schemas/Security_Detections_API_EqlQueryLanguage' description: Query language to use query: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleQuery' + $ref: '#/components/schemas/Security_Detections_API_RuleQuery' description: EQL query to execute type: description: Rule type enum: - eql type: string - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlOptionalFields - Security_Solution_Detections_API_EqlRulePatchProps: + - $ref: '#/components/schemas/Security_Detections_API_EqlOptionalFields' + Security_Detections_API_EqlRulePatchProps: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId + $ref: '#/components/schemas/Security_Detections_API_RuleObjectId' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlRulePatchFields - Security_Solution_Detections_API_EqlRuleResponseFields: + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' + - $ref: '#/components/schemas/Security_Detections_API_EqlRulePatchFields' + Security_Detections_API_EqlRuleResponseFields: allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlRequiredFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlOptionalFields - Security_Solution_Detections_API_EqlRuleUpdateProps: + - $ref: '#/components/schemas/Security_Detections_API_EqlRequiredFields' + - $ref: '#/components/schemas/Security_Detections_API_EqlOptionalFields' + Security_Detections_API_EqlRuleUpdateProps: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId + $ref: '#/components/schemas/Security_Detections_API_RuleObjectId' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' required: - name - description - risk_score - severity - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlRuleCreateFields - Security_Solution_Detections_API_ErrorSchema: + - $ref: '#/components/schemas/Security_Detections_API_EqlRuleCreateFields' + Security_Detections_API_ErrorSchema: additionalProperties: false type: object properties: @@ -24402,133 +24079,108 @@ components: minLength: 1 type: string rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' required: - error - Security_Solution_Detections_API_EsqlQueryLanguage: + Security_Detections_API_EsqlQueryLanguage: enum: - esql type: string - Security_Solution_Detections_API_EsqlRule: + Security_Detections_API_EsqlRule: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' required: - name - description @@ -24552,301 +24204,241 @@ components: - setup - related_integrations - required_fields - - $ref: '#/components/schemas/Security_Solution_Detections_API_ResponseFields' - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlRuleResponseFields - Security_Solution_Detections_API_EsqlRuleCreateFields: + - $ref: '#/components/schemas/Security_Detections_API_ResponseFields' + - $ref: '#/components/schemas/Security_Detections_API_EsqlRuleResponseFields' + Security_Detections_API_EsqlRuleCreateFields: allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlRuleOptionalFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlRuleRequiredFields - Security_Solution_Detections_API_EsqlRuleCreateProps: + - $ref: '#/components/schemas/Security_Detections_API_EsqlRuleOptionalFields' + - $ref: '#/components/schemas/Security_Detections_API_EsqlRuleRequiredFields' + Security_Detections_API_EsqlRuleCreateProps: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' required: - name - description - risk_score - severity - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlRuleCreateFields - Security_Solution_Detections_API_EsqlRuleOptionalFields: + - $ref: '#/components/schemas/Security_Detections_API_EsqlRuleCreateFields' + Security_Detections_API_EsqlRuleOptionalFields: type: object properties: alert_suppression: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertSuppression + $ref: '#/components/schemas/Security_Detections_API_AlertSuppression' response_actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ResponseAction + $ref: '#/components/schemas/Security_Detections_API_ResponseAction' type: array - Security_Solution_Detections_API_EsqlRulePatchProps: + Security_Detections_API_EsqlRulePatchProps: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId + $ref: '#/components/schemas/Security_Detections_API_RuleObjectId' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlQueryLanguage + $ref: '#/components/schemas/Security_Detections_API_EsqlQueryLanguage' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' query: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleQuery' + $ref: '#/components/schemas/Security_Detections_API_RuleQuery' description: ESQL query to execute references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' type: description: Rule type enum: - esql type: string version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlRuleOptionalFields - Security_Solution_Detections_API_EsqlRuleRequiredFields: + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' + - $ref: '#/components/schemas/Security_Detections_API_EsqlRuleOptionalFields' + Security_Detections_API_EsqlRuleRequiredFields: type: object properties: language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlQueryLanguage + $ref: '#/components/schemas/Security_Detections_API_EsqlQueryLanguage' query: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleQuery' + $ref: '#/components/schemas/Security_Detections_API_RuleQuery' description: ESQL query to execute type: description: Rule type @@ -24857,147 +24449,118 @@ components: - type - language - query - Security_Solution_Detections_API_EsqlRuleResponseFields: + Security_Detections_API_EsqlRuleResponseFields: allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlRuleOptionalFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlRuleRequiredFields - Security_Solution_Detections_API_EsqlRuleUpdateProps: + - $ref: '#/components/schemas/Security_Detections_API_EsqlRuleOptionalFields' + - $ref: '#/components/schemas/Security_Detections_API_EsqlRuleRequiredFields' + Security_Detections_API_EsqlRuleUpdateProps: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId + $ref: '#/components/schemas/Security_Detections_API_RuleObjectId' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' required: - name - description - risk_score - severity - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlRuleCreateFields - Security_Solution_Detections_API_EventCategoryOverride: + - $ref: '#/components/schemas/Security_Detections_API_EsqlRuleCreateFields' + Security_Detections_API_EventCategoryOverride: type: string - Security_Solution_Detections_API_ExceptionListType: + Security_Detections_API_ExceptionListType: description: The exception type enum: - detection @@ -25008,7 +24571,7 @@ components: - endpoint_host_isolation_exceptions - endpoint_blocklists type: string - Security_Solution_Detections_API_ExternalRuleSource: + Security_Detections_API_ExternalRuleSource: description: >- Type of rule source for externally sourced rules, i.e. rules that have an external source, such as the Elastic Prebuilt rules repo. @@ -25016,7 +24579,7 @@ components: properties: is_customized: $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsExternalRuleCustomized + #/components/schemas/Security_Detections_API_IsExternalRuleCustomized type: enum: - external @@ -25024,7 +24587,7 @@ components: required: - type - is_customized - Security_Solution_Detections_API_FindRulesSortField: + Security_Detections_API_FindRulesSortField: enum: - created_at - createdAt @@ -25041,13 +24604,13 @@ components: - updated_at - updatedAt type: string - Security_Solution_Detections_API_HistoryWindowStart: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' - Security_Solution_Detections_API_IndexPatternArray: + Security_Detections_API_HistoryWindowStart: + $ref: '#/components/schemas/Security_Detections_API_NonEmptyString' + Security_Detections_API_IndexPatternArray: items: type: string type: array - Security_Solution_Detections_API_InternalRuleSource: + Security_Detections_API_InternalRuleSource: description: >- Type of rule source for internally sourced rules, i.e. created within the Kibana apps. @@ -25059,7 +24622,7 @@ components: type: string required: - type - Security_Solution_Detections_API_InvestigationFields: + Security_Detections_API_InvestigationFields: description: > Schema for fields relating to investigation fields. These are user defined fields we use to highlight @@ -25092,39 +24655,38 @@ components: properties: field_names: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NonEmptyString + $ref: '#/components/schemas/Security_Detections_API_NonEmptyString' minItems: 1 type: array required: - field_names - Security_Solution_Detections_API_InvestigationGuide: + Security_Detections_API_InvestigationGuide: description: Notes to help investigate alerts produced by the rule. type: string - Security_Solution_Detections_API_IsExternalRuleCustomized: + Security_Detections_API_IsExternalRuleCustomized: description: >- Determines whether an external/prebuilt rule has been customized by the user (i.e. any of its fields have been modified and diverged from the base value). type: boolean - Security_Solution_Detections_API_IsRuleEnabled: + Security_Detections_API_IsRuleEnabled: description: Determines whether the rule is enabled. type: boolean - Security_Solution_Detections_API_IsRuleImmutable: + Security_Detections_API_IsRuleImmutable: deprecated: true description: >- This field determines whether the rule is a prebuilt Elastic rule. It will be replaced with the `rule_source` field. type: boolean - Security_Solution_Detections_API_ItemsPerSearch: + Security_Detections_API_ItemsPerSearch: minimum: 1 type: integer - Security_Solution_Detections_API_KqlQueryLanguage: + Security_Detections_API_KqlQueryLanguage: enum: - kuery - lucene type: string - Security_Solution_Detections_API_MachineLearningJobId: + Security_Detections_API_MachineLearningJobId: description: Machine learning job ID oneOf: - type: string @@ -25132,125 +24694,101 @@ components: type: string minItems: 1 type: array - Security_Solution_Detections_API_MachineLearningRule: + Security_Detections_API_MachineLearningRule: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' required: - name - description @@ -25274,303 +24812,248 @@ components: - setup - related_integrations - required_fields - - $ref: '#/components/schemas/Security_Solution_Detections_API_ResponseFields' + - $ref: '#/components/schemas/Security_Detections_API_ResponseFields' - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRuleResponseFields - Security_Solution_Detections_API_MachineLearningRuleCreateFields: + #/components/schemas/Security_Detections_API_MachineLearningRuleResponseFields + Security_Detections_API_MachineLearningRuleCreateFields: allOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRuleRequiredFields + #/components/schemas/Security_Detections_API_MachineLearningRuleRequiredFields - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRuleOptionalFields - Security_Solution_Detections_API_MachineLearningRuleCreateProps: + #/components/schemas/Security_Detections_API_MachineLearningRuleOptionalFields + Security_Detections_API_MachineLearningRuleCreateProps: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' required: - name - description - risk_score - severity - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRuleCreateFields - Security_Solution_Detections_API_MachineLearningRuleOptionalFields: + #/components/schemas/Security_Detections_API_MachineLearningRuleCreateFields + Security_Detections_API_MachineLearningRuleOptionalFields: type: object properties: alert_suppression: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertSuppression - Security_Solution_Detections_API_MachineLearningRulePatchFields: + $ref: '#/components/schemas/Security_Detections_API_AlertSuppression' + Security_Detections_API_MachineLearningRulePatchFields: allOf: - type: object properties: anomaly_threshold: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AnomalyThreshold + $ref: '#/components/schemas/Security_Detections_API_AnomalyThreshold' machine_learning_job_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningJobId + #/components/schemas/Security_Detections_API_MachineLearningJobId type: description: Rule type enum: - machine_learning type: string - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRuleOptionalFields - Security_Solution_Detections_API_MachineLearningRulePatchProps: + #/components/schemas/Security_Detections_API_MachineLearningRuleOptionalFields + Security_Detections_API_MachineLearningRulePatchProps: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId + $ref: '#/components/schemas/Security_Detections_API_RuleObjectId' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRulePatchFields - Security_Solution_Detections_API_MachineLearningRuleRequiredFields: + #/components/schemas/Security_Detections_API_MachineLearningRulePatchFields + Security_Detections_API_MachineLearningRuleRequiredFields: type: object properties: anomaly_threshold: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AnomalyThreshold + $ref: '#/components/schemas/Security_Detections_API_AnomalyThreshold' machine_learning_job_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningJobId + $ref: '#/components/schemas/Security_Detections_API_MachineLearningJobId' type: description: Rule type enum: @@ -25580,272 +25063,222 @@ components: - type - machine_learning_job_id - anomaly_threshold - Security_Solution_Detections_API_MachineLearningRuleResponseFields: + Security_Detections_API_MachineLearningRuleResponseFields: allOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRuleRequiredFields + #/components/schemas/Security_Detections_API_MachineLearningRuleRequiredFields - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRuleOptionalFields - Security_Solution_Detections_API_MachineLearningRuleUpdateProps: + #/components/schemas/Security_Detections_API_MachineLearningRuleOptionalFields + Security_Detections_API_MachineLearningRuleUpdateProps: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId + $ref: '#/components/schemas/Security_Detections_API_RuleObjectId' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' required: - name - description - risk_score - severity - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRuleCreateFields - Security_Solution_Detections_API_MaxSignals: + #/components/schemas/Security_Detections_API_MachineLearningRuleCreateFields + Security_Detections_API_MaxSignals: minimum: 1 type: integer - Security_Solution_Detections_API_NewTermsFields: + Security_Detections_API_NewTermsFields: items: type: string maxItems: 3 minItems: 1 type: array - Security_Solution_Detections_API_NewTermsRule: + Security_Detections_API_NewTermsRule: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' required: - name - description @@ -25869,329 +25302,269 @@ components: - setup - related_integrations - required_fields - - $ref: '#/components/schemas/Security_Solution_Detections_API_ResponseFields' + - $ref: '#/components/schemas/Security_Detections_API_ResponseFields' - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRuleResponseFields - Security_Solution_Detections_API_NewTermsRuleCreateFields: + #/components/schemas/Security_Detections_API_NewTermsRuleResponseFields + Security_Detections_API_NewTermsRuleCreateFields: allOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRuleRequiredFields + #/components/schemas/Security_Detections_API_NewTermsRuleRequiredFields - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRuleOptionalFields + #/components/schemas/Security_Detections_API_NewTermsRuleOptionalFields - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRuleDefaultableFields - Security_Solution_Detections_API_NewTermsRuleCreateProps: + #/components/schemas/Security_Detections_API_NewTermsRuleDefaultableFields + Security_Detections_API_NewTermsRuleCreateProps: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' required: - name - description - risk_score - severity - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRuleCreateFields - Security_Solution_Detections_API_NewTermsRuleDefaultableFields: + #/components/schemas/Security_Detections_API_NewTermsRuleCreateFields + Security_Detections_API_NewTermsRuleDefaultableFields: type: object properties: language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_KqlQueryLanguage - Security_Solution_Detections_API_NewTermsRuleOptionalFields: + $ref: '#/components/schemas/Security_Detections_API_KqlQueryLanguage' + Security_Detections_API_NewTermsRuleOptionalFields: type: object properties: alert_suppression: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertSuppression + $ref: '#/components/schemas/Security_Detections_API_AlertSuppression' data_view_id: - $ref: '#/components/schemas/Security_Solution_Detections_API_DataViewId' + $ref: '#/components/schemas/Security_Detections_API_DataViewId' filters: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFilterArray + $ref: '#/components/schemas/Security_Detections_API_RuleFilterArray' index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IndexPatternArray + $ref: '#/components/schemas/Security_Detections_API_IndexPatternArray' response_actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ResponseAction + $ref: '#/components/schemas/Security_Detections_API_ResponseAction' type: array - Security_Solution_Detections_API_NewTermsRulePatchFields: + Security_Detections_API_NewTermsRulePatchFields: allOf: - type: object properties: history_window_start: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_HistoryWindowStart + $ref: '#/components/schemas/Security_Detections_API_HistoryWindowStart' new_terms_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsFields + $ref: '#/components/schemas/Security_Detections_API_NewTermsFields' query: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleQuery' + $ref: '#/components/schemas/Security_Detections_API_RuleQuery' type: description: Rule type enum: - new_terms type: string - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRuleOptionalFields + #/components/schemas/Security_Detections_API_NewTermsRuleOptionalFields - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRuleDefaultableFields - Security_Solution_Detections_API_NewTermsRulePatchProps: + #/components/schemas/Security_Detections_API_NewTermsRuleDefaultableFields + Security_Detections_API_NewTermsRulePatchProps: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId + $ref: '#/components/schemas/Security_Detections_API_RuleObjectId' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRulePatchFields - Security_Solution_Detections_API_NewTermsRuleRequiredFields: + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' + - $ref: '#/components/schemas/Security_Detections_API_NewTermsRulePatchFields' + Security_Detections_API_NewTermsRuleRequiredFields: type: object properties: history_window_start: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_HistoryWindowStart + $ref: '#/components/schemas/Security_Detections_API_HistoryWindowStart' new_terms_fields: - $ref: '#/components/schemas/Security_Solution_Detections_API_NewTermsFields' + $ref: '#/components/schemas/Security_Detections_API_NewTermsFields' query: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleQuery' + $ref: '#/components/schemas/Security_Detections_API_RuleQuery' type: description: Rule type enum: @@ -26202,189 +25575,157 @@ components: - query - new_terms_fields - history_window_start - Security_Solution_Detections_API_NewTermsRuleResponseFields: + Security_Detections_API_NewTermsRuleResponseFields: allOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRuleRequiredFields + #/components/schemas/Security_Detections_API_NewTermsRuleRequiredFields - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRuleOptionalFields + #/components/schemas/Security_Detections_API_NewTermsRuleOptionalFields - type: object properties: language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_KqlQueryLanguage + $ref: '#/components/schemas/Security_Detections_API_KqlQueryLanguage' required: - language - Security_Solution_Detections_API_NewTermsRuleUpdateProps: + Security_Detections_API_NewTermsRuleUpdateProps: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId + $ref: '#/components/schemas/Security_Detections_API_RuleObjectId' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' required: - name - description - risk_score - severity - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRuleCreateFields - Security_Solution_Detections_API_NonEmptyString: + #/components/schemas/Security_Detections_API_NewTermsRuleCreateFields + Security_Detections_API_NonEmptyString: description: A string that is not empty and does not contain only whitespace minLength: 1 pattern: ^(?! *$).+$ type: string - Security_Solution_Detections_API_NormalizedRuleAction: + Security_Detections_API_NormalizedRuleAction: additionalProperties: false type: object properties: alerts_filter: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionAlertsFilter + $ref: '#/components/schemas/Security_Detections_API_RuleActionAlertsFilter' frequency: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionFrequency + $ref: '#/components/schemas/Security_Detections_API_RuleActionFrequency' group: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionGroup + $ref: '#/components/schemas/Security_Detections_API_RuleActionGroup' id: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleActionId' + $ref: '#/components/schemas/Security_Detections_API_RuleActionId' params: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionParams + $ref: '#/components/schemas/Security_Detections_API_RuleActionParams' required: - id - params - Security_Solution_Detections_API_NormalizedRuleError: + Security_Detections_API_NormalizedRuleError: type: object properties: err_code: $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkActionsDryRunErrCode + #/components/schemas/Security_Detections_API_BulkActionsDryRunErrCode message: type: string rules: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDetailsInError + $ref: '#/components/schemas/Security_Detections_API_RuleDetailsInError' type: array status_code: type: integer @@ -26392,16 +25733,16 @@ components: - message - status_code - rules - Security_Solution_Detections_API_OsqueryParams: + Security_Detections_API_OsqueryParams: type: object properties: ecs_mapping: - $ref: '#/components/schemas/Security_Solution_Detections_API_EcsMapping' + $ref: '#/components/schemas/Security_Detections_API_EcsMapping' pack_id: type: string queries: items: - $ref: '#/components/schemas/Security_Solution_Detections_API_OsqueryQuery' + $ref: '#/components/schemas/Security_Detections_API_OsqueryQuery' type: array query: type: string @@ -26409,11 +25750,11 @@ components: type: string timeout: type: number - Security_Solution_Detections_API_OsqueryQuery: + Security_Detections_API_OsqueryQuery: type: object properties: ecs_mapping: - $ref: '#/components/schemas/Security_Solution_Detections_API_EcsMapping' + $ref: '#/components/schemas/Security_Detections_API_EcsMapping' id: description: Query ID type: string @@ -26432,7 +25773,7 @@ components: required: - id - query - Security_Solution_Detections_API_OsqueryResponseAction: + Security_Detections_API_OsqueryResponseAction: type: object properties: action_type_id: @@ -26440,11 +25781,11 @@ components: - .osquery type: string params: - $ref: '#/components/schemas/Security_Solution_Detections_API_OsqueryParams' + $ref: '#/components/schemas/Security_Detections_API_OsqueryParams' required: - action_type_id - params - Security_Solution_Detections_API_PlatformErrorResponse: + Security_Detections_API_PlatformErrorResponse: type: object properties: error: @@ -26457,7 +25798,7 @@ components: - statusCode - error - message - Security_Solution_Detections_API_ProcessesParams: + Security_Detections_API_ProcessesParams: type: object properties: command: @@ -26482,125 +25823,101 @@ components: required: - command - config - Security_Solution_Detections_API_QueryRule: + Security_Detections_API_QueryRule: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' required: - name - description @@ -26624,176 +25941,142 @@ components: - setup - related_integrations - required_fields - - $ref: '#/components/schemas/Security_Solution_Detections_API_ResponseFields' - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRuleResponseFields - Security_Solution_Detections_API_QueryRuleCreateFields: + - $ref: '#/components/schemas/Security_Detections_API_ResponseFields' + - $ref: '#/components/schemas/Security_Detections_API_QueryRuleResponseFields' + Security_Detections_API_QueryRuleCreateFields: allOf: + - $ref: '#/components/schemas/Security_Detections_API_QueryRuleRequiredFields' + - $ref: '#/components/schemas/Security_Detections_API_QueryRuleOptionalFields' - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRuleRequiredFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRuleOptionalFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRuleDefaultableFields - Security_Solution_Detections_API_QueryRuleCreateProps: + #/components/schemas/Security_Detections_API_QueryRuleDefaultableFields + Security_Detections_API_QueryRuleCreateProps: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' required: - name - description - risk_score - severity - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRuleCreateFields - Security_Solution_Detections_API_QueryRuleDefaultableFields: + - $ref: '#/components/schemas/Security_Detections_API_QueryRuleCreateFields' + Security_Detections_API_QueryRuleDefaultableFields: type: object properties: language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_KqlQueryLanguage + $ref: '#/components/schemas/Security_Detections_API_KqlQueryLanguage' query: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleQuery' - Security_Solution_Detections_API_QueryRuleOptionalFields: + $ref: '#/components/schemas/Security_Detections_API_RuleQuery' + Security_Detections_API_QueryRuleOptionalFields: type: object properties: alert_suppression: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertSuppression + $ref: '#/components/schemas/Security_Detections_API_AlertSuppression' data_view_id: - $ref: '#/components/schemas/Security_Solution_Detections_API_DataViewId' + $ref: '#/components/schemas/Security_Detections_API_DataViewId' filters: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFilterArray + $ref: '#/components/schemas/Security_Detections_API_RuleFilterArray' index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IndexPatternArray + $ref: '#/components/schemas/Security_Detections_API_IndexPatternArray' response_actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ResponseAction + $ref: '#/components/schemas/Security_Detections_API_ResponseAction' type: array saved_id: - $ref: '#/components/schemas/Security_Solution_Detections_API_SavedQueryId' - Security_Solution_Detections_API_QueryRulePatchFields: + $ref: '#/components/schemas/Security_Detections_API_SavedQueryId' + Security_Detections_API_QueryRulePatchFields: allOf: - type: object properties: @@ -26802,138 +26085,110 @@ components: enum: - query type: string + - $ref: '#/components/schemas/Security_Detections_API_QueryRuleOptionalFields' - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRuleOptionalFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRuleDefaultableFields - Security_Solution_Detections_API_QueryRulePatchProps: + #/components/schemas/Security_Detections_API_QueryRuleDefaultableFields + Security_Detections_API_QueryRulePatchProps: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId + $ref: '#/components/schemas/Security_Detections_API_RuleObjectId' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRulePatchFields - Security_Solution_Detections_API_QueryRuleRequiredFields: + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' + - $ref: '#/components/schemas/Security_Detections_API_QueryRulePatchFields' + Security_Detections_API_QueryRuleRequiredFields: type: object properties: type: @@ -26943,155 +26198,125 @@ components: type: string required: - type - Security_Solution_Detections_API_QueryRuleResponseFields: + Security_Detections_API_QueryRuleResponseFields: allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRuleRequiredFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRuleOptionalFields + - $ref: '#/components/schemas/Security_Detections_API_QueryRuleRequiredFields' + - $ref: '#/components/schemas/Security_Detections_API_QueryRuleOptionalFields' - type: object properties: language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_KqlQueryLanguage + $ref: '#/components/schemas/Security_Detections_API_KqlQueryLanguage' query: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleQuery' + $ref: '#/components/schemas/Security_Detections_API_RuleQuery' required: - query - language - Security_Solution_Detections_API_QueryRuleUpdateProps: + Security_Detections_API_QueryRuleUpdateProps: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId + $ref: '#/components/schemas/Security_Detections_API_RuleObjectId' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' required: - name - description - risk_score - severity - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRuleCreateFields - Security_Solution_Detections_API_RelatedIntegration: + - $ref: '#/components/schemas/Security_Detections_API_QueryRuleCreateFields' + Security_Detections_API_RelatedIntegration: description: > Related integration is a potential dependency of a rule. It's assumed that if the user installs @@ -27152,20 +26377,19 @@ components: type: object properties: integration: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' + $ref: '#/components/schemas/Security_Detections_API_NonEmptyString' package: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' + $ref: '#/components/schemas/Security_Detections_API_NonEmptyString' version: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' + $ref: '#/components/schemas/Security_Detections_API_NonEmptyString' required: - package - version - Security_Solution_Detections_API_RelatedIntegrationArray: + Security_Detections_API_RelatedIntegrationArray: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegration + $ref: '#/components/schemas/Security_Detections_API_RelatedIntegration' type: array - Security_Solution_Detections_API_RequiredField: + Security_Detections_API_RequiredField: description: > Describes an Elasticsearch field that is needed for the rule to function. @@ -27206,20 +26430,20 @@ components: description: Whether the field is an ECS field type: boolean name: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' + $ref: '#/components/schemas/Security_Detections_API_NonEmptyString' description: Name of an Elasticsearch field type: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' + $ref: '#/components/schemas/Security_Detections_API_NonEmptyString' description: Type of the Elasticsearch field required: - name - type - ecs - Security_Solution_Detections_API_RequiredFieldArray: + Security_Detections_API_RequiredFieldArray: items: - $ref: '#/components/schemas/Security_Solution_Detections_API_RequiredField' + $ref: '#/components/schemas/Security_Detections_API_RequiredField' type: array - Security_Solution_Detections_API_RequiredFieldInput: + Security_Detections_API_RequiredFieldInput: description: >- Input parameters to create a RequiredField. Does not include the `ecs` field, because `ecs` is calculated on the backend based on the field @@ -27227,21 +26451,19 @@ components: type: object properties: name: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' + $ref: '#/components/schemas/Security_Detections_API_NonEmptyString' description: Name of an Elasticsearch field type: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' + $ref: '#/components/schemas/Security_Detections_API_NonEmptyString' description: Type of an Elasticsearch field required: - name - type - Security_Solution_Detections_API_ResponseAction: + Security_Detections_API_ResponseAction: oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_OsqueryResponseAction - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EndpointResponseAction - Security_Solution_Detections_API_ResponseFields: + - $ref: '#/components/schemas/Security_Detections_API_OsqueryResponseAction' + - $ref: '#/components/schemas/Security_Detections_API_EndpointResponseAction' + Security_Detections_API_ResponseFields: type: object properties: created_at: @@ -27250,24 +26472,20 @@ components: created_by: type: string execution_summary: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExecutionSummary + $ref: '#/components/schemas/Security_Detections_API_RuleExecutionSummary' id: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleObjectId' + $ref: '#/components/schemas/Security_Detections_API_RuleObjectId' immutable: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleImmutable + $ref: '#/components/schemas/Security_Detections_API_IsRuleImmutable' required_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldArray + $ref: '#/components/schemas/Security_Detections_API_RequiredFieldArray' revision: minimum: 0 type: integer rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' rule_source: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleSource' + $ref: '#/components/schemas/Security_Detections_API_RuleSource' updated_at: format: date-time type: string @@ -27284,12 +26502,12 @@ components: - revision - related_integrations - required_fields - Security_Solution_Detections_API_RiskScore: + Security_Detections_API_RiskScore: description: Risk score (0 to 100) maximum: 100 minimum: 0 type: integer - Security_Solution_Detections_API_RiskScoreMapping: + Security_Detections_API_RiskScoreMapping: description: >- Overrides generated alerts' risk_score with a value from the source event @@ -27303,7 +26521,7 @@ components: - equals type: string risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' value: type: string required: @@ -27311,66 +26529,60 @@ components: - operator - value type: array - Security_Solution_Detections_API_RuleAction: + Security_Detections_API_RuleAction: type: object properties: action_type_id: description: The action type used for sending notifications. type: string alerts_filter: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionAlertsFilter + $ref: '#/components/schemas/Security_Detections_API_RuleActionAlertsFilter' frequency: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionFrequency + $ref: '#/components/schemas/Security_Detections_API_RuleActionFrequency' group: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionGroup + $ref: '#/components/schemas/Security_Detections_API_RuleActionGroup' id: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleActionId' + $ref: '#/components/schemas/Security_Detections_API_RuleActionId' params: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionParams + $ref: '#/components/schemas/Security_Detections_API_RuleActionParams' uuid: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' + $ref: '#/components/schemas/Security_Detections_API_NonEmptyString' required: - action_type_id - id - params - Security_Solution_Detections_API_RuleActionAlertsFilter: + Security_Detections_API_RuleActionAlertsFilter: additionalProperties: true type: object - Security_Solution_Detections_API_RuleActionFrequency: + Security_Detections_API_RuleActionFrequency: description: >- The action frequency defines when the action runs (for example, only on rule execution or at specific time intervals). type: object properties: notifyWhen: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionNotifyWhen + $ref: '#/components/schemas/Security_Detections_API_RuleActionNotifyWhen' summary: description: >- Action summary indicates whether we will send a summary notification about all the generate alerts or notification per individual alert type: boolean throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' nullable: true required: - summary - notifyWhen - throttle - Security_Solution_Detections_API_RuleActionGroup: + Security_Detections_API_RuleActionGroup: description: >- Optionally groups actions by use cases. Use `default` for alert notifications. type: string - Security_Solution_Detections_API_RuleActionId: + Security_Detections_API_RuleActionId: description: The connector ID. type: string - Security_Solution_Detections_API_RuleActionNotifyWhen: + Security_Detections_API_RuleActionNotifyWhen: description: >- The condition for throttling the notification: `onActionGroupChange`, `onActiveAlert`, or `onThrottleInterval` @@ -27379,13 +26591,13 @@ components: - onThrottleInterval - onActionGroupChange type: string - Security_Solution_Detections_API_RuleActionParams: + Security_Detections_API_RuleActionParams: additionalProperties: true description: >- Object containing the allowed connector fields, which varies according to the connector type. type: object - Security_Solution_Detections_API_RuleActionThrottle: + Security_Detections_API_RuleActionThrottle: description: Defines how often rule actions are taken. oneOf: - enum: @@ -27396,34 +26608,30 @@ components: example: 1h pattern: ^[1-9]\d*[smhd]$ type: string - Security_Solution_Detections_API_RuleAuthorArray: + Security_Detections_API_RuleAuthorArray: items: type: string type: array - Security_Solution_Detections_API_RuleCreateProps: + Security_Detections_API_RuleCreateProps: anyOf: + - $ref: '#/components/schemas/Security_Detections_API_EqlRuleCreateProps' + - $ref: '#/components/schemas/Security_Detections_API_QueryRuleCreateProps' - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlRuleCreateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRuleCreateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRuleCreateProps + #/components/schemas/Security_Detections_API_SavedQueryRuleCreateProps - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRuleCreateProps + #/components/schemas/Security_Detections_API_ThresholdRuleCreateProps - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRuleCreateProps + #/components/schemas/Security_Detections_API_ThreatMatchRuleCreateProps - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRuleCreateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRuleCreateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlRuleCreateProps + #/components/schemas/Security_Detections_API_MachineLearningRuleCreateProps + - $ref: '#/components/schemas/Security_Detections_API_NewTermsRuleCreateProps' + - $ref: '#/components/schemas/Security_Detections_API_EsqlRuleCreateProps' discriminator: propertyName: type - Security_Solution_Detections_API_RuleDescription: + Security_Detections_API_RuleDescription: minLength: 1 type: string - Security_Solution_Detections_API_RuleDetailsInError: + Security_Detections_API_RuleDetailsInError: type: object properties: id: @@ -27432,14 +26640,14 @@ components: type: string required: - id - Security_Solution_Detections_API_RuleExceptionList: + Security_Detections_API_RuleExceptionList: type: object properties: id: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' + $ref: '#/components/schemas/Security_Detections_API_NonEmptyString' description: ID of the exception container list_id: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' + $ref: '#/components/schemas/Security_Detections_API_NonEmptyString' description: List ID of the exception container namespace_type: description: Determines the exceptions validity in rule's Kibana space @@ -27448,14 +26656,13 @@ components: - single type: string type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ExceptionListType + $ref: '#/components/schemas/Security_Detections_API_ExceptionListType' required: - id - list_id - type - namespace_type - Security_Solution_Detections_API_RuleExecutionMetrics: + Security_Detections_API_RuleExecutionMetrics: type: object properties: execution_gap_duration_s: @@ -27481,7 +26688,7 @@ components: request/response minimum: 0 type: integer - Security_Solution_Detections_API_RuleExecutionStatus: + Security_Detections_API_RuleExecutionStatus: description: >- Custom execution status of Security rules that is different from the status used in the Alerting Framework. We merge our custom status with @@ -27514,9 +26721,9 @@ components: - failed - succeeded type: string - Security_Solution_Detections_API_RuleExecutionStatusOrder: + Security_Detections_API_RuleExecutionStatusOrder: type: integer - Security_Solution_Detections_API_RuleExecutionSummary: + Security_Detections_API_RuleExecutionSummary: type: object properties: last_execution: @@ -27530,14 +26737,13 @@ components: type: string metrics: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExecutionMetrics + #/components/schemas/Security_Detections_API_RuleExecutionMetrics status: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExecutionStatus + $ref: '#/components/schemas/Security_Detections_API_RuleExecutionStatus' description: Status of the last execution status_order: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExecutionStatusOrder + #/components/schemas/Security_Detections_API_RuleExecutionStatusOrder required: - date - status @@ -27546,19 +26752,19 @@ components: - metrics required: - last_execution - Security_Solution_Detections_API_RuleFalsePositiveArray: + Security_Detections_API_RuleFalsePositiveArray: items: type: string type: array - Security_Solution_Detections_API_RuleFilterArray: + Security_Detections_API_RuleFilterArray: items: {} type: array - Security_Solution_Detections_API_RuleInterval: + Security_Detections_API_RuleInterval: description: >- Frequency of rule execution, using a date math range. For example, "1h" means the rule runs every hour. Defaults to 5m (5 minutes). type: string - Security_Solution_Detections_API_RuleIntervalFrom: + Security_Detections_API_RuleIntervalFrom: description: >- Time from which data is analyzed each time the rule runs, using a date math range. For example, now-4200s means the rule analyzes data from 70 @@ -27566,52 +26772,47 @@ components: minutes before the start time). format: date-math type: string - Security_Solution_Detections_API_RuleIntervalTo: + Security_Detections_API_RuleIntervalTo: type: string - Security_Solution_Detections_API_RuleLicense: + Security_Detections_API_RuleLicense: description: The rule's license. type: string - Security_Solution_Detections_API_RuleMetadata: + Security_Detections_API_RuleMetadata: additionalProperties: true type: object - Security_Solution_Detections_API_RuleName: + Security_Detections_API_RuleName: minLength: 1 type: string - Security_Solution_Detections_API_RuleNameOverride: + Security_Detections_API_RuleNameOverride: description: Sets the source field for the alert's signal.rule.name value type: string - Security_Solution_Detections_API_RuleObjectId: - $ref: '#/components/schemas/Security_Solution_Detections_API_UUID' - Security_Solution_Detections_API_RulePatchProps: + Security_Detections_API_RuleObjectId: + $ref: '#/components/schemas/Security_Detections_API_UUID' + Security_Detections_API_RulePatchProps: anyOf: + - $ref: '#/components/schemas/Security_Detections_API_EqlRulePatchProps' + - $ref: '#/components/schemas/Security_Detections_API_QueryRulePatchProps' - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlRulePatchProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRulePatchProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRulePatchProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRulePatchProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRulePatchProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRulePatchProps + #/components/schemas/Security_Detections_API_SavedQueryRulePatchProps + - $ref: '#/components/schemas/Security_Detections_API_ThresholdRulePatchProps' - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRulePatchProps + #/components/schemas/Security_Detections_API_ThreatMatchRulePatchProps - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlRulePatchProps - Security_Solution_Detections_API_RulePreviewLoggedRequest: + #/components/schemas/Security_Detections_API_MachineLearningRulePatchProps + - $ref: '#/components/schemas/Security_Detections_API_NewTermsRulePatchProps' + - $ref: '#/components/schemas/Security_Detections_API_EsqlRulePatchProps' + Security_Detections_API_RulePreviewLoggedRequest: type: object properties: description: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' + $ref: '#/components/schemas/Security_Detections_API_NonEmptyString' duration: type: integer request: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' + $ref: '#/components/schemas/Security_Detections_API_NonEmptyString' required: - request - Security_Solution_Detections_API_RulePreviewLogs: + Security_Detections_API_RulePreviewLogs: type: object properties: duration: @@ -27619,26 +26820,24 @@ components: type: integer errors: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NonEmptyString + $ref: '#/components/schemas/Security_Detections_API_NonEmptyString' type: array requests: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RulePreviewLoggedRequest + #/components/schemas/Security_Detections_API_RulePreviewLoggedRequest type: array startedAt: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' + $ref: '#/components/schemas/Security_Detections_API_NonEmptyString' warnings: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NonEmptyString + $ref: '#/components/schemas/Security_Detections_API_NonEmptyString' type: array required: - errors - warnings - duration - Security_Solution_Detections_API_RulePreviewParams: + Security_Detections_API_RulePreviewParams: type: object properties: invocationCount: @@ -27649,30 +26848,28 @@ components: required: - invocationCount - timeframeEnd - Security_Solution_Detections_API_RuleQuery: + Security_Detections_API_RuleQuery: type: string - Security_Solution_Detections_API_RuleReferenceArray: + Security_Detections_API_RuleReferenceArray: items: type: string type: array - Security_Solution_Detections_API_RuleResponse: + Security_Detections_API_RuleResponse: anyOf: - - $ref: '#/components/schemas/Security_Solution_Detections_API_EqlRule' - - $ref: '#/components/schemas/Security_Solution_Detections_API_QueryRule' - - $ref: '#/components/schemas/Security_Solution_Detections_API_SavedQueryRule' - - $ref: '#/components/schemas/Security_Solution_Detections_API_ThresholdRule' - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRule - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRule - - $ref: '#/components/schemas/Security_Solution_Detections_API_NewTermsRule' - - $ref: '#/components/schemas/Security_Solution_Detections_API_EsqlRule' + - $ref: '#/components/schemas/Security_Detections_API_EqlRule' + - $ref: '#/components/schemas/Security_Detections_API_QueryRule' + - $ref: '#/components/schemas/Security_Detections_API_SavedQueryRule' + - $ref: '#/components/schemas/Security_Detections_API_ThresholdRule' + - $ref: '#/components/schemas/Security_Detections_API_ThreatMatchRule' + - $ref: '#/components/schemas/Security_Detections_API_MachineLearningRule' + - $ref: '#/components/schemas/Security_Detections_API_NewTermsRule' + - $ref: '#/components/schemas/Security_Detections_API_EsqlRule' discriminator: propertyName: type - Security_Solution_Detections_API_RuleSignatureId: + Security_Detections_API_RuleSignatureId: description: Could be any string, not necessarily a UUID type: string - Security_Solution_Detections_API_RuleSource: + Security_Detections_API_RuleSource: description: >- Discriminated union that determines whether the rule is internally sourced (created within the Kibana app) or has an external source, such @@ -27680,175 +26877,145 @@ components: discriminator: propertyName: type oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ExternalRuleSource - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InternalRuleSource - Security_Solution_Detections_API_RuleTagArray: + - $ref: '#/components/schemas/Security_Detections_API_ExternalRuleSource' + - $ref: '#/components/schemas/Security_Detections_API_InternalRuleSource' + Security_Detections_API_RuleTagArray: description: >- String array containing words and phrases to help categorize, filter, and search rules. Defaults to an empty array. items: type: string type: array - Security_Solution_Detections_API_RuleUpdateProps: + Security_Detections_API_RuleUpdateProps: anyOf: + - $ref: '#/components/schemas/Security_Detections_API_EqlRuleUpdateProps' + - $ref: '#/components/schemas/Security_Detections_API_QueryRuleUpdateProps' - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlRuleUpdateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRuleUpdateProps + #/components/schemas/Security_Detections_API_SavedQueryRuleUpdateProps - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRuleUpdateProps + #/components/schemas/Security_Detections_API_ThresholdRuleUpdateProps - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRuleUpdateProps + #/components/schemas/Security_Detections_API_ThreatMatchRuleUpdateProps - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRuleUpdateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRuleUpdateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRuleUpdateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlRuleUpdateProps + #/components/schemas/Security_Detections_API_MachineLearningRuleUpdateProps + - $ref: '#/components/schemas/Security_Detections_API_NewTermsRuleUpdateProps' + - $ref: '#/components/schemas/Security_Detections_API_EsqlRuleUpdateProps' discriminator: propertyName: type - Security_Solution_Detections_API_RuleVersion: + Security_Detections_API_RuleVersion: description: The rule's version number. minimum: 1 type: integer - Security_Solution_Detections_API_SavedObjectResolveAliasPurpose: + Security_Detections_API_SavedObjectResolveAliasPurpose: enum: - savedObjectConversion - savedObjectImport type: string - Security_Solution_Detections_API_SavedObjectResolveAliasTargetId: + Security_Detections_API_SavedObjectResolveAliasTargetId: type: string - Security_Solution_Detections_API_SavedObjectResolveOutcome: + Security_Detections_API_SavedObjectResolveOutcome: enum: - exactMatch - aliasMatch - conflict type: string - Security_Solution_Detections_API_SavedQueryId: + Security_Detections_API_SavedQueryId: type: string - Security_Solution_Detections_API_SavedQueryRule: + Security_Detections_API_SavedQueryRule: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' required: - name - description @@ -27872,321 +27039,264 @@ components: - setup - related_integrations - required_fields - - $ref: '#/components/schemas/Security_Solution_Detections_API_ResponseFields' + - $ref: '#/components/schemas/Security_Detections_API_ResponseFields' - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRuleResponseFields - Security_Solution_Detections_API_SavedQueryRuleCreateFields: + #/components/schemas/Security_Detections_API_SavedQueryRuleResponseFields + Security_Detections_API_SavedQueryRuleCreateFields: allOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRuleRequiredFields + #/components/schemas/Security_Detections_API_SavedQueryRuleRequiredFields - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRuleOptionalFields + #/components/schemas/Security_Detections_API_SavedQueryRuleOptionalFields - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRuleDefaultableFields - Security_Solution_Detections_API_SavedQueryRuleCreateProps: + #/components/schemas/Security_Detections_API_SavedQueryRuleDefaultableFields + Security_Detections_API_SavedQueryRuleCreateProps: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' required: - name - description - risk_score - severity - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRuleCreateFields - Security_Solution_Detections_API_SavedQueryRuleDefaultableFields: + #/components/schemas/Security_Detections_API_SavedQueryRuleCreateFields + Security_Detections_API_SavedQueryRuleDefaultableFields: type: object properties: language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_KqlQueryLanguage - Security_Solution_Detections_API_SavedQueryRuleOptionalFields: + $ref: '#/components/schemas/Security_Detections_API_KqlQueryLanguage' + Security_Detections_API_SavedQueryRuleOptionalFields: type: object properties: alert_suppression: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertSuppression + $ref: '#/components/schemas/Security_Detections_API_AlertSuppression' data_view_id: - $ref: '#/components/schemas/Security_Solution_Detections_API_DataViewId' + $ref: '#/components/schemas/Security_Detections_API_DataViewId' filters: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFilterArray + $ref: '#/components/schemas/Security_Detections_API_RuleFilterArray' index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IndexPatternArray + $ref: '#/components/schemas/Security_Detections_API_IndexPatternArray' query: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleQuery' + $ref: '#/components/schemas/Security_Detections_API_RuleQuery' response_actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ResponseAction + $ref: '#/components/schemas/Security_Detections_API_ResponseAction' type: array - Security_Solution_Detections_API_SavedQueryRulePatchFields: + Security_Detections_API_SavedQueryRulePatchFields: allOf: - type: object properties: saved_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryId + $ref: '#/components/schemas/Security_Detections_API_SavedQueryId' type: description: Rule type enum: - saved_query type: string - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRuleOptionalFields + #/components/schemas/Security_Detections_API_SavedQueryRuleOptionalFields - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRuleDefaultableFields - Security_Solution_Detections_API_SavedQueryRulePatchProps: + #/components/schemas/Security_Detections_API_SavedQueryRuleDefaultableFields + Security_Detections_API_SavedQueryRulePatchProps: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId + $ref: '#/components/schemas/Security_Detections_API_RuleObjectId' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRulePatchFields - Security_Solution_Detections_API_SavedQueryRuleRequiredFields: + #/components/schemas/Security_Detections_API_SavedQueryRulePatchFields + Security_Detections_API_SavedQueryRuleRequiredFields: type: object properties: saved_id: - $ref: '#/components/schemas/Security_Solution_Detections_API_SavedQueryId' + $ref: '#/components/schemas/Security_Detections_API_SavedQueryId' type: description: Rule type enum: @@ -28195,166 +27305,138 @@ components: required: - type - saved_id - Security_Solution_Detections_API_SavedQueryRuleResponseFields: + Security_Detections_API_SavedQueryRuleResponseFields: allOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRuleRequiredFields + #/components/schemas/Security_Detections_API_SavedQueryRuleRequiredFields - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRuleOptionalFields + #/components/schemas/Security_Detections_API_SavedQueryRuleOptionalFields - type: object properties: language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_KqlQueryLanguage + $ref: '#/components/schemas/Security_Detections_API_KqlQueryLanguage' required: - language - Security_Solution_Detections_API_SavedQueryRuleUpdateProps: + Security_Detections_API_SavedQueryRuleUpdateProps: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId + $ref: '#/components/schemas/Security_Detections_API_RuleObjectId' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' required: - name - description - risk_score - severity - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRuleCreateFields - Security_Solution_Detections_API_SetAlertsStatusByIds: + #/components/schemas/Security_Detections_API_SavedQueryRuleCreateFields + Security_Detections_API_SetAlertsStatusByIds: type: object properties: signal_ids: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NonEmptyString + $ref: '#/components/schemas/Security_Detections_API_NonEmptyString' minItems: 1 type: array status: - $ref: '#/components/schemas/Security_Solution_Detections_API_AlertStatus' + $ref: '#/components/schemas/Security_Detections_API_AlertStatus' required: - signal_ids - status - Security_Solution_Detections_API_SetAlertsStatusByQuery: + Security_Detections_API_SetAlertsStatusByQuery: type: object properties: conflicts: @@ -28367,23 +27449,23 @@ components: additionalProperties: true type: object status: - $ref: '#/components/schemas/Security_Solution_Detections_API_AlertStatus' + $ref: '#/components/schemas/Security_Detections_API_AlertStatus' required: - query - status - Security_Solution_Detections_API_SetAlertTags: + Security_Detections_API_SetAlertTags: type: object properties: tags_to_add: - $ref: '#/components/schemas/Security_Solution_Detections_API_AlertTags' + $ref: '#/components/schemas/Security_Detections_API_AlertTags' tags_to_remove: - $ref: '#/components/schemas/Security_Solution_Detections_API_AlertTags' + $ref: '#/components/schemas/Security_Detections_API_AlertTags' required: - tags_to_add - tags_to_remove - Security_Solution_Detections_API_SetupGuide: + Security_Detections_API_SetupGuide: type: string - Security_Solution_Detections_API_Severity: + Security_Detections_API_Severity: description: Severity of the rule enum: - low @@ -28391,7 +27473,7 @@ components: - high - critical type: string - Security_Solution_Detections_API_SeverityMapping: + Security_Detections_API_SeverityMapping: description: Overrides generated alerts' severity with values from the source event items: type: object @@ -28403,7 +27485,7 @@ components: - equals type: string severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' value: type: string required: @@ -28412,7 +27494,7 @@ components: - severity - value type: array - Security_Solution_Detections_API_SiemErrorResponse: + Security_Detections_API_SiemErrorResponse: type: object properties: message: @@ -28422,48 +27504,47 @@ components: required: - status_code - message - Security_Solution_Detections_API_SortOrder: + Security_Detections_API_SortOrder: enum: - asc - desc type: string - Security_Solution_Detections_API_Threat: + Security_Detections_API_Threat: type: object properties: framework: description: Relevant attack framework type: string tactic: - $ref: '#/components/schemas/Security_Solution_Detections_API_ThreatTactic' + $ref: '#/components/schemas/Security_Detections_API_ThreatTactic' technique: description: Array containing information on the attack techniques (optional) items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatTechnique + $ref: '#/components/schemas/Security_Detections_API_ThreatTechnique' type: array required: - framework - tactic - Security_Solution_Detections_API_ThreatArray: + Security_Detections_API_ThreatArray: items: - $ref: '#/components/schemas/Security_Solution_Detections_API_Threat' + $ref: '#/components/schemas/Security_Detections_API_Threat' type: array - Security_Solution_Detections_API_ThreatFilters: + Security_Detections_API_ThreatFilters: items: description: >- Query and filter context array used to filter documents from the Elasticsearch index containing the threat values type: array - Security_Solution_Detections_API_ThreatIndex: + Security_Detections_API_ThreatIndex: items: type: string type: array - Security_Solution_Detections_API_ThreatIndicatorPath: + Security_Detections_API_ThreatIndicatorPath: description: >- Defines the path to the threat indicator in the indicator documents (optional) type: string - Security_Solution_Detections_API_ThreatMapping: + Security_Detections_API_ThreatMapping: items: type: object properties: @@ -28472,15 +27553,13 @@ components: type: object properties: field: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NonEmptyString + $ref: '#/components/schemas/Security_Detections_API_NonEmptyString' type: enum: - mapping type: string value: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NonEmptyString + $ref: '#/components/schemas/Security_Detections_API_NonEmptyString' required: - field - type @@ -28490,125 +27569,101 @@ components: - entries minItems: 1 type: array - Security_Solution_Detections_API_ThreatMatchRule: + Security_Detections_API_ThreatMatchRule: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' required: - name - description @@ -28632,343 +27687,282 @@ components: - setup - related_integrations - required_fields - - $ref: '#/components/schemas/Security_Solution_Detections_API_ResponseFields' + - $ref: '#/components/schemas/Security_Detections_API_ResponseFields' - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRuleResponseFields - Security_Solution_Detections_API_ThreatMatchRuleCreateFields: + #/components/schemas/Security_Detections_API_ThreatMatchRuleResponseFields + Security_Detections_API_ThreatMatchRuleCreateFields: allOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRuleRequiredFields + #/components/schemas/Security_Detections_API_ThreatMatchRuleRequiredFields - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRuleOptionalFields + #/components/schemas/Security_Detections_API_ThreatMatchRuleOptionalFields - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRuleDefaultableFields - Security_Solution_Detections_API_ThreatMatchRuleCreateProps: + #/components/schemas/Security_Detections_API_ThreatMatchRuleDefaultableFields + Security_Detections_API_ThreatMatchRuleCreateProps: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' required: - name - description - risk_score - severity - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRuleCreateFields - Security_Solution_Detections_API_ThreatMatchRuleDefaultableFields: + #/components/schemas/Security_Detections_API_ThreatMatchRuleCreateFields + Security_Detections_API_ThreatMatchRuleDefaultableFields: type: object properties: language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_KqlQueryLanguage - Security_Solution_Detections_API_ThreatMatchRuleOptionalFields: + $ref: '#/components/schemas/Security_Detections_API_KqlQueryLanguage' + Security_Detections_API_ThreatMatchRuleOptionalFields: type: object properties: alert_suppression: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertSuppression + $ref: '#/components/schemas/Security_Detections_API_AlertSuppression' concurrent_searches: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ConcurrentSearches + $ref: '#/components/schemas/Security_Detections_API_ConcurrentSearches' data_view_id: - $ref: '#/components/schemas/Security_Solution_Detections_API_DataViewId' + $ref: '#/components/schemas/Security_Detections_API_DataViewId' filters: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFilterArray + $ref: '#/components/schemas/Security_Detections_API_RuleFilterArray' index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IndexPatternArray + $ref: '#/components/schemas/Security_Detections_API_IndexPatternArray' items_per_search: - $ref: '#/components/schemas/Security_Solution_Detections_API_ItemsPerSearch' + $ref: '#/components/schemas/Security_Detections_API_ItemsPerSearch' saved_id: - $ref: '#/components/schemas/Security_Solution_Detections_API_SavedQueryId' + $ref: '#/components/schemas/Security_Detections_API_SavedQueryId' threat_filters: - $ref: '#/components/schemas/Security_Solution_Detections_API_ThreatFilters' + $ref: '#/components/schemas/Security_Detections_API_ThreatFilters' threat_indicator_path: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatIndicatorPath + $ref: '#/components/schemas/Security_Detections_API_ThreatIndicatorPath' threat_language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_KqlQueryLanguage - Security_Solution_Detections_API_ThreatMatchRulePatchFields: + $ref: '#/components/schemas/Security_Detections_API_KqlQueryLanguage' + Security_Detections_API_ThreatMatchRulePatchFields: allOf: - type: object properties: query: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleQuery' + $ref: '#/components/schemas/Security_Detections_API_RuleQuery' threat_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatIndex + $ref: '#/components/schemas/Security_Detections_API_ThreatIndex' threat_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMapping + $ref: '#/components/schemas/Security_Detections_API_ThreatMapping' threat_query: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatQuery + $ref: '#/components/schemas/Security_Detections_API_ThreatQuery' type: description: Rule type enum: - threat_match type: string - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRuleOptionalFields + #/components/schemas/Security_Detections_API_ThreatMatchRuleOptionalFields - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRuleDefaultableFields - Security_Solution_Detections_API_ThreatMatchRulePatchProps: + #/components/schemas/Security_Detections_API_ThreatMatchRuleDefaultableFields + Security_Detections_API_ThreatMatchRulePatchProps: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId + $ref: '#/components/schemas/Security_Detections_API_RuleObjectId' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRulePatchFields - Security_Solution_Detections_API_ThreatMatchRuleRequiredFields: + #/components/schemas/Security_Detections_API_ThreatMatchRulePatchFields + Security_Detections_API_ThreatMatchRuleRequiredFields: type: object properties: query: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleQuery' + $ref: '#/components/schemas/Security_Detections_API_RuleQuery' threat_index: - $ref: '#/components/schemas/Security_Solution_Detections_API_ThreatIndex' + $ref: '#/components/schemas/Security_Detections_API_ThreatIndex' threat_mapping: - $ref: '#/components/schemas/Security_Solution_Detections_API_ThreatMapping' + $ref: '#/components/schemas/Security_Detections_API_ThreatMapping' threat_query: - $ref: '#/components/schemas/Security_Solution_Detections_API_ThreatQuery' + $ref: '#/components/schemas/Security_Detections_API_ThreatQuery' type: description: Rule type enum: @@ -28980,155 +27974,128 @@ components: - threat_query - threat_mapping - threat_index - Security_Solution_Detections_API_ThreatMatchRuleResponseFields: + Security_Detections_API_ThreatMatchRuleResponseFields: allOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRuleRequiredFields + #/components/schemas/Security_Detections_API_ThreatMatchRuleRequiredFields - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRuleOptionalFields + #/components/schemas/Security_Detections_API_ThreatMatchRuleOptionalFields - type: object properties: language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_KqlQueryLanguage + $ref: '#/components/schemas/Security_Detections_API_KqlQueryLanguage' required: - language - Security_Solution_Detections_API_ThreatMatchRuleUpdateProps: + Security_Detections_API_ThreatMatchRuleUpdateProps: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId + $ref: '#/components/schemas/Security_Detections_API_RuleObjectId' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' required: - name - description - risk_score - severity - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRuleCreateFields - Security_Solution_Detections_API_ThreatQuery: + #/components/schemas/Security_Detections_API_ThreatMatchRuleCreateFields + Security_Detections_API_ThreatQuery: description: Query to run type: string - Security_Solution_Detections_API_ThreatSubtechnique: + Security_Detections_API_ThreatSubtechnique: type: object properties: id: @@ -29144,7 +28111,7 @@ components: - id - name - reference - Security_Solution_Detections_API_ThreatTactic: + Security_Detections_API_ThreatTactic: type: object properties: id: @@ -29160,7 +28127,7 @@ components: - id - name - reference - Security_Solution_Detections_API_ThreatTechnique: + Security_Detections_API_ThreatTechnique: type: object properties: id: @@ -29175,35 +28142,33 @@ components: subtechnique: description: Array containing more specific information on the attack technique items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatSubtechnique + $ref: '#/components/schemas/Security_Detections_API_ThreatSubtechnique' type: array required: - id - name - reference - Security_Solution_Detections_API_Threshold: + Security_Detections_API_Threshold: type: object properties: cardinality: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdCardinality + $ref: '#/components/schemas/Security_Detections_API_ThresholdCardinality' field: - $ref: '#/components/schemas/Security_Solution_Detections_API_ThresholdField' + $ref: '#/components/schemas/Security_Detections_API_ThresholdField' value: - $ref: '#/components/schemas/Security_Solution_Detections_API_ThresholdValue' + $ref: '#/components/schemas/Security_Detections_API_ThresholdValue' required: - field - value - Security_Solution_Detections_API_ThresholdAlertSuppression: + Security_Detections_API_ThresholdAlertSuppression: type: object properties: duration: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertSuppressionDuration + #/components/schemas/Security_Detections_API_AlertSuppressionDuration required: - duration - Security_Solution_Detections_API_ThresholdCardinality: + Security_Detections_API_ThresholdCardinality: items: type: object properties: @@ -29216,132 +28181,108 @@ components: - field - value type: array - Security_Solution_Detections_API_ThresholdField: + Security_Detections_API_ThresholdField: description: Field to aggregate on oneOf: - type: string - items: type: string type: array - Security_Solution_Detections_API_ThresholdRule: + Security_Detections_API_ThresholdRule: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' required: - name - description @@ -29365,319 +28306,265 @@ components: - setup - related_integrations - required_fields - - $ref: '#/components/schemas/Security_Solution_Detections_API_ResponseFields' + - $ref: '#/components/schemas/Security_Detections_API_ResponseFields' - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRuleResponseFields - Security_Solution_Detections_API_ThresholdRuleCreateFields: + #/components/schemas/Security_Detections_API_ThresholdRuleResponseFields + Security_Detections_API_ThresholdRuleCreateFields: allOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRuleRequiredFields + #/components/schemas/Security_Detections_API_ThresholdRuleRequiredFields - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRuleOptionalFields + #/components/schemas/Security_Detections_API_ThresholdRuleOptionalFields - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRuleDefaultableFields - Security_Solution_Detections_API_ThresholdRuleCreateProps: + #/components/schemas/Security_Detections_API_ThresholdRuleDefaultableFields + Security_Detections_API_ThresholdRuleCreateProps: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' required: - name - description - risk_score - severity - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRuleCreateFields - Security_Solution_Detections_API_ThresholdRuleDefaultableFields: + #/components/schemas/Security_Detections_API_ThresholdRuleCreateFields + Security_Detections_API_ThresholdRuleDefaultableFields: type: object properties: language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_KqlQueryLanguage - Security_Solution_Detections_API_ThresholdRuleOptionalFields: + $ref: '#/components/schemas/Security_Detections_API_KqlQueryLanguage' + Security_Detections_API_ThresholdRuleOptionalFields: type: object properties: alert_suppression: $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdAlertSuppression + #/components/schemas/Security_Detections_API_ThresholdAlertSuppression data_view_id: - $ref: '#/components/schemas/Security_Solution_Detections_API_DataViewId' + $ref: '#/components/schemas/Security_Detections_API_DataViewId' filters: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFilterArray + $ref: '#/components/schemas/Security_Detections_API_RuleFilterArray' index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IndexPatternArray + $ref: '#/components/schemas/Security_Detections_API_IndexPatternArray' saved_id: - $ref: '#/components/schemas/Security_Solution_Detections_API_SavedQueryId' - Security_Solution_Detections_API_ThresholdRulePatchFields: + $ref: '#/components/schemas/Security_Detections_API_SavedQueryId' + Security_Detections_API_ThresholdRulePatchFields: allOf: - type: object properties: query: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleQuery' + $ref: '#/components/schemas/Security_Detections_API_RuleQuery' threshold: - $ref: '#/components/schemas/Security_Solution_Detections_API_Threshold' + $ref: '#/components/schemas/Security_Detections_API_Threshold' type: description: Rule type enum: - threshold type: string - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRuleOptionalFields + #/components/schemas/Security_Detections_API_ThresholdRuleOptionalFields - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRuleDefaultableFields - Security_Solution_Detections_API_ThresholdRulePatchProps: + #/components/schemas/Security_Detections_API_ThresholdRuleDefaultableFields + Security_Detections_API_ThresholdRulePatchProps: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId + $ref: '#/components/schemas/Security_Detections_API_RuleObjectId' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRulePatchFields - Security_Solution_Detections_API_ThresholdRuleRequiredFields: + #/components/schemas/Security_Detections_API_ThresholdRulePatchFields + Security_Detections_API_ThresholdRuleRequiredFields: type: object properties: query: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleQuery' + $ref: '#/components/schemas/Security_Detections_API_RuleQuery' threshold: - $ref: '#/components/schemas/Security_Solution_Detections_API_Threshold' + $ref: '#/components/schemas/Security_Detections_API_Threshold' type: description: Rule type enum: @@ -29687,156 +28574,129 @@ components: - type - query - threshold - Security_Solution_Detections_API_ThresholdRuleResponseFields: + Security_Detections_API_ThresholdRuleResponseFields: allOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRuleRequiredFields + #/components/schemas/Security_Detections_API_ThresholdRuleRequiredFields - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRuleOptionalFields + #/components/schemas/Security_Detections_API_ThresholdRuleOptionalFields - type: object properties: language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_KqlQueryLanguage + $ref: '#/components/schemas/Security_Detections_API_KqlQueryLanguage' required: - language - Security_Solution_Detections_API_ThresholdRuleUpdateProps: + Security_Detections_API_ThresholdRuleUpdateProps: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId + $ref: '#/components/schemas/Security_Detections_API_RuleObjectId' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' required: - name - description - risk_score - severity - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRuleCreateFields - Security_Solution_Detections_API_ThresholdValue: + #/components/schemas/Security_Detections_API_ThresholdRuleCreateFields + Security_Detections_API_ThresholdValue: description: Threshold value minimum: 1 type: integer - Security_Solution_Detections_API_ThrottleForBulkActions: + Security_Detections_API_ThrottleForBulkActions: description: >- The condition for throttling the notification: 'rule', 'no_actions', or time duration @@ -29846,29 +28706,29 @@ components: - 1d - 7d type: string - Security_Solution_Detections_API_TiebreakerField: + Security_Detections_API_TiebreakerField: description: Sets a secondary field for sorting events type: string - Security_Solution_Detections_API_TimelineTemplateId: + Security_Detections_API_TimelineTemplateId: description: Timeline template ID type: string - Security_Solution_Detections_API_TimelineTemplateTitle: + Security_Detections_API_TimelineTemplateTitle: description: Timeline template title type: string - Security_Solution_Detections_API_TimestampField: + Security_Detections_API_TimestampField: description: Contains the event timestamp used for sorting a sequence of events type: string - Security_Solution_Detections_API_TimestampOverride: + Security_Detections_API_TimestampOverride: description: Sets the time field used to query indices type: string - Security_Solution_Detections_API_TimestampOverrideFallbackDisabled: + Security_Detections_API_TimestampOverrideFallbackDisabled: description: Disables the fallback to the event's @timestamp field type: boolean - Security_Solution_Detections_API_UUID: + Security_Detections_API_UUID: description: A universally unique identifier format: uuid type: string - Security_Solution_Detections_API_WarningSchema: + Security_Detections_API_WarningSchema: type: object properties: actionPath: @@ -29883,16 +28743,14 @@ components: - type - message - actionPath - Security_Solution_Endpoint_Exceptions_API_EndpointList: + Security_Endpoint_Exceptions_API_EndpointList: oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionList + - $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_ExceptionList' - additionalProperties: false type: object - Security_Solution_Endpoint_Exceptions_API_EndpointListItem: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItem - Security_Solution_Endpoint_Exceptions_API_ExceptionList: + Security_Endpoint_Exceptions_API_EndpointListItem: + $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItem' + Security_Endpoint_Exceptions_API_ExceptionList: type: object properties: _version: @@ -29904,35 +28762,35 @@ components: type: string description: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListDescription + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListDescription id: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListId + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListId immutable: type: boolean list_id: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListHumanId + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListHumanId meta: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListMeta + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListMeta name: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListName + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListName namespace_type: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionNamespaceType + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionNamespaceType os_types: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListOsTypeArray + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListOsTypeArray tags: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListTags + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListTags tie_breaker_id: type: string type: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListType + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListType updated_at: format: date-time type: string @@ -29940,7 +28798,7 @@ components: type: string version: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListVersion + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListVersion required: - id - list_id @@ -29955,23 +28813,21 @@ components: - created_by - updated_at - updated_by - Security_Solution_Endpoint_Exceptions_API_ExceptionListDescription: + Security_Endpoint_Exceptions_API_ExceptionListDescription: type: string - Security_Solution_Endpoint_Exceptions_API_ExceptionListHumanId: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString + Security_Endpoint_Exceptions_API_ExceptionListHumanId: + $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' description: Human readable string identifier, e.g. `trusted-linux-processes` - Security_Solution_Endpoint_Exceptions_API_ExceptionListId: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - Security_Solution_Endpoint_Exceptions_API_ExceptionListItem: + Security_Endpoint_Exceptions_API_ExceptionListId: + $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' + Security_Endpoint_Exceptions_API_ExceptionListItem: type: object properties: _version: type: string comments: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemCommentArray + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemCommentArray created_at: format: date-time type: string @@ -29979,42 +28835,42 @@ components: type: string description: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemDescription + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemDescription entries: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryArray + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemEntryArray expire_time: format: date-time type: string id: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemId + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemId item_id: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemHumanId + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemHumanId list_id: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListHumanId + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListHumanId meta: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemMeta + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemMeta name: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemName + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemName namespace_type: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionNamespaceType + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionNamespaceType os_types: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemOsTypeArray + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemOsTypeArray tags: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemTags + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemTags tie_breaker_id: type: string type: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemType + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemType updated_at: format: date-time type: string @@ -30035,69 +28891,64 @@ components: - created_by - updated_at - updated_by - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemComment: + Security_Endpoint_Exceptions_API_ExceptionListItemComment: type: object properties: comment: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString + $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' created_at: format: date-time type: string created_by: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString + $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' id: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString + $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' updated_at: format: date-time type: string updated_by: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString + $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' required: - id - comment - created_at - created_by - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemCommentArray: + Security_Endpoint_Exceptions_API_ExceptionListItemCommentArray: items: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemComment + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemComment type: array - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemDescription: + Security_Endpoint_Exceptions_API_ExceptionListItemDescription: type: string - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntry: + Security_Endpoint_Exceptions_API_ExceptionListItemEntry: anyOf: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryMatch + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemEntryMatch - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryMatchAny + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemEntryMatchAny - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryList + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemEntryList - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryExists + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemEntryExists - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryNested + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemEntryNested - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryMatchWildcard + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemEntryMatchWildcard discriminator: propertyName: type - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryArray: + Security_Endpoint_Exceptions_API_ExceptionListItemEntryArray: items: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntry + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemEntry type: array - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryExists: + Security_Endpoint_Exceptions_API_ExceptionListItemEntryExists: type: object properties: field: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString + $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' operator: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryOperator + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemEntryOperator type: enum: - exists @@ -30106,27 +28957,24 @@ components: - type - field - operator - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryList: + Security_Endpoint_Exceptions_API_ExceptionListItemEntryList: type: object properties: field: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString + $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' list: type: object properties: id: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ListId + $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_ListId' type: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ListType + $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_ListType' required: - id - type operator: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryOperator + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemEntryOperator type: enum: - list @@ -30136,36 +28984,33 @@ components: - field - list - operator - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryMatch: + Security_Endpoint_Exceptions_API_ExceptionListItemEntryMatch: type: object properties: field: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString + $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' operator: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryOperator + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemEntryOperator type: enum: - match type: string value: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString + $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' required: - type - field - value - operator - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryMatchAny: + Security_Endpoint_Exceptions_API_ExceptionListItemEntryMatchAny: type: object properties: field: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString + $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' operator: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryOperator + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemEntryOperator type: enum: - match_any @@ -30173,7 +29018,7 @@ components: value: items: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString + #/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString minItems: 1 type: array required: @@ -30181,39 +29026,36 @@ components: - field - value - operator - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryMatchWildcard: + Security_Endpoint_Exceptions_API_ExceptionListItemEntryMatchWildcard: type: object properties: field: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString + $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' operator: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryOperator + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemEntryOperator type: enum: - wildcard type: string value: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString + $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' required: - type - field - value - operator - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryNested: + Security_Endpoint_Exceptions_API_ExceptionListItemEntryNested: type: object properties: entries: items: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryNestedEntryItem + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemEntryNestedEntryItem minItems: 1 type: array field: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString + $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' type: enum: - nested @@ -30222,66 +29064,62 @@ components: - type - field - entries - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryNestedEntryItem: + Security_Endpoint_Exceptions_API_ExceptionListItemEntryNestedEntryItem: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryMatch + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemEntryMatch - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryMatchAny + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemEntryMatchAny - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryExists - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryOperator: + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemEntryExists + Security_Endpoint_Exceptions_API_ExceptionListItemEntryOperator: enum: - excluded - included type: string - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemHumanId: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemId: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemMeta: + Security_Endpoint_Exceptions_API_ExceptionListItemHumanId: + $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' + Security_Endpoint_Exceptions_API_ExceptionListItemId: + $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' + Security_Endpoint_Exceptions_API_ExceptionListItemMeta: additionalProperties: true type: object - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemName: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemOsTypeArray: + Security_Endpoint_Exceptions_API_ExceptionListItemName: + $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' + Security_Endpoint_Exceptions_API_ExceptionListItemOsTypeArray: items: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListOsType + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListOsType type: array - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemTags: + Security_Endpoint_Exceptions_API_ExceptionListItemTags: items: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString + $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' type: array - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemType: + Security_Endpoint_Exceptions_API_ExceptionListItemType: enum: - simple type: string - Security_Solution_Endpoint_Exceptions_API_ExceptionListMeta: + Security_Endpoint_Exceptions_API_ExceptionListMeta: additionalProperties: true type: object - Security_Solution_Endpoint_Exceptions_API_ExceptionListName: + Security_Endpoint_Exceptions_API_ExceptionListName: type: string - Security_Solution_Endpoint_Exceptions_API_ExceptionListOsType: + Security_Endpoint_Exceptions_API_ExceptionListOsType: enum: - linux - macos - windows type: string - Security_Solution_Endpoint_Exceptions_API_ExceptionListOsTypeArray: + Security_Endpoint_Exceptions_API_ExceptionListOsTypeArray: items: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListOsType + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListOsType type: array - Security_Solution_Endpoint_Exceptions_API_ExceptionListTags: + Security_Endpoint_Exceptions_API_ExceptionListTags: items: type: string type: array - Security_Solution_Endpoint_Exceptions_API_ExceptionListType: + Security_Endpoint_Exceptions_API_ExceptionListType: enum: - detection - rule_default @@ -30291,10 +29129,10 @@ components: - endpoint_host_isolation_exceptions - endpoint_blocklists type: string - Security_Solution_Endpoint_Exceptions_API_ExceptionListVersion: + Security_Endpoint_Exceptions_API_ExceptionListVersion: minimum: 1 type: integer - Security_Solution_Endpoint_Exceptions_API_ExceptionNamespaceType: + Security_Endpoint_Exceptions_API_ExceptionNamespaceType: description: > Determines whether the exception container is available in all Kibana spaces or just the space @@ -30309,13 +29147,11 @@ components: - agnostic - single type: string - Security_Solution_Endpoint_Exceptions_API_FindEndpointListItemsFilter: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - Security_Solution_Endpoint_Exceptions_API_ListId: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - Security_Solution_Endpoint_Exceptions_API_ListType: + Security_Endpoint_Exceptions_API_FindEndpointListItemsFilter: + $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' + Security_Endpoint_Exceptions_API_ListId: + $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' + Security_Endpoint_Exceptions_API_ListType: enum: - binary - boolean @@ -30341,12 +29177,12 @@ components: - short - text type: string - Security_Solution_Endpoint_Exceptions_API_NonEmptyString: + Security_Endpoint_Exceptions_API_NonEmptyString: description: A string that is not empty and does not contain only whitespace minLength: 1 pattern: ^(?! *$).+$ type: string - Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse: + Security_Endpoint_Exceptions_API_PlatformErrorResponse: type: object properties: error: @@ -30359,7 +29195,7 @@ components: - statusCode - error - message - Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse: + Security_Endpoint_Exceptions_API_SiemErrorResponse: type: object properties: message: @@ -30369,21 +29205,18 @@ components: required: - status_code - message - Security_Solution_Endpoint_Management_API_ActionLogRequestQuery: + Security_Endpoint_Management_API_ActionLogRequestQuery: type: object properties: end_date: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_EndDate + $ref: '#/components/schemas/Security_Endpoint_Management_API_EndDate' page: - $ref: '#/components/schemas/Security_Solution_Endpoint_Management_API_Page' + $ref: '#/components/schemas/Security_Endpoint_Management_API_Page' page_size: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_PageSize + $ref: '#/components/schemas/Security_Endpoint_Management_API_PageSize' start_date: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_StartDate - Security_Solution_Endpoint_Management_API_ActionStateSuccessResponse: + $ref: '#/components/schemas/Security_Endpoint_Management_API_StartDate' + Security_Endpoint_Management_API_ActionStateSuccessResponse: type: object properties: body: @@ -30398,7 +29231,7 @@ components: - data required: - body - Security_Solution_Endpoint_Management_API_ActionStatusSuccessResponse: + Security_Endpoint_Management_API_ActionStatusSuccessResponse: type: object properties: body: @@ -30409,10 +29242,10 @@ components: properties: agent_id: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentId + #/components/schemas/Security_Endpoint_Management_API_AgentId pending_actions: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_PendingActionsSchema + #/components/schemas/Security_Endpoint_Management_API_PendingActionsSchema required: - agent_id - pending_actions @@ -30420,10 +29253,10 @@ components: - data required: - body - Security_Solution_Endpoint_Management_API_AgentId: + Security_Endpoint_Management_API_AgentId: description: Agent ID type: string - Security_Solution_Endpoint_Management_API_AgentIds: + Security_Endpoint_Management_API_AgentIds: minLength: 1 oneOf: - items: @@ -30434,27 +29267,26 @@ components: type: array - minLength: 1 type: string - Security_Solution_Endpoint_Management_API_AgentTypes: + Security_Endpoint_Management_API_AgentTypes: enum: - endpoint - sentinel_one - crowdstrike type: string - Security_Solution_Endpoint_Management_API_AlertIds: + Security_Endpoint_Management_API_AlertIds: description: A list of alerts ids. items: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_NonEmptyString + $ref: '#/components/schemas/Security_Endpoint_Management_API_NonEmptyString' minItems: 1 type: array - Security_Solution_Endpoint_Management_API_CaseIds: + Security_Endpoint_Management_API_CaseIds: description: Case IDs to be updated (cannot contain empty strings) items: minLength: 1 type: string minItems: 1 type: array - Security_Solution_Endpoint_Management_API_Command: + Security_Endpoint_Management_API_Command: description: The command to be executed (cannot be an empty string) enum: - isolate @@ -30468,51 +29300,46 @@ components: - scan minLength: 1 type: string - Security_Solution_Endpoint_Management_API_Commands: + Security_Endpoint_Management_API_Commands: items: - $ref: '#/components/schemas/Security_Solution_Endpoint_Management_API_Command' + $ref: '#/components/schemas/Security_Endpoint_Management_API_Command' type: array - Security_Solution_Endpoint_Management_API_Comment: + Security_Endpoint_Management_API_Comment: description: Optional comment type: string - Security_Solution_Endpoint_Management_API_EndDate: + Security_Endpoint_Management_API_EndDate: description: End date type: string - Security_Solution_Endpoint_Management_API_EndpointIds: + Security_Endpoint_Management_API_EndpointIds: description: List of endpoint IDs (cannot contain empty strings) items: minLength: 1 type: string minItems: 1 type: array - Security_Solution_Endpoint_Management_API_EntityId: + Security_Endpoint_Management_API_EntityId: type: object properties: entity_id: minLength: 1 type: string - Security_Solution_Endpoint_Management_API_ExecuteRouteRequestBody: + Security_Endpoint_Management_API_ExecuteRouteRequestBody: allOf: - type: object properties: agent_type: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentTypes + $ref: '#/components/schemas/Security_Endpoint_Management_API_AgentTypes' alert_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AlertIds + $ref: '#/components/schemas/Security_Endpoint_Management_API_AlertIds' case_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_CaseIds + $ref: '#/components/schemas/Security_Endpoint_Management_API_CaseIds' comment: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Comment + $ref: '#/components/schemas/Security_Endpoint_Management_API_Comment' endpoint_ids: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_EndpointIds + #/components/schemas/Security_Endpoint_Management_API_EndpointIds parameters: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Parameters + $ref: '#/components/schemas/Security_Endpoint_Management_API_Parameters' required: - endpoint_ids - type: object @@ -30522,31 +29349,27 @@ components: properties: command: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Command + #/components/schemas/Security_Endpoint_Management_API_Command timeout: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Timeout + #/components/schemas/Security_Endpoint_Management_API_Timeout required: - command required: - parameters - Security_Solution_Endpoint_Management_API_GetEndpointActionListRouteQuery: + Security_Endpoint_Management_API_GetEndpointActionListRouteQuery: type: object properties: agentIds: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentIds + $ref: '#/components/schemas/Security_Endpoint_Management_API_AgentIds' agentTypes: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentTypes + $ref: '#/components/schemas/Security_Endpoint_Management_API_AgentTypes' commands: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Commands + $ref: '#/components/schemas/Security_Endpoint_Management_API_Commands' endDate: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_EndDate + $ref: '#/components/schemas/Security_Endpoint_Management_API_EndDate' page: - $ref: '#/components/schemas/Security_Solution_Endpoint_Management_API_Page' + $ref: '#/components/schemas/Security_Endpoint_Management_API_Page' pageSize: default: 10 description: Number of items per page @@ -30554,38 +29377,30 @@ components: minimum: 1 type: integer startDate: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_StartDate + $ref: '#/components/schemas/Security_Endpoint_Management_API_StartDate' types: - $ref: '#/components/schemas/Security_Solution_Endpoint_Management_API_Types' + $ref: '#/components/schemas/Security_Endpoint_Management_API_Types' userIds: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_UserIds + $ref: '#/components/schemas/Security_Endpoint_Management_API_UserIds' withOutputs: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_WithOutputs - Security_Solution_Endpoint_Management_API_GetFileRouteRequestBody: + $ref: '#/components/schemas/Security_Endpoint_Management_API_WithOutputs' + Security_Endpoint_Management_API_GetFileRouteRequestBody: allOf: - type: object properties: agent_type: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentTypes + $ref: '#/components/schemas/Security_Endpoint_Management_API_AgentTypes' alert_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AlertIds + $ref: '#/components/schemas/Security_Endpoint_Management_API_AlertIds' case_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_CaseIds + $ref: '#/components/schemas/Security_Endpoint_Management_API_CaseIds' comment: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Comment + $ref: '#/components/schemas/Security_Endpoint_Management_API_Comment' endpoint_ids: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_EndpointIds + #/components/schemas/Security_Endpoint_Management_API_EndpointIds parameters: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Parameters + $ref: '#/components/schemas/Security_Endpoint_Management_API_Parameters' required: - endpoint_ids - type: object @@ -30599,44 +29414,38 @@ components: - path required: - parameters - Security_Solution_Endpoint_Management_API_GetProcessesRouteRequestBody: + Security_Endpoint_Management_API_GetProcessesRouteRequestBody: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_NoParametersRequestSchema - Security_Solution_Endpoint_Management_API_IsolateRouteRequestBody: + #/components/schemas/Security_Endpoint_Management_API_NoParametersRequestSchema + Security_Endpoint_Management_API_IsolateRouteRequestBody: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_NoParametersRequestSchema - Security_Solution_Endpoint_Management_API_KillProcessRouteRequestBody: + #/components/schemas/Security_Endpoint_Management_API_NoParametersRequestSchema + Security_Endpoint_Management_API_KillProcessRouteRequestBody: allOf: - type: object properties: agent_type: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentTypes + $ref: '#/components/schemas/Security_Endpoint_Management_API_AgentTypes' alert_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AlertIds + $ref: '#/components/schemas/Security_Endpoint_Management_API_AlertIds' case_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_CaseIds + $ref: '#/components/schemas/Security_Endpoint_Management_API_CaseIds' comment: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Comment + $ref: '#/components/schemas/Security_Endpoint_Management_API_Comment' endpoint_ids: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_EndpointIds + #/components/schemas/Security_Endpoint_Management_API_EndpointIds parameters: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Parameters + $ref: '#/components/schemas/Security_Endpoint_Management_API_Parameters' required: - endpoint_ids - type: object properties: parameters: oneOf: + - $ref: '#/components/schemas/Security_Endpoint_Management_API_Pid' - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Pid - - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_EntityId + #/components/schemas/Security_Endpoint_Management_API_EntityId - type: object properties: process_name: @@ -30645,7 +29454,7 @@ components: type: string required: - parameters - Security_Solution_Endpoint_Management_API_ListRequestQuery: + Security_Endpoint_Management_API_ListRequestQuery: type: object properties: hostStatuses: @@ -30692,121 +29501,111 @@ components: type: string required: - hostStatuses - Security_Solution_Endpoint_Management_API_NonEmptyString: + Security_Endpoint_Management_API_NonEmptyString: description: A string that is not empty and does not contain only whitespace minLength: 1 pattern: ^(?! *$).+$ type: string - Security_Solution_Endpoint_Management_API_NoParametersRequestSchema: + Security_Endpoint_Management_API_NoParametersRequestSchema: type: object properties: body: type: object properties: agent_type: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentTypes + $ref: '#/components/schemas/Security_Endpoint_Management_API_AgentTypes' alert_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AlertIds + $ref: '#/components/schemas/Security_Endpoint_Management_API_AlertIds' case_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_CaseIds + $ref: '#/components/schemas/Security_Endpoint_Management_API_CaseIds' comment: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Comment + $ref: '#/components/schemas/Security_Endpoint_Management_API_Comment' endpoint_ids: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_EndpointIds + #/components/schemas/Security_Endpoint_Management_API_EndpointIds parameters: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Parameters + $ref: '#/components/schemas/Security_Endpoint_Management_API_Parameters' required: - endpoint_ids required: - body - Security_Solution_Endpoint_Management_API_Page: + Security_Endpoint_Management_API_Page: default: 1 description: Page number minimum: 1 type: integer - Security_Solution_Endpoint_Management_API_PageSize: + Security_Endpoint_Management_API_PageSize: default: 10 description: Number of items per page maximum: 100 minimum: 1 type: integer - Security_Solution_Endpoint_Management_API_Parameters: + Security_Endpoint_Management_API_Parameters: description: Optional parameters object type: object - Security_Solution_Endpoint_Management_API_PendingActionDataType: + Security_Endpoint_Management_API_PendingActionDataType: type: integer - Security_Solution_Endpoint_Management_API_PendingActionsSchema: + Security_Endpoint_Management_API_PendingActionsSchema: oneOf: - type: object properties: execute: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_PendingActionDataType + #/components/schemas/Security_Endpoint_Management_API_PendingActionDataType get-file: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_PendingActionDataType + #/components/schemas/Security_Endpoint_Management_API_PendingActionDataType isolate: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_PendingActionDataType + #/components/schemas/Security_Endpoint_Management_API_PendingActionDataType kill-process: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_PendingActionDataType + #/components/schemas/Security_Endpoint_Management_API_PendingActionDataType running-processes: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_PendingActionDataType + #/components/schemas/Security_Endpoint_Management_API_PendingActionDataType scan: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_PendingActionDataType + #/components/schemas/Security_Endpoint_Management_API_PendingActionDataType suspend-process: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_PendingActionDataType + #/components/schemas/Security_Endpoint_Management_API_PendingActionDataType unisolate: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_PendingActionDataType + #/components/schemas/Security_Endpoint_Management_API_PendingActionDataType upload: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_PendingActionDataType + #/components/schemas/Security_Endpoint_Management_API_PendingActionDataType - additionalProperties: true type: object - Security_Solution_Endpoint_Management_API_Pid: + Security_Endpoint_Management_API_Pid: type: object properties: pid: minimum: 1 type: integer - Security_Solution_Endpoint_Management_API_ProtectionUpdatesNoteResponse: + Security_Endpoint_Management_API_ProtectionUpdatesNoteResponse: type: object properties: note: type: string - Security_Solution_Endpoint_Management_API_ScanRouteRequestBody: + Security_Endpoint_Management_API_ScanRouteRequestBody: allOf: - type: object properties: agent_type: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentTypes + $ref: '#/components/schemas/Security_Endpoint_Management_API_AgentTypes' alert_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AlertIds + $ref: '#/components/schemas/Security_Endpoint_Management_API_AlertIds' case_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_CaseIds + $ref: '#/components/schemas/Security_Endpoint_Management_API_CaseIds' comment: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Comment + $ref: '#/components/schemas/Security_Endpoint_Management_API_Comment' endpoint_ids: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_EndpointIds + #/components/schemas/Security_Endpoint_Management_API_EndpointIds parameters: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Parameters + $ref: '#/components/schemas/Security_Endpoint_Management_API_Parameters' required: - endpoint_ids - type: object @@ -30820,88 +29619,77 @@ components: - path required: - parameters - Security_Solution_Endpoint_Management_API_StartDate: + Security_Endpoint_Management_API_StartDate: description: Start date type: string - Security_Solution_Endpoint_Management_API_SuccessResponse: + Security_Endpoint_Management_API_SuccessResponse: type: object properties: {} - Security_Solution_Endpoint_Management_API_SuspendProcessRouteRequestBody: + Security_Endpoint_Management_API_SuspendProcessRouteRequestBody: allOf: - type: object properties: agent_type: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentTypes + $ref: '#/components/schemas/Security_Endpoint_Management_API_AgentTypes' alert_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AlertIds + $ref: '#/components/schemas/Security_Endpoint_Management_API_AlertIds' case_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_CaseIds + $ref: '#/components/schemas/Security_Endpoint_Management_API_CaseIds' comment: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Comment + $ref: '#/components/schemas/Security_Endpoint_Management_API_Comment' endpoint_ids: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_EndpointIds + #/components/schemas/Security_Endpoint_Management_API_EndpointIds parameters: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Parameters + $ref: '#/components/schemas/Security_Endpoint_Management_API_Parameters' required: - endpoint_ids - type: object properties: parameters: oneOf: + - $ref: '#/components/schemas/Security_Endpoint_Management_API_Pid' - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Pid - - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_EntityId + #/components/schemas/Security_Endpoint_Management_API_EntityId required: - parameters - Security_Solution_Endpoint_Management_API_Timeout: + Security_Endpoint_Management_API_Timeout: description: The maximum timeout value in milliseconds (optional) minimum: 1 type: integer - Security_Solution_Endpoint_Management_API_Type: + Security_Endpoint_Management_API_Type: description: Type of response action enum: - automated - manual type: string - Security_Solution_Endpoint_Management_API_Types: + Security_Endpoint_Management_API_Types: description: List of types of response actions items: - $ref: '#/components/schemas/Security_Solution_Endpoint_Management_API_Type' + $ref: '#/components/schemas/Security_Endpoint_Management_API_Type' maxLength: 2 minLength: 1 type: array - Security_Solution_Endpoint_Management_API_UnisolateRouteRequestBody: + Security_Endpoint_Management_API_UnisolateRouteRequestBody: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_NoParametersRequestSchema - Security_Solution_Endpoint_Management_API_UploadRouteRequestBody: + #/components/schemas/Security_Endpoint_Management_API_NoParametersRequestSchema + Security_Endpoint_Management_API_UploadRouteRequestBody: allOf: - type: object properties: agent_type: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentTypes + $ref: '#/components/schemas/Security_Endpoint_Management_API_AgentTypes' alert_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AlertIds + $ref: '#/components/schemas/Security_Endpoint_Management_API_AlertIds' case_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_CaseIds + $ref: '#/components/schemas/Security_Endpoint_Management_API_CaseIds' comment: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Comment + $ref: '#/components/schemas/Security_Endpoint_Management_API_Comment' endpoint_ids: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_EndpointIds + #/components/schemas/Security_Endpoint_Management_API_EndpointIds parameters: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Parameters + $ref: '#/components/schemas/Security_Endpoint_Management_API_Parameters' required: - endpoint_ids - type: object @@ -30918,7 +29706,7 @@ components: required: - parameters - file - Security_Solution_Endpoint_Management_API_UserIds: + Security_Endpoint_Management_API_UserIds: description: User IDs oneOf: - items: @@ -30928,7 +29716,7 @@ components: type: array - minLength: 1 type: string - Security_Solution_Endpoint_Management_API_WithOutputs: + Security_Endpoint_Management_API_WithOutputs: description: Shows detailed outputs for an action response oneOf: - items: @@ -30938,7 +29726,7 @@ components: type: array - minLength: 1 type: string - Security_Solution_Entity_Analytics_API_AssetCriticalityBulkUploadErrorItem: + Security_Entity_Analytics_API_AssetCriticalityBulkUploadErrorItem: type: object properties: index: @@ -30948,7 +29736,7 @@ components: required: - message - index - Security_Solution_Entity_Analytics_API_AssetCriticalityBulkUploadStats: + Security_Entity_Analytics_API_AssetCriticalityBulkUploadStats: type: object properties: failed: @@ -30961,7 +29749,7 @@ components: - successful - failed - total - Security_Solution_Entity_Analytics_API_AssetCriticalityLevel: + Security_Entity_Analytics_API_AssetCriticalityLevel: description: The criticality level of the asset. enum: - low_impact @@ -30969,10 +29757,10 @@ components: - high_impact - extreme_impact type: string - Security_Solution_Entity_Analytics_API_AssetCriticalityRecord: + Security_Entity_Analytics_API_AssetCriticalityRecord: allOf: - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_CreateAssetCriticalityRecord + #/components/schemas/Security_Entity_Analytics_API_CreateAssetCriticalityRecord - type: object properties: '@timestamp': @@ -30982,11 +29770,11 @@ components: type: string required: - '@timestamp' - Security_Solution_Entity_Analytics_API_AssetCriticalityRecordIdParts: + Security_Entity_Analytics_API_AssetCriticalityRecordIdParts: type: object properties: id_field: - $ref: '#/components/schemas/Security_Solution_Entity_Analytics_API_IdField' + $ref: '#/components/schemas/Security_Entity_Analytics_API_IdField' description: The field representing the ID. example: host.name id_value: @@ -30995,49 +29783,65 @@ components: required: - id_value - id_field - Security_Solution_Entity_Analytics_API_CreateAssetCriticalityRecord: + Security_Entity_Analytics_API_CleanUpRiskEngineErrorResponse: + type: object + properties: + cleanup_successful: + example: false + type: boolean + errors: + items: + type: object + properties: + error: + type: string + seq: + type: integer + required: + - seq + - error + type: array + required: + - cleanup_successful + - errors + Security_Entity_Analytics_API_CreateAssetCriticalityRecord: allOf: - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_AssetCriticalityRecordIdParts + #/components/schemas/Security_Entity_Analytics_API_AssetCriticalityRecordIdParts - type: object properties: criticality_level: $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_AssetCriticalityLevel + #/components/schemas/Security_Entity_Analytics_API_AssetCriticalityLevel required: - criticality_level - Security_Solution_Entity_Analytics_API_EngineDescriptor: + Security_Entity_Analytics_API_EngineDescriptor: type: object properties: filter: type: string indexPattern: - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_IndexPattern + $ref: '#/components/schemas/Security_Entity_Analytics_API_IndexPattern' status: - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_EngineStatus + $ref: '#/components/schemas/Security_Entity_Analytics_API_EngineStatus' type: - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_EntityType - Security_Solution_Entity_Analytics_API_EngineStatus: + $ref: '#/components/schemas/Security_Entity_Analytics_API_EntityType' + Security_Entity_Analytics_API_EngineStatus: enum: - installing - started - stopped type: string - Security_Solution_Entity_Analytics_API_Entity: + Security_Entity_Analytics_API_Entity: oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_UserEntity - - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_HostEntity - Security_Solution_Entity_Analytics_API_EntityType: + - $ref: '#/components/schemas/Security_Entity_Analytics_API_UserEntity' + - $ref: '#/components/schemas/Security_Entity_Analytics_API_HostEntity' + Security_Entity_Analytics_API_EntityType: enum: - user - host type: string - Security_Solution_Entity_Analytics_API_HostEntity: + Security_Entity_Analytics_API_HostEntity: type: object properties: entity: @@ -31112,14 +29916,14 @@ components: type: array required: - name - Security_Solution_Entity_Analytics_API_IdField: + Security_Entity_Analytics_API_IdField: enum: - host.name - user.name type: string - Security_Solution_Entity_Analytics_API_IndexPattern: + Security_Entity_Analytics_API_IndexPattern: type: string - Security_Solution_Entity_Analytics_API_InspectQuery: + Security_Entity_Analytics_API_InspectQuery: type: object properties: dsl: @@ -31133,7 +29937,7 @@ components: required: - dsl - response - Security_Solution_Entity_Analytics_API_RiskEngineScheduleNowErrorResponse: + Security_Entity_Analytics_API_RiskEngineScheduleNowErrorResponse: type: object properties: full_error: @@ -31143,12 +29947,12 @@ components: required: - message - full_error - Security_Solution_Entity_Analytics_API_RiskEngineScheduleNowResponse: + Security_Entity_Analytics_API_RiskEngineScheduleNowResponse: type: object properties: success: type: boolean - Security_Solution_Entity_Analytics_API_TaskManagerUnavailableResponse: + Security_Entity_Analytics_API_TaskManagerUnavailableResponse: description: Task manager is unavailable type: object properties: @@ -31160,7 +29964,7 @@ components: required: - status_code - message - Security_Solution_Entity_Analytics_API_UserEntity: + Security_Entity_Analytics_API_UserEntity: type: object properties: entity: @@ -31231,76 +30035,71 @@ components: type: array required: - name - Security_Solution_Exceptions_API_CreateExceptionListItemComment: + Security_Exceptions_API_CreateExceptionListItemComment: type: object properties: comment: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' + $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' required: - comment - Security_Solution_Exceptions_API_CreateExceptionListItemCommentArray: + Security_Exceptions_API_CreateExceptionListItemCommentArray: items: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_CreateExceptionListItemComment + #/components/schemas/Security_Exceptions_API_CreateExceptionListItemComment type: array - Security_Solution_Exceptions_API_CreateRuleExceptionListItemComment: + Security_Exceptions_API_CreateRuleExceptionListItemComment: type: object properties: comment: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' + $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' required: - comment - Security_Solution_Exceptions_API_CreateRuleExceptionListItemCommentArray: + Security_Exceptions_API_CreateRuleExceptionListItemCommentArray: items: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_CreateRuleExceptionListItemComment + #/components/schemas/Security_Exceptions_API_CreateRuleExceptionListItemComment type: array - Security_Solution_Exceptions_API_CreateRuleExceptionListItemProps: + Security_Exceptions_API_CreateRuleExceptionListItemProps: type: object properties: comments: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_CreateRuleExceptionListItemCommentArray + #/components/schemas/Security_Exceptions_API_CreateRuleExceptionListItemCommentArray default: [] description: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemDescription + #/components/schemas/Security_Exceptions_API_ExceptionListItemDescription entries: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryArray + #/components/schemas/Security_Exceptions_API_ExceptionListItemEntryArray expire_time: format: date-time type: string item_id: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemHumanId + #/components/schemas/Security_Exceptions_API_ExceptionListItemHumanId meta: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemMeta + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemMeta' name: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemName + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemName' namespace_type: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionNamespaceType' default: single os_types: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemOsTypeArray + #/components/schemas/Security_Exceptions_API_ExceptionListItemOsTypeArray default: [] tags: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemTags + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemTags' default: [] type: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemType + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemType' required: - type - name - description - entries - Security_Solution_Exceptions_API_ExceptionList: + Security_Exceptions_API_ExceptionList: type: object properties: _version: @@ -31312,43 +30111,35 @@ components: type: string description: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListDescription + #/components/schemas/Security_Exceptions_API_ExceptionListDescription id: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListId + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListId' immutable: type: boolean list_id: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListHumanId + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListHumanId' meta: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListMeta + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListMeta' name: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListName + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListName' namespace_type: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionNamespaceType' os_types: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListOsTypeArray + #/components/schemas/Security_Exceptions_API_ExceptionListOsTypeArray tags: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListTags + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListTags' tie_breaker_id: type: string type: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListType + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListType' updated_at: format: date-time type: string updated_by: type: string version: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListVersion + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListVersion' required: - id - list_id @@ -31363,21 +30154,21 @@ components: - created_by - updated_at - updated_by - Security_Solution_Exceptions_API_ExceptionListDescription: + Security_Exceptions_API_ExceptionListDescription: type: string - Security_Solution_Exceptions_API_ExceptionListHumanId: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' + Security_Exceptions_API_ExceptionListHumanId: + $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' description: Human readable string identifier, e.g. `trusted-linux-processes` - Security_Solution_Exceptions_API_ExceptionListId: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' - Security_Solution_Exceptions_API_ExceptionListItem: + Security_Exceptions_API_ExceptionListId: + $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' + Security_Exceptions_API_ExceptionListItem: type: object properties: _version: type: string comments: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemCommentArray + #/components/schemas/Security_Exceptions_API_ExceptionListItemCommentArray created_at: format: date-time type: string @@ -31385,42 +30176,35 @@ components: type: string description: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemDescription + #/components/schemas/Security_Exceptions_API_ExceptionListItemDescription entries: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryArray + #/components/schemas/Security_Exceptions_API_ExceptionListItemEntryArray expire_time: format: date-time type: string id: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemId + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemId' item_id: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemHumanId + #/components/schemas/Security_Exceptions_API_ExceptionListItemHumanId list_id: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListHumanId + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListHumanId' meta: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemMeta + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemMeta' name: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemName + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemName' namespace_type: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionNamespaceType' os_types: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemOsTypeArray + #/components/schemas/Security_Exceptions_API_ExceptionListItemOsTypeArray tags: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemTags + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemTags' tie_breaker_id: type: string type: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemType + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemType' updated_at: format: date-time type: string @@ -31441,64 +30225,62 @@ components: - created_by - updated_at - updated_by - Security_Solution_Exceptions_API_ExceptionListItemComment: + Security_Exceptions_API_ExceptionListItemComment: type: object properties: comment: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' + $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' created_at: format: date-time type: string created_by: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' + $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' id: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' + $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' updated_at: format: date-time type: string updated_by: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' + $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' required: - id - comment - created_at - created_by - Security_Solution_Exceptions_API_ExceptionListItemCommentArray: + Security_Exceptions_API_ExceptionListItemCommentArray: items: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemComment + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemComment' type: array - Security_Solution_Exceptions_API_ExceptionListItemDescription: + Security_Exceptions_API_ExceptionListItemDescription: type: string - Security_Solution_Exceptions_API_ExceptionListItemEntry: + Security_Exceptions_API_ExceptionListItemEntry: anyOf: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryMatch + #/components/schemas/Security_Exceptions_API_ExceptionListItemEntryMatch - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryMatchAny + #/components/schemas/Security_Exceptions_API_ExceptionListItemEntryMatchAny - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryList + #/components/schemas/Security_Exceptions_API_ExceptionListItemEntryList - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryExists + #/components/schemas/Security_Exceptions_API_ExceptionListItemEntryExists - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryNested + #/components/schemas/Security_Exceptions_API_ExceptionListItemEntryNested - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryMatchWildcard + #/components/schemas/Security_Exceptions_API_ExceptionListItemEntryMatchWildcard discriminator: propertyName: type - Security_Solution_Exceptions_API_ExceptionListItemEntryArray: + Security_Exceptions_API_ExceptionListItemEntryArray: items: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntry + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemEntry' type: array - Security_Solution_Exceptions_API_ExceptionListItemEntryExists: + Security_Exceptions_API_ExceptionListItemEntryExists: type: object properties: field: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' + $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' operator: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryOperator + #/components/schemas/Security_Exceptions_API_ExceptionListItemEntryOperator type: enum: - exists @@ -31507,24 +30289,24 @@ components: - type - field - operator - Security_Solution_Exceptions_API_ExceptionListItemEntryList: + Security_Exceptions_API_ExceptionListItemEntryList: type: object properties: field: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' + $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' list: type: object properties: id: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_ListId' + $ref: '#/components/schemas/Security_Exceptions_API_ListId' type: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_ListType' + $ref: '#/components/schemas/Security_Exceptions_API_ListType' required: - id - type operator: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryOperator + #/components/schemas/Security_Exceptions_API_ExceptionListItemEntryOperator type: enum: - list @@ -31534,41 +30316,40 @@ components: - field - list - operator - Security_Solution_Exceptions_API_ExceptionListItemEntryMatch: + Security_Exceptions_API_ExceptionListItemEntryMatch: type: object properties: field: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' + $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' operator: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryOperator + #/components/schemas/Security_Exceptions_API_ExceptionListItemEntryOperator type: enum: - match type: string value: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' + $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' required: - type - field - value - operator - Security_Solution_Exceptions_API_ExceptionListItemEntryMatchAny: + Security_Exceptions_API_ExceptionListItemEntryMatchAny: type: object properties: field: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' + $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' operator: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryOperator + #/components/schemas/Security_Exceptions_API_ExceptionListItemEntryOperator type: enum: - match_any type: string value: items: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_NonEmptyString + $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' minItems: 1 type: array required: @@ -31576,36 +30357,36 @@ components: - field - value - operator - Security_Solution_Exceptions_API_ExceptionListItemEntryMatchWildcard: + Security_Exceptions_API_ExceptionListItemEntryMatchWildcard: type: object properties: field: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' + $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' operator: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryOperator + #/components/schemas/Security_Exceptions_API_ExceptionListItemEntryOperator type: enum: - wildcard type: string value: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' + $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' required: - type - field - value - operator - Security_Solution_Exceptions_API_ExceptionListItemEntryNested: + Security_Exceptions_API_ExceptionListItemEntryNested: type: object properties: entries: items: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryNestedEntryItem + #/components/schemas/Security_Exceptions_API_ExceptionListItemEntryNestedEntryItem minItems: 1 type: array field: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' + $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' type: enum: - nested @@ -31614,58 +30395,56 @@ components: - type - field - entries - Security_Solution_Exceptions_API_ExceptionListItemEntryNestedEntryItem: + Security_Exceptions_API_ExceptionListItemEntryNestedEntryItem: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryMatch + #/components/schemas/Security_Exceptions_API_ExceptionListItemEntryMatch - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryMatchAny + #/components/schemas/Security_Exceptions_API_ExceptionListItemEntryMatchAny - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryExists - Security_Solution_Exceptions_API_ExceptionListItemEntryOperator: + #/components/schemas/Security_Exceptions_API_ExceptionListItemEntryExists + Security_Exceptions_API_ExceptionListItemEntryOperator: enum: - excluded - included type: string - Security_Solution_Exceptions_API_ExceptionListItemHumanId: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' - Security_Solution_Exceptions_API_ExceptionListItemId: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' - Security_Solution_Exceptions_API_ExceptionListItemMeta: + Security_Exceptions_API_ExceptionListItemHumanId: + $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' + Security_Exceptions_API_ExceptionListItemId: + $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' + Security_Exceptions_API_ExceptionListItemMeta: additionalProperties: true type: object - Security_Solution_Exceptions_API_ExceptionListItemName: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' - Security_Solution_Exceptions_API_ExceptionListItemOsTypeArray: + Security_Exceptions_API_ExceptionListItemName: + $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' + Security_Exceptions_API_ExceptionListItemOsTypeArray: items: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListOsType + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListOsType' type: array - Security_Solution_Exceptions_API_ExceptionListItemTags: + Security_Exceptions_API_ExceptionListItemTags: items: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' + $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' type: array - Security_Solution_Exceptions_API_ExceptionListItemType: + Security_Exceptions_API_ExceptionListItemType: enum: - simple type: string - Security_Solution_Exceptions_API_ExceptionListMeta: + Security_Exceptions_API_ExceptionListMeta: additionalProperties: true type: object - Security_Solution_Exceptions_API_ExceptionListName: + Security_Exceptions_API_ExceptionListName: type: string - Security_Solution_Exceptions_API_ExceptionListOsType: + Security_Exceptions_API_ExceptionListOsType: enum: - linux - macos - windows type: string - Security_Solution_Exceptions_API_ExceptionListOsTypeArray: + Security_Exceptions_API_ExceptionListOsTypeArray: items: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListOsType + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListOsType' type: array - Security_Solution_Exceptions_API_ExceptionListsImportBulkError: + Security_Exceptions_API_ExceptionListsImportBulkError: type: object properties: error: @@ -31679,26 +30458,24 @@ components: - status_code - message id: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListId + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListId' item_id: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemHumanId + #/components/schemas/Security_Exceptions_API_ExceptionListItemHumanId list_id: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListHumanId + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListHumanId' required: - error - Security_Solution_Exceptions_API_ExceptionListsImportBulkErrorArray: + Security_Exceptions_API_ExceptionListsImportBulkErrorArray: items: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListsImportBulkError + #/components/schemas/Security_Exceptions_API_ExceptionListsImportBulkError type: array - Security_Solution_Exceptions_API_ExceptionListTags: + Security_Exceptions_API_ExceptionListTags: items: type: string type: array - Security_Solution_Exceptions_API_ExceptionListType: + Security_Exceptions_API_ExceptionListType: enum: - detection - rule_default @@ -31708,10 +30485,10 @@ components: - endpoint_host_isolation_exceptions - endpoint_blocklists type: string - Security_Solution_Exceptions_API_ExceptionListVersion: + Security_Exceptions_API_ExceptionListVersion: minimum: 1 type: integer - Security_Solution_Exceptions_API_ExceptionNamespaceType: + Security_Exceptions_API_ExceptionNamespaceType: description: > Determines whether the exception container is available in all Kibana spaces or just the space @@ -31726,13 +30503,13 @@ components: - agnostic - single type: string - Security_Solution_Exceptions_API_FindExceptionListItemsFilter: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' - Security_Solution_Exceptions_API_FindExceptionListsFilter: + Security_Exceptions_API_FindExceptionListItemsFilter: + $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' + Security_Exceptions_API_FindExceptionListsFilter: type: string - Security_Solution_Exceptions_API_ListId: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' - Security_Solution_Exceptions_API_ListType: + Security_Exceptions_API_ListId: + $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' + Security_Exceptions_API_ListType: enum: - binary - boolean @@ -31758,12 +30535,12 @@ components: - short - text type: string - Security_Solution_Exceptions_API_NonEmptyString: + Security_Exceptions_API_NonEmptyString: description: A string that is not empty and does not contain only whitespace minLength: 1 pattern: ^(?! *$).+$ type: string - Security_Solution_Exceptions_API_PlatformErrorResponse: + Security_Exceptions_API_PlatformErrorResponse: type: object properties: error: @@ -31776,9 +30553,9 @@ components: - statusCode - error - message - Security_Solution_Exceptions_API_RuleId: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_UUID' - Security_Solution_Exceptions_API_SiemErrorResponse: + Security_Exceptions_API_RuleId: + $ref: '#/components/schemas/Security_Exceptions_API_UUID' + Security_Exceptions_API_SiemErrorResponse: type: object properties: message: @@ -31788,33 +30565,33 @@ components: required: - status_code - message - Security_Solution_Exceptions_API_UpdateExceptionListItemComment: + Security_Exceptions_API_UpdateExceptionListItemComment: type: object properties: comment: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' + $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' id: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' + $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' required: - comment - Security_Solution_Exceptions_API_UpdateExceptionListItemCommentArray: + Security_Exceptions_API_UpdateExceptionListItemCommentArray: items: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_UpdateExceptionListItemComment + #/components/schemas/Security_Exceptions_API_UpdateExceptionListItemComment type: array - Security_Solution_Exceptions_API_UUID: + Security_Exceptions_API_UUID: description: A universally unique identifier format: uuid type: string - Security_Solution_Lists_API_FindListItemsCursor: - $ref: '#/components/schemas/Security_Solution_Lists_API_NonEmptyString' - Security_Solution_Lists_API_FindListItemsFilter: + Security_Lists_API_FindListItemsCursor: + $ref: '#/components/schemas/Security_Lists_API_NonEmptyString' + Security_Lists_API_FindListItemsFilter: type: string - Security_Solution_Lists_API_FindListsCursor: - $ref: '#/components/schemas/Security_Solution_Lists_API_NonEmptyString' - Security_Solution_Lists_API_FindListsFilter: + Security_Lists_API_FindListsCursor: + $ref: '#/components/schemas/Security_Lists_API_NonEmptyString' + Security_Lists_API_FindListsFilter: type: string - Security_Solution_Lists_API_List: + Security_Lists_API_List: type: object properties: _version: @@ -31828,23 +30605,23 @@ components: created_by: type: string description: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListDescription' + $ref: '#/components/schemas/Security_Lists_API_ListDescription' deserializer: type: string id: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' + $ref: '#/components/schemas/Security_Lists_API_ListId' immutable: type: boolean meta: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListMetadata' + $ref: '#/components/schemas/Security_Lists_API_ListMetadata' name: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListName' + $ref: '#/components/schemas/Security_Lists_API_ListName' serializer: type: string tie_breaker_id: type: string type: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListType' + $ref: '#/components/schemas/Security_Lists_API_ListType' updated_at: format: date-time type: string @@ -31865,11 +30642,11 @@ components: - created_by - updated_at - updated_by - Security_Solution_Lists_API_ListDescription: - $ref: '#/components/schemas/Security_Solution_Lists_API_NonEmptyString' - Security_Solution_Lists_API_ListId: - $ref: '#/components/schemas/Security_Solution_Lists_API_NonEmptyString' - Security_Solution_Lists_API_ListItem: + Security_Lists_API_ListDescription: + $ref: '#/components/schemas/Security_Lists_API_NonEmptyString' + Security_Lists_API_ListId: + $ref: '#/components/schemas/Security_Lists_API_NonEmptyString' + Security_Lists_API_ListItem: type: object properties: _version: @@ -31885,24 +30662,24 @@ components: deserializer: type: string id: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListItemId' + $ref: '#/components/schemas/Security_Lists_API_ListItemId' list_id: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' + $ref: '#/components/schemas/Security_Lists_API_ListId' meta: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListItemMetadata' + $ref: '#/components/schemas/Security_Lists_API_ListItemMetadata' serializer: type: string tie_breaker_id: type: string type: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListType' + $ref: '#/components/schemas/Security_Lists_API_ListType' updated_at: format: date-time type: string updated_by: type: string value: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListItemValue' + $ref: '#/components/schemas/Security_Lists_API_ListItemValue' required: - id - type @@ -31913,12 +30690,12 @@ components: - created_by - updated_at - updated_by - Security_Solution_Lists_API_ListItemId: - $ref: '#/components/schemas/Security_Solution_Lists_API_NonEmptyString' - Security_Solution_Lists_API_ListItemMetadata: + Security_Lists_API_ListItemId: + $ref: '#/components/schemas/Security_Lists_API_NonEmptyString' + Security_Lists_API_ListItemMetadata: additionalProperties: true type: object - Security_Solution_Lists_API_ListItemPrivileges: + Security_Lists_API_ListItemPrivileges: type: object properties: application: @@ -31945,14 +30722,14 @@ components: - cluster - index - application - Security_Solution_Lists_API_ListItemValue: - $ref: '#/components/schemas/Security_Solution_Lists_API_NonEmptyString' - Security_Solution_Lists_API_ListMetadata: + Security_Lists_API_ListItemValue: + $ref: '#/components/schemas/Security_Lists_API_NonEmptyString' + Security_Lists_API_ListMetadata: additionalProperties: true type: object - Security_Solution_Lists_API_ListName: - $ref: '#/components/schemas/Security_Solution_Lists_API_NonEmptyString' - Security_Solution_Lists_API_ListPrivileges: + Security_Lists_API_ListName: + $ref: '#/components/schemas/Security_Lists_API_NonEmptyString' + Security_Lists_API_ListPrivileges: type: object properties: application: @@ -31979,7 +30756,7 @@ components: - cluster - index - application - Security_Solution_Lists_API_ListType: + Security_Lists_API_ListType: enum: - binary - boolean @@ -32005,12 +30782,12 @@ components: - short - text type: string - Security_Solution_Lists_API_NonEmptyString: + Security_Lists_API_NonEmptyString: description: A string that is not empty and does not contain only whitespace minLength: 1 pattern: ^(?! *$).+$ type: string - Security_Solution_Lists_API_PlatformErrorResponse: + Security_Lists_API_PlatformErrorResponse: type: object properties: error: @@ -32023,7 +30800,7 @@ components: - statusCode - error - message - Security_Solution_Lists_API_SiemErrorResponse: + Security_Lists_API_SiemErrorResponse: type: object properties: message: @@ -32033,33 +30810,28 @@ components: required: - status_code - message - Security_Solution_Osquery_API_ArrayQueries: + Security_Osquery_API_ArrayQueries: items: - $ref: '#/components/schemas/Security_Solution_Osquery_API_ArrayQueriesItem' + $ref: '#/components/schemas/Security_Osquery_API_ArrayQueriesItem' type: array - Security_Solution_Osquery_API_ArrayQueriesItem: + Security_Osquery_API_ArrayQueriesItem: type: object properties: ecs_mapping: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_ECSMappingOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_ECSMappingOrUndefined' id: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Id' + $ref: '#/components/schemas/Security_Osquery_API_Id' platform: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_PlatformOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_PlatformOrUndefined' query: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Query' + $ref: '#/components/schemas/Security_Osquery_API_Query' removed: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_RemovedOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_RemovedOrUndefined' snapshot: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_SnapshotOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_SnapshotOrUndefined' version: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_VersionOrUndefined - Security_Solution_Osquery_API_CreateLiveQueryRequestBody: + $ref: '#/components/schemas/Security_Osquery_API_VersionOrUndefined' + Security_Osquery_API_CreateLiveQueryRequestBody: type: object properties: agent_all: @@ -32085,8 +30857,7 @@ components: type: string type: array ecs_mapping: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_ECSMappingOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_ECSMappingOrUndefined' event_ids: items: type: string @@ -32095,72 +30866,62 @@ components: nullable: true type: object pack_id: - $ref: '#/components/schemas/Security_Solution_Osquery_API_PackIdOrUndefined' + $ref: '#/components/schemas/Security_Osquery_API_PackIdOrUndefined' queries: - $ref: '#/components/schemas/Security_Solution_Osquery_API_ArrayQueries' + $ref: '#/components/schemas/Security_Osquery_API_ArrayQueries' query: - $ref: '#/components/schemas/Security_Solution_Osquery_API_QueryOrUndefined' + $ref: '#/components/schemas/Security_Osquery_API_QueryOrUndefined' saved_query_id: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_SavedQueryIdOrUndefined - Security_Solution_Osquery_API_CreatePacksRequestBody: + $ref: '#/components/schemas/Security_Osquery_API_SavedQueryIdOrUndefined' + Security_Osquery_API_CreatePacksRequestBody: type: object properties: description: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DescriptionOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_DescriptionOrUndefined' enabled: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_EnabledOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_EnabledOrUndefined' name: - $ref: '#/components/schemas/Security_Solution_Osquery_API_PackName' + $ref: '#/components/schemas/Security_Osquery_API_PackName' policy_ids: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_PolicyIdsOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_PolicyIdsOrUndefined' queries: - $ref: '#/components/schemas/Security_Solution_Osquery_API_ObjectQueries' + $ref: '#/components/schemas/Security_Osquery_API_ObjectQueries' shards: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Shards' - Security_Solution_Osquery_API_CreateSavedQueryRequestBody: + $ref: '#/components/schemas/Security_Osquery_API_Shards' + Security_Osquery_API_CreateSavedQueryRequestBody: type: object properties: description: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DescriptionOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_DescriptionOrUndefined' ecs_mapping: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_ECSMappingOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_ECSMappingOrUndefined' id: - $ref: '#/components/schemas/Security_Solution_Osquery_API_SavedQueryId' + $ref: '#/components/schemas/Security_Osquery_API_SavedQueryId' interval: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Interval' + $ref: '#/components/schemas/Security_Osquery_API_Interval' platform: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DescriptionOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_DescriptionOrUndefined' query: - $ref: '#/components/schemas/Security_Solution_Osquery_API_QueryOrUndefined' + $ref: '#/components/schemas/Security_Osquery_API_QueryOrUndefined' removed: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_RemovedOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_RemovedOrUndefined' snapshot: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_SnapshotOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_SnapshotOrUndefined' version: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_VersionOrUndefined - Security_Solution_Osquery_API_DefaultSuccessResponse: + $ref: '#/components/schemas/Security_Osquery_API_VersionOrUndefined' + Security_Osquery_API_DefaultSuccessResponse: type: object properties: {} - Security_Solution_Osquery_API_Description: + Security_Osquery_API_Description: type: string - Security_Solution_Osquery_API_DescriptionOrUndefined: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Description' + Security_Osquery_API_DescriptionOrUndefined: + $ref: '#/components/schemas/Security_Osquery_API_Description' nullable: true - Security_Solution_Osquery_API_ECSMapping: + Security_Osquery_API_ECSMapping: additionalProperties: - $ref: '#/components/schemas/Security_Solution_Osquery_API_ECSMappingItem' + $ref: '#/components/schemas/Security_Osquery_API_ECSMappingItem' type: object - Security_Solution_Osquery_API_ECSMappingItem: + Security_Osquery_API_ECSMappingItem: type: object properties: field: @@ -32171,220 +30932,196 @@ components: - items: type: string type: array - Security_Solution_Osquery_API_ECSMappingOrUndefined: - $ref: '#/components/schemas/Security_Solution_Osquery_API_ECSMapping' + Security_Osquery_API_ECSMappingOrUndefined: + $ref: '#/components/schemas/Security_Osquery_API_ECSMapping' nullable: true - Security_Solution_Osquery_API_Enabled: + Security_Osquery_API_Enabled: type: boolean - Security_Solution_Osquery_API_EnabledOrUndefined: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Enabled' + Security_Osquery_API_EnabledOrUndefined: + $ref: '#/components/schemas/Security_Osquery_API_Enabled' nullable: true - Security_Solution_Osquery_API_FindLiveQueryRequestQuery: + Security_Osquery_API_FindLiveQueryRequestQuery: type: object properties: kuery: - $ref: '#/components/schemas/Security_Solution_Osquery_API_KueryOrUndefined' + $ref: '#/components/schemas/Security_Osquery_API_KueryOrUndefined' page: - $ref: '#/components/schemas/Security_Solution_Osquery_API_PageOrUndefined' + $ref: '#/components/schemas/Security_Osquery_API_PageOrUndefined' pageSize: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_PageSizeOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_PageSizeOrUndefined' sort: - $ref: '#/components/schemas/Security_Solution_Osquery_API_SortOrUndefined' + $ref: '#/components/schemas/Security_Osquery_API_SortOrUndefined' sortOrder: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_SortOrderOrUndefined - Security_Solution_Osquery_API_FindPacksRequestQuery: + $ref: '#/components/schemas/Security_Osquery_API_SortOrderOrUndefined' + Security_Osquery_API_FindPacksRequestQuery: type: object properties: page: - $ref: '#/components/schemas/Security_Solution_Osquery_API_PageOrUndefined' + $ref: '#/components/schemas/Security_Osquery_API_PageOrUndefined' pageSize: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_PageSizeOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_PageSizeOrUndefined' sort: - $ref: '#/components/schemas/Security_Solution_Osquery_API_SortOrUndefined' + $ref: '#/components/schemas/Security_Osquery_API_SortOrUndefined' sortOrder: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_SortOrderOrUndefined - Security_Solution_Osquery_API_FindSavedQueryRequestQuery: + $ref: '#/components/schemas/Security_Osquery_API_SortOrderOrUndefined' + Security_Osquery_API_FindSavedQueryRequestQuery: type: object properties: page: - $ref: '#/components/schemas/Security_Solution_Osquery_API_PageOrUndefined' + $ref: '#/components/schemas/Security_Osquery_API_PageOrUndefined' pageSize: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_PageSizeOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_PageSizeOrUndefined' sort: - $ref: '#/components/schemas/Security_Solution_Osquery_API_SortOrUndefined' + $ref: '#/components/schemas/Security_Osquery_API_SortOrUndefined' sortOrder: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_SortOrderOrUndefined - Security_Solution_Osquery_API_GetLiveQueryResultsRequestQuery: + $ref: '#/components/schemas/Security_Osquery_API_SortOrderOrUndefined' + Security_Osquery_API_GetLiveQueryResultsRequestQuery: type: object properties: kuery: - $ref: '#/components/schemas/Security_Solution_Osquery_API_KueryOrUndefined' + $ref: '#/components/schemas/Security_Osquery_API_KueryOrUndefined' page: - $ref: '#/components/schemas/Security_Solution_Osquery_API_PageOrUndefined' + $ref: '#/components/schemas/Security_Osquery_API_PageOrUndefined' pageSize: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_PageSizeOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_PageSizeOrUndefined' sort: - $ref: '#/components/schemas/Security_Solution_Osquery_API_SortOrUndefined' + $ref: '#/components/schemas/Security_Osquery_API_SortOrUndefined' sortOrder: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_SortOrderOrUndefined - Security_Solution_Osquery_API_Id: + $ref: '#/components/schemas/Security_Osquery_API_SortOrderOrUndefined' + Security_Osquery_API_Id: type: string - Security_Solution_Osquery_API_Interval: + Security_Osquery_API_Interval: type: string - Security_Solution_Osquery_API_IntervalOrUndefined: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Interval' + Security_Osquery_API_IntervalOrUndefined: + $ref: '#/components/schemas/Security_Osquery_API_Interval' nullable: true - Security_Solution_Osquery_API_KueryOrUndefined: + Security_Osquery_API_KueryOrUndefined: nullable: true type: string - Security_Solution_Osquery_API_ObjectQueries: + Security_Osquery_API_ObjectQueries: additionalProperties: - $ref: '#/components/schemas/Security_Solution_Osquery_API_ObjectQueriesItem' + $ref: '#/components/schemas/Security_Osquery_API_ObjectQueriesItem' type: object - Security_Solution_Osquery_API_ObjectQueriesItem: + Security_Osquery_API_ObjectQueriesItem: type: object properties: ecs_mapping: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_ECSMappingOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_ECSMappingOrUndefined' id: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Id' + $ref: '#/components/schemas/Security_Osquery_API_Id' platform: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_PlatformOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_PlatformOrUndefined' query: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Query' + $ref: '#/components/schemas/Security_Osquery_API_Query' removed: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_RemovedOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_RemovedOrUndefined' saved_query_id: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_SavedQueryIdOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_SavedQueryIdOrUndefined' snapshot: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_SnapshotOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_SnapshotOrUndefined' version: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_VersionOrUndefined - Security_Solution_Osquery_API_PackId: + $ref: '#/components/schemas/Security_Osquery_API_VersionOrUndefined' + Security_Osquery_API_PackId: type: string - Security_Solution_Osquery_API_PackIdOrUndefined: - $ref: '#/components/schemas/Security_Solution_Osquery_API_PackId' + Security_Osquery_API_PackIdOrUndefined: + $ref: '#/components/schemas/Security_Osquery_API_PackId' nullable: true - Security_Solution_Osquery_API_PackName: + Security_Osquery_API_PackName: type: string - Security_Solution_Osquery_API_PageOrUndefined: + Security_Osquery_API_PageOrUndefined: nullable: true type: integer - Security_Solution_Osquery_API_PageSizeOrUndefined: + Security_Osquery_API_PageSizeOrUndefined: nullable: true type: integer - Security_Solution_Osquery_API_Platform: + Security_Osquery_API_Platform: type: string - Security_Solution_Osquery_API_PlatformOrUndefined: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Platform' + Security_Osquery_API_PlatformOrUndefined: + $ref: '#/components/schemas/Security_Osquery_API_Platform' nullable: true - Security_Solution_Osquery_API_PolicyIds: + Security_Osquery_API_PolicyIds: items: type: string type: array - Security_Solution_Osquery_API_PolicyIdsOrUndefined: - $ref: '#/components/schemas/Security_Solution_Osquery_API_PolicyIds' + Security_Osquery_API_PolicyIdsOrUndefined: + $ref: '#/components/schemas/Security_Osquery_API_PolicyIds' nullable: true - Security_Solution_Osquery_API_Query: + Security_Osquery_API_Query: type: string - Security_Solution_Osquery_API_QueryOrUndefined: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Query' + Security_Osquery_API_QueryOrUndefined: + $ref: '#/components/schemas/Security_Osquery_API_Query' nullable: true - Security_Solution_Osquery_API_Removed: + Security_Osquery_API_Removed: type: boolean - Security_Solution_Osquery_API_RemovedOrUndefined: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Removed' + Security_Osquery_API_RemovedOrUndefined: + $ref: '#/components/schemas/Security_Osquery_API_Removed' nullable: true - Security_Solution_Osquery_API_SavedQueryId: + Security_Osquery_API_SavedQueryId: type: string - Security_Solution_Osquery_API_SavedQueryIdOrUndefined: - $ref: '#/components/schemas/Security_Solution_Osquery_API_SavedQueryId' + Security_Osquery_API_SavedQueryIdOrUndefined: + $ref: '#/components/schemas/Security_Osquery_API_SavedQueryId' nullable: true - Security_Solution_Osquery_API_Shards: + Security_Osquery_API_Shards: additionalProperties: type: number type: object - Security_Solution_Osquery_API_Snapshot: + Security_Osquery_API_Snapshot: type: boolean - Security_Solution_Osquery_API_SnapshotOrUndefined: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Snapshot' + Security_Osquery_API_SnapshotOrUndefined: + $ref: '#/components/schemas/Security_Osquery_API_Snapshot' nullable: true - Security_Solution_Osquery_API_SortOrderOrUndefined: + Security_Osquery_API_SortOrderOrUndefined: oneOf: - nullable: true type: string - enum: - asc - desc - Security_Solution_Osquery_API_SortOrUndefined: + Security_Osquery_API_SortOrUndefined: nullable: true type: string - Security_Solution_Osquery_API_UpdatePacksRequestBody: + Security_Osquery_API_UpdatePacksRequestBody: type: object properties: description: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DescriptionOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_DescriptionOrUndefined' enabled: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_EnabledOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_EnabledOrUndefined' id: - $ref: '#/components/schemas/Security_Solution_Osquery_API_PackId' + $ref: '#/components/schemas/Security_Osquery_API_PackId' policy_ids: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_PolicyIdsOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_PolicyIdsOrUndefined' queries: - $ref: '#/components/schemas/Security_Solution_Osquery_API_ObjectQueries' + $ref: '#/components/schemas/Security_Osquery_API_ObjectQueries' shards: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Shards' - Security_Solution_Osquery_API_UpdateSavedQueryRequestBody: + $ref: '#/components/schemas/Security_Osquery_API_Shards' + Security_Osquery_API_UpdateSavedQueryRequestBody: type: object properties: description: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DescriptionOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_DescriptionOrUndefined' ecs_mapping: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_ECSMappingOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_ECSMappingOrUndefined' id: - $ref: '#/components/schemas/Security_Solution_Osquery_API_SavedQueryId' + $ref: '#/components/schemas/Security_Osquery_API_SavedQueryId' interval: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_IntervalOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_IntervalOrUndefined' platform: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DescriptionOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_DescriptionOrUndefined' query: - $ref: '#/components/schemas/Security_Solution_Osquery_API_QueryOrUndefined' + $ref: '#/components/schemas/Security_Osquery_API_QueryOrUndefined' removed: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_RemovedOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_RemovedOrUndefined' snapshot: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_SnapshotOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_SnapshotOrUndefined' version: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_VersionOrUndefined - Security_Solution_Osquery_API_Version: + $ref: '#/components/schemas/Security_Osquery_API_VersionOrUndefined' + Security_Osquery_API_Version: type: string - Security_Solution_Osquery_API_VersionOrUndefined: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Version' + Security_Osquery_API_VersionOrUndefined: + $ref: '#/components/schemas/Security_Osquery_API_Version' nullable: true - Security_Solution_Timeline_API_BareNote: + Security_Timeline_API_BareNote: type: object properties: created: @@ -32400,8 +31137,28 @@ components: nullable: true type: string timelineId: + type: string + updated: + nullable: true + type: number + updatedBy: + nullable: true + type: string + required: + - timelineId + Security_Timeline_API_BarePinnedEvent: + type: object + properties: + created: + nullable: true + type: number + createdBy: nullable: true type: string + eventId: + type: string + timelineId: + type: string updated: nullable: true type: number @@ -32409,8 +31166,9 @@ components: nullable: true type: string required: + - eventId - timelineId - Security_Solution_Timeline_API_ColumnHeaderResult: + Security_Timeline_API_ColumnHeaderResult: type: object properties: aggregatable: @@ -32439,7 +31197,7 @@ components: type: boolean type: type: string - Security_Solution_Timeline_API_DataProviderQueryMatch: + Security_Timeline_API_DataProviderQueryMatch: type: object properties: enabled: @@ -32458,14 +31216,13 @@ components: nullable: true type: string queryMatch: - $ref: '#/components/schemas/Security_Solution_Timeline_API_QueryMatchResult' - Security_Solution_Timeline_API_DataProviderResult: + $ref: '#/components/schemas/Security_Timeline_API_QueryMatchResult' + Security_Timeline_API_DataProviderResult: type: object properties: and: items: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_DataProviderQueryMatch + $ref: '#/components/schemas/Security_Timeline_API_DataProviderQueryMatch' nullable: true type: array enabled: @@ -32484,12 +31241,12 @@ components: nullable: true type: string queryMatch: - $ref: '#/components/schemas/Security_Solution_Timeline_API_QueryMatchResult' + $ref: '#/components/schemas/Security_Timeline_API_QueryMatchResult' nullable: true type: - $ref: '#/components/schemas/Security_Solution_Timeline_API_DataProviderType' + $ref: '#/components/schemas/Security_Timeline_API_DataProviderType' nullable: true - Security_Solution_Timeline_API_DataProviderType: + Security_Timeline_API_DataProviderType: description: >- The type of data provider to create. Valid values are `default` and `template`. @@ -32497,13 +31254,13 @@ components: - default - template type: string - Security_Solution_Timeline_API_DocumentIds: + Security_Timeline_API_DocumentIds: oneOf: - items: type: string type: array - type: string - Security_Solution_Timeline_API_FavoriteTimelineResponse: + Security_Timeline_API_FavoriteTimelineResponse: type: object properties: code: @@ -32511,8 +31268,7 @@ components: type: number favorite: items: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_FavoriteTimelineResult + $ref: '#/components/schemas/Security_Timeline_API_FavoriteTimelineResult' type: array message: nullable: true @@ -32526,13 +31282,13 @@ components: nullable: true type: number timelineType: - $ref: '#/components/schemas/Security_Solution_Timeline_API_TimelineType' + $ref: '#/components/schemas/Security_Timeline_API_TimelineType' version: type: string required: - savedObjectId - version - Security_Solution_Timeline_API_FavoriteTimelineResult: + Security_Timeline_API_FavoriteTimelineResult: type: object properties: favoriteDate: @@ -32544,7 +31300,7 @@ components: userName: nullable: true type: string - Security_Solution_Timeline_API_FilterTimelineResult: + Security_Timeline_API_FilterTimelineResult: type: object properties: exists: @@ -32584,7 +31340,19 @@ components: type: string script: type: string - Security_Solution_Timeline_API_ImportTimelineResult: + Security_Timeline_API_GetNotesResult: + type: object + properties: + notes: + items: + $ref: '#/components/schemas/Security_Timeline_API_Note' + type: array + totalCount: + type: number + required: + - totalCount + - notes + Security_Timeline_API_ImportTimelineResult: type: object properties: errors: @@ -32609,19 +31377,19 @@ components: type: number timelines_updated: type: number - Security_Solution_Timeline_API_ImportTimelines: + Security_Timeline_API_ImportTimelines: allOf: - - $ref: '#/components/schemas/Security_Solution_Timeline_API_SavedTimeline' + - $ref: '#/components/schemas/Security_Timeline_API_SavedTimeline' - type: object properties: eventNotes: items: - $ref: '#/components/schemas/Security_Solution_Timeline_API_BareNote' + $ref: '#/components/schemas/Security_Timeline_API_BareNote' nullable: true type: array globalNotes: items: - $ref: '#/components/schemas/Security_Solution_Timeline_API_BareNote' + $ref: '#/components/schemas/Security_Timeline_API_BareNote' nullable: true type: array pinnedEventIds: @@ -32635,44 +31403,48 @@ components: version: nullable: true type: string - Security_Solution_Timeline_API_Note: + Security_Timeline_API_Note: allOf: - - $ref: '#/components/schemas/Security_Solution_Timeline_API_BareNote' + - $ref: '#/components/schemas/Security_Timeline_API_BareNote' - type: object properties: noteId: type: string version: type: string - Security_Solution_Timeline_API_PinnedEvent: + required: + - noteId + - version + Security_Timeline_API_PersistPinnedEventResponse: + oneOf: + - allOf: + - $ref: '#/components/schemas/Security_Timeline_API_PinnedEvent' + - $ref: >- + #/components/schemas/Security_Timeline_API_PinnedEventBaseResponseBody + - nullable: true + type: object + Security_Timeline_API_PinnedEvent: + allOf: + - $ref: '#/components/schemas/Security_Timeline_API_BarePinnedEvent' + - type: object + properties: + pinnedEventId: + type: string + version: + type: string + required: + - pinnedEventId + - version + Security_Timeline_API_PinnedEventBaseResponseBody: type: object properties: - created: - nullable: true - type: number - createdBy: - nullable: true - type: string - eventId: - type: string - pinnedEventId: - type: string - timelineId: - type: string - updated: - nullable: true + code: type: number - updatedBy: - nullable: true - type: string - version: + message: type: string required: - - eventId - - pinnedEventId - - timelineId - - version - Security_Solution_Timeline_API_QueryMatchResult: + - code + Security_Timeline_API_QueryMatchResult: type: object properties: displayField: @@ -32690,7 +31462,7 @@ components: value: nullable: true type: string - Security_Solution_Timeline_API_Readable: + Security_Timeline_API_Readable: type: object properties: _data: @@ -32716,7 +31488,20 @@ components: type: object readable: type: boolean - Security_Solution_Timeline_API_RowRendererId: + Security_Timeline_API_ResponseNote: + type: object + properties: + code: + type: number + message: + type: string + note: + $ref: '#/components/schemas/Security_Timeline_API_Note' + required: + - code + - message + - note + Security_Timeline_API_RowRendererId: enum: - alert - alerts @@ -32737,13 +31522,12 @@ components: - threat_match - zeek type: string - Security_Solution_Timeline_API_SavedTimeline: + Security_Timeline_API_SavedTimeline: type: object properties: columns: items: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_ColumnHeaderResult + $ref: '#/components/schemas/Security_Timeline_API_ColumnHeaderResult' nullable: true type: array created: @@ -32754,8 +31538,7 @@ components: type: string dataProviders: items: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_DataProviderResult + $ref: '#/components/schemas/Security_Timeline_API_DataProviderResult' nullable: true type: array dataViewId: @@ -32803,19 +31586,17 @@ components: type: string excludedRowRendererIds: items: - $ref: '#/components/schemas/Security_Solution_Timeline_API_RowRendererId' + $ref: '#/components/schemas/Security_Timeline_API_RowRendererId' nullable: true type: array favorite: items: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_FavoriteTimelineResult + $ref: '#/components/schemas/Security_Timeline_API_FavoriteTimelineResult' nullable: true type: array filters: items: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_FilterTimelineResult + $ref: '#/components/schemas/Security_Timeline_API_FilterTimelineResult' nullable: true type: array indexNames: @@ -32828,7 +31609,7 @@ components: type: string kqlQuery: $ref: >- - #/components/schemas/Security_Solution_Timeline_API_SerializedFilterQueryResult + #/components/schemas/Security_Timeline_API_SerializedFilterQueryResult nullable: true savedQueryId: nullable: true @@ -32837,7 +31618,7 @@ components: nullable: true type: string sort: - $ref: '#/components/schemas/Security_Solution_Timeline_API_Sort' + $ref: '#/components/schemas/Security_Timeline_API_Sort' nullable: true status: enum: @@ -32853,7 +31634,7 @@ components: nullable: true type: number timelineType: - $ref: '#/components/schemas/Security_Solution_Timeline_API_TimelineType' + $ref: '#/components/schemas/Security_Timeline_API_TimelineType' nullable: true title: nullable: true @@ -32864,7 +31645,7 @@ components: updatedBy: nullable: true type: string - Security_Solution_Timeline_API_SerializedFilterQueryResult: + Security_Timeline_API_SerializedFilterQueryResult: type: object properties: filterQuery: @@ -32884,13 +31665,13 @@ components: serializedQuery: nullable: true type: string - Security_Solution_Timeline_API_Sort: + Security_Timeline_API_Sort: oneOf: - - $ref: '#/components/schemas/Security_Solution_Timeline_API_SortObject' + - $ref: '#/components/schemas/Security_Timeline_API_SortObject' - items: - $ref: '#/components/schemas/Security_Solution_Timeline_API_SortObject' + $ref: '#/components/schemas/Security_Timeline_API_SortObject' type: array - Security_Solution_Timeline_API_SortFieldTimeline: + Security_Timeline_API_SortFieldTimeline: description: The field to sort the timelines by. enum: - title @@ -32898,7 +31679,7 @@ components: - updated - created type: string - Security_Solution_Timeline_API_SortObject: + Security_Timeline_API_SortObject: type: object properties: columnId: @@ -32910,14 +31691,14 @@ components: sortDirection: nullable: true type: string - Security_Solution_Timeline_API_TimelineResponse: + Security_Timeline_API_TimelineResponse: allOf: - - $ref: '#/components/schemas/Security_Solution_Timeline_API_SavedTimeline' + - $ref: '#/components/schemas/Security_Timeline_API_SavedTimeline' - type: object properties: eventIdToNoteIds: items: - $ref: '#/components/schemas/Security_Solution_Timeline_API_Note' + $ref: '#/components/schemas/Security_Timeline_API_Note' type: array noteIds: items: @@ -32925,7 +31706,7 @@ components: type: array notes: items: - $ref: '#/components/schemas/Security_Solution_Timeline_API_Note' + $ref: '#/components/schemas/Security_Timeline_API_Note' type: array pinnedEventIds: items: @@ -32933,8 +31714,7 @@ components: type: array pinnedEventsSaveObject: items: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_PinnedEvent + $ref: '#/components/schemas/Security_Timeline_API_PinnedEvent' type: array savedObjectId: type: string @@ -32943,7 +31723,7 @@ components: required: - savedObjectId - version - Security_Solution_Timeline_API_TimelineStatus: + Security_Timeline_API_TimelineStatus: description: >- The status of the timeline. Valid values are `active`, `draft`, and `immutable`. @@ -32952,7 +31732,7 @@ components: - draft - immutable type: string - Security_Solution_Timeline_API_TimelineType: + Security_Timeline_API_TimelineType: description: >- The type of timeline to create. Valid values are `default` and `template`. @@ -34236,29 +33016,29 @@ tags: You can create rules that automatically turn events and external alerts sent to Elastic Security into detection alerts. These alerts are displayed on the Detections page. - name: Security Solution Detections API + name: Security Detections API - description: >- Endpoint Exceptions API allows you to manage detection rule endpoint exceptions to prevent a rule from generating an alert from incoming events even when the rule's other criteria are met. - name: Security Solution Endpoint Exceptions API + name: Security Endpoint Exceptions API - description: Interact with and manage endpoints running the Elastic Defend integration. - name: Security Solution Endpoint Management API + name: Security Endpoint Management API - description: '' - name: Security Solution Entity Analytics API + name: Security Entity Analytics API - description: >- Exceptions API allows you to manage detection rule exceptions to prevent a rule from generating an alert from incoming events even when the rule's other criteria are met. - name: Security Solution Exceptions API + name: Security Exceptions API - description: Lists API allows you to manage lists of keywords, IPs or IP ranges items. - name: Security Solution Lists API + name: Security Lists API - description: Run live queries, manage packs and saved queries. - name: Security Solution Osquery API + name: Security Osquery API - description: >- You can create Timelines and Timeline templates via the API, as well as import new Timelines from an ndjson file. - name: Security Solution Timeline API + name: Security Timeline API - description: SLO APIs enable you to define, manage and track service-level objectives name: slo - name: system diff --git a/oas_docs/output/kibana.staging.yaml b/oas_docs/output/kibana.staging.yaml index c2b530c0af263..59a22166f3498 100644 --- a/oas_docs/output/kibana.staging.yaml +++ b/oas_docs/output/kibana.staging.yaml @@ -6595,8 +6595,7 @@ paths: name: id_field required: true schema: - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_IdField + $ref: '#/components/schemas/Security_Entity_Analytics_API_IdField' - description: If 'wait_for' the request will wait for the index refresh. in: query name: refresh @@ -6619,7 +6618,7 @@ paths: type: boolean record: $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_AssetCriticalityRecord + #/components/schemas/Security_Entity_Analytics_API_AssetCriticalityRecord description: The deleted record if it existed. required: - deleted @@ -6628,7 +6627,7 @@ paths: description: Invalid request summary: Delete an asset criticality record tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API get: description: Get the asset criticality record for a specific entity. operationId: GetAssetCriticalityRecord @@ -6645,15 +6644,14 @@ paths: name: id_field required: true schema: - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_IdField + $ref: '#/components/schemas/Security_Entity_Analytics_API_IdField' responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_AssetCriticalityRecord + #/components/schemas/Security_Entity_Analytics_API_AssetCriticalityRecord description: Successful response '400': description: Invalid request @@ -6661,7 +6659,7 @@ paths: description: Criticality record not found summary: Get an asset criticality record tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API post: description: > Create or update an asset criticality record for a specific entity. @@ -6677,7 +6675,7 @@ paths: schema: allOf: - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_CreateAssetCriticalityRecord + #/components/schemas/Security_Entity_Analytics_API_CreateAssetCriticalityRecord - type: object properties: refresh: @@ -6694,13 +6692,13 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_AssetCriticalityRecord + #/components/schemas/Security_Entity_Analytics_API_AssetCriticalityRecord description: Successful response '400': description: Invalid request summary: Upsert an asset criticality record tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API /api/asset_criticality/bulk: post: description: > @@ -6729,7 +6727,7 @@ paths: records: items: $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_CreateAssetCriticalityRecord + #/components/schemas/Security_Entity_Analytics_API_CreateAssetCriticalityRecord maxItems: 1000 minItems: 1 type: array @@ -6753,11 +6751,11 @@ paths: errors: items: $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_AssetCriticalityBulkUploadErrorItem + #/components/schemas/Security_Entity_Analytics_API_AssetCriticalityBulkUploadErrorItem type: array stats: $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_AssetCriticalityBulkUploadStats + #/components/schemas/Security_Entity_Analytics_API_AssetCriticalityBulkUploadStats required: - errors - stats @@ -6766,7 +6764,7 @@ paths: description: File too large summary: Bulk upsert asset criticality records tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API /api/asset_criticality/list: get: description: List asset criticality records, paging, sorting and filtering as needed. @@ -6830,7 +6828,7 @@ paths: records: items: $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_AssetCriticalityRecord + #/components/schemas/Security_Entity_Analytics_API_AssetCriticalityRecord type: array total: minimum: 0 @@ -6843,7 +6841,7 @@ paths: description: Bulk upload successful summary: List asset criticality records tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API /api/cases: delete: description: > @@ -8730,14 +8728,13 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse + #/components/schemas/Security_Detections_API_PlatformErrorResponse description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Detections_API_SiemErrorResponse' description: Not enough permissions response '404': content: @@ -8749,12 +8746,11 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Detections_API_SiemErrorResponse' description: Internal server error response summary: Delete an alerts index tags: - - Security Solution Detections API + - Security Detections API - Alert index API get: operationId: ReadAlertsIndex @@ -8779,32 +8775,29 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse + #/components/schemas/Security_Detections_API_PlatformErrorResponse description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Detections_API_SiemErrorResponse' description: Not enough permissions response '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Detections_API_SiemErrorResponse' description: Not found '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Detections_API_SiemErrorResponse' description: Internal server error response summary: Reads the alert index name if it exists tags: - - Security Solution Detections API + - Security Detections API - Alert index API post: operationId: CreateAlertsIndex @@ -8825,32 +8818,29 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse + #/components/schemas/Security_Detections_API_PlatformErrorResponse description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Detections_API_SiemErrorResponse' description: Not enough permissions response '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Detections_API_SiemErrorResponse' description: Not found '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Detections_API_SiemErrorResponse' description: Internal server error response summary: Create an alerts index tags: - - Security Solution Detections API + - Security Detections API - Alert index API /api/detection_engine/privileges: get: @@ -8884,18 +8874,17 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse + #/components/schemas/Security_Detections_API_PlatformErrorResponse description: Unsuccessful authentication response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Detections_API_SiemErrorResponse' description: Internal server error response summary: Returns user privileges for the Kibana space tags: - - Security Solution Detections API + - Security Detections API - Privileges API /api/detection_engine/rules: delete: @@ -8907,25 +8896,23 @@ paths: name: id required: false schema: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleObjectId' + $ref: '#/components/schemas/Security_Detections_API_RuleObjectId' - description: The rule's `rule_id` value. in: query name: rule_id required: false schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleResponse + $ref: '#/components/schemas/Security_Detections_API_RuleResponse' description: Indicates a successful call. summary: Delete a detection rule tags: - - Security Solution Detections API + - Security Detections API - Rules API get: description: Retrieve a detection rule using the `rule_id` or `id` field. @@ -8936,25 +8923,23 @@ paths: name: id required: false schema: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleObjectId' + $ref: '#/components/schemas/Security_Detections_API_RuleObjectId' - description: The rule's `rule_id` value. in: query name: rule_id required: false schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleResponse + $ref: '#/components/schemas/Security_Detections_API_RuleResponse' description: Indicates a successful call. summary: Retrieve a detection rule tags: - - Security Solution Detections API + - Security Detections API - Rules API patch: description: >- @@ -8965,20 +8950,18 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RulePatchProps + $ref: '#/components/schemas/Security_Detections_API_RulePatchProps' required: true responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleResponse + $ref: '#/components/schemas/Security_Detections_API_RuleResponse' description: Indicates a successful call. summary: Patch a detection rule tags: - - Security Solution Detections API + - Security Detections API - Rules API post: description: Create a new detection rule. @@ -8987,20 +8970,18 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleCreateProps + $ref: '#/components/schemas/Security_Detections_API_RuleCreateProps' required: true responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleResponse + $ref: '#/components/schemas/Security_Detections_API_RuleResponse' description: Indicates a successful call. summary: Create a detection rule tags: - - Security Solution Detections API + - Security Detections API - Rules API put: description: > @@ -9015,20 +8996,18 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleUpdateProps + $ref: '#/components/schemas/Security_Detections_API_RuleUpdateProps' required: true responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleResponse + $ref: '#/components/schemas/Security_Detections_API_RuleResponse' description: Indicates a successful call. summary: Update a detection rule tags: - - Security Solution Detections API + - Security Detections API - Rules API /api/detection_engine/rules/_bulk_action: post: @@ -9049,20 +9028,16 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: oneOf: + - $ref: '#/components/schemas/Security_Detections_API_BulkDeleteRules' - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkDeleteRules - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkDisableRules - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkEnableRules - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkExportRules + #/components/schemas/Security_Detections_API_BulkDisableRules + - $ref: '#/components/schemas/Security_Detections_API_BulkEnableRules' + - $ref: '#/components/schemas/Security_Detections_API_BulkExportRules' - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkDuplicateRules + #/components/schemas/Security_Detections_API_BulkDuplicateRules - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkManualRuleRun - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkEditRules + #/components/schemas/Security_Detections_API_BulkManualRuleRun + - $ref: '#/components/schemas/Security_Detections_API_BulkEditRules' responses: '200': content: @@ -9070,13 +9045,13 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkEditActionResponse + #/components/schemas/Security_Detections_API_BulkEditActionResponse - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkExportActionResponse + #/components/schemas/Security_Detections_API_BulkExportActionResponse description: OK summary: Apply a bulk action to detection rules tags: - - Security Solution Detections API + - Security Detections API - Bulk API /api/detection_engine/rules/_bulk_create: post: @@ -9088,8 +9063,7 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleCreateProps + $ref: '#/components/schemas/Security_Detections_API_RuleCreateProps' type: array description: A JSON array of rules, where each rule contains the required fields. required: true @@ -9099,11 +9073,11 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkCrudRulesResponse + #/components/schemas/Security_Detections_API_BulkCrudRulesResponse description: Indicates a successful call. summary: Create multiple detection rules tags: - - Security Solution Detections API + - Security Detections API - Bulk API /api/detection_engine/rules/_bulk_delete: delete: @@ -9118,11 +9092,10 @@ paths: type: object properties: id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId + $ref: '#/components/schemas/Security_Detections_API_RuleObjectId' rule_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + #/components/schemas/Security_Detections_API_RuleSignatureId type: array description: >- A JSON array of `id` or `rule_id` fields of the rules you want to @@ -9134,7 +9107,7 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkCrudRulesResponse + #/components/schemas/Security_Detections_API_BulkCrudRulesResponse description: Indicates a successful call. '400': content: @@ -9142,27 +9115,26 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse + #/components/schemas/Security_Detections_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse + #/components/schemas/Security_Detections_API_SiemErrorResponse description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse + #/components/schemas/Security_Detections_API_PlatformErrorResponse description: Unsuccessful authentication response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Detections_API_SiemErrorResponse' description: Internal server error response summary: Delete multiple detection rules tags: - - Security Solution Detections API + - Security Detections API - Bulk API post: deprecated: true @@ -9176,11 +9148,10 @@ paths: type: object properties: id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId + $ref: '#/components/schemas/Security_Detections_API_RuleObjectId' rule_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + #/components/schemas/Security_Detections_API_RuleSignatureId type: array description: >- A JSON array of `id` or `rule_id` fields of the rules you want to @@ -9192,7 +9163,7 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkCrudRulesResponse + #/components/schemas/Security_Detections_API_BulkCrudRulesResponse description: Indicates a successful call. '400': content: @@ -9200,27 +9171,26 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse + #/components/schemas/Security_Detections_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse + #/components/schemas/Security_Detections_API_SiemErrorResponse description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse + #/components/schemas/Security_Detections_API_PlatformErrorResponse description: Unsuccessful authentication response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Detections_API_SiemErrorResponse' description: Internal server error response summary: Delete multiple detection rules tags: - - Security Solution Detections API + - Security Detections API - Bulk API /api/detection_engine/rules/_bulk_update: patch: @@ -9234,8 +9204,7 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RulePatchProps + $ref: '#/components/schemas/Security_Detections_API_RulePatchProps' type: array description: A JSON array of rules, where each rule contains the required fields. required: true @@ -9245,11 +9214,11 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkCrudRulesResponse + #/components/schemas/Security_Detections_API_BulkCrudRulesResponse description: Indicates a successful call. summary: Patch multiple detection rules tags: - - Security Solution Detections API + - Security Detections API - Bulk API put: deprecated: true @@ -9266,8 +9235,7 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleUpdateProps + $ref: '#/components/schemas/Security_Detections_API_RuleUpdateProps' type: array description: >- A JSON array where each element includes the `id` or `rule_id` field @@ -9279,11 +9247,11 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkCrudRulesResponse + #/components/schemas/Security_Detections_API_BulkCrudRulesResponse description: Indicates a successful call. summary: Update multiple detection rules tags: - - Security Solution Detections API + - Security Detections API - Bulk API /api/detection_engine/rules/_export: post: @@ -9330,7 +9298,7 @@ paths: properties: rule_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + #/components/schemas/Security_Detections_API_RuleSignatureId required: - rule_id type: array @@ -9348,7 +9316,7 @@ paths: description: Indicates a successful call. summary: Export detection rules tags: - - Security Solution Detections API + - Security Detections API - Import/Export API /api/detection_engine/rules/_find: get: @@ -9375,14 +9343,13 @@ paths: name: sort_field required: false schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_FindRulesSortField + $ref: '#/components/schemas/Security_Detections_API_FindRulesSortField' - description: Sort order in: query name: sort_order required: false schema: - $ref: '#/components/schemas/Security_Solution_Detections_API_SortOrder' + $ref: '#/components/schemas/Security_Detections_API_SortOrder' - description: Page number in: query name: page @@ -9409,7 +9376,7 @@ paths: data: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleResponse + #/components/schemas/Security_Detections_API_RuleResponse type: array page: type: integer @@ -9425,7 +9392,7 @@ paths: description: Successful response summary: List all detection rules tags: - - Security Solution Detections API + - Security Detections API - Rules API /api/detection_engine/rules/_import: post: @@ -9493,8 +9460,7 @@ paths: properties: action_connectors_errors: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ErrorSchema + $ref: '#/components/schemas/Security_Detections_API_ErrorSchema' type: array action_connectors_success: type: boolean @@ -9504,17 +9470,15 @@ paths: action_connectors_warnings: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_WarningSchema + #/components/schemas/Security_Detections_API_WarningSchema type: array errors: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ErrorSchema + $ref: '#/components/schemas/Security_Detections_API_ErrorSchema' type: array exceptions_errors: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ErrorSchema + $ref: '#/components/schemas/Security_Detections_API_ErrorSchema' type: array exceptions_success: type: boolean @@ -9544,7 +9508,7 @@ paths: description: Indicates a successful call. summary: Import detection rules tags: - - Security Solution Detections API + - Security Detections API - Import/Export API /api/detection_engine/rules/{id}/exceptions: post: @@ -9556,7 +9520,7 @@ paths: name: id required: true schema: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_RuleId' + $ref: '#/components/schemas/Security_Exceptions_API_RuleId' requestBody: content: application/json; Elastic-Api-Version=2023-10-31: @@ -9566,7 +9530,7 @@ paths: items: items: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_CreateRuleExceptionListItemProps + #/components/schemas/Security_Exceptions_API_CreateRuleExceptionListItemProps type: array required: - items @@ -9579,7 +9543,7 @@ paths: schema: items: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItem + #/components/schemas/Security_Exceptions_API_ExceptionListItem type: array description: Successful response '400': @@ -9588,34 +9552,33 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Exceptions_API_SiemErrorResponse description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Not enough privileges response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response summary: Create rule exception list items tags: - - Security Solution Exceptions API + - Security Exceptions API /api/detection_engine/rules/prepackaged: put: description: Install and update all Elastic prebuilt detection rules and Timelines. @@ -9652,7 +9615,7 @@ paths: description: Indicates a successful call summary: Install prebuilt detection rules and Timelines tags: - - Security Solution Detections API + - Security Detections API - Prebuilt Rules API /api/detection_engine/rules/prepackaged/_status: get: @@ -9711,7 +9674,7 @@ paths: description: Indicates a successful call summary: Retrieve the status of prebuilt detection rules and Timelines tags: - - Security Solution Detections API + - Security Detections API - Prebuilt Rules API /api/detection_engine/rules/preview: post: @@ -9732,44 +9695,44 @@ paths: anyOf: - allOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlRuleCreateProps + #/components/schemas/Security_Detections_API_EqlRuleCreateProps - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RulePreviewParams + #/components/schemas/Security_Detections_API_RulePreviewParams - allOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRuleCreateProps + #/components/schemas/Security_Detections_API_QueryRuleCreateProps - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RulePreviewParams + #/components/schemas/Security_Detections_API_RulePreviewParams - allOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRuleCreateProps + #/components/schemas/Security_Detections_API_SavedQueryRuleCreateProps - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RulePreviewParams + #/components/schemas/Security_Detections_API_RulePreviewParams - allOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRuleCreateProps + #/components/schemas/Security_Detections_API_ThresholdRuleCreateProps - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RulePreviewParams + #/components/schemas/Security_Detections_API_RulePreviewParams - allOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRuleCreateProps + #/components/schemas/Security_Detections_API_ThreatMatchRuleCreateProps - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RulePreviewParams + #/components/schemas/Security_Detections_API_RulePreviewParams - allOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRuleCreateProps + #/components/schemas/Security_Detections_API_MachineLearningRuleCreateProps - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RulePreviewParams + #/components/schemas/Security_Detections_API_RulePreviewParams - allOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRuleCreateProps + #/components/schemas/Security_Detections_API_NewTermsRuleCreateProps - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RulePreviewParams + #/components/schemas/Security_Detections_API_RulePreviewParams - allOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlRuleCreateProps + #/components/schemas/Security_Detections_API_EsqlRuleCreateProps - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RulePreviewParams + #/components/schemas/Security_Detections_API_RulePreviewParams discriminator: propertyName: type description: >- @@ -9788,11 +9751,11 @@ paths: logs: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RulePreviewLogs + #/components/schemas/Security_Detections_API_RulePreviewLogs type: array previewId: $ref: >- - #/components/schemas/Security_Solution_Detections_API_NonEmptyString + #/components/schemas/Security_Detections_API_NonEmptyString required: - logs description: Successful response @@ -9802,27 +9765,26 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse + #/components/schemas/Security_Detections_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse + #/components/schemas/Security_Detections_API_SiemErrorResponse description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse + #/components/schemas/Security_Detections_API_PlatformErrorResponse description: Unsuccessful authentication response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Detections_API_SiemErrorResponse' description: Internal server error response summary: Preview rule alerts generated on specified time range tags: - - Security Solution Detections API + - Security Detections API - Rule preview API /api/detection_engine/signals/assignees: post: @@ -9838,12 +9800,10 @@ paths: type: object properties: assignees: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertAssignees + $ref: '#/components/schemas/Security_Detections_API_AlertAssignees' description: Details about the assignees to assign and unassign. ids: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertIds + $ref: '#/components/schemas/Security_Detections_API_AlertIds' description: List of alerts ids to assign and unassign passed assignees. required: - assignees @@ -9856,7 +9816,7 @@ paths: description: Invalid request. summary: Assign and unassign users from detection alerts tags: - - Security Solution Detections API + - Security Detections API /api/detection_engine/signals/finalize_migration: post: description: > @@ -9890,7 +9850,7 @@ paths: schema: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_MigrationFinalizationResult + #/components/schemas/Security_Detections_API_MigrationFinalizationResult type: array description: Successful response '400': @@ -9899,27 +9859,26 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse + #/components/schemas/Security_Detections_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse + #/components/schemas/Security_Detections_API_SiemErrorResponse description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse + #/components/schemas/Security_Detections_API_PlatformErrorResponse description: Unsuccessful authentication response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Detections_API_SiemErrorResponse' description: Internal server error response summary: Finalize detection alert migrations tags: - - Security Solution Detections API + - Security Detections API - Alerts migration API /api/detection_engine/signals/migration: delete: @@ -9963,7 +9922,7 @@ paths: schema: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_MigrationCleanupResult + #/components/schemas/Security_Detections_API_MigrationCleanupResult type: array description: Successful response '400': @@ -9972,27 +9931,26 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse + #/components/schemas/Security_Detections_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse + #/components/schemas/Security_Detections_API_SiemErrorResponse description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse + #/components/schemas/Security_Detections_API_PlatformErrorResponse description: Unsuccessful authentication response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Detections_API_SiemErrorResponse' description: Internal server error response summary: Clean up detection alert migrations tags: - - Security Solution Detections API + - Security Detections API - Alerts migration API post: description: > @@ -10013,13 +9971,13 @@ paths: index: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_NonEmptyString + #/components/schemas/Security_Detections_API_NonEmptyString minItems: 1 type: array required: - index - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsReindexOptions + #/components/schemas/Security_Detections_API_AlertsReindexOptions description: Alerts migration parameters required: true responses: @@ -10033,11 +9991,11 @@ paths: items: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexMigrationSuccess + #/components/schemas/Security_Detections_API_AlertsIndexMigrationSuccess - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexMigrationError + #/components/schemas/Security_Detections_API_AlertsIndexMigrationError - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SkippedAlertsIndexMigration + #/components/schemas/Security_Detections_API_SkippedAlertsIndexMigration type: array required: - indices @@ -10048,27 +10006,26 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse + #/components/schemas/Security_Detections_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse + #/components/schemas/Security_Detections_API_SiemErrorResponse description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse + #/components/schemas/Security_Detections_API_PlatformErrorResponse description: Unsuccessful authentication response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Detections_API_SiemErrorResponse' description: Internal server error response summary: Initiate a detection alert migration tags: - - Security Solution Detections API + - Security Detections API - Alerts migration API /api/detection_engine/signals/migration_status: post: @@ -10100,7 +10057,7 @@ paths: indices: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_IndexMigrationStatus + #/components/schemas/Security_Detections_API_IndexMigrationStatus type: array required: - indices @@ -10111,27 +10068,26 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse + #/components/schemas/Security_Detections_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse + #/components/schemas/Security_Detections_API_SiemErrorResponse description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse + #/components/schemas/Security_Detections_API_PlatformErrorResponse description: Unsuccessful authentication response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Detections_API_SiemErrorResponse' description: Internal server error response summary: Retrieve the status of detection alert migrations tags: - - Security Solution Detections API + - Security Detections API - Alerts migration API /api/detection_engine/signals/search: post: @@ -10168,8 +10124,7 @@ paths: minimum: 0 type: integer sort: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsSort + $ref: '#/components/schemas/Security_Detections_API_AlertsSort' track_total_hits: type: boolean description: Search and/or aggregation query @@ -10189,27 +10144,26 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse + #/components/schemas/Security_Detections_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse + #/components/schemas/Security_Detections_API_SiemErrorResponse description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse + #/components/schemas/Security_Detections_API_PlatformErrorResponse description: Unsuccessful authentication response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Detections_API_SiemErrorResponse' description: Internal server error response summary: Find and/or aggregate detection alerts tags: - - Security Solution Detections API + - Security Detections API - Alerts API /api/detection_engine/signals/status: post: @@ -10221,9 +10175,9 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SetAlertsStatusByIds + #/components/schemas/Security_Detections_API_SetAlertsStatusByIds - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SetAlertsStatusByQuery + #/components/schemas/Security_Detections_API_SetAlertsStatusByQuery description: >- An object containing desired status and explicit alert ids or a query to select alerts @@ -10243,27 +10197,26 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse + #/components/schemas/Security_Detections_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse + #/components/schemas/Security_Detections_API_SiemErrorResponse description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse + #/components/schemas/Security_Detections_API_PlatformErrorResponse description: Unsuccessful authentication response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Detections_API_SiemErrorResponse' description: Internal server error response summary: Set a detection alert status tags: - - Security Solution Detections API + - Security Detections API - Alerts API /api/detection_engine/signals/tags: post: @@ -10279,11 +10232,9 @@ paths: type: object properties: ids: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertIds + $ref: '#/components/schemas/Security_Detections_API_AlertIds' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SetAlertTags + $ref: '#/components/schemas/Security_Detections_API_SetAlertTags' required: - ids - tags @@ -10306,27 +10257,26 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse + #/components/schemas/Security_Detections_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse + #/components/schemas/Security_Detections_API_SiemErrorResponse description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse + #/components/schemas/Security_Detections_API_PlatformErrorResponse description: Unsuccessful authentication response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Detections_API_SiemErrorResponse' description: Internal server error response summary: Add and remove detection alert tags tags: - - Security Solution Detections API + - Security Detections API - Alerts API /api/detection_engine/tags: get: @@ -10337,12 +10287,11 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' description: Indicates a successful call summary: List all detection rule tags tags: - - Security Solution Detections API + - Security Detections API - Tags API /api/encrypted_saved_objects/_rotate_key: post: @@ -10450,7 +10399,7 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_EndpointList + #/components/schemas/Security_Endpoint_Exceptions_API_EndpointList description: Successful response '400': content: @@ -10458,34 +10407,34 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_SiemErrorResponse description: Invalid input data '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_PlatformErrorResponse description: Unsuccessful authentication '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_PlatformErrorResponse description: Insufficient privileges '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_SiemErrorResponse description: Internal server error summary: Create an endpoint exception list tags: - - Security Solution Endpoint Exceptions API + - Security Endpoint Exceptions API /api/endpoint_list/items: delete: description: >- @@ -10499,21 +10448,21 @@ paths: required: false schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemId + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemId - description: Either `id` or `item_id` must be specified in: query name: item_id required: false schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemHumanId + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemHumanId responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_EndpointListItem + #/components/schemas/Security_Endpoint_Exceptions_API_EndpointListItem description: Successful response '400': content: @@ -10521,41 +10470,41 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_SiemErrorResponse description: Invalid input data '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_PlatformErrorResponse description: Unsuccessful authentication '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_PlatformErrorResponse description: Insufficient privileges '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_SiemErrorResponse description: Endpoint list item not found '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_SiemErrorResponse description: Internal server error summary: Delete an endpoint exception list item tags: - - Security Solution Endpoint Exceptions API + - Security Endpoint Exceptions API get: description: >- Get the details of an endpoint exception list item using the `id` or @@ -10568,14 +10517,14 @@ paths: required: false schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemId + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemId - description: Either `id` or `item_id` must be specified in: query name: item_id required: false schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemHumanId + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemHumanId responses: '200': content: @@ -10583,7 +10532,7 @@ paths: schema: items: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_EndpointListItem + #/components/schemas/Security_Endpoint_Exceptions_API_EndpointListItem type: array description: Successful response '400': @@ -10592,41 +10541,41 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_SiemErrorResponse description: Invalid input data '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_PlatformErrorResponse description: Unsuccessful authentication '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_PlatformErrorResponse description: Insufficient privileges '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_SiemErrorResponse description: Endpoint list item not found '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_SiemErrorResponse description: Internal server error summary: Get an endpoint exception list item tags: - - Security Solution Endpoint Exceptions API + - Security Endpoint Exceptions API post: description: >- Create an endpoint exception list item, and associate it with the @@ -10640,34 +10589,34 @@ paths: properties: comments: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemCommentArray + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemCommentArray default: [] description: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemDescription + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemDescription entries: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryArray + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemEntryArray item_id: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemHumanId + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemHumanId meta: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemMeta + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemMeta name: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemName + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemName os_types: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemOsTypeArray + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemOsTypeArray default: [] tags: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemTags + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemTags default: [] type: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemType + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemType required: - type - name @@ -10681,7 +10630,7 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_EndpointListItem + #/components/schemas/Security_Endpoint_Exceptions_API_EndpointListItem description: Successful response '400': content: @@ -10689,41 +10638,41 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_SiemErrorResponse description: Invalid input data '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_PlatformErrorResponse description: Unsuccessful authentication '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_PlatformErrorResponse description: Insufficient privileges '409': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_SiemErrorResponse description: Endpoint list item already exists '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_SiemErrorResponse description: Internal server error summary: Create an endpoint exception list item tags: - - Security Solution Endpoint Exceptions API + - Security Endpoint Exceptions API put: description: >- Update an endpoint exception list item using the `id` or `item_id` @@ -10739,38 +10688,38 @@ paths: type: string comments: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemCommentArray + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemCommentArray default: [] description: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemDescription + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemDescription entries: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryArray + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemEntryArray id: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemId + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemId description: Either `id` or `item_id` must be specified item_id: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemHumanId + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemHumanId description: Either `id` or `item_id` must be specified meta: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemMeta + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemMeta name: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemName + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemName os_types: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemOsTypeArray + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemOsTypeArray default: [] tags: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemTags + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemTags type: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemType + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemType required: - type - name @@ -10784,7 +10733,7 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_EndpointListItem + #/components/schemas/Security_Endpoint_Exceptions_API_EndpointListItem description: Successful response '400': content: @@ -10792,41 +10741,41 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_SiemErrorResponse description: Invalid input data '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_PlatformErrorResponse description: Unsuccessful authentication '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_PlatformErrorResponse description: Insufficient privileges '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_SiemErrorResponse description: Endpoint list item not found '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_SiemErrorResponse description: Internal server error summary: Update an endpoint exception list item tags: - - Security Solution Endpoint Exceptions API + - Security Endpoint Exceptions API /api/endpoint_list/items/_find: get: description: Get a list of all endpoint exception list items. @@ -10842,7 +10791,7 @@ paths: required: false schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_FindEndpointListItemsFilter + #/components/schemas/Security_Endpoint_Exceptions_API_FindEndpointListItemsFilter - description: The page number to return in: query name: page @@ -10863,7 +10812,7 @@ paths: required: false schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString + #/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString - description: Determines the sort order, which can be `desc` or `asc` in: query name: sort_order @@ -10883,7 +10832,7 @@ paths: data: items: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_EndpointListItem + #/components/schemas/Security_Endpoint_Exceptions_API_EndpointListItem type: array page: minimum: 0 @@ -10908,41 +10857,41 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_SiemErrorResponse description: Invalid input data '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_PlatformErrorResponse description: Unsuccessful authentication '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_PlatformErrorResponse description: Insufficient privileges '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_SiemErrorResponse description: Endpoint list not found '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Endpoint_Exceptions_API_SiemErrorResponse description: Internal server error summary: Get endpoint exception list items tags: - - Security Solution Endpoint Exceptions API + - Security Endpoint Exceptions API /api/endpoint/action: get: description: Get a list of all response actions. @@ -10953,18 +10902,18 @@ paths: required: true schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_GetEndpointActionListRouteQuery + #/components/schemas/Security_Endpoint_Management_API_GetEndpointActionListRouteQuery responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse + #/components/schemas/Security_Endpoint_Management_API_SuccessResponse description: OK summary: Get response actions tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action_log/{agent_id}: get: deprecated: true @@ -10975,25 +10924,24 @@ paths: name: agent_id required: true schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentId + $ref: '#/components/schemas/Security_Endpoint_Management_API_AgentId' - in: query name: query required: true schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_ActionLogRequestQuery + #/components/schemas/Security_Endpoint_Management_API_ActionLogRequestQuery responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse + #/components/schemas/Security_Endpoint_Management_API_SuccessResponse description: OK summary: Get an action request log tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action_status: get: description: Get the status of response actions for the specified agent IDs. @@ -11006,19 +10954,18 @@ paths: type: object properties: agent_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentIds + $ref: '#/components/schemas/Security_Endpoint_Management_API_AgentIds' responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_ActionStatusSuccessResponse + #/components/schemas/Security_Endpoint_Management_API_ActionStatusSuccessResponse description: OK summary: Get response actions status tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action/{action_id}: get: description: Get the details of a response action using the action ID. @@ -11035,11 +10982,11 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse + #/components/schemas/Security_Endpoint_Management_API_SuccessResponse description: OK summary: Get action details tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action/{action_id}/file/{file_id}: get: description: Get information for the specified file using the file ID. @@ -11061,11 +11008,11 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse + #/components/schemas/Security_Endpoint_Management_API_SuccessResponse description: OK summary: Get file information tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action/{action_id}/file/{file_id}/download: get: description: Download a file from an endpoint. @@ -11087,11 +11034,11 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse + #/components/schemas/Security_Endpoint_Management_API_SuccessResponse description: OK summary: Download a file tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action/execute: post: description: Run a shell command on an endpoint. @@ -11101,7 +11048,7 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_ExecuteRouteRequestBody + #/components/schemas/Security_Endpoint_Management_API_ExecuteRouteRequestBody required: true responses: '200': @@ -11109,11 +11056,11 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse + #/components/schemas/Security_Endpoint_Management_API_SuccessResponse description: OK summary: Run a command tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action/get_file: post: description: Get a file from an endpoint. @@ -11123,7 +11070,7 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_GetFileRouteRequestBody + #/components/schemas/Security_Endpoint_Management_API_GetFileRouteRequestBody required: true responses: '200': @@ -11131,11 +11078,11 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse + #/components/schemas/Security_Endpoint_Management_API_SuccessResponse description: OK summary: Get a file tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action/isolate: post: description: >- @@ -11147,7 +11094,7 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_IsolateRouteRequestBody + #/components/schemas/Security_Endpoint_Management_API_IsolateRouteRequestBody required: true responses: '200': @@ -11155,11 +11102,11 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse + #/components/schemas/Security_Endpoint_Management_API_SuccessResponse description: OK summary: Isolate an endpoint tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action/kill_process: post: description: Terminate a running process on an endpoint. @@ -11169,7 +11116,7 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_KillProcessRouteRequestBody + #/components/schemas/Security_Endpoint_Management_API_KillProcessRouteRequestBody required: true responses: '200': @@ -11177,11 +11124,11 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse + #/components/schemas/Security_Endpoint_Management_API_SuccessResponse description: OK summary: Terminate a process tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action/running_procs: post: description: Get a list of all processes running on an endpoint. @@ -11191,7 +11138,7 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_GetProcessesRouteRequestBody + #/components/schemas/Security_Endpoint_Management_API_GetProcessesRouteRequestBody required: true responses: '200': @@ -11199,11 +11146,11 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse + #/components/schemas/Security_Endpoint_Management_API_SuccessResponse description: OK summary: Get running processes tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action/scan: post: description: Scan a specific file or directory on an endpoint for malware. @@ -11213,7 +11160,7 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_ScanRouteRequestBody + #/components/schemas/Security_Endpoint_Management_API_ScanRouteRequestBody required: true responses: '200': @@ -11221,11 +11168,11 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse + #/components/schemas/Security_Endpoint_Management_API_SuccessResponse description: OK summary: Scan a file or directory tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action/state: get: description: >- @@ -11238,11 +11185,11 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_ActionStateSuccessResponse + #/components/schemas/Security_Endpoint_Management_API_ActionStateSuccessResponse description: OK summary: Get actions state tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action/suspend_process: post: description: Suspend a running process on an endpoint. @@ -11252,7 +11199,7 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuspendProcessRouteRequestBody + #/components/schemas/Security_Endpoint_Management_API_SuspendProcessRouteRequestBody required: true responses: '200': @@ -11260,11 +11207,11 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse + #/components/schemas/Security_Endpoint_Management_API_SuccessResponse description: OK summary: Suspend a process tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action/unisolate: post: description: Release an isolated endpoint, allowing it to rejoin a network. @@ -11274,7 +11221,7 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_UnisolateRouteRequestBody + #/components/schemas/Security_Endpoint_Management_API_UnisolateRouteRequestBody required: true responses: '200': @@ -11282,11 +11229,11 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse + #/components/schemas/Security_Endpoint_Management_API_SuccessResponse description: OK summary: Release an isolated endpoint tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action/upload: post: description: Upload a file to an endpoint. @@ -11296,7 +11243,7 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_UploadRouteRequestBody + #/components/schemas/Security_Endpoint_Management_API_UploadRouteRequestBody required: true responses: '200': @@ -11304,11 +11251,11 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse + #/components/schemas/Security_Endpoint_Management_API_SuccessResponse description: OK summary: Upload a file tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/isolate: post: deprecated: true @@ -11328,22 +11275,22 @@ paths: properties: agent_type: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentTypes + #/components/schemas/Security_Endpoint_Management_API_AgentTypes alert_ids: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AlertIds + #/components/schemas/Security_Endpoint_Management_API_AlertIds case_ids: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_CaseIds + #/components/schemas/Security_Endpoint_Management_API_CaseIds comment: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Comment + #/components/schemas/Security_Endpoint_Management_API_Comment endpoint_ids: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_EndpointIds + #/components/schemas/Security_Endpoint_Management_API_EndpointIds parameters: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Parameters + #/components/schemas/Security_Endpoint_Management_API_Parameters required: - endpoint_ids required: true @@ -11353,7 +11300,7 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse + #/components/schemas/Security_Endpoint_Management_API_SuccessResponse description: OK '308': description: Permanent Redirect @@ -11365,7 +11312,7 @@ paths: type: string summary: Isolate an endpoint tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/metadata: get: operationId: GetEndpointMetadataList @@ -11375,18 +11322,18 @@ paths: required: true schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_ListRequestQuery + #/components/schemas/Security_Endpoint_Management_API_ListRequestQuery responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse + #/components/schemas/Security_Endpoint_Management_API_SuccessResponse description: OK summary: Get a metadata list tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/metadata/{id}: get: operationId: GetEndpointMetadata @@ -11402,11 +11349,11 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse + #/components/schemas/Security_Endpoint_Management_API_SuccessResponse description: OK summary: Get metadata tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/metadata/transforms: get: operationId: GetEndpointMetadataTransform @@ -11416,11 +11363,11 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse + #/components/schemas/Security_Endpoint_Management_API_SuccessResponse description: OK summary: Get metadata transforms tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/policy_response: get: operationId: GetPolicyResponse @@ -11432,19 +11379,18 @@ paths: type: object properties: agentId: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentId + $ref: '#/components/schemas/Security_Endpoint_Management_API_AgentId' responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse + #/components/schemas/Security_Endpoint_Management_API_SuccessResponse description: OK summary: Get a policy response tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/policy/summaries: get: deprecated: true @@ -11467,11 +11413,11 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse + #/components/schemas/Security_Endpoint_Management_API_SuccessResponse description: OK summary: Get an agent policy summary tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/protection_updates_note/{package_policy_id}: get: operationId: GetProtectionUpdatesNote @@ -11487,11 +11433,11 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_ProtectionUpdatesNoteResponse + #/components/schemas/Security_Endpoint_Management_API_ProtectionUpdatesNoteResponse description: OK summary: Get a protection updates note tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API post: operationId: CreateUpdateProtectionUpdatesNote parameters: @@ -11515,11 +11461,11 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_ProtectionUpdatesNoteResponse + #/components/schemas/Security_Endpoint_Management_API_ProtectionUpdatesNoteResponse description: OK summary: Create or update a protection updates note tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/suggestions/{suggestion_type}: post: operationId: GetEndpointSuggestions @@ -11552,11 +11498,11 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse + #/components/schemas/Security_Endpoint_Management_API_SuccessResponse description: OK summary: Get suggestions tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/unisolate: post: deprecated: true @@ -11576,22 +11522,22 @@ paths: properties: agent_type: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentTypes + #/components/schemas/Security_Endpoint_Management_API_AgentTypes alert_ids: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AlertIds + #/components/schemas/Security_Endpoint_Management_API_AlertIds case_ids: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_CaseIds + #/components/schemas/Security_Endpoint_Management_API_CaseIds comment: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Comment + #/components/schemas/Security_Endpoint_Management_API_Comment endpoint_ids: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_EndpointIds + #/components/schemas/Security_Endpoint_Management_API_EndpointIds parameters: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Parameters + #/components/schemas/Security_Endpoint_Management_API_Parameters required: - endpoint_ids required: true @@ -11601,7 +11547,7 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse + #/components/schemas/Security_Endpoint_Management_API_SuccessResponse description: OK '308': description: Permanent Redirect @@ -11613,10 +11559,10 @@ paths: type: string summary: Release an isolated endpoint tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/entity_store/engines: get: - operationId: ListEntityStoreEngines + operationId: ListEntityEngines responses: '200': content: @@ -11629,23 +11575,22 @@ paths: engines: items: $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_EngineDescriptor + #/components/schemas/Security_Entity_Analytics_API_EngineDescriptor type: array description: Successful response - summary: List the Entity Store engines + summary: List the Entity Engines tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API /api/entity_store/engines/{entityType}: delete: - operationId: DeleteEntityStore + operationId: DeleteEntityEngine parameters: - - description: The entity type of the store (either 'user' or 'host'). + - description: The entity type of the engine (either 'user' or 'host'). in: path name: entityType required: true schema: - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_EntityType + $ref: '#/components/schemas/Security_Entity_Analytics_API_EntityType' - description: Control flag to also delete the entity data. in: query name: data @@ -11662,41 +11607,39 @@ paths: deleted: type: boolean description: Successful response - summary: Delete the Entity Store engine + summary: Delete the Entity Engine tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API get: - operationId: GetEntityStoreEngine + operationId: GetEntityEngine parameters: - - description: The entity type of the store (either 'user' or 'host'). + - description: The entity type of the engine (either 'user' or 'host'). in: path name: entityType required: true schema: - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_EntityType + $ref: '#/components/schemas/Security_Entity_Analytics_API_EntityType' responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_EngineDescriptor + #/components/schemas/Security_Entity_Analytics_API_EngineDescriptor description: Successful response - summary: Get the Entity Store engine + summary: Get an Entity Engine tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API /api/entity_store/engines/{entityType}/init: post: - operationId: InitEntityStore + operationId: InitEntityEngine parameters: - - description: The entity type of the store (either 'user' or 'host'). + - description: The entity type of the engine (either 'user' or 'host'). in: path name: entityType required: true schema: - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_EntityType + $ref: '#/components/schemas/Security_Entity_Analytics_API_EntityType' requestBody: content: application/json; Elastic-Api-Version=2023-10-31: @@ -11707,7 +11650,7 @@ paths: type: string indexPattern: $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_IndexPattern + #/components/schemas/Security_Entity_Analytics_API_IndexPattern description: Schema for the engine initialization required: true responses: @@ -11716,22 +11659,21 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_EngineDescriptor + #/components/schemas/Security_Entity_Analytics_API_EngineDescriptor description: Successful response - summary: Initialize the Entity Store + summary: Initialize an Entity Engine tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API /api/entity_store/engines/{entityType}/start: post: - operationId: StartEntityStore + operationId: StartEntityEngine parameters: - - description: The entity type of the store (either 'user' or 'host'). + - description: The entity type of the engine (either 'user' or 'host'). in: path name: entityType required: true schema: - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_EntityType + $ref: '#/components/schemas/Security_Entity_Analytics_API_EntityType' responses: '200': content: @@ -11742,20 +11684,19 @@ paths: started: type: boolean description: Successful response - summary: Start the Entity Store engine + summary: Start an Entity Engine tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API /api/entity_store/engines/{entityType}/stats: post: - operationId: GetEntityStoreStats + operationId: GetEntityEngineStats parameters: - - description: The entity type of the store (either 'user' or 'host'). + - description: The entity type of the engine (either 'user' or 'host'). in: path name: entityType required: true schema: - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_EntityType + $ref: '#/components/schemas/Security_Entity_Analytics_API_EntityType' responses: '200': content: @@ -11765,36 +11706,35 @@ paths: properties: indexPattern: $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_IndexPattern + #/components/schemas/Security_Entity_Analytics_API_IndexPattern indices: items: type: object type: array status: $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_EngineStatus + #/components/schemas/Security_Entity_Analytics_API_EngineStatus transforms: items: type: object type: array type: $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_EntityType + #/components/schemas/Security_Entity_Analytics_API_EntityType description: Successful response - summary: Get the Entity Store engine stats + summary: Get Entity Engine stats tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API /api/entity_store/engines/{entityType}/stop: post: - operationId: StopEntityStore + operationId: StopEntityEngine parameters: - - description: The entity type of the store (either 'user' or 'host'). + - description: The entity type of the engine (either 'user' or 'host'). in: path name: entityType required: true schema: - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_EntityType + $ref: '#/components/schemas/Security_Entity_Analytics_API_EntityType' responses: '200': content: @@ -11805,9 +11745,9 @@ paths: stopped: type: boolean description: Successful response - summary: Stop the Entity Store engine + summary: Stop an Entity Engine tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API /api/entity_store/entities/list: get: description: List entities records, paging, sorting and filtering as needed. @@ -11850,8 +11790,7 @@ paths: required: true schema: items: - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_EntityType + $ref: '#/components/schemas/Security_Entity_Analytics_API_EntityType' type: array responses: '200': @@ -11862,7 +11801,7 @@ paths: properties: inspect: $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_InspectQuery + #/components/schemas/Security_Entity_Analytics_API_InspectQuery page: minimum: 1 type: integer @@ -11873,7 +11812,7 @@ paths: records: items: $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_Entity + #/components/schemas/Security_Entity_Analytics_API_Entity type: array total: minimum: 0 @@ -11886,7 +11825,7 @@ paths: description: Entities returned successfully summary: List Entity Store Entities tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API /api/exception_lists: delete: description: Delete an exception list using the `id` or `list_id` field. @@ -11897,29 +11836,26 @@ paths: name: id required: false schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListId + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListId' - description: Either `id` or `list_id` must be specified in: query name: list_id required: false schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListHumanId + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListHumanId' - in: query name: namespace_type required: false schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType + #/components/schemas/Security_Exceptions_API_ExceptionNamespaceType default: single responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionList + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionList' description: Successful response '400': content: @@ -11927,41 +11863,39 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Exceptions_API_SiemErrorResponse description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Exception list not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response summary: Delete an exception list tags: - - Security Solution Exceptions API + - Security Exceptions API get: description: Get the details of an exception list using the `id` or `list_id` field. operationId: ReadExceptionList @@ -11971,29 +11905,26 @@ paths: name: id required: false schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListId + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListId' - description: Either `id` or `list_id` must be specified in: query name: list_id required: false schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListHumanId + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListHumanId' - in: query name: namespace_type required: false schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType + #/components/schemas/Security_Exceptions_API_ExceptionNamespaceType default: single responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionList + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionList' description: Successful response '400': content: @@ -12001,41 +11932,39 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Exceptions_API_SiemErrorResponse description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Exception list item not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response summary: Get exception list details tags: - - Security Solution Exceptions API + - Security Exceptions API post: description: > An exception list groups exception items and can be associated with @@ -12059,33 +11988,33 @@ paths: properties: description: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListDescription + #/components/schemas/Security_Exceptions_API_ExceptionListDescription list_id: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListHumanId + #/components/schemas/Security_Exceptions_API_ExceptionListHumanId meta: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListMeta + #/components/schemas/Security_Exceptions_API_ExceptionListMeta name: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListName + #/components/schemas/Security_Exceptions_API_ExceptionListName namespace_type: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType + #/components/schemas/Security_Exceptions_API_ExceptionNamespaceType default: single os_types: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListOsTypeArray + #/components/schemas/Security_Exceptions_API_ExceptionListOsTypeArray tags: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListTags + #/components/schemas/Security_Exceptions_API_ExceptionListTags default: [] type: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListType + #/components/schemas/Security_Exceptions_API_ExceptionListType version: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListVersion + #/components/schemas/Security_Exceptions_API_ExceptionListVersion default: 1 required: - name @@ -12098,8 +12027,7 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionList + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionList' description: Successful response '400': content: @@ -12107,41 +12035,39 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Exceptions_API_SiemErrorResponse description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Not enough privileges response '409': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Exception list already exists response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response summary: Create an exception list tags: - - Security Solution Exceptions API + - Security Exceptions API put: description: Update an exception list using the `id` or `list_id` field. operationId: UpdateExceptionList @@ -12155,36 +12081,35 @@ paths: type: string description: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListDescription + #/components/schemas/Security_Exceptions_API_ExceptionListDescription id: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListId + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListId' list_id: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListHumanId + #/components/schemas/Security_Exceptions_API_ExceptionListHumanId meta: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListMeta + #/components/schemas/Security_Exceptions_API_ExceptionListMeta name: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListName + #/components/schemas/Security_Exceptions_API_ExceptionListName namespace_type: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType + #/components/schemas/Security_Exceptions_API_ExceptionNamespaceType default: single os_types: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListOsTypeArray + #/components/schemas/Security_Exceptions_API_ExceptionListOsTypeArray default: [] tags: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListTags + #/components/schemas/Security_Exceptions_API_ExceptionListTags type: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListType + #/components/schemas/Security_Exceptions_API_ExceptionListType version: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListVersion + #/components/schemas/Security_Exceptions_API_ExceptionListVersion required: - name - description @@ -12196,8 +12121,7 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionList + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionList' description: Successful response '400': content: @@ -12205,41 +12129,39 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Exceptions_API_SiemErrorResponse description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Exception list not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response summary: Update an exception list tags: - - Security Solution Exceptions API + - Security Exceptions API /api/exception_lists/_duplicate: post: description: Duplicate an existing exception list. @@ -12250,14 +12172,13 @@ paths: name: list_id required: true schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListHumanId + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListHumanId' - in: query name: namespace_type required: true schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType + #/components/schemas/Security_Exceptions_API_ExceptionNamespaceType - description: >- Determines whether to include expired exceptions in the exported list @@ -12275,8 +12196,7 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionList + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionList' description: Successful response '400': content: @@ -12284,41 +12204,39 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Exceptions_API_SiemErrorResponse description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Not enough privileges response '405': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Exception list to duplicate not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response summary: Duplicate an exception list tags: - - Security Solution Exceptions API + - Security Exceptions API /api/exception_lists/_export: post: description: Export an exception list and its associated items to an NDJSON file. @@ -12329,21 +12247,19 @@ paths: name: id required: true schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListId + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListId' - description: Exception list's human identifier in: query name: list_id required: true schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListHumanId + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListHumanId' - in: query name: namespace_type required: true schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType + #/components/schemas/Security_Exceptions_API_ExceptionNamespaceType - description: >- Determines whether to include expired exceptions in the exported list @@ -12373,41 +12289,39 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Exceptions_API_SiemErrorResponse description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Exception list not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response summary: Export an exception list tags: - - Security Solution Exceptions API + - Security Exceptions API /api/exception_lists/_find: get: description: Get a list of all exception lists. @@ -12431,7 +12345,7 @@ paths: required: false schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_FindExceptionListsFilter + #/components/schemas/Security_Exceptions_API_FindExceptionListsFilter - description: > Determines whether the returned containers are Kibana associated with a Kibana space @@ -12445,7 +12359,7 @@ paths: - single items: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType + #/components/schemas/Security_Exceptions_API_ExceptionNamespaceType type: array - description: The page number to return in: query @@ -12486,7 +12400,7 @@ paths: data: items: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionList + #/components/schemas/Security_Exceptions_API_ExceptionList type: array page: minimum: 1 @@ -12509,34 +12423,33 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Exceptions_API_SiemErrorResponse description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Not enough privileges response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response summary: Get exception lists tags: - - Security Solution Exceptions API + - Security Exceptions API /api/exception_lists/_import: post: description: Import an exception list and its associated items from an NDJSON file. @@ -12600,7 +12513,7 @@ paths: properties: errors: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListsImportBulkErrorArray + #/components/schemas/Security_Exceptions_API_ExceptionListsImportBulkErrorArray success: type: boolean success_count: @@ -12631,34 +12544,33 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Exceptions_API_SiemErrorResponse description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Not enough privileges response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response summary: Import an exception list tags: - - Security Solution Exceptions API + - Security Exceptions API /api/exception_lists/items: delete: description: Delete an exception list item using the `id` or `item_id` field. @@ -12669,29 +12581,27 @@ paths: name: id required: false schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemId + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemId' - description: Either `id` or `item_id` must be specified in: query name: item_id required: false schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemHumanId + #/components/schemas/Security_Exceptions_API_ExceptionListItemHumanId - in: query name: namespace_type required: false schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType + #/components/schemas/Security_Exceptions_API_ExceptionNamespaceType default: single responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItem + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItem' description: Successful response '400': content: @@ -12699,41 +12609,39 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Exceptions_API_SiemErrorResponse description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Exception list item not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response summary: Delete an exception list item tags: - - Security Solution Exceptions API + - Security Exceptions API get: description: >- Get the details of an exception list item using the `id` or `item_id` @@ -12745,29 +12653,27 @@ paths: name: id required: false schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemId + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemId' - description: Either `id` or `item_id` must be specified in: query name: item_id required: false schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemHumanId + #/components/schemas/Security_Exceptions_API_ExceptionListItemHumanId - in: query name: namespace_type required: false schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType + #/components/schemas/Security_Exceptions_API_ExceptionNamespaceType default: single responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItem + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItem' description: Successful response '400': content: @@ -12775,41 +12681,39 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Exceptions_API_SiemErrorResponse description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Exception list item not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response summary: Get an exception list item tags: - - Security Solution Exceptions API + - Security Exceptions API post: description: > Create an exception item and associate it with the specified exception @@ -12827,44 +12731,44 @@ paths: properties: comments: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_CreateExceptionListItemCommentArray + #/components/schemas/Security_Exceptions_API_CreateExceptionListItemCommentArray default: [] description: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemDescription + #/components/schemas/Security_Exceptions_API_ExceptionListItemDescription entries: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryArray + #/components/schemas/Security_Exceptions_API_ExceptionListItemEntryArray expire_time: format: date-time type: string item_id: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemHumanId + #/components/schemas/Security_Exceptions_API_ExceptionListItemHumanId list_id: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListHumanId + #/components/schemas/Security_Exceptions_API_ExceptionListHumanId meta: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemMeta + #/components/schemas/Security_Exceptions_API_ExceptionListItemMeta name: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemName + #/components/schemas/Security_Exceptions_API_ExceptionListItemName namespace_type: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType + #/components/schemas/Security_Exceptions_API_ExceptionNamespaceType default: single os_types: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemOsTypeArray + #/components/schemas/Security_Exceptions_API_ExceptionListItemOsTypeArray default: [] tags: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemTags + #/components/schemas/Security_Exceptions_API_ExceptionListItemTags default: [] type: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemType + #/components/schemas/Security_Exceptions_API_ExceptionListItemType required: - list_id - type @@ -12878,8 +12782,7 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItem + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItem' description: Successful response '400': content: @@ -12887,41 +12790,39 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Exceptions_API_SiemErrorResponse description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Not enough privileges response '409': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Exception list item already exists response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response summary: Create an exception list item tags: - - Security Solution Exceptions API + - Security Exceptions API put: description: Update an exception list item using the `id` or `item_id` field. operationId: UpdateExceptionListItem @@ -12935,48 +12836,48 @@ paths: type: string comments: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_UpdateExceptionListItemCommentArray + #/components/schemas/Security_Exceptions_API_UpdateExceptionListItemCommentArray default: [] description: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemDescription + #/components/schemas/Security_Exceptions_API_ExceptionListItemDescription entries: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryArray + #/components/schemas/Security_Exceptions_API_ExceptionListItemEntryArray expire_time: format: date-time type: string id: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemId + #/components/schemas/Security_Exceptions_API_ExceptionListItemId description: Either `id` or `item_id` must be specified item_id: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemHumanId + #/components/schemas/Security_Exceptions_API_ExceptionListItemHumanId description: Either `id` or `item_id` must be specified list_id: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListHumanId + #/components/schemas/Security_Exceptions_API_ExceptionListHumanId meta: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemMeta + #/components/schemas/Security_Exceptions_API_ExceptionListItemMeta name: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemName + #/components/schemas/Security_Exceptions_API_ExceptionListItemName namespace_type: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType + #/components/schemas/Security_Exceptions_API_ExceptionNamespaceType default: single os_types: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemOsTypeArray + #/components/schemas/Security_Exceptions_API_ExceptionListItemOsTypeArray default: [] tags: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemTags + #/components/schemas/Security_Exceptions_API_ExceptionListItemTags type: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemType + #/components/schemas/Security_Exceptions_API_ExceptionListItemType required: - type - name @@ -12989,8 +12890,7 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItem + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItem' description: Successful response '400': content: @@ -12998,41 +12898,39 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Exceptions_API_SiemErrorResponse description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Exception list item not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response summary: Update an exception list item tags: - - Security Solution Exceptions API + - Security Exceptions API /api/exception_lists/items/_find: get: description: Get a list of all exception list items in the specified list. @@ -13045,7 +12943,7 @@ paths: schema: items: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListHumanId + #/components/schemas/Security_Exceptions_API_ExceptionListHumanId type: array - description: > Filters the returned results according to the value of the specified @@ -13059,7 +12957,7 @@ paths: default: [] items: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_FindExceptionListItemsFilter + #/components/schemas/Security_Exceptions_API_FindExceptionListItemsFilter type: array - description: > Determines whether the returned containers are Kibana associated @@ -13074,7 +12972,7 @@ paths: - single items: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType + #/components/schemas/Security_Exceptions_API_ExceptionNamespaceType type: array - in: query name: search @@ -13100,8 +12998,7 @@ paths: name: sort_field required: false schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_NonEmptyString + $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' - description: Determines the sort order, which can be `desc` or `asc` in: query name: sort_order @@ -13121,7 +13018,7 @@ paths: data: items: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItem + #/components/schemas/Security_Exceptions_API_ExceptionListItem type: array page: minimum: 1 @@ -13146,41 +13043,39 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Exceptions_API_SiemErrorResponse description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Exception list not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response summary: Get exception list items tags: - - Security Solution Exceptions API + - Security Exceptions API /api/exception_lists/summary: get: description: Get a summary of the specified exception list. @@ -13191,21 +13086,19 @@ paths: name: id required: false schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListId + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListId' - description: Exception list's human readable identifier in: query name: list_id required: false schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListHumanId + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListHumanId' - in: query name: namespace_type required: false schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType + #/components/schemas/Security_Exceptions_API_ExceptionNamespaceType default: single - description: Search filter clause in: query @@ -13239,41 +13132,39 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Exceptions_API_SiemErrorResponse description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Exception list not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response summary: Get an exception list summary tags: - - Security Solution Exceptions API + - Security Exceptions API /api/exceptions/shared: post: description: > @@ -13298,10 +13189,10 @@ paths: properties: description: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListDescription + #/components/schemas/Security_Exceptions_API_ExceptionListDescription name: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListName + #/components/schemas/Security_Exceptions_API_ExceptionListName required: - name - description @@ -13311,8 +13202,7 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionList + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionList' description: Successful response '400': content: @@ -13320,41 +13210,39 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + #/components/schemas/Security_Exceptions_API_SiemErrorResponse description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse + #/components/schemas/Security_Exceptions_API_PlatformErrorResponse description: Not enough privileges response '409': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Exception list already exists response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response summary: Create a shared exception list tags: - - Security Solution Exceptions API + - Security Exceptions API /api/fleet/agent_download_sources: get: operationId: get-download-sources @@ -17065,7 +16953,7 @@ paths: name: id required: true schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' + $ref: '#/components/schemas/Security_Lists_API_ListId' - in: query name: deleteReferences required: false @@ -17083,7 +16971,7 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_List' + $ref: '#/components/schemas/Security_Lists_API_List' description: Successful response '400': content: @@ -17091,41 +16979,36 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + #/components/schemas/Security_Lists_API_PlatformErrorResponse + - $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: List not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response summary: Delete a list tags: - - Security Solution Lists API + - Security Lists API get: description: Get the details of a list using the list ID. operationId: ReadList @@ -17135,13 +17018,13 @@ paths: name: id required: true schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' + $ref: '#/components/schemas/Security_Lists_API_ListId' responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_List' + $ref: '#/components/schemas/Security_Lists_API_List' description: Successful response '400': content: @@ -17149,41 +17032,36 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + #/components/schemas/Security_Lists_API_PlatformErrorResponse + - $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: List not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response summary: Get list details tags: - - Security Solution Lists API + - Security Lists API patch: description: Update specific fields of an existing list using the list ID. operationId: PatchList @@ -17196,15 +17074,13 @@ paths: _version: type: string description: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListDescription + $ref: '#/components/schemas/Security_Lists_API_ListDescription' id: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' + $ref: '#/components/schemas/Security_Lists_API_ListId' meta: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListMetadata + $ref: '#/components/schemas/Security_Lists_API_ListMetadata' name: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListName' + $ref: '#/components/schemas/Security_Lists_API_ListName' version: minimum: 1 type: integer @@ -17217,7 +17093,7 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_List' + $ref: '#/components/schemas/Security_Lists_API_List' description: Successful response '400': content: @@ -17225,41 +17101,36 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + #/components/schemas/Security_Lists_API_PlatformErrorResponse + - $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: List not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response summary: Patch a list tags: - - Security Solution Lists API + - Security Lists API post: description: Create a new list. operationId: CreateList @@ -17270,21 +17141,19 @@ paths: type: object properties: description: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListDescription + $ref: '#/components/schemas/Security_Lists_API_ListDescription' deserializer: type: string id: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' + $ref: '#/components/schemas/Security_Lists_API_ListId' meta: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListMetadata + $ref: '#/components/schemas/Security_Lists_API_ListMetadata' name: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListName' + $ref: '#/components/schemas/Security_Lists_API_ListName' serializer: type: string type: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListType' + $ref: '#/components/schemas/Security_Lists_API_ListType' version: default: 1 minimum: 1 @@ -17300,7 +17169,7 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_List' + $ref: '#/components/schemas/Security_Lists_API_List' description: Successful response '400': content: @@ -17308,41 +17177,36 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + #/components/schemas/Security_Lists_API_PlatformErrorResponse + - $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '409': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: List already exists response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response summary: Create a list tags: - - Security Solution Lists API + - Security Lists API put: description: > Update a list using the list ID. The original list is replaced, and all @@ -17361,15 +17225,13 @@ paths: _version: type: string description: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListDescription + $ref: '#/components/schemas/Security_Lists_API_ListDescription' id: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' + $ref: '#/components/schemas/Security_Lists_API_ListId' meta: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListMetadata + $ref: '#/components/schemas/Security_Lists_API_ListMetadata' name: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListName' + $ref: '#/components/schemas/Security_Lists_API_ListName' version: minimum: 1 type: integer @@ -17384,7 +17246,7 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_List' + $ref: '#/components/schemas/Security_Lists_API_List' description: Successful response '400': content: @@ -17392,41 +17254,36 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + #/components/schemas/Security_Lists_API_PlatformErrorResponse + - $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: List not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response summary: Update a list tags: - - Security Solution Lists API + - Security Lists API /api/lists/_find: get: description: >- @@ -17451,7 +17308,7 @@ paths: name: sort_field required: false schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_NonEmptyString' + $ref: '#/components/schemas/Security_Lists_API_NonEmptyString' - description: Determines the sort order, which can be `desc` or `asc` in: query name: sort_order @@ -17474,7 +17331,7 @@ paths: name: cursor required: false schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_FindListsCursor' + $ref: '#/components/schemas/Security_Lists_API_FindListsCursor' - description: > Filters the returned results according to the value of the specified field, @@ -17484,7 +17341,7 @@ paths: name: filter required: false schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_FindListsFilter' + $ref: '#/components/schemas/Security_Lists_API_FindListsFilter' responses: '200': content: @@ -17493,11 +17350,10 @@ paths: type: object properties: cursor: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_FindListsCursor + $ref: '#/components/schemas/Security_Lists_API_FindListsCursor' data: items: - $ref: '#/components/schemas/Security_Solution_Lists_API_List' + $ref: '#/components/schemas/Security_Lists_API_List' type: array page: minimum: 0 @@ -17521,34 +17377,30 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + #/components/schemas/Security_Lists_API_PlatformErrorResponse + - $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response summary: Get lists tags: - - Security Solution Lists API + - Security Lists API /api/lists/index: delete: description: Delete the `.lists` and `.items` data streams. @@ -17571,41 +17423,36 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + #/components/schemas/Security_Lists_API_PlatformErrorResponse + - $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: List data stream not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response summary: Delete list data streams tags: - - Security Solution Lists API + - Security Lists API get: description: Verify that `.lists` and `.items` data streams exist. operationId: ReadListIndex @@ -17630,41 +17477,36 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + #/components/schemas/Security_Lists_API_PlatformErrorResponse + - $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: List data stream(s) not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response summary: Get status of list data streams tags: - - Security Solution Lists API + - Security Lists API post: description: Create `.lists` and `.items` data streams in the relevant space. operationId: CreateListIndex @@ -17686,41 +17528,36 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + #/components/schemas/Security_Lists_API_PlatformErrorResponse + - $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '409': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: List data stream exists response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response summary: Create list data streams tags: - - Security Solution Lists API + - Security Lists API /api/lists/items: delete: description: Delete a list item using its `id`, or its `list_id` and `value` fields. @@ -17731,13 +17568,13 @@ paths: name: id required: false schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' + $ref: '#/components/schemas/Security_Lists_API_ListId' - description: Required if `id` is not specified in: query name: list_id required: false schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' + $ref: '#/components/schemas/Security_Lists_API_ListId' - description: Required if `id` is not specified in: query name: value @@ -17763,10 +17600,9 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: oneOf: - - $ref: '#/components/schemas/Security_Solution_Lists_API_ListItem' + - $ref: '#/components/schemas/Security_Lists_API_ListItem' - items: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListItem + $ref: '#/components/schemas/Security_Lists_API_ListItem' type: array description: Successful response '400': @@ -17775,41 +17611,36 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + #/components/schemas/Security_Lists_API_PlatformErrorResponse + - $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: List item not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response summary: Delete a list item tags: - - Security Solution Lists API + - Security Lists API get: description: Get the details of a list item. operationId: ReadListItem @@ -17819,13 +17650,13 @@ paths: name: id required: false schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' + $ref: '#/components/schemas/Security_Lists_API_ListId' - description: Required if `id` is not specified in: query name: list_id required: false schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' + $ref: '#/components/schemas/Security_Lists_API_ListId' - description: Required if `id` is not specified in: query name: value @@ -17838,10 +17669,9 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: oneOf: - - $ref: '#/components/schemas/Security_Solution_Lists_API_ListItem' + - $ref: '#/components/schemas/Security_Lists_API_ListItem' - items: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListItem + $ref: '#/components/schemas/Security_Lists_API_ListItem' type: array description: Successful response '400': @@ -17850,41 +17680,36 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + #/components/schemas/Security_Lists_API_PlatformErrorResponse + - $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: List item not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response summary: Get a list item tags: - - Security Solution Lists API + - Security Lists API patch: description: Update specific fields of an existing list item using the list item ID. operationId: PatchListItem @@ -17897,10 +17722,9 @@ paths: _version: type: string id: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListItemId' + $ref: '#/components/schemas/Security_Lists_API_ListItemId' meta: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListItemMetadata + $ref: '#/components/schemas/Security_Lists_API_ListItemMetadata' refresh: description: >- Determines when changes made by the request are made visible @@ -17911,8 +17735,7 @@ paths: - wait_for type: string value: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListItemValue + $ref: '#/components/schemas/Security_Lists_API_ListItemValue' required: - id description: List item's properties @@ -17922,7 +17745,7 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListItem' + $ref: '#/components/schemas/Security_Lists_API_ListItem' description: Successful response '400': content: @@ -17930,41 +17753,36 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + #/components/schemas/Security_Lists_API_PlatformErrorResponse + - $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: List item not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response summary: Patch a list item tags: - - Security Solution Lists API + - Security Lists API post: description: > Create a list item and associate it with the specified list. @@ -17984,12 +17802,11 @@ paths: type: object properties: id: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListItemId' + $ref: '#/components/schemas/Security_Lists_API_ListItemId' list_id: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' + $ref: '#/components/schemas/Security_Lists_API_ListId' meta: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListItemMetadata + $ref: '#/components/schemas/Security_Lists_API_ListItemMetadata' refresh: description: >- Determines when changes made by the request are made visible @@ -18000,8 +17817,7 @@ paths: - wait_for type: string value: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListItemValue + $ref: '#/components/schemas/Security_Lists_API_ListItemValue' required: - list_id - value @@ -18012,7 +17828,7 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListItem' + $ref: '#/components/schemas/Security_Lists_API_ListItem' description: Successful response '400': content: @@ -18020,41 +17836,36 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + #/components/schemas/Security_Lists_API_PlatformErrorResponse + - $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '409': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: List item already exists response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response summary: Create a list item tags: - - Security Solution Lists API + - Security Lists API put: description: > Update a list item using the list item ID. The original list item is @@ -18073,13 +17884,11 @@ paths: _version: type: string id: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListItemId' + $ref: '#/components/schemas/Security_Lists_API_ListItemId' meta: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListItemMetadata + $ref: '#/components/schemas/Security_Lists_API_ListItemMetadata' value: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListItemValue + $ref: '#/components/schemas/Security_Lists_API_ListItemValue' required: - id - value @@ -18090,7 +17899,7 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListItem' + $ref: '#/components/schemas/Security_Lists_API_ListItem' description: Successful response '400': content: @@ -18098,41 +17907,36 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + #/components/schemas/Security_Lists_API_PlatformErrorResponse + - $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: List item not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response summary: Update a list item tags: - - Security Solution Lists API + - Security Lists API /api/lists/items/_export: post: description: Export list item values from the specified list. @@ -18143,7 +17947,7 @@ paths: name: list_id required: true schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' + $ref: '#/components/schemas/Security_Lists_API_ListId' responses: '200': content: @@ -18159,41 +17963,36 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + #/components/schemas/Security_Lists_API_PlatformErrorResponse + - $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: List not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response summary: Export list items tags: - - Security Solution Lists API + - Security Lists API /api/lists/items/_find: get: description: Get all list items in the specified list. @@ -18204,7 +18003,7 @@ paths: name: list_id required: true schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' + $ref: '#/components/schemas/Security_Lists_API_ListId' - description: The page number to return in: query name: page @@ -18222,7 +18021,7 @@ paths: name: sort_field required: false schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_NonEmptyString' + $ref: '#/components/schemas/Security_Lists_API_NonEmptyString' - description: Determines the sort order, which can be `desc` or `asc` in: query name: sort_order @@ -18245,8 +18044,7 @@ paths: name: cursor required: false schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_FindListItemsCursor + $ref: '#/components/schemas/Security_Lists_API_FindListItemsCursor' - description: > Filters the returned results according to the value of the specified field, @@ -18256,8 +18054,7 @@ paths: name: filter required: false schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_FindListItemsFilter + $ref: '#/components/schemas/Security_Lists_API_FindListItemsFilter' responses: '200': content: @@ -18267,11 +18064,10 @@ paths: properties: cursor: $ref: >- - #/components/schemas/Security_Solution_Lists_API_FindListItemsCursor + #/components/schemas/Security_Lists_API_FindListItemsCursor data: items: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListItem + $ref: '#/components/schemas/Security_Lists_API_ListItem' type: array page: minimum: 0 @@ -18295,34 +18091,30 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + #/components/schemas/Security_Lists_API_PlatformErrorResponse + - $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response summary: Get list items tags: - - Security Solution Lists API + - Security Lists API /api/lists/items/_import: post: description: > @@ -18341,7 +18133,7 @@ paths: name: list_id required: false schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' + $ref: '#/components/schemas/Security_Lists_API_ListId' - description: > Type of the importing list. @@ -18352,7 +18144,7 @@ paths: name: type required: false schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListType' + $ref: '#/components/schemas/Security_Lists_API_ListType' - in: query name: serializer required: false @@ -18393,7 +18185,7 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_List' + $ref: '#/components/schemas/Security_Lists_API_List' description: Successful response '400': content: @@ -18401,41 +18193,36 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + #/components/schemas/Security_Lists_API_PlatformErrorResponse + - $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '409': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: List with specified list_id does not exist response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response summary: Import list items tags: - - Security Solution Lists API + - Security Lists API /api/lists/privileges: get: operationId: ReadListPrivileges @@ -18449,11 +18236,9 @@ paths: is_authenticated: type: boolean listItems: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListItemPrivileges + $ref: '#/components/schemas/Security_Lists_API_ListItemPrivileges' lists: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListPrivileges + $ref: '#/components/schemas/Security_Lists_API_ListPrivileges' required: - lists - listItems @@ -18465,34 +18250,30 @@ paths: schema: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + #/components/schemas/Security_Lists_API_PlatformErrorResponse + - $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Invalid input data response '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse + $ref: '#/components/schemas/Security_Lists_API_PlatformErrorResponse' description: Not enough privileges response '500': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse + $ref: '#/components/schemas/Security_Lists_API_SiemErrorResponse' description: Internal server error response summary: Get list privileges tags: - - Security Solution Lists API + - Security Lists API /api/ml/saved_objects/sync: get: description: > @@ -18539,7 +18320,8 @@ paths: type: string required: - noteId - - type: object + - nullable: true + type: object properties: noteIds: items: @@ -18562,7 +18344,7 @@ paths: description: Indicates the note was successfully deleted. summary: Delete a note tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution get: description: Get all notes for a given document. @@ -18570,19 +18352,18 @@ paths: parameters: - in: query name: documentIds - required: true schema: - $ref: '#/components/schemas/Security_Solution_Timeline_API_DocumentIds' + $ref: '#/components/schemas/Security_Timeline_API_DocumentIds' - in: query name: page schema: nullable: true - type: number + type: string - in: query name: perPage schema: nullable: true - type: number + type: string - in: query name: search schema: @@ -18605,10 +18386,16 @@ paths: type: string responses: '200': + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + oneOf: + - $ref: '#/components/schemas/Security_Timeline_API_GetNotesResult' + - type: object description: Indicates the requested notes were returned. summary: Get notes tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution patch: description: Add a note to a Timeline or update an existing note. @@ -18629,7 +18416,7 @@ paths: nullable: true type: string note: - $ref: '#/components/schemas/Security_Solution_Timeline_API_BareNote' + $ref: '#/components/schemas/Security_Timeline_API_BareNote' noteId: nullable: true type: string @@ -18654,19 +18441,8 @@ paths: type: object properties: persistNote: - type: object - properties: - code: - type: number - message: - type: string - note: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_Note - required: - - code - - message - - note + $ref: >- + #/components/schemas/Security_Timeline_API_ResponseNote required: - persistNote required: @@ -18674,7 +18450,7 @@ paths: description: Indicates the note was successfully created. summary: Add or update a note tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution /api/osquery/live_queries: get: @@ -18686,18 +18462,18 @@ paths: required: true schema: $ref: >- - #/components/schemas/Security_Solution_Osquery_API_FindLiveQueryRequestQuery + #/components/schemas/Security_Osquery_API_FindLiveQueryRequestQuery responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse + #/components/schemas/Security_Osquery_API_DefaultSuccessResponse description: OK summary: Get live queries tags: - - Security Solution Osquery API + - Security Osquery API post: description: Create and run a live query. operationId: OsqueryCreateLiveQuery @@ -18706,7 +18482,7 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Osquery_API_CreateLiveQueryRequestBody + #/components/schemas/Security_Osquery_API_CreateLiveQueryRequestBody required: true responses: '200': @@ -18714,11 +18490,11 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse + #/components/schemas/Security_Osquery_API_DefaultSuccessResponse description: OK summary: Create a live query tags: - - Security Solution Osquery API + - Security Osquery API /api/osquery/live_queries/{id}: get: description: Get the details of a live query using the query ID. @@ -18728,7 +18504,7 @@ paths: name: id required: true schema: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Id' + $ref: '#/components/schemas/Security_Osquery_API_Id' - in: query name: query schema: @@ -18740,11 +18516,11 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse + #/components/schemas/Security_Osquery_API_DefaultSuccessResponse description: OK summary: Get live query details tags: - - Security Solution Osquery API + - Security Osquery API /api/osquery/live_queries/{id}/results/{actionId}: get: description: Get the results of a live query using the query action ID. @@ -18754,29 +18530,29 @@ paths: name: id required: true schema: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Id' + $ref: '#/components/schemas/Security_Osquery_API_Id' - in: path name: actionId required: true schema: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Id' + $ref: '#/components/schemas/Security_Osquery_API_Id' - in: query name: query required: true schema: $ref: >- - #/components/schemas/Security_Solution_Osquery_API_GetLiveQueryResultsRequestQuery + #/components/schemas/Security_Osquery_API_GetLiveQueryResultsRequestQuery responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse + #/components/schemas/Security_Osquery_API_DefaultSuccessResponse description: OK summary: Get live query results tags: - - Security Solution Osquery API + - Security Osquery API /api/osquery/packs: get: description: Get a list of all query packs. @@ -18786,19 +18562,18 @@ paths: name: query required: true schema: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_FindPacksRequestQuery + $ref: '#/components/schemas/Security_Osquery_API_FindPacksRequestQuery' responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse + #/components/schemas/Security_Osquery_API_DefaultSuccessResponse description: OK summary: Get packs tags: - - Security Solution Osquery API + - Security Osquery API post: description: Create a query pack. operationId: OsqueryCreatePacks @@ -18806,8 +18581,7 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_CreatePacksRequestBody + $ref: '#/components/schemas/Security_Osquery_API_CreatePacksRequestBody' required: true responses: '200': @@ -18815,11 +18589,11 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse + #/components/schemas/Security_Osquery_API_DefaultSuccessResponse description: OK summary: Create a pack tags: - - Security Solution Osquery API + - Security Osquery API /api/osquery/packs/{id}: delete: description: Delete a query pack using the pack ID. @@ -18829,18 +18603,18 @@ paths: name: id required: true schema: - $ref: '#/components/schemas/Security_Solution_Osquery_API_PackId' + $ref: '#/components/schemas/Security_Osquery_API_PackId' responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse + #/components/schemas/Security_Osquery_API_DefaultSuccessResponse description: OK summary: Delete a pack tags: - - Security Solution Osquery API + - Security Osquery API get: description: Get the details of a query pack using the pack ID. operationId: OsqueryGetPacksDetails @@ -18849,18 +18623,18 @@ paths: name: id required: true schema: - $ref: '#/components/schemas/Security_Solution_Osquery_API_PackId' + $ref: '#/components/schemas/Security_Osquery_API_PackId' responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse + #/components/schemas/Security_Osquery_API_DefaultSuccessResponse description: OK summary: Get pack details tags: - - Security Solution Osquery API + - Security Osquery API put: description: | Update a query pack using the pack ID. @@ -18872,13 +18646,12 @@ paths: name: id required: true schema: - $ref: '#/components/schemas/Security_Solution_Osquery_API_PackId' + $ref: '#/components/schemas/Security_Osquery_API_PackId' requestBody: content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_UpdatePacksRequestBody + $ref: '#/components/schemas/Security_Osquery_API_UpdatePacksRequestBody' required: true responses: '200': @@ -18886,11 +18659,11 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse + #/components/schemas/Security_Osquery_API_DefaultSuccessResponse description: OK summary: Update a pack tags: - - Security Solution Osquery API + - Security Osquery API /api/osquery/saved_queries: get: description: Get a list of all saved queries. @@ -18901,18 +18674,18 @@ paths: required: true schema: $ref: >- - #/components/schemas/Security_Solution_Osquery_API_FindSavedQueryRequestQuery + #/components/schemas/Security_Osquery_API_FindSavedQueryRequestQuery responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse + #/components/schemas/Security_Osquery_API_DefaultSuccessResponse description: OK summary: Get saved queries tags: - - Security Solution Osquery API + - Security Osquery API post: description: Create and run a saved query. operationId: OsqueryCreateSavedQuery @@ -18921,7 +18694,7 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Osquery_API_CreateSavedQueryRequestBody + #/components/schemas/Security_Osquery_API_CreateSavedQueryRequestBody required: true responses: '200': @@ -18929,11 +18702,11 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse + #/components/schemas/Security_Osquery_API_DefaultSuccessResponse description: OK summary: Create a saved query tags: - - Security Solution Osquery API + - Security Osquery API /api/osquery/saved_queries/{id}: delete: description: Delete a saved query using the query ID. @@ -18943,18 +18716,18 @@ paths: name: id required: true schema: - $ref: '#/components/schemas/Security_Solution_Osquery_API_SavedQueryId' + $ref: '#/components/schemas/Security_Osquery_API_SavedQueryId' responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse + #/components/schemas/Security_Osquery_API_DefaultSuccessResponse description: OK summary: Delete a saved query tags: - - Security Solution Osquery API + - Security Osquery API get: description: Get the details of a saved query using the query ID. operationId: OsqueryGetSavedQueryDetails @@ -18963,18 +18736,18 @@ paths: name: id required: true schema: - $ref: '#/components/schemas/Security_Solution_Osquery_API_SavedQueryId' + $ref: '#/components/schemas/Security_Osquery_API_SavedQueryId' responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse + #/components/schemas/Security_Osquery_API_DefaultSuccessResponse description: OK summary: Get saved query details tags: - - Security Solution Osquery API + - Security Osquery API put: description: | Update a saved query using the query ID. @@ -18986,13 +18759,13 @@ paths: name: id required: true schema: - $ref: '#/components/schemas/Security_Solution_Osquery_API_SavedQueryId' + $ref: '#/components/schemas/Security_Osquery_API_SavedQueryId' requestBody: content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Osquery_API_UpdateSavedQueryRequestBody + #/components/schemas/Security_Osquery_API_UpdateSavedQueryRequestBody required: true responses: '200': @@ -19000,11 +18773,11 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse + #/components/schemas/Security_Osquery_API_DefaultSuccessResponse description: OK summary: Update a saved query tags: - - Security Solution Osquery API + - Security Osquery API /api/pinned_event: patch: description: Pin an event to an existing Timeline. @@ -19038,15 +18811,8 @@ paths: type: object properties: persistPinnedEventOnTimeline: - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_PinnedEvent - - type: object - properties: - code: - type: number - message: - type: string + $ref: >- + #/components/schemas/Security_Timeline_API_PersistPinnedEventResponse required: - persistPinnedEventOnTimeline required: @@ -19054,17 +18820,50 @@ paths: description: Indicates the event was successfully pinned to the Timeline. summary: Pin an event tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution - /api/risk_score/engine/schedule_now: - post: + /api/risk_score/engine/dangerously_delete_data: + delete: description: >- - Schedule the risk scoring engine to run as soon as possible. You can use - this to recalculate entity risk scores after updating their asset - criticality. - operationId: ScheduleRiskEngineNow - requestBody: - content: + Cleaning up the the Risk Engine by removing the indices, mapping and + transforms + operationId: CleanUpRiskEngine + responses: + '200': + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + type: object + properties: + cleanup_successful: + type: boolean + description: Successful response + '400': + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + $ref: >- + #/components/schemas/Security_Entity_Analytics_API_TaskManagerUnavailableResponse + description: Task manager is unavailable + default: + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + $ref: >- + #/components/schemas/Security_Entity_Analytics_API_CleanUpRiskEngineErrorResponse + description: Unexpected error + summary: Cleanup the Risk Engine + tags: + - Security Entity Analytics API + /api/risk_score/engine/schedule_now: + post: + description: >- + Schedule the risk scoring engine to run as soon as possible. You can use + this to recalculate entity risk scores after updating their asset + criticality. + operationId: ScheduleRiskEngineNow + requestBody: + content: application/json; Elastic-Api-Version=2023-10-31: {} responses: '200': @@ -19072,25 +18871,25 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_RiskEngineScheduleNowResponse + #/components/schemas/Security_Entity_Analytics_API_RiskEngineScheduleNowResponse description: Successful response '400': content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_TaskManagerUnavailableResponse + #/components/schemas/Security_Entity_Analytics_API_TaskManagerUnavailableResponse description: Task manager is unavailable default: content: application/json; Elastic-Api-Version=2023-10-31: schema: $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_RiskEngineScheduleNowErrorResponse + #/components/schemas/Security_Entity_Analytics_API_RiskEngineScheduleNowErrorResponse description: Unexpected error summary: Run the risk scoring engine tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API /api/saved_objects/_bulk_create: post: deprecated: true @@ -20628,7 +20427,7 @@ paths: description: Indicates the Timeline was successfully deleted. summary: Delete Timelines or Timeline templates tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution get: description: Get the details of an existing saved Timeline or Timeline template. @@ -20656,7 +20455,7 @@ paths: properties: getOneTimeline: $ref: >- - #/components/schemas/Security_Solution_Timeline_API_TimelineResponse + #/components/schemas/Security_Timeline_API_TimelineResponse nullable: true required: - getOneTimeline @@ -20665,7 +20464,7 @@ paths: description: Indicates that the (template) Timeline was found and returned. summary: Get Timeline or Timeline template details tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution patch: description: >- @@ -20680,8 +20479,7 @@ paths: type: object properties: timeline: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_SavedTimeline + $ref: '#/components/schemas/Security_Timeline_API_SavedTimeline' timelineId: nullable: true type: string @@ -20709,7 +20507,7 @@ paths: properties: timeline: $ref: >- - #/components/schemas/Security_Solution_Timeline_API_TimelineResponse + #/components/schemas/Security_Timeline_API_TimelineResponse required: - timeline required: @@ -20735,7 +20533,7 @@ paths: a draft Timeline. summary: Update a Timeline tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution post: description: Create a new Timeline or Timeline template. @@ -20747,8 +20545,7 @@ paths: type: object properties: status: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_TimelineStatus + $ref: '#/components/schemas/Security_Timeline_API_TimelineStatus' nullable: true templateTimelineId: nullable: true @@ -20757,14 +20554,12 @@ paths: nullable: true type: number timeline: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_SavedTimeline + $ref: '#/components/schemas/Security_Timeline_API_SavedTimeline' timelineId: nullable: true type: string timelineType: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_TimelineType + $ref: '#/components/schemas/Security_Timeline_API_TimelineType' nullable: true version: nullable: true @@ -20790,7 +20585,7 @@ paths: properties: timeline: $ref: >- - #/components/schemas/Security_Solution_Timeline_API_TimelineResponse + #/components/schemas/Security_Timeline_API_TimelineResponse required: - persistTimeline required: @@ -20809,7 +20604,7 @@ paths: description: Indicates that there was an error in the Timeline creation. summary: Create a Timeline or Timeline template tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution /api/timeline/_draft: get: @@ -20823,7 +20618,7 @@ paths: name: timelineType required: true schema: - $ref: '#/components/schemas/Security_Solution_Timeline_API_TimelineType' + $ref: '#/components/schemas/Security_Timeline_API_TimelineType' responses: '200': content: @@ -20839,7 +20634,7 @@ paths: properties: timeline: $ref: >- - #/components/schemas/Security_Solution_Timeline_API_TimelineResponse + #/components/schemas/Security_Timeline_API_TimelineResponse required: - timeline required: @@ -20877,7 +20672,7 @@ paths: draft Timeline with the given `timelineId`. summary: Get draft Timeline or Timeline template details tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution post: description: > @@ -20895,8 +20690,7 @@ paths: type: object properties: timelineType: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_TimelineType + $ref: '#/components/schemas/Security_Timeline_API_TimelineType' required: - timelineType description: >- @@ -20918,7 +20712,7 @@ paths: properties: timeline: $ref: >- - #/components/schemas/Security_Solution_Timeline_API_TimelineResponse + #/components/schemas/Security_Timeline_API_TimelineResponse required: - timeline required: @@ -20957,7 +20751,7 @@ paths: `timelineId`. summary: Create a clean draft Timeline or Timeline template tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution /api/timeline/_export: post: @@ -21004,7 +20798,7 @@ paths: description: Indicates that the export size limit was exceeded. summary: Export Timelines tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution /api/timeline/_favorite: patch: @@ -21026,8 +20820,7 @@ paths: nullable: true type: string timelineType: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_TimelineType + $ref: '#/components/schemas/Security_Timeline_API_TimelineType' nullable: true required: - timelineId @@ -21048,7 +20841,7 @@ paths: properties: persistFavorite: $ref: >- - #/components/schemas/Security_Solution_Timeline_API_FavoriteTimelineResponse + #/components/schemas/Security_Timeline_API_FavoriteTimelineResponse required: - persistFavorite required: @@ -21069,7 +20862,7 @@ paths: the favorite status. summary: Favorite a Timeline or Timeline template tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution /api/timeline/_import: post: @@ -21083,8 +20876,7 @@ paths: properties: file: allOf: - - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_Readable + - $ref: '#/components/schemas/Security_Timeline_API_Readable' - type: object properties: hapi: @@ -21115,7 +20907,7 @@ paths: properties: data: $ref: >- - #/components/schemas/Security_Solution_Timeline_API_ImportTimelineResult + #/components/schemas/Security_Timeline_API_ImportTimelineResult required: - data description: Indicates the import of Timelines was successful. @@ -21162,7 +20954,7 @@ paths: description: Indicates the import of Timelines was unsuccessful. summary: Import Timelines tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution /api/timeline/_prepackaged: post: @@ -21176,19 +20968,16 @@ paths: properties: prepackagedTimelines: items: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_SavedTimeline + $ref: '#/components/schemas/Security_Timeline_API_SavedTimeline' type: array timelinesToInstall: items: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_ImportTimelines + $ref: '#/components/schemas/Security_Timeline_API_ImportTimelines' nullable: true type: array timelinesToUpdate: items: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_ImportTimelines + $ref: '#/components/schemas/Security_Timeline_API_ImportTimelines' nullable: true type: array required: @@ -21206,7 +20995,7 @@ paths: properties: data: $ref: >- - #/components/schemas/Security_Solution_Timeline_API_ImportTimelineResult + #/components/schemas/Security_Timeline_API_ImportTimelineResult required: - data description: Indicates the installation of prepackaged Timelines was successful. @@ -21225,7 +21014,7 @@ paths: unsuccessful. summary: Install prepackaged Timelines tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution /api/timeline/resolve: get: @@ -21253,7 +21042,7 @@ paths: properties: getOneTimeline: $ref: >- - #/components/schemas/Security_Solution_Timeline_API_TimelineResponse + #/components/schemas/Security_Timeline_API_TimelineResponse nullable: true required: - getOneTimeline @@ -21266,7 +21055,7 @@ paths: description: The (template) Timeline was not found summary: Get an existing saved Timeline or Timeline template tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution /api/timelines: get: @@ -21287,13 +21076,12 @@ paths: - in: query name: timeline_type schema: - $ref: '#/components/schemas/Security_Solution_Timeline_API_TimelineType' + $ref: '#/components/schemas/Security_Timeline_API_TimelineType' nullable: true - in: query name: sort_field schema: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_SortFieldTimeline + $ref: '#/components/schemas/Security_Timeline_API_SortFieldTimeline' - in: query name: sort_order schema: @@ -21319,7 +21107,7 @@ paths: - in: query name: status schema: - $ref: '#/components/schemas/Security_Solution_Timeline_API_TimelineStatus' + $ref: '#/components/schemas/Security_Timeline_API_TimelineStatus' nullable: true responses: '200': @@ -21344,7 +21132,7 @@ paths: timelines: items: $ref: >- - #/components/schemas/Security_Solution_Timeline_API_TimelineResponse + #/components/schemas/Security_Timeline_API_TimelineResponse type: array totalCount: type: number @@ -21372,7 +21160,7 @@ paths: description: Bad request. The user supplied invalid data. summary: Get Timelines or Timeline templates tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution /s/{spaceId}/api/observability/slos: get: @@ -31055,35 +30843,33 @@ components: name: description: User name type: string - Security_Solution_Detections_API_AlertAssignees: + Security_Detections_API_AlertAssignees: type: object properties: add: description: A list of users ids to assign. items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NonEmptyString + $ref: '#/components/schemas/Security_Detections_API_NonEmptyString' type: array remove: description: A list of users ids to unassign. items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NonEmptyString + $ref: '#/components/schemas/Security_Detections_API_NonEmptyString' type: array required: - add - remove - Security_Solution_Detections_API_AlertIds: + Security_Detections_API_AlertIds: description: A list of alerts ids. items: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' + $ref: '#/components/schemas/Security_Detections_API_NonEmptyString' minItems: 1 type: array - Security_Solution_Detections_API_AlertsIndex: + Security_Detections_API_AlertsIndex: deprecated: true description: (deprecated) Has no effect. type: string - Security_Solution_Detections_API_AlertsIndexMigrationError: + Security_Detections_API_AlertsIndexMigrationError: type: object properties: error: @@ -31101,7 +30887,7 @@ components: required: - index - error - Security_Solution_Detections_API_AlertsIndexMigrationSuccess: + Security_Detections_API_AlertsIndexMigrationSuccess: type: object properties: index: @@ -31114,10 +30900,10 @@ components: - index - migration_id - migration_index - Security_Solution_Detections_API_AlertsIndexNamespace: + Security_Detections_API_AlertsIndexNamespace: description: Has no effect. type: string - Security_Solution_Detections_API_AlertsReindexOptions: + Security_Detections_API_AlertsReindexOptions: type: object properties: requests_per_second: @@ -31129,41 +30915,39 @@ components: slices: minimum: 1 type: integer - Security_Solution_Detections_API_AlertsSort: + Security_Detections_API_AlertsSort: oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsSortCombinations + - $ref: '#/components/schemas/Security_Detections_API_AlertsSortCombinations' - items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsSortCombinations + #/components/schemas/Security_Detections_API_AlertsSortCombinations type: array - Security_Solution_Detections_API_AlertsSortCombinations: + Security_Detections_API_AlertsSortCombinations: anyOf: - type: string - additionalProperties: true type: object - Security_Solution_Detections_API_AlertStatus: + Security_Detections_API_AlertStatus: enum: - open - closed - acknowledged - in-progress type: string - Security_Solution_Detections_API_AlertSuppression: + Security_Detections_API_AlertSuppression: type: object properties: duration: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertSuppressionDuration + #/components/schemas/Security_Detections_API_AlertSuppressionDuration group_by: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertSuppressionGroupBy + $ref: '#/components/schemas/Security_Detections_API_AlertSuppressionGroupBy' missing_fields_strategy: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertSuppressionMissingFieldsStrategy + #/components/schemas/Security_Detections_API_AlertSuppressionMissingFieldsStrategy required: - group_by - Security_Solution_Detections_API_AlertSuppressionDuration: + Security_Detections_API_AlertSuppressionDuration: type: object properties: unit: @@ -31178,13 +30962,13 @@ components: required: - value - unit - Security_Solution_Detections_API_AlertSuppressionGroupBy: + Security_Detections_API_AlertSuppressionGroupBy: items: type: string maxItems: 3 minItems: 1 type: array - Security_Solution_Detections_API_AlertSuppressionMissingFieldsStrategy: + Security_Detections_API_AlertSuppressionMissingFieldsStrategy: description: >- Describes how alerts will be generated for documents with missing suppress by fields: @@ -31196,13 +30980,13 @@ components: - doNotSuppress - suppress type: string - Security_Solution_Detections_API_AlertTag: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' - Security_Solution_Detections_API_AlertTags: + Security_Detections_API_AlertTag: + $ref: '#/components/schemas/Security_Detections_API_NonEmptyString' + Security_Detections_API_AlertTags: items: - $ref: '#/components/schemas/Security_Solution_Detections_API_AlertTag' + $ref: '#/components/schemas/Security_Detections_API_AlertTag' type: array - Security_Solution_Detections_API_AlertVersion: + Security_Detections_API_AlertVersion: type: object properties: count: @@ -31212,32 +30996,32 @@ components: required: - version - count - Security_Solution_Detections_API_AnomalyThreshold: + Security_Detections_API_AnomalyThreshold: description: Anomaly threshold minimum: 0 type: integer - Security_Solution_Detections_API_BuildingBlockType: + Security_Detections_API_BuildingBlockType: description: >- Determines if the rule acts as a building block. By default, building-block alerts are not displayed in the UI. These rules are used as a foundation for other rules that do generate alerts. Its value must be default. type: string - Security_Solution_Detections_API_BulkActionEditPayload: + Security_Detections_API_BulkActionEditPayload: anyOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkActionEditPayloadTags + #/components/schemas/Security_Detections_API_BulkActionEditPayloadTags - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkActionEditPayloadIndexPatterns + #/components/schemas/Security_Detections_API_BulkActionEditPayloadIndexPatterns - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkActionEditPayloadInvestigationFields + #/components/schemas/Security_Detections_API_BulkActionEditPayloadInvestigationFields - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkActionEditPayloadTimeline + #/components/schemas/Security_Detections_API_BulkActionEditPayloadTimeline - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkActionEditPayloadRuleActions + #/components/schemas/Security_Detections_API_BulkActionEditPayloadRuleActions - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkActionEditPayloadSchedule - Security_Solution_Detections_API_BulkActionEditPayloadIndexPatterns: + #/components/schemas/Security_Detections_API_BulkActionEditPayloadSchedule + Security_Detections_API_BulkActionEditPayloadIndexPatterns: type: object properties: overwrite_data_views: @@ -31249,12 +31033,11 @@ components: - set_index_patterns type: string value: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IndexPatternArray + $ref: '#/components/schemas/Security_Detections_API_IndexPatternArray' required: - type - value - Security_Solution_Detections_API_BulkActionEditPayloadInvestigationFields: + Security_Detections_API_BulkActionEditPayloadInvestigationFields: type: object properties: type: @@ -31264,12 +31047,11 @@ components: - set_investigation_fields type: string value: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' required: - type - value - Security_Solution_Detections_API_BulkActionEditPayloadRuleActions: + Security_Detections_API_BulkActionEditPayloadRuleActions: type: object properties: type: @@ -31283,17 +31065,17 @@ components: actions: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_NormalizedRuleAction + #/components/schemas/Security_Detections_API_NormalizedRuleAction type: array throttle: $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThrottleForBulkActions + #/components/schemas/Security_Detections_API_ThrottleForBulkActions required: - actions required: - type - value - Security_Solution_Detections_API_BulkActionEditPayloadSchedule: + Security_Detections_API_BulkActionEditPayloadSchedule: type: object properties: type: @@ -31321,7 +31103,7 @@ components: required: - type - value - Security_Solution_Detections_API_BulkActionEditPayloadTags: + Security_Detections_API_BulkActionEditPayloadTags: type: object properties: type: @@ -31331,11 +31113,11 @@ components: - set_tags type: string value: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleTagArray' + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' required: - type - value - Security_Solution_Detections_API_BulkActionEditPayloadTimeline: + Security_Detections_API_BulkActionEditPayloadTimeline: type: object properties: type: @@ -31346,18 +31128,17 @@ components: type: object properties: timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle required: - timeline_id - timeline_title required: - type - value - Security_Solution_Detections_API_BulkActionsDryRunErrCode: + Security_Detections_API_BulkActionsDryRunErrCode: enum: - IMMUTABLE - MACHINE_LEARNING_AUTH @@ -31366,7 +31147,7 @@ components: - MANUAL_RULE_RUN_FEATURE - MANUAL_RULE_RUN_DISABLED_RULE type: string - Security_Solution_Detections_API_BulkActionSkipResult: + Security_Detections_API_BulkActionSkipResult: type: object properties: id: @@ -31374,18 +31155,17 @@ components: name: type: string skip_reason: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkEditSkipReason + $ref: '#/components/schemas/Security_Detections_API_BulkEditSkipReason' required: - id - skip_reason - Security_Solution_Detections_API_BulkCrudRulesResponse: + Security_Detections_API_BulkCrudRulesResponse: items: oneOf: - - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleResponse' - - $ref: '#/components/schemas/Security_Solution_Detections_API_ErrorSchema' + - $ref: '#/components/schemas/Security_Detections_API_RuleResponse' + - $ref: '#/components/schemas/Security_Detections_API_ErrorSchema' type: array - Security_Solution_Detections_API_BulkDeleteRules: + Security_Detections_API_BulkDeleteRules: type: object properties: action: @@ -31403,7 +31183,7 @@ components: type: string required: - action - Security_Solution_Detections_API_BulkDisableRules: + Security_Detections_API_BulkDisableRules: type: object properties: action: @@ -31421,7 +31201,7 @@ components: type: string required: - action - Security_Solution_Detections_API_BulkDuplicateRules: + Security_Detections_API_BulkDuplicateRules: type: object properties: action: @@ -31451,7 +31231,7 @@ components: type: string required: - action - Security_Solution_Detections_API_BulkEditActionResponse: + Security_Detections_API_BulkEditActionResponse: type: object properties: attributes: @@ -31460,14 +31240,14 @@ components: errors: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_NormalizedRuleError + #/components/schemas/Security_Detections_API_NormalizedRuleError type: array results: $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkEditActionResults + #/components/schemas/Security_Detections_API_BulkEditActionResults summary: $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkEditActionSummary + #/components/schemas/Security_Detections_API_BulkEditActionSummary required: - results - summary @@ -31481,32 +31261,31 @@ components: type: boolean required: - attributes - Security_Solution_Detections_API_BulkEditActionResults: + Security_Detections_API_BulkEditActionResults: type: object properties: created: items: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleResponse' + $ref: '#/components/schemas/Security_Detections_API_RuleResponse' type: array deleted: items: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleResponse' + $ref: '#/components/schemas/Security_Detections_API_RuleResponse' type: array skipped: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkActionSkipResult + $ref: '#/components/schemas/Security_Detections_API_BulkActionSkipResult' type: array updated: items: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleResponse' + $ref: '#/components/schemas/Security_Detections_API_RuleResponse' type: array required: - updated - created - deleted - skipped - Security_Solution_Detections_API_BulkEditActionSummary: + Security_Detections_API_BulkEditActionSummary: type: object properties: failed: @@ -31522,7 +31301,7 @@ components: - skipped - succeeded - total - Security_Solution_Detections_API_BulkEditRules: + Security_Detections_API_BulkEditRules: type: object properties: action: @@ -31532,8 +31311,7 @@ components: edit: description: Array of objects containing the edit operations items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkActionEditPayload + $ref: '#/components/schemas/Security_Detections_API_BulkActionEditPayload' minItems: 1 type: array ids: @@ -31548,11 +31326,11 @@ components: required: - action - edit - Security_Solution_Detections_API_BulkEditSkipReason: + Security_Detections_API_BulkEditSkipReason: enum: - RULE_NOT_MODIFIED type: string - Security_Solution_Detections_API_BulkEnableRules: + Security_Detections_API_BulkEnableRules: type: object properties: action: @@ -31570,9 +31348,9 @@ components: type: string required: - action - Security_Solution_Detections_API_BulkExportActionResponse: + Security_Detections_API_BulkExportActionResponse: type: string - Security_Solution_Detections_API_BulkExportRules: + Security_Detections_API_BulkExportRules: type: object properties: action: @@ -31590,7 +31368,7 @@ components: type: string required: - action - Security_Solution_Detections_API_BulkManualRuleRun: + Security_Detections_API_BulkManualRuleRun: type: object properties: action: @@ -31620,12 +31398,12 @@ components: required: - action - run - Security_Solution_Detections_API_ConcurrentSearches: + Security_Detections_API_ConcurrentSearches: minimum: 1 type: integer - Security_Solution_Detections_API_DataViewId: + Security_Detections_API_DataViewId: type: string - Security_Solution_Detections_API_DefaultParams: + Security_Detections_API_DefaultParams: type: object properties: command: @@ -31636,7 +31414,7 @@ components: type: string required: - command - Security_Solution_Detections_API_EcsMapping: + Security_Detections_API_EcsMapping: additionalProperties: type: object properties: @@ -31649,7 +31427,7 @@ components: type: string type: array type: object - Security_Solution_Detections_API_EndpointResponseAction: + Security_Detections_API_EndpointResponseAction: type: object properties: action_type_id: @@ -31658,53 +31436,44 @@ components: type: string params: oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_DefaultParams - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ProcessesParams + - $ref: '#/components/schemas/Security_Detections_API_DefaultParams' + - $ref: '#/components/schemas/Security_Detections_API_ProcessesParams' required: - action_type_id - params - Security_Solution_Detections_API_EqlOptionalFields: + Security_Detections_API_EqlOptionalFields: type: object properties: alert_suppression: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertSuppression + $ref: '#/components/schemas/Security_Detections_API_AlertSuppression' data_view_id: - $ref: '#/components/schemas/Security_Solution_Detections_API_DataViewId' + $ref: '#/components/schemas/Security_Detections_API_DataViewId' event_category_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EventCategoryOverride + $ref: '#/components/schemas/Security_Detections_API_EventCategoryOverride' filters: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFilterArray + $ref: '#/components/schemas/Security_Detections_API_RuleFilterArray' index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IndexPatternArray + $ref: '#/components/schemas/Security_Detections_API_IndexPatternArray' response_actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ResponseAction + $ref: '#/components/schemas/Security_Detections_API_ResponseAction' type: array tiebreaker_field: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TiebreakerField + $ref: '#/components/schemas/Security_Detections_API_TiebreakerField' timestamp_field: - $ref: '#/components/schemas/Security_Solution_Detections_API_TimestampField' - Security_Solution_Detections_API_EqlQueryLanguage: + $ref: '#/components/schemas/Security_Detections_API_TimestampField' + Security_Detections_API_EqlQueryLanguage: enum: - eql type: string - Security_Solution_Detections_API_EqlRequiredFields: + Security_Detections_API_EqlRequiredFields: type: object properties: language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlQueryLanguage + $ref: '#/components/schemas/Security_Detections_API_EqlQueryLanguage' description: Query language to use query: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleQuery' + $ref: '#/components/schemas/Security_Detections_API_RuleQuery' description: EQL query to execute type: description: Rule type @@ -31715,125 +31484,101 @@ components: - type - query - language - Security_Solution_Detections_API_EqlRule: + Security_Detections_API_EqlRule: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' required: - name - description @@ -31857,428 +31602,341 @@ components: - setup - related_integrations - required_fields - - $ref: '#/components/schemas/Security_Solution_Detections_API_ResponseFields' - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlRuleResponseFields - Security_Solution_Detections_API_EqlRuleCreateFields: + - $ref: '#/components/schemas/Security_Detections_API_ResponseFields' + - $ref: '#/components/schemas/Security_Detections_API_EqlRuleResponseFields' + Security_Detections_API_EqlRuleCreateFields: allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlRequiredFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlOptionalFields - Security_Solution_Detections_API_EqlRuleCreateProps: + - $ref: '#/components/schemas/Security_Detections_API_EqlRequiredFields' + - $ref: '#/components/schemas/Security_Detections_API_EqlOptionalFields' + Security_Detections_API_EqlRuleCreateProps: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' required: - name - description - risk_score - severity - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlRuleCreateFields - Security_Solution_Detections_API_EqlRulePatchFields: + - $ref: '#/components/schemas/Security_Detections_API_EqlRuleCreateFields' + Security_Detections_API_EqlRulePatchFields: allOf: - type: object properties: language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlQueryLanguage + $ref: '#/components/schemas/Security_Detections_API_EqlQueryLanguage' description: Query language to use query: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleQuery' + $ref: '#/components/schemas/Security_Detections_API_RuleQuery' description: EQL query to execute type: description: Rule type enum: - eql type: string - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlOptionalFields - Security_Solution_Detections_API_EqlRulePatchProps: + - $ref: '#/components/schemas/Security_Detections_API_EqlOptionalFields' + Security_Detections_API_EqlRulePatchProps: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId + $ref: '#/components/schemas/Security_Detections_API_RuleObjectId' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlRulePatchFields - Security_Solution_Detections_API_EqlRuleResponseFields: + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' + - $ref: '#/components/schemas/Security_Detections_API_EqlRulePatchFields' + Security_Detections_API_EqlRuleResponseFields: allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlRequiredFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlOptionalFields - Security_Solution_Detections_API_EqlRuleUpdateProps: + - $ref: '#/components/schemas/Security_Detections_API_EqlRequiredFields' + - $ref: '#/components/schemas/Security_Detections_API_EqlOptionalFields' + Security_Detections_API_EqlRuleUpdateProps: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId + $ref: '#/components/schemas/Security_Detections_API_RuleObjectId' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' required: - name - description - risk_score - severity - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlRuleCreateFields - Security_Solution_Detections_API_ErrorSchema: + - $ref: '#/components/schemas/Security_Detections_API_EqlRuleCreateFields' + Security_Detections_API_ErrorSchema: additionalProperties: false type: object properties: @@ -32302,133 +31960,108 @@ components: minLength: 1 type: string rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' required: - error - Security_Solution_Detections_API_EsqlQueryLanguage: + Security_Detections_API_EsqlQueryLanguage: enum: - esql type: string - Security_Solution_Detections_API_EsqlRule: + Security_Detections_API_EsqlRule: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' required: - name - description @@ -32452,301 +32085,241 @@ components: - setup - related_integrations - required_fields - - $ref: '#/components/schemas/Security_Solution_Detections_API_ResponseFields' - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlRuleResponseFields - Security_Solution_Detections_API_EsqlRuleCreateFields: + - $ref: '#/components/schemas/Security_Detections_API_ResponseFields' + - $ref: '#/components/schemas/Security_Detections_API_EsqlRuleResponseFields' + Security_Detections_API_EsqlRuleCreateFields: allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlRuleOptionalFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlRuleRequiredFields - Security_Solution_Detections_API_EsqlRuleCreateProps: + - $ref: '#/components/schemas/Security_Detections_API_EsqlRuleOptionalFields' + - $ref: '#/components/schemas/Security_Detections_API_EsqlRuleRequiredFields' + Security_Detections_API_EsqlRuleCreateProps: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' required: - name - description - risk_score - severity - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlRuleCreateFields - Security_Solution_Detections_API_EsqlRuleOptionalFields: + - $ref: '#/components/schemas/Security_Detections_API_EsqlRuleCreateFields' + Security_Detections_API_EsqlRuleOptionalFields: type: object properties: alert_suppression: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertSuppression + $ref: '#/components/schemas/Security_Detections_API_AlertSuppression' response_actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ResponseAction + $ref: '#/components/schemas/Security_Detections_API_ResponseAction' type: array - Security_Solution_Detections_API_EsqlRulePatchProps: + Security_Detections_API_EsqlRulePatchProps: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId + $ref: '#/components/schemas/Security_Detections_API_RuleObjectId' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlQueryLanguage + $ref: '#/components/schemas/Security_Detections_API_EsqlQueryLanguage' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' query: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleQuery' + $ref: '#/components/schemas/Security_Detections_API_RuleQuery' description: ESQL query to execute references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' type: description: Rule type enum: - esql type: string version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlRuleOptionalFields - Security_Solution_Detections_API_EsqlRuleRequiredFields: + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' + - $ref: '#/components/schemas/Security_Detections_API_EsqlRuleOptionalFields' + Security_Detections_API_EsqlRuleRequiredFields: type: object properties: language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlQueryLanguage + $ref: '#/components/schemas/Security_Detections_API_EsqlQueryLanguage' query: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleQuery' + $ref: '#/components/schemas/Security_Detections_API_RuleQuery' description: ESQL query to execute type: description: Rule type @@ -32757,147 +32330,118 @@ components: - type - language - query - Security_Solution_Detections_API_EsqlRuleResponseFields: + Security_Detections_API_EsqlRuleResponseFields: allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlRuleOptionalFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlRuleRequiredFields - Security_Solution_Detections_API_EsqlRuleUpdateProps: + - $ref: '#/components/schemas/Security_Detections_API_EsqlRuleOptionalFields' + - $ref: '#/components/schemas/Security_Detections_API_EsqlRuleRequiredFields' + Security_Detections_API_EsqlRuleUpdateProps: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId + $ref: '#/components/schemas/Security_Detections_API_RuleObjectId' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' required: - name - description - risk_score - severity - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlRuleCreateFields - Security_Solution_Detections_API_EventCategoryOverride: + - $ref: '#/components/schemas/Security_Detections_API_EsqlRuleCreateFields' + Security_Detections_API_EventCategoryOverride: type: string - Security_Solution_Detections_API_ExceptionListType: + Security_Detections_API_ExceptionListType: description: The exception type enum: - detection @@ -32908,7 +32452,7 @@ components: - endpoint_host_isolation_exceptions - endpoint_blocklists type: string - Security_Solution_Detections_API_ExternalRuleSource: + Security_Detections_API_ExternalRuleSource: description: >- Type of rule source for externally sourced rules, i.e. rules that have an external source, such as the Elastic Prebuilt rules repo. @@ -32916,7 +32460,7 @@ components: properties: is_customized: $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsExternalRuleCustomized + #/components/schemas/Security_Detections_API_IsExternalRuleCustomized type: enum: - external @@ -32924,7 +32468,7 @@ components: required: - type - is_customized - Security_Solution_Detections_API_FindRulesSortField: + Security_Detections_API_FindRulesSortField: enum: - created_at - createdAt @@ -32941,23 +32485,22 @@ components: - updated_at - updatedAt type: string - Security_Solution_Detections_API_HistoryWindowStart: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' - Security_Solution_Detections_API_IndexMigrationStatus: + Security_Detections_API_HistoryWindowStart: + $ref: '#/components/schemas/Security_Detections_API_NonEmptyString' + Security_Detections_API_IndexMigrationStatus: type: object properties: index: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' + $ref: '#/components/schemas/Security_Detections_API_NonEmptyString' is_outdated: type: boolean migrations: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MigrationStatus + $ref: '#/components/schemas/Security_Detections_API_MigrationStatus' type: array signal_versions: items: - $ref: '#/components/schemas/Security_Solution_Detections_API_AlertVersion' + $ref: '#/components/schemas/Security_Detections_API_AlertVersion' type: array version: type: integer @@ -32967,11 +32510,11 @@ components: - signal_versions - migrations - is_outdated - Security_Solution_Detections_API_IndexPatternArray: + Security_Detections_API_IndexPatternArray: items: type: string type: array - Security_Solution_Detections_API_InternalRuleSource: + Security_Detections_API_InternalRuleSource: description: >- Type of rule source for internally sourced rules, i.e. created within the Kibana apps. @@ -32983,7 +32526,7 @@ components: type: string required: - type - Security_Solution_Detections_API_InvestigationFields: + Security_Detections_API_InvestigationFields: description: > Schema for fields relating to investigation fields. These are user defined fields we use to highlight @@ -33016,39 +32559,38 @@ components: properties: field_names: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NonEmptyString + $ref: '#/components/schemas/Security_Detections_API_NonEmptyString' minItems: 1 type: array required: - field_names - Security_Solution_Detections_API_InvestigationGuide: + Security_Detections_API_InvestigationGuide: description: Notes to help investigate alerts produced by the rule. type: string - Security_Solution_Detections_API_IsExternalRuleCustomized: + Security_Detections_API_IsExternalRuleCustomized: description: >- Determines whether an external/prebuilt rule has been customized by the user (i.e. any of its fields have been modified and diverged from the base value). type: boolean - Security_Solution_Detections_API_IsRuleEnabled: + Security_Detections_API_IsRuleEnabled: description: Determines whether the rule is enabled. type: boolean - Security_Solution_Detections_API_IsRuleImmutable: + Security_Detections_API_IsRuleImmutable: deprecated: true description: >- This field determines whether the rule is a prebuilt Elastic rule. It will be replaced with the `rule_source` field. type: boolean - Security_Solution_Detections_API_ItemsPerSearch: + Security_Detections_API_ItemsPerSearch: minimum: 1 type: integer - Security_Solution_Detections_API_KqlQueryLanguage: + Security_Detections_API_KqlQueryLanguage: enum: - kuery - lucene type: string - Security_Solution_Detections_API_MachineLearningJobId: + Security_Detections_API_MachineLearningJobId: description: Machine learning job ID oneOf: - type: string @@ -33056,125 +32598,101 @@ components: type: string minItems: 1 type: array - Security_Solution_Detections_API_MachineLearningRule: + Security_Detections_API_MachineLearningRule: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' required: - name - description @@ -33198,303 +32716,248 @@ components: - setup - related_integrations - required_fields - - $ref: '#/components/schemas/Security_Solution_Detections_API_ResponseFields' + - $ref: '#/components/schemas/Security_Detections_API_ResponseFields' - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRuleResponseFields - Security_Solution_Detections_API_MachineLearningRuleCreateFields: + #/components/schemas/Security_Detections_API_MachineLearningRuleResponseFields + Security_Detections_API_MachineLearningRuleCreateFields: allOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRuleRequiredFields + #/components/schemas/Security_Detections_API_MachineLearningRuleRequiredFields - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRuleOptionalFields - Security_Solution_Detections_API_MachineLearningRuleCreateProps: + #/components/schemas/Security_Detections_API_MachineLearningRuleOptionalFields + Security_Detections_API_MachineLearningRuleCreateProps: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' required: - name - description - risk_score - severity - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRuleCreateFields - Security_Solution_Detections_API_MachineLearningRuleOptionalFields: + #/components/schemas/Security_Detections_API_MachineLearningRuleCreateFields + Security_Detections_API_MachineLearningRuleOptionalFields: type: object properties: alert_suppression: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertSuppression - Security_Solution_Detections_API_MachineLearningRulePatchFields: + $ref: '#/components/schemas/Security_Detections_API_AlertSuppression' + Security_Detections_API_MachineLearningRulePatchFields: allOf: - type: object properties: anomaly_threshold: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AnomalyThreshold + $ref: '#/components/schemas/Security_Detections_API_AnomalyThreshold' machine_learning_job_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningJobId + #/components/schemas/Security_Detections_API_MachineLearningJobId type: description: Rule type enum: - machine_learning type: string - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRuleOptionalFields - Security_Solution_Detections_API_MachineLearningRulePatchProps: + #/components/schemas/Security_Detections_API_MachineLearningRuleOptionalFields + Security_Detections_API_MachineLearningRulePatchProps: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId + $ref: '#/components/schemas/Security_Detections_API_RuleObjectId' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRulePatchFields - Security_Solution_Detections_API_MachineLearningRuleRequiredFields: + #/components/schemas/Security_Detections_API_MachineLearningRulePatchFields + Security_Detections_API_MachineLearningRuleRequiredFields: type: object properties: anomaly_threshold: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AnomalyThreshold + $ref: '#/components/schemas/Security_Detections_API_AnomalyThreshold' machine_learning_job_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningJobId + $ref: '#/components/schemas/Security_Detections_API_MachineLearningJobId' type: description: Rule type enum: @@ -33504,148 +32967,122 @@ components: - type - machine_learning_job_id - anomaly_threshold - Security_Solution_Detections_API_MachineLearningRuleResponseFields: + Security_Detections_API_MachineLearningRuleResponseFields: allOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRuleRequiredFields + #/components/schemas/Security_Detections_API_MachineLearningRuleRequiredFields - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRuleOptionalFields - Security_Solution_Detections_API_MachineLearningRuleUpdateProps: + #/components/schemas/Security_Detections_API_MachineLearningRuleOptionalFields + Security_Detections_API_MachineLearningRuleUpdateProps: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId + $ref: '#/components/schemas/Security_Detections_API_RuleObjectId' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' required: - name - description - risk_score - severity - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRuleCreateFields - Security_Solution_Detections_API_MaxSignals: + #/components/schemas/Security_Detections_API_MachineLearningRuleCreateFields + Security_Detections_API_MaxSignals: minimum: 1 type: integer - Security_Solution_Detections_API_MigrationCleanupResult: + Security_Detections_API_MigrationCleanupResult: type: object properties: destinationIndex: @@ -33682,7 +33119,7 @@ components: - sourceIndex - version - updated - Security_Solution_Detections_API_MigrationFinalizationResult: + Security_Detections_API_MigrationFinalizationResult: type: object properties: completed: @@ -33722,11 +33159,11 @@ components: - sourceIndex - version - updated - Security_Solution_Detections_API_MigrationStatus: + Security_Detections_API_MigrationStatus: type: object properties: id: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' + $ref: '#/components/schemas/Security_Detections_API_NonEmptyString' status: enum: - success @@ -33743,131 +33180,107 @@ components: - status - version - updated - Security_Solution_Detections_API_NewTermsFields: + Security_Detections_API_NewTermsFields: items: type: string maxItems: 3 minItems: 1 type: array - Security_Solution_Detections_API_NewTermsRule: + Security_Detections_API_NewTermsRule: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' required: - name - description @@ -33891,329 +33304,269 @@ components: - setup - related_integrations - required_fields - - $ref: '#/components/schemas/Security_Solution_Detections_API_ResponseFields' + - $ref: '#/components/schemas/Security_Detections_API_ResponseFields' - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRuleResponseFields - Security_Solution_Detections_API_NewTermsRuleCreateFields: + #/components/schemas/Security_Detections_API_NewTermsRuleResponseFields + Security_Detections_API_NewTermsRuleCreateFields: allOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRuleRequiredFields + #/components/schemas/Security_Detections_API_NewTermsRuleRequiredFields - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRuleOptionalFields + #/components/schemas/Security_Detections_API_NewTermsRuleOptionalFields - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRuleDefaultableFields - Security_Solution_Detections_API_NewTermsRuleCreateProps: + #/components/schemas/Security_Detections_API_NewTermsRuleDefaultableFields + Security_Detections_API_NewTermsRuleCreateProps: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' required: - name - description - risk_score - severity - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRuleCreateFields - Security_Solution_Detections_API_NewTermsRuleDefaultableFields: + #/components/schemas/Security_Detections_API_NewTermsRuleCreateFields + Security_Detections_API_NewTermsRuleDefaultableFields: type: object properties: language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_KqlQueryLanguage - Security_Solution_Detections_API_NewTermsRuleOptionalFields: + $ref: '#/components/schemas/Security_Detections_API_KqlQueryLanguage' + Security_Detections_API_NewTermsRuleOptionalFields: type: object properties: alert_suppression: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertSuppression + $ref: '#/components/schemas/Security_Detections_API_AlertSuppression' data_view_id: - $ref: '#/components/schemas/Security_Solution_Detections_API_DataViewId' + $ref: '#/components/schemas/Security_Detections_API_DataViewId' filters: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFilterArray + $ref: '#/components/schemas/Security_Detections_API_RuleFilterArray' index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IndexPatternArray + $ref: '#/components/schemas/Security_Detections_API_IndexPatternArray' response_actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ResponseAction + $ref: '#/components/schemas/Security_Detections_API_ResponseAction' type: array - Security_Solution_Detections_API_NewTermsRulePatchFields: + Security_Detections_API_NewTermsRulePatchFields: allOf: - type: object properties: history_window_start: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_HistoryWindowStart + $ref: '#/components/schemas/Security_Detections_API_HistoryWindowStart' new_terms_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsFields + $ref: '#/components/schemas/Security_Detections_API_NewTermsFields' query: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleQuery' + $ref: '#/components/schemas/Security_Detections_API_RuleQuery' type: description: Rule type enum: - new_terms type: string - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRuleOptionalFields + #/components/schemas/Security_Detections_API_NewTermsRuleOptionalFields - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRuleDefaultableFields - Security_Solution_Detections_API_NewTermsRulePatchProps: + #/components/schemas/Security_Detections_API_NewTermsRuleDefaultableFields + Security_Detections_API_NewTermsRulePatchProps: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId + $ref: '#/components/schemas/Security_Detections_API_RuleObjectId' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRulePatchFields - Security_Solution_Detections_API_NewTermsRuleRequiredFields: + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' + - $ref: '#/components/schemas/Security_Detections_API_NewTermsRulePatchFields' + Security_Detections_API_NewTermsRuleRequiredFields: type: object properties: history_window_start: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_HistoryWindowStart + $ref: '#/components/schemas/Security_Detections_API_HistoryWindowStart' new_terms_fields: - $ref: '#/components/schemas/Security_Solution_Detections_API_NewTermsFields' + $ref: '#/components/schemas/Security_Detections_API_NewTermsFields' query: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleQuery' + $ref: '#/components/schemas/Security_Detections_API_RuleQuery' type: description: Rule type enum: @@ -34224,189 +33577,157 @@ components: - query - new_terms_fields - history_window_start - Security_Solution_Detections_API_NewTermsRuleResponseFields: + Security_Detections_API_NewTermsRuleResponseFields: allOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRuleRequiredFields + #/components/schemas/Security_Detections_API_NewTermsRuleRequiredFields - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRuleOptionalFields + #/components/schemas/Security_Detections_API_NewTermsRuleOptionalFields - type: object properties: language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_KqlQueryLanguage + $ref: '#/components/schemas/Security_Detections_API_KqlQueryLanguage' required: - language - Security_Solution_Detections_API_NewTermsRuleUpdateProps: + Security_Detections_API_NewTermsRuleUpdateProps: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId + $ref: '#/components/schemas/Security_Detections_API_RuleObjectId' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' required: - name - description - risk_score - severity - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRuleCreateFields - Security_Solution_Detections_API_NonEmptyString: + #/components/schemas/Security_Detections_API_NewTermsRuleCreateFields + Security_Detections_API_NonEmptyString: description: A string that is not empty and does not contain only whitespace minLength: 1 pattern: ^(?! *$).+$ type: string - Security_Solution_Detections_API_NormalizedRuleAction: + Security_Detections_API_NormalizedRuleAction: additionalProperties: false type: object properties: alerts_filter: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionAlertsFilter + $ref: '#/components/schemas/Security_Detections_API_RuleActionAlertsFilter' frequency: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionFrequency + $ref: '#/components/schemas/Security_Detections_API_RuleActionFrequency' group: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionGroup + $ref: '#/components/schemas/Security_Detections_API_RuleActionGroup' id: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleActionId' + $ref: '#/components/schemas/Security_Detections_API_RuleActionId' params: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionParams + $ref: '#/components/schemas/Security_Detections_API_RuleActionParams' required: - id - params - Security_Solution_Detections_API_NormalizedRuleError: + Security_Detections_API_NormalizedRuleError: type: object properties: err_code: $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkActionsDryRunErrCode + #/components/schemas/Security_Detections_API_BulkActionsDryRunErrCode message: type: string rules: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDetailsInError + $ref: '#/components/schemas/Security_Detections_API_RuleDetailsInError' type: array status_code: type: integer @@ -34414,16 +33735,16 @@ components: - message - status_code - rules - Security_Solution_Detections_API_OsqueryParams: + Security_Detections_API_OsqueryParams: type: object properties: ecs_mapping: - $ref: '#/components/schemas/Security_Solution_Detections_API_EcsMapping' + $ref: '#/components/schemas/Security_Detections_API_EcsMapping' pack_id: type: string queries: items: - $ref: '#/components/schemas/Security_Solution_Detections_API_OsqueryQuery' + $ref: '#/components/schemas/Security_Detections_API_OsqueryQuery' type: array query: type: string @@ -34431,11 +33752,11 @@ components: type: string timeout: type: number - Security_Solution_Detections_API_OsqueryQuery: + Security_Detections_API_OsqueryQuery: type: object properties: ecs_mapping: - $ref: '#/components/schemas/Security_Solution_Detections_API_EcsMapping' + $ref: '#/components/schemas/Security_Detections_API_EcsMapping' id: description: Query ID type: string @@ -34454,7 +33775,7 @@ components: required: - id - query - Security_Solution_Detections_API_OsqueryResponseAction: + Security_Detections_API_OsqueryResponseAction: type: object properties: action_type_id: @@ -34462,11 +33783,11 @@ components: - .osquery type: string params: - $ref: '#/components/schemas/Security_Solution_Detections_API_OsqueryParams' + $ref: '#/components/schemas/Security_Detections_API_OsqueryParams' required: - action_type_id - params - Security_Solution_Detections_API_PlatformErrorResponse: + Security_Detections_API_PlatformErrorResponse: type: object properties: error: @@ -34479,7 +33800,7 @@ components: - statusCode - error - message - Security_Solution_Detections_API_ProcessesParams: + Security_Detections_API_ProcessesParams: type: object properties: command: @@ -34504,125 +33825,101 @@ components: required: - command - config - Security_Solution_Detections_API_QueryRule: + Security_Detections_API_QueryRule: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' required: - name - description @@ -34646,176 +33943,142 @@ components: - setup - related_integrations - required_fields - - $ref: '#/components/schemas/Security_Solution_Detections_API_ResponseFields' - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRuleResponseFields - Security_Solution_Detections_API_QueryRuleCreateFields: + - $ref: '#/components/schemas/Security_Detections_API_ResponseFields' + - $ref: '#/components/schemas/Security_Detections_API_QueryRuleResponseFields' + Security_Detections_API_QueryRuleCreateFields: allOf: + - $ref: '#/components/schemas/Security_Detections_API_QueryRuleRequiredFields' + - $ref: '#/components/schemas/Security_Detections_API_QueryRuleOptionalFields' - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRuleRequiredFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRuleOptionalFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRuleDefaultableFields - Security_Solution_Detections_API_QueryRuleCreateProps: + #/components/schemas/Security_Detections_API_QueryRuleDefaultableFields + Security_Detections_API_QueryRuleCreateProps: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' required: - name - description - risk_score - severity - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRuleCreateFields - Security_Solution_Detections_API_QueryRuleDefaultableFields: + - $ref: '#/components/schemas/Security_Detections_API_QueryRuleCreateFields' + Security_Detections_API_QueryRuleDefaultableFields: type: object properties: language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_KqlQueryLanguage + $ref: '#/components/schemas/Security_Detections_API_KqlQueryLanguage' query: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleQuery' - Security_Solution_Detections_API_QueryRuleOptionalFields: + $ref: '#/components/schemas/Security_Detections_API_RuleQuery' + Security_Detections_API_QueryRuleOptionalFields: type: object properties: alert_suppression: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertSuppression + $ref: '#/components/schemas/Security_Detections_API_AlertSuppression' data_view_id: - $ref: '#/components/schemas/Security_Solution_Detections_API_DataViewId' + $ref: '#/components/schemas/Security_Detections_API_DataViewId' filters: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFilterArray + $ref: '#/components/schemas/Security_Detections_API_RuleFilterArray' index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IndexPatternArray + $ref: '#/components/schemas/Security_Detections_API_IndexPatternArray' response_actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ResponseAction + $ref: '#/components/schemas/Security_Detections_API_ResponseAction' type: array saved_id: - $ref: '#/components/schemas/Security_Solution_Detections_API_SavedQueryId' - Security_Solution_Detections_API_QueryRulePatchFields: + $ref: '#/components/schemas/Security_Detections_API_SavedQueryId' + Security_Detections_API_QueryRulePatchFields: allOf: - type: object properties: @@ -34824,138 +34087,110 @@ components: enum: - query type: string + - $ref: '#/components/schemas/Security_Detections_API_QueryRuleOptionalFields' - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRuleOptionalFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRuleDefaultableFields - Security_Solution_Detections_API_QueryRulePatchProps: + #/components/schemas/Security_Detections_API_QueryRuleDefaultableFields + Security_Detections_API_QueryRulePatchProps: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId + $ref: '#/components/schemas/Security_Detections_API_RuleObjectId' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRulePatchFields - Security_Solution_Detections_API_QueryRuleRequiredFields: + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' + - $ref: '#/components/schemas/Security_Detections_API_QueryRulePatchFields' + Security_Detections_API_QueryRuleRequiredFields: type: object properties: type: @@ -34965,155 +34200,125 @@ components: type: string required: - type - Security_Solution_Detections_API_QueryRuleResponseFields: + Security_Detections_API_QueryRuleResponseFields: allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRuleRequiredFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRuleOptionalFields + - $ref: '#/components/schemas/Security_Detections_API_QueryRuleRequiredFields' + - $ref: '#/components/schemas/Security_Detections_API_QueryRuleOptionalFields' - type: object properties: language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_KqlQueryLanguage + $ref: '#/components/schemas/Security_Detections_API_KqlQueryLanguage' query: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleQuery' + $ref: '#/components/schemas/Security_Detections_API_RuleQuery' required: - query - language - Security_Solution_Detections_API_QueryRuleUpdateProps: + Security_Detections_API_QueryRuleUpdateProps: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId + $ref: '#/components/schemas/Security_Detections_API_RuleObjectId' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' required: - name - description - risk_score - severity - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRuleCreateFields - Security_Solution_Detections_API_RelatedIntegration: + - $ref: '#/components/schemas/Security_Detections_API_QueryRuleCreateFields' + Security_Detections_API_RelatedIntegration: description: > Related integration is a potential dependency of a rule. It's assumed that if the user installs @@ -35174,20 +34379,19 @@ components: type: object properties: integration: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' + $ref: '#/components/schemas/Security_Detections_API_NonEmptyString' package: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' + $ref: '#/components/schemas/Security_Detections_API_NonEmptyString' version: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' + $ref: '#/components/schemas/Security_Detections_API_NonEmptyString' required: - package - version - Security_Solution_Detections_API_RelatedIntegrationArray: + Security_Detections_API_RelatedIntegrationArray: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegration + $ref: '#/components/schemas/Security_Detections_API_RelatedIntegration' type: array - Security_Solution_Detections_API_RequiredField: + Security_Detections_API_RequiredField: description: > Describes an Elasticsearch field that is needed for the rule to function. @@ -35228,20 +34432,20 @@ components: description: Whether the field is an ECS field type: boolean name: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' + $ref: '#/components/schemas/Security_Detections_API_NonEmptyString' description: Name of an Elasticsearch field type: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' + $ref: '#/components/schemas/Security_Detections_API_NonEmptyString' description: Type of the Elasticsearch field required: - name - type - ecs - Security_Solution_Detections_API_RequiredFieldArray: + Security_Detections_API_RequiredFieldArray: items: - $ref: '#/components/schemas/Security_Solution_Detections_API_RequiredField' + $ref: '#/components/schemas/Security_Detections_API_RequiredField' type: array - Security_Solution_Detections_API_RequiredFieldInput: + Security_Detections_API_RequiredFieldInput: description: >- Input parameters to create a RequiredField. Does not include the `ecs` field, because `ecs` is calculated on the backend based on the field @@ -35249,21 +34453,19 @@ components: type: object properties: name: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' + $ref: '#/components/schemas/Security_Detections_API_NonEmptyString' description: Name of an Elasticsearch field type: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' + $ref: '#/components/schemas/Security_Detections_API_NonEmptyString' description: Type of an Elasticsearch field required: - name - type - Security_Solution_Detections_API_ResponseAction: + Security_Detections_API_ResponseAction: oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_OsqueryResponseAction - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EndpointResponseAction - Security_Solution_Detections_API_ResponseFields: + - $ref: '#/components/schemas/Security_Detections_API_OsqueryResponseAction' + - $ref: '#/components/schemas/Security_Detections_API_EndpointResponseAction' + Security_Detections_API_ResponseFields: type: object properties: created_at: @@ -35272,24 +34474,20 @@ components: created_by: type: string execution_summary: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExecutionSummary + $ref: '#/components/schemas/Security_Detections_API_RuleExecutionSummary' id: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleObjectId' + $ref: '#/components/schemas/Security_Detections_API_RuleObjectId' immutable: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleImmutable + $ref: '#/components/schemas/Security_Detections_API_IsRuleImmutable' required_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldArray + $ref: '#/components/schemas/Security_Detections_API_RequiredFieldArray' revision: minimum: 0 type: integer rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' rule_source: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleSource' + $ref: '#/components/schemas/Security_Detections_API_RuleSource' updated_at: format: date-time type: string @@ -35306,12 +34504,12 @@ components: - revision - related_integrations - required_fields - Security_Solution_Detections_API_RiskScore: + Security_Detections_API_RiskScore: description: Risk score (0 to 100) maximum: 100 minimum: 0 type: integer - Security_Solution_Detections_API_RiskScoreMapping: + Security_Detections_API_RiskScoreMapping: description: >- Overrides generated alerts' risk_score with a value from the source event @@ -35325,7 +34523,7 @@ components: - equals type: string risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' value: type: string required: @@ -35333,66 +34531,60 @@ components: - operator - value type: array - Security_Solution_Detections_API_RuleAction: + Security_Detections_API_RuleAction: type: object properties: action_type_id: description: The action type used for sending notifications. type: string alerts_filter: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionAlertsFilter + $ref: '#/components/schemas/Security_Detections_API_RuleActionAlertsFilter' frequency: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionFrequency + $ref: '#/components/schemas/Security_Detections_API_RuleActionFrequency' group: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionGroup + $ref: '#/components/schemas/Security_Detections_API_RuleActionGroup' id: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleActionId' + $ref: '#/components/schemas/Security_Detections_API_RuleActionId' params: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionParams + $ref: '#/components/schemas/Security_Detections_API_RuleActionParams' uuid: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' + $ref: '#/components/schemas/Security_Detections_API_NonEmptyString' required: - action_type_id - id - params - Security_Solution_Detections_API_RuleActionAlertsFilter: + Security_Detections_API_RuleActionAlertsFilter: additionalProperties: true type: object - Security_Solution_Detections_API_RuleActionFrequency: + Security_Detections_API_RuleActionFrequency: description: >- The action frequency defines when the action runs (for example, only on rule execution or at specific time intervals). type: object properties: notifyWhen: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionNotifyWhen + $ref: '#/components/schemas/Security_Detections_API_RuleActionNotifyWhen' summary: description: >- Action summary indicates whether we will send a summary notification about all the generate alerts or notification per individual alert type: boolean throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' nullable: true required: - summary - notifyWhen - throttle - Security_Solution_Detections_API_RuleActionGroup: + Security_Detections_API_RuleActionGroup: description: >- Optionally groups actions by use cases. Use `default` for alert notifications. type: string - Security_Solution_Detections_API_RuleActionId: + Security_Detections_API_RuleActionId: description: The connector ID. type: string - Security_Solution_Detections_API_RuleActionNotifyWhen: + Security_Detections_API_RuleActionNotifyWhen: description: >- The condition for throttling the notification: `onActionGroupChange`, `onActiveAlert`, or `onThrottleInterval` @@ -35401,13 +34593,13 @@ components: - onThrottleInterval - onActionGroupChange type: string - Security_Solution_Detections_API_RuleActionParams: + Security_Detections_API_RuleActionParams: additionalProperties: true description: >- Object containing the allowed connector fields, which varies according to the connector type. type: object - Security_Solution_Detections_API_RuleActionThrottle: + Security_Detections_API_RuleActionThrottle: description: Defines how often rule actions are taken. oneOf: - enum: @@ -35418,34 +34610,30 @@ components: example: 1h pattern: ^[1-9]\d*[smhd]$ type: string - Security_Solution_Detections_API_RuleAuthorArray: + Security_Detections_API_RuleAuthorArray: items: type: string type: array - Security_Solution_Detections_API_RuleCreateProps: + Security_Detections_API_RuleCreateProps: anyOf: + - $ref: '#/components/schemas/Security_Detections_API_EqlRuleCreateProps' + - $ref: '#/components/schemas/Security_Detections_API_QueryRuleCreateProps' - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlRuleCreateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRuleCreateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRuleCreateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRuleCreateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRuleCreateProps + #/components/schemas/Security_Detections_API_SavedQueryRuleCreateProps - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRuleCreateProps + #/components/schemas/Security_Detections_API_ThresholdRuleCreateProps - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRuleCreateProps + #/components/schemas/Security_Detections_API_ThreatMatchRuleCreateProps - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlRuleCreateProps + #/components/schemas/Security_Detections_API_MachineLearningRuleCreateProps + - $ref: '#/components/schemas/Security_Detections_API_NewTermsRuleCreateProps' + - $ref: '#/components/schemas/Security_Detections_API_EsqlRuleCreateProps' discriminator: propertyName: type - Security_Solution_Detections_API_RuleDescription: + Security_Detections_API_RuleDescription: minLength: 1 type: string - Security_Solution_Detections_API_RuleDetailsInError: + Security_Detections_API_RuleDetailsInError: type: object properties: id: @@ -35454,14 +34642,14 @@ components: type: string required: - id - Security_Solution_Detections_API_RuleExceptionList: + Security_Detections_API_RuleExceptionList: type: object properties: id: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' + $ref: '#/components/schemas/Security_Detections_API_NonEmptyString' description: ID of the exception container list_id: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' + $ref: '#/components/schemas/Security_Detections_API_NonEmptyString' description: List ID of the exception container namespace_type: description: Determines the exceptions validity in rule's Kibana space @@ -35470,14 +34658,13 @@ components: - single type: string type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ExceptionListType + $ref: '#/components/schemas/Security_Detections_API_ExceptionListType' required: - id - list_id - type - namespace_type - Security_Solution_Detections_API_RuleExecutionMetrics: + Security_Detections_API_RuleExecutionMetrics: type: object properties: execution_gap_duration_s: @@ -35503,7 +34690,7 @@ components: request/response minimum: 0 type: integer - Security_Solution_Detections_API_RuleExecutionStatus: + Security_Detections_API_RuleExecutionStatus: description: >- Custom execution status of Security rules that is different from the status used in the Alerting Framework. We merge our custom status with @@ -35536,9 +34723,9 @@ components: - failed - succeeded type: string - Security_Solution_Detections_API_RuleExecutionStatusOrder: + Security_Detections_API_RuleExecutionStatusOrder: type: integer - Security_Solution_Detections_API_RuleExecutionSummary: + Security_Detections_API_RuleExecutionSummary: type: object properties: last_execution: @@ -35552,14 +34739,13 @@ components: type: string metrics: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExecutionMetrics + #/components/schemas/Security_Detections_API_RuleExecutionMetrics status: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExecutionStatus + $ref: '#/components/schemas/Security_Detections_API_RuleExecutionStatus' description: Status of the last execution status_order: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExecutionStatusOrder + #/components/schemas/Security_Detections_API_RuleExecutionStatusOrder required: - date - status @@ -35568,19 +34754,19 @@ components: - metrics required: - last_execution - Security_Solution_Detections_API_RuleFalsePositiveArray: + Security_Detections_API_RuleFalsePositiveArray: items: type: string type: array - Security_Solution_Detections_API_RuleFilterArray: + Security_Detections_API_RuleFilterArray: items: {} type: array - Security_Solution_Detections_API_RuleInterval: + Security_Detections_API_RuleInterval: description: >- Frequency of rule execution, using a date math range. For example, "1h" means the rule runs every hour. Defaults to 5m (5 minutes). type: string - Security_Solution_Detections_API_RuleIntervalFrom: + Security_Detections_API_RuleIntervalFrom: description: >- Time from which data is analyzed each time the rule runs, using a date math range. For example, now-4200s means the rule analyzes data from 70 @@ -35588,52 +34774,47 @@ components: minutes before the start time). format: date-math type: string - Security_Solution_Detections_API_RuleIntervalTo: + Security_Detections_API_RuleIntervalTo: type: string - Security_Solution_Detections_API_RuleLicense: + Security_Detections_API_RuleLicense: description: The rule's license. type: string - Security_Solution_Detections_API_RuleMetadata: + Security_Detections_API_RuleMetadata: additionalProperties: true type: object - Security_Solution_Detections_API_RuleName: + Security_Detections_API_RuleName: minLength: 1 type: string - Security_Solution_Detections_API_RuleNameOverride: + Security_Detections_API_RuleNameOverride: description: Sets the source field for the alert's signal.rule.name value type: string - Security_Solution_Detections_API_RuleObjectId: - $ref: '#/components/schemas/Security_Solution_Detections_API_UUID' - Security_Solution_Detections_API_RulePatchProps: + Security_Detections_API_RuleObjectId: + $ref: '#/components/schemas/Security_Detections_API_UUID' + Security_Detections_API_RulePatchProps: anyOf: + - $ref: '#/components/schemas/Security_Detections_API_EqlRulePatchProps' + - $ref: '#/components/schemas/Security_Detections_API_QueryRulePatchProps' - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlRulePatchProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRulePatchProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRulePatchProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRulePatchProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRulePatchProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRulePatchProps + #/components/schemas/Security_Detections_API_SavedQueryRulePatchProps + - $ref: '#/components/schemas/Security_Detections_API_ThresholdRulePatchProps' - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRulePatchProps + #/components/schemas/Security_Detections_API_ThreatMatchRulePatchProps - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlRulePatchProps - Security_Solution_Detections_API_RulePreviewLoggedRequest: + #/components/schemas/Security_Detections_API_MachineLearningRulePatchProps + - $ref: '#/components/schemas/Security_Detections_API_NewTermsRulePatchProps' + - $ref: '#/components/schemas/Security_Detections_API_EsqlRulePatchProps' + Security_Detections_API_RulePreviewLoggedRequest: type: object properties: description: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' + $ref: '#/components/schemas/Security_Detections_API_NonEmptyString' duration: type: integer request: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' + $ref: '#/components/schemas/Security_Detections_API_NonEmptyString' required: - request - Security_Solution_Detections_API_RulePreviewLogs: + Security_Detections_API_RulePreviewLogs: type: object properties: duration: @@ -35641,26 +34822,24 @@ components: type: integer errors: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NonEmptyString + $ref: '#/components/schemas/Security_Detections_API_NonEmptyString' type: array requests: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RulePreviewLoggedRequest + #/components/schemas/Security_Detections_API_RulePreviewLoggedRequest type: array startedAt: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' + $ref: '#/components/schemas/Security_Detections_API_NonEmptyString' warnings: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NonEmptyString + $ref: '#/components/schemas/Security_Detections_API_NonEmptyString' type: array required: - errors - warnings - duration - Security_Solution_Detections_API_RulePreviewParams: + Security_Detections_API_RulePreviewParams: type: object properties: invocationCount: @@ -35671,30 +34850,28 @@ components: required: - invocationCount - timeframeEnd - Security_Solution_Detections_API_RuleQuery: + Security_Detections_API_RuleQuery: type: string - Security_Solution_Detections_API_RuleReferenceArray: + Security_Detections_API_RuleReferenceArray: items: type: string type: array - Security_Solution_Detections_API_RuleResponse: + Security_Detections_API_RuleResponse: anyOf: - - $ref: '#/components/schemas/Security_Solution_Detections_API_EqlRule' - - $ref: '#/components/schemas/Security_Solution_Detections_API_QueryRule' - - $ref: '#/components/schemas/Security_Solution_Detections_API_SavedQueryRule' - - $ref: '#/components/schemas/Security_Solution_Detections_API_ThresholdRule' - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRule - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRule - - $ref: '#/components/schemas/Security_Solution_Detections_API_NewTermsRule' - - $ref: '#/components/schemas/Security_Solution_Detections_API_EsqlRule' + - $ref: '#/components/schemas/Security_Detections_API_EqlRule' + - $ref: '#/components/schemas/Security_Detections_API_QueryRule' + - $ref: '#/components/schemas/Security_Detections_API_SavedQueryRule' + - $ref: '#/components/schemas/Security_Detections_API_ThresholdRule' + - $ref: '#/components/schemas/Security_Detections_API_ThreatMatchRule' + - $ref: '#/components/schemas/Security_Detections_API_MachineLearningRule' + - $ref: '#/components/schemas/Security_Detections_API_NewTermsRule' + - $ref: '#/components/schemas/Security_Detections_API_EsqlRule' discriminator: propertyName: type - Security_Solution_Detections_API_RuleSignatureId: + Security_Detections_API_RuleSignatureId: description: Could be any string, not necessarily a UUID type: string - Security_Solution_Detections_API_RuleSource: + Security_Detections_API_RuleSource: description: >- Discriminated union that determines whether the rule is internally sourced (created within the Kibana app) or has an external source, such @@ -35702,175 +34879,145 @@ components: discriminator: propertyName: type oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ExternalRuleSource - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InternalRuleSource - Security_Solution_Detections_API_RuleTagArray: + - $ref: '#/components/schemas/Security_Detections_API_ExternalRuleSource' + - $ref: '#/components/schemas/Security_Detections_API_InternalRuleSource' + Security_Detections_API_RuleTagArray: description: >- String array containing words and phrases to help categorize, filter, and search rules. Defaults to an empty array. items: type: string type: array - Security_Solution_Detections_API_RuleUpdateProps: + Security_Detections_API_RuleUpdateProps: anyOf: + - $ref: '#/components/schemas/Security_Detections_API_EqlRuleUpdateProps' + - $ref: '#/components/schemas/Security_Detections_API_QueryRuleUpdateProps' - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlRuleUpdateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRuleUpdateProps + #/components/schemas/Security_Detections_API_SavedQueryRuleUpdateProps - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRuleUpdateProps + #/components/schemas/Security_Detections_API_ThresholdRuleUpdateProps - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRuleUpdateProps + #/components/schemas/Security_Detections_API_ThreatMatchRuleUpdateProps - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRuleUpdateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRuleUpdateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRuleUpdateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlRuleUpdateProps + #/components/schemas/Security_Detections_API_MachineLearningRuleUpdateProps + - $ref: '#/components/schemas/Security_Detections_API_NewTermsRuleUpdateProps' + - $ref: '#/components/schemas/Security_Detections_API_EsqlRuleUpdateProps' discriminator: propertyName: type - Security_Solution_Detections_API_RuleVersion: + Security_Detections_API_RuleVersion: description: The rule's version number. minimum: 1 type: integer - Security_Solution_Detections_API_SavedObjectResolveAliasPurpose: + Security_Detections_API_SavedObjectResolveAliasPurpose: enum: - savedObjectConversion - savedObjectImport type: string - Security_Solution_Detections_API_SavedObjectResolveAliasTargetId: + Security_Detections_API_SavedObjectResolveAliasTargetId: type: string - Security_Solution_Detections_API_SavedObjectResolveOutcome: + Security_Detections_API_SavedObjectResolveOutcome: enum: - exactMatch - aliasMatch - conflict type: string - Security_Solution_Detections_API_SavedQueryId: + Security_Detections_API_SavedQueryId: type: string - Security_Solution_Detections_API_SavedQueryRule: + Security_Detections_API_SavedQueryRule: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' required: - name - description @@ -35894,321 +35041,264 @@ components: - setup - related_integrations - required_fields - - $ref: '#/components/schemas/Security_Solution_Detections_API_ResponseFields' + - $ref: '#/components/schemas/Security_Detections_API_ResponseFields' - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRuleResponseFields - Security_Solution_Detections_API_SavedQueryRuleCreateFields: + #/components/schemas/Security_Detections_API_SavedQueryRuleResponseFields + Security_Detections_API_SavedQueryRuleCreateFields: allOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRuleRequiredFields + #/components/schemas/Security_Detections_API_SavedQueryRuleRequiredFields - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRuleOptionalFields + #/components/schemas/Security_Detections_API_SavedQueryRuleOptionalFields - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRuleDefaultableFields - Security_Solution_Detections_API_SavedQueryRuleCreateProps: + #/components/schemas/Security_Detections_API_SavedQueryRuleDefaultableFields + Security_Detections_API_SavedQueryRuleCreateProps: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' required: - name - description - risk_score - severity - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRuleCreateFields - Security_Solution_Detections_API_SavedQueryRuleDefaultableFields: + #/components/schemas/Security_Detections_API_SavedQueryRuleCreateFields + Security_Detections_API_SavedQueryRuleDefaultableFields: type: object properties: language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_KqlQueryLanguage - Security_Solution_Detections_API_SavedQueryRuleOptionalFields: + $ref: '#/components/schemas/Security_Detections_API_KqlQueryLanguage' + Security_Detections_API_SavedQueryRuleOptionalFields: type: object properties: alert_suppression: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertSuppression + $ref: '#/components/schemas/Security_Detections_API_AlertSuppression' data_view_id: - $ref: '#/components/schemas/Security_Solution_Detections_API_DataViewId' + $ref: '#/components/schemas/Security_Detections_API_DataViewId' filters: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFilterArray + $ref: '#/components/schemas/Security_Detections_API_RuleFilterArray' index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IndexPatternArray + $ref: '#/components/schemas/Security_Detections_API_IndexPatternArray' query: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleQuery' + $ref: '#/components/schemas/Security_Detections_API_RuleQuery' response_actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ResponseAction + $ref: '#/components/schemas/Security_Detections_API_ResponseAction' type: array - Security_Solution_Detections_API_SavedQueryRulePatchFields: + Security_Detections_API_SavedQueryRulePatchFields: allOf: - type: object properties: saved_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryId + $ref: '#/components/schemas/Security_Detections_API_SavedQueryId' type: description: Rule type enum: - saved_query type: string - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRuleOptionalFields + #/components/schemas/Security_Detections_API_SavedQueryRuleOptionalFields - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRuleDefaultableFields - Security_Solution_Detections_API_SavedQueryRulePatchProps: + #/components/schemas/Security_Detections_API_SavedQueryRuleDefaultableFields + Security_Detections_API_SavedQueryRulePatchProps: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId + $ref: '#/components/schemas/Security_Detections_API_RuleObjectId' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRulePatchFields - Security_Solution_Detections_API_SavedQueryRuleRequiredFields: + #/components/schemas/Security_Detections_API_SavedQueryRulePatchFields + Security_Detections_API_SavedQueryRuleRequiredFields: type: object properties: saved_id: - $ref: '#/components/schemas/Security_Solution_Detections_API_SavedQueryId' + $ref: '#/components/schemas/Security_Detections_API_SavedQueryId' type: description: Rule type enum: @@ -36217,166 +35307,138 @@ components: required: - type - saved_id - Security_Solution_Detections_API_SavedQueryRuleResponseFields: + Security_Detections_API_SavedQueryRuleResponseFields: allOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRuleRequiredFields + #/components/schemas/Security_Detections_API_SavedQueryRuleRequiredFields - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRuleOptionalFields + #/components/schemas/Security_Detections_API_SavedQueryRuleOptionalFields - type: object properties: language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_KqlQueryLanguage + $ref: '#/components/schemas/Security_Detections_API_KqlQueryLanguage' required: - language - Security_Solution_Detections_API_SavedQueryRuleUpdateProps: + Security_Detections_API_SavedQueryRuleUpdateProps: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId + $ref: '#/components/schemas/Security_Detections_API_RuleObjectId' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' required: - name - description - risk_score - severity - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRuleCreateFields - Security_Solution_Detections_API_SetAlertsStatusByIds: + #/components/schemas/Security_Detections_API_SavedQueryRuleCreateFields + Security_Detections_API_SetAlertsStatusByIds: type: object properties: signal_ids: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NonEmptyString + $ref: '#/components/schemas/Security_Detections_API_NonEmptyString' minItems: 1 type: array status: - $ref: '#/components/schemas/Security_Solution_Detections_API_AlertStatus' + $ref: '#/components/schemas/Security_Detections_API_AlertStatus' required: - signal_ids - status - Security_Solution_Detections_API_SetAlertsStatusByQuery: + Security_Detections_API_SetAlertsStatusByQuery: type: object properties: conflicts: @@ -36389,23 +35451,23 @@ components: additionalProperties: true type: object status: - $ref: '#/components/schemas/Security_Solution_Detections_API_AlertStatus' + $ref: '#/components/schemas/Security_Detections_API_AlertStatus' required: - query - status - Security_Solution_Detections_API_SetAlertTags: + Security_Detections_API_SetAlertTags: type: object properties: tags_to_add: - $ref: '#/components/schemas/Security_Solution_Detections_API_AlertTags' + $ref: '#/components/schemas/Security_Detections_API_AlertTags' tags_to_remove: - $ref: '#/components/schemas/Security_Solution_Detections_API_AlertTags' + $ref: '#/components/schemas/Security_Detections_API_AlertTags' required: - tags_to_add - tags_to_remove - Security_Solution_Detections_API_SetupGuide: + Security_Detections_API_SetupGuide: type: string - Security_Solution_Detections_API_Severity: + Security_Detections_API_Severity: description: Severity of the rule enum: - low @@ -36413,7 +35475,7 @@ components: - high - critical type: string - Security_Solution_Detections_API_SeverityMapping: + Security_Detections_API_SeverityMapping: description: Overrides generated alerts' severity with values from the source event items: type: object @@ -36425,7 +35487,7 @@ components: - equals type: string severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' value: type: string required: @@ -36434,7 +35496,7 @@ components: - severity - value type: array - Security_Solution_Detections_API_SiemErrorResponse: + Security_Detections_API_SiemErrorResponse: type: object properties: message: @@ -36444,55 +35506,54 @@ components: required: - status_code - message - Security_Solution_Detections_API_SkippedAlertsIndexMigration: + Security_Detections_API_SkippedAlertsIndexMigration: type: object properties: index: type: string required: - index - Security_Solution_Detections_API_SortOrder: + Security_Detections_API_SortOrder: enum: - asc - desc type: string - Security_Solution_Detections_API_Threat: + Security_Detections_API_Threat: type: object properties: framework: description: Relevant attack framework type: string tactic: - $ref: '#/components/schemas/Security_Solution_Detections_API_ThreatTactic' + $ref: '#/components/schemas/Security_Detections_API_ThreatTactic' technique: description: Array containing information on the attack techniques (optional) items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatTechnique + $ref: '#/components/schemas/Security_Detections_API_ThreatTechnique' type: array required: - framework - tactic - Security_Solution_Detections_API_ThreatArray: + Security_Detections_API_ThreatArray: items: - $ref: '#/components/schemas/Security_Solution_Detections_API_Threat' + $ref: '#/components/schemas/Security_Detections_API_Threat' type: array - Security_Solution_Detections_API_ThreatFilters: + Security_Detections_API_ThreatFilters: items: description: >- Query and filter context array used to filter documents from the Elasticsearch index containing the threat values type: array - Security_Solution_Detections_API_ThreatIndex: + Security_Detections_API_ThreatIndex: items: type: string type: array - Security_Solution_Detections_API_ThreatIndicatorPath: + Security_Detections_API_ThreatIndicatorPath: description: >- Defines the path to the threat indicator in the indicator documents (optional) type: string - Security_Solution_Detections_API_ThreatMapping: + Security_Detections_API_ThreatMapping: items: type: object properties: @@ -36501,15 +35562,13 @@ components: type: object properties: field: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NonEmptyString + $ref: '#/components/schemas/Security_Detections_API_NonEmptyString' type: enum: - mapping type: string value: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NonEmptyString + $ref: '#/components/schemas/Security_Detections_API_NonEmptyString' required: - field - type @@ -36519,125 +35578,101 @@ components: - entries minItems: 1 type: array - Security_Solution_Detections_API_ThreatMatchRule: + Security_Detections_API_ThreatMatchRule: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' required: - name - description @@ -36661,343 +35696,282 @@ components: - setup - related_integrations - required_fields - - $ref: '#/components/schemas/Security_Solution_Detections_API_ResponseFields' + - $ref: '#/components/schemas/Security_Detections_API_ResponseFields' - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRuleResponseFields - Security_Solution_Detections_API_ThreatMatchRuleCreateFields: + #/components/schemas/Security_Detections_API_ThreatMatchRuleResponseFields + Security_Detections_API_ThreatMatchRuleCreateFields: allOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRuleRequiredFields + #/components/schemas/Security_Detections_API_ThreatMatchRuleRequiredFields - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRuleOptionalFields + #/components/schemas/Security_Detections_API_ThreatMatchRuleOptionalFields - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRuleDefaultableFields - Security_Solution_Detections_API_ThreatMatchRuleCreateProps: + #/components/schemas/Security_Detections_API_ThreatMatchRuleDefaultableFields + Security_Detections_API_ThreatMatchRuleCreateProps: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' required: - name - description - risk_score - severity - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRuleCreateFields - Security_Solution_Detections_API_ThreatMatchRuleDefaultableFields: + #/components/schemas/Security_Detections_API_ThreatMatchRuleCreateFields + Security_Detections_API_ThreatMatchRuleDefaultableFields: type: object properties: language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_KqlQueryLanguage - Security_Solution_Detections_API_ThreatMatchRuleOptionalFields: + $ref: '#/components/schemas/Security_Detections_API_KqlQueryLanguage' + Security_Detections_API_ThreatMatchRuleOptionalFields: type: object properties: alert_suppression: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertSuppression + $ref: '#/components/schemas/Security_Detections_API_AlertSuppression' concurrent_searches: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ConcurrentSearches + $ref: '#/components/schemas/Security_Detections_API_ConcurrentSearches' data_view_id: - $ref: '#/components/schemas/Security_Solution_Detections_API_DataViewId' + $ref: '#/components/schemas/Security_Detections_API_DataViewId' filters: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFilterArray + $ref: '#/components/schemas/Security_Detections_API_RuleFilterArray' index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IndexPatternArray + $ref: '#/components/schemas/Security_Detections_API_IndexPatternArray' items_per_search: - $ref: '#/components/schemas/Security_Solution_Detections_API_ItemsPerSearch' + $ref: '#/components/schemas/Security_Detections_API_ItemsPerSearch' saved_id: - $ref: '#/components/schemas/Security_Solution_Detections_API_SavedQueryId' + $ref: '#/components/schemas/Security_Detections_API_SavedQueryId' threat_filters: - $ref: '#/components/schemas/Security_Solution_Detections_API_ThreatFilters' + $ref: '#/components/schemas/Security_Detections_API_ThreatFilters' threat_indicator_path: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatIndicatorPath + $ref: '#/components/schemas/Security_Detections_API_ThreatIndicatorPath' threat_language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_KqlQueryLanguage - Security_Solution_Detections_API_ThreatMatchRulePatchFields: + $ref: '#/components/schemas/Security_Detections_API_KqlQueryLanguage' + Security_Detections_API_ThreatMatchRulePatchFields: allOf: - type: object properties: query: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleQuery' + $ref: '#/components/schemas/Security_Detections_API_RuleQuery' threat_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatIndex + $ref: '#/components/schemas/Security_Detections_API_ThreatIndex' threat_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMapping + $ref: '#/components/schemas/Security_Detections_API_ThreatMapping' threat_query: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatQuery + $ref: '#/components/schemas/Security_Detections_API_ThreatQuery' type: description: Rule type enum: - threat_match type: string - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRuleOptionalFields + #/components/schemas/Security_Detections_API_ThreatMatchRuleOptionalFields - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRuleDefaultableFields - Security_Solution_Detections_API_ThreatMatchRulePatchProps: + #/components/schemas/Security_Detections_API_ThreatMatchRuleDefaultableFields + Security_Detections_API_ThreatMatchRulePatchProps: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId + $ref: '#/components/schemas/Security_Detections_API_RuleObjectId' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRulePatchFields - Security_Solution_Detections_API_ThreatMatchRuleRequiredFields: + #/components/schemas/Security_Detections_API_ThreatMatchRulePatchFields + Security_Detections_API_ThreatMatchRuleRequiredFields: type: object properties: query: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleQuery' + $ref: '#/components/schemas/Security_Detections_API_RuleQuery' threat_index: - $ref: '#/components/schemas/Security_Solution_Detections_API_ThreatIndex' + $ref: '#/components/schemas/Security_Detections_API_ThreatIndex' threat_mapping: - $ref: '#/components/schemas/Security_Solution_Detections_API_ThreatMapping' + $ref: '#/components/schemas/Security_Detections_API_ThreatMapping' threat_query: - $ref: '#/components/schemas/Security_Solution_Detections_API_ThreatQuery' + $ref: '#/components/schemas/Security_Detections_API_ThreatQuery' type: description: Rule type enum: @@ -37009,155 +35983,128 @@ components: - threat_query - threat_mapping - threat_index - Security_Solution_Detections_API_ThreatMatchRuleResponseFields: + Security_Detections_API_ThreatMatchRuleResponseFields: allOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRuleRequiredFields + #/components/schemas/Security_Detections_API_ThreatMatchRuleRequiredFields - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRuleOptionalFields + #/components/schemas/Security_Detections_API_ThreatMatchRuleOptionalFields - type: object properties: language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_KqlQueryLanguage + $ref: '#/components/schemas/Security_Detections_API_KqlQueryLanguage' required: - language - Security_Solution_Detections_API_ThreatMatchRuleUpdateProps: + Security_Detections_API_ThreatMatchRuleUpdateProps: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId + $ref: '#/components/schemas/Security_Detections_API_RuleObjectId' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' required: - name - description - risk_score - severity - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRuleCreateFields - Security_Solution_Detections_API_ThreatQuery: + #/components/schemas/Security_Detections_API_ThreatMatchRuleCreateFields + Security_Detections_API_ThreatQuery: description: Query to run type: string - Security_Solution_Detections_API_ThreatSubtechnique: + Security_Detections_API_ThreatSubtechnique: type: object properties: id: @@ -37173,7 +36120,7 @@ components: - id - name - reference - Security_Solution_Detections_API_ThreatTactic: + Security_Detections_API_ThreatTactic: type: object properties: id: @@ -37189,7 +36136,7 @@ components: - id - name - reference - Security_Solution_Detections_API_ThreatTechnique: + Security_Detections_API_ThreatTechnique: type: object properties: id: @@ -37204,35 +36151,33 @@ components: subtechnique: description: Array containing more specific information on the attack technique items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatSubtechnique + $ref: '#/components/schemas/Security_Detections_API_ThreatSubtechnique' type: array required: - id - name - reference - Security_Solution_Detections_API_Threshold: + Security_Detections_API_Threshold: type: object properties: cardinality: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdCardinality + $ref: '#/components/schemas/Security_Detections_API_ThresholdCardinality' field: - $ref: '#/components/schemas/Security_Solution_Detections_API_ThresholdField' + $ref: '#/components/schemas/Security_Detections_API_ThresholdField' value: - $ref: '#/components/schemas/Security_Solution_Detections_API_ThresholdValue' + $ref: '#/components/schemas/Security_Detections_API_ThresholdValue' required: - field - value - Security_Solution_Detections_API_ThresholdAlertSuppression: + Security_Detections_API_ThresholdAlertSuppression: type: object properties: duration: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertSuppressionDuration + #/components/schemas/Security_Detections_API_AlertSuppressionDuration required: - duration - Security_Solution_Detections_API_ThresholdCardinality: + Security_Detections_API_ThresholdCardinality: items: type: object properties: @@ -37245,132 +36190,108 @@ components: - field - value type: array - Security_Solution_Detections_API_ThresholdField: + Security_Detections_API_ThresholdField: description: Field to aggregate on oneOf: - type: string - items: type: string type: array - Security_Solution_Detections_API_ThresholdRule: + Security_Detections_API_ThresholdRule: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' required: - name - description @@ -37394,319 +36315,265 @@ components: - setup - related_integrations - required_fields - - $ref: '#/components/schemas/Security_Solution_Detections_API_ResponseFields' + - $ref: '#/components/schemas/Security_Detections_API_ResponseFields' - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRuleResponseFields - Security_Solution_Detections_API_ThresholdRuleCreateFields: + #/components/schemas/Security_Detections_API_ThresholdRuleResponseFields + Security_Detections_API_ThresholdRuleCreateFields: allOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRuleRequiredFields + #/components/schemas/Security_Detections_API_ThresholdRuleRequiredFields - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRuleOptionalFields + #/components/schemas/Security_Detections_API_ThresholdRuleOptionalFields - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRuleDefaultableFields - Security_Solution_Detections_API_ThresholdRuleCreateProps: + #/components/schemas/Security_Detections_API_ThresholdRuleDefaultableFields + Security_Detections_API_ThresholdRuleCreateProps: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' required: - name - description - risk_score - severity - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRuleCreateFields - Security_Solution_Detections_API_ThresholdRuleDefaultableFields: + #/components/schemas/Security_Detections_API_ThresholdRuleCreateFields + Security_Detections_API_ThresholdRuleDefaultableFields: type: object properties: language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_KqlQueryLanguage - Security_Solution_Detections_API_ThresholdRuleOptionalFields: + $ref: '#/components/schemas/Security_Detections_API_KqlQueryLanguage' + Security_Detections_API_ThresholdRuleOptionalFields: type: object properties: alert_suppression: $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdAlertSuppression + #/components/schemas/Security_Detections_API_ThresholdAlertSuppression data_view_id: - $ref: '#/components/schemas/Security_Solution_Detections_API_DataViewId' + $ref: '#/components/schemas/Security_Detections_API_DataViewId' filters: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFilterArray + $ref: '#/components/schemas/Security_Detections_API_RuleFilterArray' index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IndexPatternArray + $ref: '#/components/schemas/Security_Detections_API_IndexPatternArray' saved_id: - $ref: '#/components/schemas/Security_Solution_Detections_API_SavedQueryId' - Security_Solution_Detections_API_ThresholdRulePatchFields: + $ref: '#/components/schemas/Security_Detections_API_SavedQueryId' + Security_Detections_API_ThresholdRulePatchFields: allOf: - type: object properties: query: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleQuery' + $ref: '#/components/schemas/Security_Detections_API_RuleQuery' threshold: - $ref: '#/components/schemas/Security_Solution_Detections_API_Threshold' + $ref: '#/components/schemas/Security_Detections_API_Threshold' type: description: Rule type enum: - threshold type: string - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRuleOptionalFields + #/components/schemas/Security_Detections_API_ThresholdRuleOptionalFields - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRuleDefaultableFields - Security_Solution_Detections_API_ThresholdRulePatchProps: + #/components/schemas/Security_Detections_API_ThresholdRuleDefaultableFields + Security_Detections_API_ThresholdRulePatchProps: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId + $ref: '#/components/schemas/Security_Detections_API_RuleObjectId' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRulePatchFields - Security_Solution_Detections_API_ThresholdRuleRequiredFields: + #/components/schemas/Security_Detections_API_ThresholdRulePatchFields + Security_Detections_API_ThresholdRuleRequiredFields: type: object properties: query: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleQuery' + $ref: '#/components/schemas/Security_Detections_API_RuleQuery' threshold: - $ref: '#/components/schemas/Security_Solution_Detections_API_Threshold' + $ref: '#/components/schemas/Security_Detections_API_Threshold' type: description: Rule type enum: @@ -37716,156 +36583,129 @@ components: - type - query - threshold - Security_Solution_Detections_API_ThresholdRuleResponseFields: + Security_Detections_API_ThresholdRuleResponseFields: allOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRuleRequiredFields + #/components/schemas/Security_Detections_API_ThresholdRuleRequiredFields - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRuleOptionalFields + #/components/schemas/Security_Detections_API_ThresholdRuleOptionalFields - type: object properties: language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_KqlQueryLanguage + $ref: '#/components/schemas/Security_Detections_API_KqlQueryLanguage' required: - language - Security_Solution_Detections_API_ThresholdRuleUpdateProps: + Security_Detections_API_ThresholdRuleUpdateProps: allOf: - type: object properties: actions: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + $ref: '#/components/schemas/Security_Detections_API_RuleAction' type: array alias_purpose: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasPurpose alias_target_id: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId + #/components/schemas/Security_Detections_API_SavedObjectResolveAliasTargetId author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray + $ref: '#/components/schemas/Security_Detections_API_RuleAuthorArray' building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + $ref: '#/components/schemas/Security_Detections_API_BuildingBlockType' description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription + $ref: '#/components/schemas/Security_Detections_API_RuleDescription' enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled + $ref: '#/components/schemas/Security_Detections_API_IsRuleEnabled' exceptions_list: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + $ref: '#/components/schemas/Security_Detections_API_RuleExceptionList' type: array false_positives: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray + #/components/schemas/Security_Detections_API_RuleFalsePositiveArray from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalFrom' id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId + $ref: '#/components/schemas/Security_Detections_API_RuleObjectId' interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval + $ref: '#/components/schemas/Security_Detections_API_RuleInterval' investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + $ref: '#/components/schemas/Security_Detections_API_InvestigationFields' license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense + $ref: '#/components/schemas/Security_Detections_API_RuleLicense' max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' + $ref: '#/components/schemas/Security_Detections_API_MaxSignals' meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata + $ref: '#/components/schemas/Security_Detections_API_RuleMetadata' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' + $ref: '#/components/schemas/Security_Detections_API_RuleName' namespace: $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + #/components/schemas/Security_Detections_API_AlertsIndexNamespace note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide + $ref: '#/components/schemas/Security_Detections_API_InvestigationGuide' outcome: $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome + #/components/schemas/Security_Detections_API_SavedObjectResolveOutcome output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex + $ref: '#/components/schemas/Security_Detections_API_AlertsIndex' references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray + $ref: '#/components/schemas/Security_Detections_API_RuleReferenceArray' related_integrations: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray + #/components/schemas/Security_Detections_API_RelatedIntegrationArray required_fields: items: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + #/components/schemas/Security_Detections_API_RequiredFieldInput type: array risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' + $ref: '#/components/schemas/Security_Detections_API_RiskScore' risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping + $ref: '#/components/schemas/Security_Detections_API_RiskScoreMapping' rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + $ref: '#/components/schemas/Security_Detections_API_RuleSignatureId' rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride + $ref: '#/components/schemas/Security_Detections_API_RuleNameOverride' setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' + $ref: '#/components/schemas/Security_Detections_API_SetupGuide' severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' + $ref: '#/components/schemas/Security_Detections_API_Severity' severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping + $ref: '#/components/schemas/Security_Detections_API_SeverityMapping' tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray + $ref: '#/components/schemas/Security_Detections_API_RuleTagArray' threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray + $ref: '#/components/schemas/Security_Detections_API_ThreatArray' throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle + $ref: '#/components/schemas/Security_Detections_API_RuleActionThrottle' timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId + $ref: '#/components/schemas/Security_Detections_API_TimelineTemplateId' timeline_title: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle + #/components/schemas/Security_Detections_API_TimelineTemplateTitle timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride + $ref: '#/components/schemas/Security_Detections_API_TimestampOverride' timestamp_override_fallback_disabled: $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled + #/components/schemas/Security_Detections_API_TimestampOverrideFallbackDisabled to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo + $ref: '#/components/schemas/Security_Detections_API_RuleIntervalTo' version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + $ref: '#/components/schemas/Security_Detections_API_RuleVersion' required: - name - description - risk_score - severity - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRuleCreateFields - Security_Solution_Detections_API_ThresholdValue: + #/components/schemas/Security_Detections_API_ThresholdRuleCreateFields + Security_Detections_API_ThresholdValue: description: Threshold value minimum: 1 type: integer - Security_Solution_Detections_API_ThrottleForBulkActions: + Security_Detections_API_ThrottleForBulkActions: description: >- The condition for throttling the notification: 'rule', 'no_actions', or time duration @@ -37875,29 +36715,29 @@ components: - 1d - 7d type: string - Security_Solution_Detections_API_TiebreakerField: + Security_Detections_API_TiebreakerField: description: Sets a secondary field for sorting events type: string - Security_Solution_Detections_API_TimelineTemplateId: + Security_Detections_API_TimelineTemplateId: description: Timeline template ID type: string - Security_Solution_Detections_API_TimelineTemplateTitle: + Security_Detections_API_TimelineTemplateTitle: description: Timeline template title type: string - Security_Solution_Detections_API_TimestampField: + Security_Detections_API_TimestampField: description: Contains the event timestamp used for sorting a sequence of events type: string - Security_Solution_Detections_API_TimestampOverride: + Security_Detections_API_TimestampOverride: description: Sets the time field used to query indices type: string - Security_Solution_Detections_API_TimestampOverrideFallbackDisabled: + Security_Detections_API_TimestampOverrideFallbackDisabled: description: Disables the fallback to the event's @timestamp field type: boolean - Security_Solution_Detections_API_UUID: + Security_Detections_API_UUID: description: A universally unique identifier format: uuid type: string - Security_Solution_Detections_API_WarningSchema: + Security_Detections_API_WarningSchema: type: object properties: actionPath: @@ -37912,16 +36752,14 @@ components: - type - message - actionPath - Security_Solution_Endpoint_Exceptions_API_EndpointList: + Security_Endpoint_Exceptions_API_EndpointList: oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionList + - $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_ExceptionList' - additionalProperties: false type: object - Security_Solution_Endpoint_Exceptions_API_EndpointListItem: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItem - Security_Solution_Endpoint_Exceptions_API_ExceptionList: + Security_Endpoint_Exceptions_API_EndpointListItem: + $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItem' + Security_Endpoint_Exceptions_API_ExceptionList: type: object properties: _version: @@ -37933,35 +36771,35 @@ components: type: string description: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListDescription + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListDescription id: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListId + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListId immutable: type: boolean list_id: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListHumanId + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListHumanId meta: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListMeta + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListMeta name: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListName + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListName namespace_type: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionNamespaceType + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionNamespaceType os_types: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListOsTypeArray + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListOsTypeArray tags: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListTags + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListTags tie_breaker_id: type: string type: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListType + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListType updated_at: format: date-time type: string @@ -37969,7 +36807,7 @@ components: type: string version: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListVersion + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListVersion required: - id - list_id @@ -37984,23 +36822,21 @@ components: - created_by - updated_at - updated_by - Security_Solution_Endpoint_Exceptions_API_ExceptionListDescription: + Security_Endpoint_Exceptions_API_ExceptionListDescription: type: string - Security_Solution_Endpoint_Exceptions_API_ExceptionListHumanId: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString + Security_Endpoint_Exceptions_API_ExceptionListHumanId: + $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' description: Human readable string identifier, e.g. `trusted-linux-processes` - Security_Solution_Endpoint_Exceptions_API_ExceptionListId: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - Security_Solution_Endpoint_Exceptions_API_ExceptionListItem: + Security_Endpoint_Exceptions_API_ExceptionListId: + $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' + Security_Endpoint_Exceptions_API_ExceptionListItem: type: object properties: _version: type: string comments: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemCommentArray + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemCommentArray created_at: format: date-time type: string @@ -38008,42 +36844,42 @@ components: type: string description: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemDescription + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemDescription entries: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryArray + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemEntryArray expire_time: format: date-time type: string id: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemId + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemId item_id: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemHumanId + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemHumanId list_id: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListHumanId + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListHumanId meta: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemMeta + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemMeta name: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemName + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemName namespace_type: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionNamespaceType + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionNamespaceType os_types: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemOsTypeArray + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemOsTypeArray tags: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemTags + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemTags tie_breaker_id: type: string type: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemType + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemType updated_at: format: date-time type: string @@ -38064,69 +36900,64 @@ components: - created_by - updated_at - updated_by - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemComment: + Security_Endpoint_Exceptions_API_ExceptionListItemComment: type: object properties: comment: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString + $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' created_at: format: date-time type: string created_by: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString + $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' id: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString + $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' updated_at: format: date-time type: string updated_by: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString + $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' required: - id - comment - created_at - created_by - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemCommentArray: + Security_Endpoint_Exceptions_API_ExceptionListItemCommentArray: items: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemComment + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemComment type: array - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemDescription: + Security_Endpoint_Exceptions_API_ExceptionListItemDescription: type: string - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntry: + Security_Endpoint_Exceptions_API_ExceptionListItemEntry: anyOf: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryMatch + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemEntryMatch - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryMatchAny + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemEntryMatchAny - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryList + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemEntryList - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryExists + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemEntryExists - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryNested + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemEntryNested - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryMatchWildcard + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemEntryMatchWildcard discriminator: propertyName: type - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryArray: + Security_Endpoint_Exceptions_API_ExceptionListItemEntryArray: items: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntry + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemEntry type: array - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryExists: + Security_Endpoint_Exceptions_API_ExceptionListItemEntryExists: type: object properties: field: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString + $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' operator: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryOperator + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemEntryOperator type: enum: - exists @@ -38135,27 +36966,24 @@ components: - type - field - operator - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryList: + Security_Endpoint_Exceptions_API_ExceptionListItemEntryList: type: object properties: field: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString + $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' list: type: object properties: id: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ListId + $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_ListId' type: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ListType + $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_ListType' required: - id - type operator: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryOperator + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemEntryOperator type: enum: - list @@ -38165,36 +36993,33 @@ components: - field - list - operator - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryMatch: + Security_Endpoint_Exceptions_API_ExceptionListItemEntryMatch: type: object properties: field: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString + $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' operator: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryOperator + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemEntryOperator type: enum: - match type: string value: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString + $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' required: - type - field - value - operator - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryMatchAny: + Security_Endpoint_Exceptions_API_ExceptionListItemEntryMatchAny: type: object properties: field: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString + $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' operator: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryOperator + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemEntryOperator type: enum: - match_any @@ -38202,7 +37027,7 @@ components: value: items: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString + #/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString minItems: 1 type: array required: @@ -38210,39 +37035,36 @@ components: - field - value - operator - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryMatchWildcard: + Security_Endpoint_Exceptions_API_ExceptionListItemEntryMatchWildcard: type: object properties: field: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString + $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' operator: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryOperator + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemEntryOperator type: enum: - wildcard type: string value: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString + $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' required: - type - field - value - operator - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryNested: + Security_Endpoint_Exceptions_API_ExceptionListItemEntryNested: type: object properties: entries: items: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryNestedEntryItem + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemEntryNestedEntryItem minItems: 1 type: array field: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString + $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' type: enum: - nested @@ -38251,66 +37073,62 @@ components: - type - field - entries - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryNestedEntryItem: + Security_Endpoint_Exceptions_API_ExceptionListItemEntryNestedEntryItem: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryMatch + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemEntryMatch - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryMatchAny + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemEntryMatchAny - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryExists - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryOperator: + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemEntryExists + Security_Endpoint_Exceptions_API_ExceptionListItemEntryOperator: enum: - excluded - included type: string - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemHumanId: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemId: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemMeta: + Security_Endpoint_Exceptions_API_ExceptionListItemHumanId: + $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' + Security_Endpoint_Exceptions_API_ExceptionListItemId: + $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' + Security_Endpoint_Exceptions_API_ExceptionListItemMeta: additionalProperties: true type: object - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemName: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemOsTypeArray: + Security_Endpoint_Exceptions_API_ExceptionListItemName: + $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' + Security_Endpoint_Exceptions_API_ExceptionListItemOsTypeArray: items: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListOsType + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListOsType type: array - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemTags: + Security_Endpoint_Exceptions_API_ExceptionListItemTags: items: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString + $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' type: array - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemType: + Security_Endpoint_Exceptions_API_ExceptionListItemType: enum: - simple type: string - Security_Solution_Endpoint_Exceptions_API_ExceptionListMeta: + Security_Endpoint_Exceptions_API_ExceptionListMeta: additionalProperties: true type: object - Security_Solution_Endpoint_Exceptions_API_ExceptionListName: + Security_Endpoint_Exceptions_API_ExceptionListName: type: string - Security_Solution_Endpoint_Exceptions_API_ExceptionListOsType: + Security_Endpoint_Exceptions_API_ExceptionListOsType: enum: - linux - macos - windows type: string - Security_Solution_Endpoint_Exceptions_API_ExceptionListOsTypeArray: + Security_Endpoint_Exceptions_API_ExceptionListOsTypeArray: items: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListOsType + #/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListOsType type: array - Security_Solution_Endpoint_Exceptions_API_ExceptionListTags: + Security_Endpoint_Exceptions_API_ExceptionListTags: items: type: string type: array - Security_Solution_Endpoint_Exceptions_API_ExceptionListType: + Security_Endpoint_Exceptions_API_ExceptionListType: enum: - detection - rule_default @@ -38320,10 +37138,10 @@ components: - endpoint_host_isolation_exceptions - endpoint_blocklists type: string - Security_Solution_Endpoint_Exceptions_API_ExceptionListVersion: + Security_Endpoint_Exceptions_API_ExceptionListVersion: minimum: 1 type: integer - Security_Solution_Endpoint_Exceptions_API_ExceptionNamespaceType: + Security_Endpoint_Exceptions_API_ExceptionNamespaceType: description: > Determines whether the exception container is available in all Kibana spaces or just the space @@ -38338,13 +37156,11 @@ components: - agnostic - single type: string - Security_Solution_Endpoint_Exceptions_API_FindEndpointListItemsFilter: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - Security_Solution_Endpoint_Exceptions_API_ListId: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - Security_Solution_Endpoint_Exceptions_API_ListType: + Security_Endpoint_Exceptions_API_FindEndpointListItemsFilter: + $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' + Security_Endpoint_Exceptions_API_ListId: + $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' + Security_Endpoint_Exceptions_API_ListType: enum: - binary - boolean @@ -38370,12 +37186,12 @@ components: - short - text type: string - Security_Solution_Endpoint_Exceptions_API_NonEmptyString: + Security_Endpoint_Exceptions_API_NonEmptyString: description: A string that is not empty and does not contain only whitespace minLength: 1 pattern: ^(?! *$).+$ type: string - Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse: + Security_Endpoint_Exceptions_API_PlatformErrorResponse: type: object properties: error: @@ -38388,7 +37204,7 @@ components: - statusCode - error - message - Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse: + Security_Endpoint_Exceptions_API_SiemErrorResponse: type: object properties: message: @@ -38398,21 +37214,18 @@ components: required: - status_code - message - Security_Solution_Endpoint_Management_API_ActionLogRequestQuery: + Security_Endpoint_Management_API_ActionLogRequestQuery: type: object properties: end_date: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_EndDate + $ref: '#/components/schemas/Security_Endpoint_Management_API_EndDate' page: - $ref: '#/components/schemas/Security_Solution_Endpoint_Management_API_Page' + $ref: '#/components/schemas/Security_Endpoint_Management_API_Page' page_size: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_PageSize + $ref: '#/components/schemas/Security_Endpoint_Management_API_PageSize' start_date: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_StartDate - Security_Solution_Endpoint_Management_API_ActionStateSuccessResponse: + $ref: '#/components/schemas/Security_Endpoint_Management_API_StartDate' + Security_Endpoint_Management_API_ActionStateSuccessResponse: type: object properties: body: @@ -38427,7 +37240,7 @@ components: - data required: - body - Security_Solution_Endpoint_Management_API_ActionStatusSuccessResponse: + Security_Endpoint_Management_API_ActionStatusSuccessResponse: type: object properties: body: @@ -38438,10 +37251,10 @@ components: properties: agent_id: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentId + #/components/schemas/Security_Endpoint_Management_API_AgentId pending_actions: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_PendingActionsSchema + #/components/schemas/Security_Endpoint_Management_API_PendingActionsSchema required: - agent_id - pending_actions @@ -38449,10 +37262,10 @@ components: - data required: - body - Security_Solution_Endpoint_Management_API_AgentId: + Security_Endpoint_Management_API_AgentId: description: Agent ID type: string - Security_Solution_Endpoint_Management_API_AgentIds: + Security_Endpoint_Management_API_AgentIds: minLength: 1 oneOf: - items: @@ -38463,27 +37276,26 @@ components: type: array - minLength: 1 type: string - Security_Solution_Endpoint_Management_API_AgentTypes: + Security_Endpoint_Management_API_AgentTypes: enum: - endpoint - sentinel_one - crowdstrike type: string - Security_Solution_Endpoint_Management_API_AlertIds: + Security_Endpoint_Management_API_AlertIds: description: A list of alerts ids. items: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_NonEmptyString + $ref: '#/components/schemas/Security_Endpoint_Management_API_NonEmptyString' minItems: 1 type: array - Security_Solution_Endpoint_Management_API_CaseIds: + Security_Endpoint_Management_API_CaseIds: description: Case IDs to be updated (cannot contain empty strings) items: minLength: 1 type: string minItems: 1 type: array - Security_Solution_Endpoint_Management_API_Command: + Security_Endpoint_Management_API_Command: description: The command to be executed (cannot be an empty string) enum: - isolate @@ -38497,51 +37309,46 @@ components: - scan minLength: 1 type: string - Security_Solution_Endpoint_Management_API_Commands: + Security_Endpoint_Management_API_Commands: items: - $ref: '#/components/schemas/Security_Solution_Endpoint_Management_API_Command' + $ref: '#/components/schemas/Security_Endpoint_Management_API_Command' type: array - Security_Solution_Endpoint_Management_API_Comment: + Security_Endpoint_Management_API_Comment: description: Optional comment type: string - Security_Solution_Endpoint_Management_API_EndDate: + Security_Endpoint_Management_API_EndDate: description: End date type: string - Security_Solution_Endpoint_Management_API_EndpointIds: + Security_Endpoint_Management_API_EndpointIds: description: List of endpoint IDs (cannot contain empty strings) items: minLength: 1 type: string minItems: 1 type: array - Security_Solution_Endpoint_Management_API_EntityId: + Security_Endpoint_Management_API_EntityId: type: object properties: entity_id: minLength: 1 type: string - Security_Solution_Endpoint_Management_API_ExecuteRouteRequestBody: + Security_Endpoint_Management_API_ExecuteRouteRequestBody: allOf: - type: object properties: agent_type: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentTypes + $ref: '#/components/schemas/Security_Endpoint_Management_API_AgentTypes' alert_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AlertIds + $ref: '#/components/schemas/Security_Endpoint_Management_API_AlertIds' case_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_CaseIds + $ref: '#/components/schemas/Security_Endpoint_Management_API_CaseIds' comment: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Comment + $ref: '#/components/schemas/Security_Endpoint_Management_API_Comment' endpoint_ids: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_EndpointIds + #/components/schemas/Security_Endpoint_Management_API_EndpointIds parameters: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Parameters + $ref: '#/components/schemas/Security_Endpoint_Management_API_Parameters' required: - endpoint_ids - type: object @@ -38551,31 +37358,27 @@ components: properties: command: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Command + #/components/schemas/Security_Endpoint_Management_API_Command timeout: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Timeout + #/components/schemas/Security_Endpoint_Management_API_Timeout required: - command required: - parameters - Security_Solution_Endpoint_Management_API_GetEndpointActionListRouteQuery: + Security_Endpoint_Management_API_GetEndpointActionListRouteQuery: type: object properties: agentIds: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentIds + $ref: '#/components/schemas/Security_Endpoint_Management_API_AgentIds' agentTypes: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentTypes + $ref: '#/components/schemas/Security_Endpoint_Management_API_AgentTypes' commands: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Commands + $ref: '#/components/schemas/Security_Endpoint_Management_API_Commands' endDate: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_EndDate + $ref: '#/components/schemas/Security_Endpoint_Management_API_EndDate' page: - $ref: '#/components/schemas/Security_Solution_Endpoint_Management_API_Page' + $ref: '#/components/schemas/Security_Endpoint_Management_API_Page' pageSize: default: 10 description: Number of items per page @@ -38583,38 +37386,30 @@ components: minimum: 1 type: integer startDate: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_StartDate + $ref: '#/components/schemas/Security_Endpoint_Management_API_StartDate' types: - $ref: '#/components/schemas/Security_Solution_Endpoint_Management_API_Types' + $ref: '#/components/schemas/Security_Endpoint_Management_API_Types' userIds: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_UserIds + $ref: '#/components/schemas/Security_Endpoint_Management_API_UserIds' withOutputs: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_WithOutputs - Security_Solution_Endpoint_Management_API_GetFileRouteRequestBody: + $ref: '#/components/schemas/Security_Endpoint_Management_API_WithOutputs' + Security_Endpoint_Management_API_GetFileRouteRequestBody: allOf: - type: object properties: agent_type: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentTypes + $ref: '#/components/schemas/Security_Endpoint_Management_API_AgentTypes' alert_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AlertIds + $ref: '#/components/schemas/Security_Endpoint_Management_API_AlertIds' case_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_CaseIds + $ref: '#/components/schemas/Security_Endpoint_Management_API_CaseIds' comment: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Comment + $ref: '#/components/schemas/Security_Endpoint_Management_API_Comment' endpoint_ids: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_EndpointIds + #/components/schemas/Security_Endpoint_Management_API_EndpointIds parameters: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Parameters + $ref: '#/components/schemas/Security_Endpoint_Management_API_Parameters' required: - endpoint_ids - type: object @@ -38628,44 +37423,38 @@ components: - path required: - parameters - Security_Solution_Endpoint_Management_API_GetProcessesRouteRequestBody: + Security_Endpoint_Management_API_GetProcessesRouteRequestBody: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_NoParametersRequestSchema - Security_Solution_Endpoint_Management_API_IsolateRouteRequestBody: + #/components/schemas/Security_Endpoint_Management_API_NoParametersRequestSchema + Security_Endpoint_Management_API_IsolateRouteRequestBody: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_NoParametersRequestSchema - Security_Solution_Endpoint_Management_API_KillProcessRouteRequestBody: + #/components/schemas/Security_Endpoint_Management_API_NoParametersRequestSchema + Security_Endpoint_Management_API_KillProcessRouteRequestBody: allOf: - type: object properties: agent_type: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentTypes + $ref: '#/components/schemas/Security_Endpoint_Management_API_AgentTypes' alert_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AlertIds + $ref: '#/components/schemas/Security_Endpoint_Management_API_AlertIds' case_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_CaseIds + $ref: '#/components/schemas/Security_Endpoint_Management_API_CaseIds' comment: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Comment + $ref: '#/components/schemas/Security_Endpoint_Management_API_Comment' endpoint_ids: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_EndpointIds + #/components/schemas/Security_Endpoint_Management_API_EndpointIds parameters: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Parameters + $ref: '#/components/schemas/Security_Endpoint_Management_API_Parameters' required: - endpoint_ids - type: object properties: parameters: oneOf: + - $ref: '#/components/schemas/Security_Endpoint_Management_API_Pid' - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Pid - - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_EntityId + #/components/schemas/Security_Endpoint_Management_API_EntityId - type: object properties: process_name: @@ -38674,7 +37463,7 @@ components: type: string required: - parameters - Security_Solution_Endpoint_Management_API_ListRequestQuery: + Security_Endpoint_Management_API_ListRequestQuery: type: object properties: hostStatuses: @@ -38721,121 +37510,111 @@ components: type: string required: - hostStatuses - Security_Solution_Endpoint_Management_API_NonEmptyString: + Security_Endpoint_Management_API_NonEmptyString: description: A string that is not empty and does not contain only whitespace minLength: 1 pattern: ^(?! *$).+$ type: string - Security_Solution_Endpoint_Management_API_NoParametersRequestSchema: + Security_Endpoint_Management_API_NoParametersRequestSchema: type: object properties: body: type: object properties: agent_type: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentTypes + $ref: '#/components/schemas/Security_Endpoint_Management_API_AgentTypes' alert_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AlertIds + $ref: '#/components/schemas/Security_Endpoint_Management_API_AlertIds' case_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_CaseIds + $ref: '#/components/schemas/Security_Endpoint_Management_API_CaseIds' comment: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Comment + $ref: '#/components/schemas/Security_Endpoint_Management_API_Comment' endpoint_ids: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_EndpointIds + #/components/schemas/Security_Endpoint_Management_API_EndpointIds parameters: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Parameters + $ref: '#/components/schemas/Security_Endpoint_Management_API_Parameters' required: - endpoint_ids required: - body - Security_Solution_Endpoint_Management_API_Page: + Security_Endpoint_Management_API_Page: default: 1 description: Page number minimum: 1 type: integer - Security_Solution_Endpoint_Management_API_PageSize: + Security_Endpoint_Management_API_PageSize: default: 10 description: Number of items per page maximum: 100 minimum: 1 type: integer - Security_Solution_Endpoint_Management_API_Parameters: + Security_Endpoint_Management_API_Parameters: description: Optional parameters object type: object - Security_Solution_Endpoint_Management_API_PendingActionDataType: + Security_Endpoint_Management_API_PendingActionDataType: type: integer - Security_Solution_Endpoint_Management_API_PendingActionsSchema: + Security_Endpoint_Management_API_PendingActionsSchema: oneOf: - type: object properties: execute: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_PendingActionDataType + #/components/schemas/Security_Endpoint_Management_API_PendingActionDataType get-file: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_PendingActionDataType + #/components/schemas/Security_Endpoint_Management_API_PendingActionDataType isolate: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_PendingActionDataType + #/components/schemas/Security_Endpoint_Management_API_PendingActionDataType kill-process: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_PendingActionDataType + #/components/schemas/Security_Endpoint_Management_API_PendingActionDataType running-processes: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_PendingActionDataType + #/components/schemas/Security_Endpoint_Management_API_PendingActionDataType scan: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_PendingActionDataType + #/components/schemas/Security_Endpoint_Management_API_PendingActionDataType suspend-process: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_PendingActionDataType + #/components/schemas/Security_Endpoint_Management_API_PendingActionDataType unisolate: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_PendingActionDataType + #/components/schemas/Security_Endpoint_Management_API_PendingActionDataType upload: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_PendingActionDataType + #/components/schemas/Security_Endpoint_Management_API_PendingActionDataType - additionalProperties: true type: object - Security_Solution_Endpoint_Management_API_Pid: + Security_Endpoint_Management_API_Pid: type: object properties: pid: minimum: 1 type: integer - Security_Solution_Endpoint_Management_API_ProtectionUpdatesNoteResponse: + Security_Endpoint_Management_API_ProtectionUpdatesNoteResponse: type: object properties: note: type: string - Security_Solution_Endpoint_Management_API_ScanRouteRequestBody: + Security_Endpoint_Management_API_ScanRouteRequestBody: allOf: - type: object properties: agent_type: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentTypes + $ref: '#/components/schemas/Security_Endpoint_Management_API_AgentTypes' alert_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AlertIds + $ref: '#/components/schemas/Security_Endpoint_Management_API_AlertIds' case_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_CaseIds + $ref: '#/components/schemas/Security_Endpoint_Management_API_CaseIds' comment: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Comment + $ref: '#/components/schemas/Security_Endpoint_Management_API_Comment' endpoint_ids: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_EndpointIds + #/components/schemas/Security_Endpoint_Management_API_EndpointIds parameters: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Parameters + $ref: '#/components/schemas/Security_Endpoint_Management_API_Parameters' required: - endpoint_ids - type: object @@ -38849,88 +37628,77 @@ components: - path required: - parameters - Security_Solution_Endpoint_Management_API_StartDate: + Security_Endpoint_Management_API_StartDate: description: Start date type: string - Security_Solution_Endpoint_Management_API_SuccessResponse: + Security_Endpoint_Management_API_SuccessResponse: type: object properties: {} - Security_Solution_Endpoint_Management_API_SuspendProcessRouteRequestBody: + Security_Endpoint_Management_API_SuspendProcessRouteRequestBody: allOf: - type: object properties: agent_type: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentTypes + $ref: '#/components/schemas/Security_Endpoint_Management_API_AgentTypes' alert_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AlertIds + $ref: '#/components/schemas/Security_Endpoint_Management_API_AlertIds' case_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_CaseIds + $ref: '#/components/schemas/Security_Endpoint_Management_API_CaseIds' comment: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Comment + $ref: '#/components/schemas/Security_Endpoint_Management_API_Comment' endpoint_ids: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_EndpointIds + #/components/schemas/Security_Endpoint_Management_API_EndpointIds parameters: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Parameters + $ref: '#/components/schemas/Security_Endpoint_Management_API_Parameters' required: - endpoint_ids - type: object properties: parameters: oneOf: + - $ref: '#/components/schemas/Security_Endpoint_Management_API_Pid' - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Pid - - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_EntityId + #/components/schemas/Security_Endpoint_Management_API_EntityId required: - parameters - Security_Solution_Endpoint_Management_API_Timeout: + Security_Endpoint_Management_API_Timeout: description: The maximum timeout value in milliseconds (optional) minimum: 1 type: integer - Security_Solution_Endpoint_Management_API_Type: + Security_Endpoint_Management_API_Type: description: Type of response action enum: - automated - manual type: string - Security_Solution_Endpoint_Management_API_Types: + Security_Endpoint_Management_API_Types: description: List of types of response actions items: - $ref: '#/components/schemas/Security_Solution_Endpoint_Management_API_Type' + $ref: '#/components/schemas/Security_Endpoint_Management_API_Type' maxLength: 2 minLength: 1 type: array - Security_Solution_Endpoint_Management_API_UnisolateRouteRequestBody: + Security_Endpoint_Management_API_UnisolateRouteRequestBody: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_NoParametersRequestSchema - Security_Solution_Endpoint_Management_API_UploadRouteRequestBody: + #/components/schemas/Security_Endpoint_Management_API_NoParametersRequestSchema + Security_Endpoint_Management_API_UploadRouteRequestBody: allOf: - type: object properties: agent_type: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentTypes + $ref: '#/components/schemas/Security_Endpoint_Management_API_AgentTypes' alert_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AlertIds + $ref: '#/components/schemas/Security_Endpoint_Management_API_AlertIds' case_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_CaseIds + $ref: '#/components/schemas/Security_Endpoint_Management_API_CaseIds' comment: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Comment + $ref: '#/components/schemas/Security_Endpoint_Management_API_Comment' endpoint_ids: $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_EndpointIds + #/components/schemas/Security_Endpoint_Management_API_EndpointIds parameters: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Parameters + $ref: '#/components/schemas/Security_Endpoint_Management_API_Parameters' required: - endpoint_ids - type: object @@ -38947,7 +37715,7 @@ components: required: - parameters - file - Security_Solution_Endpoint_Management_API_UserIds: + Security_Endpoint_Management_API_UserIds: description: User IDs oneOf: - items: @@ -38957,7 +37725,7 @@ components: type: array - minLength: 1 type: string - Security_Solution_Endpoint_Management_API_WithOutputs: + Security_Endpoint_Management_API_WithOutputs: description: Shows detailed outputs for an action response oneOf: - items: @@ -38967,7 +37735,7 @@ components: type: array - minLength: 1 type: string - Security_Solution_Entity_Analytics_API_AssetCriticalityBulkUploadErrorItem: + Security_Entity_Analytics_API_AssetCriticalityBulkUploadErrorItem: type: object properties: index: @@ -38977,7 +37745,7 @@ components: required: - message - index - Security_Solution_Entity_Analytics_API_AssetCriticalityBulkUploadStats: + Security_Entity_Analytics_API_AssetCriticalityBulkUploadStats: type: object properties: failed: @@ -38990,7 +37758,7 @@ components: - successful - failed - total - Security_Solution_Entity_Analytics_API_AssetCriticalityLevel: + Security_Entity_Analytics_API_AssetCriticalityLevel: description: The criticality level of the asset. enum: - low_impact @@ -38998,10 +37766,10 @@ components: - high_impact - extreme_impact type: string - Security_Solution_Entity_Analytics_API_AssetCriticalityRecord: + Security_Entity_Analytics_API_AssetCriticalityRecord: allOf: - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_CreateAssetCriticalityRecord + #/components/schemas/Security_Entity_Analytics_API_CreateAssetCriticalityRecord - type: object properties: '@timestamp': @@ -39011,11 +37779,11 @@ components: type: string required: - '@timestamp' - Security_Solution_Entity_Analytics_API_AssetCriticalityRecordIdParts: + Security_Entity_Analytics_API_AssetCriticalityRecordIdParts: type: object properties: id_field: - $ref: '#/components/schemas/Security_Solution_Entity_Analytics_API_IdField' + $ref: '#/components/schemas/Security_Entity_Analytics_API_IdField' description: The field representing the ID. example: host.name id_value: @@ -39024,49 +37792,65 @@ components: required: - id_value - id_field - Security_Solution_Entity_Analytics_API_CreateAssetCriticalityRecord: + Security_Entity_Analytics_API_CleanUpRiskEngineErrorResponse: + type: object + properties: + cleanup_successful: + example: false + type: boolean + errors: + items: + type: object + properties: + error: + type: string + seq: + type: integer + required: + - seq + - error + type: array + required: + - cleanup_successful + - errors + Security_Entity_Analytics_API_CreateAssetCriticalityRecord: allOf: - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_AssetCriticalityRecordIdParts + #/components/schemas/Security_Entity_Analytics_API_AssetCriticalityRecordIdParts - type: object properties: criticality_level: $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_AssetCriticalityLevel + #/components/schemas/Security_Entity_Analytics_API_AssetCriticalityLevel required: - criticality_level - Security_Solution_Entity_Analytics_API_EngineDescriptor: + Security_Entity_Analytics_API_EngineDescriptor: type: object properties: filter: type: string indexPattern: - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_IndexPattern + $ref: '#/components/schemas/Security_Entity_Analytics_API_IndexPattern' status: - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_EngineStatus + $ref: '#/components/schemas/Security_Entity_Analytics_API_EngineStatus' type: - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_EntityType - Security_Solution_Entity_Analytics_API_EngineStatus: + $ref: '#/components/schemas/Security_Entity_Analytics_API_EntityType' + Security_Entity_Analytics_API_EngineStatus: enum: - installing - started - stopped type: string - Security_Solution_Entity_Analytics_API_Entity: + Security_Entity_Analytics_API_Entity: oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_UserEntity - - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_HostEntity - Security_Solution_Entity_Analytics_API_EntityType: + - $ref: '#/components/schemas/Security_Entity_Analytics_API_UserEntity' + - $ref: '#/components/schemas/Security_Entity_Analytics_API_HostEntity' + Security_Entity_Analytics_API_EntityType: enum: - user - host type: string - Security_Solution_Entity_Analytics_API_HostEntity: + Security_Entity_Analytics_API_HostEntity: type: object properties: entity: @@ -39141,14 +37925,14 @@ components: type: array required: - name - Security_Solution_Entity_Analytics_API_IdField: + Security_Entity_Analytics_API_IdField: enum: - host.name - user.name type: string - Security_Solution_Entity_Analytics_API_IndexPattern: + Security_Entity_Analytics_API_IndexPattern: type: string - Security_Solution_Entity_Analytics_API_InspectQuery: + Security_Entity_Analytics_API_InspectQuery: type: object properties: dsl: @@ -39162,7 +37946,7 @@ components: required: - dsl - response - Security_Solution_Entity_Analytics_API_RiskEngineScheduleNowErrorResponse: + Security_Entity_Analytics_API_RiskEngineScheduleNowErrorResponse: type: object properties: full_error: @@ -39172,12 +37956,12 @@ components: required: - message - full_error - Security_Solution_Entity_Analytics_API_RiskEngineScheduleNowResponse: + Security_Entity_Analytics_API_RiskEngineScheduleNowResponse: type: object properties: success: type: boolean - Security_Solution_Entity_Analytics_API_TaskManagerUnavailableResponse: + Security_Entity_Analytics_API_TaskManagerUnavailableResponse: description: Task manager is unavailable type: object properties: @@ -39189,7 +37973,7 @@ components: required: - status_code - message - Security_Solution_Entity_Analytics_API_UserEntity: + Security_Entity_Analytics_API_UserEntity: type: object properties: entity: @@ -39260,76 +38044,71 @@ components: type: array required: - name - Security_Solution_Exceptions_API_CreateExceptionListItemComment: + Security_Exceptions_API_CreateExceptionListItemComment: type: object properties: comment: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' + $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' required: - comment - Security_Solution_Exceptions_API_CreateExceptionListItemCommentArray: + Security_Exceptions_API_CreateExceptionListItemCommentArray: items: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_CreateExceptionListItemComment + #/components/schemas/Security_Exceptions_API_CreateExceptionListItemComment type: array - Security_Solution_Exceptions_API_CreateRuleExceptionListItemComment: + Security_Exceptions_API_CreateRuleExceptionListItemComment: type: object properties: comment: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' + $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' required: - comment - Security_Solution_Exceptions_API_CreateRuleExceptionListItemCommentArray: + Security_Exceptions_API_CreateRuleExceptionListItemCommentArray: items: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_CreateRuleExceptionListItemComment + #/components/schemas/Security_Exceptions_API_CreateRuleExceptionListItemComment type: array - Security_Solution_Exceptions_API_CreateRuleExceptionListItemProps: + Security_Exceptions_API_CreateRuleExceptionListItemProps: type: object properties: comments: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_CreateRuleExceptionListItemCommentArray + #/components/schemas/Security_Exceptions_API_CreateRuleExceptionListItemCommentArray default: [] description: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemDescription + #/components/schemas/Security_Exceptions_API_ExceptionListItemDescription entries: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryArray + #/components/schemas/Security_Exceptions_API_ExceptionListItemEntryArray expire_time: format: date-time type: string item_id: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemHumanId + #/components/schemas/Security_Exceptions_API_ExceptionListItemHumanId meta: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemMeta + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemMeta' name: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemName + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemName' namespace_type: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionNamespaceType' default: single os_types: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemOsTypeArray + #/components/schemas/Security_Exceptions_API_ExceptionListItemOsTypeArray default: [] tags: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemTags + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemTags' default: [] type: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemType + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemType' required: - type - name - description - entries - Security_Solution_Exceptions_API_ExceptionList: + Security_Exceptions_API_ExceptionList: type: object properties: _version: @@ -39341,43 +38120,35 @@ components: type: string description: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListDescription + #/components/schemas/Security_Exceptions_API_ExceptionListDescription id: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListId + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListId' immutable: type: boolean list_id: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListHumanId + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListHumanId' meta: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListMeta + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListMeta' name: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListName + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListName' namespace_type: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionNamespaceType' os_types: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListOsTypeArray + #/components/schemas/Security_Exceptions_API_ExceptionListOsTypeArray tags: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListTags + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListTags' tie_breaker_id: type: string type: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListType + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListType' updated_at: format: date-time type: string updated_by: type: string version: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListVersion + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListVersion' required: - id - list_id @@ -39392,21 +38163,21 @@ components: - created_by - updated_at - updated_by - Security_Solution_Exceptions_API_ExceptionListDescription: + Security_Exceptions_API_ExceptionListDescription: type: string - Security_Solution_Exceptions_API_ExceptionListHumanId: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' + Security_Exceptions_API_ExceptionListHumanId: + $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' description: Human readable string identifier, e.g. `trusted-linux-processes` - Security_Solution_Exceptions_API_ExceptionListId: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' - Security_Solution_Exceptions_API_ExceptionListItem: + Security_Exceptions_API_ExceptionListId: + $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' + Security_Exceptions_API_ExceptionListItem: type: object properties: _version: type: string comments: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemCommentArray + #/components/schemas/Security_Exceptions_API_ExceptionListItemCommentArray created_at: format: date-time type: string @@ -39414,42 +38185,35 @@ components: type: string description: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemDescription + #/components/schemas/Security_Exceptions_API_ExceptionListItemDescription entries: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryArray + #/components/schemas/Security_Exceptions_API_ExceptionListItemEntryArray expire_time: format: date-time type: string id: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemId + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemId' item_id: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemHumanId + #/components/schemas/Security_Exceptions_API_ExceptionListItemHumanId list_id: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListHumanId + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListHumanId' meta: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemMeta + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemMeta' name: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemName + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemName' namespace_type: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionNamespaceType' os_types: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemOsTypeArray + #/components/schemas/Security_Exceptions_API_ExceptionListItemOsTypeArray tags: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemTags + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemTags' tie_breaker_id: type: string type: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemType + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemType' updated_at: format: date-time type: string @@ -39470,64 +38234,62 @@ components: - created_by - updated_at - updated_by - Security_Solution_Exceptions_API_ExceptionListItemComment: + Security_Exceptions_API_ExceptionListItemComment: type: object properties: comment: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' + $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' created_at: format: date-time type: string created_by: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' + $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' id: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' + $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' updated_at: format: date-time type: string updated_by: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' + $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' required: - id - comment - created_at - created_by - Security_Solution_Exceptions_API_ExceptionListItemCommentArray: + Security_Exceptions_API_ExceptionListItemCommentArray: items: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemComment + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemComment' type: array - Security_Solution_Exceptions_API_ExceptionListItemDescription: + Security_Exceptions_API_ExceptionListItemDescription: type: string - Security_Solution_Exceptions_API_ExceptionListItemEntry: + Security_Exceptions_API_ExceptionListItemEntry: anyOf: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryMatch + #/components/schemas/Security_Exceptions_API_ExceptionListItemEntryMatch - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryMatchAny + #/components/schemas/Security_Exceptions_API_ExceptionListItemEntryMatchAny - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryList + #/components/schemas/Security_Exceptions_API_ExceptionListItemEntryList - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryExists + #/components/schemas/Security_Exceptions_API_ExceptionListItemEntryExists - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryNested + #/components/schemas/Security_Exceptions_API_ExceptionListItemEntryNested - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryMatchWildcard + #/components/schemas/Security_Exceptions_API_ExceptionListItemEntryMatchWildcard discriminator: propertyName: type - Security_Solution_Exceptions_API_ExceptionListItemEntryArray: + Security_Exceptions_API_ExceptionListItemEntryArray: items: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntry + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemEntry' type: array - Security_Solution_Exceptions_API_ExceptionListItemEntryExists: + Security_Exceptions_API_ExceptionListItemEntryExists: type: object properties: field: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' + $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' operator: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryOperator + #/components/schemas/Security_Exceptions_API_ExceptionListItemEntryOperator type: enum: - exists @@ -39536,24 +38298,24 @@ components: - type - field - operator - Security_Solution_Exceptions_API_ExceptionListItemEntryList: + Security_Exceptions_API_ExceptionListItemEntryList: type: object properties: field: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' + $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' list: type: object properties: id: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_ListId' + $ref: '#/components/schemas/Security_Exceptions_API_ListId' type: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_ListType' + $ref: '#/components/schemas/Security_Exceptions_API_ListType' required: - id - type operator: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryOperator + #/components/schemas/Security_Exceptions_API_ExceptionListItemEntryOperator type: enum: - list @@ -39563,41 +38325,40 @@ components: - field - list - operator - Security_Solution_Exceptions_API_ExceptionListItemEntryMatch: + Security_Exceptions_API_ExceptionListItemEntryMatch: type: object properties: field: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' + $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' operator: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryOperator + #/components/schemas/Security_Exceptions_API_ExceptionListItemEntryOperator type: enum: - match type: string value: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' + $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' required: - type - field - value - operator - Security_Solution_Exceptions_API_ExceptionListItemEntryMatchAny: + Security_Exceptions_API_ExceptionListItemEntryMatchAny: type: object properties: field: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' + $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' operator: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryOperator + #/components/schemas/Security_Exceptions_API_ExceptionListItemEntryOperator type: enum: - match_any type: string value: items: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_NonEmptyString + $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' minItems: 1 type: array required: @@ -39605,36 +38366,36 @@ components: - field - value - operator - Security_Solution_Exceptions_API_ExceptionListItemEntryMatchWildcard: + Security_Exceptions_API_ExceptionListItemEntryMatchWildcard: type: object properties: field: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' + $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' operator: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryOperator + #/components/schemas/Security_Exceptions_API_ExceptionListItemEntryOperator type: enum: - wildcard type: string value: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' + $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' required: - type - field - value - operator - Security_Solution_Exceptions_API_ExceptionListItemEntryNested: + Security_Exceptions_API_ExceptionListItemEntryNested: type: object properties: entries: items: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryNestedEntryItem + #/components/schemas/Security_Exceptions_API_ExceptionListItemEntryNestedEntryItem minItems: 1 type: array field: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' + $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' type: enum: - nested @@ -39643,58 +38404,56 @@ components: - type - field - entries - Security_Solution_Exceptions_API_ExceptionListItemEntryNestedEntryItem: + Security_Exceptions_API_ExceptionListItemEntryNestedEntryItem: oneOf: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryMatch + #/components/schemas/Security_Exceptions_API_ExceptionListItemEntryMatch - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryMatchAny + #/components/schemas/Security_Exceptions_API_ExceptionListItemEntryMatchAny - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryExists - Security_Solution_Exceptions_API_ExceptionListItemEntryOperator: + #/components/schemas/Security_Exceptions_API_ExceptionListItemEntryExists + Security_Exceptions_API_ExceptionListItemEntryOperator: enum: - excluded - included type: string - Security_Solution_Exceptions_API_ExceptionListItemHumanId: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' - Security_Solution_Exceptions_API_ExceptionListItemId: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' - Security_Solution_Exceptions_API_ExceptionListItemMeta: + Security_Exceptions_API_ExceptionListItemHumanId: + $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' + Security_Exceptions_API_ExceptionListItemId: + $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' + Security_Exceptions_API_ExceptionListItemMeta: additionalProperties: true type: object - Security_Solution_Exceptions_API_ExceptionListItemName: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' - Security_Solution_Exceptions_API_ExceptionListItemOsTypeArray: + Security_Exceptions_API_ExceptionListItemName: + $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' + Security_Exceptions_API_ExceptionListItemOsTypeArray: items: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListOsType + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListOsType' type: array - Security_Solution_Exceptions_API_ExceptionListItemTags: + Security_Exceptions_API_ExceptionListItemTags: items: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' + $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' type: array - Security_Solution_Exceptions_API_ExceptionListItemType: + Security_Exceptions_API_ExceptionListItemType: enum: - simple type: string - Security_Solution_Exceptions_API_ExceptionListMeta: + Security_Exceptions_API_ExceptionListMeta: additionalProperties: true type: object - Security_Solution_Exceptions_API_ExceptionListName: + Security_Exceptions_API_ExceptionListName: type: string - Security_Solution_Exceptions_API_ExceptionListOsType: + Security_Exceptions_API_ExceptionListOsType: enum: - linux - macos - windows type: string - Security_Solution_Exceptions_API_ExceptionListOsTypeArray: + Security_Exceptions_API_ExceptionListOsTypeArray: items: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListOsType + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListOsType' type: array - Security_Solution_Exceptions_API_ExceptionListsImportBulkError: + Security_Exceptions_API_ExceptionListsImportBulkError: type: object properties: error: @@ -39708,26 +38467,24 @@ components: - status_code - message id: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListId + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListId' item_id: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemHumanId + #/components/schemas/Security_Exceptions_API_ExceptionListItemHumanId list_id: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListHumanId + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListHumanId' required: - error - Security_Solution_Exceptions_API_ExceptionListsImportBulkErrorArray: + Security_Exceptions_API_ExceptionListsImportBulkErrorArray: items: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListsImportBulkError + #/components/schemas/Security_Exceptions_API_ExceptionListsImportBulkError type: array - Security_Solution_Exceptions_API_ExceptionListTags: + Security_Exceptions_API_ExceptionListTags: items: type: string type: array - Security_Solution_Exceptions_API_ExceptionListType: + Security_Exceptions_API_ExceptionListType: enum: - detection - rule_default @@ -39737,10 +38494,10 @@ components: - endpoint_host_isolation_exceptions - endpoint_blocklists type: string - Security_Solution_Exceptions_API_ExceptionListVersion: + Security_Exceptions_API_ExceptionListVersion: minimum: 1 type: integer - Security_Solution_Exceptions_API_ExceptionNamespaceType: + Security_Exceptions_API_ExceptionNamespaceType: description: > Determines whether the exception container is available in all Kibana spaces or just the space @@ -39755,13 +38512,13 @@ components: - agnostic - single type: string - Security_Solution_Exceptions_API_FindExceptionListItemsFilter: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' - Security_Solution_Exceptions_API_FindExceptionListsFilter: + Security_Exceptions_API_FindExceptionListItemsFilter: + $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' + Security_Exceptions_API_FindExceptionListsFilter: type: string - Security_Solution_Exceptions_API_ListId: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' - Security_Solution_Exceptions_API_ListType: + Security_Exceptions_API_ListId: + $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' + Security_Exceptions_API_ListType: enum: - binary - boolean @@ -39787,12 +38544,12 @@ components: - short - text type: string - Security_Solution_Exceptions_API_NonEmptyString: + Security_Exceptions_API_NonEmptyString: description: A string that is not empty and does not contain only whitespace minLength: 1 pattern: ^(?! *$).+$ type: string - Security_Solution_Exceptions_API_PlatformErrorResponse: + Security_Exceptions_API_PlatformErrorResponse: type: object properties: error: @@ -39805,9 +38562,9 @@ components: - statusCode - error - message - Security_Solution_Exceptions_API_RuleId: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_UUID' - Security_Solution_Exceptions_API_SiemErrorResponse: + Security_Exceptions_API_RuleId: + $ref: '#/components/schemas/Security_Exceptions_API_UUID' + Security_Exceptions_API_SiemErrorResponse: type: object properties: message: @@ -39817,33 +38574,33 @@ components: required: - status_code - message - Security_Solution_Exceptions_API_UpdateExceptionListItemComment: + Security_Exceptions_API_UpdateExceptionListItemComment: type: object properties: comment: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' + $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' id: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' + $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' required: - comment - Security_Solution_Exceptions_API_UpdateExceptionListItemCommentArray: + Security_Exceptions_API_UpdateExceptionListItemCommentArray: items: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_UpdateExceptionListItemComment + #/components/schemas/Security_Exceptions_API_UpdateExceptionListItemComment type: array - Security_Solution_Exceptions_API_UUID: + Security_Exceptions_API_UUID: description: A universally unique identifier format: uuid type: string - Security_Solution_Lists_API_FindListItemsCursor: - $ref: '#/components/schemas/Security_Solution_Lists_API_NonEmptyString' - Security_Solution_Lists_API_FindListItemsFilter: + Security_Lists_API_FindListItemsCursor: + $ref: '#/components/schemas/Security_Lists_API_NonEmptyString' + Security_Lists_API_FindListItemsFilter: type: string - Security_Solution_Lists_API_FindListsCursor: - $ref: '#/components/schemas/Security_Solution_Lists_API_NonEmptyString' - Security_Solution_Lists_API_FindListsFilter: + Security_Lists_API_FindListsCursor: + $ref: '#/components/schemas/Security_Lists_API_NonEmptyString' + Security_Lists_API_FindListsFilter: type: string - Security_Solution_Lists_API_List: + Security_Lists_API_List: type: object properties: _version: @@ -39857,23 +38614,23 @@ components: created_by: type: string description: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListDescription' + $ref: '#/components/schemas/Security_Lists_API_ListDescription' deserializer: type: string id: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' + $ref: '#/components/schemas/Security_Lists_API_ListId' immutable: type: boolean meta: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListMetadata' + $ref: '#/components/schemas/Security_Lists_API_ListMetadata' name: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListName' + $ref: '#/components/schemas/Security_Lists_API_ListName' serializer: type: string tie_breaker_id: type: string type: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListType' + $ref: '#/components/schemas/Security_Lists_API_ListType' updated_at: format: date-time type: string @@ -39894,11 +38651,11 @@ components: - created_by - updated_at - updated_by - Security_Solution_Lists_API_ListDescription: - $ref: '#/components/schemas/Security_Solution_Lists_API_NonEmptyString' - Security_Solution_Lists_API_ListId: - $ref: '#/components/schemas/Security_Solution_Lists_API_NonEmptyString' - Security_Solution_Lists_API_ListItem: + Security_Lists_API_ListDescription: + $ref: '#/components/schemas/Security_Lists_API_NonEmptyString' + Security_Lists_API_ListId: + $ref: '#/components/schemas/Security_Lists_API_NonEmptyString' + Security_Lists_API_ListItem: type: object properties: _version: @@ -39914,24 +38671,24 @@ components: deserializer: type: string id: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListItemId' + $ref: '#/components/schemas/Security_Lists_API_ListItemId' list_id: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' + $ref: '#/components/schemas/Security_Lists_API_ListId' meta: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListItemMetadata' + $ref: '#/components/schemas/Security_Lists_API_ListItemMetadata' serializer: type: string tie_breaker_id: type: string type: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListType' + $ref: '#/components/schemas/Security_Lists_API_ListType' updated_at: format: date-time type: string updated_by: type: string value: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListItemValue' + $ref: '#/components/schemas/Security_Lists_API_ListItemValue' required: - id - type @@ -39942,12 +38699,12 @@ components: - created_by - updated_at - updated_by - Security_Solution_Lists_API_ListItemId: - $ref: '#/components/schemas/Security_Solution_Lists_API_NonEmptyString' - Security_Solution_Lists_API_ListItemMetadata: + Security_Lists_API_ListItemId: + $ref: '#/components/schemas/Security_Lists_API_NonEmptyString' + Security_Lists_API_ListItemMetadata: additionalProperties: true type: object - Security_Solution_Lists_API_ListItemPrivileges: + Security_Lists_API_ListItemPrivileges: type: object properties: application: @@ -39974,14 +38731,14 @@ components: - cluster - index - application - Security_Solution_Lists_API_ListItemValue: - $ref: '#/components/schemas/Security_Solution_Lists_API_NonEmptyString' - Security_Solution_Lists_API_ListMetadata: + Security_Lists_API_ListItemValue: + $ref: '#/components/schemas/Security_Lists_API_NonEmptyString' + Security_Lists_API_ListMetadata: additionalProperties: true type: object - Security_Solution_Lists_API_ListName: - $ref: '#/components/schemas/Security_Solution_Lists_API_NonEmptyString' - Security_Solution_Lists_API_ListPrivileges: + Security_Lists_API_ListName: + $ref: '#/components/schemas/Security_Lists_API_NonEmptyString' + Security_Lists_API_ListPrivileges: type: object properties: application: @@ -40008,7 +38765,7 @@ components: - cluster - index - application - Security_Solution_Lists_API_ListType: + Security_Lists_API_ListType: enum: - binary - boolean @@ -40034,12 +38791,12 @@ components: - short - text type: string - Security_Solution_Lists_API_NonEmptyString: + Security_Lists_API_NonEmptyString: description: A string that is not empty and does not contain only whitespace minLength: 1 pattern: ^(?! *$).+$ type: string - Security_Solution_Lists_API_PlatformErrorResponse: + Security_Lists_API_PlatformErrorResponse: type: object properties: error: @@ -40052,7 +38809,7 @@ components: - statusCode - error - message - Security_Solution_Lists_API_SiemErrorResponse: + Security_Lists_API_SiemErrorResponse: type: object properties: message: @@ -40062,33 +38819,28 @@ components: required: - status_code - message - Security_Solution_Osquery_API_ArrayQueries: + Security_Osquery_API_ArrayQueries: items: - $ref: '#/components/schemas/Security_Solution_Osquery_API_ArrayQueriesItem' + $ref: '#/components/schemas/Security_Osquery_API_ArrayQueriesItem' type: array - Security_Solution_Osquery_API_ArrayQueriesItem: + Security_Osquery_API_ArrayQueriesItem: type: object properties: ecs_mapping: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_ECSMappingOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_ECSMappingOrUndefined' id: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Id' + $ref: '#/components/schemas/Security_Osquery_API_Id' platform: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_PlatformOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_PlatformOrUndefined' query: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Query' + $ref: '#/components/schemas/Security_Osquery_API_Query' removed: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_RemovedOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_RemovedOrUndefined' snapshot: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_SnapshotOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_SnapshotOrUndefined' version: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_VersionOrUndefined - Security_Solution_Osquery_API_CreateLiveQueryRequestBody: + $ref: '#/components/schemas/Security_Osquery_API_VersionOrUndefined' + Security_Osquery_API_CreateLiveQueryRequestBody: type: object properties: agent_all: @@ -40114,8 +38866,7 @@ components: type: string type: array ecs_mapping: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_ECSMappingOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_ECSMappingOrUndefined' event_ids: items: type: string @@ -40124,72 +38875,62 @@ components: nullable: true type: object pack_id: - $ref: '#/components/schemas/Security_Solution_Osquery_API_PackIdOrUndefined' + $ref: '#/components/schemas/Security_Osquery_API_PackIdOrUndefined' queries: - $ref: '#/components/schemas/Security_Solution_Osquery_API_ArrayQueries' + $ref: '#/components/schemas/Security_Osquery_API_ArrayQueries' query: - $ref: '#/components/schemas/Security_Solution_Osquery_API_QueryOrUndefined' + $ref: '#/components/schemas/Security_Osquery_API_QueryOrUndefined' saved_query_id: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_SavedQueryIdOrUndefined - Security_Solution_Osquery_API_CreatePacksRequestBody: + $ref: '#/components/schemas/Security_Osquery_API_SavedQueryIdOrUndefined' + Security_Osquery_API_CreatePacksRequestBody: type: object properties: description: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DescriptionOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_DescriptionOrUndefined' enabled: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_EnabledOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_EnabledOrUndefined' name: - $ref: '#/components/schemas/Security_Solution_Osquery_API_PackName' + $ref: '#/components/schemas/Security_Osquery_API_PackName' policy_ids: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_PolicyIdsOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_PolicyIdsOrUndefined' queries: - $ref: '#/components/schemas/Security_Solution_Osquery_API_ObjectQueries' + $ref: '#/components/schemas/Security_Osquery_API_ObjectQueries' shards: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Shards' - Security_Solution_Osquery_API_CreateSavedQueryRequestBody: + $ref: '#/components/schemas/Security_Osquery_API_Shards' + Security_Osquery_API_CreateSavedQueryRequestBody: type: object properties: description: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DescriptionOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_DescriptionOrUndefined' ecs_mapping: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_ECSMappingOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_ECSMappingOrUndefined' id: - $ref: '#/components/schemas/Security_Solution_Osquery_API_SavedQueryId' + $ref: '#/components/schemas/Security_Osquery_API_SavedQueryId' interval: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Interval' + $ref: '#/components/schemas/Security_Osquery_API_Interval' platform: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DescriptionOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_DescriptionOrUndefined' query: - $ref: '#/components/schemas/Security_Solution_Osquery_API_QueryOrUndefined' + $ref: '#/components/schemas/Security_Osquery_API_QueryOrUndefined' removed: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_RemovedOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_RemovedOrUndefined' snapshot: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_SnapshotOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_SnapshotOrUndefined' version: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_VersionOrUndefined - Security_Solution_Osquery_API_DefaultSuccessResponse: + $ref: '#/components/schemas/Security_Osquery_API_VersionOrUndefined' + Security_Osquery_API_DefaultSuccessResponse: type: object properties: {} - Security_Solution_Osquery_API_Description: + Security_Osquery_API_Description: type: string - Security_Solution_Osquery_API_DescriptionOrUndefined: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Description' + Security_Osquery_API_DescriptionOrUndefined: + $ref: '#/components/schemas/Security_Osquery_API_Description' nullable: true - Security_Solution_Osquery_API_ECSMapping: + Security_Osquery_API_ECSMapping: additionalProperties: - $ref: '#/components/schemas/Security_Solution_Osquery_API_ECSMappingItem' + $ref: '#/components/schemas/Security_Osquery_API_ECSMappingItem' type: object - Security_Solution_Osquery_API_ECSMappingItem: + Security_Osquery_API_ECSMappingItem: type: object properties: field: @@ -40200,220 +38941,196 @@ components: - items: type: string type: array - Security_Solution_Osquery_API_ECSMappingOrUndefined: - $ref: '#/components/schemas/Security_Solution_Osquery_API_ECSMapping' + Security_Osquery_API_ECSMappingOrUndefined: + $ref: '#/components/schemas/Security_Osquery_API_ECSMapping' nullable: true - Security_Solution_Osquery_API_Enabled: + Security_Osquery_API_Enabled: type: boolean - Security_Solution_Osquery_API_EnabledOrUndefined: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Enabled' + Security_Osquery_API_EnabledOrUndefined: + $ref: '#/components/schemas/Security_Osquery_API_Enabled' nullable: true - Security_Solution_Osquery_API_FindLiveQueryRequestQuery: + Security_Osquery_API_FindLiveQueryRequestQuery: type: object properties: kuery: - $ref: '#/components/schemas/Security_Solution_Osquery_API_KueryOrUndefined' + $ref: '#/components/schemas/Security_Osquery_API_KueryOrUndefined' page: - $ref: '#/components/schemas/Security_Solution_Osquery_API_PageOrUndefined' + $ref: '#/components/schemas/Security_Osquery_API_PageOrUndefined' pageSize: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_PageSizeOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_PageSizeOrUndefined' sort: - $ref: '#/components/schemas/Security_Solution_Osquery_API_SortOrUndefined' + $ref: '#/components/schemas/Security_Osquery_API_SortOrUndefined' sortOrder: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_SortOrderOrUndefined - Security_Solution_Osquery_API_FindPacksRequestQuery: + $ref: '#/components/schemas/Security_Osquery_API_SortOrderOrUndefined' + Security_Osquery_API_FindPacksRequestQuery: type: object properties: page: - $ref: '#/components/schemas/Security_Solution_Osquery_API_PageOrUndefined' + $ref: '#/components/schemas/Security_Osquery_API_PageOrUndefined' pageSize: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_PageSizeOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_PageSizeOrUndefined' sort: - $ref: '#/components/schemas/Security_Solution_Osquery_API_SortOrUndefined' + $ref: '#/components/schemas/Security_Osquery_API_SortOrUndefined' sortOrder: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_SortOrderOrUndefined - Security_Solution_Osquery_API_FindSavedQueryRequestQuery: + $ref: '#/components/schemas/Security_Osquery_API_SortOrderOrUndefined' + Security_Osquery_API_FindSavedQueryRequestQuery: type: object properties: page: - $ref: '#/components/schemas/Security_Solution_Osquery_API_PageOrUndefined' + $ref: '#/components/schemas/Security_Osquery_API_PageOrUndefined' pageSize: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_PageSizeOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_PageSizeOrUndefined' sort: - $ref: '#/components/schemas/Security_Solution_Osquery_API_SortOrUndefined' + $ref: '#/components/schemas/Security_Osquery_API_SortOrUndefined' sortOrder: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_SortOrderOrUndefined - Security_Solution_Osquery_API_GetLiveQueryResultsRequestQuery: + $ref: '#/components/schemas/Security_Osquery_API_SortOrderOrUndefined' + Security_Osquery_API_GetLiveQueryResultsRequestQuery: type: object properties: kuery: - $ref: '#/components/schemas/Security_Solution_Osquery_API_KueryOrUndefined' + $ref: '#/components/schemas/Security_Osquery_API_KueryOrUndefined' page: - $ref: '#/components/schemas/Security_Solution_Osquery_API_PageOrUndefined' + $ref: '#/components/schemas/Security_Osquery_API_PageOrUndefined' pageSize: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_PageSizeOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_PageSizeOrUndefined' sort: - $ref: '#/components/schemas/Security_Solution_Osquery_API_SortOrUndefined' + $ref: '#/components/schemas/Security_Osquery_API_SortOrUndefined' sortOrder: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_SortOrderOrUndefined - Security_Solution_Osquery_API_Id: + $ref: '#/components/schemas/Security_Osquery_API_SortOrderOrUndefined' + Security_Osquery_API_Id: type: string - Security_Solution_Osquery_API_Interval: + Security_Osquery_API_Interval: type: string - Security_Solution_Osquery_API_IntervalOrUndefined: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Interval' + Security_Osquery_API_IntervalOrUndefined: + $ref: '#/components/schemas/Security_Osquery_API_Interval' nullable: true - Security_Solution_Osquery_API_KueryOrUndefined: + Security_Osquery_API_KueryOrUndefined: nullable: true type: string - Security_Solution_Osquery_API_ObjectQueries: + Security_Osquery_API_ObjectQueries: additionalProperties: - $ref: '#/components/schemas/Security_Solution_Osquery_API_ObjectQueriesItem' + $ref: '#/components/schemas/Security_Osquery_API_ObjectQueriesItem' type: object - Security_Solution_Osquery_API_ObjectQueriesItem: + Security_Osquery_API_ObjectQueriesItem: type: object properties: ecs_mapping: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_ECSMappingOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_ECSMappingOrUndefined' id: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Id' + $ref: '#/components/schemas/Security_Osquery_API_Id' platform: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_PlatformOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_PlatformOrUndefined' query: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Query' + $ref: '#/components/schemas/Security_Osquery_API_Query' removed: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_RemovedOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_RemovedOrUndefined' saved_query_id: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_SavedQueryIdOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_SavedQueryIdOrUndefined' snapshot: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_SnapshotOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_SnapshotOrUndefined' version: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_VersionOrUndefined - Security_Solution_Osquery_API_PackId: + $ref: '#/components/schemas/Security_Osquery_API_VersionOrUndefined' + Security_Osquery_API_PackId: type: string - Security_Solution_Osquery_API_PackIdOrUndefined: - $ref: '#/components/schemas/Security_Solution_Osquery_API_PackId' + Security_Osquery_API_PackIdOrUndefined: + $ref: '#/components/schemas/Security_Osquery_API_PackId' nullable: true - Security_Solution_Osquery_API_PackName: + Security_Osquery_API_PackName: type: string - Security_Solution_Osquery_API_PageOrUndefined: + Security_Osquery_API_PageOrUndefined: nullable: true type: integer - Security_Solution_Osquery_API_PageSizeOrUndefined: + Security_Osquery_API_PageSizeOrUndefined: nullable: true type: integer - Security_Solution_Osquery_API_Platform: + Security_Osquery_API_Platform: type: string - Security_Solution_Osquery_API_PlatformOrUndefined: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Platform' + Security_Osquery_API_PlatformOrUndefined: + $ref: '#/components/schemas/Security_Osquery_API_Platform' nullable: true - Security_Solution_Osquery_API_PolicyIds: + Security_Osquery_API_PolicyIds: items: type: string type: array - Security_Solution_Osquery_API_PolicyIdsOrUndefined: - $ref: '#/components/schemas/Security_Solution_Osquery_API_PolicyIds' + Security_Osquery_API_PolicyIdsOrUndefined: + $ref: '#/components/schemas/Security_Osquery_API_PolicyIds' nullable: true - Security_Solution_Osquery_API_Query: + Security_Osquery_API_Query: type: string - Security_Solution_Osquery_API_QueryOrUndefined: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Query' + Security_Osquery_API_QueryOrUndefined: + $ref: '#/components/schemas/Security_Osquery_API_Query' nullable: true - Security_Solution_Osquery_API_Removed: + Security_Osquery_API_Removed: type: boolean - Security_Solution_Osquery_API_RemovedOrUndefined: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Removed' + Security_Osquery_API_RemovedOrUndefined: + $ref: '#/components/schemas/Security_Osquery_API_Removed' nullable: true - Security_Solution_Osquery_API_SavedQueryId: + Security_Osquery_API_SavedQueryId: type: string - Security_Solution_Osquery_API_SavedQueryIdOrUndefined: - $ref: '#/components/schemas/Security_Solution_Osquery_API_SavedQueryId' + Security_Osquery_API_SavedQueryIdOrUndefined: + $ref: '#/components/schemas/Security_Osquery_API_SavedQueryId' nullable: true - Security_Solution_Osquery_API_Shards: + Security_Osquery_API_Shards: additionalProperties: type: number type: object - Security_Solution_Osquery_API_Snapshot: + Security_Osquery_API_Snapshot: type: boolean - Security_Solution_Osquery_API_SnapshotOrUndefined: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Snapshot' + Security_Osquery_API_SnapshotOrUndefined: + $ref: '#/components/schemas/Security_Osquery_API_Snapshot' nullable: true - Security_Solution_Osquery_API_SortOrderOrUndefined: + Security_Osquery_API_SortOrderOrUndefined: oneOf: - nullable: true type: string - enum: - asc - desc - Security_Solution_Osquery_API_SortOrUndefined: + Security_Osquery_API_SortOrUndefined: nullable: true type: string - Security_Solution_Osquery_API_UpdatePacksRequestBody: + Security_Osquery_API_UpdatePacksRequestBody: type: object properties: description: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DescriptionOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_DescriptionOrUndefined' enabled: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_EnabledOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_EnabledOrUndefined' id: - $ref: '#/components/schemas/Security_Solution_Osquery_API_PackId' + $ref: '#/components/schemas/Security_Osquery_API_PackId' policy_ids: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_PolicyIdsOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_PolicyIdsOrUndefined' queries: - $ref: '#/components/schemas/Security_Solution_Osquery_API_ObjectQueries' + $ref: '#/components/schemas/Security_Osquery_API_ObjectQueries' shards: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Shards' - Security_Solution_Osquery_API_UpdateSavedQueryRequestBody: + $ref: '#/components/schemas/Security_Osquery_API_Shards' + Security_Osquery_API_UpdateSavedQueryRequestBody: type: object properties: description: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DescriptionOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_DescriptionOrUndefined' ecs_mapping: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_ECSMappingOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_ECSMappingOrUndefined' id: - $ref: '#/components/schemas/Security_Solution_Osquery_API_SavedQueryId' + $ref: '#/components/schemas/Security_Osquery_API_SavedQueryId' interval: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_IntervalOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_IntervalOrUndefined' platform: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DescriptionOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_DescriptionOrUndefined' query: - $ref: '#/components/schemas/Security_Solution_Osquery_API_QueryOrUndefined' + $ref: '#/components/schemas/Security_Osquery_API_QueryOrUndefined' removed: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_RemovedOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_RemovedOrUndefined' snapshot: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_SnapshotOrUndefined + $ref: '#/components/schemas/Security_Osquery_API_SnapshotOrUndefined' version: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_VersionOrUndefined - Security_Solution_Osquery_API_Version: + $ref: '#/components/schemas/Security_Osquery_API_VersionOrUndefined' + Security_Osquery_API_Version: type: string - Security_Solution_Osquery_API_VersionOrUndefined: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Version' + Security_Osquery_API_VersionOrUndefined: + $ref: '#/components/schemas/Security_Osquery_API_Version' nullable: true - Security_Solution_Timeline_API_BareNote: + Security_Timeline_API_BareNote: type: object properties: created: @@ -40429,8 +39146,28 @@ components: nullable: true type: string timelineId: + type: string + updated: + nullable: true + type: number + updatedBy: + nullable: true + type: string + required: + - timelineId + Security_Timeline_API_BarePinnedEvent: + type: object + properties: + created: + nullable: true + type: number + createdBy: nullable: true type: string + eventId: + type: string + timelineId: + type: string updated: nullable: true type: number @@ -40438,8 +39175,9 @@ components: nullable: true type: string required: + - eventId - timelineId - Security_Solution_Timeline_API_ColumnHeaderResult: + Security_Timeline_API_ColumnHeaderResult: type: object properties: aggregatable: @@ -40468,7 +39206,7 @@ components: type: boolean type: type: string - Security_Solution_Timeline_API_DataProviderQueryMatch: + Security_Timeline_API_DataProviderQueryMatch: type: object properties: enabled: @@ -40487,14 +39225,13 @@ components: nullable: true type: string queryMatch: - $ref: '#/components/schemas/Security_Solution_Timeline_API_QueryMatchResult' - Security_Solution_Timeline_API_DataProviderResult: + $ref: '#/components/schemas/Security_Timeline_API_QueryMatchResult' + Security_Timeline_API_DataProviderResult: type: object properties: and: items: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_DataProviderQueryMatch + $ref: '#/components/schemas/Security_Timeline_API_DataProviderQueryMatch' nullable: true type: array enabled: @@ -40513,12 +39250,12 @@ components: nullable: true type: string queryMatch: - $ref: '#/components/schemas/Security_Solution_Timeline_API_QueryMatchResult' + $ref: '#/components/schemas/Security_Timeline_API_QueryMatchResult' nullable: true type: - $ref: '#/components/schemas/Security_Solution_Timeline_API_DataProviderType' + $ref: '#/components/schemas/Security_Timeline_API_DataProviderType' nullable: true - Security_Solution_Timeline_API_DataProviderType: + Security_Timeline_API_DataProviderType: description: >- The type of data provider to create. Valid values are `default` and `template`. @@ -40526,13 +39263,13 @@ components: - default - template type: string - Security_Solution_Timeline_API_DocumentIds: + Security_Timeline_API_DocumentIds: oneOf: - items: type: string type: array - type: string - Security_Solution_Timeline_API_FavoriteTimelineResponse: + Security_Timeline_API_FavoriteTimelineResponse: type: object properties: code: @@ -40540,8 +39277,7 @@ components: type: number favorite: items: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_FavoriteTimelineResult + $ref: '#/components/schemas/Security_Timeline_API_FavoriteTimelineResult' type: array message: nullable: true @@ -40555,13 +39291,13 @@ components: nullable: true type: number timelineType: - $ref: '#/components/schemas/Security_Solution_Timeline_API_TimelineType' + $ref: '#/components/schemas/Security_Timeline_API_TimelineType' version: type: string required: - savedObjectId - version - Security_Solution_Timeline_API_FavoriteTimelineResult: + Security_Timeline_API_FavoriteTimelineResult: type: object properties: favoriteDate: @@ -40573,7 +39309,7 @@ components: userName: nullable: true type: string - Security_Solution_Timeline_API_FilterTimelineResult: + Security_Timeline_API_FilterTimelineResult: type: object properties: exists: @@ -40613,7 +39349,19 @@ components: type: string script: type: string - Security_Solution_Timeline_API_ImportTimelineResult: + Security_Timeline_API_GetNotesResult: + type: object + properties: + notes: + items: + $ref: '#/components/schemas/Security_Timeline_API_Note' + type: array + totalCount: + type: number + required: + - totalCount + - notes + Security_Timeline_API_ImportTimelineResult: type: object properties: errors: @@ -40638,19 +39386,19 @@ components: type: number timelines_updated: type: number - Security_Solution_Timeline_API_ImportTimelines: + Security_Timeline_API_ImportTimelines: allOf: - - $ref: '#/components/schemas/Security_Solution_Timeline_API_SavedTimeline' + - $ref: '#/components/schemas/Security_Timeline_API_SavedTimeline' - type: object properties: eventNotes: items: - $ref: '#/components/schemas/Security_Solution_Timeline_API_BareNote' + $ref: '#/components/schemas/Security_Timeline_API_BareNote' nullable: true type: array globalNotes: items: - $ref: '#/components/schemas/Security_Solution_Timeline_API_BareNote' + $ref: '#/components/schemas/Security_Timeline_API_BareNote' nullable: true type: array pinnedEventIds: @@ -40664,44 +39412,48 @@ components: version: nullable: true type: string - Security_Solution_Timeline_API_Note: + Security_Timeline_API_Note: allOf: - - $ref: '#/components/schemas/Security_Solution_Timeline_API_BareNote' + - $ref: '#/components/schemas/Security_Timeline_API_BareNote' - type: object properties: noteId: type: string version: type: string - Security_Solution_Timeline_API_PinnedEvent: + required: + - noteId + - version + Security_Timeline_API_PersistPinnedEventResponse: + oneOf: + - allOf: + - $ref: '#/components/schemas/Security_Timeline_API_PinnedEvent' + - $ref: >- + #/components/schemas/Security_Timeline_API_PinnedEventBaseResponseBody + - nullable: true + type: object + Security_Timeline_API_PinnedEvent: + allOf: + - $ref: '#/components/schemas/Security_Timeline_API_BarePinnedEvent' + - type: object + properties: + pinnedEventId: + type: string + version: + type: string + required: + - pinnedEventId + - version + Security_Timeline_API_PinnedEventBaseResponseBody: type: object properties: - created: - nullable: true - type: number - createdBy: - nullable: true - type: string - eventId: - type: string - pinnedEventId: - type: string - timelineId: - type: string - updated: - nullable: true + code: type: number - updatedBy: - nullable: true - type: string - version: + message: type: string required: - - eventId - - pinnedEventId - - timelineId - - version - Security_Solution_Timeline_API_QueryMatchResult: + - code + Security_Timeline_API_QueryMatchResult: type: object properties: displayField: @@ -40719,7 +39471,7 @@ components: value: nullable: true type: string - Security_Solution_Timeline_API_Readable: + Security_Timeline_API_Readable: type: object properties: _data: @@ -40745,7 +39497,20 @@ components: type: object readable: type: boolean - Security_Solution_Timeline_API_RowRendererId: + Security_Timeline_API_ResponseNote: + type: object + properties: + code: + type: number + message: + type: string + note: + $ref: '#/components/schemas/Security_Timeline_API_Note' + required: + - code + - message + - note + Security_Timeline_API_RowRendererId: enum: - alert - alerts @@ -40766,13 +39531,12 @@ components: - threat_match - zeek type: string - Security_Solution_Timeline_API_SavedTimeline: + Security_Timeline_API_SavedTimeline: type: object properties: columns: items: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_ColumnHeaderResult + $ref: '#/components/schemas/Security_Timeline_API_ColumnHeaderResult' nullable: true type: array created: @@ -40783,8 +39547,7 @@ components: type: string dataProviders: items: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_DataProviderResult + $ref: '#/components/schemas/Security_Timeline_API_DataProviderResult' nullable: true type: array dataViewId: @@ -40832,19 +39595,17 @@ components: type: string excludedRowRendererIds: items: - $ref: '#/components/schemas/Security_Solution_Timeline_API_RowRendererId' + $ref: '#/components/schemas/Security_Timeline_API_RowRendererId' nullable: true type: array favorite: items: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_FavoriteTimelineResult + $ref: '#/components/schemas/Security_Timeline_API_FavoriteTimelineResult' nullable: true type: array filters: items: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_FilterTimelineResult + $ref: '#/components/schemas/Security_Timeline_API_FilterTimelineResult' nullable: true type: array indexNames: @@ -40857,7 +39618,7 @@ components: type: string kqlQuery: $ref: >- - #/components/schemas/Security_Solution_Timeline_API_SerializedFilterQueryResult + #/components/schemas/Security_Timeline_API_SerializedFilterQueryResult nullable: true savedQueryId: nullable: true @@ -40866,7 +39627,7 @@ components: nullable: true type: string sort: - $ref: '#/components/schemas/Security_Solution_Timeline_API_Sort' + $ref: '#/components/schemas/Security_Timeline_API_Sort' nullable: true status: enum: @@ -40882,7 +39643,7 @@ components: nullable: true type: number timelineType: - $ref: '#/components/schemas/Security_Solution_Timeline_API_TimelineType' + $ref: '#/components/schemas/Security_Timeline_API_TimelineType' nullable: true title: nullable: true @@ -40893,7 +39654,7 @@ components: updatedBy: nullable: true type: string - Security_Solution_Timeline_API_SerializedFilterQueryResult: + Security_Timeline_API_SerializedFilterQueryResult: type: object properties: filterQuery: @@ -40913,13 +39674,13 @@ components: serializedQuery: nullable: true type: string - Security_Solution_Timeline_API_Sort: + Security_Timeline_API_Sort: oneOf: - - $ref: '#/components/schemas/Security_Solution_Timeline_API_SortObject' + - $ref: '#/components/schemas/Security_Timeline_API_SortObject' - items: - $ref: '#/components/schemas/Security_Solution_Timeline_API_SortObject' + $ref: '#/components/schemas/Security_Timeline_API_SortObject' type: array - Security_Solution_Timeline_API_SortFieldTimeline: + Security_Timeline_API_SortFieldTimeline: description: The field to sort the timelines by. enum: - title @@ -40927,7 +39688,7 @@ components: - updated - created type: string - Security_Solution_Timeline_API_SortObject: + Security_Timeline_API_SortObject: type: object properties: columnId: @@ -40939,14 +39700,14 @@ components: sortDirection: nullable: true type: string - Security_Solution_Timeline_API_TimelineResponse: + Security_Timeline_API_TimelineResponse: allOf: - - $ref: '#/components/schemas/Security_Solution_Timeline_API_SavedTimeline' + - $ref: '#/components/schemas/Security_Timeline_API_SavedTimeline' - type: object properties: eventIdToNoteIds: items: - $ref: '#/components/schemas/Security_Solution_Timeline_API_Note' + $ref: '#/components/schemas/Security_Timeline_API_Note' type: array noteIds: items: @@ -40954,7 +39715,7 @@ components: type: array notes: items: - $ref: '#/components/schemas/Security_Solution_Timeline_API_Note' + $ref: '#/components/schemas/Security_Timeline_API_Note' type: array pinnedEventIds: items: @@ -40962,8 +39723,7 @@ components: type: array pinnedEventsSaveObject: items: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_PinnedEvent + $ref: '#/components/schemas/Security_Timeline_API_PinnedEvent' type: array savedObjectId: type: string @@ -40972,7 +39732,7 @@ components: required: - savedObjectId - version - Security_Solution_Timeline_API_TimelineStatus: + Security_Timeline_API_TimelineStatus: description: >- The status of the timeline. Valid values are `active`, `draft`, and `immutable`. @@ -40981,7 +39741,7 @@ components: - draft - immutable type: string - Security_Solution_Timeline_API_TimelineType: + Security_Timeline_API_TimelineType: description: >- The type of timeline to create. Valid values are `default` and `template`. @@ -42258,29 +41018,29 @@ tags: You can create rules that automatically turn events and external alerts sent to Elastic Security into detection alerts. These alerts are displayed on the Detections page. - name: Security Solution Detections API + name: Security Detections API - description: >- Endpoint Exceptions API allows you to manage detection rule endpoint exceptions to prevent a rule from generating an alert from incoming events even when the rule's other criteria are met. - name: Security Solution Endpoint Exceptions API + name: Security Endpoint Exceptions API - description: Interact with and manage endpoints running the Elastic Defend integration. - name: Security Solution Endpoint Management API + name: Security Endpoint Management API - description: '' - name: Security Solution Entity Analytics API + name: Security Entity Analytics API - description: >- Exceptions API allows you to manage detection rule exceptions to prevent a rule from generating an alert from incoming events even when the rule's other criteria are met. - name: Security Solution Exceptions API + name: Security Exceptions API - description: Lists API allows you to manage lists of keywords, IPs or IP ranges items. - name: Security Solution Lists API + name: Security Lists API - description: Run live queries, manage packs and saved queries. - name: Security Solution Osquery API + name: Security Osquery API - description: >- You can create Timelines and Timeline templates via the API, as well as import new Timelines from an ndjson file. - name: Security Solution Timeline API + name: Security Timeline API - description: SLO APIs enable you to define, manage and track service-level objectives name: slo - name: system diff --git a/package.json b/package.json index ea24d9016a81c..463c3cfdb12c3 100644 --- a/package.json +++ b/package.json @@ -115,7 +115,7 @@ "@elastic/ecs": "^8.11.1", "@elastic/elasticsearch": "^8.15.0", "@elastic/ems-client": "8.5.3", - "@elastic/eui": "95.10.1", + "@elastic/eui": "95.11.0", "@elastic/filesaver": "1.1.2", "@elastic/node-crypto": "1.2.1", "@elastic/numeral": "^2.5.1", @@ -645,6 +645,7 @@ "@kbn/ml-date-picker": "link:x-pack/packages/ml/date_picker", "@kbn/ml-date-utils": "link:x-pack/packages/ml/date_utils", "@kbn/ml-error-utils": "link:x-pack/packages/ml/error_utils", + "@kbn/ml-field-stats-flyout": "link:x-pack/packages/ml/field_stats_flyout", "@kbn/ml-in-memory-table": "link:x-pack/packages/ml/in_memory_table", "@kbn/ml-is-defined": "link:x-pack/packages/ml/is_defined", "@kbn/ml-is-populated-object": "link:x-pack/packages/ml/is_populated_object", @@ -652,6 +653,7 @@ "@kbn/ml-local-storage": "link:x-pack/packages/ml/local_storage", "@kbn/ml-nested-property": "link:x-pack/packages/ml/nested_property", "@kbn/ml-number-utils": "link:x-pack/packages/ml/number_utils", + "@kbn/ml-parse-interval": "link:x-pack/packages/ml/parse_interval", "@kbn/ml-plugin": "link:x-pack/plugins/ml", "@kbn/ml-query-utils": "link:x-pack/packages/ml/query_utils", "@kbn/ml-random-sampler-utils": "link:x-pack/packages/ml/random_sampler_utils", @@ -663,6 +665,7 @@ "@kbn/ml-trained-models-utils": "link:x-pack/packages/ml/trained_models_utils", "@kbn/ml-ui-actions": "link:x-pack/packages/ml/ui_actions", "@kbn/ml-url-state": "link:x-pack/packages/ml/url_state", + "@kbn/ml-validators": "link:x-pack/packages/ml/validators", "@kbn/monaco": "link:packages/kbn-monaco", "@kbn/monitoring-collection-plugin": "link:x-pack/plugins/monitoring_collection", "@kbn/monitoring-plugin": "link:x-pack/plugins/monitoring", @@ -1042,7 +1045,7 @@ "adm-zip": "^0.5.9", "ai": "^2.2.33", "ajv": "^8.12.0", - "ansi-regex": "^6.0.1", + "ansi-regex": "^6.1.0", "antlr4": "^4.13.1-patch-1", "archiver": "^5.3.1", "async": "^3.2.3", @@ -1760,7 +1763,7 @@ "mochawesome-merge": "^4.3.0", "mock-fs": "^5.1.2", "ms-chromium-edge-driver": "^0.5.1", - "msw": "^2.4.5", + "msw": "^2.4.8", "multistream": "^4.1.0", "mutation-observer": "^1.0.3", "native-hdr-histogram": "^1.0.0", @@ -1811,7 +1814,7 @@ "swagger-ui-express": "^5.0.1", "table": "^6.8.1", "tape": "^5.0.1", - "terser": "^5.32.0", + "terser": "^5.33.0", "terser-webpack-plugin": "^4.2.3", "tough-cookie": "^5.0.0", "tree-kill": "^1.2.2", diff --git a/packages/core/chrome/core-chrome-browser-internal/src/chrome_service.tsx b/packages/core/chrome/core-chrome-browser-internal/src/chrome_service.tsx index dd39fa0287f27..3444b3edd8078 100644 --- a/packages/core/chrome/core-chrome-browser-internal/src/chrome_service.tsx +++ b/packages/core/chrome/core-chrome-browser-internal/src/chrome_service.tsx @@ -568,6 +568,8 @@ export class ChromeService { sideNav: { getIsCollapsed$: () => this.isSideNavCollapsed$.asObservable(), setIsCollapsed: setIsSideNavCollapsed, + getPanelSelectedNode$: projectNavigation.getPanelSelectedNode$.bind(projectNavigation), + setPanelSelectedNode: projectNavigation.setPanelSelectedNode.bind(projectNavigation), }, getActiveSolutionNavId$: () => projectNavigation.getActiveSolutionNavId$(), project: { diff --git a/packages/core/chrome/core-chrome-browser-internal/src/project_navigation/project_navigation_service.test.ts b/packages/core/chrome/core-chrome-browser-internal/src/project_navigation/project_navigation_service.test.ts index 4d9d625970b7d..d1be94aad246a 100644 --- a/packages/core/chrome/core-chrome-browser-internal/src/project_navigation/project_navigation_service.test.ts +++ b/packages/core/chrome/core-chrome-browser-internal/src/project_navigation/project_navigation_service.test.ts @@ -1003,4 +1003,69 @@ describe('solution navigations', () => { expect(activeSolution).toEqual(solution1); } }); + + it('should set and return the nav panel selected node', async () => { + const { projectNavigation } = setup({ navLinkIds: ['link1', 'link2', 'link3'] }); + + { + const selectedNode = await firstValueFrom(projectNavigation.getPanelSelectedNode$()); + expect(selectedNode).toBeNull(); + } + + { + const node: ChromeProjectNavigationNode = { + id: 'node1', + title: 'Node 1', + path: 'node1', + }; + projectNavigation.setPanelSelectedNode(node); + + const selectedNode = await firstValueFrom(projectNavigation.getPanelSelectedNode$()); + + expect(selectedNode).toBe(node); + } + + { + const fooSolution: SolutionNavigationDefinition = { + id: 'fooSolution', + title: 'Foo solution', + icon: 'logoSolution', + homePage: 'discover', + navigationTree$: of({ + body: [ + { + type: 'navGroup', + id: 'group1', + children: [ + { link: 'link1' }, + { + id: 'group2', + children: [ + { + link: 'link2', // We'll target this node using its id + }, + ], + }, + { link: 'link3' }, + ], + }, + ], + }), + }; + + projectNavigation.changeActiveSolutionNavigation('foo'); + projectNavigation.updateSolutionNavigations({ foo: fooSolution }); + + projectNavigation.setPanelSelectedNode('link2'); // Set the selected node using its id + + const selectedNode = await firstValueFrom(projectNavigation.getPanelSelectedNode$()); + + expect(selectedNode).toMatchObject({ + id: 'link2', + href: '/app/link2', + path: 'group1.group2.link2', + title: 'LINK2', + }); + } + }); }); diff --git a/packages/core/chrome/core-chrome-browser-internal/src/project_navigation/project_navigation_service.ts b/packages/core/chrome/core-chrome-browser-internal/src/project_navigation/project_navigation_service.ts index 1a8c05f13774f..6f77705069eaf 100644 --- a/packages/core/chrome/core-chrome-browser-internal/src/project_navigation/project_navigation_service.ts +++ b/packages/core/chrome/core-chrome-browser-internal/src/project_navigation/project_navigation_service.ts @@ -74,6 +74,10 @@ export class ProjectNavigationService { // The navigation tree for the Side nav UI that still contains layout information (body, footer, etc.) private navigationTreeUi$ = new BehaviorSubject(null); private activeNodes$ = new BehaviorSubject([]); + // Keep a reference to the nav node selected when the navigation panel is opened + private readonly panelSelectedNode$ = new BehaviorSubject( + null + ); private projectBreadcrumbs$ = new BehaviorSubject<{ breadcrumbs: ChromeProjectBreadcrumb[]; @@ -187,6 +191,8 @@ export class ProjectNavigationService { getActiveSolutionNavDefinition$: this.getActiveSolutionNavDefinition$.bind(this), /** In stateful Kibana, get the id of the active solution navigation */ getActiveSolutionNavId$: () => this.activeSolutionNavDefinitionId$.asObservable(), + getPanelSelectedNode$: () => this.panelSelectedNode$.asObservable(), + setPanelSelectedNode: this.setPanelSelectedNode.bind(this), }; } @@ -415,6 +421,34 @@ export class ProjectNavigationService { } } + private setPanelSelectedNode = (_node: string | ChromeProjectNavigationNode | null) => { + const node = typeof _node === 'string' ? this.findNodeById(_node) : _node; + this.panelSelectedNode$.next(node); + }; + + private findNodeById(id: string): ChromeProjectNavigationNode | null { + const allNodes = this.navigationTree$.getValue(); + if (!allNodes) return null; + + const find = (nodes: ChromeProjectNavigationNode[]): ChromeProjectNavigationNode | null => { + // Recursively search for the node with the given id + for (const node of nodes) { + if (node.id === id) { + return node; + } + if (node.children) { + const found = find(node.children); + if (found) { + return found; + } + } + } + return null; + }; + + return find(allNodes); + } + private get http() { if (!this._http) { throw new Error('Http service not provided.'); diff --git a/packages/core/chrome/core-chrome-browser-mocks/src/chrome_service.mock.ts b/packages/core/chrome/core-chrome-browser-mocks/src/chrome_service.mock.ts index 1380214e4311e..ff39293738ff0 100644 --- a/packages/core/chrome/core-chrome-browser-mocks/src/chrome_service.mock.ts +++ b/packages/core/chrome/core-chrome-browser-mocks/src/chrome_service.mock.ts @@ -54,6 +54,8 @@ const createStartContractMock = () => { sideNav: { getIsCollapsed$: jest.fn(), setIsCollapsed: jest.fn(), + getPanelSelectedNode$: jest.fn(), + setPanelSelectedNode: jest.fn(), }, getBreadcrumbsAppendExtension$: jest.fn(), setBreadcrumbsAppendExtension: jest.fn(), diff --git a/packages/core/chrome/core-chrome-browser/index.ts b/packages/core/chrome/core-chrome-browser/index.ts index 6be7f1077e6aa..4400c5e7d2b3f 100644 --- a/packages/core/chrome/core-chrome-browser/index.ts +++ b/packages/core/chrome/core-chrome-browser/index.ts @@ -51,6 +51,7 @@ export type { GroupDefinition, ItemDefinition, PresetDefinition, + PanelSelectedNode, RecentlyAccessedDefinition, NavigationGroupPreset, RootNavigationItemDefinition, diff --git a/packages/core/chrome/core-chrome-browser/src/contracts.ts b/packages/core/chrome/core-chrome-browser/src/contracts.ts index 1e9ea66bc0920..9fe54c971bbc7 100644 --- a/packages/core/chrome/core-chrome-browser/src/contracts.ts +++ b/packages/core/chrome/core-chrome-browser/src/contracts.ts @@ -16,6 +16,7 @@ import type { ChromeHelpExtension } from './help_extension'; import type { ChromeBreadcrumb, ChromeBreadcrumbsAppendExtension } from './breadcrumb'; import type { ChromeBadge, ChromeStyle, ChromeUserBanner } from './types'; import type { ChromeGlobalHelpExtensionMenuLink } from './help_extension'; +import type { PanelSelectedNode } from './project_navigation'; /** * ChromeStart allows plugins to customize the global chrome header UI and @@ -184,6 +185,20 @@ export interface ChromeStart { * @param isCollapsed The collapsed state of the side nav. */ setIsCollapsed(isCollapsed: boolean): void; + + /** + * Get an observable of the selected nav node that opens the side nav panel. + */ + getPanelSelectedNode$: () => Observable; + + /** + * Set the selected nav node that opens the side nav panel. + * + * @param node The selected nav node that opens the side nav panel. If a string is provided, + * it will be used as the **id** of the selected nav node. If `null` is provided, the side nav panel + * will be closed. + */ + setPanelSelectedNode(node: string | PanelSelectedNode | null): void; }; /** diff --git a/packages/core/chrome/core-chrome-browser/src/index.ts b/packages/core/chrome/core-chrome-browser/src/index.ts index ad041e8a3e297..7247bfe69710a 100644 --- a/packages/core/chrome/core-chrome-browser/src/index.ts +++ b/packages/core/chrome/core-chrome-browser/src/index.ts @@ -31,6 +31,7 @@ export type { ChromeBadge, ChromeUserBanner, ChromeStyle } from './types'; export type { ChromeProjectNavigationNode, + PanelSelectedNode, AppDeepLinkId, AppId, CloudLinkId, diff --git a/packages/core/chrome/core-chrome-browser/src/project_navigation.ts b/packages/core/chrome/core-chrome-browser/src/project_navigation.ts index 91f84d6c32145..417deea8e003e 100644 --- a/packages/core/chrome/core-chrome-browser/src/project_navigation.ts +++ b/packages/core/chrome/core-chrome-browser/src/project_navigation.ts @@ -7,7 +7,7 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import type { ComponentType, MouseEventHandler } from 'react'; +import type { ComponentType, MouseEventHandler, ReactNode } from 'react'; import type { Location } from 'history'; import type { EuiSideNavItemType, EuiThemeSizes, IconType } from '@elastic/eui'; import type { Observable } from 'rxjs'; @@ -247,6 +247,13 @@ export interface ChromeProjectNavigationNode extends NodeDefinitionBase { isElasticInternalLink?: boolean; } +export type PanelSelectedNode = Pick< + ChromeProjectNavigationNode, + 'id' | 'children' | 'path' | 'sideNavStatus' | 'deepLink' +> & { + title: string | ReactNode; +}; + /** @public */ export interface SideNavCompProps { activeNodes: ChromeProjectNavigationNode[][]; diff --git a/packages/core/i18n/core-i18n-browser-internal/src/__snapshots__/i18n_service.test.tsx.snap b/packages/core/i18n/core-i18n-browser-internal/src/__snapshots__/i18n_service.test.tsx.snap index 2285da518ce29..23a5239116c98 100644 --- a/packages/core/i18n/core-i18n-browser-internal/src/__snapshots__/i18n_service.test.tsx.snap +++ b/packages/core/i18n/core-i18n-browser-internal/src/__snapshots__/i18n_service.test.tsx.snap @@ -35,8 +35,9 @@ exports[`#start() returns \`Context\` component 1`] = ` "euiCodeBlockCopy.copy": "Copy", "euiCodeBlockFullScreen.fullscreenCollapse": "Collapse", "euiCodeBlockFullScreen.fullscreenExpand": "Expand", - "euiCollapsedItemActions.allActions": "All actions", + "euiCollapsedItemActions.allActions": [Function], "euiCollapsedItemActions.allActionsDisabled": "Individual item actions are disabled when rows are being selected.", + "euiCollapsedItemActions.allActionsTooltip": "All actions", "euiCollapsedNavButton.ariaLabelButtonIcon": [Function], "euiCollapsibleNavBeta.ariaLabel": "Site menu", "euiCollapsibleNavButton.ariaLabelClose": "Close navigation", @@ -58,6 +59,7 @@ exports[`#start() returns \`Context\` component 1`] = ` "euiColumnActions.moveLeft": "Move left", "euiColumnActions.moveRight": "Move right", "euiColumnActions.sort": [Function], + "euiColumnActions.unsort": [Function], "euiColumnSelector.button": "Columns", "euiColumnSelector.dragHandleAriaLabel": "Drag handle", "euiColumnSelector.hideAll": "Hide all", diff --git a/packages/core/i18n/core-i18n-browser-internal/src/i18n_eui_mapping.tsx b/packages/core/i18n/core-i18n-browser-internal/src/i18n_eui_mapping.tsx index c81aca1e5b4e6..3fa687fddd9da 100644 --- a/packages/core/i18n/core-i18n-browser-internal/src/i18n_eui_mapping.tsx +++ b/packages/core/i18n/core-i18n-browser-internal/src/i18n_eui_mapping.tsx @@ -163,12 +163,18 @@ export const getEuiContextMapping = (): EuiTokensObject => { description: 'ARIA label for a button that enters fullscreen view', } ), - 'euiCollapsedItemActions.allActions': i18n.translate( - 'core.euiCollapsedItemActions.allActions', + 'euiCollapsedItemActions.allActions': ({ index }: EuiValues) => + i18n.translate('core.euiCollapsedItemActions.allActions', { + defaultMessage: 'All actions, row {index}', + values: { index }, + description: + 'ARIA label for a button that is rendered on multiple table rows, that expands an actions menu', + }), + 'euiCollapsedItemActions.allActionsTooltip': i18n.translate( + 'core.euiCollapsedItemActions.allActionsTooltip', { defaultMessage: 'All actions', - description: - 'ARIA label and tooltip content describing a button that expands an actions menu', + description: 'Tooltip content describing a button that expands an actions menu', } ), 'euiCollapsedItemActions.allActionsDisabled': i18n.translate( @@ -251,6 +257,11 @@ export const getEuiContextMapping = (): EuiTokensObject => { defaultMessage: 'Sort {schemaLabel}', values: { schemaLabel }, }), + 'euiColumnActions.unsort': ({ schemaLabel }: EuiValues) => + i18n.translate('core.euiColumnActions.unsort', { + defaultMessage: 'Unsort {schemaLabel}', + values: { schemaLabel }, + }), 'euiColumnActions.moveLeft': i18n.translate('core.euiColumnActions.moveLeft', { defaultMessage: 'Move left', }), @@ -529,10 +540,10 @@ export const getEuiContextMapping = (): EuiTokensObject => { values: { page, pageCount }, description: 'Screen reader text to describe the size of the data grid', }), - 'euiDataGridCell.position': ({ columnId, row, col }: EuiValues) => + 'euiDataGridCell.position': ({ columnName, columnIndex, rowIndex }: EuiValues) => i18n.translate('core.euiDataGridCell.position', { - defaultMessage: '{columnId}, column {col}, row {row}', - values: { columnId, row, col }, + defaultMessage: '{columnName}, column {columnIndex}, row {rowIndex}', + values: { columnName, columnIndex, rowIndex }, }), 'euiDataGridCell.expansionEnterPrompt': i18n.translate( 'core.euiDataGridCell.expansionEnterPrompt', diff --git a/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/model/extract_errors.test.ts b/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/model/extract_errors.test.ts index 5eb3947388d4f..01ade23e05db1 100644 --- a/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/model/extract_errors.test.ts +++ b/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/model/extract_errors.test.ts @@ -29,10 +29,7 @@ describe('extractUnknownDocFailureReason', () => { }, ]) ).toMatchInlineSnapshot(` - "Migration failed because some documents were found which use unknown saved object types: - - \\"unknownType:12\\" (type: \\"unknownType\\") - - \\"anotherUnknownType:42\\" (type: \\"anotherUnknownType\\") - + "Migration failed because some documents were found which use unknown saved object types: unknownType,anotherUnknownType To proceed with the migration you can configure Kibana to discard unknown saved objects for this migration. Please refer to some-url.co for more information." `); diff --git a/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/model/extract_errors.ts b/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/model/extract_errors.ts index edfdc98244985..0ed10e9e8f38a 100644 --- a/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/model/extract_errors.ts +++ b/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/model/extract_errors.ts @@ -52,10 +52,12 @@ export function extractUnknownDocFailureReason( resolveMigrationFailuresUrl: string, unknownDocs: DocumentIdAndType[] ): string { + const typesSet = new Set(unknownDocs.map(({ type }) => type)); return ( - `Migration failed because some documents were found which use unknown saved object types:\n` + - unknownDocs.map((doc) => `- "${doc.id}" (type: "${doc.type}")\n`).join('') + - `\nTo proceed with the migration you can configure Kibana to discard unknown saved objects for this migration.\n` + + `Migration failed because some documents were found which use unknown saved object types: ${Array.from( + typesSet.values() + )}\n` + + `To proceed with the migration you can configure Kibana to discard unknown saved objects for this migration.\n` + `Please refer to ${resolveMigrationFailuresUrl} for more information.` ); } diff --git a/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/model/model.ts b/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/model/model.ts index e619daa73cdae..14b171ac097da 100644 --- a/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/model/model.ts +++ b/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/model/model.ts @@ -559,13 +559,21 @@ export const model = (currentState: State, resW: ResponseType): deleteByQueryTaskId: res.right.taskId, }; } else { + const reason = extractUnknownDocFailureReason( + stateP.migrationDocLinks.resolveMigrationFailures, + res.left.unknownDocs + ); return { ...stateP, controlState: 'FATAL', - reason: extractUnknownDocFailureReason( - stateP.migrationDocLinks.resolveMigrationFailures, - res.left.unknownDocs - ), + reason, + logs: [ + ...logs, + { + level: 'error', + message: reason, + }, + ], }; } } else if (stateP.controlState === 'CLEANUP_UNKNOWN_AND_EXCLUDED_WAIT_FOR_TASK') { @@ -700,13 +708,22 @@ export const model = (currentState: State, resW: ResponseType): if (isTypeof(res.right, 'unknown_docs_found')) { if (!stateP.discardUnknownObjects) { + const reason = extractUnknownDocFailureReason( + stateP.migrationDocLinks.resolveMigrationFailures, + res.right.unknownDocs + ); + return { ...stateP, controlState: 'FATAL', - reason: extractUnknownDocFailureReason( - stateP.migrationDocLinks.resolveMigrationFailures, - res.right.unknownDocs - ), + reason, + logs: [ + ...logs, + { + level: 'error', + message: reason, + }, + ], }; } @@ -879,6 +896,13 @@ export const model = (currentState: State, resW: ResponseType): corruptDocumentIds: [], transformErrors: [], progress: createInitialProgress(), + logs: [ + ...logs, + { + level: 'info', + message: `REINDEX_SOURCE_TO_TEMP_OPEN_PIT PitId:${res.right.pitId}`, + }, + ], }; } else { throwBadResponse(stateP, res); diff --git a/packages/kbn-esql-editor/src/editor_footer/index.tsx b/packages/kbn-esql-editor/src/editor_footer/index.tsx index 389fd264d2513..d898d2c52c9c7 100644 --- a/packages/kbn-esql-editor/src/editor_footer/index.tsx +++ b/packages/kbn-esql-editor/src/editor_footer/index.tsx @@ -50,7 +50,11 @@ interface EditorFooterProps { updateQuery: (qs: string) => void; isHistoryOpen: boolean; setIsHistoryOpen: (status: boolean) => void; + isLanguageComponentOpen: boolean; + setIsLanguageComponentOpen: (status: boolean) => void; measuredContainerWidth: number; + resizableContainerButton?: JSX.Element; + resizableContainerHeight: number; hideRunQueryText?: boolean; editorIsInline?: boolean; isSpaceReduced?: boolean; @@ -73,8 +77,12 @@ export const EditorFooter = memo(function EditorFooter({ editorIsInline, isSpaceReduced, hideTimeFilterInfo, + resizableContainerButton, + resizableContainerHeight, isHistoryOpen, setIsHistoryOpen, + isLanguageComponentOpen, + setIsLanguageComponentOpen, hideQueryHistory, isInCompactMode, displayDocumentationAsFlyout, @@ -84,7 +92,6 @@ export const EditorFooter = memo(function EditorFooter({ const kibana = useKibana(); const { docLinks } = kibana.services; const [isErrorPopoverOpen, setIsErrorPopoverOpen] = useState(false); - const [isLanguageComponentOpen, setIsLanguageComponentOpen] = useState(false); const [isWarningPopoverOpen, setIsWarningPopoverOpen] = useState(false); const onUpdateAndSubmit = useCallback( @@ -104,12 +111,12 @@ export const EditorFooter = memo(function EditorFooter({ const toggleHistoryComponent = useCallback(() => { setIsHistoryOpen(!isHistoryOpen); setIsLanguageComponentOpen(false); - }, [isHistoryOpen, setIsHistoryOpen]); + }, [isHistoryOpen, setIsHistoryOpen, setIsLanguageComponentOpen]); const toggleLanguageComponent = useCallback(async () => { setIsLanguageComponentOpen(!isLanguageComponentOpen); setIsHistoryOpen(false); - }, [isLanguageComponentOpen, setIsHistoryOpen]); + }, [isLanguageComponentOpen, setIsHistoryOpen, setIsLanguageComponentOpen]); const limit = useMemo(() => getLimitFromESQLQuery(code), [code]); @@ -307,15 +314,16 @@ export const EditorFooter = memo(function EditorFooter({ containerCSS={styles.historyContainer} onUpdateAndSubmit={onUpdateAndSubmit} containerWidth={measuredContainerWidth} - isInCompactMode={isInCompactMode} + height={resizableContainerHeight} /> )} {isLanguageComponentOpen && editorIsInline && ( - + )} + {resizableContainerButton} ); }); diff --git a/packages/kbn-esql-editor/src/editor_footer/query_history.tsx b/packages/kbn-esql-editor/src/editor_footer/query_history.tsx index 18593d4856e4e..864306737e9ca 100644 --- a/packages/kbn-esql-editor/src/editor_footer/query_history.tsx +++ b/packages/kbn-esql-editor/src/editor_footer/query_history.tsx @@ -28,9 +28,6 @@ import { css, Interpolation, Theme } from '@emotion/react'; import { type QueryHistoryItem, getHistoryItems } from '../history_local_storage'; import { getReducedSpaceStyling, swapArrayElements } from './query_history_helpers'; -const CONTAINER_MAX_HEIGHT_EXPANDED = 190; -const CONTAINER_MAX_HEIGHT_COMPACT = 250; - export function QueryHistoryAction({ toggleHistory, isHistoryOpen, @@ -206,12 +203,12 @@ export function QueryHistory({ containerCSS, containerWidth, onUpdateAndSubmit, - isInCompactMode, + height, }: { containerCSS: Interpolation; containerWidth: number; onUpdateAndSubmit: (qs: string) => void; - isInCompactMode?: boolean; + height: number; }) { const theme = useEuiTheme(); const scrollBarStyles = euiScrollBarStyles(theme); @@ -309,7 +306,7 @@ export function QueryHistory({ } border-bottom-left-radius: ${euiTheme.border.radius.medium}; border-top-left-radius: ${euiTheme.border.radius.medium}; - max-height: ${isInCompactMode ? CONTAINER_MAX_HEIGHT_COMPACT : CONTAINER_MAX_HEIGHT_EXPANDED}px; + max-height: ${height}px; overflow-y: auto; ${scrollBarStyles} ${extraStyling} diff --git a/packages/kbn-esql-editor/src/esql_editor.styles.ts b/packages/kbn-esql-editor/src/esql_editor.styles.ts index 7af40ea75e35c..430e7ada03799 100644 --- a/packages/kbn-esql-editor/src/esql_editor.styles.ts +++ b/packages/kbn-esql-editor/src/esql_editor.styles.ts @@ -13,6 +13,10 @@ export const EDITOR_INITIAL_HEIGHT = 80; export const EDITOR_INITIAL_HEIGHT_INLINE_EDITING = 140; export const EDITOR_MIN_HEIGHT = 40; export const EDITOR_MAX_HEIGHT = 400; +// resizeable container initial height +// the resizable container is the container that holds the history component or the inline docs +// they are never open simultaneously +export const RESIZABLE_CONTAINER_INITIAL_HEIGHT = 190; export const esqlEditorStyles = ( euiTheme: EuiThemeComputed, @@ -23,7 +27,9 @@ export const esqlEditorStyles = ( editorIsInline: boolean, hasOutline: boolean ) => { - const bottomContainerBorderColor = hasErrors ? euiTheme.colors.danger : euiTheme.colors.primary; + const bottomContainerBorderColor = hasErrors + ? euiTheme.colors.danger + : euiTheme.colors.lightestShade; return { editorContainer: { diff --git a/packages/kbn-esql-editor/src/esql_editor.tsx b/packages/kbn-esql-editor/src/esql_editor.tsx index 337c0133e7d20..244abba93a5f9 100644 --- a/packages/kbn-esql-editor/src/esql_editor.tsx +++ b/packages/kbn-esql-editor/src/esql_editor.tsx @@ -40,6 +40,8 @@ import { parseErrors, parseWarning, useDebounceWithOptions, + onKeyDownResizeHandler, + onMouseDownResizeHandler, type MonacoMessage, } from './helpers'; import { addQueriesToCache } from './history_local_storage'; @@ -47,17 +49,13 @@ import { ResizableButton } from './resizable_button'; import { EDITOR_INITIAL_HEIGHT, EDITOR_INITIAL_HEIGHT_INLINE_EDITING, - EDITOR_MAX_HEIGHT, - EDITOR_MIN_HEIGHT, + RESIZABLE_CONTAINER_INITIAL_HEIGHT, esqlEditorStyles, } from './esql_editor.styles'; import type { ESQLEditorProps, ESQLEditorDeps } from './types'; import './overwrite.scss'; -const KEYCODE_ARROW_UP = 38; -const KEYCODE_ARROW_DOWN = 40; - // for editor width smaller than this value we want to start hiding some text const BREAKPOINT_WIDTH = 540; @@ -101,6 +99,11 @@ export const ESQLEditor = memo(function ESQLEditor({ const [editorHeight, setEditorHeight] = useState( editorIsInline ? EDITOR_INITIAL_HEIGHT_INLINE_EDITING : EDITOR_INITIAL_HEIGHT ); + // the resizable container is the container that holds the history component or the inline docs + // they are never open simultaneously + const [resizableContainerHeight, setResizableContainerHeight] = useState( + RESIZABLE_CONTAINER_INITIAL_HEIGHT + ); const [popoverPosition, setPopoverPosition] = useState<{ top?: number; left?: number }>({}); const [timePickerDate, setTimePickerDate] = useState(moment()); const [measuredEditorWidth, setMeasuredEditorWidth] = useState(0); @@ -108,6 +111,7 @@ export const ESQLEditor = memo(function ESQLEditor({ const isSpaceReduced = Boolean(editorIsInline) && measuredEditorWidth < BREAKPOINT_WIDTH; const [isHistoryOpen, setIsHistoryOpen] = useState(false); + const [isLanguageComponentOpen, setIsLanguageComponentOpen] = useState(false); const [isCodeEditorExpandedFocused, setIsCodeEditorExpandedFocused] = useState(false); const [isQueryLoading, setIsQueryLoading] = useState(true); const [abortController, setAbortController] = useState(new AbortController()); @@ -129,7 +133,6 @@ export const ESQLEditor = memo(function ESQLEditor({ warnings: [], }); const hideHistoryComponent = hideQueryHistory; - const onQueryUpdate = useCallback( (value: string) => { onTextLangQueryChange({ esql: value } as AggregateQuery); @@ -248,52 +251,57 @@ export const ESQLEditor = memo(function ESQLEditor({ const editor1 = useRef(); const containerRef = useRef(null); - // When the editor is on full size mode, the user can resize the height of the editor. - const onMouseDownResizeHandler = useCallback< - React.ComponentProps['onMouseDownResizeHandler'] - >( - (mouseDownEvent) => { - function isMouseEvent(e: React.TouchEvent | React.MouseEvent): e is React.MouseEvent { - return e && 'pageY' in e; - } - const startSize = editorHeight; - const startPosition = isMouseEvent(mouseDownEvent) - ? mouseDownEvent?.pageY - : mouseDownEvent?.touches[0].pageY; - - function onMouseMove(mouseMoveEvent: MouseEvent) { - const height = startSize - startPosition + mouseMoveEvent.pageY; - const validatedHeight = Math.min(Math.max(height, EDITOR_MIN_HEIGHT), EDITOR_MAX_HEIGHT); - setEditorHeight(validatedHeight); - } - function onMouseUp() { - document.body.removeEventListener('mousemove', onMouseMove); - } - - document.body.addEventListener('mousemove', onMouseMove); - document.body.addEventListener('mouseup', onMouseUp, { once: true }); + const onMouseDownResize = useCallback( + ( + mouseDownEvent, + firstPanelHeight, + setFirstPanelHeight, + secondPanelHeight, + setSecondPanelHeight + ) => { + onMouseDownResizeHandler( + mouseDownEvent, + firstPanelHeight, + setFirstPanelHeight, + secondPanelHeight, + setSecondPanelHeight + ); }, - [editorHeight] + [] ); - const onKeyDownResizeHandler = useCallback< - React.ComponentProps['onKeyDownResizeHandler'] - >( - (keyDownEvent) => { - let height = editorHeight; - if ( - keyDownEvent.keyCode === KEYCODE_ARROW_UP || - keyDownEvent.keyCode === KEYCODE_ARROW_DOWN - ) { - const step = keyDownEvent.keyCode === KEYCODE_ARROW_UP ? -10 : 10; - height = height + step; - const validatedHeight = Math.min(Math.max(height, EDITOR_MIN_HEIGHT), EDITOR_MAX_HEIGHT); - setEditorHeight(validatedHeight); - } + const onKeyDownResize = useCallback( + ( + keyDownEvent, + firstPanelHeight, + setFirstPanelHeight, + secondPanelHeight, + setSecondPanelHeight + ) => { + onKeyDownResizeHandler( + keyDownEvent, + firstPanelHeight, + setFirstPanelHeight, + secondPanelHeight, + setSecondPanelHeight + ); }, - [editorHeight] + [] ); + const resizableContainerButton = useMemo(() => { + return ( + + onMouseDownResize(mouseDownEvent, editorHeight, setEditorHeight, undefined, undefined) + } + onKeyDownResizeHandler={(keyDownEvent) => + onKeyDownResize(keyDownEvent, editorHeight, setEditorHeight, undefined, undefined) + } + /> + ); + }, [onMouseDownResize, editorHeight, onKeyDownResize]); + const onEditorFocus = useCallback(() => { setIsCodeEditorExpandedFocused(true); showSuggestionsIfEmptyQuery(); @@ -711,6 +719,10 @@ export const ESQLEditor = memo(function ESQLEditor({ }); editor.onDidChangeModelContent(showSuggestionsIfEmptyQuery); + + // Auto-focus the editor and move the cursor to the end. + editor.focus(); + editor.setPosition({ column: Infinity, lineNumber: Infinity }); }} /> @@ -718,6 +730,28 @@ export const ESQLEditor = memo(function ESQLEditor({ + {(isHistoryOpen || (isLanguageComponentOpen && editorIsInline)) && ( + { + onMouseDownResize( + mouseDownEvent, + editorHeight, + setEditorHeight, + resizableContainerHeight, + setResizableContainerHeight + ); + }} + onKeyDownResizeHandler={(keyDownEvent) => + onKeyDownResize( + keyDownEvent, + editorHeight, + setEditorHeight, + resizableContainerHeight, + setResizableContainerHeight + ) + } + /> + )} - {createPortal( Object.keys(popoverPosition).length !== 0 && popoverPosition.constructor === Object && (
| React.TouchEvent, + height: number, + setHeight: (height: number) => void, + secondPanelHeight?: number, + setSecondPanelHeight?: (height: number) => void +) => { + function isMouseEvent(e: React.TouchEvent | React.MouseEvent): e is React.MouseEvent { + return e && 'pageY' in e; + } + + const startSize = height; + const startPosition = isMouseEvent(mouseDownEvent) + ? mouseDownEvent?.pageY + : mouseDownEvent?.touches[0].pageY; + + function onMouseMove(mouseMoveEvent: MouseEvent) { + const h = startSize - startPosition + mouseMoveEvent.pageY; + const firstPanelHeightValidated = Math.min(Math.max(h, EDITOR_MIN_HEIGHT), EDITOR_MAX_HEIGHT); + setHeight(firstPanelHeightValidated); + if (setSecondPanelHeight && secondPanelHeight) { + const maxHeight = height + secondPanelHeight; + const secondPanelHeightValidated = Math.min( + Math.max(maxHeight - firstPanelHeightValidated, RESIZABLE_CONTAINER_INITIAL_HEIGHT), + maxHeight + ); + setSecondPanelHeight?.(secondPanelHeightValidated); + } + } + function onMouseUp() { + document.body.removeEventListener('mousemove', onMouseMove); + } + + document.body.addEventListener('mousemove', onMouseMove); + document.body.addEventListener('mouseup', onMouseUp, { once: true }); +}; + +export const onKeyDownResizeHandler = ( + keyDownEvent: React.KeyboardEvent, + height: number, + setHeight: (height: number) => void, + secondPanelHeight?: number, + setSecondPanelHeight?: (height: number) => void +) => { + let h = height; + if (keyDownEvent.keyCode === KEYCODE_ARROW_UP || keyDownEvent.keyCode === KEYCODE_ARROW_DOWN) { + const step = keyDownEvent.keyCode === KEYCODE_ARROW_UP ? -10 : 10; + h = h + step; + const firstPanelHeightValidated = Math.min(Math.max(h, EDITOR_MIN_HEIGHT), EDITOR_MAX_HEIGHT); + setHeight(firstPanelHeightValidated); + if (setSecondPanelHeight && secondPanelHeight) { + const maxHeight = height + secondPanelHeight; + const secondPanelHeightValidated = Math.min( + Math.max(maxHeight - firstPanelHeightValidated, RESIZABLE_CONTAINER_INITIAL_HEIGHT), + maxHeight + ); + setSecondPanelHeight?.(secondPanelHeightValidated); + } + } +}; diff --git a/packages/kbn-esql-editor/src/resizable_button.tsx b/packages/kbn-esql-editor/src/resizable_button.tsx index 6217526de7018..12c6cb23a530a 100644 --- a/packages/kbn-esql-editor/src/resizable_button.tsx +++ b/packages/kbn-esql-editor/src/resizable_button.tsx @@ -14,7 +14,6 @@ import { css } from '@emotion/react'; export function ResizableButton({ onMouseDownResizeHandler, onKeyDownResizeHandler, - editorIsInline, }: { onMouseDownResizeHandler: ( mouseDownEvent: React.MouseEvent | React.TouchEvent @@ -30,10 +29,7 @@ export function ResizableButton({ onTouchStart={onMouseDownResizeHandler} indicator="border" css={css` - position: ${editorIsInline ? 'relative' : 'absolute'}; - bottom: 0; - left: 0; - right: 0; + position: relative; `} /> ); diff --git a/packages/kbn-esql-utils/src/utils/append_to_query.test.ts b/packages/kbn-esql-utils/src/utils/append_to_query.test.ts index c9db52076222f..9dc15454cbbdf 100644 --- a/packages/kbn-esql-utils/src/utils/append_to_query.test.ts +++ b/packages/kbn-esql-utils/src/utils/append_to_query.test.ts @@ -168,5 +168,11 @@ AND \`dest\`=="Crete"` and \`ip\`::string!="127.0.0.2/32"` ); }); + + it('returns undefined for multivalue fields', () => { + expect( + appendWhereClauseToESQLQuery('from logstash-*', 'dest', ['meow'], '+', 'string') + ).toBeUndefined(); + }); }); }); diff --git a/packages/kbn-esql-utils/src/utils/append_to_query.ts b/packages/kbn-esql-utils/src/utils/append_to_query.ts index f4161be073a8d..2820881810387 100644 --- a/packages/kbn-esql-utils/src/utils/append_to_query.ts +++ b/packages/kbn-esql-utils/src/utils/append_to_query.ts @@ -21,7 +21,11 @@ export function appendWhereClauseToESQLQuery( value: unknown, operation: '+' | '-' | 'is_not_null' | 'is_null', fieldType?: string -): string { +): string | undefined { + // multivalues filtering is not supported yet + if (Array.isArray(value)) { + return undefined; + } let operator; switch (operation) { case 'is_not_null': diff --git a/packages/kbn-event-annotation-components/components/annotation_editor_controls/index.scss b/packages/kbn-event-annotation-components/components/annotation_editor_controls/index.scss index 93bf0e2c72662..17e20d3380a0d 100644 --- a/packages/kbn-event-annotation-components/components/annotation_editor_controls/index.scss +++ b/packages/kbn-event-annotation-components/components/annotation_editor_controls/index.scss @@ -2,12 +2,8 @@ margin-top: $euiSizeS; } -.lnsConfigPanelNoPadding { - padding: 0; -} - -.lnsConfigPanelDate__label { - min-width: 56px; // makes both labels ("from" and "to") the same width +.lnsConfigPanelAnnotations__date .euiFormControlLayout__prepend { + min-width: $euiSize * 3.25; // makes both labels ("from" and "to") the same width } .lnsConfigPanelAnnotations__addButton { diff --git a/packages/kbn-event-annotation-components/components/annotation_editor_controls/range_annotation_panel.tsx b/packages/kbn-event-annotation-components/components/annotation_editor_controls/range_annotation_panel.tsx index 69e7985b5796f..d584e330352ff 100644 --- a/packages/kbn-event-annotation-components/components/annotation_editor_controls/range_annotation_panel.tsx +++ b/packages/kbn-event-annotation-components/components/annotation_editor_controls/range_annotation_panel.tsx @@ -9,14 +9,7 @@ import { i18n } from '@kbn/i18n'; import React from 'react'; -import { - EuiFormRow, - EuiSwitch, - EuiText, - EuiFormControlLayout, - EuiFormLabel, - EuiDatePicker, -} from '@elastic/eui'; +import { EuiFormRow, EuiSwitch, EuiText, EuiDatePicker } from '@elastic/eui'; import moment from 'moment'; import type { PointInTimeEventAnnotationConfig, @@ -107,36 +100,23 @@ export const ConfigPanelRangeDatePicker = ({ dataTestSubj?: string; }) => { return ( - - {prependLabel ? ( - {prependLabel} - } - > - - - ) : ( - - )} + + ); }; diff --git a/packages/kbn-flot-charts/kibana.jsonc b/packages/kbn-flot-charts/kibana.jsonc index 5176e4a96d9f0..f2ebe8d27999e 100644 --- a/packages/kbn-flot-charts/kibana.jsonc +++ b/packages/kbn-flot-charts/kibana.jsonc @@ -1,5 +1,5 @@ { "type": "shared-common", "id": "@kbn/flot-charts", - "owner": "@elastic/kibana-operations" + "owner": ["@elastic/kibana-presentation", "@elastic/stack-monitoring"] } diff --git a/packages/kbn-investigation-shared/src/rest_specs/create.ts b/packages/kbn-investigation-shared/src/rest_specs/create.ts index afdffc2f524a4..8a8e4d62a37ee 100644 --- a/packages/kbn-investigation-shared/src/rest_specs/create.ts +++ b/packages/kbn-investigation-shared/src/rest_specs/create.ts @@ -20,6 +20,7 @@ const createInvestigationParamsSchema = z.object({ }), origin: z.union([alertOriginSchema, blankOriginSchema]), tags: z.array(z.string()), + externalIncidentUrl: z.string().nullable(), }), }); diff --git a/packages/kbn-investigation-shared/src/rest_specs/update.ts b/packages/kbn-investigation-shared/src/rest_specs/update.ts index da0bdcf4f057e..cab773d9549a2 100644 --- a/packages/kbn-investigation-shared/src/rest_specs/update.ts +++ b/packages/kbn-investigation-shared/src/rest_specs/update.ts @@ -23,6 +23,7 @@ const updateInvestigationParamsSchema = z.object({ timeRange: z.object({ from: z.number(), to: z.number() }), }), tags: z.array(z.string()), + externalIncidentUrl: z.string().nullable(), }) .partial(), }); diff --git a/packages/kbn-investigation-shared/src/schema/investigation.ts b/packages/kbn-investigation-shared/src/schema/investigation.ts index 9be39b5b2a7b3..751f1a20048a5 100644 --- a/packages/kbn-investigation-shared/src/schema/investigation.ts +++ b/packages/kbn-investigation-shared/src/schema/investigation.ts @@ -34,6 +34,7 @@ const investigationSchema = z.object({ tags: z.array(z.string()), notes: z.array(investigationNoteSchema), items: z.array(investigationItemSchema), + externalIncidentUrl: z.string().nullable(), }); type Status = z.infer; diff --git a/packages/kbn-language-documentation/src/components/as_inline/index.test.tsx b/packages/kbn-language-documentation/src/components/as_inline/index.test.tsx index 4ba873614f9b2..355017bff65d7 100644 --- a/packages/kbn-language-documentation/src/components/as_inline/index.test.tsx +++ b/packages/kbn-language-documentation/src/components/as_inline/index.test.tsx @@ -61,7 +61,9 @@ jest.mock('../../sections', () => { describe('###Documentation flyout component', () => { const renderInlineComponent = (searchInDescription = false) => { - return render(); + return render( + + ); }; it('has a header element for navigation through the sections', () => { renderInlineComponent(); diff --git a/packages/kbn-language-documentation/src/components/as_inline/index.tsx b/packages/kbn-language-documentation/src/components/as_inline/index.tsx index dcc860aa70db2..81ffef285d17d 100644 --- a/packages/kbn-language-documentation/src/components/as_inline/index.tsx +++ b/packages/kbn-language-documentation/src/components/as_inline/index.tsx @@ -15,12 +15,11 @@ import type { LanguageDocumentationSections } from '../../types'; import { getESQLDocsSections } from '../../sections'; interface DocumentationInlineProps { + height: number; searchInDescription?: boolean; } -const MAX_HEIGHT = 250; - -function DocumentationInline({ searchInDescription }: DocumentationInlineProps) { +function DocumentationInline({ searchInDescription, height }: DocumentationInlineProps) { const theme = useEuiTheme(); const [documentationSections, setDocumentationSections] = useState(); @@ -56,7 +55,7 @@ function DocumentationInline({ searchInDescription }: DocumentationInlineProps)
; @@ -29,7 +31,12 @@ function DocumentationContent({ }: DocumentationContentProps) { return ( <> - + {!searchText && (
{sections?.initialSection}
@@ -46,6 +54,7 @@ function DocumentationContent({ return (
{ if (el) { scrollTargets.current[helpGroup.label] = el; @@ -59,6 +68,7 @@ function DocumentationContent({ {filteredGroups?.[index].options.map((helpItem) => { return (
{ if (el) { diff --git a/packages/kbn-management/settings/application/hooks/use_fields.ts b/packages/kbn-management/settings/application/hooks/use_fields.ts index 829e368812512..f0dc538f54189 100644 --- a/packages/kbn-management/settings/application/hooks/use_fields.ts +++ b/packages/kbn-management/settings/application/hooks/use_fields.ts @@ -7,11 +7,13 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { Query } from '@elastic/eui'; +import { Ast, Query } from '@elastic/eui'; import { getFieldDefinitions } from '@kbn/management-settings-field-definition'; import { FieldDefinition } from '@kbn/management-settings-types'; import { UiSettingsScope } from '@kbn/core-ui-settings-common'; +import { Clause } from '@elastic/eui/src/components/search_bar/query/ast'; import { useServices } from '../services'; +import { CATEGORY_FIELD } from '../query_input'; import { useSettings } from './use_settings'; /** @@ -29,7 +31,19 @@ export const useFields = (scope: UiSettingsScope, query?: Query): FieldDefinitio isOverridden: (key) => isOverriddenSetting(key, scope), }); if (query) { - return Query.execute(query, fields); + const clauses: Clause[] = query.ast.clauses.map((clause) => + // If the clause value contains `:` and is not a category filter, add it as a term clause + // This allows searching for settings that include `:` in their names + clause.type === 'field' && clause.field !== CATEGORY_FIELD + ? { + type: 'term', + match: 'must', + value: `${clause.field}:${clause.value}`, + } + : clause + ); + + return Query.execute(new Query(Ast.create(clauses), undefined, query.text), fields); } return fields; }; diff --git a/packages/kbn-securitysolution-endpoint-exceptions-common/docs/openapi/ess/security_solution_endpoint_exceptions_api_2023_10_31.bundled.schema.yaml b/packages/kbn-securitysolution-endpoint-exceptions-common/docs/openapi/ess/security_solution_endpoint_exceptions_api_2023_10_31.bundled.schema.yaml index fc3b7c832a709..78c75760f1888 100644 --- a/packages/kbn-securitysolution-endpoint-exceptions-common/docs/openapi/ess/security_solution_endpoint_exceptions_api_2023_10_31.bundled.schema.yaml +++ b/packages/kbn-securitysolution-endpoint-exceptions-common/docs/openapi/ess/security_solution_endpoint_exceptions_api_2023_10_31.bundled.schema.yaml @@ -1,7 +1,7 @@ openapi: 3.0.3 info: description: Endpoint Exceptions API allow you to manage Endpoint lists. - title: Security Solution Endpoint Exceptions API (Elastic Cloud and self-hosted) + title: Security Endpoint Exceptions API (Elastic Cloud and self-hosted) version: '2023-10-31' servers: - url: http://{kibana_host}:{port} @@ -53,7 +53,7 @@ paths: description: Internal server error summary: Create an endpoint exception list tags: - - Security Solution Endpoint Exceptions API + - Security Endpoint Exceptions API /api/endpoint_list/items: delete: description: >- @@ -114,7 +114,7 @@ paths: description: Internal server error summary: Delete an endpoint exception list item tags: - - Security Solution Endpoint Exceptions API + - Security Endpoint Exceptions API get: description: >- Get the details of an endpoint exception list item using the `id` or @@ -176,7 +176,7 @@ paths: description: Internal server error summary: Get an endpoint exception list item tags: - - Security Solution Endpoint Exceptions API + - Security Endpoint Exceptions API post: description: >- Create an endpoint exception list item, and associate it with the @@ -257,7 +257,7 @@ paths: description: Internal server error summary: Create an endpoint exception list item tags: - - Security Solution Endpoint Exceptions API + - Security Endpoint Exceptions API put: description: >- Update an endpoint exception list item using the `id` or `item_id` @@ -343,7 +343,7 @@ paths: description: Internal server error summary: Update an endpoint exception list item tags: - - Security Solution Endpoint Exceptions API + - Security Endpoint Exceptions API /api/endpoint_list/items/_find: get: description: Get a list of all endpoint exception list items. @@ -450,7 +450,7 @@ paths: description: Internal server error summary: Get endpoint exception list items tags: - - Security Solution Endpoint Exceptions API + - Security Endpoint Exceptions API components: schemas: EndpointList: @@ -884,4 +884,4 @@ tags: Endpoint Exceptions API allows you to manage detection rule endpoint exceptions to prevent a rule from generating an alert from incoming events even when the rule's other criteria are met. - name: Security Solution Endpoint Exceptions API + name: Security Endpoint Exceptions API diff --git a/packages/kbn-securitysolution-endpoint-exceptions-common/docs/openapi/serverless/security_solution_endpoint_exceptions_api_2023_10_31.bundled.schema.yaml b/packages/kbn-securitysolution-endpoint-exceptions-common/docs/openapi/serverless/security_solution_endpoint_exceptions_api_2023_10_31.bundled.schema.yaml index d342e6f63794e..6b3b4d4eaa55d 100644 --- a/packages/kbn-securitysolution-endpoint-exceptions-common/docs/openapi/serverless/security_solution_endpoint_exceptions_api_2023_10_31.bundled.schema.yaml +++ b/packages/kbn-securitysolution-endpoint-exceptions-common/docs/openapi/serverless/security_solution_endpoint_exceptions_api_2023_10_31.bundled.schema.yaml @@ -1,7 +1,7 @@ openapi: 3.0.3 info: description: Endpoint Exceptions API allow you to manage Endpoint lists. - title: Security Solution Endpoint Exceptions API (Elastic Cloud Serverless) + title: Security Endpoint Exceptions API (Elastic Cloud Serverless) version: '2023-10-31' servers: - url: http://{kibana_host}:{port} @@ -53,7 +53,7 @@ paths: description: Internal server error summary: Create an endpoint exception list tags: - - Security Solution Endpoint Exceptions API + - Security Endpoint Exceptions API /api/endpoint_list/items: delete: description: >- @@ -114,7 +114,7 @@ paths: description: Internal server error summary: Delete an endpoint exception list item tags: - - Security Solution Endpoint Exceptions API + - Security Endpoint Exceptions API get: description: >- Get the details of an endpoint exception list item using the `id` or @@ -176,7 +176,7 @@ paths: description: Internal server error summary: Get an endpoint exception list item tags: - - Security Solution Endpoint Exceptions API + - Security Endpoint Exceptions API post: description: >- Create an endpoint exception list item, and associate it with the @@ -257,7 +257,7 @@ paths: description: Internal server error summary: Create an endpoint exception list item tags: - - Security Solution Endpoint Exceptions API + - Security Endpoint Exceptions API put: description: >- Update an endpoint exception list item using the `id` or `item_id` @@ -343,7 +343,7 @@ paths: description: Internal server error summary: Update an endpoint exception list item tags: - - Security Solution Endpoint Exceptions API + - Security Endpoint Exceptions API /api/endpoint_list/items/_find: get: description: Get a list of all endpoint exception list items. @@ -450,7 +450,7 @@ paths: description: Internal server error summary: Get endpoint exception list items tags: - - Security Solution Endpoint Exceptions API + - Security Endpoint Exceptions API components: schemas: EndpointList: @@ -884,4 +884,4 @@ tags: Endpoint Exceptions API allows you to manage detection rule endpoint exceptions to prevent a rule from generating an alert from incoming events even when the rule's other criteria are met. - name: Security Solution Endpoint Exceptions API + name: Security Endpoint Exceptions API diff --git a/packages/kbn-securitysolution-endpoint-exceptions-common/scripts/openapi_bundle.js b/packages/kbn-securitysolution-endpoint-exceptions-common/scripts/openapi_bundle.js index 1c394ce1106ac..edd9cb25f6d44 100644 --- a/packages/kbn-securitysolution-endpoint-exceptions-common/scripts/openapi_bundle.js +++ b/packages/kbn-securitysolution-endpoint-exceptions-common/scripts/openapi_bundle.js @@ -24,12 +24,12 @@ const ROOT = resolve(__dirname, '..'); includeLabels: ['serverless'], prototypeDocument: { info: { - title: 'Security Solution Endpoint Exceptions API (Elastic Cloud Serverless)', + title: 'Security Endpoint Exceptions API (Elastic Cloud Serverless)', description: 'Endpoint Exceptions API allow you to manage Endpoint lists.', }, tags: [ { - name: 'Security Solution Endpoint Exceptions API', + name: 'Security Endpoint Exceptions API', description: "Endpoint Exceptions API allows you to manage detection rule endpoint exceptions to prevent a rule from generating an alert from incoming events even when the rule's other criteria are met.", }, @@ -48,12 +48,12 @@ const ROOT = resolve(__dirname, '..'); includeLabels: ['ess'], prototypeDocument: { info: { - title: 'Security Solution Endpoint Exceptions API (Elastic Cloud and self-hosted)', + title: 'Security Endpoint Exceptions API (Elastic Cloud and self-hosted)', description: 'Endpoint Exceptions API allow you to manage Endpoint lists.', }, tags: [ { - name: 'Security Solution Endpoint Exceptions API', + name: 'Security Endpoint Exceptions API', description: "Endpoint Exceptions API allows you to manage detection rule endpoint exceptions to prevent a rule from generating an alert from incoming events even when the rule's other criteria are met.", }, diff --git a/packages/kbn-securitysolution-exceptions-common/docs/openapi/ess/security_solution_exceptions_api_2023_10_31.bundled.schema.yaml b/packages/kbn-securitysolution-exceptions-common/docs/openapi/ess/security_solution_exceptions_api_2023_10_31.bundled.schema.yaml index a5a7896ede736..89208f3a9ced0 100644 --- a/packages/kbn-securitysolution-exceptions-common/docs/openapi/ess/security_solution_exceptions_api_2023_10_31.bundled.schema.yaml +++ b/packages/kbn-securitysolution-exceptions-common/docs/openapi/ess/security_solution_exceptions_api_2023_10_31.bundled.schema.yaml @@ -4,7 +4,7 @@ info: Exceptions API allows you to manage detection rule exceptions to prevent a rule from generating an alert from incoming events even when the rule's other criteria are met. - title: Security Solution Exceptions API (Elastic Cloud and self-hosted) + title: Security Exceptions API (Elastic Cloud and self-hosted) version: '2023-10-31' servers: - url: http://{kibana_host}:{port} @@ -76,7 +76,7 @@ paths: description: Internal server error response summary: Create rule exception list items tags: - - Security Solution Exceptions API + - Security Exceptions API /api/exception_lists: delete: description: Delete an exception list using the `id` or `list_id` field. @@ -141,7 +141,7 @@ paths: description: Internal server error response summary: Delete an exception list tags: - - Security Solution Exceptions API + - Security Exceptions API get: description: Get the details of an exception list using the `id` or `list_id` field. operationId: ReadExceptionList @@ -205,7 +205,7 @@ paths: description: Internal server error response summary: Get exception list details tags: - - Security Solution Exceptions API + - Security Exceptions API post: description: > An exception list groups exception items and can be associated with @@ -295,7 +295,7 @@ paths: description: Internal server error response summary: Create an exception list tags: - - Security Solution Exceptions API + - Security Exceptions API put: description: Update an exception list using the `id` or `list_id` field. operationId: UpdateExceptionList @@ -376,7 +376,7 @@ paths: description: Internal server error response summary: Update an exception list tags: - - Security Solution Exceptions API + - Security Exceptions API /api/exception_lists/_duplicate: post: description: Duplicate an existing exception list. @@ -446,7 +446,7 @@ paths: description: Internal server error response summary: Duplicate an exception list tags: - - Security Solution Exceptions API + - Security Exceptions API /api/exception_lists/_export: post: description: Export an exception list and its associated items to an NDJSON file. @@ -526,7 +526,7 @@ paths: description: Internal server error response summary: Export an exception list tags: - - Security Solution Exceptions API + - Security Exceptions API /api/exception_lists/_find: get: description: Get a list of all exception lists. @@ -647,7 +647,7 @@ paths: description: Internal server error response summary: Get exception lists tags: - - Security Solution Exceptions API + - Security Exceptions API /api/exception_lists/_import: post: description: Import an exception list and its associated items from an NDJSON file. @@ -763,7 +763,7 @@ paths: description: Internal server error response summary: Import an exception list tags: - - Security Solution Exceptions API + - Security Exceptions API /api/exception_lists/items: delete: description: Delete an exception list item using the `id` or `item_id` field. @@ -828,7 +828,7 @@ paths: description: Internal server error response summary: Delete an exception list item tags: - - Security Solution Exceptions API + - Security Exceptions API get: description: >- Get the details of an exception list item using the `id` or `item_id` @@ -894,7 +894,7 @@ paths: description: Internal server error response summary: Get an exception list item tags: - - Security Solution Exceptions API + - Security Exceptions API post: description: > Create an exception item and associate it with the specified exception @@ -988,7 +988,7 @@ paths: description: Internal server error response summary: Create an exception list item tags: - - Security Solution Exceptions API + - Security Exceptions API put: description: Update an exception list item using the `id` or `item_id` field. operationId: UpdateExceptionListItem @@ -1080,7 +1080,7 @@ paths: description: Internal server error response summary: Update an exception list item tags: - - Security Solution Exceptions API + - Security Exceptions API /api/exception_lists/items/_find: get: description: Get a list of all exception list items in the specified list. @@ -1217,7 +1217,7 @@ paths: description: Internal server error response summary: Get exception list items tags: - - Security Solution Exceptions API + - Security Exceptions API /api/exception_lists/summary: get: description: Get a summary of the specified exception list. @@ -1301,7 +1301,7 @@ paths: description: Internal server error response summary: Get an exception list summary tags: - - Security Solution Exceptions API + - Security Exceptions API /api/exceptions/shared: post: description: > @@ -1373,7 +1373,7 @@ paths: description: Internal server error response summary: Create a shared exception list tags: - - Security Solution Exceptions API + - Security Exceptions API components: schemas: CreateExceptionListItemComment: @@ -1903,4 +1903,4 @@ tags: Exceptions API allows you to manage detection rule exceptions to prevent a rule from generating an alert from incoming events even when the rule's other criteria are met. - name: Security Solution Exceptions API + name: Security Exceptions API diff --git a/packages/kbn-securitysolution-exceptions-common/docs/openapi/serverless/security_solution_exceptions_api_2023_10_31.bundled.schema.yaml b/packages/kbn-securitysolution-exceptions-common/docs/openapi/serverless/security_solution_exceptions_api_2023_10_31.bundled.schema.yaml index 796216511a0d0..190c2bd64aab5 100644 --- a/packages/kbn-securitysolution-exceptions-common/docs/openapi/serverless/security_solution_exceptions_api_2023_10_31.bundled.schema.yaml +++ b/packages/kbn-securitysolution-exceptions-common/docs/openapi/serverless/security_solution_exceptions_api_2023_10_31.bundled.schema.yaml @@ -4,7 +4,7 @@ info: Exceptions API allows you to manage detection rule exceptions to prevent a rule from generating an alert from incoming events even when the rule's other criteria are met. - title: Security Solution Exceptions API (Elastic Cloud Serverless) + title: Security Exceptions API (Elastic Cloud Serverless) version: '2023-10-31' servers: - url: http://{kibana_host}:{port} @@ -76,7 +76,7 @@ paths: description: Internal server error response summary: Create rule exception list items tags: - - Security Solution Exceptions API + - Security Exceptions API /api/exception_lists: delete: description: Delete an exception list using the `id` or `list_id` field. @@ -141,7 +141,7 @@ paths: description: Internal server error response summary: Delete an exception list tags: - - Security Solution Exceptions API + - Security Exceptions API get: description: Get the details of an exception list using the `id` or `list_id` field. operationId: ReadExceptionList @@ -205,7 +205,7 @@ paths: description: Internal server error response summary: Get exception list details tags: - - Security Solution Exceptions API + - Security Exceptions API post: description: > An exception list groups exception items and can be associated with @@ -295,7 +295,7 @@ paths: description: Internal server error response summary: Create an exception list tags: - - Security Solution Exceptions API + - Security Exceptions API put: description: Update an exception list using the `id` or `list_id` field. operationId: UpdateExceptionList @@ -376,7 +376,7 @@ paths: description: Internal server error response summary: Update an exception list tags: - - Security Solution Exceptions API + - Security Exceptions API /api/exception_lists/_duplicate: post: description: Duplicate an existing exception list. @@ -446,7 +446,7 @@ paths: description: Internal server error response summary: Duplicate an exception list tags: - - Security Solution Exceptions API + - Security Exceptions API /api/exception_lists/_export: post: description: Export an exception list and its associated items to an NDJSON file. @@ -526,7 +526,7 @@ paths: description: Internal server error response summary: Export an exception list tags: - - Security Solution Exceptions API + - Security Exceptions API /api/exception_lists/_find: get: description: Get a list of all exception lists. @@ -647,7 +647,7 @@ paths: description: Internal server error response summary: Get exception lists tags: - - Security Solution Exceptions API + - Security Exceptions API /api/exception_lists/_import: post: description: Import an exception list and its associated items from an NDJSON file. @@ -763,7 +763,7 @@ paths: description: Internal server error response summary: Import an exception list tags: - - Security Solution Exceptions API + - Security Exceptions API /api/exception_lists/items: delete: description: Delete an exception list item using the `id` or `item_id` field. @@ -828,7 +828,7 @@ paths: description: Internal server error response summary: Delete an exception list item tags: - - Security Solution Exceptions API + - Security Exceptions API get: description: >- Get the details of an exception list item using the `id` or `item_id` @@ -894,7 +894,7 @@ paths: description: Internal server error response summary: Get an exception list item tags: - - Security Solution Exceptions API + - Security Exceptions API post: description: > Create an exception item and associate it with the specified exception @@ -988,7 +988,7 @@ paths: description: Internal server error response summary: Create an exception list item tags: - - Security Solution Exceptions API + - Security Exceptions API put: description: Update an exception list item using the `id` or `item_id` field. operationId: UpdateExceptionListItem @@ -1080,7 +1080,7 @@ paths: description: Internal server error response summary: Update an exception list item tags: - - Security Solution Exceptions API + - Security Exceptions API /api/exception_lists/items/_find: get: description: Get a list of all exception list items in the specified list. @@ -1217,7 +1217,7 @@ paths: description: Internal server error response summary: Get exception list items tags: - - Security Solution Exceptions API + - Security Exceptions API /api/exception_lists/summary: get: description: Get a summary of the specified exception list. @@ -1301,7 +1301,7 @@ paths: description: Internal server error response summary: Get an exception list summary tags: - - Security Solution Exceptions API + - Security Exceptions API /api/exceptions/shared: post: description: > @@ -1373,7 +1373,7 @@ paths: description: Internal server error response summary: Create a shared exception list tags: - - Security Solution Exceptions API + - Security Exceptions API components: schemas: CreateExceptionListItemComment: @@ -1903,4 +1903,4 @@ tags: Exceptions API allows you to manage detection rule exceptions to prevent a rule from generating an alert from incoming events even when the rule's other criteria are met. - name: Security Solution Exceptions API + name: Security Exceptions API diff --git a/packages/kbn-securitysolution-exceptions-common/scripts/openapi_bundle.js b/packages/kbn-securitysolution-exceptions-common/scripts/openapi_bundle.js index 718f28560e094..edbe0f14ed75f 100644 --- a/packages/kbn-securitysolution-exceptions-common/scripts/openapi_bundle.js +++ b/packages/kbn-securitysolution-exceptions-common/scripts/openapi_bundle.js @@ -24,13 +24,13 @@ const ROOT = resolve(__dirname, '..'); includeLabels: ['serverless'], prototypeDocument: { info: { - title: 'Security Solution Exceptions API (Elastic Cloud Serverless)', + title: 'Security Exceptions API (Elastic Cloud Serverless)', description: "Exceptions API allows you to manage detection rule exceptions to prevent a rule from generating an alert from incoming events even when the rule's other criteria are met.", }, tags: [ { - name: 'Security Solution Exceptions API', + name: 'Security Exceptions API', description: "Exceptions API allows you to manage detection rule exceptions to prevent a rule from generating an alert from incoming events even when the rule's other criteria are met.", }, @@ -49,13 +49,13 @@ const ROOT = resolve(__dirname, '..'); includeLabels: ['ess'], prototypeDocument: { info: { - title: 'Security Solution Exceptions API (Elastic Cloud and self-hosted)', + title: 'Security Exceptions API (Elastic Cloud and self-hosted)', description: "Exceptions API allows you to manage detection rule exceptions to prevent a rule from generating an alert from incoming events even when the rule's other criteria are met.", }, tags: [ { - name: 'Security Solution Exceptions API', + name: 'Security Exceptions API', description: "Exceptions API allows you to manage detection rule exceptions to prevent a rule from generating an alert from incoming events even when the rule's other criteria are met.", }, diff --git a/packages/kbn-securitysolution-lists-common/docs/openapi/ess/security_solution_lists_api_2023_10_31.bundled.schema.yaml b/packages/kbn-securitysolution-lists-common/docs/openapi/ess/security_solution_lists_api_2023_10_31.bundled.schema.yaml index d73091d6e5a1b..e2f6e182e1ed8 100644 --- a/packages/kbn-securitysolution-lists-common/docs/openapi/ess/security_solution_lists_api_2023_10_31.bundled.schema.yaml +++ b/packages/kbn-securitysolution-lists-common/docs/openapi/ess/security_solution_lists_api_2023_10_31.bundled.schema.yaml @@ -1,7 +1,7 @@ openapi: 3.0.3 info: description: Lists API allows you to manage lists of keywords, IPs or IP ranges items. - title: Security Solution Lists API (Elastic Cloud and self-hosted) + title: Security Lists API (Elastic Cloud and self-hosted) version: '2023-10-31' servers: - url: http://{kibana_host}:{port} @@ -78,7 +78,7 @@ paths: description: Internal server error response summary: Delete a list tags: - - Security Solution Lists API + - Security Lists API get: description: Get the details of a list using the list ID. operationId: ReadList @@ -130,7 +130,7 @@ paths: description: Internal server error response summary: Get list details tags: - - Security Solution Lists API + - Security Lists API patch: description: Update specific fields of an existing list using the list ID. operationId: PatchList @@ -198,7 +198,7 @@ paths: description: Internal server error response summary: Patch a list tags: - - Security Solution Lists API + - Security Lists API post: description: Create a new list. operationId: CreateList @@ -273,7 +273,7 @@ paths: description: Internal server error response summary: Create a list tags: - - Security Solution Lists API + - Security Lists API put: description: > Update a list using the list ID. The original list is replaced, and all @@ -349,7 +349,7 @@ paths: description: Internal server error response summary: Update a list tags: - - Security Solution Lists API + - Security Lists API /api/lists/_find: get: description: >- @@ -465,7 +465,7 @@ paths: description: Internal server error response summary: Get lists tags: - - Security Solution Lists API + - Security Lists API /api/lists/index: delete: description: Delete the `.lists` and `.items` data streams. @@ -516,7 +516,7 @@ paths: description: Internal server error response summary: Delete list data streams tags: - - Security Solution Lists API + - Security Lists API get: description: Verify that `.lists` and `.items` data streams exist. operationId: ReadListIndex @@ -569,7 +569,7 @@ paths: description: Internal server error response summary: Get status of list data streams tags: - - Security Solution Lists API + - Security Lists API post: description: Create `.lists` and `.items` data streams in the relevant space. operationId: CreateListIndex @@ -619,7 +619,7 @@ paths: description: Internal server error response summary: Create list data streams tags: - - Security Solution Lists API + - Security Lists API /api/lists/items: delete: description: Delete a list item using its `id`, or its `list_id` and `value` fields. @@ -701,7 +701,7 @@ paths: description: Internal server error response summary: Delete a list item tags: - - Security Solution Lists API + - Security Lists API get: description: Get the details of a list item. operationId: ReadListItem @@ -769,7 +769,7 @@ paths: description: Internal server error response summary: Get a list item tags: - - Security Solution Lists API + - Security Lists API patch: description: Update specific fields of an existing list item using the list item ID. operationId: PatchListItem @@ -841,7 +841,7 @@ paths: description: Internal server error response summary: Patch a list item tags: - - Security Solution Lists API + - Security Lists API post: description: > Create a list item and associate it with the specified list. @@ -923,7 +923,7 @@ paths: description: Internal server error response summary: Create a list item tags: - - Security Solution Lists API + - Security Lists API put: description: > Update a list item using the list item ID. The original list item is @@ -993,7 +993,7 @@ paths: description: Internal server error response summary: Update a list item tags: - - Security Solution Lists API + - Security Lists API /api/lists/items/_export: post: description: Export list item values from the specified list. @@ -1048,7 +1048,7 @@ paths: description: Internal server error response summary: Export list items tags: - - Security Solution Lists API + - Security Lists API /api/lists/items/_find: get: description: Get all list items in the specified list. @@ -1168,7 +1168,7 @@ paths: description: Internal server error response summary: Get list items tags: - - Security Solution Lists API + - Security Lists API /api/lists/items/_import: post: description: > @@ -1275,7 +1275,7 @@ paths: description: Internal server error response summary: Import list items tags: - - Security Solution Lists API + - Security Lists API /api/lists/privileges: get: operationId: ReadListPrivileges @@ -1325,7 +1325,7 @@ paths: description: Internal server error response summary: Get list privileges tags: - - Security Solution Lists API + - Security Lists API components: schemas: FindListItemsCursor: @@ -1563,4 +1563,4 @@ security: - BasicAuth: [] tags: - description: Lists API allows you to manage lists of keywords, IPs or IP ranges items. - name: Security Solution Lists API + name: Security Lists API diff --git a/packages/kbn-securitysolution-lists-common/docs/openapi/serverless/security_solution_lists_api_2023_10_31.bundled.schema.yaml b/packages/kbn-securitysolution-lists-common/docs/openapi/serverless/security_solution_lists_api_2023_10_31.bundled.schema.yaml index 971511110c41c..c11f67f85014c 100644 --- a/packages/kbn-securitysolution-lists-common/docs/openapi/serverless/security_solution_lists_api_2023_10_31.bundled.schema.yaml +++ b/packages/kbn-securitysolution-lists-common/docs/openapi/serverless/security_solution_lists_api_2023_10_31.bundled.schema.yaml @@ -1,7 +1,7 @@ openapi: 3.0.3 info: description: Lists API allows you to manage lists of keywords, IPs or IP ranges items. - title: Security Solution Lists API (Elastic Cloud Serverless) + title: Security Lists API (Elastic Cloud Serverless) version: '2023-10-31' servers: - url: http://{kibana_host}:{port} @@ -78,7 +78,7 @@ paths: description: Internal server error response summary: Delete a list tags: - - Security Solution Lists API + - Security Lists API get: description: Get the details of a list using the list ID. operationId: ReadList @@ -130,7 +130,7 @@ paths: description: Internal server error response summary: Get list details tags: - - Security Solution Lists API + - Security Lists API patch: description: Update specific fields of an existing list using the list ID. operationId: PatchList @@ -198,7 +198,7 @@ paths: description: Internal server error response summary: Patch a list tags: - - Security Solution Lists API + - Security Lists API post: description: Create a new list. operationId: CreateList @@ -273,7 +273,7 @@ paths: description: Internal server error response summary: Create a list tags: - - Security Solution Lists API + - Security Lists API put: description: > Update a list using the list ID. The original list is replaced, and all @@ -349,7 +349,7 @@ paths: description: Internal server error response summary: Update a list tags: - - Security Solution Lists API + - Security Lists API /api/lists/_find: get: description: >- @@ -465,7 +465,7 @@ paths: description: Internal server error response summary: Get lists tags: - - Security Solution Lists API + - Security Lists API /api/lists/index: delete: description: Delete the `.lists` and `.items` data streams. @@ -516,7 +516,7 @@ paths: description: Internal server error response summary: Delete list data streams tags: - - Security Solution Lists API + - Security Lists API get: description: Verify that `.lists` and `.items` data streams exist. operationId: ReadListIndex @@ -569,7 +569,7 @@ paths: description: Internal server error response summary: Get status of list data streams tags: - - Security Solution Lists API + - Security Lists API post: description: Create `.lists` and `.items` data streams in the relevant space. operationId: CreateListIndex @@ -619,7 +619,7 @@ paths: description: Internal server error response summary: Create list data streams tags: - - Security Solution Lists API + - Security Lists API /api/lists/items: delete: description: Delete a list item using its `id`, or its `list_id` and `value` fields. @@ -701,7 +701,7 @@ paths: description: Internal server error response summary: Delete a list item tags: - - Security Solution Lists API + - Security Lists API get: description: Get the details of a list item. operationId: ReadListItem @@ -769,7 +769,7 @@ paths: description: Internal server error response summary: Get a list item tags: - - Security Solution Lists API + - Security Lists API patch: description: Update specific fields of an existing list item using the list item ID. operationId: PatchListItem @@ -841,7 +841,7 @@ paths: description: Internal server error response summary: Patch a list item tags: - - Security Solution Lists API + - Security Lists API post: description: > Create a list item and associate it with the specified list. @@ -923,7 +923,7 @@ paths: description: Internal server error response summary: Create a list item tags: - - Security Solution Lists API + - Security Lists API put: description: > Update a list item using the list item ID. The original list item is @@ -993,7 +993,7 @@ paths: description: Internal server error response summary: Update a list item tags: - - Security Solution Lists API + - Security Lists API /api/lists/items/_export: post: description: Export list item values from the specified list. @@ -1048,7 +1048,7 @@ paths: description: Internal server error response summary: Export list items tags: - - Security Solution Lists API + - Security Lists API /api/lists/items/_find: get: description: Get all list items in the specified list. @@ -1168,7 +1168,7 @@ paths: description: Internal server error response summary: Get list items tags: - - Security Solution Lists API + - Security Lists API /api/lists/items/_import: post: description: > @@ -1275,7 +1275,7 @@ paths: description: Internal server error response summary: Import list items tags: - - Security Solution Lists API + - Security Lists API /api/lists/privileges: get: operationId: ReadListPrivileges @@ -1325,7 +1325,7 @@ paths: description: Internal server error response summary: Get list privileges tags: - - Security Solution Lists API + - Security Lists API components: schemas: FindListItemsCursor: @@ -1563,4 +1563,4 @@ security: - BasicAuth: [] tags: - description: Lists API allows you to manage lists of keywords, IPs or IP ranges items. - name: Security Solution Lists API + name: Security Lists API diff --git a/packages/kbn-securitysolution-lists-common/scripts/openapi_bundle.js b/packages/kbn-securitysolution-lists-common/scripts/openapi_bundle.js index 3d16d8272d7e4..2f809aa1f5ee2 100644 --- a/packages/kbn-securitysolution-lists-common/scripts/openapi_bundle.js +++ b/packages/kbn-securitysolution-lists-common/scripts/openapi_bundle.js @@ -24,12 +24,12 @@ const ROOT = resolve(__dirname, '..'); includeLabels: ['serverless'], prototypeDocument: { info: { - title: 'Security Solution Lists API (Elastic Cloud Serverless)', + title: 'Security Lists API (Elastic Cloud Serverless)', description: 'Lists API allows you to manage lists of keywords, IPs or IP ranges items.', }, tags: [ { - name: 'Security Solution Lists API', + name: 'Security Lists API', description: 'Lists API allows you to manage lists of keywords, IPs or IP ranges items.', }, @@ -48,12 +48,12 @@ const ROOT = resolve(__dirname, '..'); includeLabels: ['ess'], prototypeDocument: { info: { - title: 'Security Solution Lists API (Elastic Cloud and self-hosted)', + title: 'Security Lists API (Elastic Cloud and self-hosted)', description: 'Lists API allows you to manage lists of keywords, IPs or IP ranges items.', }, tags: [ { - name: 'Security Solution Lists API', + name: 'Security Lists API', description: 'Lists API allows you to manage lists of keywords, IPs or IP ranges items.', }, diff --git a/packages/kbn-test/src/es/test_es_cluster.ts b/packages/kbn-test/src/es/test_es_cluster.ts index d4f5936e2ad57..620147e1fa7ab 100644 --- a/packages/kbn-test/src/es/test_es_cluster.ts +++ b/packages/kbn-test/src/es/test_es_cluster.ts @@ -191,7 +191,10 @@ export function createTestEsCluster< `transport.port=${transportPort ?? esTestConfig.getTransportPort()}`, // For multi-node clusters, we make all nodes master-eligible by default. ...(nodes.length > 1 - ? ['discovery.type=zen', `cluster.initial_master_nodes=${nodes.map((n) => n.name).join(',')}`] + ? [ + 'discovery.type=multi-node', + `cluster.initial_master_nodes=${nodes.map((n) => n.name).join(',')}`, + ] : ['discovery.type=single-node']), ]; diff --git a/packages/kbn-unified-data-table/__mocks__/table_context.ts b/packages/kbn-unified-data-table/__mocks__/table_context.ts index a55bea58feebf..739e04a954e07 100644 --- a/packages/kbn-unified-data-table/__mocks__/table_context.ts +++ b/packages/kbn-unified-data-table/__mocks__/table_context.ts @@ -15,18 +15,14 @@ import { servicesMock } from './services'; import { DataTableContext } from '../src/table_context'; import { convertValueToString } from '../src/utils/convert_value_to_string'; import { buildDataTableRecord } from '@kbn/discover-utils'; -import type { DataTableRecord, EsHitRecord } from '@kbn/discover-utils/types'; +import type { DataTableRecord } from '@kbn/discover-utils/types'; import type { UseSelectedDocsState } from '../src/hooks/use_selected_docs'; -const buildTableContext = (dataView: DataView, rows: EsHitRecord[]): DataTableContext => { - const usedRows = rows.map((row) => { - return buildDataTableRecord(row, dataView); - }); - +const buildTableContext = (dataView: DataView, rows: DataTableRecord[]): DataTableContext => { return { expanded: undefined, setExpanded: jest.fn(), - rows: usedRows, + getRowByIndex: jest.fn((index) => rows[index]), onFilter: jest.fn(), dataView, isDarkMode: false, @@ -38,16 +34,27 @@ const buildTableContext = (dataView: DataView, rows: EsHitRecord[]): DataTableCo rowIndex, columnId, fieldFormats: servicesMock.fieldFormats, - rows: usedRows, + rows, dataView, options, }), }; }; -export const dataTableContextMock = buildTableContext(dataViewMock, esHitsMock); +export const dataTableContextRowsMock = esHitsMock.map((row) => + buildDataTableRecord(row, dataViewMock) +); + +export const dataTableContextMock = buildTableContext(dataViewMock, dataTableContextRowsMock); + +export const dataTableContextComplexRowsMock = esHitsComplex.map((row) => + buildDataTableRecord(row, dataViewComplexMock) +); -export const dataTableContextComplexMock = buildTableContext(dataViewComplexMock, esHitsComplex); +export const dataTableContextComplexMock = buildTableContext( + dataViewComplexMock, + dataTableContextComplexRowsMock +); export function buildSelectedDocsState(selectedDocIds: string[]): UseSelectedDocsState { const selectedDocsSet = new Set(selectedDocIds); @@ -62,6 +69,7 @@ export function buildSelectedDocsState(selectedDocIds: string[]): UseSelectedDoc selectedDocsCount: selectedDocsSet.size, docIdsInSelectionOrder: selectedDocIds, toggleDocSelection: jest.fn(), + toggleMultipleDocsSelection: jest.fn(), selectAllDocs: jest.fn(), selectMoreDocs: jest.fn(), deselectSomeDocs: jest.fn(), diff --git a/packages/kbn-unified-data-table/src/components/custom_control_columns/additional_row_control/row_control_column.test.tsx b/packages/kbn-unified-data-table/src/components/custom_control_columns/additional_row_control/row_control_column.test.tsx index 0cd04436a528a..fd402b64a4bc9 100644 --- a/packages/kbn-unified-data-table/src/components/custom_control_columns/additional_row_control/row_control_column.test.tsx +++ b/packages/kbn-unified-data-table/src/components/custom_control_columns/additional_row_control/row_control_column.test.tsx @@ -54,6 +54,6 @@ describe('getRowControlColumn', () => { button.click(); - expect(mockClick).toHaveBeenCalledWith({ record: contextMock.rows[1], rowIndex: 1 }); + expect(mockClick).toHaveBeenCalledWith({ record: contextMock.getRowByIndex(1), rowIndex: 1 }); }); }); diff --git a/packages/kbn-unified-data-table/src/components/custom_control_columns/additional_row_control/row_control_column.tsx b/packages/kbn-unified-data-table/src/components/custom_control_columns/additional_row_control/row_control_column.tsx index a1adb1e9a0d76..3519bef843c4a 100644 --- a/packages/kbn-unified-data-table/src/components/custom_control_columns/additional_row_control/row_control_column.tsx +++ b/packages/kbn-unified-data-table/src/components/custom_control_columns/additional_row_control/row_control_column.tsx @@ -26,7 +26,7 @@ export const RowControlCell = ({ }: EuiDataGridCellValueElementProps & { renderControl: RowControlColumn['renderControl']; }) => { - const rowProps = useControlColumn(props); + const { record, rowIndex } = useControlColumn(props); const Control: React.FC = useMemo( () => @@ -50,17 +50,19 @@ export const RowControlCell = ({ color={color ?? 'text'} aria-label={label} onClick={() => { - onClick?.(rowProps); + if (record) { + onClick?.({ record, rowIndex }); + } }} /> ); }, - [props.columnId, rowProps] + [props.columnId, record, rowIndex] ); - return renderControl(Control, rowProps); + return record ? renderControl(Control, { record, rowIndex }) : null; }; export const getRowControlColumn = ( diff --git a/packages/kbn-unified-data-table/src/components/custom_control_columns/additional_row_control/row_menu_control_column.test.tsx b/packages/kbn-unified-data-table/src/components/custom_control_columns/additional_row_control/row_menu_control_column.test.tsx index e47a574144999..1c26689bd974e 100644 --- a/packages/kbn-unified-data-table/src/components/custom_control_columns/additional_row_control/row_menu_control_column.test.tsx +++ b/packages/kbn-unified-data-table/src/components/custom_control_columns/additional_row_control/row_menu_control_column.test.tsx @@ -66,6 +66,6 @@ describe('getRowMenuControlColumn', () => { expect(button).toBeInTheDocument(); button.click(); - expect(mockClick).toHaveBeenCalledWith({ record: contextMock.rows[1], rowIndex: 1 }); + expect(mockClick).toHaveBeenCalledWith({ record: contextMock.getRowByIndex(1), rowIndex: 1 }); }); }); diff --git a/packages/kbn-unified-data-table/src/components/custom_control_columns/additional_row_control/row_menu_control_column.tsx b/packages/kbn-unified-data-table/src/components/custom_control_columns/additional_row_control/row_menu_control_column.tsx index 34d4118956c7a..3d6cd19a53b1e 100644 --- a/packages/kbn-unified-data-table/src/components/custom_control_columns/additional_row_control/row_menu_control_column.tsx +++ b/packages/kbn-unified-data-table/src/components/custom_control_columns/additional_row_control/row_menu_control_column.tsx @@ -34,7 +34,7 @@ export const RowMenuControlCell = ({ }: EuiDataGridCellValueElementProps & { rowControlColumns: RowControlColumn[]; }) => { - const rowProps = useControlColumn(props); + const { record, rowIndex } = useControlColumn(props); const [isMoreActionsPopoverOpen, setIsMoreActionsPopoverOpen] = useState(false); const buttonLabel = i18n.translate('unifiedDataTable.grid.additionalRowActions', { @@ -51,7 +51,9 @@ export const RowMenuControlCell = ({ icon={iconType} color={color} onClick={() => { - onClick?.(rowProps); + if (record) { + onClick?.({ record, rowIndex }); + } setIsMoreActionsPopoverOpen(false); }} > @@ -59,7 +61,7 @@ export const RowMenuControlCell = ({ ); }, - [rowProps, setIsMoreActionsPopoverOpen] + [record, rowIndex] ); const popoverMenuItems = useMemo( @@ -68,11 +70,11 @@ export const RowMenuControlCell = ({ const Control = getControlComponent(rowControlColumn.id); return ( - {rowControlColumn.renderControl(Control, rowProps)} + {record ? rowControlColumn.renderControl(Control, { record, rowIndex }) : null} ); }), - [rowControlColumns, rowProps, getControlComponent] + [rowControlColumns, getControlComponent, record, rowIndex] ); return ( diff --git a/packages/kbn-unified-data-table/src/components/custom_control_columns/color_indicator/color_indicator_control_column.test.tsx b/packages/kbn-unified-data-table/src/components/custom_control_columns/color_indicator/color_indicator_control_column.test.tsx index a972579e5cc35..890e0c517fae9 100644 --- a/packages/kbn-unified-data-table/src/components/custom_control_columns/color_indicator/color_indicator_control_column.test.tsx +++ b/packages/kbn-unified-data-table/src/components/custom_control_columns/color_indicator/color_indicator_control_column.test.tsx @@ -39,6 +39,6 @@ describe('ColorIndicatorControlColumn', () => { /> ); - expect(getRowIndicator).toHaveBeenCalledWith(contextMock.rows[1], expect.any(Object)); + expect(getRowIndicator).toHaveBeenCalledWith(contextMock.getRowByIndex(1), expect.any(Object)); }); }); diff --git a/packages/kbn-unified-data-table/src/components/data_table.scss b/packages/kbn-unified-data-table/src/components/data_table.scss index 44801b4052dfe..5bf8773db9c0b 100644 --- a/packages/kbn-unified-data-table/src/components/data_table.scss +++ b/packages/kbn-unified-data-table/src/components/data_table.scss @@ -43,13 +43,16 @@ .euiDataGridHeaderCell { align-items: start; - &:not(.euiDataGridHeaderCell--controlColumn) .euiDataGridHeaderCell__button { - height: 100%; - align-items: flex-start; + .euiPopover[class*='euiDataGridHeaderCell__popover'] { + align-self: center; } } - .euiDataGrid--headerUnderline .euiDataGridHeaderCell { + .euiDataGrid--bordersHorizontal .euiDataGridHeader { + border-top: none; + } + + .euiDataGrid--headerUnderline .euiDataGridHeader { border-bottom: $euiBorderThin; } @@ -93,7 +96,8 @@ } .euiDataGridRowCell__content--autoHeight, - .euiDataGridRowCell__content--lineCountHeight { + .euiDataGridRowCell__content--lineCountHeight, + .euiDataGridHeaderCell__content { white-space: pre-wrap; } } @@ -104,25 +108,6 @@ min-height: 0; } -// We only truncate if the cell is not a control column. -.euiDataGridHeader { - - .euiDataGridHeaderCell__content { - white-space: pre-wrap; - } - - .euiDataGridHeaderCell__popover { - flex-grow: 0; - flex-basis: auto; - width: auto; - padding-left: $euiSizeXS; - } -} - -.euiDataGridRowCell--numeric { - text-align: right; -} - .euiDataGrid__loading, .euiDataGrid__noResults { display: flex; diff --git a/packages/kbn-unified-data-table/src/components/data_table.tsx b/packages/kbn-unified-data-table/src/components/data_table.tsx index 556e445eda4b9..662c8526dd567 100644 --- a/packages/kbn-unified-data-table/src/components/data_table.tsx +++ b/packages/kbn-unified-data-table/src/components/data_table.tsx @@ -69,7 +69,7 @@ import { SELECT_ROW, OPEN_DETAILS, } from './data_table_columns'; -import { UnifiedDataTableContext } from '../table_context'; +import { DataTableContext, UnifiedDataTableContext } from '../table_context'; import { getSchemaDetectors } from './data_table_schema'; import { DataTableDocumentToolbarBtn } from './data_table_document_selection'; import { useRowHeightsOptions } from '../hooks/use_row_heights_options'; @@ -497,8 +497,14 @@ export const UnifiedDataTable = ({ const [isCompareActive, setIsCompareActive] = useState(false); const displayedColumns = getDisplayedColumns(columns, dataView); const defaultColumns = displayedColumns.includes('_source'); - const docMap = useMemo(() => new Map(rows?.map((row) => [row.id, row]) ?? []), [rows]); - const getDocById = useCallback((id: string) => docMap.get(id), [docMap]); + const docMap = useMemo( + () => + new Map( + rows?.map((row, docIndex) => [row.id, { doc: row, docIndex }]) ?? [] + ), + [rows] + ); + const getDocById = useCallback((id: string) => docMap.get(id)?.doc, [docMap]); const selectedDocsState = useSelectedDocs(docMap); const { isDocSelected, @@ -629,11 +635,11 @@ export const UnifiedDataTable = ({ ); }, [currentPageSize, setPagination]); - const unifiedDataTableContextValue = useMemo( + const unifiedDataTableContextValue = useMemo( () => ({ expanded: expandedDoc, setExpanded: setExpandedDoc, - rows: displayedRows, + getRowByIndex: (index: number) => displayedRows[index], onFilter, dataView, isDarkMode: darkMode, @@ -876,7 +882,7 @@ export const UnifiedDataTable = ({ const canSetExpandedDoc = Boolean(setExpandedDoc && !!renderDocumentView); const leadingControlColumns: EuiDataGridControlColumn[] = useMemo(() => { - const defaultControlColumns = getLeadControlColumns(canSetExpandedDoc); + const defaultControlColumns = getLeadControlColumns({ rows: displayedRows, canSetExpandedDoc }); const internalControlColumns = controlColumnIds ? // reorder the default controls as per controlColumnIds controlColumnIds.reduce((acc, id) => { @@ -907,6 +913,7 @@ export const UnifiedDataTable = ({ }, [ canSetExpandedDoc, controlColumnIds, + displayedRows, externalControlColumns, getRowIndicator, rowAdditionalLeadingControls, diff --git a/packages/kbn-unified-data-table/src/components/data_table_columns.tsx b/packages/kbn-unified-data-table/src/components/data_table_columns.tsx index 4ef0636093f8d..876db4b0e7149 100644 --- a/packages/kbn-unified-data-table/src/components/data_table_columns.tsx +++ b/packages/kbn-unified-data-table/src/components/data_table_columns.tsx @@ -18,12 +18,13 @@ import { import { type DataView, DataViewField } from '@kbn/data-views-plugin/public'; import { ToastsStart, IUiSettingsClient } from '@kbn/core/public'; import { DocViewFilterFn } from '@kbn/unified-doc-viewer/types'; +import type { DataTableRecord } from '@kbn/discover-utils'; import { ExpandButton } from './data_table_expand_button'; import { CustomGridColumnsConfiguration, UnifiedDataTableSettings } from '../types'; import type { ValueToStringConverter, DataTableColumnsMeta } from '../types'; import { buildCellActions } from './default_cell_actions'; import { getSchemaByKbnType } from './data_table_schema'; -import { SelectButton, SelectAllButton } from './data_table_document_selection'; +import { SelectButton, getSelectAllButton } from './data_table_document_selection'; import { defaultTimeColumnWidth, ROWS_HEIGHT_OPTIONS, @@ -73,18 +74,24 @@ const openDetails = { rowCellRender: ExpandButton, }; -const select = { +const getSelect = (rows: DataTableRecord[]) => ({ id: SELECT_ROW, width: DEFAULT_CONTROL_COLUMN_WIDTH, rowCellRender: SelectButton, - headerCellRender: SelectAllButton, -}; + headerCellRender: getSelectAllButton(rows), +}); -export function getLeadControlColumns(canSetExpandedDoc: boolean) { +export function getLeadControlColumns({ + rows, + canSetExpandedDoc, +}: { + rows: DataTableRecord[]; + canSetExpandedDoc: boolean; +}) { if (!canSetExpandedDoc) { - return [select]; + return [getSelect(rows)]; } - return [openDetails, select]; + return [openDetails, getSelect(rows)]; } function buildEuiGridColumn({ @@ -182,7 +189,13 @@ function buildEuiGridColumn({ cellActions = columnCellActions; } else { cellActions = dataViewField - ? buildCellActions(dataViewField, toastNotifications, valueToStringConverter, onFilter) + ? buildCellActions( + dataViewField, + isPlainRecord, + toastNotifications, + valueToStringConverter, + onFilter + ) : []; if (columnCellActions?.length && cellActionsHandling === 'append') { diff --git a/packages/kbn-unified-data-table/src/components/data_table_copy_rows_as_json.tsx b/packages/kbn-unified-data-table/src/components/data_table_copy_rows_as_json.tsx index ba10b27a3cbdb..21b6265f989f4 100644 --- a/packages/kbn-unified-data-table/src/components/data_table_copy_rows_as_json.tsx +++ b/packages/kbn-unified-data-table/src/components/data_table_copy_rows_as_json.tsx @@ -11,20 +11,23 @@ import React, { useContext, useState } from 'react'; import { FormattedMessage } from '@kbn/i18n-react'; import { EuiContextMenuItem } from '@elastic/eui'; import type { ToastsStart } from '@kbn/core/public'; +import type { DataTableRecord } from '@kbn/discover-utils'; import { copyRowsAsJsonToClipboard } from '../utils/copy_value_to_clipboard'; import { UnifiedDataTableContext } from '../table_context'; interface DataTableCopyRowsAsJsonProps { + rows: DataTableRecord[]; toastNotifications: ToastsStart; onCompleted: () => void; } export const DataTableCopyRowsAsJson: React.FC = ({ + rows, toastNotifications, onCompleted, }) => { const [isProcessing, setIsProcessing] = useState(false); - const { rows, selectedDocsState, isPlainRecord } = useContext(UnifiedDataTableContext); + const { selectedDocsState, isPlainRecord } = useContext(UnifiedDataTableContext); const { getSelectedDocsOrderedByRows } = selectedDocsState; return ( diff --git a/packages/kbn-unified-data-table/src/components/data_table_copy_rows_as_text.tsx b/packages/kbn-unified-data-table/src/components/data_table_copy_rows_as_text.tsx index 6978589e8fa9f..8dddbd24f2df3 100644 --- a/packages/kbn-unified-data-table/src/components/data_table_copy_rows_as_text.tsx +++ b/packages/kbn-unified-data-table/src/components/data_table_copy_rows_as_text.tsx @@ -12,23 +12,25 @@ import { uniq } from 'lodash'; import { FormattedMessage } from '@kbn/i18n-react'; import { EuiContextMenuItem } from '@elastic/eui'; import type { ToastsStart } from '@kbn/core/public'; -import { calcFieldCounts } from '@kbn/discover-utils'; +import { DataTableRecord, calcFieldCounts } from '@kbn/discover-utils'; import { copyRowsAsTextToClipboard } from '../utils/copy_value_to_clipboard'; import { UnifiedDataTableContext } from '../table_context'; interface DataTableCopyRowsAsTextProps { + rows: DataTableRecord[]; toastNotifications: ToastsStart; columns: string[]; onCompleted: () => void; } export const DataTableCopyRowsAsText: React.FC = ({ + rows, toastNotifications, columns, onCompleted, }) => { const [isProcessing, setIsProcessing] = useState(false); - const { valueToStringConverter, dataView, rows, selectedDocsState } = + const { valueToStringConverter, dataView, selectedDocsState } = useContext(UnifiedDataTableContext); const { isDocSelected } = selectedDocsState; diff --git a/packages/kbn-unified-data-table/src/components/data_table_document_selection.test.tsx b/packages/kbn-unified-data-table/src/components/data_table_document_selection.test.tsx index 85db2c10885cd..85ce60d78aa16 100644 --- a/packages/kbn-unified-data-table/src/components/data_table_document_selection.test.tsx +++ b/packages/kbn-unified-data-table/src/components/data_table_document_selection.test.tsx @@ -15,9 +15,13 @@ import { DataTableCompareToolbarBtn, DataTableDocumentToolbarBtn, SelectButton, - SelectAllButton, + getSelectAllButton, } from './data_table_document_selection'; -import { buildSelectedDocsState, dataTableContextMock } from '../../__mocks__/table_context'; +import { + buildSelectedDocsState, + dataTableContextMock, + dataTableContextRowsMock, +} from '../../__mocks__/table_context'; import { UnifiedDataTableContext } from '../table_context'; import { getDocId } from '@kbn/discover-utils'; import { render, screen } from '@testing-library/react'; @@ -49,6 +53,7 @@ describe('document selection', () => { const contextMock = { ...dataTableContextMock, }; + const SelectAllButton = getSelectAllButton(dataTableContextRowsMock); const component = mountWithIntl( @@ -65,6 +70,7 @@ describe('document selection', () => { ...dataTableContextMock, selectedDocsState: buildSelectedDocsState(['i::1::']), }; + const SelectAllButton = getSelectAllButton(dataTableContextRowsMock); const component = mountWithIntl( @@ -197,7 +203,7 @@ describe('document selection', () => { const props = { isPlainRecord: false, isFilterActive: false, - rows: dataTableContextMock.rows, + rows: dataTableContextRowsMock, selectedDocsState: buildSelectedDocsState(['i::1::', 'i::2::']), setIsFilterActive: jest.fn(), enableComparisonMode: true, @@ -242,7 +248,7 @@ describe('document selection', () => { const props = { isPlainRecord: false, isFilterActive: false, - rows: dataTableContextMock.rows, + rows: dataTableContextRowsMock, selectedDocsState: buildSelectedDocsState(['i::1::']), setIsFilterActive: jest.fn(), enableComparisonMode: true, @@ -271,7 +277,7 @@ describe('document selection', () => { const props = { isPlainRecord: false, isFilterActive: false, - rows: dataTableContextMock.rows, + rows: dataTableContextRowsMock, selectedDocsState: buildSelectedDocsState(['i::1::', 'i::2::']), setIsFilterActive: jest.fn(), enableComparisonMode: true, @@ -307,7 +313,7 @@ describe('document selection', () => { const props = { isPlainRecord: false, isFilterActive: false, - rows: dataTableContextMock.rows, + rows: dataTableContextRowsMock, selectedDocsState: buildSelectedDocsState(['i::1::', 'i::2::']), setIsFilterActive: jest.fn(), enableComparisonMode: true, @@ -336,8 +342,8 @@ describe('document selection', () => { const props = { isPlainRecord: false, isFilterActive: false, - rows: dataTableContextMock.rows, - selectedDocsState: buildSelectedDocsState(dataTableContextMock.rows.map((row) => row.id)), + rows: dataTableContextRowsMock, + selectedDocsState: buildSelectedDocsState(dataTableContextRowsMock.map((row) => row.id)), setIsFilterActive: jest.fn(), enableComparisonMode: true, setIsCompareActive: jest.fn(), @@ -357,7 +363,7 @@ describe('document selection', () => { ); expect(findTestSubject(component, 'unifiedDataTableSelectionBtn').text()).toBe( - `Selected${dataTableContextMock.rows.length}` + `Selected${dataTableContextRowsMock.length}` ); expect(findTestSubject(component, 'dscGridSelectAllDocs').exists()).toBe(false); @@ -368,7 +374,7 @@ describe('document selection', () => { const props = { isPlainRecord: false, isFilterActive: false, - rows: dataTableContextMock.rows, + rows: dataTableContextRowsMock, selectedDocsState: buildSelectedDocsState([]), setIsFilterActive: jest.fn(), enableComparisonMode: true, diff --git a/packages/kbn-unified-data-table/src/components/data_table_document_selection.tsx b/packages/kbn-unified-data-table/src/components/data_table_document_selection.tsx index ee6eee93539f9..c101d8c20f751 100644 --- a/packages/kbn-unified-data-table/src/components/data_table_document_selection.tsx +++ b/packages/kbn-unified-data-table/src/components/data_table_document_selection.tsx @@ -38,13 +38,17 @@ export const SelectButton = (props: EuiDataGridCellValueElementProps) => { const { record, rowIndex } = useControlColumn(props); const { euiTheme } = useEuiTheme(); const { selectedDocsState } = useContext(UnifiedDataTableContext); - const { isDocSelected, toggleDocSelection } = selectedDocsState; + const { isDocSelected, toggleDocSelection, toggleMultipleDocsSelection } = selectedDocsState; const toggleDocumentSelectionLabel = i18n.translate('unifiedDataTable.grid.selectDoc', { defaultMessage: `Select document ''{rowNumber}''`, values: { rowNumber: rowIndex + 1 }, }); + if (!record) { + return null; + } + return ( { aria-label={toggleDocumentSelectionLabel} checked={isDocSelected(record.id)} data-test-subj={`dscGridSelectDoc-${record.id}`} - onChange={() => { - toggleDocSelection(record.id); + onChange={(event) => { + if ((event.nativeEvent as MouseEvent)?.shiftKey) { + toggleMultipleDocsSelection(record.id); + } else { + toggleDocSelection(record.id); + } }} /> @@ -71,13 +79,13 @@ export const SelectButton = (props: EuiDataGridCellValueElementProps) => { ); }; -export const SelectAllButton = () => { - const { selectedDocsState, pageIndex, pageSize, rows } = useContext(UnifiedDataTableContext); +export const getSelectAllButton = (rows: DataTableRecord[]) => () => { + const { selectedDocsState, pageIndex, pageSize } = useContext(UnifiedDataTableContext); const { getCountOfFilteredSelectedDocs, deselectSomeDocs, selectMoreDocs } = selectedDocsState; const docIdsFromCurrentPage = useMemo(() => { return getDocIdsForCurrentPage(rows, pageIndex, pageSize); - }, [rows, pageIndex, pageSize]); + }, [pageIndex, pageSize]); const countOfSelectedDocs = useMemo(() => { return docIdsFromCurrentPage?.length @@ -200,6 +208,7 @@ export function DataTableDocumentToolbarBtn({ // Copy results to clipboard as text , @@ -272,17 +282,18 @@ export function DataTableDocumentToolbarBtn({ , ]; }, [ - isFilterActive, - isPlainRecord, - setIsFilterActive, - clearAllSelectedDocs, + enableComparisonMode, selectedDocsCount, docIdsInSelectionOrder, - enableComparisonMode, setIsCompareActive, toastNotifications, columns, closePopover, + rows, + isFilterActive, + isPlainRecord, + setIsFilterActive, + clearAllSelectedDocs, ]); const toggleSelectionToolbar = useCallback( diff --git a/packages/kbn-unified-data-table/src/components/data_table_expand_button.test.tsx b/packages/kbn-unified-data-table/src/components/data_table_expand_button.test.tsx index 45aac02e368b4..4da41705efe9a 100644 --- a/packages/kbn-unified-data-table/src/components/data_table_expand_button.test.tsx +++ b/packages/kbn-unified-data-table/src/components/data_table_expand_button.test.tsx @@ -35,12 +35,12 @@ describe('Data table view button ', function () { ); const button = findTestSubject(component, 'docTableExpandToggleColumn'); await button.simulate('click'); - expect(contextMock.setExpanded).toHaveBeenCalledWith(dataTableContextMock.rows[0]); + expect(contextMock.setExpanded).toHaveBeenCalledWith(dataTableContextMock.getRowByIndex(0)); }); it('when the current document is expanded, setExpanded is called with undefined', async () => { const contextMock = { ...dataTableContextMock, - expanded: dataTableContextMock.rows[0], + expanded: dataTableContextMock.getRowByIndex(0), }; const component = mountWithIntl( @@ -63,7 +63,7 @@ describe('Data table view button ', function () { it('when another document is expanded, setExpanded is called with the current document', async () => { const contextMock = { ...dataTableContextMock, - expanded: dataTableContextMock.rows[0], + expanded: dataTableContextMock.getRowByIndex(0), }; const component = mountWithIntl( @@ -81,6 +81,6 @@ describe('Data table view button ', function () { ); const button = findTestSubject(component, 'docTableExpandToggleColumn'); await button.simulate('click'); - expect(contextMock.setExpanded).toHaveBeenCalledWith(dataTableContextMock.rows[1]); + expect(contextMock.setExpanded).toHaveBeenCalledWith(dataTableContextMock.getRowByIndex(1)); }); }); diff --git a/packages/kbn-unified-data-table/src/components/data_table_expand_button.tsx b/packages/kbn-unified-data-table/src/components/data_table_expand_button.tsx index c5a57ee98dc30..f5bb21bc0c95d 100644 --- a/packages/kbn-unified-data-table/src/components/data_table_expand_button.tsx +++ b/packages/kbn-unified-data-table/src/components/data_table_expand_button.tsx @@ -31,7 +31,7 @@ export const ExpandButton = (props: EuiDataGridCellValueElementProps) => { defaultMessage: 'Toggle dialog with details', }); - const testSubj = record.isAnchor + const testSubj = record?.isAnchor ? 'docTableExpandToggleColumnAnchor' : 'docTableExpandToggleColumn'; @@ -44,7 +44,7 @@ export const ExpandButton = (props: EuiDataGridCellValueElementProps) => { } }, [isCurrentRowExpanded, setPressed, pressed]); - if (!setExpanded) { + if (!setExpanded || !record) { return null; } diff --git a/packages/kbn-unified-data-table/src/components/default_cell_actions.test.tsx b/packages/kbn-unified-data-table/src/components/default_cell_actions.test.tsx index 628d3b5a29697..d097a2becd035 100644 --- a/packages/kbn-unified-data-table/src/components/default_cell_actions.test.tsx +++ b/packages/kbn-unified-data-table/src/components/default_cell_actions.test.tsx @@ -45,6 +45,7 @@ describe('Default cell actions ', function () { it('should not show cell actions for unfilterable fields', async () => { const cellActions = buildCellActions( { name: 'foo', filterable: false } as DataViewField, + false, servicesMock.toastNotifications, dataTableContextMock.valueToStringConverter ); @@ -61,6 +62,7 @@ describe('Default cell actions ', function () { it('should show filter actions for filterable fields', async () => { const cellActions = buildCellActions( { name: 'foo', filterable: true } as DataViewField, + false, servicesMock.toastNotifications, dataTableContextMock.valueToStringConverter, jest.fn() @@ -71,6 +73,7 @@ describe('Default cell actions ', function () { it('should show Copy action for _source field', async () => { const cellActions = buildCellActions( { name: '_source', type: '_source', filterable: false } as DataViewField, + false, servicesMock.toastNotifications, dataTableContextMock.valueToStringConverter ); @@ -87,65 +90,97 @@ describe('Default cell actions ', function () { const component = mountWithIntl( } - rowIndex={1} - colIndex={1} - columnId="extension" - isExpanded={false} + cellActionProps={{ + Component: (props: any) => , + rowIndex: 1, + colIndex: 1, + columnId: 'extension', + isExpanded: false, + }} + field={{ name: 'extension', filterable: true } as DataViewField} + isPlainRecord={false} /> ); const button = findTestSubject(component, 'filterForButton'); await button.simulate('click'); - expect(dataTableContextMock.onFilter).toHaveBeenCalledWith({}, 'jpg', '+'); + expect(dataTableContextMock.onFilter).toHaveBeenCalledWith( + { name: 'extension', filterable: true }, + 'jpg', + '+' + ); }); it('triggers filter function when FilterInBtn is clicked for a non-provided value', async () => { const component = mountWithIntl( } - rowIndex={0} - colIndex={1} - columnId="extension" - isExpanded={false} + cellActionProps={{ + Component: (props: any) => , + rowIndex: 0, + colIndex: 1, + columnId: 'extension', + isExpanded: false, + }} + field={{ name: 'extension', filterable: true } as DataViewField} + isPlainRecord={false} /> ); const button = findTestSubject(component, 'filterForButton'); await button.simulate('click'); - expect(dataTableContextMock.onFilter).toHaveBeenCalledWith({}, undefined, '+'); + expect(dataTableContextMock.onFilter).toHaveBeenCalledWith( + { name: 'extension', filterable: true }, + undefined, + '+' + ); }); it('triggers filter function when FilterInBtn is clicked for an empty string value', async () => { const component = mountWithIntl( } - rowIndex={4} - colIndex={1} - columnId="message" - isExpanded={false} + cellActionProps={{ + Component: (props: any) => , + rowIndex: 4, + colIndex: 1, + columnId: 'message', + isExpanded: false, + }} + field={{ name: 'message', filterable: true } as DataViewField} + isPlainRecord={false} /> ); const button = findTestSubject(component, 'filterForButton'); await button.simulate('click'); - expect(dataTableContextMock.onFilter).toHaveBeenCalledWith({}, '', '+'); + expect(dataTableContextMock.onFilter).toHaveBeenCalledWith( + { name: 'message', filterable: true }, + '', + '+' + ); }); it('triggers filter function when FilterOutBtn is clicked', async () => { const component = mountWithIntl( } - rowIndex={1} - colIndex={1} - columnId="extension" - isExpanded={false} + cellActionProps={{ + Component: (props: any) => , + rowIndex: 1, + colIndex: 1, + columnId: 'extension', + isExpanded: false, + }} + field={{ name: 'extension', filterable: true } as DataViewField} + isPlainRecord={false} /> ); const button = findTestSubject(component, 'filterOutButton'); await button.simulate('click'); - expect(dataTableContextMock.onFilter).toHaveBeenCalledWith({}, 'jpg', '-'); + expect(dataTableContextMock.onFilter).toHaveBeenCalledWith( + { name: 'extension', filterable: true }, + 'jpg', + '-' + ); }); it('triggers clipboard copy when CopyBtn is clicked', async () => { const component = mountWithIntl( diff --git a/packages/kbn-unified-data-table/src/components/default_cell_actions.tsx b/packages/kbn-unified-data-table/src/components/default_cell_actions.tsx index 620151c9d9701..f2260a7d910de 100644 --- a/packages/kbn-unified-data-table/src/components/default_cell_actions.tsx +++ b/packages/kbn-unified-data-table/src/components/default_cell_actions.tsx @@ -24,19 +24,33 @@ function onFilterCell( mode: '+' | '-', field: DataViewField ) { - const row = context.rows[rowIndex]; - const value = row.flattened[columnId]; + const row = context.getRowByIndex(rowIndex); - if (field && context.onFilter) { + if (row && field && context.onFilter) { + const value = row.flattened[columnId]; context.onFilter(field, value, mode); } } -export const FilterInBtn = ( - { Component, rowIndex, columnId }: EuiDataGridColumnCellActionProps, - field: DataViewField -) => { +const esqlMultivalueFilteringDisabled = i18n.translate( + 'unifiedDataTable.grid.esqlMultivalueFilteringDisabled', + { + defaultMessage: 'Multivalue filtering is not supported in ES|QL', + } +); + +export const FilterInBtn = ({ + cellActionProps: { Component, rowIndex, columnId }, + field, + isPlainRecord, +}: { + cellActionProps: EuiDataGridColumnCellActionProps; + field: DataViewField; + isPlainRecord: boolean | undefined; +}) => { const context = useContext(UnifiedDataTableContext); + const filteringDisabled = + isPlainRecord && Array.isArray(context.getRowByIndex(rowIndex)?.flattened[columnId]); const buttonTitle = i18n.translate('unifiedDataTable.grid.filterForAria', { defaultMessage: 'Filter for this {value}', values: { value: columnId }, @@ -49,7 +63,8 @@ export const FilterInBtn = ( }} iconType="plusInCircle" aria-label={buttonTitle} - title={buttonTitle} + title={filteringDisabled ? esqlMultivalueFilteringDisabled : buttonTitle} + disabled={filteringDisabled} data-test-subj="filterForButton" > {i18n.translate('unifiedDataTable.grid.filterFor', { @@ -59,11 +74,18 @@ export const FilterInBtn = ( ); }; -export const FilterOutBtn = ( - { Component, rowIndex, columnId }: EuiDataGridColumnCellActionProps, - field: DataViewField -) => { +export const FilterOutBtn = ({ + cellActionProps: { Component, rowIndex, columnId }, + field, + isPlainRecord, +}: { + cellActionProps: EuiDataGridColumnCellActionProps; + field: DataViewField; + isPlainRecord: boolean | undefined; +}) => { const context = useContext(UnifiedDataTableContext); + const filteringDisabled = + isPlainRecord && Array.isArray(context.getRowByIndex(rowIndex)?.flattened[columnId]); const buttonTitle = i18n.translate('unifiedDataTable.grid.filterOutAria', { defaultMessage: 'Filter out this {value}', values: { value: columnId }, @@ -76,7 +98,8 @@ export const FilterOutBtn = ( }} iconType="minusInCircle" aria-label={buttonTitle} - title={buttonTitle} + title={filteringDisabled ? esqlMultivalueFilteringDisabled : buttonTitle} + disabled={filteringDisabled} data-test-subj="filterOutButton" > {i18n.translate('unifiedDataTable.grid.filterOut', { @@ -120,6 +143,7 @@ export function buildCopyValueButton( export function buildCellActions( field: DataViewField, + isPlainRecord: boolean | undefined, toastNotifications: ToastsStart, valueToStringConverter: ValueToStringConverter, onFilter?: DocViewFilterFn @@ -127,16 +151,18 @@ export function buildCellActions( return [ ...(onFilter && field.filterable ? [ - ({ Component, rowIndex, columnId }: EuiDataGridColumnCellActionProps) => - FilterInBtn( - { Component, rowIndex, columnId } as EuiDataGridColumnCellActionProps, - field - ), - ({ Component, rowIndex, columnId }: EuiDataGridColumnCellActionProps) => - FilterOutBtn( - { Component, rowIndex, columnId } as EuiDataGridColumnCellActionProps, - field - ), + (cellActionProps: EuiDataGridColumnCellActionProps) => + FilterInBtn({ + cellActionProps, + field, + isPlainRecord, + }), + (cellActionProps: EuiDataGridColumnCellActionProps) => + FilterOutBtn({ + cellActionProps, + field, + isPlainRecord, + }), ] : []), ({ Component, rowIndex, columnId }: EuiDataGridColumnCellActionProps) => diff --git a/packages/kbn-unified-data-table/src/hooks/use_control_column.ts b/packages/kbn-unified-data-table/src/hooks/use_control_column.ts index 302193cec6b44..64745f51d408f 100644 --- a/packages/kbn-unified-data-table/src/hooks/use_control_column.ts +++ b/packages/kbn-unified-data-table/src/hooks/use_control_column.ts @@ -16,14 +16,14 @@ export const useControlColumn = ({ rowIndex, setCellProps, }: Pick): { - record: DataTableRecord; + record?: DataTableRecord; rowIndex: number; } => { - const { expanded, rows } = useContext(UnifiedDataTableContext); - const record = useMemo(() => rows[rowIndex], [rows, rowIndex]); + const { expanded, getRowByIndex } = useContext(UnifiedDataTableContext); + const record = useMemo(() => getRowByIndex(rowIndex), [getRowByIndex, rowIndex]); useEffect(() => { - if (record.isAnchor) { + if (record?.isAnchor) { setCellProps({ className: 'unifiedDataTable__cell--highlight', }); diff --git a/packages/kbn-unified-data-table/src/hooks/use_selected_docs.test.ts b/packages/kbn-unified-data-table/src/hooks/use_selected_docs.test.ts index 743a3006d25d9..3865e412bdcd2 100644 --- a/packages/kbn-unified-data-table/src/hooks/use_selected_docs.test.ts +++ b/packages/kbn-unified-data-table/src/hooks/use_selected_docs.test.ts @@ -17,7 +17,7 @@ describe('useSelectedDocs', () => { const docs = generateEsHits(dataViewWithTimefieldMock, 5).map((hit) => buildDataTableRecord(hit, dataViewWithTimefieldMock) ); - const docsMap = new Map(docs.map((doc) => [doc.id, doc])); + const docsMap = new Map(docs.map((doc, docIndex) => [doc.id, { doc, docIndex }])); test('should have a correct default state', () => { const { result } = renderHook(() => useSelectedDocs(docsMap)); @@ -223,4 +223,30 @@ describe('useSelectedDocs', () => { expect(result.current.getCountOfFilteredSelectedDocs([docs[0].id])).toBe(0); expect(result.current.getCountOfFilteredSelectedDocs([docs[2].id, docs[3].id])).toBe(0); }); + + test('should toggleMultipleDocsSelection correctly', () => { + const { result } = renderHook(() => useSelectedDocs(docsMap)); + const docIds = docs.map((doc) => doc.id); + + // select `0` + act(() => { + result.current.toggleDocSelection(docs[0].id); + }); + + expect(result.current.getCountOfFilteredSelectedDocs(docIds)).toBe(1); + + // select from `0` to `4` + act(() => { + result.current.toggleMultipleDocsSelection(docs[4].id); + }); + + expect(result.current.getCountOfFilteredSelectedDocs(docIds)).toBe(5); + + // deselect from `2` to `4` + act(() => { + result.current.toggleMultipleDocsSelection(docs[2].id); + }); + + expect(result.current.getCountOfFilteredSelectedDocs(docIds)).toBe(2); + }); }); diff --git a/packages/kbn-unified-data-table/src/hooks/use_selected_docs.ts b/packages/kbn-unified-data-table/src/hooks/use_selected_docs.ts index fd839c88c6363..f6538f185b32f 100644 --- a/packages/kbn-unified-data-table/src/hooks/use_selected_docs.ts +++ b/packages/kbn-unified-data-table/src/hooks/use_selected_docs.ts @@ -7,7 +7,7 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { useCallback, useMemo, useState } from 'react'; +import { useCallback, useMemo, useRef, useState } from 'react'; import type { DataTableRecord } from '@kbn/discover-utils'; export interface UseSelectedDocsState { @@ -17,6 +17,7 @@ export interface UseSelectedDocsState { selectedDocsCount: number; docIdsInSelectionOrder: string[]; toggleDocSelection: (docId: string) => void; + toggleMultipleDocsSelection: (toDocId: string) => void; selectAllDocs: () => void; selectMoreDocs: (docIds: string[]) => void; deselectSomeDocs: (docIds: string[]) => void; @@ -25,8 +26,11 @@ export interface UseSelectedDocsState { getSelectedDocsOrderedByRows: (rows: DataTableRecord[]) => DataTableRecord[]; } -export const useSelectedDocs = (docMap: Map): UseSelectedDocsState => { +export const useSelectedDocs = ( + docMap: Map +): UseSelectedDocsState => { const [selectedDocsSet, setSelectedDocsSet] = useState>(new Set()); + const lastCheckboxToggledDocId = useRef(); const toggleDocSelection = useCallback((docId: string) => { setSelectedDocsSet((prevSelectedRowsSet) => { @@ -38,6 +42,7 @@ export const useSelectedDocs = (docMap: Map): UseSelect } return newSelectedRowsSet; }); + lastCheckboxToggledDocId.current = docId; }, []); const replaceSelectedDocs = useCallback((docIds: string[]) => { @@ -73,6 +78,42 @@ export const useSelectedDocs = (docMap: Map): UseSelect [selectedDocsSet, docMap] ); + const toggleMultipleDocsSelection = useCallback( + (toDocId: string) => { + const shouldSelect = !isDocSelected(toDocId); + + const lastToggledDocIdIndex = docMap.get( + lastCheckboxToggledDocId.current ?? toDocId + )?.docIndex; + const currentToggledDocIdIndex = docMap.get(toDocId)?.docIndex; + const docIds: string[] = []; + + if ( + typeof lastToggledDocIdIndex === 'number' && + typeof currentToggledDocIdIndex === 'number' && + lastToggledDocIdIndex !== currentToggledDocIdIndex + ) { + const startIndex = Math.min(lastToggledDocIdIndex, currentToggledDocIdIndex); + const endIndex = Math.max(lastToggledDocIdIndex, currentToggledDocIdIndex); + + docMap.forEach(({ doc, docIndex }) => { + if (docIndex >= startIndex && docIndex <= endIndex) { + docIds.push(doc.id); + } + }); + } + + if (shouldSelect) { + selectMoreDocs(docIds); + } else { + deselectSomeDocs(docIds); + } + + lastCheckboxToggledDocId.current = toDocId; + }, + [selectMoreDocs, deselectSomeDocs, docMap, isDocSelected] + ); + const getSelectedDocsOrderedByRows = useCallback( (rows: DataTableRecord[]) => { return rows.filter((row) => isDocSelected(row.id)); @@ -101,6 +142,7 @@ export const useSelectedDocs = (docMap: Map): UseSelect docIdsInSelectionOrder: selectedDocIds, getCountOfFilteredSelectedDocs, toggleDocSelection, + toggleMultipleDocsSelection, selectAllDocs, selectMoreDocs, deselectSomeDocs, @@ -112,6 +154,7 @@ export const useSelectedDocs = (docMap: Map): UseSelect isDocSelected, getCountOfFilteredSelectedDocs, toggleDocSelection, + toggleMultipleDocsSelection, selectAllDocs, selectMoreDocs, deselectSomeDocs, diff --git a/packages/kbn-unified-data-table/src/table_context.tsx b/packages/kbn-unified-data-table/src/table_context.tsx index f8f18f7ef6b9a..204453416b6f8 100644 --- a/packages/kbn-unified-data-table/src/table_context.tsx +++ b/packages/kbn-unified-data-table/src/table_context.tsx @@ -17,7 +17,7 @@ import type { UseSelectedDocsState } from './hooks/use_selected_docs'; export interface DataTableContext { expanded?: DataTableRecord | undefined; setExpanded?: (hit?: DataTableRecord) => void; - rows: DataTableRecord[]; + getRowByIndex: (index: number) => DataTableRecord | undefined; onFilter?: DocViewFilterFn; dataView: DataView; isDarkMode: boolean; diff --git a/packages/kbn-unified-data-table/src/utils/convert_value_to_string.test.tsx b/packages/kbn-unified-data-table/src/utils/convert_value_to_string.test.tsx index 33ad7cb7ba095..749a2b34e579c 100644 --- a/packages/kbn-unified-data-table/src/utils/convert_value_to_string.test.tsx +++ b/packages/kbn-unified-data-table/src/utils/convert_value_to_string.test.tsx @@ -7,14 +7,19 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { dataTableContextComplexMock, dataTableContextMock } from '../../__mocks__/table_context'; +import { + dataTableContextComplexMock, + dataTableContextComplexRowsMock, + dataTableContextMock, + dataTableContextRowsMock, +} from '../../__mocks__/table_context'; import { servicesMock } from '../../__mocks__/services'; import { convertValueToString, convertNameToString } from './convert_value_to_string'; describe('convertValueToString', () => { it('should convert a keyword value to text', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'keyword_key', @@ -29,7 +34,7 @@ describe('convertValueToString', () => { it('should convert a text value to text', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'text_message', @@ -44,7 +49,7 @@ describe('convertValueToString', () => { it('should convert a text value to text (not for CSV)', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'text_message', @@ -59,7 +64,7 @@ describe('convertValueToString', () => { it('should convert a multiline text value to text', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'text_message', @@ -75,7 +80,7 @@ describe('convertValueToString', () => { it('should convert a number value to text', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'number_price', @@ -90,7 +95,7 @@ describe('convertValueToString', () => { it('should convert a date value to text', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'date', @@ -105,7 +110,7 @@ describe('convertValueToString', () => { it('should convert a date nanos value to text', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'date_nanos', @@ -120,7 +125,7 @@ describe('convertValueToString', () => { it('should convert a date nanos value to text (not for CSV)', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'date_nanos', @@ -135,7 +140,7 @@ describe('convertValueToString', () => { it('should convert a boolean value to text', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'bool_enabled', @@ -150,7 +155,7 @@ describe('convertValueToString', () => { it('should convert a binary value to text', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'binary_blob', @@ -165,7 +170,7 @@ describe('convertValueToString', () => { it('should convert a binary value to text (not for CSV)', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'binary_blob', @@ -180,7 +185,7 @@ describe('convertValueToString', () => { it('should convert an object value to text', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'object_user.first', @@ -195,7 +200,7 @@ describe('convertValueToString', () => { it('should convert a nested value to text', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'nested_user', @@ -212,7 +217,7 @@ describe('convertValueToString', () => { it('should convert a flattened value to text', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'flattened_labels', @@ -227,7 +232,7 @@ describe('convertValueToString', () => { it('should convert a range value to text', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'range_time_frame', @@ -244,7 +249,7 @@ describe('convertValueToString', () => { it('should convert a rank features value to text', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'rank_features', @@ -259,7 +264,7 @@ describe('convertValueToString', () => { it('should convert a histogram value to text', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'histogram', @@ -274,7 +279,7 @@ describe('convertValueToString', () => { it('should convert a IP value to text', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'ip_addr', @@ -289,7 +294,7 @@ describe('convertValueToString', () => { it('should convert a IP value to text (not for CSV)', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'ip_addr', @@ -304,7 +309,7 @@ describe('convertValueToString', () => { it('should convert a version value to text', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'version', @@ -319,7 +324,7 @@ describe('convertValueToString', () => { it('should convert a version value to text (not for CSV)', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'version', @@ -334,7 +339,7 @@ describe('convertValueToString', () => { it('should convert a vector value to text', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'vector', @@ -349,7 +354,7 @@ describe('convertValueToString', () => { it('should convert a geo point value to text', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'geo_point', @@ -364,7 +369,7 @@ describe('convertValueToString', () => { it('should convert a geo point object value to text', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'geo_point', @@ -379,7 +384,7 @@ describe('convertValueToString', () => { it('should convert an array value to text', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'array_tags', @@ -394,7 +399,7 @@ describe('convertValueToString', () => { it('should convert a shape value to text', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'geometry', @@ -411,7 +416,7 @@ describe('convertValueToString', () => { it('should convert a runtime value to text', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'runtime_number', @@ -426,7 +431,7 @@ describe('convertValueToString', () => { it('should convert a scripted value to text', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'scripted_string', @@ -441,7 +446,7 @@ describe('convertValueToString', () => { it('should convert a scripted value to text (not for CSV)', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'scripted_string', @@ -456,7 +461,7 @@ describe('convertValueToString', () => { it('should return an empty string and not fail', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'unknown', @@ -471,7 +476,7 @@ describe('convertValueToString', () => { it('should return an empty string when rowIndex is out of range', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'unknown', @@ -486,7 +491,7 @@ describe('convertValueToString', () => { it('should return _source value', () => { const result = convertValueToString({ - rows: dataTableContextMock.rows, + rows: dataTableContextRowsMock, dataView: dataTableContextMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: '_source', @@ -509,7 +514,7 @@ describe('convertValueToString', () => { it('should return a formatted _source value', () => { const result = convertValueToString({ - rows: dataTableContextMock.rows, + rows: dataTableContextRowsMock, dataView: dataTableContextMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: '_source', @@ -526,7 +531,7 @@ describe('convertValueToString', () => { it('should escape formula', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'array_tags', @@ -540,7 +545,7 @@ describe('convertValueToString', () => { expect(result.withFormula).toBe(true); const result2 = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'scripted_string', @@ -556,7 +561,7 @@ describe('convertValueToString', () => { it('should not escape formulas when not for CSV', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'array_tags', diff --git a/packages/kbn-unified-data-table/src/utils/copy_value_to_clipboard.test.tsx b/packages/kbn-unified-data-table/src/utils/copy_value_to_clipboard.test.tsx index cb5050e503ca9..86675c5fbc707 100644 --- a/packages/kbn-unified-data-table/src/utils/copy_value_to_clipboard.test.tsx +++ b/packages/kbn-unified-data-table/src/utils/copy_value_to_clipboard.test.tsx @@ -7,7 +7,10 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { dataTableContextComplexMock } from '../../__mocks__/table_context'; +import { + dataTableContextComplexMock, + dataTableContextComplexRowsMock, +} from '../../__mocks__/table_context'; import { servicesMock } from '../../__mocks__/services'; import { copyValueToClipboard, @@ -25,7 +28,7 @@ const warn = jest.spyOn(console, 'warn').mockImplementation(() => {}); describe('copyValueToClipboard', () => { const valueToStringConverter: ValueToStringConverter = (rowIndex, columnId, options) => convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, rowIndex, @@ -198,7 +201,7 @@ describe('copyValueToClipboard', () => { const result = await copyRowsAsJsonToClipboard({ toastNotifications: servicesMock.toastNotifications, - selectedRows: [dataTableContextComplexMock.rows[0]], + selectedRows: [dataTableContextComplexMock.getRowByIndex(0)!], }); const output = diff --git a/packages/shared-ux/chrome/navigation/src/services.tsx b/packages/shared-ux/chrome/navigation/src/services.tsx index 1b0102533e53e..26a8b61478ecb 100644 --- a/packages/shared-ux/chrome/navigation/src/services.tsx +++ b/packages/shared-ux/chrome/navigation/src/services.tsx @@ -37,6 +37,7 @@ export const NavigationKibanaProvider: FC ({ @@ -47,6 +48,8 @@ export const NavigationKibanaProvider: FC; isSideNavCollapsed: boolean; eventTracker: EventTracker; + selectedPanelNode?: PanelSelectedNode | null; + setSelectedPanelNode?: (node: PanelSelectedNode | null) => void; } /** @@ -55,6 +58,8 @@ export interface NavigationKibanaDependencies { }; sideNav: { getIsCollapsed$: () => Observable; + getPanelSelectedNode$: () => Observable; + setPanelSelectedNode(node: string | PanelSelectedNode | null): void; }; }; http: { diff --git a/packages/shared-ux/chrome/navigation/src/ui/components/panel/context.tsx b/packages/shared-ux/chrome/navigation/src/ui/components/panel/context.tsx index a5fee7c226fbd..917862b08b2b4 100644 --- a/packages/shared-ux/chrome/navigation/src/ui/components/panel/context.tsx +++ b/packages/shared-ux/chrome/navigation/src/ui/components/panel/context.tsx @@ -15,19 +15,20 @@ import React, { useMemo, useState, ReactNode, + useEffect, } from 'react'; -import type { ChromeProjectNavigationNode } from '@kbn/core-chrome-browser'; +import type { ChromeProjectNavigationNode, PanelSelectedNode } from '@kbn/core-chrome-browser'; import { DefaultContent } from './default_content'; -import { ContentProvider, PanelNavNode } from './types'; +import { ContentProvider } from './types'; export interface PanelContext { isOpen: boolean; toggle: () => void; - open: (navNode: PanelNavNode) => void; + open: (navNode: PanelSelectedNode) => void; close: () => void; /** The selected node is the node in the main panel that opens the Panel */ - selectedNode: PanelNavNode | null; + selectedNode: PanelSelectedNode | null; /** Handler to retrieve the component to render in the panel */ getContent: () => React.ReactNode; } @@ -37,29 +38,50 @@ const Context = React.createContext(null); interface Props { contentProvider?: ContentProvider; activeNodes: ChromeProjectNavigationNode[][]; + selectedNode?: PanelSelectedNode | null; + setSelectedNode?: (node: PanelSelectedNode | null) => void; } export const PanelProvider: FC> = ({ children, contentProvider, activeNodes, + selectedNode: selectedNodeProp = null, + setSelectedNode, }) => { const [isOpen, setIsOpen] = useState(false); - const [selectedNode, setActiveNode] = useState(null); + const [selectedNode, setActiveNode] = useState(selectedNodeProp); const toggle = useCallback(() => { setIsOpen((prev) => !prev); }, []); - const open = useCallback((navNode: PanelNavNode) => { - setActiveNode(navNode); - setIsOpen(true); - }, []); + const open = useCallback( + (navNode: PanelSelectedNode) => { + setActiveNode(navNode); + setIsOpen(true); + setSelectedNode?.(navNode); + }, + [setSelectedNode] + ); const close = useCallback(() => { setActiveNode(null); setIsOpen(false); - }, []); + setSelectedNode?.(null); + }, [setSelectedNode]); + + useEffect(() => { + if (selectedNodeProp === undefined) return; + + setActiveNode(selectedNodeProp); + + if (selectedNodeProp) { + setIsOpen(true); + } else { + setIsOpen(false); + } + }, [selectedNodeProp]); const getContent = useCallback(() => { if (!selectedNode) { diff --git a/packages/shared-ux/chrome/navigation/src/ui/components/panel/default_content.tsx b/packages/shared-ux/chrome/navigation/src/ui/components/panel/default_content.tsx index 7f18dd8358a8d..9892cc3a6f44a 100644 --- a/packages/shared-ux/chrome/navigation/src/ui/components/panel/default_content.tsx +++ b/packages/shared-ux/chrome/navigation/src/ui/components/panel/default_content.tsx @@ -8,12 +8,11 @@ */ import { EuiFlexGroup, EuiFlexItem, EuiTitle } from '@elastic/eui'; -import { ChromeProjectNavigationNode } from '@kbn/core-chrome-browser'; +import type { ChromeProjectNavigationNode, PanelSelectedNode } from '@kbn/core-chrome-browser'; import React, { Fragment, type FC } from 'react'; import { PanelGroup } from './panel_group'; import { PanelNavItem } from './panel_nav_item'; -import type { PanelNavNode } from './types'; function isGroupNode({ children }: Pick) { return children !== undefined; @@ -33,7 +32,7 @@ function isItemNode({ children }: Pick) * @param node The current active node * @returns The children serialized */ -function serializeChildren(node: PanelNavNode): ChromeProjectNavigationNode[] | undefined { +function serializeChildren(node: PanelSelectedNode): ChromeProjectNavigationNode[] | undefined { if (!node.children) return undefined; const allChildrenAreItems = node.children.every((_node) => { @@ -69,7 +68,7 @@ function serializeChildren(node: PanelNavNode): ChromeProjectNavigationNode[] | interface Props { /** The selected node is the node in the main panel that opens the Panel */ - selectedNode: PanelNavNode; + selectedNode: PanelSelectedNode; } export const DefaultContent: FC = ({ selectedNode }) => { diff --git a/packages/shared-ux/chrome/navigation/src/ui/components/panel/navigation_panel.tsx b/packages/shared-ux/chrome/navigation/src/ui/components/panel/navigation_panel.tsx index 8e63e1179c955..5077cefc44625 100644 --- a/packages/shared-ux/chrome/navigation/src/ui/components/panel/navigation_panel.tsx +++ b/packages/shared-ux/chrome/navigation/src/ui/components/panel/navigation_panel.tsx @@ -18,11 +18,11 @@ import { import React, { useCallback, type FC } from 'react'; import classNames from 'classnames'; +import type { PanelSelectedNode } from '@kbn/core-chrome-browser'; import { usePanel } from './context'; import { getNavPanelStyles, getPanelWrapperStyles } from './styles'; -import { PanelNavNode } from './types'; -const getTestSubj = (selectedNode: PanelNavNode | null): string | undefined => { +const getTestSubj = (selectedNode: PanelSelectedNode | null): string | undefined => { if (!selectedNode) return; const deeplinkId = selectedNode.deepLink?.id; diff --git a/packages/shared-ux/chrome/navigation/src/ui/components/panel/types.ts b/packages/shared-ux/chrome/navigation/src/ui/components/panel/types.ts index 33af8c9e91ceb..8263e1f81c553 100644 --- a/packages/shared-ux/chrome/navigation/src/ui/components/panel/types.ts +++ b/packages/shared-ux/chrome/navigation/src/ui/components/panel/types.ts @@ -8,13 +8,13 @@ */ import type { ReactNode, ComponentType } from 'react'; -import type { ChromeProjectNavigationNode } from '@kbn/core-chrome-browser'; +import type { ChromeProjectNavigationNode, PanelSelectedNode } from '@kbn/core-chrome-browser'; export interface PanelComponentProps { /** Handler to close the panel */ closePanel: () => void; /** The node in the main panel that opens the secondary panel */ - selectedNode: PanelNavNode; + selectedNode: PanelSelectedNode; /** Jagged array of active nodes that match the current URL location */ activeNodes: ChromeProjectNavigationNode[][]; } @@ -25,10 +25,3 @@ export interface PanelContent { } export type ContentProvider = (nodeId: string) => PanelContent | void; - -export type PanelNavNode = Pick< - ChromeProjectNavigationNode, - 'id' | 'children' | 'path' | 'sideNavStatus' | 'deepLink' -> & { - title: string | ReactNode; -}; diff --git a/packages/shared-ux/chrome/navigation/src/ui/navigation.tsx b/packages/shared-ux/chrome/navigation/src/ui/navigation.tsx index b762ede8959da..3dacd01f8465f 100644 --- a/packages/shared-ux/chrome/navigation/src/ui/navigation.tsx +++ b/packages/shared-ux/chrome/navigation/src/ui/navigation.tsx @@ -47,7 +47,7 @@ export interface Props { } const NavigationComp: FC = ({ navigationTree$, dataTestSubj, panelContentProvider }) => { - const { activeNodes$ } = useNavigationService(); + const { activeNodes$, selectedPanelNode, setSelectedPanelNode } = useNavigationService(); const activeNodes = useObservable(activeNodes$, []); const navigationTree = useObservable(navigationTree$, { body: [] }); @@ -79,7 +79,12 @@ const NavigationComp: FC = ({ navigationTree$, dataTestSubj, panelContent ); return ( - + {/* Main navigation content */} diff --git a/src/core/server/integration_tests/saved_objects/migrations/archives/7.13.0_5k_so_node_01.zip b/src/core/server/integration_tests/saved_objects/migrations/archives/7.13.0_5k_so_node_01.zip index 43965fd584256..79cd2f2d63cd0 100644 Binary files a/src/core/server/integration_tests/saved_objects/migrations/archives/7.13.0_5k_so_node_01.zip and b/src/core/server/integration_tests/saved_objects/migrations/archives/7.13.0_5k_so_node_01.zip differ diff --git a/src/core/server/integration_tests/saved_objects/migrations/archives/7.13.0_5k_so_node_02.zip b/src/core/server/integration_tests/saved_objects/migrations/archives/7.13.0_5k_so_node_02.zip index d4d404e7c1952..4f9d52d79812d 100644 Binary files a/src/core/server/integration_tests/saved_objects/migrations/archives/7.13.0_5k_so_node_02.zip and b/src/core/server/integration_tests/saved_objects/migrations/archives/7.13.0_5k_so_node_02.zip differ diff --git a/src/core/server/integration_tests/saved_objects/migrations/archives/7.13.0_concurrent_5k_foo.zip b/src/core/server/integration_tests/saved_objects/migrations/archives/7.13.0_concurrent_5k_foo.zip index 46cc61cbe7b5f..d079624d95988 100644 Binary files a/src/core/server/integration_tests/saved_objects/migrations/archives/7.13.0_concurrent_5k_foo.zip and b/src/core/server/integration_tests/saved_objects/migrations/archives/7.13.0_concurrent_5k_foo.zip differ diff --git a/src/core/server/integration_tests/saved_objects/migrations/archives/7.13.0_with_unknown_so.zip b/src/core/server/integration_tests/saved_objects/migrations/archives/7.13.0_with_unknown_so.zip deleted file mode 100644 index 3312515024b91..0000000000000 Binary files a/src/core/server/integration_tests/saved_objects/migrations/archives/7.13.0_with_unknown_so.zip and /dev/null differ diff --git a/src/core/server/integration_tests/saved_objects/migrations/archives/7_13_corrupt_and_transform_failures_docs.zip b/src/core/server/integration_tests/saved_objects/migrations/archives/7_13_corrupt_and_transform_failures_docs.zip deleted file mode 100644 index b808bdc4f59ce..0000000000000 Binary files a/src/core/server/integration_tests/saved_objects/migrations/archives/7_13_corrupt_and_transform_failures_docs.zip and /dev/null differ diff --git a/src/core/server/integration_tests/saved_objects/migrations/archives/8.0.0_document_migration_failure.zip b/src/core/server/integration_tests/saved_objects/migrations/archives/8.0.0_document_migration_failure.zip deleted file mode 100644 index 9dc4de75c5d98..0000000000000 Binary files a/src/core/server/integration_tests/saved_objects/migrations/archives/8.0.0_document_migration_failure.zip and /dev/null differ diff --git a/src/core/server/integration_tests/saved_objects/migrations/archives/8.0.0_migrated_with_corrupt_outdated_docs.zip b/src/core/server/integration_tests/saved_objects/migrations/archives/8.0.0_migrated_with_corrupt_outdated_docs.zip deleted file mode 100644 index 726df7782cda3..0000000000000 Binary files a/src/core/server/integration_tests/saved_objects/migrations/archives/8.0.0_migrated_with_corrupt_outdated_docs.zip and /dev/null differ diff --git a/src/core/server/integration_tests/saved_objects/migrations/archives/8.0.0_migrated_with_outdated_docs.zip b/src/core/server/integration_tests/saved_objects/migrations/archives/8.0.0_migrated_with_outdated_docs.zip deleted file mode 100644 index 1fa9f061e15ff..0000000000000 Binary files a/src/core/server/integration_tests/saved_objects/migrations/archives/8.0.0_migrated_with_outdated_docs.zip and /dev/null differ diff --git a/src/core/server/integration_tests/saved_objects/migrations/archives/8.0.0_v1_migrations_sample_data_saved_objects.zip b/src/core/server/integration_tests/saved_objects/migrations/archives/8.0.0_v1_migrations_sample_data_saved_objects.zip index ff02fcf204845..b409f3d8a7227 100644 Binary files a/src/core/server/integration_tests/saved_objects/migrations/archives/8.0.0_v1_migrations_sample_data_saved_objects.zip and b/src/core/server/integration_tests/saved_objects/migrations/archives/8.0.0_v1_migrations_sample_data_saved_objects.zip differ diff --git a/src/core/server/integration_tests/saved_objects/migrations/group1/7_13_0_transform_failures.test.ts b/src/core/server/integration_tests/saved_objects/migrations/group1/7_13_0_transform_failures.test.ts deleted file mode 100644 index c186b4c0613ef..0000000000000 --- a/src/core/server/integration_tests/saved_objects/migrations/group1/7_13_0_transform_failures.test.ts +++ /dev/null @@ -1,279 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import Path from 'path'; -import Fs from 'fs'; -import Util from 'util'; -import { Env } from '@kbn/config'; -import { REPO_ROOT } from '@kbn/repo-info'; -import { getEnvOptions } from '@kbn/config-mocks'; -import type { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; -import { Root } from '@kbn/core-root-server-internal'; -import { SearchTotalHits } from '@elastic/elasticsearch/lib/api/types'; -import { getMigrationDocLink } from '../test_utils'; -import { - createRootWithCorePlugins, - TestElasticsearchUtils, - createTestServers as createkbnServerTestServers, -} from '@kbn/core-test-helpers-kbn-server'; -import { - MAIN_SAVED_OBJECT_INDEX, - TASK_MANAGER_SAVED_OBJECT_INDEX, - ANALYTICS_SAVED_OBJECT_INDEX, -} from '@kbn/core-saved-objects-server'; - -const migrationDocLink = getMigrationDocLink().resolveMigrationFailures; -const logFilePath = Path.join(__dirname, '7_13_corrupt_transform_failures.log'); - -const asyncUnlink = Util.promisify(Fs.unlink); - -async function removeLogFile() { - // ignore errors if it doesn't exist - await asyncUnlink(logFilePath).catch(() => void 0); -} - -// Failing 9.0 version update: https://github.com/elastic/kibana/issues/192624 -describe.skip('migration v2', () => { - let esServer: TestElasticsearchUtils; - let root: Root; - - beforeAll(async () => { - await removeLogFile(); - }); - - afterEach(async () => { - if (root) { - await root.shutdown(); - } - if (esServer) { - await esServer.stop(); - } - }); - - describe('when `migrations.discardCorruptObjects` does not match current kibana version', () => { - it('fails to migrate when corrupt objects and transform errors are encountered', async () => { - const { startES } = createTestServers(); - root = createRoot(); - esServer = await startES(); - await rootPrebootAndSetup(root); - - try { - await root.start(); - } catch (err) { - const errorMessage = err.message; - const errorLines = errorMessage.split('\n'); - const errorMessageWithoutStack = errorLines - .filter((line: string) => !line.includes(' at ')) - .join('\n'); - - expect(errorMessageWithoutStack).toMatchInlineSnapshot(` - "Unable to complete saved object migrations for the [.kibana] index: Migrations failed. Reason: 7 corrupt saved object documents were found: P2SQfHkBs3dBRGh--No5, QGSZfHkBs3dBRGh-ANoD, QWSZfHkBs3dBRGh-hNob, QmSZfHkBs3dBRGh-w9qH, one, two, Q2SZfHkBs3dBRGh-9dp2 - 7 transformation errors were encountered: - - space:default: Error: Migration function for version 7.14.0 threw an error - Caused by: - TypeError: Cannot set properties of undefined (setting 'bar') - - space:first: Error: Migration function for version 7.14.0 threw an error - Caused by: - TypeError: Cannot set properties of undefined (setting 'bar') - - space:forth: Error: Migration function for version 7.14.0 threw an error - Caused by: - TypeError: Cannot set properties of undefined (setting 'bar') - - space:second: Error: Migration function for version 7.14.0 threw an error - Caused by: - TypeError: Cannot set properties of undefined (setting 'bar') - - space:fifth: Error: Migration function for version 7.14.0 threw an error - Caused by: - TypeError: Cannot set properties of undefined (setting 'bar') - - space:third: Error: Migration function for version 7.14.0 threw an error - Caused by: - TypeError: Cannot set properties of undefined (setting 'bar') - - space:sixth: Error: Migration function for version 7.14.0 threw an error - Caused by: - TypeError: Cannot set properties of undefined (setting 'bar') - - To allow migrations to proceed, please delete or fix these documents. - Note that you can configure Kibana to automatically discard corrupt documents and transform errors for this migration. - Please refer to ${migrationDocLink} for more information." - `); - return; - } - // Fail test if above expression doesn't throw anything. - expect('to throw').toBe('but did not'); - }); - }); - - describe('when `migrations.discardCorruptObjects` matches current kibana version', () => { - it('proceeds with the migration, ignoring corrupt objects and transform errors', async () => { - const { startES } = createTestServers(); - const currentVersion = Env.createDefault(REPO_ROOT, getEnvOptions()).packageInfo.version; - root = createRoot(currentVersion); - esServer = await startES(); - await rootPrebootAndSetup(root); - - await expect(root.start()).resolves.not.toThrowError(); - // TODO check that the destination indices contain data, but NOT the conflicting objects - - const esClient: ElasticsearchClient = esServer.es.getClient(); - const docs = await esClient.search({ - index: [ - MAIN_SAVED_OBJECT_INDEX, - TASK_MANAGER_SAVED_OBJECT_INDEX, - ANALYTICS_SAVED_OBJECT_INDEX, - ], - _source: false, - fields: ['_id'], - size: 50, - }); - - // 34 saved objects (11 tasks + 23 misc) + 14 corrupt (discarded) = 48 total in the old indices - expect((docs.hits.total as SearchTotalHits).value).toEqual(34); - expect(docs.hits.hits.map(({ _id }) => _id).sort()).toEqual([ - 'config:7.13.0', - 'index-pattern:logs-*', - 'index-pattern:metrics-*', - 'task:Actions-actions_telemetry', - 'task:Actions-cleanup_failed_action_executions', - 'task:Alerting-alerting_health_check', - 'task:Alerting-alerting_telemetry', - 'task:Alerts-alerts_invalidate_api_keys', - 'task:Lens-lens_telemetry', - 'task:apm-telemetry-task', - 'task:data_enhanced_search_sessions_monitor', - 'task:endpoint:user-artifact-packager:1.0.0', - 'task:security:endpoint-diagnostics:1.0.0', - 'task:session_cleanup', - 'ui-metric:console:DELETE_delete', - 'ui-metric:console:GET_get', - 'ui-metric:console:GET_search', - 'ui-metric:console:POST_delete_by_query', - 'ui-metric:console:POST_index', - 'ui-metric:console:PUT_indices.put_mapping', - 'usage-counters:uiCounter:21052021:click:global_search_bar:user_navigated_to_application', - 'usage-counters:uiCounter:21052021:click:global_search_bar:user_navigated_to_application_unknown', - 'usage-counters:uiCounter:21052021:count:console:DELETE_delete', - 'usage-counters:uiCounter:21052021:count:console:GET_cat.aliases', - 'usage-counters:uiCounter:21052021:count:console:GET_cat.indices', - 'usage-counters:uiCounter:21052021:count:console:GET_get', - 'usage-counters:uiCounter:21052021:count:console:GET_search', - 'usage-counters:uiCounter:21052021:count:console:POST_delete_by_query', - 'usage-counters:uiCounter:21052021:count:console:POST_index', - 'usage-counters:uiCounter:21052021:count:console:PUT_indices.put_mapping', - 'usage-counters:uiCounter:21052021:count:global_search_bar:search_focus', - 'usage-counters:uiCounter:21052021:count:global_search_bar:search_request', - 'usage-counters:uiCounter:21052021:count:global_search_bar:shortcut_used', - 'usage-counters:uiCounter:21052021:loaded:console:opened_app', - ]); - }); - }); -}); - -function createTestServers() { - return createkbnServerTestServers({ - adjustTimeout: (t: number) => jest.setTimeout(t), - settings: { - es: { - license: 'basic', - // example of original 'foo' SO with corrupt id: - // _id: one - // { - // foo: { - // name: 'one', - // }, - // type: 'foo', - // references: [], - // migrationVersion: { - // foo: '7.13.0', - // }, - // "coreMigrationVersion": "7.13.0", - // "updated_at": "2021-05-16T18:16:45.450Z" - // }, - - // SO that will fail transformation: - // { - // type: 'space', - // space: {}, - // }, - // - // - dataArchive: Path.join( - __dirname, - '..', - 'archives', - '7_13_corrupt_and_transform_failures_docs.zip' - ), - }, - }, - }); -} - -function createRoot(discardCorruptObjects?: string) { - return createRootWithCorePlugins( - { - migrations: { - skip: false, - batchSize: 5, - discardCorruptObjects, - }, - logging: { - appenders: { - file: { - type: 'file', - fileName: logFilePath, - layout: { - type: 'json', - }, - }, - }, - loggers: [ - { - name: 'root', - level: 'info', - appenders: ['file'], - }, - ], - }, - }, - { - oss: true, - } - ); -} - -async function rootPrebootAndSetup(root: Root) { - await root.preboot(); - const coreSetup = await root.setup(); - - coreSetup.savedObjects.registerType({ - name: 'foo', - hidden: false, - mappings: { - properties: {}, - }, - namespaceType: 'agnostic', - migrations: { - '7.14.0': (doc) => doc, - }, - }); - - // registering the `space` type with a throwing migration fn to avoid the migration failing for unknown types - coreSetup.savedObjects.registerType({ - name: 'space', - hidden: false, - mappings: { - properties: {}, - }, - namespaceType: 'single', - migrations: { - '7.14.0': (doc) => { - doc.attributes.foo.bar = 12; - return doc; - }, - }, - }); -} diff --git a/src/core/server/integration_tests/saved_objects/migrations/group1/7_13_0_unknown_types.test.ts b/src/core/server/integration_tests/saved_objects/migrations/group1/7_13_0_unknown_types.test.ts deleted file mode 100644 index 25698f9b63f68..0000000000000 --- a/src/core/server/integration_tests/saved_objects/migrations/group1/7_13_0_unknown_types.test.ts +++ /dev/null @@ -1,166 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import Path from 'path'; -import fs from 'fs/promises'; -import type { IndicesIndexSettings } from '@elastic/elasticsearch/lib/api/types'; -import { Env } from '@kbn/config'; -import { REPO_ROOT } from '@kbn/repo-info'; -import { getEnvOptions } from '@kbn/config-mocks'; -import type { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; -import { Root } from '@kbn/core-root-server-internal'; -import { - createRootWithCorePlugins, - createTestServers, - type TestElasticsearchUtils, -} from '@kbn/core-test-helpers-kbn-server'; - -const logFilePath = Path.join(__dirname, '7_13_unknown_types.log'); - -async function removeLogFile() { - // ignore errors if it doesn't exist - await fs.unlink(logFilePath).catch(() => void 0); -} - -// Failing 9.0 version update: https://github.com/elastic/kibana/issues/192624 -describe.skip('migration v2', () => { - let esServer: TestElasticsearchUtils; - let root: Root; - let startES: () => Promise; - - beforeAll(async () => { - await removeLogFile(); - }); - - beforeEach(() => { - ({ startES } = createTestServers({ - adjustTimeout: (t: number) => jest.setTimeout(t), - settings: { - es: { - license: 'basic', - // dataset contains 2 type of unknown docs - // `foo` documents - // `space` documents (to mimic a migration with disabled plugins) - dataArchive: Path.join(__dirname, '..', 'archives', '7.13.0_with_unknown_so.zip'), - }, - }, - })); - }); - - afterEach(async () => { - if (root) { - await root.shutdown(); - } - if (esServer) { - await esServer.stop(); - } - }); - - describe('when `discardUnknownObjects` does not match current kibana version', () => { - it('fails the migration if unknown types are found in the source index', async () => { - // Start kibana with foo and space types disabled - root = createRoot('7.13.0'); - esServer = await startES(); - await root.preboot(); - await root.setup(); - - try { - await root.start(); - expect('should have thrown').toEqual('but it did not'); - } catch (err) { - const errorMessage = err.message; - - expect( - errorMessage.startsWith( - 'Unable to complete saved object migrations for the [.kibana] index: Migration failed because some documents ' + - 'were found which use unknown saved object types:' - ) - ).toBeTruthy(); - - const unknownDocs = [ - { type: 'space', id: 'space:default' }, - { type: 'space', id: 'space:first' }, - { type: 'space', id: 'space:second' }, - { type: 'space', id: 'space:third' }, - { type: 'space', id: 'space:forth' }, - { type: 'space', id: 'space:fifth' }, - { type: 'space', id: 'space:sixth' }, - { type: 'foo', id: 'P2SQfHkBs3dBRGh--No5' }, - { type: 'foo', id: 'QGSZfHkBs3dBRGh-ANoD' }, - { type: 'foo', id: 'QWSZfHkBs3dBRGh-hNob' }, - ]; - - unknownDocs.forEach(({ id, type }) => { - expect(errorMessage).toEqual(expect.stringContaining(`- "${id}" (type: "${type}")`)); - }); - - const client = esServer.es.getClient(); - const { body: response } = await client.indices.getSettings( - { index: '.kibana_7.13.0_001' }, - { meta: true } - ); - const settings = response['.kibana_7.13.0_001'].settings as IndicesIndexSettings; - expect(settings.index).not.toBeUndefined(); - expect(settings.index!.blocks?.write).not.toEqual('true'); - } - }); - }); - - describe('when `discardUnknownObjects` matches current kibana version', () => { - const currentVersion = Env.createDefault(REPO_ROOT, getEnvOptions()).packageInfo.version; - - it('discards the documents with unknown types and finishes the migration successfully', async () => { - // Start kibana with foo and space types disabled - root = createRoot(currentVersion); - esServer = await startES(); - await root.preboot(); - await root.setup(); - - // the migration process should finish successfully - await expect(root.start()).resolves.not.toThrowError(); - - const esClient: ElasticsearchClient = esServer.es.getClient(); - const body = await esClient.count({ q: 'type:foo|space' }); - expect(body.count).toEqual(0); - }); - }); -}); - -function createRoot(discardUnknownObjects?: string) { - return createRootWithCorePlugins( - { - migrations: { - skip: false, - batchSize: 5, - discardUnknownObjects, - }, - logging: { - appenders: { - file: { - type: 'file', - fileName: logFilePath, - layout: { - type: 'json', - }, - }, - }, - loggers: [ - { - name: 'root', - level: 'info', - appenders: ['file'], - }, - ], - }, - }, - { - oss: true, - } - ); -} diff --git a/src/core/server/integration_tests/saved_objects/migrations/group1/__snapshots__/v2_migration.test.ts.snap b/src/core/server/integration_tests/saved_objects/migrations/group1/__snapshots__/v2_migration.test.ts.snap new file mode 100644 index 0000000000000..1afb9e03cb6a2 --- /dev/null +++ b/src/core/server/integration_tests/saved_objects/migrations/group1/__snapshots__/v2_migration.test.ts.snap @@ -0,0 +1,504 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`v2 migration to a newer stack version with transform errors collects corrupt saved object documents across batches 1`] = ` +"Error: Cannot convert 'complex' objects with values that are multiple of 100 41e28595-9710-4583-aeb3-41c5899aa2ce +Error: Cannot convert 'complex' objects with values that are multiple of 100 a1f15bce-d9a2-4a4d-a280-c05f2eda99f1 +Error: Cannot convert 'complex' objects with values that are multiple of 100 06d3374e-193b-43d1-9c1a-0c8829cb0c51 +Error: Cannot convert 'complex' objects with values that are multiple of 100 b26f9630-7de4-45ec-a27c-c041b97fbe57 +Error: Cannot convert 'complex' objects with values that are multiple of 100 21c18cf5-825a-4847-a2e2-5c670033a560 +Error: Cannot convert 'complex' objects with values that are multiple of 100 cd75cc1c-e915-4573-b353-f3f2ee01cf47 +Error: Cannot convert 'complex' objects with values that are multiple of 100 8bee00b6-36dd-46e7-b055-f366cc37df48 +Error: Cannot convert 'complex' objects with values that are multiple of 100 2e675eed-4f4e-4151-99fd-83a32b5f8e79 +Error: Cannot convert 'complex' objects with values that are multiple of 100 c3de3e3c-b38c-4264-a6f6-e59eff793980 +Error: Cannot convert 'complex' objects with values that are multiple of 100 da9b73a8-b9f9-4073-a9bb-c853243c2dd8 +Error: Cannot convert 'complex' objects with values that are multiple of 100 6d3de4cc-2c2c-4b28-b8dc-4d2f607ae4f2 +Error: Cannot convert 'complex' objects with values that are multiple of 100 31fe1208-4702-495f-95c9-d3f948576791 +Error: Cannot convert 'complex' objects with values that are multiple of 100 e1e75224-dfb4-465e-9688-093ef4a663e6 +Error: Cannot convert 'complex' objects with values that are multiple of 100 d30d55f5-5513-436b-b0c1-2c2fc9dffcc3 +Error: Cannot convert 'complex' objects with values that are multiple of 100 8a5cd239-c02c-4370-abb5-f084d7f2d418 +Error: Cannot convert 'complex' objects with values that are multiple of 100 5eeded25-9d6c-45bd-9d7d-33657c67e73d +Error: Cannot convert 'complex' objects with values that are multiple of 100 90849a74-a3cf-4587-8ba8-d0c9480015c6 +Error: Cannot convert 'complex' objects with values that are multiple of 100 94f659fb-73d9-49a7-8a82-50e67c259ddb +Error: Cannot convert 'complex' objects with values that are multiple of 100 6548dc97-0f55-462b-a4d2-dc0bceb7fbdd +Error: Cannot convert 'complex' objects with values that are multiple of 100 e6b6316d-c839-4b75-9abb-18da0d0d3f31 +Error: Cannot convert 'complex' objects with values that are multiple of 100 1dadcae8-a0f7-49eb-bbf0-81fcc81061d7 +Error: Cannot convert 'complex' objects with values that are multiple of 100 1d1391ac-7564-4a97-8b65-f3c50bf56615 +Error: Cannot convert 'complex' objects with values that are multiple of 100 cbedd055-0619-46f4-ae2c-68fff60eef45 +Error: Cannot convert 'complex' objects with values that are multiple of 100 9907c207-e47f-4a1e-91a8-173915eefd8b +Error: Cannot convert 'complex' objects with values that are multiple of 100 cd7fdcdc-3d77-4b43-9bb9-41b715ba41a4 +Error: Cannot convert 'complex' objects with values that are multiple of 100 c144775d-b0d6-42c1-ad0d-7a4350687c85 +Error: Cannot convert 'complex' objects with values that are multiple of 100 306a4982-da6b-463f-b157-9dc33579cd28 +Error: Cannot convert 'complex' objects with values that are multiple of 100 df6c1595-68ef-41f6-b649-30952d586195 +Error: Cannot convert 'complex' objects with values that are multiple of 100 5d3e825d-3db7-4a04-be91-b1b92e00386a +Error: Cannot convert 'complex' objects with values that are multiple of 100 d257437f-529b-482d-a981-2f26bd79388f +Error: Cannot convert 'complex' objects with values that are multiple of 100 dac6c6c6-d329-4dd5-acd1-b2585917d736 +Error: Cannot convert 'complex' objects with values that are multiple of 100 e415176e-b3cd-41d1-9ba5-06c702a13cb3 +Error: Cannot convert 'complex' objects with values that are multiple of 100 64163b20-da0b-482b-90d2-347e73e8c068 +Error: Cannot convert 'complex' objects with values that are multiple of 100 f195b8b9-c1a4-4724-b861-2a533a58e6b4 +Error: Cannot convert 'complex' objects with values that are multiple of 100 d53b617d-94b7-4701-99a5-a194c6b34e0c +Error: Cannot convert 'complex' objects with values that are multiple of 100 e350a554-2086-4d36-a7ea-3898befc1792 +Error: Cannot convert 'complex' objects with values that are multiple of 100 2de91b3b-f69f-4e64-8d79-b432aedd46ec +Error: Cannot convert 'complex' objects with values that are multiple of 100 9cfc58ad-94fa-4b6c-b776-3b93942fdabc +Error: Cannot convert 'complex' objects with values that are multiple of 100 efcbc446-c869-4837-861c-20c787a50872 +Error: Cannot convert 'complex' objects with values that are multiple of 100 70e0b310-e8b6-4fcf-8a1d-fb9e28b0d1ed +Error: Cannot convert 'complex' objects with values that are multiple of 100 df92c6c1-7405-4fe2-849b-e1aec71f44d0 +Error: Cannot convert 'complex' objects with values that are multiple of 100 9b3839aa-5cad-4b30-ae0e-18340b566535 +Error: Cannot convert 'complex' objects with values that are multiple of 100 7cbad964-9f31-4a5c-87d7-734bdf08b42a +Error: Cannot convert 'complex' objects with values that are multiple of 100 5ffc4d92-df45-4151-b6e9-71e18dc67070 +Error: Cannot convert 'complex' objects with values that are multiple of 100 fb3d87d6-ba7b-41d2-ac79-e1e6f402a19c +Error: Cannot convert 'complex' objects with values that are multiple of 100 2e14fca1-ad13-410c-a6dd-969a3793aa78 +Error: Cannot convert 'complex' objects with values that are multiple of 100 691efa7f-9177-4971-996a-c6f6c1218046 +Error: Cannot convert 'complex' objects with values that are multiple of 100 34c47c79-369e-456c-b1af-286e247929cd +Error: Cannot convert 'complex' objects with values that are multiple of 100 add9a30d-8050-4370-bd44-237b5cce5d93 +Error: Cannot convert 'complex' objects with values that are multiple of 100 f0423b5a-56a3-40a3-97ec-f30ad0187e63 +Error: Cannot convert 'complex' objects with values that are multiple of 100 8b25b058-5931-4973-aa86-8dbbd91e4bd1 +Error: Cannot convert 'complex' objects with values that are multiple of 100 097d4e9f-afa6-4db0-a35b-183051116ed5 +Error: Cannot convert 'complex' objects with values that are multiple of 100 d7b3edcb-ae7d-4df8-ae38-e627aaeb46be +Error: Cannot convert 'complex' objects with values that are multiple of 100 344a9dee-5de8-4e50-af66-374c6b7675a7 +Error: Cannot convert 'complex' objects with values that are multiple of 100 b2c6c79e-6d9f-42a0-b4ab-91fb321b021f +Error: Cannot convert 'complex' objects with values that are multiple of 100 09452338-c116-4d86-b59a-be071b0cd689 +Error: Cannot convert 'complex' objects with values that are multiple of 100 f0ee199a-e921-484f-b551-f4aec202ea27 +Error: Cannot convert 'complex' objects with values that are multiple of 100 3d12c404-4dfc-40d9-9795-44f6292ce5ae +Error: Cannot convert 'complex' objects with values that are multiple of 100 31ca239d-a3cf-43c0-8ef3-a1d37c7e311f +Error: Cannot convert 'complex' objects with values that are multiple of 100 6f45a809-e866-4b7d-812e-21e9180133fe +Error: Cannot convert 'complex' objects with values that are multiple of 100 9ff098a5-0738-4f8c-b595-0dd615e5ce2b +Error: Cannot convert 'complex' objects with values that are multiple of 100 611156d0-d452-4582-8ef1-4b9f68ce40de +Error: Cannot convert 'complex' objects with values that are multiple of 100 6e55ba50-6717-4250-8c5e-0d34e608cf55 +Error: Cannot convert 'complex' objects with values that are multiple of 100 f204be38-103a-40cc-b599-9f9a6dc2b676 +Error: Cannot convert 'complex' objects with values that are multiple of 100 8e54c8e7-80f1-4a27-b96b-f36b5279b154 +Error: Cannot convert 'complex' objects with values that are multiple of 100 d33b9b61-4bb2-4935-a71f-7194918f86ab +Error: Cannot convert 'complex' objects with values that are multiple of 100 46042cbf-2da6-4ff3-8dec-b92f1e53910f +Error: Cannot convert 'complex' objects with values that are multiple of 100 004c3a5d-caa0-474e-a631-a9bee6fc432a +Error: Cannot convert 'complex' objects with values that are multiple of 100 a744e441-7653-4486-b39d-bef59af32c46 +Error: Cannot convert 'complex' objects with values that are multiple of 100 d9e2ebda-2370-4660-aa84-311a9a56ccc3 +Error: Cannot convert 'complex' objects with values that are multiple of 100 4e57d594-45ba-4b8e-a2fa-814a0fc2db0b +Error: Cannot convert 'complex' objects with values that are multiple of 100 228fe220-b046-48c3-b0dd-bfe3cc15b3af +Error: Cannot convert 'complex' objects with values that are multiple of 100 66afe76d-ab04-4381-aaf6-5a07b7043300 +Error: Cannot convert 'complex' objects with values that are multiple of 100 f1f48caa-5e33-49b3-8c8e-f9e47cc46553 +Error: Cannot convert 'complex' objects with values that are multiple of 100 6d1de2f4-6995-43e3-86e9-34da77dfb160 +Error: Cannot convert 'complex' objects with values that are multiple of 100 56911ce1-c027-4ef3-81fa-c8e99ee3c6bd +Error: Cannot convert 'complex' objects with values that are multiple of 100 a230e01b-356f-48c8-9aa9-3360c15bce9b +Error: Cannot convert 'complex' objects with values that are multiple of 100 2f0e1193-0f35-48f7-8b28-4bf142984a4e +Error: Cannot convert 'complex' objects with values that are multiple of 100 1168bfdc-0b3d-43df-8fd4-b2f111509710 +Error: Cannot convert 'complex' objects with values that are multiple of 100 752d393a-61e6-4d3d-b3cb-b25c976f5dc9 +Error: Cannot convert 'complex' objects with values that are multiple of 100 2afef4d0-5fb2-4dbc-8edc-cec127ba7566 +Error: Cannot convert 'complex' objects with values that are multiple of 100 bea60590-a57c-495b-be43-d29720cd1995 +Error: Cannot convert 'complex' objects with values that are multiple of 100 511c29d5-c8c6-4cfe-b9c5-f7e3272cfddd +Error: Cannot convert 'complex' objects with values that are multiple of 100 c4e2e677-0165-49d1-9ee9-bb102a4446e8 +Error: Cannot convert 'complex' objects with values that are multiple of 100 eb0e6312-35df-4f4b-8ede-9f4ff94f323d +Error: Cannot convert 'complex' objects with values that are multiple of 100 a86f12f2-a3cd-48e9-b5d8-37a67994149b +Error: Cannot convert 'complex' objects with values that are multiple of 100 26c96126-4450-4096-afe7-126b0a6da7ee +Error: Cannot convert 'complex' objects with values that are multiple of 100 d2f4a4e9-34bd-4ac8-bccf-96ccd7cfec38 +Error: Cannot convert 'complex' objects with values that are multiple of 100 864a2090-6d3a-459d-9c53-fbf30433e5d2 +Error: Cannot convert 'complex' objects with values that are multiple of 100 e15dcebb-733f-44d1-97dd-90a176770d4b +Error: Cannot convert 'complex' objects with values that are multiple of 100 cf3dc9c8-a377-41fa-84db-71c7a1669655 +Error: Cannot convert 'complex' objects with values that are multiple of 100 9764f40e-ade5-4623-9b77-f2e6286458c3 +Error: Cannot convert 'complex' objects with values that are multiple of 100 57bec873-0fa6-40f0-bb6d-73479aa12f12 +Error: Cannot convert 'complex' objects with values that are multiple of 100 b49cf0b4-072a-4e01-8099-e95783073d5c +Error: Cannot convert 'complex' objects with values that are multiple of 100 39067bbd-ed2b-4788-be3b-4df0041cc009 +Error: Cannot convert 'complex' objects with values that are multiple of 100 0916d31e-5b51-4acd-9735-75bdad4aaec8 +Error: Cannot convert 'complex' objects with values that are multiple of 100 13660507-d9e4-4dd8-a464-2142a27b4793 +Error: Cannot convert 'complex' objects with values that are multiple of 100 d06b9296-5bcf-41df-a0f3-b556f289f06a +Error: Cannot convert 'complex' objects with values that are multiple of 100 e7cf5995-4bb0-4d3a-8165-66be5d9854fc +Error: Cannot convert 'complex' objects with values that are multiple of 100 b8d7dc9f-0bb2-43e7-872e-a0098080470b +Error: Cannot convert 'complex' objects with values that are multiple of 100 2adf568c-1055-4013-bf2c-faa7e433700f +Error: Cannot convert 'complex' objects with values that are multiple of 100 764d554e-413e-4cd3-aeb5-366bf11ca769 +Error: Cannot convert 'complex' objects with values that are multiple of 100 b4677231-92c0-4f0e-8dad-3e2a6d09fb44 +Error: Cannot convert 'complex' objects with values that are multiple of 100 a2f0f8ea-0ccd-4bf3-bde6-8572018f571a +Error: Cannot convert 'complex' objects with values that are multiple of 100 44e15623-8b56-4907-96dd-64fbc78c9262 +Error: Cannot convert 'complex' objects with values that are multiple of 100 1f14b977-c54b-4eef-a48f-573055169eb1 +Error: Cannot convert 'complex' objects with values that are multiple of 100 5fa91020-c284-4a04-8aa3-b198dde8cf14 +Error: Cannot convert 'complex' objects with values that are multiple of 100 f12ddc96-95ff-45a2-8872-847828ce41d0 +Error: Cannot convert 'complex' objects with values that are multiple of 100 983d0fd8-90c7-4ade-ac03-4532b9ccf4d3 +Error: Cannot convert 'complex' objects with values that are multiple of 100 8d44f665-d001-4e45-8019-809c32b4dfd7 +Error: Cannot convert 'complex' objects with values that are multiple of 100 00c94e57-87fb-4004-812a-2f30e6465b28 +Error: Cannot convert 'complex' objects with values that are multiple of 100 59bc74cf-26df-4d25-bc7e-a720eb946667 +Error: Cannot convert 'complex' objects with values that are multiple of 100 efe7b66d-feae-4938-aced-1f0818c91e2c +Error: Cannot convert 'complex' objects with values that are multiple of 100 10e68507-5e58-4a43-a16d-3830394341aa +Error: Cannot convert 'complex' objects with values that are multiple of 100 dbe48539-bb49-41b5-93b9-3d05158fa20b +Error: Cannot convert 'complex' objects with values that are multiple of 100 ca0e995a-4189-42ab-a082-f342705470b5 +Error: Cannot convert 'complex' objects with values that are multiple of 100 966811b4-c0ee-4244-98cc-66b2f31855cd +Error: Cannot convert 'complex' objects with values that are multiple of 100 fa6918f8-b132-4720-8828-ded1777cb7d3 +Error: Cannot convert 'complex' objects with values that are multiple of 100 7ca309ac-fc0a-4f5c-90fe-b57bee2e1cc2 +Error: Cannot convert 'complex' objects with values that are multiple of 100 d3d9abce-39b2-42a9-a0b4-bb1b0d7179cb +Error: Cannot convert 'complex' objects with values that are multiple of 100 2a540aa3-f0e1-4d20-a623-c05c595e7cd3 +Error: Cannot convert 'complex' objects with values that are multiple of 100 986eba02-ca59-4f0d-92ff-62fc277aa87c +Error: Cannot convert 'complex' objects with values that are multiple of 100 11142ec5-ff29-4577-8936-56f69c2f4dbd +Error: Cannot convert 'complex' objects with values that are multiple of 100 15cffaae-7c1b-40b5-92fc-9e5e0b42174a +Error: Cannot convert 'complex' objects with values that are multiple of 100 8d2c15ec-5caa-44df-be9a-cd8c3a0039fd +Error: Cannot convert 'complex' objects with values that are multiple of 100 82025688-7cc1-4a1b-ba26-fba279c0a559 +Error: Cannot convert 'complex' objects with values that are multiple of 100 548d80cd-6a87-48aa-8fcb-05af29dde400 +Error: Cannot convert 'complex' objects with values that are multiple of 100 3ebe2353-d7e7-44e5-b5c9-92cbc5ccb239 +Error: Cannot convert 'complex' objects with values that are multiple of 100 189e1010-10e9-4a25-9eef-14760fe80cfa +Error: Cannot convert 'complex' objects with values that are multiple of 100 9b88d281-e9d7-494a-85f6-fa8c0a3f236b +Error: Cannot convert 'complex' objects with values that are multiple of 100 19e7a4de-012f-4d69-be2f-bd09f9c26350 +Error: Cannot convert 'complex' objects with values that are multiple of 100 734c74d5-e70a-4776-87e1-51bdf5577f3c +Error: Cannot convert 'complex' objects with values that are multiple of 100 164ca6f1-2cbe-4440-8652-8515df19075f +Error: Cannot convert 'complex' objects with values that are multiple of 100 cc288178-bfc9-428c-902f-5fbefb4f1958 +Error: Cannot convert 'complex' objects with values that are multiple of 100 ae2b9311-4084-438d-824b-f83ad45b35eb +Error: Cannot convert 'complex' objects with values that are multiple of 100 8e8bfb88-f4c1-4929-8b45-4b9a8b912ae8 +Error: Cannot convert 'complex' objects with values that are multiple of 100 8254f416-603b-4e71-8a10-3df84be64e7b +Error: Cannot convert 'complex' objects with values that are multiple of 100 15facbbc-6934-4c7d-8278-68a177bc1d40 +Error: Cannot convert 'complex' objects with values that are multiple of 100 fadf9362-aea6-47e1-94da-39da2f59dc6d +Error: Cannot convert 'complex' objects with values that are multiple of 100 a193a83c-fd64-4197-aae8-91f5fc23844e +Error: Cannot convert 'complex' objects with values that are multiple of 100 6ebf1dbe-de76-4539-8af8-7b12e47f5ce2 +Error: Cannot convert 'complex' objects with values that are multiple of 100 27f5606b-234a-4dc0-9e40-75cd74fe32c6 +Error: Cannot convert 'complex' objects with values that are multiple of 100 1b06e644-bec5-4723-b040-490ea6110fb7 +Error: Cannot convert 'complex' objects with values that are multiple of 100 c81ec835-94a9-4b84-9c55-98bfd27fc3bc +Error: Cannot convert 'complex' objects with values that are multiple of 100 a5e1812e-dbdb-4400-80b6-e7b70e058887 +Error: Cannot convert 'complex' objects with values that are multiple of 100 99a76670-22fd-4365-bfa8-15ee48761260 +Error: Cannot convert 'complex' objects with values that are multiple of 100 7eeb5f71-ac2f-4fd8-99cd-8b987bcbf70c +Error: Cannot convert 'complex' objects with values that are multiple of 100 aefdb49d-511c-4fa2-aab5-56a89428f260 +Error: Cannot convert 'complex' objects with values that are multiple of 100 cb0e6562-5e52-4ab2-adec-97be213f3dae +Error: Cannot convert 'complex' objects with values that are multiple of 100 c292e57b-59d5-47b2-a52f-753fddb7f444 +Error: Cannot convert 'complex' objects with values that are multiple of 100 658fc86d-0406-433c-a29c-01de07173c9f +Error: Cannot convert 'complex' objects with values that are multiple of 100 4df986b0-01a7-4ca0-84b7-e872168da048 +Error: Cannot convert 'complex' objects with values that are multiple of 100 9097e835-d1ae-4c88-9e29-63ed0160b127 +Error: Cannot convert 'complex' objects with values that are multiple of 100 44a33056-b110-4114-9073-a50498e2564b +Error: Cannot convert 'complex' objects with values that are multiple of 100 b001f6bd-5435-4da0-9632-c269768c243c +Error: Cannot convert 'complex' objects with values that are multiple of 100 7bf727c5-58d7-4860-a496-e05c76d5fca8 +Error: Cannot convert 'complex' objects with values that are multiple of 100 b7fbaa4a-b30b-4fe0-b2de-2baddaff4dd5 +Error: Cannot convert 'complex' objects with values that are multiple of 100 1233fb9c-bc84-4997-b980-724163cd9c99 +Error: Cannot convert 'complex' objects with values that are multiple of 100 0cc4ea6c-9882-4c38-99a3-f0e61136cf97 +Error: Cannot convert 'complex' objects with values that are multiple of 100 87623762-5557-4d50-874b-e783224d2d68 +Error: Cannot convert 'complex' objects with values that are multiple of 100 5c92c79e-6c4a-4482-8f88-7e5663c194f2 +Error: Cannot convert 'complex' objects with values that are multiple of 100 a1191ea3-3e5f-46de-b764-6a81182dab19 +Error: Cannot convert 'complex' objects with values that are multiple of 100 b9159be4-5cb2-4f25-a089-85fcd9b03b33 +Error: Cannot convert 'complex' objects with values that are multiple of 100 eb14b9ab-004d-4e6e-b254-02e8af9a351e +Error: Cannot convert 'complex' objects with values that are multiple of 100 bff8783a-a2d6-4424-8119-a16cf72bb52a +Error: Cannot convert 'complex' objects with values that are multiple of 100 28509c5a-462b-483f-883a-be26b4f462f4 +Error: Cannot convert 'complex' objects with values that are multiple of 100 32cca2bf-0c3a-4d40-baea-44833532aeb9 +Error: Cannot convert 'complex' objects with values that are multiple of 100 ebb778ab-992a-4438-919d-4e8d627c2058 +Error: Cannot convert 'complex' objects with values that are multiple of 100 81bc0a2a-ea4d-4944-b2c9-12e4b3bbee61 +Error: Cannot convert 'complex' objects with values that are multiple of 100 7a257c3e-90af-483c-9ed3-737bb77560eb +Error: Cannot convert 'complex' objects with values that are multiple of 100 f2ae2465-949d-4cc9-bdda-89ff964adc0f +Error: Cannot convert 'complex' objects with values that are multiple of 100 f9394e2f-6652-4161-9bd7-fbcfc218b942 +Error: Cannot convert 'complex' objects with values that are multiple of 100 61b99930-5dc3-4e7f-9a61-6e22fcfa5507 +Error: Cannot convert 'complex' objects with values that are multiple of 100 a54b457e-0164-4773-84d9-2bc49bf335a2 +Error: Cannot convert 'complex' objects with values that are multiple of 100 b01dcfa3-b6fc-42e3-8682-a5a3349d22d5 +Error: Cannot convert 'complex' objects with values that are multiple of 100 ce4b8596-3ae9-4f2a-9a9e-ceb96fbf0171 +Error: Cannot convert 'complex' objects with values that are multiple of 100 fea29815-35c9-494f-9912-4718d4c65d93 +Error: Cannot convert 'complex' objects with values that are multiple of 100 c4e210ed-5d5e-4329-867b-565de7ec14c2 +Error: Cannot convert 'complex' objects with values that are multiple of 100 e49e182c-44c9-442b-92ef-fc83433f7e50 +Error: Cannot convert 'complex' objects with values that are multiple of 100 7faac5b2-c36b-4359-bb24-367b77815592 +Error: Cannot convert 'complex' objects with values that are multiple of 100 27fe1231-fed2-41a1-859d-503134f5cc83 +Error: Cannot convert 'complex' objects with values that are multiple of 100 762d235a-1b99-46ed-ad7f-b9e28eea5822 +Error: Cannot convert 'complex' objects with values that are multiple of 100 b5b9992a-bcaa-4b9a-8754-29a60068ac6a +Error: Cannot convert 'complex' objects with values that are multiple of 100 f48be8be-0f44-4f2f-920d-d75ca5e970ae +Error: Cannot convert 'complex' objects with values that are multiple of 100 1369a5fb-8312-4bba-ab79-ea71a9fcd036 +Error: Cannot convert 'complex' objects with values that are multiple of 100 d11c8331-a724-4d85-90b8-aa084d8b258d +Error: Cannot convert 'complex' objects with values that are multiple of 100 ea9019d5-26d0-4477-8c9f-172dfc107f25 +Error: Cannot convert 'complex' objects with values that are multiple of 100 725ee684-9dbf-4ff8-8b8d-b8e2172500b8 +Error: Cannot convert 'complex' objects with values that are multiple of 100 04001900-1655-4f6e-86b8-bbd88504d50f +Error: Cannot convert 'complex' objects with values that are multiple of 100 37bebf97-9ce2-4589-a804-ff69527bafba +Error: Cannot convert 'complex' objects with values that are multiple of 100 cff8daf0-c177-49a6-961b-2cc32217af7b +Error: Cannot convert 'complex' objects with values that are multiple of 100 bbb15e49-0126-4e2d-9518-1c5c2b227263 +Error: Cannot convert 'complex' objects with values that are multiple of 100 b7664d87-c87d-4e06-94d2-c51d904c92fd +Error: Cannot convert 'complex' objects with values that are multiple of 100 534a357a-1f04-4243-aa89-c70879656c66 +Error: Cannot convert 'complex' objects with values that are multiple of 100 0393aa29-9cee-4168-b802-6519c004f49a +Error: Cannot convert 'complex' objects with values that are multiple of 100 1975467d-7832-47e5-a5be-cb24ea2cd405 +Error: Cannot convert 'complex' objects with values that are multiple of 100 27b07229-9c16-43d3-985e-af00336c1970 +Error: Cannot convert 'complex' objects with values that are multiple of 100 e382b6bd-c9a7-4f00-bf5d-b1a829c1486a +Error: Cannot convert 'complex' objects with values that are multiple of 100 8ce42577-57b7-4c3c-9d12-bf09899ec75a +Error: Cannot convert 'complex' objects with values that are multiple of 100 71ee1840-416e-4a24-901b-ac009814738f +Error: Cannot convert 'complex' objects with values that are multiple of 100 286fc315-4643-48ef-b0bb-f18ad22888a0 +Error: Cannot convert 'complex' objects with values that are multiple of 100 68bba5c0-23d5-41ef-b6f5-c094c152427d +Error: Cannot convert 'complex' objects with values that are multiple of 100 7272613f-ee42-4761-89e5-ed4eb10203e2 +Error: Cannot convert 'complex' objects with values that are multiple of 100 8d5aec0b-0dd1-4a82-a77c-d35d4db1daf7 +Error: Cannot convert 'complex' objects with values that are multiple of 100 24532830-c3ec-4d6b-8d98-59c38e6255c6 +Error: Cannot convert 'complex' objects with values that are multiple of 100 a203d1f2-71bc-4eb1-b479-f650fff57e91 +Error: Cannot convert 'complex' objects with values that are multiple of 100 e3abbd23-7f6b-4c19-a8c9-1faa4ec84cef +Error: Cannot convert 'complex' objects with values that are multiple of 100 229cd51f-526c-44b0-bb96-6aab38f58a4c +Error: Cannot convert 'complex' objects with values that are multiple of 100 e96389f1-03ff-471f-b507-bd666c5ea5cd +Error: Cannot convert 'complex' objects with values that are multiple of 100 b9a71b4f-37e6-4a73-975f-5b0c0fba5327 +Error: Cannot convert 'complex' objects with values that are multiple of 100 231b2ab5-c0bf-4d62-8d30-b83fb55230f1 +Error: Cannot convert 'complex' objects with values that are multiple of 100 d1786358-b15d-4e74-8cb1-131d2344bd37 +Error: Cannot convert 'complex' objects with values that are multiple of 100 af4cecfa-6005-4564-812e-61228f66dd62 +Error: Cannot convert 'complex' objects with values that are multiple of 100 ee1bedce-e0db-4a2f-be29-6301e6d136d1 +Error: Cannot convert 'complex' objects with values that are multiple of 100 c5f0a020-e588-4fb1-9b1c-57dca2644408 +Error: Cannot convert 'complex' objects with values that are multiple of 100 3969b1f7-3374-402b-a1cc-13ae0b85227a +Error: Cannot convert 'complex' objects with values that are multiple of 100 1db8da28-cb63-4a24-9010-3010d2ab15d2 +Error: Cannot convert 'complex' objects with values that are multiple of 100 fee08b75-21dc-4b18-9ef5-8a327798dc60 +Error: Cannot convert 'complex' objects with values that are multiple of 100 f728f4c9-bdee-42aa-a0bb-d9299d344fa5 +Error: Cannot convert 'complex' objects with values that are multiple of 100 231ffa66-55f8-4534-a1d1-738cd4462dfd +Error: Cannot convert 'complex' objects with values that are multiple of 100 2bdef19b-3373-48d9-a41c-87b98afd9651 +Error: Cannot convert 'complex' objects with values that are multiple of 100 2d90f0ae-4e99-4460-b8a6-c396841ff476 +Error: Cannot convert 'complex' objects with values that are multiple of 100 afd1c4ce-110d-4327-9910-04b1f9b83bc4 +Error: Cannot convert 'complex' objects with values that are multiple of 100 b01d65b1-38ec-4fc0-bbd1-416f4b941b17 +Error: Cannot convert 'complex' objects with values that are multiple of 100 341c61e2-e62c-4ff4-b761-2b98ac8188fc +Error: Cannot convert 'complex' objects with values that are multiple of 100 6996cad7-588b-4176-bd81-85d4d75fa1c5 +Error: Cannot convert 'complex' objects with values that are multiple of 100 6e7bd135-84a5-4ba2-805b-5bcb271e2a95 +Error: Cannot convert 'complex' objects with values that are multiple of 100 4564b434-4925-4745-b9a5-0f77c4f191e3 +Error: Cannot convert 'complex' objects with values that are multiple of 100 b16e3d8d-5c80-489c-9fd4-f88745d259b6 +Error: Cannot convert 'complex' objects with values that are multiple of 100 865d6ee7-dca7-47db-afc8-94b64a86b48d +Error: Cannot convert 'complex' objects with values that are multiple of 100 608e9069-0b56-45ea-8f0d-1a953d8cdc48 +Error: Cannot convert 'complex' objects with values that are multiple of 100 9e29e291-753d-46e7-af8a-5a75839cd1f6 +Error: Cannot convert 'complex' objects with values that are multiple of 100 e0d13e93-7834-42d7-9381-ff2c80c787c3 +Error: Cannot convert 'complex' objects with values that are multiple of 100 fe800046-61e8-495c-923e-85ed71aed4fd +Error: Cannot convert 'complex' objects with values that are multiple of 100 2db7c305-6ae1-462d-8c78-e862a54e50d2 +Error: Cannot convert 'complex' objects with values that are multiple of 100 a3f5c29b-707e-4ae2-b955-651580661246 +Error: Cannot convert 'complex' objects with values that are multiple of 100 3750d10d-d277-496a-8f9c-49592827a9fe +Error: Cannot convert 'complex' objects with values that are multiple of 100 3cb8f69c-19f8-48ad-9f3e-111f92fa9695 +Error: Cannot convert 'complex' objects with values that are multiple of 100 b52b53c7-4dc9-4c26-8027-af970a4664f6 +Error: Cannot convert 'complex' objects with values that are multiple of 100 f23836c4-ce59-4a01-bf58-d4ce2a6b4e8d +Error: Cannot convert 'complex' objects with values that are multiple of 100 fe76654b-fb1f-41cc-96c9-ee566f9754eb +Error: Cannot convert 'complex' objects with values that are multiple of 100 8ce8d356-20f0-4e87-b417-a53be0c55764 +Error: Cannot convert 'complex' objects with values that are multiple of 100 f8d692f9-1403-4aa3-b13b-03438cdc01fb +Error: Cannot convert 'complex' objects with values that are multiple of 100 018b0a78-63db-4898-b7e5-6c8d03f7dbaa +Error: Cannot convert 'complex' objects with values that are multiple of 100 0fd3dbb5-6929-473c-aeae-302fbbf47efd +Error: Cannot convert 'complex' objects with values that are multiple of 100 a1c3c2f6-0693-4925-ad24-f33e73edb24b +Error: Cannot convert 'complex' objects with values that are multiple of 100 e563fdae-26e3-4124-a38e-d2281182729f +Error: Cannot convert 'complex' objects with values that are multiple of 100 d32195f5-3312-4baf-82ee-48f322cf2484 +Error: Cannot convert 'complex' objects with values that are multiple of 100 564d8d76-6500-4bf4-8986-6f29f7f939c3 +Error: Cannot convert 'complex' objects with values that are multiple of 100 98cd0dc0-4e58-46e4-8b01-b732b7f4e6e7 +Error: Cannot convert 'complex' objects with values that are multiple of 100 e70a7175-6a62-4e45-bb99-8d203f32bf5e +Error: Cannot convert 'complex' objects with values that are multiple of 100 71826df0-ce85-4797-afae-dd6b85210dbe +Error: Cannot convert 'complex' objects with values that are multiple of 100 e98f260f-8d59-474f-8899-f98401b4e9c6 +Error: Cannot convert 'complex' objects with values that are multiple of 100 bec0c13f-3430-495d-9864-3983adfc733e +Error: Cannot convert 'complex' objects with values that are multiple of 100 12ea60a7-de0d-4062-be1a-c66987a55552 +Error: Cannot convert 'complex' objects with values that are multiple of 100 b75c805b-a614-4c82-a2c3-5bf7f756e617 +Error: Cannot convert 'complex' objects with values that are multiple of 100 4bf2ca7b-f1ad-4f0c-8ad9-858d841ca726 +Error: Cannot convert 'complex' objects with values that are multiple of 100 fdeb53ce-76f2-45c2-8d97-56c019ddc4c2 +Error: Cannot convert 'complex' objects with values that are multiple of 100 99d50e6a-a9fb-4699-a7a3-e4771393faf1 +Error: Cannot convert 'complex' objects with values that are multiple of 100 fe83ee65-dfb1-4ca0-877c-82437619b7b6 +Error: Cannot convert 'complex' objects with values that are multiple of 100 fda80a13-3f7f-4a0a-853a-a5a0b69aeee3 +Error: Cannot convert 'complex' objects with values that are multiple of 100 d59fa1ed-ab65-4428-b2c1-dc7737ba58aa +Error: Cannot convert 'complex' objects with values that are multiple of 100 7e26c6f6-09df-49f3-87bd-8e810abb1475 +Error: Cannot convert 'complex' objects with values that are multiple of 100 54dbb234-2cb4-4c91-bb2f-36f0d1dcbc71 +Error: Cannot convert 'complex' objects with values that are multiple of 100 91997e38-b01d-4197-945e-0a453cfc79f5 +Error: Cannot convert 'complex' objects with values that are multiple of 100 ed6c8871-f227-4476-b78d-5f8c30c5167f +Error: Cannot convert 'complex' objects with values that are multiple of 100 a06ab564-8762-4438-884a-425fb643ab4e +Error: Cannot convert 'complex' objects with values that are multiple of 100 cf9dcebb-ad19-4fe8-8f51-67533d20ab32 +Error: Cannot convert 'complex' objects with values that are multiple of 100 f5847615-a940-4fa5-885a-4085aef251c8 +Error: Cannot convert 'complex' objects with values that are multiple of 100 9e12ba9f-4d99-490e-8778-deff73ef71e7 +Error: Cannot convert 'complex' objects with values that are multiple of 100 35321be9-5341-434f-adaf-f729ee87e683 +Error: Cannot convert 'complex' objects with values that are multiple of 100 aa0365d7-d1c5-4788-933e-b27650cbfda4 +Error: Cannot convert 'complex' objects with values that are multiple of 100 f54adb98-cf22-4511-b78c-1b79344b5fe2 +Error: Cannot convert 'complex' objects with values that are multiple of 100 69060ee5-c9d1-4b78-98b0-c562b3793eae +Error: Cannot convert 'complex' objects with values that are multiple of 100 5f52db20-e3a0-49c6-9808-293dff5d2e0c +Error: Cannot convert 'complex' objects with values that are multiple of 100 755dde68-33dc-479d-a93a-406769187f23 +Error: Cannot convert 'complex' objects with values that are multiple of 100 4b50ec74-48a7-4e00-9f0d-1cda8bcdc4b9 +Error: Cannot convert 'complex' objects with values that are multiple of 100 48ec2e7d-cdd2-45d3-a166-01bd72f04b1b +Error: Cannot convert 'complex' objects with values that are multiple of 100 a7ec7e57-4289-4c25-899a-fe77a7c20ce6 +Error: Cannot convert 'complex' objects with values that are multiple of 100 d836e77c-94ae-456d-b03b-77efba0f30dd +Error: Cannot convert 'complex' objects with values that are multiple of 100 5fbed3af-b212-4c4e-a228-21fdf20aeb1d +Error: Cannot convert 'complex' objects with values that are multiple of 100 6a974c64-b794-438e-a866-0f8853ae80f7 +Error: Cannot convert 'complex' objects with values that are multiple of 100 38bc381b-d4de-4916-8962-ceb88130635e +Error: Cannot convert 'complex' objects with values that are multiple of 100 c160e280-9308-4712-adee-689884ebeaf6 +Error: Cannot convert 'complex' objects with values that are multiple of 100 52a193cd-f566-4ff2-878d-d70e1139df2e +Error: Cannot convert 'complex' objects with values that are multiple of 100 2f7c0d32-e3a1-4ff0-a3e4-3b45b7389b1f +Error: Cannot convert 'complex' objects with values that are multiple of 100 04f80d54-03f4-4e79-8c46-e5072d36007e +Error: Cannot convert 'complex' objects with values that are multiple of 100 05c5bbfb-8858-4439-a695-c854c4e28569 +Error: Cannot convert 'complex' objects with values that are multiple of 100 ab3bcc0d-8f88-4b5e-acb1-10cb89be118d +Error: Cannot convert 'complex' objects with values that are multiple of 100 588eebea-7807-424f-b1ae-192600f028f3 +Error: Cannot convert 'complex' objects with values that are multiple of 100 1a613324-9ebe-4370-a1be-5b8540b5e7e6 +Error: Cannot convert 'complex' objects with values that are multiple of 100 a79e69c6-56ea-46ac-8d19-29616c9f43ff +Error: Cannot convert 'complex' objects with values that are multiple of 100 45a8b609-1690-43dc-8fe9-73ed45a996d4 +Error: Cannot convert 'complex' objects with values that are multiple of 100 a0c66af2-c52d-4c74-8cf5-d6bd7aae57e1 +Error: Cannot convert 'complex' objects with values that are multiple of 100 3a547379-f469-4920-b1b3-0975bf3532e6 +Error: Cannot convert 'complex' objects with values that are multiple of 100 eb989e38-26ad-4173-bc37-23246af599e6 +Error: Cannot convert 'complex' objects with values that are multiple of 100 cc6e8592-1257-4791-810c-68fc59a67450 +Error: Cannot convert 'complex' objects with values that are multiple of 100 5adf294e-af67-447f-8ae8-1bf236cd61da +Error: Cannot convert 'complex' objects with values that are multiple of 100 c71e7626-1497-4727-a9c6-1fa438b57655 +Error: Cannot convert 'complex' objects with values that are multiple of 100 ed9eaec9-6984-42d2-b617-d417a5d8fd8a +Error: Cannot convert 'complex' objects with values that are multiple of 100 b053ad16-b8d1-47e3-a4e6-7d4e0c41013a +Error: Cannot convert 'complex' objects with values that are multiple of 100 368f4560-1acb-4011-a8c0-31f5b7ddb78e +Error: Cannot convert 'complex' objects with values that are multiple of 100 94651677-44bb-46c3-a041-66e9af680854 +Error: Cannot convert 'complex' objects with values that are multiple of 100 212907b6-8457-41e1-82d7-1f17ff8418f8 +Error: Cannot convert 'complex' objects with values that are multiple of 100 dd79b637-25db-4b9e-97a5-cd42efed3fca +Error: Cannot convert 'complex' objects with values that are multiple of 100 e55a86ff-1abd-4cc0-b3f1-186c94a21ca2 +Error: Cannot convert 'complex' objects with values that are multiple of 100 44f22c9a-f7d7-49f8-b105-ec4793913617 +Error: Cannot convert 'complex' objects with values that are multiple of 100 2d7b720d-0418-41b3-8992-d3a06aeb0d87 +Error: Cannot convert 'complex' objects with values that are multiple of 100 229a2508-2949-44e3-abef-b95a5314141a +Error: Cannot convert 'complex' objects with values that are multiple of 100 374ce0e5-9abb-4d1b-905e-3ad020b4e6ad +Error: Cannot convert 'complex' objects with values that are multiple of 100 9280b201-2c4d-4f1a-a2b3-563cef526ec6 +Error: Cannot convert 'complex' objects with values that are multiple of 100 239fea1a-5ce9-45c0-8c6f-7795b87f5005 +Error: Cannot convert 'complex' objects with values that are multiple of 100 e0b95739-008c-4303-b483-59778837edf7 +Error: Cannot convert 'complex' objects with values that are multiple of 100 23c1442d-5fe8-408e-8c91-6fe0b52c3880 +Error: Cannot convert 'complex' objects with values that are multiple of 100 57ec1c1d-604d-45c1-9505-eeee7c5272d3 +Error: Cannot convert 'complex' objects with values that are multiple of 100 9c34c4bb-783d-4527-bb40-62dc77ca9e9e +Error: Cannot convert 'complex' objects with values that are multiple of 100 ca0f3c78-c217-4089-9713-b7960c47e709 +Error: Cannot convert 'complex' objects with values that are multiple of 100 5e301cd0-18fc-413f-b89e-89b39c9b7d61 +Error: Cannot convert 'complex' objects with values that are multiple of 100 54a514cb-6a16-4ed5-bb7b-f1dab5e391ce +Error: Cannot convert 'complex' objects with values that are multiple of 100 c48229f1-b060-44f2-8e84-0094f3c52568 +Error: Cannot convert 'complex' objects with values that are multiple of 100 0adef79b-0a77-4e0c-9d45-ea7ac9efc99e +Error: Cannot convert 'complex' objects with values that are multiple of 100 41ae9d1a-19cc-43e2-bf43-74119c256171 +Error: Cannot convert 'complex' objects with values that are multiple of 100 0c8c5586-9310-448c-b769-57cd8b434f1b +Error: Cannot convert 'complex' objects with values that are multiple of 100 5abeddb1-b16e-4cae-9743-bd8b3967d68d +Error: Cannot convert 'complex' objects with values that are multiple of 100 9a16a8f0-5acb-4be4-b01b-ba70ee703d79 +Error: Cannot convert 'complex' objects with values that are multiple of 100 1ec57983-aa25-43fb-b619-75c05db355cb +Error: Cannot convert 'complex' objects with values that are multiple of 100 8219be58-e54e-4779-a46a-46af2e26dd65 +Error: Cannot convert 'complex' objects with values that are multiple of 100 36d49a42-405f-4489-98ee-15988fb02655 +Error: Cannot convert 'complex' objects with values that are multiple of 100 084945de-d37e-4363-81de-c5d80c6330d5 +Error: Cannot convert 'complex' objects with values that are multiple of 100 7804d5ed-5c7d-4836-9a1f-ad04160cc721 +Error: Cannot convert 'complex' objects with values that are multiple of 100 f00fa376-1e1e-40c1-96b9-32240c1f86e4 +Error: Cannot convert 'complex' objects with values that are multiple of 100 3fcb887f-e1a6-4353-8473-b1a9e036458e +Error: Cannot convert 'complex' objects with values that are multiple of 100 d5faec5c-9145-41f7-a0f8-d0e9f712d67c +Error: Cannot convert 'complex' objects with values that are multiple of 100 3cd05855-6007-47c8-a1ed-eeb0a0a3f610 +Error: Cannot convert 'complex' objects with values that are multiple of 100 d0398a7a-c268-4d74-8d78-d86fd8fce735 +Error: Cannot convert 'complex' objects with values that are multiple of 100 ac77927f-7557-4393-bd23-87ff74f91f3d +Error: Cannot convert 'complex' objects with values that are multiple of 100 a070e880-ef24-43fb-a9f0-1497bca8e13f +Error: Cannot convert 'complex' objects with values that are multiple of 100 841a6aa7-6d31-43ab-a40c-9d002f052f40 +Error: Cannot convert 'complex' objects with values that are multiple of 100 c5dc76ec-d278-48be-8bf7-68a7fb8ed76c +Error: Cannot convert 'complex' objects with values that are multiple of 100 aa9519cd-f645-4434-b72a-874c0f527303 +Error: Cannot convert 'complex' objects with values that are multiple of 100 c3865152-f2cb-4dad-8846-1a19346af136 +Error: Cannot convert 'complex' objects with values that are multiple of 100 48dd71da-8dc4-4c71-a4bf-5c9472b09bae +Error: Cannot convert 'complex' objects with values that are multiple of 100 7e91868d-55f3-4b56-965e-2a32d66a770a +Error: Cannot convert 'complex' objects with values that are multiple of 100 f4bf79b4-9370-443b-b17d-867982e36d87 +Error: Cannot convert 'complex' objects with values that are multiple of 100 01e803c0-5489-4fbb-9fc6-4dced641ad9e +Error: Cannot convert 'complex' objects with values that are multiple of 100 bf0eb3cb-db70-410e-8007-7a010e226622 +Error: Cannot convert 'complex' objects with values that are multiple of 100 8663a0e7-0597-43c6-85b0-0c107f06c929 +Error: Cannot convert 'complex' objects with values that are multiple of 100 fd613c6a-0c56-4cfd-80b9-fc437a630e7e +Error: Cannot convert 'complex' objects with values that are multiple of 100 615d25b9-df43-412f-bcd1-3110063dcc4f +Error: Cannot convert 'complex' objects with values that are multiple of 100 c931910e-3fd8-4c33-812f-fd49cea925e4 +Error: Cannot convert 'complex' objects with values that are multiple of 100 87565d23-6d9a-4465-b67b-667221c4df3b +Error: Cannot convert 'complex' objects with values that are multiple of 100 8a7652b0-c400-4b4e-af8b-a8da5e0dbd0b +Error: Cannot convert 'complex' objects with values that are multiple of 100 dc059883-7c96-4edd-9a7c-30b18a57b4b5 +Error: Cannot convert 'complex' objects with values that are multiple of 100 d0b6a1ca-0e5f-4648-b419-b6b9ec00e9b2 +Error: Cannot convert 'complex' objects with values that are multiple of 100 8817a5ba-a093-490b-a7f1-2e859bc0b345 +Error: Cannot convert 'complex' objects with values that are multiple of 100 4e08f021-3d6e-4786-b7a1-8b6d2d7dfa35 +Error: Cannot convert 'complex' objects with values that are multiple of 100 0a0b9977-b713-4357-a90d-c58bf18ea94e +Error: Cannot convert 'complex' objects with values that are multiple of 100 7c5f6a0c-5d52-4391-8f45-ba337aa7ce0f +Error: Cannot convert 'complex' objects with values that are multiple of 100 6742e115-ede8-4bcd-adf9-bf7b154be106 +Error: Cannot convert 'complex' objects with values that are multiple of 100 c68bbfa4-c190-43eb-bde7-d8567e65fea8 +Error: Cannot convert 'complex' objects with values that are multiple of 100 1ce1caee-6441-4372-9d95-406a025043f6 +Error: Cannot convert 'complex' objects with values that are multiple of 100 073ed719-6211-45cf-9c9b-341591230cb8 +Error: Cannot convert 'complex' objects with values that are multiple of 100 fa3a3fa7-5266-439e-82cf-3283a86fcd8a +Error: Cannot convert 'complex' objects with values that are multiple of 100 2acea925-7794-4f02-975d-800426fdc744 +Error: Cannot convert 'complex' objects with values that are multiple of 100 dd850e29-182a-4e75-ac56-f62f6389d8bc +Error: Cannot convert 'complex' objects with values that are multiple of 100 58289e3d-11b8-428a-ab3b-f34bc67820eb +Error: Cannot convert 'complex' objects with values that are multiple of 100 3ca1ac43-75db-4d32-ae67-1ca19baa7ebd +Error: Cannot convert 'complex' objects with values that are multiple of 100 589f4c6e-b82a-4c42-a1dc-232cc7ae30b5 +Error: Cannot convert 'complex' objects with values that are multiple of 100 965526db-d773-4f01-bfa1-f3208298e6ca +Error: Cannot convert 'complex' objects with values that are multiple of 100 9daa6a46-3033-4547-8b05-2da1b21710de +Error: Cannot convert 'complex' objects with values that are multiple of 100 fa03b3b2-feb5-41e9-a7fd-fa14b7a2ae74 +Error: Cannot convert 'complex' objects with values that are multiple of 100 8250e2f4-bcdf-46cc-8963-9d1f64a03bc0 +Error: Cannot convert 'complex' objects with values that are multiple of 100 388dba12-07a7-4d3d-88e5-fb5159499697 +Error: Cannot convert 'complex' objects with values that are multiple of 100 72e51f1d-6962-4670-94a9-dff3e8010067 +Error: Cannot convert 'complex' objects with values that are multiple of 100 01f68652-6627-451f-8293-966d19d1a654 +Error: Cannot convert 'complex' objects with values that are multiple of 100 18fd85dc-2843-41ba-b193-df23ce0cefc2 +Error: Cannot convert 'complex' objects with values that are multiple of 100 8f6161e8-f89c-47e8-9147-e4d90ab675ba +Error: Cannot convert 'complex' objects with values that are multiple of 100 eb2132af-a15a-452d-83df-b6974c48b592 +Error: Cannot convert 'complex' objects with values that are multiple of 100 1ee5c1bf-820f-4012-b0f3-5cd013974aeb +Error: Cannot convert 'complex' objects with values that are multiple of 100 37f6c099-3ae5-48de-8a32-002311f36560 +Error: Cannot convert 'complex' objects with values that are multiple of 100 dfd5562d-a445-4b00-8a03-42c3b29a7f6d +Error: Cannot convert 'complex' objects with values that are multiple of 100 f39d88ab-5d99-4c89-84ce-6ddda83fe359 +Error: Cannot convert 'complex' objects with values that are multiple of 100 ab1e91c2-b37c-4c98-a0c1-50424b19ede3 +Error: Cannot convert 'complex' objects with values that are multiple of 100 4172f9b5-54f7-4146-af18-f062e51c6fe8 +Error: Cannot convert 'complex' objects with values that are multiple of 100 67c046e1-87a6-44c6-8224-9d7a017e851a +Error: Cannot convert 'complex' objects with values that are multiple of 100 4ff6d019-a524-446c-9c7a-5eed5695411f +Error: Cannot convert 'complex' objects with values that are multiple of 100 88a75507-1fcb-45aa-bb3d-6e9e3f8cefe5 +Error: Cannot convert 'complex' objects with values that are multiple of 100 18d1f9c2-1ca9-47d5-8539-01c1523be687 +Error: Cannot convert 'complex' objects with values that are multiple of 100 0efec7af-4f1a-4c71-ba74-ad25a9446586 +Error: Cannot convert 'complex' objects with values that are multiple of 100 c30d943d-fafe-42c7-9886-976ee2ada664 +Error: Cannot convert 'complex' objects with values that are multiple of 100 ce6e9245-f2a4-48cc-b65e-0aa16bfa6c65 +Error: Cannot convert 'complex' objects with values that are multiple of 100 91bf39b0-e9d9-43c7-bdf2-67c2702acede +Error: Cannot convert 'complex' objects with values that are multiple of 100 3034c39f-ae49-47c7-aa85-55e9b6aa8bc3 +Error: Cannot convert 'complex' objects with values that are multiple of 100 53185dec-a065-4b83-a04e-4c385c931f3b +Error: Cannot convert 'complex' objects with values that are multiple of 100 23f8479f-4784-41d2-aecc-9bed73c8d13b +Error: Cannot convert 'complex' objects with values that are multiple of 100 5fff295a-72f2-48d7-b598-07bdfd0bda6f +Error: Cannot convert 'complex' objects with values that are multiple of 100 7882e9a7-6827-4c61-a930-29d5fc7acfe4 +Error: Cannot convert 'complex' objects with values that are multiple of 100 91a6b535-fee4-4a32-b4f0-528805ae6aaa +Error: Cannot convert 'complex' objects with values that are multiple of 100 a0a7d21f-ba2c-4887-b24d-89298be19b2c +Error: Cannot convert 'complex' objects with values that are multiple of 100 87a39676-e6c1-41ef-a1c7-058a0cb2baa7 +Error: Cannot convert 'complex' objects with values that are multiple of 100 5989e439-91d4-4f59-8bd9-4cc8d8cd5134 +Error: Cannot convert 'complex' objects with values that are multiple of 100 d024758f-9a32-4c8c-90f9-f7d48487b6a9 +Error: Cannot convert 'complex' objects with values that are multiple of 100 ae1fdfa2-5230-474e-bf4e-346266de3058 +Error: Cannot convert 'complex' objects with values that are multiple of 100 27f992f2-336a-4bb4-8a71-faa05d02b8d4 +Error: Cannot convert 'complex' objects with values that are multiple of 100 a69b163a-c0ff-45c3-974a-70b1fe651605 +Error: Cannot convert 'complex' objects with values that are multiple of 100 2fa56428-6c22-4da0-af9d-a0e4cdea372b +Error: Cannot convert 'complex' objects with values that are multiple of 100 cb4df774-3555-465f-9388-77a77527d071 +Error: Cannot convert 'complex' objects with values that are multiple of 100 e53a66db-4188-4e30-b0e0-257517103e6c +Error: Cannot convert 'complex' objects with values that are multiple of 100 44389dbc-d1ba-48a6-b247-317f26c2fcba +Error: Cannot convert 'complex' objects with values that are multiple of 100 0210e5db-a487-4137-88c1-b2be15c767a9 +Error: Cannot convert 'complex' objects with values that are multiple of 100 c07a8297-a53c-4da3-b8fd-e79bbe28eb58 +Error: Cannot convert 'complex' objects with values that are multiple of 100 bf3ce749-2bfa-4016-8990-179b7fa3f4e4 +Error: Cannot convert 'complex' objects with values that are multiple of 100 d309f6b1-3439-4ab2-bfde-10c835bf5fbc +Error: Cannot convert 'complex' objects with values that are multiple of 100 59ed9c39-fbbf-465c-ad52-3f7c920a3b22 +Error: Cannot convert 'complex' objects with values that are multiple of 100 3fe9bfd7-a802-4559-8e75-7029537eea62 +Error: Cannot convert 'complex' objects with values that are multiple of 100 3cbf3aef-2b29-4144-b3b1-339b4831bed6 +Error: Cannot convert 'complex' objects with values that are multiple of 100 7ba876c6-d99c-4bbd-9d2f-6b0dd2ebc022 +Error: Cannot convert 'complex' objects with values that are multiple of 100 35ce8d6c-853c-4a23-9858-6cda1c0ae9b4 +Error: Cannot convert 'complex' objects with values that are multiple of 100 682cb31c-19ee-42bd-b9f9-99a6a7d05be1 +Error: Cannot convert 'complex' objects with values that are multiple of 100 ebf6c057-88ee-42a4-adcc-564a696c45c5 +Error: Cannot convert 'complex' objects with values that are multiple of 100 ec10133d-b87a-4fdf-be5c-bd5cbed145ad +Error: Cannot convert 'complex' objects with values that are multiple of 100 20e6d960-ae74-4816-8111-bdd885e4ab4f +Error: Cannot convert 'complex' objects with values that are multiple of 100 28be65c9-d273-43ec-a516-42714f0c806f +Error: Cannot convert 'complex' objects with values that are multiple of 100 afaf66e2-5b90-4ef9-aa5e-8f5da044fadb +Error: Cannot convert 'complex' objects with values that are multiple of 100 0073e468-5a37-4b04-9126-e5cd82fb7c22 +Error: Cannot convert 'complex' objects with values that are multiple of 100 4758b312-86a8-49d5-a616-b12e8abea612 +Error: Cannot convert 'complex' objects with values that are multiple of 100 f843d079-1645-434c-b2e2-6744546bf518 +Error: Cannot convert 'complex' objects with values that are multiple of 100 22a1f87e-9e51-4bd0-b3f9-33edf9409dcd +Error: Cannot convert 'complex' objects with values that are multiple of 100 6754ee03-4dbd-453e-a571-a710008b8139 +Error: Cannot convert 'complex' objects with values that are multiple of 100 6134569a-59ac-4da6-b5db-60f14d5ea564 +Error: Cannot convert 'complex' objects with values that are multiple of 100 b465c27a-7fb0-4a86-bfec-f0ba8d68b325 +Error: Cannot convert 'complex' objects with values that are multiple of 100 eac4b609-c6cf-405f-b46a-8b0c3e59cd91 +Error: Cannot convert 'complex' objects with values that are multiple of 100 a749cb3c-25a6-4195-bc0e-a281ebdb1b0f +Error: Cannot convert 'complex' objects with values that are multiple of 100 33acd3cf-6b83-4aaa-8a0d-d429eeda042a +Error: Cannot convert 'complex' objects with values that are multiple of 100 bc0f3e94-7b4a-4330-8124-59e0b9ab10cd +Error: Cannot convert 'complex' objects with values that are multiple of 100 c87c35fb-2f70-473a-af97-5b74ed8891fb +Error: Cannot convert 'complex' objects with values that are multiple of 100 e0935148-92e1-427c-872a-92fe3114c6db +Error: Cannot convert 'complex' objects with values that are multiple of 100 e18cfdc8-dc65-4c70-82fb-b61fa05f2a97 +Error: Cannot convert 'complex' objects with values that are multiple of 100 b2bf8917-003f-4e4e-b4b1-2b95cf5d1e02 +Error: Cannot convert 'complex' objects with values that are multiple of 100 4f7cbdb2-7600-442f-beaf-304e80d7d632 +Error: Cannot convert 'complex' objects with values that are multiple of 100 9fbdbb8b-19c1-4fa3-befe-afad6f66196b +Error: Cannot convert 'complex' objects with values that are multiple of 100 b7328f10-bc80-4f5c-801b-c14ffaa99160 +Error: Cannot convert 'complex' objects with values that are multiple of 100 d9520d35-57c2-4f8a-ad32-28d473c2e3f0 +Error: Cannot convert 'complex' objects with values that are multiple of 100 454a86bd-1993-4cff-be5e-dc98cee9c658 +Error: Cannot convert 'complex' objects with values that are multiple of 100 d06dd080-cd3c-42de-8bcb-aa78fc3fed17 +Error: Cannot convert 'complex' objects with values that are multiple of 100 675c2090-6f88-427f-b357-424fcf2e8777 +Error: Cannot convert 'complex' objects with values that are multiple of 100 0655c1b2-24b9-43e4-a9d7-9b4711a80ff3 +Error: Cannot convert 'complex' objects with values that are multiple of 100 7518e96e-5fad-4286-bc04-b1273d2ef59a +Error: Cannot convert 'complex' objects with values that are multiple of 100 818eb169-1f16-410b-9524-e3422a5b626f +Error: Cannot convert 'complex' objects with values that are multiple of 100 618b9e7e-0d59-44a5-b233-25fa09475bfd +Error: Cannot convert 'complex' objects with values that are multiple of 100 a72700a8-dbcc-410e-9c3e-2b029f2a05d9 +Error: Cannot convert 'complex' objects with values that are multiple of 100 c106c66f-836d-4b3f-aed0-7a33dac4cc76 +Error: Cannot convert 'complex' objects with values that are multiple of 100 e8ea6f1b-ed4d-41b4-b1f6-7075c1dff0cf +Error: Cannot convert 'complex' objects with values that are multiple of 100 42fa8bc4-2ada-4523-a6ad-c1602649c744 +Error: Cannot convert 'complex' objects with values that are multiple of 100 87fc12a1-553b-45e4-bc74-0de6b5782350 +Error: Cannot convert 'complex' objects with values that are multiple of 100 ae5c4f18-74b6-4080-9c2c-1c596d984a23 +Error: Cannot convert 'complex' objects with values that are multiple of 100 63bc0d30-e592-4524-987f-6691970dc654 +Error: Cannot convert 'complex' objects with values that are multiple of 100 b3425416-92a2-427e-8323-c5df12536fb7 +Error: Cannot convert 'complex' objects with values that are multiple of 100 92dd95f3-033f-49ab-b42d-1f9e9b41dc13 +Error: Cannot convert 'complex' objects with values that are multiple of 100 b003a035-9097-42b7-91f9-7fa35309a082 +Error: Cannot convert 'complex' objects with values that are multiple of 100 c3c0c870-3081-411e-b487-8089859267de +Error: Cannot convert 'complex' objects with values that are multiple of 100 bf208759-db3f-4b74-aa94-d7d2bb9db63c +Error: Cannot convert 'complex' objects with values that are multiple of 100 2e478ba5-228d-428c-83b3-d1b18313908f +Error: Cannot convert 'complex' objects with values that are multiple of 100 af51f2f7-a382-4806-bc4e-69512a8d532a +Error: Cannot convert 'complex' objects with values that are multiple of 100 037c332e-110f-42bf-9001-a3caf8574ee6 +Error: Cannot convert 'complex' objects with values that are multiple of 100 a918d9a6-87e9-47e8-8a07-de4ebd94dae3 +Error: Cannot convert 'complex' objects with values that are multiple of 100 92750112-af31-41bd-ac90-7c9c830fccee +Error: Cannot convert 'complex' objects with values that are multiple of 100 8d320909-453b-4540-aa3e-2e50e09f12e1 +Error: Cannot convert 'complex' objects with values that are multiple of 100 76b14a34-6ea2-42ef-b3d6-7d9144325a15 +Error: Cannot convert 'complex' objects with values that are multiple of 100 2f6c93f8-f860-486c-8fbe-ed171504b251 +Error: Cannot convert 'complex' objects with values that are multiple of 100 0767434b-8092-4d94-be6f-34d85929dbda +Error: Cannot convert 'complex' objects with values that are multiple of 100 638b5ee8-209d-4bf1-93a0-33f23db7a8a0 +Error: Cannot convert 'complex' objects with values that are multiple of 100 648143b7-e3b1-4e32-a55c-26b017e03bd7 +Error: Cannot convert 'complex' objects with values that are multiple of 100 8fa6afc0-b651-4043-a94e-47250f8e9653 +Error: Cannot convert 'complex' objects with values that are multiple of 100 08b1cfb0-227b-4724-8f60-891d37c29cd8 +Error: Cannot convert 'complex' objects with values that are multiple of 100 1e6699fc-1049-4f57-9b64-e8ef22ec16f8 +Error: Cannot convert 'complex' objects with values that are multiple of 100 c0e01e41-9651-4079-9dc4-84e659c8772b +Error: Cannot convert 'complex' objects with values that are multiple of 100 f8ce5a55-3aae-444f-83ef-10d9b5c9b8d0 +Error: Cannot convert 'complex' objects with values that are multiple of 100 0edced15-3190-4466-8eac-25fd18f160c8 +Error: Cannot convert 'complex' objects with values that are multiple of 100 3db5ff36-9fbe-4e7e-8b61-d3302232b877 +Error: Cannot convert 'complex' objects with values that are multiple of 100 e17925ae-2d1e-48e5-b16e-9c353ea2e9ff +Error: Cannot convert 'complex' objects with values that are multiple of 100 2c7532b9-95c2-4f3c-8742-b7526a6cde42 +Error: Cannot convert 'complex' objects with values that are multiple of 100 b4caa59c-3e96-4316-aea8-b55148a1fc8b +Error: Cannot convert 'complex' objects with values that are multiple of 100 125dc8c0-4a09-462a-bdf8-19b944affaeb +Error: Cannot convert 'complex' objects with values that are multiple of 100 05234d6d-e547-4713-9069-0520c8b5d6a1 +Error: Cannot convert 'complex' objects with values that are multiple of 100 e5e5af91-3ebd-4707-b7a7-808c2fc87a33 +Error: Cannot convert 'complex' objects with values that are multiple of 100 b79430be-4be2-4e67-adb8-c7f593b7be12 +Error: Cannot convert 'complex' objects with values that are multiple of 100 6349acc6-f70b-474c-a4e1-d74eb5a31638 +Error: Cannot convert 'complex' objects with values that are multiple of 100 4b134f8b-192a-45c3-a543-bf76cd6716a0 +Error: Cannot convert 'complex' objects with values that are multiple of 100 c6468fe5-7ba4-4b6b-9994-a9648e0904ad +Error: Cannot convert 'complex' objects with values that are multiple of 100 0e10a6e2-08f2-44d6-a22d-8bd3e0800a79 +Error: Cannot convert 'complex' objects with values that are multiple of 100 111971d2-74df-4d2b-9fe8-328641d1ff17 +Error: Cannot convert 'complex' objects with values that are multiple of 100 1444dbd3-18c3-423f-b8ed-a01a41ee4731 +Error: Cannot convert 'complex' objects with values that are multiple of 100 9a3e6eff-82c4-441d-8345-fcd4352721bd +Error: Cannot convert 'complex' objects with values that are multiple of 100 20d7476b-bd4b-47a7-9937-87b0fa57d111 +Error: Cannot convert 'complex' objects with values that are multiple of 100 3d3ff888-81b9-47f7-ae2f-24d2c4d4713f +Error: Cannot convert 'complex' objects with values that are multiple of 100 c7041ac7-46bc-4b9b-bf88-a27a1734b154 +Error: Cannot convert 'complex' objects with values that are multiple of 100 0afaa370-f20a-4ae1-b871-2d2675bcdf23 +Error: Cannot convert 'complex' objects with values that are multiple of 100 2888ea65-718b-448b-a2dd-77c56924f630 +Error: Cannot convert 'complex' objects with values that are multiple of 100 9abefd72-25c0-48e3-9239-13a44dbddee6" +`; diff --git a/src/core/server/integration_tests/saved_objects/migrations/group1/v2_migration.test.ts b/src/core/server/integration_tests/saved_objects/migrations/group1/v2_migration.test.ts index a150a449db7fc..5981c2759d5ca 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/group1/v2_migration.test.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/group1/v2_migration.test.ts @@ -9,11 +9,11 @@ import { join } from 'path'; import { omit } from 'lodash'; +import JSON5 from 'json5'; import type { TestElasticsearchUtils } from '@kbn/core-test-helpers-kbn-server'; import type { MigrationResult } from '@kbn/core-saved-objects-base-server-internal'; import { - nextMinor, defaultKibanaIndex, defaultKibanaTaskIndex, startElasticsearch, @@ -21,34 +21,27 @@ import { type KibanaMigratorTestKit, readLog, clearLog, + currentVersion, } from '../kibana_migrator_test_kit'; import { BASELINE_DOCUMENTS_PER_TYPE_500K, BASELINE_TEST_ARCHIVE_500K, } from '../kibana_migrator_archive_utils'; -import { getReindexingMigratorTestKit } from '../kibana_migrator_test_kit.fixtures'; +import { + baselineTypes, + getReindexingBaselineTypes, + getReindexingMigratorTestKit, + getUpToDateMigratorTestKit, +} from '../kibana_migrator_test_kit.fixtures'; import { delay } from '../test_utils'; const logFilePath = join(__dirname, 'v2_migration.log'); describe('v2 migration', () => { let esServer: TestElasticsearchUtils; - let kit: KibanaMigratorTestKit; - let migrationResults: MigrationResult[]; beforeAll(async () => { esServer = await startElasticsearch({ dataArchive: BASELINE_TEST_ARCHIVE_500K }); - await clearLog(logFilePath); - kit = await getReindexingMigratorTestKit({ - logFilePath, - filterDeprecated: true, - settings: { - migrations: { - discardUnknownObjects: nextMinor, - }, - }, - }); - migrationResults = await kit.runMigrations(); }); afterAll(async () => { @@ -58,100 +51,328 @@ describe('v2 migration', () => { } }); - describe('a migrator performing a reindexing migration', () => { - describe('when an index contains SO types with incompatible mappings', () => { - it('executes the reindexing migration steps', async () => { - const logs = await readLog(logFilePath); - expect(logs).toMatch(`[${defaultKibanaIndex}] INIT -> WAIT_FOR_YELLOW_SOURCE.`); - expect(logs).toMatch( - `[${defaultKibanaIndex}] WAIT_FOR_YELLOW_SOURCE -> UPDATE_SOURCE_MAPPINGS_PROPERTIES.` - ); - expect(logs).toMatch( - `[${defaultKibanaIndex}] UPDATE_SOURCE_MAPPINGS_PROPERTIES -> CHECK_CLUSTER_ROUTING_ALLOCATION.` - ); - expect(logs).toMatch( - `[${defaultKibanaIndex}] CHECK_CLUSTER_ROUTING_ALLOCATION -> CHECK_UNKNOWN_DOCUMENTS.` - ); - expect(logs).toMatch( - `[${defaultKibanaIndex}] CHECK_TARGET_MAPPINGS -> UPDATE_TARGET_MAPPINGS_PROPERTIES.` - ); + describe('to the current stack version', () => { + let upToDateKit: KibanaMigratorTestKit; + let migrationResults: MigrationResult[]; + + beforeAll(async () => { + await clearLog(logFilePath); + upToDateKit = await getUpToDateMigratorTestKit({ + logFilePath, + kibanaVersion: currentVersion, + }); + migrationResults = await upToDateKit.runMigrations(); + }); + + it('skips UPDATE_TARGET_MAPPINGS_PROPERTIES if there are no changes in the mappings', async () => { + const logs = await readLog(logFilePath); + expect(logs).not.toMatch('CREATE_NEW_TARGET'); + expect(logs).toMatch( + `[${defaultKibanaIndex}] CHECK_TARGET_MAPPINGS -> CHECK_VERSION_INDEX_READY_ACTIONS` + ); + expect(logs).toMatch( + `[${defaultKibanaTaskIndex}] CHECK_TARGET_MAPPINGS -> CHECK_VERSION_INDEX_READY_ACTIONS` + ); + expect(logs).not.toMatch('UPDATE_TARGET_MAPPINGS_PROPERTIES'); + expect(logs).not.toMatch('UPDATE_TARGET_MAPPINGS_PROPERTIES_WAIT_FOR_TASK'); + expect(logs).not.toMatch('UPDATE_TARGET_MAPPINGS_META'); + }); + + it(`returns a 'patched' status for each SO index`, () => { + // omit elapsedMs as it varies in each execution + expect(migrationResults.map((result) => omit(result, 'elapsedMs'))).toMatchInlineSnapshot(` + Array [ + Object { + "destIndex": ".kibana_migrator_9.0.0_001", + "status": "patched", + }, + Object { + "destIndex": ".kibana_migrator_tasks_9.0.0_001", + "status": "patched", + }, + ] + `); + }); + + it('each migrator takes less than 10 seconds', () => { + expect( + (migrationResults as Array<{ elapsedMs?: number }>).every( + ({ elapsedMs }) => !elapsedMs || elapsedMs < 10000 + ) + ).toEqual(true); + }); + }); + + describe('to a newer stack version', () => { + describe('with unknown types', () => { + let unknownTypesKit: KibanaMigratorTestKit; + let logs: string; + + beforeAll(async () => { + await clearLog(logFilePath); + unknownTypesKit = await getReindexingMigratorTestKit({ + logFilePath, + // filter out 'task' objects in order to not spawn that migrator for this test + types: getReindexingBaselineTypes(true).filter(({ name }) => name !== 'task'), + settings: { + migrations: { + discardUnknownObjects: currentVersion, // instead of the actual target, 'nextMinor' + }, + }, + }); + }); + + it('fails if Kibana is not configured to discard unknown objects', async () => { + await expect(unknownTypesKit.runMigrations()).rejects.toThrowErrorMatchingInlineSnapshot(` + "Unable to complete saved object migrations for the [.kibana_migrator] index: Migration failed because some documents were found which use unknown saved object types: deprecated + To proceed with the migration you can configure Kibana to discard unknown saved objects for this migration. + Please refer to https://www.elastic.co/guide/en/kibana/master/resolve-migrations-failures.html for more information." + `); + logs = await readLog(logFilePath); expect(logs).toMatch( - `[${defaultKibanaIndex}] UPDATE_TARGET_MAPPINGS_META -> CHECK_VERSION_INDEX_READY_ACTIONS.` + 'The flag `migrations.discardUnknownObjects` is defined but does not match the current kibana version; unknown objects will NOT be discarded.' ); expect(logs).toMatch( - `[${defaultKibanaIndex}] CHECK_VERSION_INDEX_READY_ACTIONS -> MARK_VERSION_INDEX_READY.` + `[${defaultKibanaIndex}] Migration failed because some documents were found which use unknown saved object types: deprecated` ); - expect(logs).toMatch(`[${defaultKibanaIndex}] MARK_VERSION_INDEX_READY -> DONE.`); - - expect(logs).not.toMatch(`[${defaultKibanaIndex}] CREATE_NEW_TARGET`); - expect(logs).not.toMatch(`[${defaultKibanaIndex}] CLEANUP_UNKNOWN_AND_EXCLUDED`); - expect(logs).not.toMatch(`[${defaultKibanaIndex}] PREPARE_COMPATIBLE_MIGRATION`); + expect(logs).toMatch(`[${defaultKibanaIndex}] CHECK_UNKNOWN_DOCUMENTS -> FATAL.`); }); }); - describe('copies the right documents over to the target indices', () => { - let primaryIndexCounts: Record; - let taskIndexCounts: Record; + describe('with transform errors', () => { + let transformErrorsKit: KibanaMigratorTestKit; + let logs: string; beforeAll(async () => { - primaryIndexCounts = await getAggregatedTypesCount(kit.client, defaultKibanaIndex); - taskIndexCounts = await getAggregatedTypesCount(kit.client, defaultKibanaTaskIndex); + await clearLog(logFilePath); + transformErrorsKit = await getReindexingMigratorTestKit({ + logFilePath, + // filter out 'task' objects in order to not spawn that migrator for this test + types: getReindexingBaselineTypes(true).filter(({ name }) => name !== 'task'), + settings: { + migrations: { + discardCorruptObjects: currentVersion, // instead of the actual target, 'nextMinor' + }, + }, + }); }); - it('copies documents to the right indices depending on their types', () => { - expect(primaryIndexCounts.basic).toBeDefined(); - expect(primaryIndexCounts.complex).toBeDefined(); - expect(primaryIndexCounts.task).not.toBeDefined(); + it('collects corrupt saved object documents across batches', async () => { + try { + await transformErrorsKit.runMigrations(); + } catch (error) { + const lines = error.message + .split('\n') + .filter((line: string) => line.includes(`'complex'`)) + .join('\n'); + expect(lines).toMatchSnapshot(); + } + }); - expect(taskIndexCounts.basic).not.toBeDefined(); - expect(taskIndexCounts.complex).not.toBeDefined(); - expect(taskIndexCounts.task).toBeDefined(); + it('fails if Kibana is not configured to discard transform errors', async () => { + logs = await readLog(logFilePath); + expect(logs).toMatch( + `Cannot convert 'complex' objects with values that are multiple of 100` + ); + expect(logs).toMatch(`[${defaultKibanaIndex}] REINDEX_SOURCE_TO_TEMP_READ -> FATAL.`); }); - it('discards REMOVED_TYPES', () => { - expect(primaryIndexCounts.server).not.toBeDefined(); - expect(taskIndexCounts.server).not.toBeDefined(); + it('closes reindex PIT upon failure', async () => { + const lineWithPit = logs + .split('\n') + .find((line) => + line.includes(`[${defaultKibanaIndex}] REINDEX_SOURCE_TO_TEMP_OPEN_PIT PitId:`) + ); + + expect(lineWithPit).toBeTruthy(); + + const id = JSON5.parse(lineWithPit!).message.split(':')[1]; + expect(id).toBeTruthy(); + + await expect( + transformErrorsKit.client.search({ + pit: { id }, + }) + // throws an exception that cannot search with closed PIT + ).rejects.toThrow(/search_phase_execution_exception/); }); + }); + + describe('configured to discard transform errors and unknown types', () => { + let kit: KibanaMigratorTestKit; + let migrationResults: MigrationResult[]; + let logs: string; - it('discards unknown types', () => { - expect(primaryIndexCounts.deprecated).not.toBeDefined(); - expect(taskIndexCounts.deprecated).not.toBeDefined(); + beforeAll(async () => { + await clearLog(logFilePath); + kit = await getReindexingMigratorTestKit({ + logFilePath, + filterDeprecated: true, + }); + migrationResults = await kit.runMigrations(); + logs = await readLog(logFilePath); }); - it('copies all of the documents', () => { - expect(primaryIndexCounts.basic).toEqual(BASELINE_DOCUMENTS_PER_TYPE_500K); - expect(taskIndexCounts.task).toEqual(BASELINE_DOCUMENTS_PER_TYPE_500K); + it('migrates documents to the highest version', async () => { + const typeMigrationVersions: Record = { + basic: '10.1.0', // did not define any model versions + complex: '10.2.0', + task: '10.2.0', + }; + + const resultSets = await Promise.all( + baselineTypes.map(({ name: type }) => + kit.client.search({ + index: [defaultKibanaIndex, defaultKibanaTaskIndex], + query: { + bool: { + should: [ + { + term: { type }, + }, + ], + }, + }, + }) + ) + ); + + expect( + resultSets + .flatMap((result) => result.hits.hits) + .every( + (document) => + document._source.typeMigrationVersion === + typeMigrationVersions[document._source.type] + ) + ).toEqual(true); }); - it('executes the excludeOnUpgrade hook', () => { - expect(primaryIndexCounts.complex).toEqual(BASELINE_DOCUMENTS_PER_TYPE_500K / 2); + describe('a migrator performing a compatible upgrade migration', () => { + it('updates target mappings when mappings have changed', () => { + expect(logs).toMatch( + `[${defaultKibanaTaskIndex}] CHECK_TARGET_MAPPINGS -> UPDATE_TARGET_MAPPINGS_PROPERTIES.` + ); + expect(logs).toMatch( + `[${defaultKibanaTaskIndex}] UPDATE_TARGET_MAPPINGS_PROPERTIES -> UPDATE_TARGET_MAPPINGS_PROPERTIES_WAIT_FOR_TASK.` + ); + expect(logs).toMatch( + `[${defaultKibanaTaskIndex}] UPDATE_TARGET_MAPPINGS_PROPERTIES_WAIT_FOR_TASK -> UPDATE_TARGET_MAPPINGS_META.` + ); + expect(logs).toMatch( + `[${defaultKibanaTaskIndex}] UPDATE_TARGET_MAPPINGS_META -> CHECK_VERSION_INDEX_READY_ACTIONS.` + ); + }); + + it('updates the version aliases during the PREPARE_COMPATIBLE_MIGRATION step', () => { + expect(logs).toMatch(`[${defaultKibanaTaskIndex}] PREPARE_COMPATIBLE_MIGRATION`); + expect(logs).not.toMatch(`[${defaultKibanaTaskIndex}] MARK_VERSION_INDEX_READY`); + expect(logs).toMatch( + `[${defaultKibanaTaskIndex}] CHECK_VERSION_INDEX_READY_ACTIONS -> DONE.` + ); + }); }); - }); - it('returns a migrated status for each SO index', () => { - // omit elapsedMs as it varies in each execution - expect(migrationResults.map((result) => omit(result, 'elapsedMs'))).toMatchInlineSnapshot(` - Array [ - Object { - "destIndex": ".kibana_migrator_9.1.0_001", - "sourceIndex": ".kibana_migrator_9.0.0_001", - "status": "migrated", - }, - Object { - "destIndex": ".kibana_migrator_tasks_9.0.0_001", - "sourceIndex": ".kibana_migrator_tasks_9.0.0_001", - "status": "migrated", - }, - ] - `); - }); + describe('a migrator performing a reindexing migration', () => { + describe('when an index contains SO types with incompatible mappings', () => { + it('executes the reindexing migration steps', () => { + expect(logs).toMatch(`[${defaultKibanaIndex}] INIT -> WAIT_FOR_YELLOW_SOURCE.`); + expect(logs).toMatch( + `[${defaultKibanaIndex}] WAIT_FOR_YELLOW_SOURCE -> UPDATE_SOURCE_MAPPINGS_PROPERTIES.` + ); + expect(logs).toMatch( + `[${defaultKibanaIndex}] UPDATE_SOURCE_MAPPINGS_PROPERTIES -> CHECK_CLUSTER_ROUTING_ALLOCATION.` + ); + expect(logs).toMatch( + `[${defaultKibanaIndex}] CHECK_CLUSTER_ROUTING_ALLOCATION -> CHECK_UNKNOWN_DOCUMENTS.` + ); + expect(logs).toMatch( + `[${defaultKibanaIndex}] CHECK_TARGET_MAPPINGS -> UPDATE_TARGET_MAPPINGS_PROPERTIES.` + ); + expect(logs).toMatch( + `[${defaultKibanaIndex}] UPDATE_TARGET_MAPPINGS_META -> CHECK_VERSION_INDEX_READY_ACTIONS.` + ); + expect(logs).toMatch( + `[${defaultKibanaIndex}] CHECK_VERSION_INDEX_READY_ACTIONS -> MARK_VERSION_INDEX_READY.` + ); + expect(logs).toMatch(`[${defaultKibanaIndex}] MARK_VERSION_INDEX_READY -> DONE.`); - it('each migrator takes less than 60 seconds', () => { - expect( - (migrationResults as Array<{ elapsedMs?: number }>).every( - ({ elapsedMs }) => !elapsedMs || elapsedMs < 60000 - ) - ).toEqual(true); + expect(logs).not.toMatch(`[${defaultKibanaIndex}] CREATE_NEW_TARGET`); + expect(logs).not.toMatch(`[${defaultKibanaIndex}] CLEANUP_UNKNOWN_AND_EXCLUDED`); + expect(logs).not.toMatch(`[${defaultKibanaIndex}] PREPARE_COMPATIBLE_MIGRATION`); + }); + }); + + describe('copies the right documents over to the target indices', () => { + let primaryIndexCounts: Record; + let taskIndexCounts: Record; + + beforeAll(async () => { + primaryIndexCounts = await getAggregatedTypesCount(kit.client, defaultKibanaIndex); + taskIndexCounts = await getAggregatedTypesCount(kit.client, defaultKibanaTaskIndex); + }); + + it('copies documents to the right indices depending on their types', () => { + expect(primaryIndexCounts.basic).toBeDefined(); + expect(primaryIndexCounts.complex).toBeDefined(); + expect(primaryIndexCounts.task).not.toBeDefined(); + + expect(taskIndexCounts.basic).not.toBeDefined(); + expect(taskIndexCounts.complex).not.toBeDefined(); + expect(taskIndexCounts.task).toBeDefined(); + }); + + it('discards REMOVED_TYPES', () => { + expect(primaryIndexCounts.server).not.toBeDefined(); + expect(taskIndexCounts.server).not.toBeDefined(); + }); + + it('discards unknown types', () => { + expect(primaryIndexCounts.deprecated).not.toBeDefined(); + expect(taskIndexCounts.deprecated).not.toBeDefined(); + }); + + it('copies all of the documents', () => { + expect(primaryIndexCounts.basic).toEqual(BASELINE_DOCUMENTS_PER_TYPE_500K); + expect(taskIndexCounts.task).toEqual(BASELINE_DOCUMENTS_PER_TYPE_500K); + }); + + it('executes the excludeOnUpgrade hook', () => { + // we discard the second half with exclude on upgrade (firstHalf !== true) + // then we discard half all multiples of 100 (1% of them) + expect(primaryIndexCounts.complex).toEqual( + BASELINE_DOCUMENTS_PER_TYPE_500K / 2 - BASELINE_DOCUMENTS_PER_TYPE_500K / 2 / 100 + ); + }); + }); + + it('returns a migrated status for each SO index', () => { + // omit elapsedMs as it varies in each execution + expect(migrationResults.map((result) => omit(result, 'elapsedMs'))) + .toMatchInlineSnapshot(` + Array [ + Object { + "destIndex": ".kibana_migrator_9.1.0_001", + "sourceIndex": ".kibana_migrator_9.0.0_001", + "status": "migrated", + }, + Object { + "destIndex": ".kibana_migrator_tasks_9.0.0_001", + "sourceIndex": ".kibana_migrator_tasks_9.0.0_001", + "status": "migrated", + }, + ] + `); + }); + + it('each migrator takes less than 60 seconds', () => { + expect( + (migrationResults as Array<{ elapsedMs?: number }>).every( + ({ elapsedMs }) => !elapsedMs || elapsedMs < 60000 + ) + ).toEqual(true); + }); + }); }); }); }); diff --git a/src/core/server/integration_tests/saved_objects/migrations/group2/check_target_mappings.test.ts b/src/core/server/integration_tests/saved_objects/migrations/group2/check_target_mappings.test.ts deleted file mode 100644 index 4c0721eb04e6f..0000000000000 --- a/src/core/server/integration_tests/saved_objects/migrations/group2/check_target_mappings.test.ts +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import Path from 'path'; -import fs from 'fs/promises'; -import { Env } from '@kbn/config'; -import { REPO_ROOT } from '@kbn/repo-info'; -import { getEnvOptions } from '@kbn/config-mocks'; -import { Root } from '@kbn/core-root-server-internal'; -import { - createRootWithCorePlugins, - createTestServers, - type TestElasticsearchUtils, -} from '@kbn/core-test-helpers-kbn-server'; - -const logFilePath = Path.join(__dirname, 'check_target_mappings.log'); - -// Failing 9.0 version update: https://github.com/elastic/kibana/issues/192624 -describe.skip('migration v2 - CHECK_TARGET_MAPPINGS', () => { - let esServer: TestElasticsearchUtils; - let root: Root; - let logs: string; - - beforeEach(async () => { - await fs.unlink(logFilePath).catch(() => {}); - }); - - afterEach(async () => { - await root?.shutdown(); - await esServer?.stop(); - }); - - it('is not run for new installations', async () => { - const { startES } = createTestServers({ - adjustTimeout: (t: number) => jest.setTimeout(t), - settings: { - es: { - license: 'basic', - }, - }, - }); - - root = createRoot(); - esServer = await startES(); - await root.preboot(); - await root.setup(); - await root.start(); - - // Check for migration steps present in the logs - logs = await fs.readFile(logFilePath, 'utf-8'); - - expect(logs).toMatch('CREATE_NEW_TARGET'); - expect(logs).not.toMatch('CHECK_TARGET_MAPPINGS'); - }); - - describe('when the indices are aligned with the stack version', () => { - it('skips UPDATE_TARGET_MAPPINGS_PROPERTIES if there are no changes in the mappings', async () => { - const { startES } = createTestServers({ - adjustTimeout: (t: number) => jest.setTimeout(t), - settings: { - es: { - license: 'basic', - }, - }, - }); - - esServer = await startES(); - - // start Kibana a first time to create the system indices - root = createRoot(); - await root.preboot(); - await root.setup(); - await root.start(); - - // stop Kibana and remove logs - await root.shutdown(); - await fs.unlink(logFilePath).catch(() => {}); - - root = createRoot(); - await root.preboot(); - await root.setup(); - await root.start(); - - // Check for migration steps present in the logs - logs = await fs.readFile(logFilePath, 'utf-8'); - expect(logs).not.toMatch('CREATE_NEW_TARGET'); - expect(logs).toMatch('CHECK_TARGET_MAPPINGS -> CHECK_VERSION_INDEX_READY_ACTIONS'); - expect(logs).not.toMatch('UPDATE_TARGET_MAPPINGS_PROPERTIES'); - expect(logs).not.toMatch('UPDATE_TARGET_MAPPINGS_PROPERTIES_WAIT_FOR_TASK'); - expect(logs).not.toMatch('UPDATE_TARGET_MAPPINGS_META'); - }); - }); - - describe('when upgrading to a newer stack version', () => { - const currentVersion = Env.createDefault(REPO_ROOT, getEnvOptions()).packageInfo.version; - - it('runs UPDATE_TARGET_MAPPINGS_PROPERTIES when mappings have changed', async () => { - const { startES } = createTestServers({ - adjustTimeout: (t: number) => jest.setTimeout(t), - settings: { - es: { - license: 'basic', - dataArchive: Path.join(__dirname, '..', 'archives', '8.4.0_with_sample_data_logs.zip'), - }, - }, - }); - - esServer = await startES(); - - // start Kibana a first time to create the system indices - root = createRoot(currentVersion); // we discard a bunch of SO that have become unknown since 8.4.0 - await root.preboot(); - await root.setup(); - await root.start(); - - // Check for migration steps present in the logs - logs = await fs.readFile(logFilePath, 'utf-8'); - expect(logs).not.toMatch('[.kibana] CREATE_NEW_TARGET'); - expect(logs).toMatch('CHECK_TARGET_MAPPINGS -> UPDATE_TARGET_MAPPINGS_PROPERTIES'); - expect(logs).toMatch( - 'UPDATE_TARGET_MAPPINGS_PROPERTIES -> UPDATE_TARGET_MAPPINGS_PROPERTIES_WAIT_FOR_TASK' - ); - expect(logs).toMatch( - 'UPDATE_TARGET_MAPPINGS_PROPERTIES_WAIT_FOR_TASK -> UPDATE_TARGET_MAPPINGS_META' - ); - expect(logs).toMatch('UPDATE_TARGET_MAPPINGS_META -> CHECK_VERSION_INDEX_READY_ACTIONS'); - expect(logs).toMatch('Migration completed'); - }); - }); -}); - -function createRoot(discardUnknownObjects?: string, customKibanaVersion?: string) { - return createRootWithCorePlugins( - { - migrations: { - discardUnknownObjects, - }, - logging: { - appenders: { - file: { - type: 'file', - fileName: logFilePath, - layout: { - type: 'json', - }, - }, - }, - loggers: [ - { - name: 'root', - level: 'info', - appenders: ['file'], - }, - ], - }, - }, - { - oss: true, - }, - customKibanaVersion - ); -} diff --git a/src/core/server/integration_tests/saved_objects/migrations/group2/cleanup.test.ts b/src/core/server/integration_tests/saved_objects/migrations/group2/cleanup.test.ts deleted file mode 100644 index 057db91eb7b55..0000000000000 --- a/src/core/server/integration_tests/saved_objects/migrations/group2/cleanup.test.ts +++ /dev/null @@ -1,192 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import Path from 'path'; -import Fs from 'fs'; -import Util from 'util'; -import JSON5 from 'json5'; -import { type TestElasticsearchUtils } from '@kbn/core-test-helpers-kbn-server'; -import { SavedObjectsType } from '@kbn/core-saved-objects-server'; -import { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; -import { getMigrationDocLink } from '../test_utils'; -import { - clearLog, - currentVersion, - defaultKibanaIndex, - getKibanaMigratorTestKit, - nextMinor, - startElasticsearch, -} from '../kibana_migrator_test_kit'; - -const migrationDocLink = getMigrationDocLink().resolveMigrationFailures; -const logFilePath = Path.join(__dirname, 'cleanup.log'); - -const asyncReadFile = Util.promisify(Fs.readFile); - -describe('migration v2', () => { - let esServer: TestElasticsearchUtils['es']; - let esClient: ElasticsearchClient; - - beforeAll(async () => { - esServer = await startElasticsearch(); - }); - - beforeEach(async () => { - esClient = await setupBaseline(); - await clearLog(logFilePath); - }); - - it('clean ups if migration fails', async () => { - const { runMigrations } = await setupNextMinor(); - - await expect(runMigrations()).rejects.toThrowErrorMatchingInlineSnapshot(` - "Unable to complete saved object migrations for the [${defaultKibanaIndex}] index: Migrations failed. Reason: 1 corrupt saved object documents were found: corrupt:2baf4de0-a6d4-11ed-ba5a-39196fc76e60 - - To allow migrations to proceed, please delete or fix these documents. - Note that you can configure Kibana to automatically discard corrupt documents and transform errors for this migration. - Please refer to ${migrationDocLink} for more information." - `); - - const logFileContent = await asyncReadFile(logFilePath, 'utf-8'); - const records = logFileContent - .split('\n') - .filter(Boolean) - .map((str) => JSON5.parse(str)); - - const logRecordWithPit = records.find( - (rec) => rec.message === `[${defaultKibanaIndex}] REINDEX_SOURCE_TO_TEMP_OPEN_PIT RESPONSE` - ); - - expect(logRecordWithPit).toBeTruthy(); - }); - - afterEach(async () => { - await esClient?.indices.delete({ index: `${defaultKibanaIndex}_${currentVersion}_001` }); - }); - - afterAll(async () => { - await esServer?.stop(); - }); -}); - -const setupBaseline = async () => { - const typesCurrent: SavedObjectsType[] = [ - { - name: 'complex', - hidden: false, - namespaceType: 'agnostic', - mappings: { - properties: { - name: { type: 'text' }, - value: { type: 'integer' }, - }, - }, - migrations: {}, - }, - ]; - - const savedObjects = [ - { - id: 'complex:4baf4de0-a6d4-11ed-ba5a-39196fc76e60', - body: { - type: 'complex', - complex: { - name: 'foo', - value: 5, - }, - references: [], - coreMigrationVersion: currentVersion, - updated_at: '2023-02-07T11:04:44.914Z', - created_at: '2023-02-07T11:04:44.914Z', - }, - }, - { - id: 'corrupt:2baf4de0-a6d4-11ed-ba5a-39196fc76e60', // incorrect id => corrupt object - body: { - type: 'complex', - complex: { - name: 'bar', - value: 3, - }, - references: [], - coreMigrationVersion: currentVersion, - updated_at: '2023-02-07T11:04:44.914Z', - created_at: '2023-02-07T11:04:44.914Z', - }, - }, - ]; - - const { runMigrations, client } = await getKibanaMigratorTestKit({ - types: typesCurrent, - logFilePath, - }); - - await runMigrations(); - - // inject corrupt saved objects directly using esClient - await Promise.all( - savedObjects.map((savedObject) => - client.create({ - index: defaultKibanaIndex, - refresh: 'wait_for', - ...savedObject, - }) - ) - ); - - return client; -}; - -const setupNextMinor = async () => { - const typesNextMinor: SavedObjectsType[] = [ - { - name: 'complex', - hidden: false, - namespaceType: 'agnostic', - mappings: { - properties: { - name: { type: 'keyword' }, - value: { type: 'long' }, - }, - }, - migrations: { - [nextMinor]: (doc) => doc, - }, - }, - ]; - - return await getKibanaMigratorTestKit({ - types: typesNextMinor, - kibanaVersion: nextMinor, - logFilePath, - settings: { - migrations: { - skip: false, - }, - logging: { - appenders: { - file: { - type: 'file', - fileName: logFilePath, - layout: { - type: 'json', - }, - }, - }, - loggers: [ - { - name: 'root', - appenders: ['file'], - level: 'debug', // DEBUG logs are required to retrieve the PIT _id from the action response logs - }, - ], - }, - }, - }); -}; diff --git a/src/core/server/integration_tests/saved_objects/migrations/group2/collects_corrupt_docs.test.ts b/src/core/server/integration_tests/saved_objects/migrations/group2/collects_corrupt_docs.test.ts deleted file mode 100644 index 2e78229709060..0000000000000 --- a/src/core/server/integration_tests/saved_objects/migrations/group2/collects_corrupt_docs.test.ts +++ /dev/null @@ -1,223 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import Path from 'path'; -import Fs from 'fs'; -import Util from 'util'; -import { - createTestServers, - createRootWithCorePlugins, - type TestElasticsearchUtils, -} from '@kbn/core-test-helpers-kbn-server'; -import { Root } from '@kbn/core-root-server-internal'; -import { getMigrationDocLink } from '../test_utils'; - -const migrationDocLink = getMigrationDocLink().resolveMigrationFailures; -const logFilePath = Path.join(__dirname, 'collects_corrupt_docs.log'); - -const asyncUnlink = Util.promisify(Fs.unlink); - -async function removeLogFile() { - // ignore errors if it doesn't exist - await asyncUnlink(logFilePath).catch(() => void 0); -} - -// Failing 9.0 version update: https://github.com/elastic/kibana/issues/192624 -describe.skip('migration v2 with corrupt saved object documents', () => { - let esServer: TestElasticsearchUtils; - let root: Root; - - beforeAll(async () => { - await removeLogFile(); - }); - - afterAll(async () => { - if (root) { - await root.shutdown(); - } - if (esServer) { - await esServer.stop(); - } - }); - - it('collects corrupt saved object documents across batches', async () => { - const { startES } = createTestServers({ - adjustTimeout: (t: number) => jest.setTimeout(t), - settings: { - es: { - license: 'basic', - // contains 4 `foo` objects, all with a `migrationVersion` of `7.13.0` - // - foo:1 and foo:2 have correct values for their `number` property (13 and 42 respectively) - // - foo:3 and foo:4 don't have the property, and will fail during the `7.14.0` registered migration - // contains migrated index with 8.0 aliases to skip migration, but run outdated doc search - dataArchive: Path.join( - __dirname, - '..', - 'archives', - '8.0.0_document_migration_failure.zip' - ), - }, - }, - }); - - root = createRoot(); - - esServer = await startES(); - await root.preboot(); - const coreSetup = await root.setup(); - - coreSetup.savedObjects.registerType({ - name: 'foo', - hidden: false, - mappings: { - properties: { - number: { type: 'integer' }, - }, - }, - namespaceType: 'agnostic', - migrations: { - '7.14.0': (doc) => { - if (doc.attributes.number === undefined) { - throw new Error('"number" attribute should be present'); - } - doc.attributes = { - ...doc.attributes, - number: doc.attributes.number + 9000, - }; - return doc; - }, - }, - }); - - try { - await root.start(); - expect(true).toEqual(false); - } catch (err) { - const errorMessage = err.message as string; - const errorLines = errorMessage.split('\n'); - const errorMessageWithoutStack = errorLines - .filter((line: string) => !line.includes(' at ')) - .join('\n'); - - expect(errorMessageWithoutStack).toMatchInlineSnapshot(` - "Unable to complete saved object migrations for the [.kibana] index: Migrations failed. Reason: 2 transformation errors were encountered: - - foo:3: Error: Migration function for version 7.14.0 threw an error - Caused by: - Error: \\"number\\" attribute should be present - - foo:4: Error: Migration function for version 7.14.0 threw an error - Caused by: - Error: \\"number\\" attribute should be present - - To allow migrations to proceed, please delete or fix these documents. - Note that you can configure Kibana to automatically discard corrupt documents and transform errors for this migration. - Please refer to ${migrationDocLink} for more information." - `); - - expectMatchOrder(errorLines, [ - { - mode: 'equal', - value: '- foo:3: Error: Migration function for version 7.14.0 threw an error', - }, - { - mode: 'contain', - value: 'at transform', - }, - { - mode: 'equal', - value: 'Caused by:', - }, - { - mode: 'equal', - value: 'Error: "number" attribute should be present', - }, - { - mode: 'contain', - value: 'at 7.14.0', - }, - { - mode: 'equal', - value: '- foo:4: Error: Migration function for version 7.14.0 threw an error', - }, - { - mode: 'contain', - value: 'at transform', - }, - { - mode: 'equal', - value: 'Caused by:', - }, - { - mode: 'equal', - value: 'Error: "number" attribute should be present', - }, - { - mode: 'contain', - value: 'at 7.14.0', - }, - ]); - } - }); -}); - -function createRoot() { - return createRootWithCorePlugins( - { - migrations: { - skip: false, - batchSize: 5, - }, - logging: { - appenders: { - file: { - type: 'file', - fileName: logFilePath, - layout: { - type: 'json', - }, - }, - }, - loggers: [ - { - name: 'root', - appenders: ['file'], - level: 'info', - }, - ], - }, - }, - { - oss: false, - } - ); -} - -type FindInOrderPattern = { mode: 'equal'; value: string } | { mode: 'contain'; value: string }; - -const expectMatchOrder = (lines: string[], patterns: FindInOrderPattern[]) => { - let lineIdx = 0; - let patternIdx = 0; - - while (lineIdx < lines.length && patternIdx < patterns.length) { - const line = lines[lineIdx]; - const pattern = patterns[patternIdx]; - if (lineMatch(line, pattern)) { - patternIdx++; - } - lineIdx++; - } - - expect(patternIdx).toEqual(patterns.length); -}; - -const lineMatch = (line: string, pattern: FindInOrderPattern) => { - if (pattern.mode === 'contain') { - return line.trim().includes(pattern.value.trim()); - } - return line.trim() === pattern.value.trim(); -}; diff --git a/src/core/server/integration_tests/saved_objects/migrations/group2/corrupt_outdated_docs.test.ts b/src/core/server/integration_tests/saved_objects/migrations/group2/corrupt_outdated_docs.test.ts deleted file mode 100644 index b342882f468b3..0000000000000 --- a/src/core/server/integration_tests/saved_objects/migrations/group2/corrupt_outdated_docs.test.ts +++ /dev/null @@ -1,185 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import Path from 'path'; -import Fs from 'fs'; -import Util from 'util'; -import { - createTestServers, - createRootWithCorePlugins, - type TestElasticsearchUtils, -} from '@kbn/core-test-helpers-kbn-server'; -import { Root } from '@kbn/core-root-server-internal'; - -const logFilePath = Path.join(__dirname, 'corrupt_outdated_docs.log'); - -const asyncUnlink = Util.promisify(Fs.unlink); - -async function removeLogFile() { - // ignore errors if it doesn't exist - await asyncUnlink(logFilePath).catch(() => void 0); -} - -// Failing 9.0 version update: https://github.com/elastic/kibana/issues/192624 -describe.skip('migration v2 with corrupt saved object documents', () => { - let esServer: TestElasticsearchUtils; - let root: Root; - - beforeAll(async () => { - await removeLogFile(); - }); - - afterAll(async () => { - if (root) { - await root.shutdown(); - } - if (esServer) { - await esServer.stop(); - } - }); - - it.skip('collects corrupt saved object documents across batches', async () => { - const { startES } = createTestServers({ - adjustTimeout: (t: number) => jest.setTimeout(t), - settings: { - es: { - license: 'basic', - // original uncorrupt SO: - // { - // type: 'foo', // 'bar', 'baz' - // foo: {}, // bar: {}, baz: {} - // migrationVersion: { - // foo: '7.13.0', - // }, - // }, - // original corrupt SO example: - // { - // id: 'bar:123' // '123' etc - // type: 'foo', - // foo: {}, - // migrationVersion: { - // foo: '7.13.0', - // }, - // }, - // contains migrated index with 8.0 aliases to skip migration, but run outdated doc search - dataArchive: Path.join( - __dirname, - 'archives', - '8.0.0_migrated_with_corrupt_outdated_docs.zip' - ), - }, - }, - }); - - root = createRoot(); - - esServer = await startES(); - await root.preboot(); - const coreSetup = await root.setup(); - - coreSetup.savedObjects.registerType({ - name: 'foo', - hidden: false, - mappings: { properties: {} }, - namespaceType: 'agnostic', - migrations: { - '7.14.0': (doc) => doc, - }, - }); - coreSetup.savedObjects.registerType({ - name: 'bar', - hidden: false, - mappings: { properties: {} }, - namespaceType: 'agnostic', - migrations: { - '7.14.0': (doc) => doc, - }, - }); - coreSetup.savedObjects.registerType({ - name: 'baz', - hidden: false, - mappings: { properties: {} }, - namespaceType: 'agnostic', - migrations: { - '7.14.0': (doc) => doc, - }, - }); - try { - await root.start(); - } catch (err) { - const errorMessage = err.message; - expect( - errorMessage.startsWith( - 'Unable to complete saved object migrations for the [.kibana] index: Migrations failed. Reason: 19 corrupt saved object documents were found: ' - ) - ).toBeTruthy(); - expect( - errorMessage.endsWith( - 'To allow migrations to proceed, please delete or fix these documents.' - ) - ).toBeTruthy(); - const expectedCorruptDocIds = [ - '"foo:my_name"', - '"123"', - '"456"', - '"789"', - '"foo:other_name"', - '"bar:123"', - '"baz:123"', - '"bar:345"', - '"bar:890"', - '"baz:456"', - '"baz:789"', - '"bar:other_name"', - '"baz:other_name"', - '"bar:my_name"', - '"baz:my_name"', - '"foo:123"', - '"foo:456"', - '"foo:789"', - '"foo:other"', - ]; - for (const corruptDocId of expectedCorruptDocIds) { - expect(errorMessage.includes(corruptDocId)).toBeTruthy(); - } - } - }); -}); - -function createRoot() { - return createRootWithCorePlugins( - { - migrations: { - skip: false, - batchSize: 5, - }, - logging: { - appenders: { - file: { - type: 'file', - fileName: logFilePath, - layout: { - type: 'json', - }, - }, - }, - loggers: [ - { - name: 'root', - appenders: ['file'], - level: 'info', - }, - ], - }, - }, - { - oss: true, - } - ); -} diff --git a/src/core/server/integration_tests/saved_objects/migrations/group2/multiple_kibana_nodes.test.ts b/src/core/server/integration_tests/saved_objects/migrations/group2/multiple_kibana_nodes.test.ts index 9550e46136a47..9bd876166c246 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/group2/multiple_kibana_nodes.test.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/group2/multiple_kibana_nodes.test.ts @@ -107,8 +107,7 @@ async function createRoot({ logFileName }: CreateRootConfig) { // suite is very long, the 10mins default can cause timeouts jest.setTimeout(15 * 60 * 1000); -// FLAKY: https://github.com/elastic/kibana/issues/156117 -describe.skip('migration v2', () => { +describe('migration v2', () => { let esServer: TestElasticsearchUtils; let rootA: Root; let rootB: Root; diff --git a/src/core/server/integration_tests/saved_objects/migrations/group2/outdated_docs.test.ts b/src/core/server/integration_tests/saved_objects/migrations/group2/outdated_docs.test.ts deleted file mode 100644 index 2c45dab10dff2..0000000000000 --- a/src/core/server/integration_tests/saved_objects/migrations/group2/outdated_docs.test.ts +++ /dev/null @@ -1,150 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import Path from 'path'; -import Fs from 'fs'; -import Util from 'util'; -import { kibanaPackageJson as pkg } from '@kbn/repo-info'; -import { - createRootWithCorePlugins, - createTestServers, - type TestElasticsearchUtils, -} from '@kbn/core-test-helpers-kbn-server'; -import type { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; -import { Root } from '@kbn/core-root-server-internal'; - -const logFilePath = Path.join(__dirname, 'outdated_docs.log'); - -const asyncUnlink = Util.promisify(Fs.unlink); -async function removeLogFile() { - // ignore errors if it doesn't exist - await asyncUnlink(logFilePath).catch(() => void 0); -} - -// Failing 9.0 version update: https://github.com/elastic/kibana/issues/192624 -describe.skip('migration v2', () => { - let esServer: TestElasticsearchUtils; - let root: Root; - - beforeAll(async () => { - await removeLogFile(); - }); - - afterAll(async () => { - if (root) { - await root.shutdown(); - } - if (esServer) { - await esServer.stop(); - } - }); - - it('migrates the documents to the highest version', async () => { - const migratedIndexAlias = `.kibana_${pkg.version}`; - const { startES } = createTestServers({ - adjustTimeout: (t: number) => jest.setTimeout(t), - settings: { - es: { - license: 'basic', - // original SO: - // { - // type: 'foo', - // foo: {}, - // migrationVersion: { - // foo: '7.13.0', - // }, - // }, - // contains migrated index with 8.0 aliases to skip migration, but run outdated doc search - dataArchive: Path.join( - __dirname, - '..', - 'archives', - '8.0.0_migrated_with_outdated_docs.zip' - ), - }, - }, - }); - - root = createRoot(); - - esServer = await startES(); - await root.preboot(); - const coreSetup = await root.setup(); - - coreSetup.savedObjects.registerType({ - name: 'foo', - hidden: false, - mappings: { properties: {} }, - namespaceType: 'agnostic', - migrations: { - '7.14.0': (doc) => doc, - }, - }); - - const coreStart = await root.start(); - const esClient = coreStart.elasticsearch.client.asInternalUser; - - const migratedDocs = await fetchDocs(esClient, migratedIndexAlias); - - expect(migratedDocs.length).toBe(1); - const [doc] = migratedDocs; - expect(doc._source.coreMigrationVersion).toBe('8.8.0'); - expect(doc._source.typeMigrationVersion).toBe('7.14.0'); - }); -}); - -function createRoot() { - return createRootWithCorePlugins( - { - migrations: { - skip: false, - }, - logging: { - appenders: { - file: { - type: 'file', - fileName: logFilePath, - layout: { - type: 'json', - }, - }, - }, - loggers: [ - { - name: 'root', - level: 'info', - appenders: ['file'], - }, - ], - }, - }, - { - oss: true, - } - ); -} - -async function fetchDocs(esClient: ElasticsearchClient, index: string) { - const body = await esClient.search({ - index, - body: { - query: { - bool: { - should: [ - { - term: { type: 'foo' }, - }, - ], - }, - }, - }, - }); - - return body.hits.hits; -} diff --git a/src/core/server/integration_tests/saved_objects/migrations/group3/incompatible_cluster_routing_allocation.test.ts b/src/core/server/integration_tests/saved_objects/migrations/group3/incompatible_cluster_routing_allocation.test.ts index b4d1aaa24675c..ee6c499da7ce8 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/group3/incompatible_cluster_routing_allocation.test.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/group3/incompatible_cluster_routing_allocation.test.ts @@ -97,8 +97,7 @@ async function updateRoutingAllocations( }); } -// Failing 9.0 version update: https://github.com/elastic/kibana/issues/192624 -describe.skip('incompatible_cluster_routing_allocation', () => { +describe('incompatible_cluster_routing_allocation', () => { let client: ElasticsearchClient; let root: Root; diff --git a/src/core/server/integration_tests/saved_objects/migrations/group3/multiple_es_nodes.test.ts b/src/core/server/integration_tests/saved_objects/migrations/group3/multiple_es_nodes.test.ts index e7ffab2b7c7ac..490dea4c06be6 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/group3/multiple_es_nodes.test.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/group3/multiple_es_nodes.test.ts @@ -95,8 +95,7 @@ function createRoot({ logFileName, hosts }: RootConfig) { }); } -// Failing 9.0 version update: https://github.com/elastic/kibana/issues/192624 -describe.skip('migration v2', () => { +describe('migration v2', () => { let esServer: TestElasticsearchUtils; let root: Root; const migratedIndexAlias = `.kibana_${pkg.version}`; diff --git a/src/core/server/integration_tests/saved_objects/migrations/group5/active_delete.test.ts b/src/core/server/integration_tests/saved_objects/migrations/group5/active_delete.test.ts index 8cfcb1ea5b745..9c42e966b329e 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/group5/active_delete.test.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/group5/active_delete.test.ts @@ -137,32 +137,6 @@ describe('when upgrading to a new stack version', () => { await clearLog(); }); - it('fails if unknown documents exist', async () => { - // remove the 'deprecated' type from the mappings, so that it is considered unknown - const { runMigrations } = await getUpToDateMigratorTestKit({ - filterDeprecated: true, - }); - - try { - await runMigrations(); - } catch (err) { - const errorMessage = err.message; - expect(errorMessage).toMatch( - `Unable to complete saved object migrations for the [${defaultKibanaIndex}] index: Migration failed because some documents were found which use unknown saved object types:` - ); - expect(errorMessage).toMatch( - 'To proceed with the migration you can configure Kibana to discard unknown saved objects for this migration.' - ); - expect(errorMessage).toMatch(/deprecated:.*\(type: "deprecated"\)/); - } - - const logs = await readLog(); - expect(logs).toMatch('INIT -> WAIT_FOR_YELLOW_SOURCE.'); - expect(logs).toMatch('WAIT_FOR_YELLOW_SOURCE -> UPDATE_SOURCE_MAPPINGS_PROPERTIES.'); - expect(logs).toMatch('UPDATE_SOURCE_MAPPINGS_PROPERTIES -> CLEANUP_UNKNOWN_AND_EXCLUDED.'); - expect(logs).toMatch('CLEANUP_UNKNOWN_AND_EXCLUDED -> FATAL.'); - }); - it('proceeds if there are no unknown documents', async () => { const { client, runMigrations } = await getUpToDateMigratorTestKit(); @@ -289,35 +263,6 @@ describe('when upgrading to a new stack version', () => { await clearLog(); }); - it('fails if unknown documents exist', async () => { - const { runMigrations } = await getCompatibleMigratorTestKit({ - filterDeprecated: true, // remove the 'deprecated' type from the mappings, so that it is considered unknown - }); - - try { - await runMigrations(); - } catch (err) { - const errorMessage = err.message; - expect(errorMessage).toMatch( - `Unable to complete saved object migrations for the [${defaultKibanaIndex}] index: Migration failed because some documents were found which use unknown saved object types:` - ); - expect(errorMessage).toMatch( - 'To proceed with the migration you can configure Kibana to discard unknown saved objects for this migration.' - ); - expect(errorMessage).toMatch(/deprecated:.*\(type: "deprecated"\)/); - } - - const logs = await readLog(); - expect(logs).toMatch(`[${defaultKibanaIndex}] INIT -> WAIT_FOR_YELLOW_SOURCE.`); - expect(logs).toMatch( - `[${defaultKibanaIndex}] WAIT_FOR_YELLOW_SOURCE -> UPDATE_SOURCE_MAPPINGS_PROPERTIES.` - ); // this step is run only if mappings are compatible but NOT equal - expect(logs).toMatch( - `[${defaultKibanaIndex}] UPDATE_SOURCE_MAPPINGS_PROPERTIES -> CLEANUP_UNKNOWN_AND_EXCLUDED.` - ); - expect(logs).toMatch(`[${defaultKibanaIndex}] CLEANUP_UNKNOWN_AND_EXCLUDED -> FATAL.`); - }); - it('proceeds if there are no unknown documents', async () => { const { client, runMigrations } = await getCompatibleMigratorTestKit(); @@ -376,10 +321,11 @@ describe('when upgrading to a new stack version', () => { expect(logs).toMatch('MARK_VERSION_INDEX_READY -> DONE'); const counts = await getAggregatedTypesCount(client); + // for 'complex' objects, we discard second half and also multiples of 100 expect(counts).toMatchInlineSnapshot(` Object { "basic": 10, - "complex": 5, + "complex": 4, "deprecated": 10, "task": 10, } diff --git a/src/core/server/integration_tests/saved_objects/migrations/group6/single_migrator_failures.test.ts b/src/core/server/integration_tests/saved_objects/migrations/group6/single_migrator_failures.test.ts index b000f0d775358..358ceea5c006a 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/group6/single_migrator_failures.test.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/group6/single_migrator_failures.test.ts @@ -26,8 +26,8 @@ import { getReindexingBaselineTypes, } from '../kibana_migrator_test_kit.fixtures'; -export const logFilePathFirstRun = join(__dirname, 'dot_kibana_split_1st_run.test.log'); -export const logFilePathSecondRun = join(__dirname, 'dot_kibana_split_2nd_run.test.log'); +export const logFilePathFirstRun = join(__dirname, 'single_migrator_failures_1st_run.test.log'); +export const logFilePathSecondRun = join(__dirname, 'single_migrator_failures_2nd_run.test.log'); const kibanaSplitIndex = `${defaultKibanaIndex}_split`; const tasksToNewIndex = getReindexingBaselineTypes(true).map((type) => { @@ -74,6 +74,7 @@ describe('split .kibana index into multiple system indices', () => { settings: { migrations: { discardUnknownObjects: nextMinor, + discardCorruptObjects: nextMinor, }, }, }); @@ -249,6 +250,7 @@ describe('split .kibana index into multiple system indices', () => { settings: { migrations: { discardUnknownObjects: nextMinor, + discardCorruptObjects: nextMinor, }, }, }); diff --git a/src/core/server/integration_tests/saved_objects/migrations/kibana_migrator_test_kit.fixtures.ts b/src/core/server/integration_tests/saved_objects/migrations/kibana_migrator_test_kit.fixtures.ts index 73437885fc7a7..1ec300c075ff2 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/kibana_migrator_test_kit.fixtures.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/kibana_migrator_test_kit.fixtures.ts @@ -141,6 +141,40 @@ export const getReindexingBaselineTypes = (filterDeprecated: boolean) => createdAt: { type: 'date' }, }, }, + { + type: 'unsafe_transform', + transformFn: (doc) => { + if (doc.attributes.value % 100 === 0) { + throw new Error( + `Cannot convert 'complex' objects with values that are multiple of 100 ${doc.id}` + ); + } + return { document: doc }; + }, + }, + ], + }, + }, + }; + } else if (type.name === 'task') { + return { + ...type, + mappings: { + properties: { + ...type.mappings.properties, + lastRun: { type: 'date' }, + }, + }, + modelVersions: { + ...type.modelVersions, + 2: { + changes: [ + { + type: 'mappings_addition', + addedMappings: { + lastRun: { type: 'date' }, + }, + }, ], }, }, @@ -268,13 +302,21 @@ export const getCompatibleMigratorTestKit = async ({ export const getReindexingMigratorTestKit = async ({ logFilePath = defaultLogFilePath, filterDeprecated = false, + types = getReindexingBaselineTypes(filterDeprecated), kibanaVersion = nextMinor, settings = {}, }: GetMutatedMigratorParams = {}) => { return await getKibanaMigratorTestKit({ logFilePath, - types: getReindexingBaselineTypes(filterDeprecated), + types, kibanaVersion, - settings, + settings: { + ...settings, + migrations: { + discardUnknownObjects: nextMinor, + discardCorruptObjects: nextMinor, + ...settings.migrations, + }, + }, }); }; diff --git a/src/dev/license_checker/config.ts b/src/dev/license_checker/config.ts index 7f6a9e53f6678..df5da2aff7183 100644 --- a/src/dev/license_checker/config.ts +++ b/src/dev/license_checker/config.ts @@ -87,7 +87,7 @@ export const LICENSE_OVERRIDES = { 'jsts@1.6.2': ['Eclipse Distribution License - v 1.0'], // cf. https://github.com/bjornharrtell/jsts '@mapbox/jsonlint-lines-primitives@2.0.2': ['MIT'], // license in readme https://github.com/tmcw/jsonlint '@elastic/ems-client@8.5.3': ['Elastic License 2.0'], - '@elastic/eui@95.10.1': ['Elastic License 2.0 OR AGPL-3.0-only OR SSPL-1.0'], + '@elastic/eui@95.11.0': ['Elastic License 2.0 OR AGPL-3.0-only OR SSPL-1.0'], 'language-subtag-registry@0.3.21': ['CC-BY-4.0'], // retired ODC‑By license https://github.com/mattcg/language-subtag-registry 'buffers@0.1.1': ['MIT'], // license in importing module https://www.npmjs.com/package/binary '@bufbuild/protobuf@1.2.1': ['Apache-2.0'], // license (Apache-2.0 AND BSD-3-Clause) diff --git a/src/plugins/console/common/text_object.ts b/src/plugins/console/common/text_object.ts index 26fa59ec437cc..2fb6830f260da 100644 --- a/src/plugins/console/common/text_object.ts +++ b/src/plugins/console/common/text_object.ts @@ -34,5 +34,5 @@ export interface TextObject { * * Used to re-populate a text editor buffer. */ - text: string; + text: string | undefined; } diff --git a/src/plugins/console/public/application/containers/config/config.tsx b/src/plugins/console/public/application/containers/config/config.tsx index 503fdbd9c7354..8605a099182ba 100644 --- a/src/plugins/console/public/application/containers/config/config.tsx +++ b/src/plugins/console/public/application/containers/config/config.tsx @@ -8,16 +8,20 @@ */ import React from 'react'; -import { EuiFlexGroup, EuiFlexItem, EuiPanel, EuiSpacer } from '@elastic/eui'; +import { + EuiFlexGroup, + EuiFlexItem, + EuiPanel, + EuiSpacer, + useIsWithinBreakpoints, +} from '@elastic/eui'; import { Settings } from './settings'; import { Variables } from './variables'; -export interface Props { - isVerticalLayout: boolean; -} +export function Config() { + const isVerticalLayout = useIsWithinBreakpoints(['xs', 's', 'm']); -export function Config({ isVerticalLayout }: Props) { return ( void; } -export const Editor = memo( - ({ loading, isVerticalLayout, inputEditorValue, setInputEditorValue }: Props) => { - const { - services: { storage, objectStorageClient }, - } = useServicesContext(); +export const Editor = memo(({ loading, inputEditorValue, setInputEditorValue }: Props) => { + const { + services: { storage, objectStorageClient }, + } = useServicesContext(); - const editorValueRef = useRef(null); - const { currentTextObject } = useEditorReadContext(); - const { - requestInFlight, - lastResult: { data: requestData, error: requestError }, - } = useRequestReadContext(); + const { currentTextObject } = useEditorReadContext(); - const dispatch = useRequestActionContext(); - const editorDispatch = useEditorActionContext(); + const { + requestInFlight, + lastResult: { data: requestData, error: requestError }, + } = useRequestReadContext(); - const [fetchingAutocompleteEntities, setFetchingAutocompleteEntities] = useState(false); + const dispatch = useRequestActionContext(); + const editorDispatch = useEditorActionContext(); - useEffect(() => { - const debouncedSetFechingAutocompleteEntities = debounce( - setFetchingAutocompleteEntities, - DEBOUNCE_DELAY - ); - const subscription = getAutocompleteInfo().isLoading$.subscribe( - debouncedSetFechingAutocompleteEntities - ); + const [fetchingAutocompleteEntities, setFetchingAutocompleteEntities] = useState(false); - return () => { - subscription.unsubscribe(); - debouncedSetFechingAutocompleteEntities.cancel(); - }; - }, []); + useEffect(() => { + const debouncedSetFechingAutocompleteEntities = debounce( + setFetchingAutocompleteEntities, + DEBOUNCE_DELAY + ); + const subscription = getAutocompleteInfo().isLoading$.subscribe( + debouncedSetFechingAutocompleteEntities + ); - const [firstPanelSize, secondPanelSize] = storage.get(StorageKeys.SIZE, [ - INITIAL_PANEL_SIZE, - INITIAL_PANEL_SIZE, - ]); + return () => { + subscription.unsubscribe(); + debouncedSetFechingAutocompleteEntities.cancel(); + }; + }, []); - /* eslint-disable-next-line react-hooks/exhaustive-deps */ - const onPanelSizeChange = useCallback( - debounce((sizes) => { - storage.set(StorageKeys.SIZE, Object.values(sizes)); - }, 300), - [] - ); + const [firstPanelSize, secondPanelSize] = storage.get(StorageKeys.SIZE, [ + INITIAL_PANEL_SIZE, + INITIAL_PANEL_SIZE, + ]); - /* eslint-disable-next-line react-hooks/exhaustive-deps */ - const debouncedUpdateLocalStorageValue = useCallback( - debounce((textObject: TextObject) => { - editorValueRef.current = textObject; - objectStorageClient.text.update(textObject); - }, DEBOUNCE_DELAY), - [] - ); + const isVerticalLayout = useIsWithinBreakpoints(['xs', 's', 'm']); - useEffect(() => { - return () => { - editorDispatch({ - type: 'setCurrentTextObject', - payload: editorValueRef.current!, - }); - }; - }, [editorDispatch]); + /* eslint-disable-next-line react-hooks/exhaustive-deps */ + const onPanelSizeChange = useCallback( + debounce((sizes) => { + storage.set(StorageKeys.SIZE, Object.values(sizes)); + }, 300), + [] + ); - // Always keep the localstorage in sync with the value in the editor - // to avoid losing the text object when the user navigates away from the shell - useEffect(() => { - // Only update when its not empty, this is to avoid setting the localstorage value - // to an empty string that will then be replaced by the example request. - if (inputEditorValue !== '') { - const textObject = { - ...currentTextObject, - text: inputEditorValue, - updatedAt: Date.now(), - } as TextObject; + /* eslint-disable-next-line react-hooks/exhaustive-deps */ + const debouncedUpdateLocalStorageValue = useCallback( + debounce((newValue: string | undefined) => { + const textObject = { + ...currentTextObject, + text: newValue, + updatedAt: Date.now(), + } as TextObject; - debouncedUpdateLocalStorageValue(textObject); - } - /* eslint-disable-next-line react-hooks/exhaustive-deps */ - }, [inputEditorValue, debouncedUpdateLocalStorageValue]); + objectStorageClient.text.update(textObject); - const data = getResponseWithMostSevereStatusCode(requestData) ?? requestError; - const isLoading = loading || requestInFlight; + editorDispatch({ + type: 'setCurrentTextObject', + payload: textObject, + }); + }, DEBOUNCE_DELAY), + [] + ); - if (!currentTextObject) return null; + // Always keep the localstorage value in sync with the value in the editor + // to avoid losing the text object when the user navigates away from the shell + useEffect(() => { + debouncedUpdateLocalStorageValue(inputEditorValue); + }, [debouncedUpdateLocalStorageValue, inputEditorValue]); - return ( - <> - {fetchingAutocompleteEntities ? ( -
- -
- ) : null} - onPanelSizeChange(sizes)} - data-test-subj="consoleEditorContainer" - > - {(EuiResizablePanel, EuiResizableButton) => ( - <> - + {fetchingAutocompleteEntities ? ( +
+ +
+ ) : null} + onPanelSizeChange(sizes)} + data-test-subj="consoleEditorContainer" + > + {(EuiResizablePanel, EuiResizableButton) => ( + <> + + - + {loading ? ( + + ) : ( + + )} + + + {!loading && ( - {loading ? ( - - ) : ( - - )} - - - {!loading && ( - { + setInputEditorValue(''); }} - className="consoleEditorPanel" > - setInputEditorValue('')} - > - {i18n.translate('console.editor.clearConsoleInputButton', { - defaultMessage: 'Clear this input', - })} - - - )} - - + {i18n.translate('console.editor.clearConsoleInputButton', { + defaultMessage: 'Clear this input', + })} + + + )} + +
- + - - + + + {data ? ( + + ) : isLoading ? ( + + ) : ( + + )} + + + {(data || isLoading) && ( - {data ? ( - - ) : isLoading ? ( - - ) : ( - - )} - + + + dispatch({ type: 'cleanRequest', payload: undefined })} + > + {i18n.translate('console.editor.clearConsoleOutputButton', { + defaultMessage: 'Clear this output', + })} + + - {(data || isLoading) && ( - - - - dispatch({ type: 'cleanRequest', payload: undefined })} - > - {i18n.translate('console.editor.clearConsoleOutputButton', { - defaultMessage: 'Clear this output', - })} - - - - - - - - - )} - - - - )} -
- - ); - } -); + + + +
+ + )} + + + + )} + + + ); +}); diff --git a/src/plugins/console/public/application/containers/editor/hooks/use_set_initial_value.ts b/src/plugins/console/public/application/containers/editor/hooks/use_set_initial_value.ts index 961ea586bc291..9e96c1af2734b 100644 --- a/src/plugins/console/public/application/containers/editor/hooks/use_set_initial_value.ts +++ b/src/plugins/console/public/application/containers/editor/hooks/use_set_initial_value.ts @@ -61,7 +61,7 @@ export const useSetInitialValue = (params: SetInitialValueParams) => { if (parsedURL.origin === 'https://www.elastic.co') { const resp = await fetch(parsedURL); const data = await resp.text(); - setValue(`${localStorageValue}\n\n${data}`); + setValue(`${localStorageValue ?? ''}\n\n${data}`); } else { toasts.addWarning( i18n.translate('console.monaco.loadFromDataUnrecognizedUrlErrorMessage', { @@ -107,7 +107,8 @@ export const useSetInitialValue = (params: SetInitialValueParams) => { if (loadFromParam) { loadBufferFromRemote(loadFromParam); } else { - setValue(localStorageValue || DEFAULT_INPUT_VALUE); + // Only set to default input value if the localstorage value is undefined + setValue(localStorageValue ?? DEFAULT_INPUT_VALUE); } return () => { diff --git a/src/plugins/console/public/application/containers/history/history.tsx b/src/plugins/console/public/application/containers/history/history.tsx index 93777a364356e..f6d18d6d06dd1 100644 --- a/src/plugins/console/public/application/containers/history/history.tsx +++ b/src/plugins/console/public/application/containers/history/history.tsx @@ -26,6 +26,7 @@ import { EuiFormFieldset, EuiCheckableCard, EuiResizableContainer, + useIsWithinBreakpoints, } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; @@ -77,11 +78,7 @@ const CheckeableCardLabel = ({ historyItem }: { historyItem: HistoryProps }) => ); }; -interface Props { - isVerticalLayout: boolean; -} - -export function History({ isVerticalLayout }: Props) { +export function History() { const { euiTheme } = useEuiTheme(); const { services: { history, routeHistory }, @@ -99,6 +96,8 @@ export function History({ isVerticalLayout }: Props) { const [viewingReq, setViewingReq] = useState(null); + const isVerticalLayout = useIsWithinBreakpoints(['xs', 's', 'm']); + const initialize = useCallback(() => { const nextSelectedIndex = 0; setViewingReq(requests[nextSelectedIndex]); diff --git a/src/plugins/console/public/application/containers/main/main.tsx b/src/plugins/console/public/application/containers/main/main.tsx index ef55f5406edaf..1b5116b2307a6 100644 --- a/src/plugins/console/public/application/containers/main/main.tsx +++ b/src/plugins/console/public/application/containers/main/main.tsx @@ -18,7 +18,6 @@ import { EuiButtonEmpty, EuiHorizontalRule, EuiScreenReaderOnly, - useIsWithinBreakpoints, useEuiOverflowScroll, useEuiTheme, } from '@elastic/eui'; @@ -84,8 +83,6 @@ export function Main({ currentTabProp, isEmbeddable = false }: MainProps) { services: { notifications, routeHistory }, } = useServicesContext(); - const isVerticalLayout = useIsWithinBreakpoints(['xs', 's', 'm']); - const storageTourState = localStorage.getItem(TOUR_STORAGE_KEY); const initialTourState = storageTourState ? JSON.parse(storageTourState) : INITIAL_TOUR_CONFIG; const [tourStepProps, actions, tourState] = useEuiTour(getTourSteps(docLinks), initialTourState); @@ -186,6 +183,8 @@ export function Main({ currentTabProp, isEmbeddable = false }: MainProps) { ); } + if (!currentTextObject) return null; + const shortcutsButton = ( )} - {currentTab === HISTORY_TAB_ID && } - {currentTab === CONFIG_TAB_ID && } + {currentTab === HISTORY_TAB_ID && } + {currentTab === CONFIG_TAB_ID && } { const newObject = await objectStorageClient.text.create({ createdAt: Date.now(), updatedAt: Date.now(), - text: '', + text: undefined, }); dispatch({ type: 'setCurrentTextObject', payload: newObject }); } else { - dispatch({ - type: 'setCurrentTextObject', - // For backwards compatibility, we sort here according to date created to - // always take the first item created. - payload: results.sort((a, b) => a.createdAt - b.createdAt)[0], - }); + // For backwards compatibility, we sort here according to date created to + // always take the first item created. + const lastObject = results.sort((a, b) => a.createdAt - b.createdAt)[0]; + if (lastObject.text === '') { + // If the last stored text is empty, add a new object with undefined text so that the default input is displayed at initial render + const textObject = { + ...lastObject, + text: undefined, + updatedAt: Date.now(), + } as TextObject; + + objectStorageClient.text.update(textObject); + dispatch({ type: 'setCurrentTextObject', payload: textObject }); + } else { + dispatch({ + type: 'setCurrentTextObject', + payload: lastObject, + }); + } } } catch (e) { setError(e); diff --git a/src/plugins/console/tsconfig.json b/src/plugins/console/tsconfig.json index a13333dfa8b30..2b0f6127cd4af 100644 --- a/src/plugins/console/tsconfig.json +++ b/src/plugins/console/tsconfig.json @@ -33,7 +33,7 @@ "@kbn/react-kibana-mount", "@kbn/ui-theme", "@kbn/core-doc-links-browser", - "@kbn/shared-ux-router" + "@kbn/shared-ux-router", ], "exclude": [ "target/**/*", diff --git a/src/plugins/data_view_management/public/components/edit_index_pattern/edit_index_pattern.tsx b/src/plugins/data_view_management/public/components/edit_index_pattern/edit_index_pattern.tsx index e3c6de8c8a932..14fa19306e40e 100644 --- a/src/plugins/data_view_management/public/components/edit_index_pattern/edit_index_pattern.tsx +++ b/src/plugins/data_view_management/public/components/edit_index_pattern/edit_index_pattern.tsx @@ -7,7 +7,7 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import React, { useEffect, useState, useCallback, useMemo } from 'react'; +import React, { useEffect, useState } from 'react'; import { withRouter, RouteComponentProps, useLocation } from 'react-router-dom'; import { EuiFlexGroup, @@ -22,23 +22,18 @@ import { } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; -import { DataView, DataViewField, DataViewType, RuntimeField } from '@kbn/data-views-plugin/public'; -import { DATA_VIEW_SAVED_OBJECT_TYPE } from '@kbn/data-views-plugin/public'; +import { DataViewType, RuntimeField, DataView } from '@kbn/data-views-plugin/public'; import { useKibana } from '@kbn/kibana-react-plugin/public'; -import { - SavedObjectRelation, - SavedObjectManagementTypeInfo, -} from '@kbn/saved-objects-management-plugin/public'; +import { SavedObjectRelation } from '@kbn/saved-objects-management-plugin/public'; import { pickBy } from 'lodash'; -import { setStateToKbnUrl } from '@kbn/kibana-utils-plugin/public'; import type * as CSS from 'csstype'; import { RollupDeprecationTooltip } from '@kbn/rollup'; import { IndexPatternManagmentContext } from '../../types'; import { Tabs } from './tabs'; import { IndexHeader } from './index_header'; -import { getTags } from '../utils'; import { removeDataView, RemoveDataViewProps } from './remove_data_view'; -import { APP_STATE_STORAGE_KEY } from './edit_index_pattern_state_container'; + +import { useStateSelector } from '../../management_app/state_utils'; const codeStyle: CSS.Properties = { marginLeft: '8px', @@ -72,6 +67,16 @@ const securitySolution = 'security-solution'; const getCompositeRuntimeFields = (dataView: DataView) => pickBy(dataView.getAllRuntimeFields(), (fld) => fld.type === 'composite'); +import { + dataViewSelector, + allowedTypesSelector, + relationshipsSelector, + tagsSelector, + isRefreshingSelector, + defaultIndexSelector, + fieldsSelector, +} from '../../management_app/data_view_mgmt_selectors'; + export const EditIndexPattern = withRouter( ({ indexPattern, history, location }: EditIndexPatternProps) => { const { @@ -82,39 +87,32 @@ export const EditIndexPattern = withRouter( IndexPatternEditor, savedObjectsManagement, application, + dataViewMgmtService, ...startServices } = useKibana().services; - const [fields, setFields] = useState(indexPattern.getNonScriptedFields()); + const dataView = useStateSelector(dataViewMgmtService.state$, dataViewSelector); + const allowedTypes = useStateSelector(dataViewMgmtService.state$, allowedTypesSelector); + const relationships = useStateSelector(dataViewMgmtService.state$, relationshipsSelector); + const tags = useStateSelector(dataViewMgmtService.state$, tagsSelector); + const isRefreshing = useStateSelector(dataViewMgmtService.state$, isRefreshingSelector); + const defaultIndex = useStateSelector(dataViewMgmtService.state$, defaultIndexSelector); + const fields = useStateSelector(dataViewMgmtService.state$, fieldsSelector); + const fieldConflictCount = useStateSelector( + dataViewMgmtService.state$, + (state) => state.fieldConflictCount + ); + const conflictFieldsUrl = useStateSelector( + dataViewMgmtService.state$, + (state) => state.conflictFieldsUrl + ); + // has default const [compositeRuntimeFields, setCompositeRuntimeFields] = useState< Record >(() => getCompositeRuntimeFields(indexPattern)); - const [conflictedFields, setConflictedFields] = useState( - indexPattern.fields.getAll().filter((field) => field.type === 'conflict') - ); - const [defaultIndex, setDefaultIndex] = useState(uiSettings.get('defaultIndex')); - const [tags, setTags] = useState< - Array<{ key: string; 'data-test-subj': string; name: string }> - >([]); - const [showEditDialog, setShowEditDialog] = useState(false); - const [relationships, setRelationships] = useState([]); - const [allowedTypes, setAllowedTypes] = useState([]); - const [refreshCount, setRefreshCount] = useState(0); // used for forcing rerender of field list - const [isRefreshing, setIsRefreshing] = React.useState(false); - const conflictFieldsUrl = useMemo(() => { - return setStateToKbnUrl( - APP_STATE_STORAGE_KEY, - { - fieldTypes: ['conflict'], - tab: 'indexedFields', - }, - { useHash: uiSettings.get('state:storeInSessionStorage') }, - application.getUrlForApp('management', { - path: `/kibana/dataViews/dataView/${encodeURIComponent(indexPattern.id!)}`, - }) - ); - }, [application, indexPattern.id, uiSettings]); + const [showEditDialog, setShowEditDialog] = useState(false); + // subscribe and unsubscribe to hash change events useEffect(() => { // dispatch synthetic hash change event to update hash history objects // this is necessary because hash updates triggered by using popState won't trigger this event naturally. @@ -127,42 +125,6 @@ export const EditIndexPattern = withRouter( }; }, [history]); - useEffect(() => { - savedObjectsManagement.getAllowedTypes().then((resp) => { - setAllowedTypes(resp); - }); - }, [savedObjectsManagement]); - - useEffect(() => { - if (allowedTypes.length === 0 || !indexPattern.isPersisted()) { - return; - } - const allowedAsString = allowedTypes.map((item) => item.name); - savedObjectsManagement - .getRelationships(DATA_VIEW_SAVED_OBJECT_TYPE, indexPattern.id!, allowedAsString) - .then((resp) => { - setRelationships(resp.relations.map((r) => ({ ...r, title: r.meta.title! }))); - }); - }, [savedObjectsManagement, indexPattern, allowedTypes]); - - useEffect(() => { - setFields(indexPattern.getNonScriptedFields()); - setConflictedFields( - indexPattern.fields.getAll().filter((field) => field.type === 'conflict') - ); - }, [indexPattern, refreshCount]); - - useEffect(() => { - setTags( - getTags(indexPattern, indexPattern.id === defaultIndex, dataViews.getRollupsEnabled()) - ); - }, [defaultIndex, indexPattern, dataViews]); - - const setDefaultPattern = useCallback(() => { - uiSettings.set('defaultIndex', indexPattern.id); - setDefaultIndex(indexPattern.id || ''); - }, [uiSettings, indexPattern.id]); - const removeHandler = removeDataView({ dataViews, uiSettings, @@ -179,12 +141,12 @@ export const EditIndexPattern = withRouter( const displayIndexPatternEditor = showEditDialog ? ( { - setFields(indexPattern.getNonScriptedFields()); + dataViewMgmtService.refreshFields(); setShowEditDialog(false); }} onCancel={() => setShowEditDialog(false)} defaultTypeIsRollup={isRollup} - editData={indexPattern} + editData={dataView} /> ) : ( <> @@ -212,7 +174,7 @@ export const EditIndexPattern = withRouter( { defaultMessage: '{conflictFieldsLength, plural, one {A field is} other {# fields are}} defined as several types (string, integer, etc) across the indices that match this pattern. You may still be able to use these conflict fields in parts of Kibana, but they will be unavailable for functions that require Kibana to know their type. Correcting this issue will require reindexing your data.', - values: { conflictFieldsLength: conflictedFields.length }, + values: { conflictFieldsLength: fieldConflictCount }, } ); @@ -246,111 +208,110 @@ export const EditIndexPattern = withRouter( return (
- - removeHandler([indexPattern as RemoveDataViewProps],
{warning}
) - } - defaultIndex={defaultIndex} - canSave={userEditPermission} - > - - - - {Boolean(indexPattern.title) && ( - - - {indexPatternHeading} - - {indexPattern.title} - - - - )} - {Boolean(indexPattern.timeFieldName) && ( - - - {timeFilterHeading} - - {indexPattern.timeFieldName} - - - - )} - {indexPattern.id && indexPattern.id.indexOf(securitySolution) === 0 && ( - - {securityDataView} - - )} - {tags.map((tag) => ( - - {tag.key === 'default' ? ( - - {tag.name} - - ) : tag.key === 'rollup' ? ( - - {tag.name} - - ) : ( - {tag.name} - )} - - ))} - - {conflictedFields.length > 0 && ( - <> - - -

{mappingConflictLabel}

- - {i18n.translate( - 'indexPatternManagement.editIndexPattern.viewMappingConflictButton', - { - defaultMessage: 'View conflicts', - } + {dataView && ( + dataViewMgmtService.setDefaultDataView()} + editIndexPatternClick={editPattern} + deleteIndexPatternClick={() => + removeHandler([indexPattern as RemoveDataViewProps],
{warning}
) + } + defaultIndex={defaultIndex} + canSave={userEditPermission} + > + + + + {Boolean(indexPattern.title) && ( + + + {indexPatternHeading} + + {indexPattern.title} + + + + )} + {Boolean(indexPattern.timeFieldName) && ( + + + {timeFilterHeading} + + {indexPattern.timeFieldName} + + + + )} + {indexPattern.id && indexPattern.id.indexOf(securitySolution) === 0 && ( + + {securityDataView} + + )} + {tags.map((tag) => ( + + {tag.key === 'default' ? ( + + {tag.name} + + ) : tag.key === 'rollup' ? ( + + {tag.name} + + ) : ( + {tag.name} )} -
-
- - )} -
+ + ))} + + {fieldConflictCount > 0 && ( + <> + + +

{mappingConflictLabel}

+ + {i18n.translate( + 'indexPatternManagement.editIndexPattern.viewMappingConflictButton', + { + defaultMessage: 'View conflicts', + } + )} + +
+ + )} + + )} - { - setFields(indexPattern.getNonScriptedFields()); - setCompositeRuntimeFields(getCompositeRuntimeFields(indexPattern)); - }} - refreshIndexPatternClick={async () => { - setIsRefreshing(true); - await dataViews.refreshFields(indexPattern, false, true); - setRefreshCount(refreshCount + 1); // rerender field list - setIsRefreshing(false); - }} - isRefreshing={isRefreshing} - /> + {dataView && ( + { + dataViewMgmtService.refreshFields(); + setCompositeRuntimeFields(getCompositeRuntimeFields(indexPattern)); + }} + refreshIndexPatternClick={() => dataViewMgmtService.refreshFields()} + isRefreshing={isRefreshing} + /> + )} {displayIndexPatternEditor}
); diff --git a/src/plugins/data_view_management/public/components/edit_index_pattern/edit_index_pattern_container.tsx b/src/plugins/data_view_management/public/components/edit_index_pattern/edit_index_pattern_container.tsx index 244689687644a..5e3f53a3e130d 100644 --- a/src/plugins/data_view_management/public/components/edit_index_pattern/edit_index_pattern_container.tsx +++ b/src/plugins/data_view_management/public/components/edit_index_pattern/edit_index_pattern_container.tsx @@ -17,22 +17,23 @@ import { IndexPatternManagmentContext } from '../../types'; import { getEditBreadcrumbs } from '../breadcrumbs'; const EditIndexPatternCont: React.FC> = ({ ...props }) => { - const { dataViews, setBreadcrumbs, notifications } = + const { dataViews, setBreadcrumbs, notifications, dataViewMgmtService } = useKibana().services; const [error, setError] = useState(); const [indexPattern, setIndexPattern] = useState(); useEffect(() => { dataViews - .get(decodeURIComponent(props.match.params.id)) + .get(decodeURIComponent(props.match.params.id), undefined, true) .then((ip: DataView) => { + dataViewMgmtService.setDataView(ip); setIndexPattern(ip); setBreadcrumbs(getEditBreadcrumbs(ip)); }) .catch((err) => { setError(err); }); - }, [dataViews, props.match.params.id, setBreadcrumbs, setError]); + }, [dataViews, props.match.params.id, setBreadcrumbs, setError, dataViewMgmtService]); if (error) { const [errorTitle, errorMessage] = [ diff --git a/src/plugins/data_view_management/public/components/edit_index_pattern/tabs/tabs.tsx b/src/plugins/data_view_management/public/components/edit_index_pattern/tabs/tabs.tsx index aef91872254b2..df23c5cad9352 100644 --- a/src/plugins/data_view_management/public/components/edit_index_pattern/tabs/tabs.tsx +++ b/src/plugins/data_view_management/public/components/edit_index_pattern/tabs/tabs.tsx @@ -34,6 +34,7 @@ import { META_FIELDS, RuntimeField, } from '@kbn/data-views-plugin/public'; +import { AbstractDataView } from '@kbn/data-views-plugin/common'; import { SavedObjectRelation, SavedObjectManagementTypeInfo, @@ -53,6 +54,13 @@ import { ScriptedFieldsTable } from '../scripted_fields_table'; import { RelationshipsTable } from '../relationships_table'; import { getTabs, getPath, convertToEuiFilterOptions } from './utils'; import { getFieldInfo } from '../../utils'; +import { useStateSelector } from '../../../management_app/state_utils'; + +import { + fieldsSelector, + indexedFieldTypeSelector, + scriptedFieldLangsSelector, +} from '../../../management_app/data_view_mgmt_selectors'; interface TabsProps extends Pick { indexPattern: DataView; @@ -165,7 +173,6 @@ const SCHEMA_ITEMS: FilterItems[] = [ export const Tabs: React.FC = ({ indexPattern, saveIndexPattern, - fields, history, refreshFields, relationships, @@ -183,6 +190,7 @@ export const Tabs: React.FC = ({ http, application, savedObjectsManagement, + dataViewMgmtService, ...startServices } = useKibana().services; const [fieldFilter, setFieldFilter] = useState(''); @@ -200,20 +208,24 @@ export const Tabs: React.FC = ({ }>({}); const [scriptedFieldLanguageFilter, setScriptedFieldLanguageFilter] = useState([]); const [isScriptedFieldFilterOpen, setIsScriptedFieldFilterOpen] = useState(false); - const [scriptedFieldLanguages, setScriptedFieldLanguages] = useState([]); const [indexedFieldTypeFilter, setIndexedFieldTypeFilter] = useState([]); const [isIndexedFilterOpen, setIsIndexedFilterOpen] = useState(false); - const [indexedFieldTypes, setIndexedFieldTypes] = useState([]); const [schemaFieldTypeFilter, setSchemaFieldTypeFilter] = useState([]); const [isSchemaFilterOpen, setIsSchemaFilterOpen] = useState(false); + const fields = useStateSelector(dataViewMgmtService.state$, fieldsSelector); + const indexedFieldTypes = convertToEuiFilterOptions( + useStateSelector(dataViewMgmtService.state$, indexedFieldTypeSelector) + ); + const scriptedFieldLanguages = useStateSelector( + dataViewMgmtService.state$, + scriptedFieldLangsSelector + ); const closeEditorHandler = useRef<() => void | undefined>(); const { DeleteRuntimeFieldProvider } = dataViewFieldEditor; const filteredIndexedFieldTypeFilter = useMemo(() => { - return uniq( - indexedFieldTypeFilter.filter((fieldType) => - indexedFieldTypes.some((item) => item.value === fieldType) - ) + return indexedFieldTypeFilter.filter((fieldType) => + indexedFieldTypes.some((item) => item.value === fieldType) ); }, [indexedFieldTypeFilter, indexedFieldTypes]); @@ -253,55 +265,6 @@ export const Tabs: React.FC = ({ [syncingStateFunc] ); - const updateFilterItem = ( - items: FilterItems[], - index: number, - updater: (a: FilterItems[]) => void - ) => { - if (!items[index]) { - return; - } - - const newItems = [...items]; - - switch (newItems[index].checked) { - case 'on': - newItems[index].checked = undefined; - break; - - default: - newItems[index].checked = 'on'; - } - - updater(newItems); - }; - - const refreshFilters = useCallback(() => { - const tempIndexedFieldTypes: string[] = []; - const tempScriptedFieldLanguages: string[] = []; - indexPattern.fields.getAll().forEach((field) => { - if (field.scripted) { - if (field.lang) { - tempScriptedFieldLanguages.push(field.lang); - } - } else { - // for conflicted fields, add conflict as a type - if (field.type === 'conflict') { - tempIndexedFieldTypes.push('conflict'); - } - if (field.esTypes) { - // add all types, may be multiple - field.esTypes.forEach((item) => tempIndexedFieldTypes.push(item)); - } - } - }); - - setIndexedFieldTypes(convertToEuiFilterOptions(tempIndexedFieldTypes)); - setScriptedFieldLanguages(convertToEuiFilterOptions(tempScriptedFieldLanguages)); - // need to reset based on changes to fields but indexPattern is the same - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [indexPattern, fields]); - const closeFieldEditor = useCallback(() => { if (closeEditorHandler.current) { closeEditorHandler.current(); @@ -321,10 +284,6 @@ export const Tabs: React.FC = ({ [dataViewFieldEditor, indexPattern, refreshFields] ); - useEffect(() => { - refreshFilters(); - }, [indexPattern, indexPattern.fields, refreshFilters]); - useEffect(() => { return () => { // When the component unmounts, make sure to close the field editor @@ -340,6 +299,7 @@ export const Tabs: React.FC = ({ const refreshRef = useRef(null); const userEditPermission = dataViews.getCanSaveSync(); + const getFilterSection = useCallback( (type: string) => { return ( @@ -517,12 +477,14 @@ export const Tabs: React.FC = ({ checked={item.checked} key={item.value} onClick={() => { + // this does the filtering setScriptedFieldLanguageFilter( item.checked ? scriptedFieldLanguageFilter.filter((f) => f !== item.value) : [...scriptedFieldLanguageFilter, item.value] ); - updateFilterItem(scriptedFieldLanguages, index, setScriptedFieldLanguages); + // updates the UI + dataViewMgmtService.setScriptedFieldLangSelection(index); }} data-test-subj={`scriptedFieldLanguageFilterDropdown-option-${item.value}${ item.checked ? '-checked' : '' @@ -539,6 +501,7 @@ export const Tabs: React.FC = ({ ); }, [ + dataViewMgmtService, fieldFilter, filteredSchemaFieldTypeFilter, filteredIndexedFieldTypeFilter, @@ -606,7 +569,7 @@ export const Tabs: React.FC = ({ history.push(getPath(field, indexPattern)); }, }} - onRemoveField={refreshFilters} + onRemoveField={() => dataViewMgmtService.refreshFields()} painlessDocLink={docLinks.links.scriptedFields.painless} userEditPermission={dataViews.getCanSaveSync()} /> @@ -619,11 +582,13 @@ export const Tabs: React.FC = ({ {getFilterSection(type)} { + await saveIndexPattern(dv); + dataViewMgmtService.refreshFields(); + }} indexPattern={indexPattern} filterFilter={fieldFilter} fieldWildcardMatcher={fieldWildcardMatcherDecorated} - onAddOrRemoveFilter={refreshFilters} /> ); @@ -655,7 +620,6 @@ export const Tabs: React.FC = ({ indexPattern, filteredIndexedFieldTypeFilter, filteredSchemaFieldTypeFilter, - refreshFilters, scriptedFieldLanguageFilter, saveIndexPattern, openFieldEditor, @@ -670,6 +634,7 @@ export const Tabs: React.FC = ({ savedObjectsManagement, allowedTypes, relationships, + dataViewMgmtService, ] ); diff --git a/src/plugins/data_view_management/public/components/edit_index_pattern/tabs/utils.ts b/src/plugins/data_view_management/public/components/edit_index_pattern/tabs/utils.ts index 0d2a2bb6d273d..31f12e80366cc 100644 --- a/src/plugins/data_view_management/public/components/edit_index_pattern/tabs/utils.ts +++ b/src/plugins/data_view_management/public/components/edit_index_pattern/tabs/utils.ts @@ -10,6 +10,7 @@ import { Dictionary, countBy, defaults, uniq } from 'lodash'; import { i18n } from '@kbn/i18n'; import { DataView, DataViewField } from '@kbn/data-views-plugin/public'; +import { FilterChecked } from '@elastic/eui'; import { TAB_INDEXED_FIELDS, TAB_SCRIPTED_FIELDS, @@ -126,7 +127,11 @@ export function getPath(field: DataViewField, indexPattern: DataView) { } export function convertToEuiFilterOptions(options: string[]) { - return uniq(options).map((option) => { + return uniq(options).map<{ + value: string; + name: string; + checked?: FilterChecked; + }>((option) => { return { value: option, name: option, diff --git a/src/plugins/data_view_management/public/management_app/data_view_management_service.ts b/src/plugins/data_view_management/public/management_app/data_view_management_service.ts new file mode 100644 index 0000000000000..3379655101910 --- /dev/null +++ b/src/plugins/data_view_management/public/management_app/data_view_management_service.ts @@ -0,0 +1,294 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { IUiSettingsClient, ApplicationStart } from '@kbn/core/public'; +import { BehaviorSubject, Observable, map, distinctUntilChanged } from 'rxjs'; + +import { DATA_VIEW_SAVED_OBJECT_TYPE } from '@kbn/data-views-plugin/common'; +import { FilterChecked } from '@elastic/eui'; + +import { + SavedObjectsManagementPluginStart, + SavedObjectManagementTypeInfo, + SavedObjectRelation, +} from '@kbn/saved-objects-management-plugin/public'; + +import { + DataViewsPublicPluginStart, + INDEX_PATTERN_TYPE, + DataViewField, + DataView, +} from '@kbn/data-views-plugin/public'; + +import { setStateToKbnUrl } from '@kbn/kibana-utils-plugin/public'; + +import { getTags } from '../components/utils'; + +import { APP_STATE_STORAGE_KEY } from '../components/edit_index_pattern/edit_index_pattern_state_container'; + +import { convertToEuiFilterOptions } from '../components/edit_index_pattern/tabs/utils'; + +export interface SavedObjectRelationWithTitle extends SavedObjectRelation { + title: string; +} + +export type BehaviorObservable = Omit, 'next'>; + +export const matchedIndiciesDefault = { + allIndices: [], + exactMatchedIndices: [], + partialMatchedIndices: [], + visibleIndices: [], +}; + +/** + * ConstructorArgs for DataViewEditorService + */ +export interface DataViewMgmtServiceConstructorArgs { + /** + * Dependencies for the DataViewEditorService + */ + services: { + application: ApplicationStart; + dataViews: DataViewsPublicPluginStart; + savedObjectsManagement: SavedObjectsManagementPluginStart; + uiSettings: IUiSettingsClient; + }; + /** + * Whether service requires requireTimestampField + */ + requireTimestampField?: boolean; + /** + * Initial type, indexPattern, and name to populate service + */ + initialValues: { + name?: string; + type?: INDEX_PATTERN_TYPE; + indexPattern?: string; + }; +} + +export interface DataViewMgmtState { + dataView?: DataView; + allowedTypes: SavedObjectManagementTypeInfo[]; + relationships: SavedObjectRelationWithTitle[]; + fields: DataViewField[]; + scriptedFields: DataViewField[]; + scriptedFieldLangs: Array<{ + value: string; + name: string; + checked?: FilterChecked; + }>; + indexedFieldTypes: string[]; + fieldConflictCount: number; + tags: Array<{ key: string; 'data-test-subj': string; name: string }>; + isRefreshing: boolean; + defaultIndex: string; + conflictFieldsUrl: string; +} + +const defaultDataViewEditorState: DataViewMgmtState = { + allowedTypes: [], + relationships: [], + fields: [], + scriptedFields: [], + scriptedFieldLangs: [], + indexedFieldTypes: [], + fieldConflictCount: 0, + tags: [], + isRefreshing: true, + defaultIndex: '', + conflictFieldsUrl: '', +}; + +export const stateSelectorFactory = + (state$: Observable) => + (selector: (state: S) => R, equalityFn?: (arg0: R, arg1: R) => boolean) => + state$.pipe(map(selector), distinctUntilChanged(equalityFn)); + +export class DataViewMgmtService { + constructor({ + services: { dataViews, savedObjectsManagement, uiSettings, application }, + initialValues: {}, + }: DataViewMgmtServiceConstructorArgs) { + this.services = { + application, + dataViews, + savedObjectsManagement, + uiSettings, + }; + + this.internalState$ = new BehaviorSubject({ + ...defaultDataViewEditorState, + }); + + this.state$ = this.internalState$ as BehaviorObservable; + + // allowed types are set once and never change + this.allowedTypes = new Promise((resolve) => { + savedObjectsManagement.getAllowedTypes().then((resp) => { + this.updateState({ allowedTypes: resp }); + resolve(resp); + }); + }); + } + + private services: { + application: ApplicationStart; + dataViews: DataViewsPublicPluginStart; + savedObjectsManagement: SavedObjectsManagementPluginStart; + uiSettings: IUiSettingsClient; + }; + + private allowedTypes: Promise; + + private internalState$: BehaviorSubject; + state$: BehaviorObservable; + + private updateState = (newState: Partial) => { + this.internalState$.next({ ...this.state$.getValue(), ...newState }); + }; + + private getConflictFieldsKbnUrl = (dataViewId: string) => + setStateToKbnUrl( + APP_STATE_STORAGE_KEY, + { + fieldTypes: ['conflict'], + tab: 'indexedFields', + }, + { useHash: this.services.uiSettings.get('state:storeInSessionStorage') }, + this.services.application.getUrlForApp('management', { + path: `/kibana/dataViews/dataView/${encodeURIComponent(dataViewId)}`, + }) + ); + + private getTags = async (dataView: DataView) => { + if (dataView) { + const defaultIndex = await this.services.uiSettings.get('defaultIndex'); + const tags = getTags( + dataView, + dataView.id === defaultIndex, + this.services.dataViews.getRollupsEnabled() + ); + + return tags; + } + return []; + }; + + async updateScriptedFields() { + const dataView = this.state$.getValue().dataView; + if (dataView) { + const scriptedFieldRecords = dataView.getScriptedFields(); + const scriptedFields = Object.values(scriptedFieldRecords); + + const scriptedFieldLangs = Array.from( + scriptedFields.reduce((acc: Set, field) => { + if (field.lang) { + acc.add(field.lang); + } + return acc; + }, new Set()) + ); + + this.updateState({ + scriptedFields, + scriptedFieldLangs: convertToEuiFilterOptions(scriptedFieldLangs), + }); + } + } + + async setDataView(dataView: DataView) { + this.updateState({ isRefreshing: true }); + + const fieldRecords = dataView.fields + .filter((field) => !field.scripted) + .reduce((acc, field) => { + acc[field.name] = field; + return acc; + }, {} as Record); + + const fields = Object.values(fieldRecords); + const indexedFieldTypes = new Set(); + fields.forEach((field) => { + // for conflicted fields, add conflict as a type + if (field.type === 'conflict') { + indexedFieldTypes.add('conflict'); + } + if (field.esTypes) { + // add all types, may be multiple + field.esTypes.forEach((item) => indexedFieldTypes.add(item)); + } + }); + + const allowedAsString = (await this.allowedTypes).map((item) => item.name); + + this.services.savedObjectsManagement + .getRelationships(DATA_VIEW_SAVED_OBJECT_TYPE, dataView.id!, allowedAsString) + .then((resp) => { + this.updateState({ + relationships: resp.relations.map((r) => ({ ...r, title: r.meta.title! })), + }); + }); + + this.updateState({ + dataView, + fields, + indexedFieldTypes: Array.from(indexedFieldTypes), + fieldConflictCount: fields.filter((field) => field.type === 'conflict').length, + tags: await this.getTags(dataView), + isRefreshing: false, + conflictFieldsUrl: this.getConflictFieldsKbnUrl(dataView.id!), + scriptedFields: dataView.getScriptedFields(), + }); + + this.updateScriptedFields(); + } + + async refreshFields() { + const dataView = this.state$.getValue().dataView; + if (dataView) { + await this.services.dataViews.refreshFields(dataView, undefined, true); + return this.setDataView(dataView); + } + } + + async setDefaultDataView() { + const dataView = this.internalState$.getValue().dataView; + if (!dataView) { + return; + } + await this.services.uiSettings.set('defaultIndex', dataView.id); + + this.updateState({ tags: await this.getTags(dataView), defaultIndex: dataView.id }); + } + + setScriptedFieldLangSelection(index: number) { + const items = this.state$.getValue().scriptedFieldLangs; + + if (!items[index]) { + return; + } + + const scriptedFieldLangs = [...items]; + + switch (scriptedFieldLangs[index].checked) { + case 'on': + scriptedFieldLangs[index].checked = undefined; + break; + + default: + scriptedFieldLangs[index].checked = 'on'; + } + + this.updateState({ + scriptedFieldLangs, + }); + } +} diff --git a/src/plugins/data_view_management/public/management_app/data_view_mgmt_selectors.ts b/src/plugins/data_view_management/public/management_app/data_view_mgmt_selectors.ts new file mode 100644 index 0000000000000..e7f4db5d0c965 --- /dev/null +++ b/src/plugins/data_view_management/public/management_app/data_view_mgmt_selectors.ts @@ -0,0 +1,20 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { DataViewMgmtState } from './data_view_management_service'; + +export const dataViewSelector = (state: DataViewMgmtState) => state.dataView; +export const allowedTypesSelector = (state: DataViewMgmtState) => state.allowedTypes; +export const relationshipsSelector = (state: DataViewMgmtState) => state.relationships; +export const tagsSelector = (state: DataViewMgmtState) => state.tags; +export const isRefreshingSelector = (state: DataViewMgmtState) => state.isRefreshing; +export const defaultIndexSelector = (state: DataViewMgmtState) => state.defaultIndex; +export const fieldsSelector = (state: DataViewMgmtState) => state.fields; +export const indexedFieldTypeSelector = (state: DataViewMgmtState) => state.indexedFieldTypes; +export const scriptedFieldLangsSelector = (state: DataViewMgmtState) => state.scriptedFieldLangs; diff --git a/src/plugins/data_view_management/public/management_app/mount_management_section.tsx b/src/plugins/data_view_management/public/management_app/mount_management_section.tsx index 2298fea008dcf..995d5ed977ed3 100644 --- a/src/plugins/data_view_management/public/management_app/mount_management_section.tsx +++ b/src/plugins/data_view_management/public/management_app/mount_management_section.tsx @@ -28,6 +28,7 @@ import { IndexPatternManagementSetupDependencies, } from '../plugin'; import { IndexPatternManagmentContext } from '../types'; +import { DataViewMgmtService } from './data_view_management_service'; const readOnlyBadge = { text: i18n.translate('indexPatternManagement.indexPatterns.badge.readOnly.text', { @@ -75,6 +76,15 @@ export async function mountManagementSection( } const deps: IndexPatternManagmentContext = { + dataViewMgmtService: new DataViewMgmtService({ + services: { + dataViews, + application, + savedObjectsManagement, + uiSettings, + }, + initialValues: {}, + }), application, chrome, uiSettings, diff --git a/src/plugins/data_view_management/public/management_app/state_utils.ts b/src/plugins/data_view_management/public/management_app/state_utils.ts new file mode 100644 index 0000000000000..90030d0dc45b2 --- /dev/null +++ b/src/plugins/data_view_management/public/management_app/state_utils.ts @@ -0,0 +1,28 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { BehaviorSubject } from 'rxjs'; +import { distinctUntilChanged, map } from 'rxjs'; +import { useMemo } from 'react'; +import useObservable from 'react-use/lib/useObservable'; + +export type BehaviorObservable = Omit, 'next'>; + +export function useStateSelector( + state$: BehaviorObservable, + selector: (state: S) => R, + equalityFn?: (arg0: R, arg1: R) => boolean +) { + const memoizedObservable = useMemo( + () => state$.pipe(map(selector), distinctUntilChanged(equalityFn)), + [state$, selector, equalityFn] + ); + const defaultValue = useMemo(() => selector(state$.value), [selector, state$]); + return useObservable(memoizedObservable, defaultValue); +} diff --git a/src/plugins/data_view_management/public/mocks.ts b/src/plugins/data_view_management/public/mocks.ts index 4a3963114373f..6abc53a64d3cf 100644 --- a/src/plugins/data_view_management/public/mocks.ts +++ b/src/plugins/data_view_management/public/mocks.ts @@ -74,6 +74,7 @@ const createIndexPatternManagmentContext = (): { docLinks, data, dataViews, + dataViewMgmtService: jest.fn(), noDataPage: noDataPagePublicMock.createStart(), unifiedSearch, dataViewFieldEditor, diff --git a/src/plugins/data_view_management/public/plugin.ts b/src/plugins/data_view_management/public/plugin.ts index bd818e4dfb441..77e8c12a13ad0 100644 --- a/src/plugins/data_view_management/public/plugin.ts +++ b/src/plugins/data_view_management/public/plugin.ts @@ -7,7 +7,7 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { CoreSetup, Plugin, PluginInitializerContext } from '@kbn/core/public'; +import { CoreSetup, Plugin, PluginInitializerContext, IUiSettingsClient } from '@kbn/core/public'; import { DataPublicPluginStart } from '@kbn/data-plugin/public'; import { FieldFormatsStart } from '@kbn/field-formats-plugin/public'; import { i18n } from '@kbn/i18n'; @@ -37,6 +37,7 @@ export interface IndexPatternManagementStartDependencies { spaces?: SpacesPluginStart; unifiedSearch: UnifiedSearchPublicPluginStart; savedObjectsManagement: SavedObjectsManagementPluginStart; + uiSettings: IUiSettingsClient; } // eslint-disable-next-line @typescript-eslint/no-empty-interface diff --git a/src/plugins/data_view_management/public/types.ts b/src/plugins/data_view_management/public/types.ts index eb09aead86195..b7a9279de8001 100644 --- a/src/plugins/data_view_management/public/types.ts +++ b/src/plugins/data_view_management/public/types.ts @@ -30,10 +30,12 @@ import type { SavedObjectsManagementPluginStart } from '@kbn/saved-objects-manag import type { SettingsStart } from '@kbn/core-ui-settings-browser'; import type { NoDataPagePluginSetup } from '@kbn/no-data-page-plugin/public'; import type { IndexPatternManagementStart } from '.'; +import type { DataViewMgmtService } from './management_app/data_view_management_service'; export type StartServices = Pick; export interface IndexPatternManagmentContext extends StartServices { + dataViewMgmtService: DataViewMgmtService; application: ApplicationStart; chrome: ChromeStart; uiSettings: IUiSettingsClient; diff --git a/src/plugins/data_views/common/data_views/data_views.test.ts b/src/plugins/data_views/common/data_views/data_views.test.ts index 680d8eb037144..8d9e2fdbc148b 100644 --- a/src/plugins/data_views/common/data_views/data_views.test.ts +++ b/src/plugins/data_views/common/data_views/data_views.test.ts @@ -192,6 +192,7 @@ describe('IndexPatterns', () => { pattern: 'something', rollupIndex: undefined, type: undefined, + forceRefresh: false, }; await indexPatterns.get(id); @@ -206,12 +207,14 @@ describe('IndexPatterns', () => { const id = '1'; await indexPatterns.get(id); expect(apiClient.getFieldsForWildcard).toBeCalledWith({ + allowHidden: undefined, allowNoIndex: true, indexFilter: undefined, metaFields: false, pattern: 'something', rollupIndex: undefined, type: undefined, + forceRefresh: false, }); }); diff --git a/src/plugins/data_views/common/data_views/data_views.ts b/src/plugins/data_views/common/data_views/data_views.ts index e159aa55cf771..6dee1745e8028 100644 --- a/src/plugins/data_views/common/data_views/data_views.ts +++ b/src/plugins/data_views/common/data_views/data_views.ts @@ -638,6 +638,7 @@ export class DataViewsService { allowNoIndex: true, indexFilter: options.indexFilter, allowHidden: options.allowHidden, + forceRefresh: options.forceRefresh, }); }; @@ -839,21 +840,24 @@ export class DataViewsService { private getSavedObjectAndInit = async ( id: string, - displayErrors: boolean = true + displayErrors: boolean = true, + refreshFields: boolean = false ): Promise => { const savedObject = await this.savedObjectsClient.get(id); - return this.initFromSavedObject(savedObject, displayErrors); + return this.initFromSavedObject(savedObject, displayErrors, refreshFields); }; private initFromSavedObjectLoadFields = async ({ savedObjectId, spec, displayErrors = true, + refreshFields = false, }: { savedObjectId: string; spec: DataViewSpec; displayErrors?: boolean; + refreshFields?: boolean; }) => { const { title, type, typeMeta, runtimeFieldMap } = spec; const { fields, indices, etag } = await this.refreshFieldSpecMap( @@ -867,6 +871,7 @@ export class DataViewsService { rollupIndex: typeMeta?.params?.rollup_index, allowNoIndex: spec.allowNoIndex, allowHidden: spec.allowHidden, + forceRefresh: refreshFields, }, spec.fieldAttrs, displayErrors @@ -879,7 +884,8 @@ export class DataViewsService { private initFromSavedObject = async ( savedObject: SavedObject, - displayErrors: boolean = true + displayErrors: boolean = true, + refreshFields: boolean = false ): Promise => { const spec = this.savedObjectToSpec(savedObject); spec.fieldAttrs = savedObject.attributes.fieldAttrs @@ -895,6 +901,7 @@ export class DataViewsService { savedObjectId: savedObject.id, spec, displayErrors, + refreshFields, }); fields = fieldsAndIndices.fields; indices = fieldsAndIndices.indices; @@ -905,6 +912,7 @@ export class DataViewsService { savedObjectId: savedObject.id, spec, displayErrors, + refreshFields, }); fields = fieldsAndIndices.fields; indices = fieldsAndIndices.indices; @@ -1041,7 +1049,7 @@ export class DataViewsService { if (dataViewFromCache) { indexPatternPromise = dataViewFromCache; } else { - indexPatternPromise = this.getSavedObjectAndInit(id, displayErrors); + indexPatternPromise = this.getSavedObjectAndInit(id, displayErrors, refreshFields); this.dataViewCache.set(id, indexPatternPromise); } diff --git a/src/plugins/data_views/common/fields/utils.ts b/src/plugins/data_views/common/fields/utils.ts index 380493ed07668..23f0bf3a8651d 100644 --- a/src/plugins/data_views/common/fields/utils.ts +++ b/src/plugins/data_views/common/fields/utils.ts @@ -26,14 +26,22 @@ export const isMultiField = isDataViewFieldSubtypeMulti; export const getFieldSubtypeMulti = getDataViewFieldSubtypeMulti; export const getFieldSubtypeNested = getDataViewFieldSubtypeNested; -const DOT_PREFIX_RE = /(.).+?\./g; - /** * Convert a dot.notated.string into a short * version (d.n.string) */ export function shortenDottedString(input: string): string { - return typeof input !== 'string' ? input : input.replace(DOT_PREFIX_RE, '$1.'); + if (typeof input === 'string') { + const split = input.split('.'); + return split.reduce((acc, part, i) => { + if (i === split.length - 1) { + return acc + part; + } + return acc + part[0] + '.'; + }, ''); + } + + return input; } // Note - this code is duplicated from @kbn/es-query diff --git a/src/plugins/discover/public/application/main/components/layout/discover_layout.tsx b/src/plugins/discover/public/application/main/components/layout/discover_layout.tsx index 82403ad38c710..49e645e3f2206 100644 --- a/src/plugins/discover/public/application/main/components/layout/discover_layout.tsx +++ b/src/plugins/discover/public/application/main/components/layout/discover_layout.tsx @@ -213,6 +213,9 @@ export function DiscoverLayout({ stateContainer }: DiscoverLayoutProps) { getOperator(fieldName, values, operation), fieldType ); + if (!updatedQuery) { + return; + } data.query.queryString.setQuery({ esql: updatedQuery, }); diff --git a/src/plugins/discover/public/build_services.ts b/src/plugins/discover/public/build_services.ts index 7bb52691fd4a4..f4ee14fcf04f7 100644 --- a/src/plugins/discover/public/build_services.ts +++ b/src/plugins/discover/public/build_services.ts @@ -63,6 +63,7 @@ import type { DiscoverContextAppLocator } from './application/context/services/l import type { DiscoverSingleDocLocator } from './application/doc/locator'; import type { DiscoverAppLocator } from '../common'; import type { ProfilesManager } from './context_awareness'; +import type { DiscoverEBTContextManager } from './services/discover_ebt_context_manager'; /** * Location state of internal Discover history instance @@ -130,6 +131,7 @@ export interface DiscoverServices { noDataPage?: NoDataPagePluginStart; observabilityAIAssistant?: ObservabilityAIAssistantPublicStart; profilesManager: ProfilesManager; + ebtContextManager: DiscoverEBTContextManager; fieldsMetadata?: FieldsMetadataPublicStart; } @@ -145,6 +147,7 @@ export const buildServices = memoize( scopedHistory, urlTracker, profilesManager, + ebtContextManager, setHeaderActionMenu = noop, }: { core: CoreStart; @@ -157,6 +160,7 @@ export const buildServices = memoize( scopedHistory?: ScopedHistory; urlTracker: UrlTracker; profilesManager: ProfilesManager; + ebtContextManager: DiscoverEBTContextManager; setHeaderActionMenu?: AppMountParameters['setHeaderActionMenu']; }): DiscoverServices => { const { usageCollection } = plugins; @@ -217,6 +221,7 @@ export const buildServices = memoize( noDataPage: plugins.noDataPage, observabilityAIAssistant: plugins.observabilityAIAssistant, profilesManager, + ebtContextManager, fieldsMetadata: plugins.fieldsMetadata, }; } diff --git a/src/plugins/discover/public/context_awareness/__mocks__/index.tsx b/src/plugins/discover/public/context_awareness/__mocks__/index.tsx index cd8ab77875afb..c0e3d981668cf 100644 --- a/src/plugins/discover/public/context_awareness/__mocks__/index.tsx +++ b/src/plugins/discover/public/context_awareness/__mocks__/index.tsx @@ -22,6 +22,7 @@ import { SolutionType, } from '../profiles'; import { ProfilesManager } from '../profiles_manager'; +import { DiscoverEBTContextManager } from '../../services/discover_ebt_context_manager'; import { createLogsContextServiceMock } from '@kbn/discover-utils/src/__mocks__'; export const createContextAwarenessMocks = ({ @@ -150,10 +151,12 @@ export const createContextAwarenessMocks = ({ documentProfileServiceMock.registerProvider(documentProfileProviderMock); } + const ebtContextManagerMock = new DiscoverEBTContextManager(); const profilesManagerMock = new ProfilesManager( rootProfileServiceMock, dataSourceProfileServiceMock, - documentProfileServiceMock + documentProfileServiceMock, + ebtContextManagerMock ); const profileProviderServices = createProfileProviderServicesMock(); @@ -169,6 +172,7 @@ export const createContextAwarenessMocks = ({ contextRecordMock2, profilesManagerMock, profileProviderServices, + ebtContextManagerMock, }; }; diff --git a/src/plugins/discover/public/context_awareness/profiles_manager.test.ts b/src/plugins/discover/public/context_awareness/profiles_manager.test.ts index 65349b6fc5308..87965edbe7488 100644 --- a/src/plugins/discover/public/context_awareness/profiles_manager.test.ts +++ b/src/plugins/discover/public/context_awareness/profiles_manager.test.ts @@ -21,6 +21,7 @@ describe('ProfilesManager', () => { beforeEach(() => { jest.clearAllMocks(); mocks = createContextAwarenessMocks(); + jest.spyOn(mocks.ebtContextManagerMock, 'updateProfilesContextWith'); }); it('should return default profiles', () => { @@ -60,6 +61,11 @@ describe('ProfilesManager', () => { mocks.dataSourceProfileProviderMock.profile, mocks.documentProfileProviderMock.profile, ]); + + expect(mocks.ebtContextManagerMock.updateProfilesContextWith).toHaveBeenCalledWith([ + 'root-profile', + 'data-source-profile', + ]); }); it('should expose profiles as an observable', async () => { diff --git a/src/plugins/discover/public/context_awareness/profiles_manager.ts b/src/plugins/discover/public/context_awareness/profiles_manager.ts index 8c24e425147f5..2c8b1c7d16cb0 100644 --- a/src/plugins/discover/public/context_awareness/profiles_manager.ts +++ b/src/plugins/discover/public/context_awareness/profiles_manager.ts @@ -25,6 +25,7 @@ import type { DocumentContext, } from './profiles'; import type { ContextWithProfileId } from './profile_service'; +import { DiscoverEBTContextManager } from '../services/discover_ebt_context_manager'; interface SerializedRootProfileParams { solutionNavId: RootProfileProviderParams['solutionNavId']; @@ -52,6 +53,7 @@ export interface GetProfilesOptions { export class ProfilesManager { private readonly rootContext$: BehaviorSubject>; private readonly dataSourceContext$: BehaviorSubject>; + private readonly ebtContextManager: DiscoverEBTContextManager; private prevRootProfileParams?: SerializedRootProfileParams; private prevDataSourceProfileParams?: SerializedDataSourceProfileParams; @@ -61,10 +63,12 @@ export class ProfilesManager { constructor( private readonly rootProfileService: RootProfileService, private readonly dataSourceProfileService: DataSourceProfileService, - private readonly documentProfileService: DocumentProfileService + private readonly documentProfileService: DocumentProfileService, + ebtContextManager: DiscoverEBTContextManager ) { this.rootContext$ = new BehaviorSubject(rootProfileService.defaultContext); this.dataSourceContext$ = new BehaviorSubject(dataSourceProfileService.defaultContext); + this.ebtContextManager = ebtContextManager; } /** @@ -130,6 +134,7 @@ export class ProfilesManager { return; } + this.trackActiveProfiles(this.rootContext$.getValue().profileId, context.profileId); this.dataSourceContext$.next(context); this.prevDataSourceProfileParams = serializedParams; } @@ -194,6 +199,15 @@ export class ProfilesManager { map(() => this.getProfiles(options)) ); } + + /** + * Tracks the active profiles in the EBT context + */ + private trackActiveProfiles(rootContextProfileId: string, dataSourceContextProfileId: string) { + const dscProfiles = [rootContextProfileId, dataSourceContextProfileId]; + + this.ebtContextManager.updateProfilesContextWith(dscProfiles); + } } const serializeRootProfileParams = ( diff --git a/src/plugins/discover/public/plugin.tsx b/src/plugins/discover/public/plugin.tsx index a4e94205be7f4..507d5dfad7875 100644 --- a/src/plugins/discover/public/plugin.tsx +++ b/src/plugins/discover/public/plugin.tsx @@ -60,6 +60,7 @@ import { RootProfileService } from './context_awareness/profiles/root_profile'; import { DataSourceProfileService } from './context_awareness/profiles/data_source_profile'; import { DocumentProfileService } from './context_awareness/profiles/document_profile'; import { ProfilesManager } from './context_awareness/profiles_manager'; +import { DiscoverEBTContextManager } from './services/discover_ebt_context_manager'; /** * Contains Discover, one of the oldest parts of Kibana @@ -149,6 +150,9 @@ export class DiscoverPlugin this.urlTracker = { setTrackedUrl, restorePreviousUrl, setTrackingEnabled }; this.stopUrlTracking = stopUrlTracker; + const ebtContextManager = new DiscoverEBTContextManager(); + ebtContextManager.initialize({ core }); + core.application.register({ id: PLUGIN_ID, title: 'Discover', @@ -173,6 +177,8 @@ export class DiscoverPlugin window.dispatchEvent(new HashChangeEvent('hashchange')); }); + ebtContextManager.enable(); + const services = buildServices({ core: coreStart, plugins: discoverStartPlugins, @@ -183,7 +189,11 @@ export class DiscoverPlugin history: this.historyService.getHistory(), scopedHistory: this.scopedHistory, urlTracker: this.urlTracker!, - profilesManager: await this.createProfilesManager({ plugins: discoverStartPlugins }), + profilesManager: await this.createProfilesManager({ + plugins: discoverStartPlugins, + ebtContextManager, + }), + ebtContextManager, setHeaderActionMenu: params.setHeaderActionMenu, }); @@ -216,6 +226,7 @@ export class DiscoverPlugin }); return () => { + ebtContextManager.disableAndReset(); unlistenParentHistory(); unmount(); appUnMounted(); @@ -285,7 +296,12 @@ export class DiscoverPlugin } const getDiscoverServicesInternal = () => { - return this.getDiscoverServices(core, plugins, this.createEmptyProfilesManager()); + return this.getDiscoverServices( + core, + plugins, + this.createEmptyProfilesManager(), + new DiscoverEBTContextManager() // it's not enabled outside of Discover + ); }; return { @@ -320,14 +336,21 @@ export class DiscoverPlugin return { rootProfileService, dataSourceProfileService, documentProfileService }; }); - private async createProfilesManager({ plugins }: { plugins: DiscoverStartPlugins }) { + private async createProfilesManager({ + plugins, + ebtContextManager, + }: { + plugins: DiscoverStartPlugins; + ebtContextManager: DiscoverEBTContextManager; + }) { const { rootProfileService, dataSourceProfileService, documentProfileService } = await this.createProfileServices({ plugins }); return new ProfilesManager( rootProfileService, dataSourceProfileService, - documentProfileService + documentProfileService, + ebtContextManager ); } @@ -335,14 +358,16 @@ export class DiscoverPlugin return new ProfilesManager( new RootProfileService(), new DataSourceProfileService(), - new DocumentProfileService() + new DocumentProfileService(), + new DiscoverEBTContextManager() // it's not enabled outside of Discover ); } private getDiscoverServices = ( core: CoreStart, plugins: DiscoverStartPlugins, - profilesManager: ProfilesManager + profilesManager: ProfilesManager, + ebtContextManager: DiscoverEBTContextManager ) => { return buildServices({ core, @@ -354,6 +379,7 @@ export class DiscoverPlugin history: this.historyService.getHistory(), urlTracker: this.urlTracker!, profilesManager, + ebtContextManager, }); }; @@ -368,8 +394,12 @@ export class DiscoverPlugin const getDiscoverServicesInternal = async () => { const [coreStart, deps] = await core.getStartServices(); - const profilesManager = await this.createProfilesManager({ plugins: deps }); - return this.getDiscoverServices(coreStart, deps, profilesManager); + const ebtContextManager = new DiscoverEBTContextManager(); // it's not enabled outside of Discover + const profilesManager = await this.createProfilesManager({ + plugins: deps, + ebtContextManager, + }); + return this.getDiscoverServices(coreStart, deps, profilesManager, ebtContextManager); }; plugins.embeddable.registerReactEmbeddableSavedObject({ diff --git a/src/plugins/discover/public/services/discover_ebt_context_manager.test.ts b/src/plugins/discover/public/services/discover_ebt_context_manager.test.ts new file mode 100644 index 0000000000000..3b2836325b671 --- /dev/null +++ b/src/plugins/discover/public/services/discover_ebt_context_manager.test.ts @@ -0,0 +1,95 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { BehaviorSubject } from 'rxjs'; +import { coreMock } from '@kbn/core/public/mocks'; +import { DiscoverEBTContextManager } from './discover_ebt_context_manager'; + +const coreSetupMock = coreMock.createSetup(); + +describe('DiscoverEBTContextManager', () => { + let discoverEBTContextManager: DiscoverEBTContextManager; + + beforeEach(() => { + discoverEBTContextManager = new DiscoverEBTContextManager(); + }); + + describe('register', () => { + it('should register the context provider', () => { + discoverEBTContextManager.initialize({ core: coreSetupMock }); + + expect(coreSetupMock.analytics.registerContextProvider).toHaveBeenCalledWith({ + name: 'discover_context', + context$: expect.any(BehaviorSubject), + schema: { + discoverProfiles: { + type: 'array', + items: { + type: 'keyword', + _meta: { + description: 'List of active Discover context awareness profiles', + }, + }, + }, + }, + }); + }); + }); + + describe('updateProfilesWith', () => { + it('should update the profiles with the provided props', () => { + const dscProfiles = ['profile1', 'profile2']; + const dscProfiles2 = ['profile21', 'profile22']; + discoverEBTContextManager.initialize({ core: coreSetupMock }); + discoverEBTContextManager.enable(); + + discoverEBTContextManager.updateProfilesContextWith(dscProfiles); + expect(discoverEBTContextManager.getProfilesContext()).toBe(dscProfiles); + + discoverEBTContextManager.updateProfilesContextWith(dscProfiles2); + expect(discoverEBTContextManager.getProfilesContext()).toBe(dscProfiles2); + }); + + it('should not update the profiles if profile list did not change', () => { + const dscProfiles = ['profile1', 'profile2']; + const dscProfiles2 = ['profile1', 'profile2']; + discoverEBTContextManager.initialize({ core: coreSetupMock }); + discoverEBTContextManager.enable(); + + discoverEBTContextManager.updateProfilesContextWith(dscProfiles); + expect(discoverEBTContextManager.getProfilesContext()).toBe(dscProfiles); + + discoverEBTContextManager.updateProfilesContextWith(dscProfiles2); + expect(discoverEBTContextManager.getProfilesContext()).toBe(dscProfiles); + }); + + it('should not update the profiles if not enabled yet', () => { + const dscProfiles = ['profile1', 'profile2']; + discoverEBTContextManager.initialize({ core: coreSetupMock }); + + discoverEBTContextManager.updateProfilesContextWith(dscProfiles); + expect(discoverEBTContextManager.getProfilesContext()).toEqual([]); + }); + + it('should not update the profiles after resetting unless enabled again', () => { + const dscProfiles = ['profile1', 'profile2']; + discoverEBTContextManager.initialize({ core: coreSetupMock }); + discoverEBTContextManager.enable(); + discoverEBTContextManager.updateProfilesContextWith(dscProfiles); + expect(discoverEBTContextManager.getProfilesContext()).toBe(dscProfiles); + discoverEBTContextManager.disableAndReset(); + expect(discoverEBTContextManager.getProfilesContext()).toEqual([]); + discoverEBTContextManager.updateProfilesContextWith(dscProfiles); + expect(discoverEBTContextManager.getProfilesContext()).toEqual([]); + discoverEBTContextManager.enable(); + discoverEBTContextManager.updateProfilesContextWith(dscProfiles); + expect(discoverEBTContextManager.getProfilesContext()).toBe(dscProfiles); + }); + }); +}); diff --git a/src/plugins/discover/public/services/discover_ebt_context_manager.ts b/src/plugins/discover/public/services/discover_ebt_context_manager.ts new file mode 100644 index 0000000000000..12ea918c495d9 --- /dev/null +++ b/src/plugins/discover/public/services/discover_ebt_context_manager.ts @@ -0,0 +1,75 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { BehaviorSubject } from 'rxjs'; +import { isEqual } from 'lodash'; +import type { CoreSetup } from '@kbn/core-lifecycle-browser'; + +export interface DiscoverEBTContextProps { + discoverProfiles: string[]; // Discover Context Awareness Profiles +} +export type DiscoverEBTContext = BehaviorSubject; + +export class DiscoverEBTContextManager { + private isEnabled: boolean = false; + private ebtContext$: DiscoverEBTContext | undefined; + + constructor() {} + + // https://docs.elastic.dev/telemetry/collection/event-based-telemetry + public initialize({ core }: { core: CoreSetup }) { + const context$ = new BehaviorSubject({ + discoverProfiles: [], + }); + + core.analytics.registerContextProvider({ + name: 'discover_context', + context$, + schema: { + discoverProfiles: { + type: 'array', + items: { + type: 'keyword', + _meta: { + description: 'List of active Discover context awareness profiles', + }, + }, + }, + // If we decide to extend EBT context with more properties, we can do it here + }, + }); + + this.ebtContext$ = context$; + } + + public enable() { + this.isEnabled = true; + } + + public updateProfilesContextWith(discoverProfiles: DiscoverEBTContextProps['discoverProfiles']) { + if ( + this.isEnabled && + this.ebtContext$ && + !isEqual(this.ebtContext$.getValue().discoverProfiles, discoverProfiles) + ) { + this.ebtContext$.next({ + discoverProfiles, + }); + } + } + + public getProfilesContext() { + return this.ebtContext$?.getValue()?.discoverProfiles; + } + + public disableAndReset() { + this.updateProfilesContextWith([]); + this.isEnabled = false; + } +} diff --git a/src/plugins/discover/tsconfig.json b/src/plugins/discover/tsconfig.json index fef4b38d59cd5..65b121f47d105 100644 --- a/src/plugins/discover/tsconfig.json +++ b/src/plugins/discover/tsconfig.json @@ -98,7 +98,8 @@ "@kbn/security-solution-common", "@kbn/router-utils", "@kbn/management-settings-ids", - "@kbn/logs-data-access-plugin" + "@kbn/logs-data-access-plugin", + "@kbn/core-lifecycle-browser" ], "exclude": [ "target/**/*" diff --git a/src/plugins/management/public/components/landing/classic_empty_prompt.tsx b/src/plugins/management/public/components/landing/classic_empty_prompt.tsx new file mode 100644 index 0000000000000..83bde6178644d --- /dev/null +++ b/src/plugins/management/public/components/landing/classic_empty_prompt.tsx @@ -0,0 +1,51 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ +import React, { type FC } from 'react'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { EuiHorizontalRule } from '@elastic/eui'; +import { KibanaPageTemplate } from '@kbn/shared-ux-page-kibana-template'; + +interface Props { + kibanaVersion: string; +} + +export const ClassicEmptyPrompt: FC = ({ kibanaVersion }) => { + return ( + + + + } + body={ + <> +

+ +

+ +

+ +

+ + } + /> + ); +}; diff --git a/src/plugins/management/public/components/landing/landing.test.tsx b/src/plugins/management/public/components/landing/landing.test.tsx index 99b499f0b8537..2f9371bbde031 100644 --- a/src/plugins/management/public/components/landing/landing.test.tsx +++ b/src/plugins/management/public/components/landing/landing.test.tsx @@ -9,6 +9,7 @@ import React from 'react'; import { merge } from 'lodash'; +import { coreMock } from '@kbn/core/public/mocks'; import { registerTestBed, AsyncTestBedConfig, TestBed } from '@kbn/test-jest-helpers'; import { AppContextProvider } from '../management_app/management_context'; @@ -45,6 +46,7 @@ export const WithAppDependencies = kibanaVersion: '8.10.0', cardsNavigationConfig: { enabled: true }, sections: sectionsMock, + chromeStyle: 'classic', }; return ( @@ -88,4 +90,32 @@ describe('Landing Page', () => { expect(exists('managementHome')).toBe(true); }); }); + + describe('Empty prompt', () => { + test('Renders the default empty prompt when chromeStyle is "classic"', async () => { + testBed = await setupLandingPage({ + chromeStyle: 'classic', + cardsNavigationConfig: { enabled: false }, + }); + + const { exists } = testBed; + + expect(exists('managementHome')).toBe(true); + }); + + test('Renders the solution empty prompt when chromeStyle is "project"', async () => { + const coreStart = coreMock.createStart(); + + testBed = await setupLandingPage({ + chromeStyle: 'project', + cardsNavigationConfig: { enabled: false }, + coreStart, + }); + + const { exists } = testBed; + + expect(exists('managementHome')).toBe(false); + expect(exists('managementHomeSolution')).toBe(true); + }); + }); }); diff --git a/src/plugins/management/public/components/landing/landing.tsx b/src/plugins/management/public/components/landing/landing.tsx index d17c03a5f0fa8..ffa5c7d0fd7e2 100644 --- a/src/plugins/management/public/components/landing/landing.tsx +++ b/src/plugins/management/public/components/landing/landing.tsx @@ -8,13 +8,13 @@ */ import React, { useEffect } from 'react'; -import { FormattedMessage } from '@kbn/i18n-react'; -import { EuiHorizontalRule } from '@elastic/eui'; -import { KibanaPageTemplate } from '@kbn/shared-ux-page-kibana-template'; + import { EuiPageBody } from '@elastic/eui'; import { CardsNavigation } from '@kbn/management-cards-navigation'; import { useAppContext } from '../management_app/management_context'; +import { ClassicEmptyPrompt } from './classic_empty_prompt'; +import { SolutionEmptyPrompt } from './solution_empty_prompt'; interface ManagementLandingPageProps { onAppMounted: (id: string) => void; @@ -25,7 +25,8 @@ export const ManagementLandingPage = ({ setBreadcrumbs, onAppMounted, }: ManagementLandingPageProps) => { - const { appBasePath, sections, kibanaVersion, cardsNavigationConfig } = useAppContext(); + const { appBasePath, sections, kibanaVersion, cardsNavigationConfig, chromeStyle, coreStart } = + useAppContext(); setBreadcrumbs(); useEffect(() => { @@ -45,36 +46,11 @@ export const ManagementLandingPage = ({ ); } - return ( - - - - } - body={ - <> -

- -

- -

- -

- - } - /> - ); + if (!chromeStyle) return null; + + if (chromeStyle === 'project') { + return ; + } + + return ; }; diff --git a/src/plugins/management/public/components/landing/solution_empty_prompt.tsx b/src/plugins/management/public/components/landing/solution_empty_prompt.tsx new file mode 100644 index 0000000000000..63e3e91fd6ff3 --- /dev/null +++ b/src/plugins/management/public/components/landing/solution_empty_prompt.tsx @@ -0,0 +1,113 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ +import React, { type FC } from 'react'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { i18n } from '@kbn/i18n'; +import { EuiButton, EuiLink } from '@elastic/eui'; +import { type CoreStart } from '@kbn/core/public'; +import { KibanaPageTemplate } from '@kbn/shared-ux-page-kibana-template'; + +interface Props { + kibanaVersion: string; + coreStart: CoreStart; +} + +const IndicesLink: FC<{ coreStart: CoreStart }> = ({ coreStart }) => ( + + {i18n.translate('management.landing.subhead.indicesLink', { + defaultMessage: 'indices', + })} + +); + +const DataViewsLink: FC<{ coreStart: CoreStart }> = ({ coreStart }) => ( + + {i18n.translate('management.landing.subhead.dataViewsLink', { + defaultMessage: 'data views', + })} + +); + +const IngestPipelinesLink: FC<{ coreStart: CoreStart }> = ({ coreStart }) => ( + + {i18n.translate('management.landing.subhead.ingestPipelinesLink', { + defaultMessage: 'ingest pipelines', + })} + +); + +const UsersLink: FC<{ coreStart: CoreStart }> = ({ coreStart }) => ( + + {i18n.translate('management.landing.subhead.usersLink', { + defaultMessage: 'users', + })} + +); + +export const SolutionEmptyPrompt: FC = ({ kibanaVersion, coreStart }) => { + return ( + + + + } + body={ + <> +

+ , + dataViewsLink: , + ingestPipelinesLink: , + usersLink: , + }} + /> +

+ +

+ { + coreStart.chrome.sideNav.setPanelSelectedNode('stack_management'); + }} + data-test-subj="viewAllStackMngtPagesButton" + > + + +

+ + } + /> + ); +}; diff --git a/src/plugins/management/public/components/management_app/management_app.tsx b/src/plugins/management/public/components/management_app/management_app.tsx index e4ffd237b94c9..849d8f9eb0341 100644 --- a/src/plugins/management/public/components/management_app/management_app.tsx +++ b/src/plugins/management/public/components/management_app/management_app.tsx @@ -10,7 +10,7 @@ import './management_app.scss'; import React, { useState, useEffect, useCallback } from 'react'; -import { BehaviorSubject } from 'rxjs'; +import { BehaviorSubject, Observable } from 'rxjs'; import { i18n } from '@kbn/i18n'; import { AppMountParameters, ChromeBreadcrumb, ScopedHistory } from '@kbn/core/public'; @@ -21,6 +21,7 @@ import { reactRouterNavigate } from '@kbn/kibana-react-plugin/public'; import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render'; import { KibanaPageTemplate, KibanaPageTemplateProps } from '@kbn/shared-ux-page-kibana-template'; import useObservable from 'react-use/lib/useObservable'; +import type { ChromeStyle } from '@kbn/core-chrome-browser'; import { AppContextProvider } from './management_context'; import { ManagementSection, @@ -29,7 +30,7 @@ import { } from '../../utils'; import { ManagementRouter } from './management_router'; import { managementSidebarNav } from '../management_sidebar_nav/management_sidebar_nav'; -import { SectionsServiceStart, NavigationCardsSubject } from '../../types'; +import { SectionsServiceStart, NavigationCardsSubject, AppDependencies } from '../../types'; interface ManagementAppProps { appBasePath: string; @@ -44,14 +45,17 @@ export interface ManagementAppDependencies { setBreadcrumbs: (newBreadcrumbs: ChromeBreadcrumb[]) => void; isSidebarEnabled$: BehaviorSubject; cardsNavigationConfig$: BehaviorSubject; + chromeStyle$: Observable; } export const ManagementApp = ({ dependencies, history, appBasePath }: ManagementAppProps) => { - const { coreStart, setBreadcrumbs, isSidebarEnabled$, cardsNavigationConfig$ } = dependencies; + const { coreStart, setBreadcrumbs, isSidebarEnabled$, cardsNavigationConfig$, chromeStyle$ } = + dependencies; const [selectedId, setSelectedId] = useState(''); const [sections, setSections] = useState(); const isSidebarEnabled = useObservable(isSidebarEnabled$); const cardsNavigationConfig = useObservable(cardsNavigationConfig$); + const chromeStyle = useObservable(chromeStyle$); const onAppMounted = useCallback((id: string) => { setSelectedId(id); @@ -102,11 +106,13 @@ export const ManagementApp = ({ dependencies, history, appBasePath }: Management } : undefined; - const contextDependencies = { + const contextDependencies: AppDependencies = { appBasePath, sections, cardsNavigationConfig, kibanaVersion: dependencies.kibanaVersion, + coreStart, + chromeStyle, }; return ( diff --git a/src/plugins/management/public/plugin.tsx b/src/plugins/management/public/plugin.tsx index 8804e8010c2e9..8f8f0f6c0339b 100644 --- a/src/plugins/management/public/plugin.tsx +++ b/src/plugins/management/public/plugin.tsx @@ -119,6 +119,7 @@ export class ManagementPlugin async mount(params: AppMountParameters) { const { renderApp } = await import('./application'); const [coreStart, deps] = await core.getStartServices(); + const chromeStyle$ = coreStart.chrome.getChromeStyle$(); return renderApp(params, { sections: getSectionsServiceStartPrivate(), @@ -135,6 +136,7 @@ export class ManagementPlugin }, isSidebarEnabled$: managementPlugin.isSidebarEnabled$, cardsNavigationConfig$: managementPlugin.cardsNavigationConfig$, + chromeStyle$, }); }, }); diff --git a/src/plugins/management/public/types.ts b/src/plugins/management/public/types.ts index f5bb426ea689f..2e6f900de6298 100644 --- a/src/plugins/management/public/types.ts +++ b/src/plugins/management/public/types.ts @@ -8,10 +8,17 @@ */ import { Observable } from 'rxjs'; -import { ScopedHistory, Capabilities, ThemeServiceStart } from '@kbn/core/public'; +import { + ScopedHistory, + Capabilities, + ThemeServiceStart, + CoreStart, + ChromeBreadcrumb, + CoreTheme, +} from '@kbn/core/public'; import type { LocatorPublic } from '@kbn/share-plugin/common'; -import { ChromeBreadcrumb, CoreTheme } from '@kbn/core/public'; import type { CardsNavigationComponentProps } from '@kbn/management-cards-navigation'; +import type { ChromeStyle } from '@kbn/core-chrome-browser'; import { ManagementSection, RegisterManagementSectionArgs } from './utils'; import type { ManagementAppLocatorParams } from '../common/locator'; @@ -98,6 +105,8 @@ export interface AppDependencies { kibanaVersion: string; sections: ManagementSection[]; cardsNavigationConfig?: NavigationCardsSubject; + chromeStyle?: ChromeStyle; + coreStart: CoreStart; } export interface ConfigSchema { diff --git a/src/plugins/management/tsconfig.json b/src/plugins/management/tsconfig.json index 91e0e940c8fc6..01b1f62b3ba15 100644 --- a/src/plugins/management/tsconfig.json +++ b/src/plugins/management/tsconfig.json @@ -28,6 +28,7 @@ "@kbn/shared-ux-error-boundary", "@kbn/deeplinks-management", "@kbn/react-kibana-context-render", + "@kbn/core-chrome-browser", ], "exclude": [ "target/**/*" diff --git a/src/plugins/telemetry/server/telemetry_collection/get_data_telemetry/constants.ts b/src/plugins/telemetry/server/telemetry_collection/get_data_telemetry/constants.ts index 60bd01c2bd78c..24e236a9858a3 100644 --- a/src/plugins/telemetry/server/telemetry_collection/get_data_telemetry/constants.ts +++ b/src/plugins/telemetry/server/telemetry_collection/get_data_telemetry/constants.ts @@ -58,6 +58,7 @@ export const DATA_DATASETS_INDEX_PATTERNS = [ { pattern: 'fluent-bit*', patternName: 'fluentbit' }, { pattern: '*nginx*', patternName: 'nginx' }, { pattern: '*apache*', patternName: 'apache' }, // Already in Security (keeping it in here for documentation) + { pattern: 'logs-*-*', patternName: 'dsns-logs' }, { pattern: '*logs*', patternName: 'generic-logs' }, // Security - Elastic diff --git a/src/plugins/unified_doc_viewer/public/components/doc_viewer_table/table.scss b/src/plugins/unified_doc_viewer/public/components/doc_viewer_table/table.scss index 330cf364ae55e..25a41710e4818 100644 --- a/src/plugins/unified_doc_viewer/public/components/doc_viewer_table/table.scss +++ b/src/plugins/unified_doc_viewer/public/components/doc_viewer_table/table.scss @@ -68,11 +68,11 @@ } .kbnDocViewer__fieldsGrid { - &.euiDataGrid--noControls.euiDataGrid--bordersHorizontal .euiDataGridHeaderCell { + &.euiDataGrid--noControls.euiDataGrid--bordersHorizontal .euiDataGridHeader { border-top: none; } - &.euiDataGrid--headerUnderline .euiDataGridHeaderCell { + &.euiDataGrid--headerUnderline .euiDataGridHeader { border-bottom: $euiBorderThin; } diff --git a/src/plugins/unified_search/public/query_string_input/query_string_input.scss b/src/plugins/unified_search/public/query_string_input/query_string_input.scss index f0a682564fa0e..a8642ae0f9846 100644 --- a/src/plugins/unified_search/public/query_string_input/query_string_input.scss +++ b/src/plugins/unified_search/public/query_string_input/query_string_input.scss @@ -19,15 +19,20 @@ .kbnQueryBar__textarea { z-index: $euiZContentMenu; - resize: none !important; // When in the group, it will autosize height: $euiFormControlHeight; // Unlike most inputs within layout control groups, the text area still needs a border // for multi-line content. These adjusts help it sit above the control groups // shadow to line up correctly. - padding: ($euiSizeS + 2px) $euiSizeS $euiSizeS; + padding: $euiSizeS; + padding-top: $euiSizeS + 2px; + padding-left: $euiSizeXXL; // Account for search icon // Firefox adds margin to textarea margin: 0; + &--isClearable { + padding-right: $euiSizeXXL; // Account for clear button + } + &:not(.kbnQueryBar__textarea--autoHeight) { overflow-y: hidden; overflow-x: hidden; @@ -38,7 +43,6 @@ overflow-x: auto; overflow-y: auto; white-space: normal; - } &.kbnQueryBar__textarea--isSuggestionsVisible { @@ -46,12 +50,6 @@ border-bottom-left-radius: 0; } - &--isClearable { - @include euiFormControlWithIcon($isIconOptional: false, $side: 'right'); - } - - @include euiFormControlWithIcon($isIconOptional: true); - ~.euiFormControlLayoutIcons { // By default form control layout icon is vertically centered, but our textarea // can expand to be multi-line, so we position it with padding that matches @@ -67,4 +65,4 @@ margin-left: -1px; width: calc(100% + 1px); } -} \ No newline at end of file +} diff --git a/src/plugins/unified_search/public/query_string_input/query_string_input.tsx b/src/plugins/unified_search/public/query_string_input/query_string_input.tsx index f9862b736698e..2fc06e4aeaf53 100644 --- a/src/plugins/unified_search/public/query_string_input/query_string_input.tsx +++ b/src/plugins/unified_search/public/query_string_input/query_string_input.tsx @@ -830,6 +830,7 @@ export default class QueryStringInputUI extends PureComponent { await browser.setWindowSize(1200, 800); await PageObjects.common.navigateToApp('console'); diff --git a/test/functional/apps/discover/context_awareness/_data_source_profile.ts b/test/functional/apps/discover/context_awareness/_data_source_profile.ts index 35e3552afa655..ecf4b2fb29c4c 100644 --- a/test/functional/apps/discover/context_awareness/_data_source_profile.ts +++ b/test/functional/apps/discover/context_awareness/_data_source_profile.ts @@ -12,16 +12,115 @@ import expect from '@kbn/expect'; import type { FtrProviderContext } from '../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const { common, discover, unifiedFieldList } = getPageObjects([ + const { common, discover, unifiedFieldList, dashboard, header, timePicker } = getPageObjects([ 'common', 'discover', 'unifiedFieldList', + 'dashboard', + 'header', + 'timePicker', ]); const testSubjects = getService('testSubjects'); const dataViews = getService('dataViews'); const dataGrid = getService('dataGrid'); + const monacoEditor = getService('monacoEditor'); + const ebtUIHelper = getService('kibana_ebt_ui'); + const retry = getService('retry'); + const esArchiver = getService('esArchiver'); + const kibanaServer = getService('kibanaServer'); + const dashboardAddPanel = getService('dashboardAddPanel'); describe('data source profile', () => { + describe('telemetry', () => { + before(async () => { + await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); + await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover'); + }); + + after(async () => { + await kibanaServer.importExport.unload('test/functional/fixtures/kbn_archiver/discover'); + }); + + it('should set EBT context for telemetry events with default profile', async () => { + await common.navigateToApp('discover'); + await discover.selectTextBaseLang(); + await discover.waitUntilSearchingHasFinished(); + await monacoEditor.setCodeEditorValue('from my-example-* | sort @timestamp desc'); + await ebtUIHelper.setOptIn(true); + await testSubjects.click('querySubmitButton'); + await discover.waitUntilSearchingHasFinished(); + + const events = await ebtUIHelper.getEvents(Number.MAX_SAFE_INTEGER, { + eventTypes: ['performance_metric'], + withTimeoutMs: 500, + }); + + expect(events[events.length - 1].context.discoverProfiles).to.eql([ + 'example-root-profile', + 'default-data-source-profile', + ]); + }); + + it('should set EBT context for telemetry events when example profile and reset', async () => { + await common.navigateToApp('discover'); + await discover.selectTextBaseLang(); + await discover.waitUntilSearchingHasFinished(); + await monacoEditor.setCodeEditorValue('from my-example-logs | sort @timestamp desc'); + await ebtUIHelper.setOptIn(true); + await testSubjects.click('querySubmitButton'); + await discover.waitUntilSearchingHasFinished(); + + const events = await ebtUIHelper.getEvents(Number.MAX_SAFE_INTEGER, { + eventTypes: ['performance_metric'], + withTimeoutMs: 500, + }); + + expect(events[events.length - 1].context.discoverProfiles).to.eql([ + 'example-root-profile', + 'example-data-source-profile', + ]); + + // should reset the profiles when navigating away from Discover + await testSubjects.click('logo'); + await retry.waitFor('home page to open', async () => { + return (await testSubjects.getVisibleText('euiBreadcrumb')) === 'Home'; + }); + await testSubjects.click('addSampleData'); + + await retry.try(async () => { + const eventsAfter = await ebtUIHelper.getEvents(Number.MAX_SAFE_INTEGER, { + eventTypes: ['click'], + withTimeoutMs: 500, + }); + + expect(eventsAfter[eventsAfter.length - 1].context.discoverProfiles).to.eql([]); + }); + }); + + it('should not set EBT context for embeddables', async () => { + await dashboard.navigateToApp(); + await dashboard.gotoDashboardLandingPage(); + await dashboard.clickNewDashboard(); + await timePicker.setDefaultAbsoluteRange(); + await ebtUIHelper.setOptIn(true); + await dashboardAddPanel.addSavedSearch('A Saved Search'); + await header.waitUntilLoadingHasFinished(); + await dashboard.waitForRenderComplete(); + const rows = await dataGrid.getDocTableRows(); + expect(rows.length).to.be.above(0); + await testSubjects.click('dashboardEditorMenuButton'); + + const events = await ebtUIHelper.getEvents(Number.MAX_SAFE_INTEGER, { + eventTypes: ['click'], + withTimeoutMs: 500, + }); + + expect( + events.every((event) => !(event.context.discoverProfiles as string[])?.length) + ).to.be(true); + }); + }); + describe('ES|QL mode', () => { describe('cell renderers', () => { it('should render custom @timestamp but not custom log.level', async () => { diff --git a/test/functional/apps/discover/context_awareness/config.ts b/test/functional/apps/discover/context_awareness/config.ts index b56fb52c10d13..9261cef450adb 100644 --- a/test/functional/apps/discover/context_awareness/config.ts +++ b/test/functional/apps/discover/context_awareness/config.ts @@ -8,6 +8,11 @@ */ import { FtrConfigProviderContext } from '@kbn/test'; +import path from 'path'; +import { + KibanaEBTUIProvider, + KibanaEBTServerProvider, +} from '../../../../analytics/services/kibana_ebt'; export default async function ({ readConfigFile }: FtrConfigProviderContext) { const functionalConfig = await readConfigFile(require.resolve('../../../config.base.js')); @@ -21,7 +26,16 @@ export default async function ({ readConfigFile }: FtrConfigProviderContext) { serverArgs: [ ...baseConfig.kbnTestServer.serverArgs, '--discover.experimental.enabledProfiles=["example-root-profile","example-data-source-profile","example-document-profile"]', + `--plugin-path=${path.resolve( + __dirname, + '../../../../analytics/plugins/analytics_ftr_helpers' + )}`, ], }, + services: { + ...baseConfig.services, + kibana_ebt_server: KibanaEBTServerProvider, + kibana_ebt_ui: KibanaEBTUIProvider, + }, }; } diff --git a/test/functional/apps/discover/esql/_esql_view.ts b/test/functional/apps/discover/esql/_esql_view.ts index 01660925db799..98bf29b187402 100644 --- a/test/functional/apps/discover/esql/_esql_view.ts +++ b/test/functional/apps/discover/esql/_esql_view.ts @@ -199,7 +199,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const cell = await dataGrid.getCellElementExcludingControlColumns(0, 1); expect(await cell.getVisibleText()).to.be(' - '); expect(await dataGrid.getHeaders()).to.eql([ - 'Select column', + "Select columnPress the Enter key to interact with this cell's contents.", // contains screen reader help text 'Control column', 'Access to degraded docs', 'Access to available stacktraces', diff --git a/test/functional/apps/discover/ftr_provider_context.d.ts b/test/functional/apps/discover/ftr_provider_context.d.ts index f2df0c30545ee..8914a16512702 100644 --- a/test/functional/apps/discover/ftr_provider_context.d.ts +++ b/test/functional/apps/discover/ftr_provider_context.d.ts @@ -9,12 +9,18 @@ import { GenericFtrProviderContext } from '@kbn/test'; import { commonFunctionalServices } from '@kbn/ftr-common-functional-services'; +import { + KibanaEBTUIProvider, + KibanaEBTServerProvider, +} from '../../../analytics/services/kibana_ebt'; import { services as functionalServces } from '../../services'; import { pageObjects } from '../../page_objects'; const services = { ...functionalServces, ...commonFunctionalServices, + kibana_ebt_server: KibanaEBTServerProvider, + kibana_ebt_ui: KibanaEBTUIProvider, }; export type FtrProviderContext = GenericFtrProviderContext; diff --git a/test/functional/apps/discover/group2_data_grid3/_data_grid_row_selection.ts b/test/functional/apps/discover/group2_data_grid3/_data_grid_row_selection.ts index 97e56a1de868c..66d3f1323650e 100644 --- a/test/functional/apps/discover/group2_data_grid3/_data_grid_row_selection.ts +++ b/test/functional/apps/discover/group2_data_grid3/_data_grid_row_selection.ts @@ -84,6 +84,60 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); }); + it('should be able to select multiple rows holding Shift key', async () => { + expect(await dataGrid.isSelectedRowsMenuVisible()).to.be(false); + + // select 1 row + await dataGrid.selectRow(1); + + await retry.try(async () => { + expect(await dataGrid.isSelectedRowsMenuVisible()).to.be(true); + expect(await dataGrid.getNumberOfSelectedRowsOnCurrentPage()).to.be(1); + expect(await dataGrid.getNumberOfSelectedRows()).to.be(1); + }); + + // select 3 more + await dataGrid.selectRow(4, { pressShiftKey: true }); + + await retry.try(async () => { + expect(await dataGrid.isSelectedRowsMenuVisible()).to.be(true); + expect(await dataGrid.getNumberOfSelectedRowsOnCurrentPage()).to.be(4); + expect(await dataGrid.getNumberOfSelectedRows()).to.be(4); + }); + + // deselect index 3 and 4 + await dataGrid.selectRow(3, { pressShiftKey: true }); + + await retry.try(async () => { + expect(await dataGrid.isSelectedRowsMenuVisible()).to.be(true); + expect(await dataGrid.getNumberOfSelectedRowsOnCurrentPage()).to.be(2); + expect(await dataGrid.getNumberOfSelectedRows()).to.be(2); + }); + + // select from index 3 to 0 + await dataGrid.selectRow(0, { pressShiftKey: true }); + + await retry.try(async () => { + expect(await dataGrid.isSelectedRowsMenuVisible()).to.be(true); + expect(await dataGrid.getNumberOfSelectedRowsOnCurrentPage()).to.be(4); + expect(await dataGrid.getNumberOfSelectedRows()).to.be(4); + }); + + // select from both pages + await testSubjects.click('pagination-button-1'); + await retry.try(async () => { + expect(await dataGrid.getNumberOfSelectedRowsOnCurrentPage()).to.be(0); + }); + + await dataGrid.selectRow(2, { pressShiftKey: true }); + + await retry.try(async () => { + expect(await dataGrid.isSelectedRowsMenuVisible()).to.be(true); + expect(await dataGrid.getNumberOfSelectedRowsOnCurrentPage()).to.be(3); + expect(await dataGrid.getNumberOfSelectedRows()).to.be(8); + }); + }); + it('should be able to bulk select rows', async () => { expect(await dataGrid.isSelectedRowsMenuVisible()).to.be(false); expect(await testSubjects.getAttribute('selectAllDocsOnPageToggle', 'title')).to.be( diff --git a/test/functional/services/data_grid.ts b/test/functional/services/data_grid.ts index a280c6556bbd7..efdaeb49933f2 100644 --- a/test/functional/services/data_grid.ts +++ b/test/functional/services/data_grid.ts @@ -34,7 +34,7 @@ export class DataGridService extends FtrService { const table = await this.find.byCssSelector('.euiDataGrid'); const $ = await table.parseDomContent(); - const columns = $('.euiDataGridHeaderCell__content') + const columns = $('.euiDataGridHeaderCell') .toArray() .map((cell) => $(cell).text()); const cells = $.findTestSubjects('dataGridRowCell') @@ -59,7 +59,7 @@ export class DataGridService extends FtrService { cellDataTestSubj: string ): Promise { const $ = await element.parseDomContent(); - const columnNumber = $('.euiDataGridHeaderCell__content').length; + const columnNumber = $('.euiDataGridHeaderCell').length; const cells = $.findTestSubjects('dataGridRowCell') .toArray() .map((cell) => @@ -79,7 +79,7 @@ export class DataGridService extends FtrService { public async getHeaders() { const header = await this.testSubjects.find('euiDataGridBody > dataGridHeader'); const $ = await header.parseDomContent(); - return $('.euiDataGridHeaderCell__content') + return $('.euiDataGridHeaderCell') .toArray() .map((cell) => $(cell).text()); } @@ -134,6 +134,7 @@ export class DataGridService extends FtrService { let actionButton: WebElementWrapper | undefined; await this.retry.try(async () => { const cell = await this.getCellElement(rowIndex, columnIndex); + await cell.moveMouseTo(); await cell.click(); actionButton = await cell.findByTestSubject(selector); if (!actionButton) { @@ -154,6 +155,7 @@ export class DataGridService extends FtrService { columnIndex, 'euiDataGridCellExpandButton' ); + await actionButton.moveMouseTo(); await actionButton.click(); await this.retry.waitFor('popover to be opened', async () => { return await this.testSubjects.exists('euiDataGridExpansionPopover'); @@ -197,6 +199,7 @@ export class DataGridService extends FtrService { */ public async clickCellFilterForButton(rowIndex: number = 0, columnIndex: number = 0) { const actionButton = await this.getCellActionButton(rowIndex, columnIndex, 'filterForButton'); + await actionButton.moveMouseTo(); await actionButton.click(); } @@ -215,11 +218,13 @@ export class DataGridService extends FtrService { controlsCount + columnIndex, 'filterForButton' ); + await actionButton.moveMouseTo(); await actionButton.click(); } public async clickCellFilterOutButton(rowIndex: number = 0, columnIndex: number = 0) { const actionButton = await this.getCellActionButton(rowIndex, columnIndex, 'filterOutButton'); + await actionButton.moveMouseTo(); await actionButton.click(); } @@ -233,6 +238,7 @@ export class DataGridService extends FtrService { controlsCount + columnIndex, 'filterOutButton' ); + await actionButton.moveMouseTo(); await actionButton.click(); } @@ -374,6 +380,7 @@ export class DataGridService extends FtrService { if (toggle) { await toggle.scrollIntoViewIfNecessary(); + await toggle.moveMouseTo(); await toggle.click(); await this.retry.waitFor('doc viewer to open', async () => { return this.isShowingDocViewer(); @@ -402,9 +409,7 @@ export class DataGridService extends FtrService { } public async getHeaderFields(): Promise { - const result = await this.find.allByCssSelector( - '.euiDataGridHeaderCell:not(.euiDataGridHeaderCell--controlColumn) .euiDataGridHeaderCell__content' - ); + const result = await this.find.allByCssSelector('.euiDataGridHeaderCell__content'); const textArr = []; for (const cell of result) { @@ -415,9 +420,7 @@ export class DataGridService extends FtrService { } public async getControlColumnHeaderFields(): Promise { - const result = await this.find.allByCssSelector( - '.euiDataGridHeaderCell--controlColumn .euiDataGridHeaderCell__content' - ); + const result = await this.find.allByCssSelector('.euiDataGridHeaderCell--controlColumn'); const textArr = []; for (const cell of result) { @@ -628,7 +631,9 @@ export class DataGridService extends FtrService { const cellSelector = ['addFilterForValueButton', 'addFilterOutValueButton'].includes(actionName) ? `tableDocViewRow-${fieldName}-value` : `tableDocViewRow-${fieldName}-name`; + await this.testSubjects.moveMouseTo(cellSelector); await this.testSubjects.click(cellSelector); + await this.retry.waitFor('grid cell actions to appear', async () => { return this.testSubjects.exists(`${actionName}-${fieldName}`); }); @@ -636,7 +641,10 @@ export class DataGridService extends FtrService { public async clickFieldActionInFlyout(fieldName: string, actionName: string): Promise { await this.showFieldCellActionInFlyout(fieldName, actionName); - await this.testSubjects.click(`${actionName}-${fieldName}`); + + const actionSelector = `${actionName}-${fieldName}`; + await this.testSubjects.moveMouseTo(actionSelector); + await this.testSubjects.click(actionSelector); } public async isFieldPinnedInFlyout(fieldName: string): Promise { @@ -658,11 +666,14 @@ export class DataGridService extends FtrService { } public async expandFieldNameCellInFlyout(fieldName: string): Promise { + const cellSelector = `tableDocViewRow-${fieldName}-name`; const buttonSelector = 'euiDataGridCellExpandButton'; - await this.testSubjects.click(`tableDocViewRow-${fieldName}-name`); + await this.testSubjects.moveMouseTo(cellSelector); + await this.testSubjects.click(cellSelector); await this.retry.waitFor('grid cell actions to appear', async () => { return this.testSubjects.exists(buttonSelector); }); + await this.testSubjects.moveMouseTo(buttonSelector); await this.testSubjects.click(buttonSelector); } @@ -689,12 +700,21 @@ export class DataGridService extends FtrService { await this.checkCurrentRowsPerPageToBe(newValue); } - public async selectRow(rowIndex: number) { + public async selectRow(rowIndex: number, { pressShiftKey }: { pressShiftKey?: boolean } = {}) { const checkbox = await this.find.byCssSelector( `.euiDataGridRow[data-grid-visible-row-index="${rowIndex}"] [data-gridcell-column-id="select"] .euiCheckbox__input` ); - await checkbox.click(); + if (pressShiftKey) { + await this.browser + .getActions() + .keyDown(Key.SHIFT) + .click(checkbox._webElement) + .keyUp(Key.SHIFT) + .perform(); + } else { + await checkbox.click(); + } } public async getNumberOfSelectedRows() { diff --git a/tsconfig.base.json b/tsconfig.base.json index 84d2b4a258c1c..7a66911a4bee5 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -1214,6 +1214,8 @@ "@kbn/ml-date-utils/*": ["x-pack/packages/ml/date_utils/*"], "@kbn/ml-error-utils": ["x-pack/packages/ml/error_utils"], "@kbn/ml-error-utils/*": ["x-pack/packages/ml/error_utils/*"], + "@kbn/ml-field-stats-flyout": ["x-pack/packages/ml/field_stats_flyout"], + "@kbn/ml-field-stats-flyout/*": ["x-pack/packages/ml/field_stats_flyout/*"], "@kbn/ml-in-memory-table": ["x-pack/packages/ml/in_memory_table"], "@kbn/ml-in-memory-table/*": ["x-pack/packages/ml/in_memory_table/*"], "@kbn/ml-is-defined": ["x-pack/packages/ml/is_defined"], @@ -1228,6 +1230,8 @@ "@kbn/ml-nested-property/*": ["x-pack/packages/ml/nested_property/*"], "@kbn/ml-number-utils": ["x-pack/packages/ml/number_utils"], "@kbn/ml-number-utils/*": ["x-pack/packages/ml/number_utils/*"], + "@kbn/ml-parse-interval": ["x-pack/packages/ml/parse_interval"], + "@kbn/ml-parse-interval/*": ["x-pack/packages/ml/parse_interval/*"], "@kbn/ml-plugin": ["x-pack/plugins/ml"], "@kbn/ml-plugin/*": ["x-pack/plugins/ml/*"], "@kbn/ml-query-utils": ["x-pack/packages/ml/query_utils"], @@ -1250,6 +1254,8 @@ "@kbn/ml-ui-actions/*": ["x-pack/packages/ml/ui_actions/*"], "@kbn/ml-url-state": ["x-pack/packages/ml/url_state"], "@kbn/ml-url-state/*": ["x-pack/packages/ml/url_state/*"], + "@kbn/ml-validators": ["x-pack/packages/ml/validators"], + "@kbn/ml-validators/*": ["x-pack/packages/ml/validators/*"], "@kbn/mock-idp-plugin": ["packages/kbn-mock-idp-plugin"], "@kbn/mock-idp-plugin/*": ["packages/kbn-mock-idp-plugin/*"], "@kbn/mock-idp-utils": ["packages/kbn-mock-idp-utils"], diff --git a/x-pack/.i18nrc.json b/x-pack/.i18nrc.json index 8082fa6f8ede2..97aa05deb4a42 100644 --- a/x-pack/.i18nrc.json +++ b/x-pack/.i18nrc.json @@ -79,6 +79,7 @@ "packages/ml/data_grid", "packages/ml/data_view_utils", "packages/ml/date_picker", + "packages/ml/field_stats_flyout", "packages/ml/inference_integration_flyout", "packages/ml/trained_models_utils", "packages/ml/category_validator", diff --git a/x-pack/packages/index-management/index_management_shared_types/src/types.ts b/x-pack/packages/index-management/index_management_shared_types/src/types.ts index 1413830f2931f..82dba5ed7e310 100644 --- a/x-pack/packages/index-management/index_management_shared_types/src/types.ts +++ b/x-pack/packages/index-management/index_management_shared_types/src/types.ts @@ -25,6 +25,9 @@ export interface IndexManagementPluginStart { getIndexMappingComponent: (deps: { history: ScopedHistory; }) => React.FC; + getIndexSettingsComponent: (deps: { + history: ScopedHistory; + }) => React.FC; } export interface Index { @@ -56,7 +59,9 @@ export interface IndexMappingProps { index?: Index; showAboutMappings?: boolean; } - +export interface IndexSettingProps { + indexName: string; +} export interface SendRequestResponse { data: D | null; error: E | null; diff --git a/x-pack/packages/ml/field_stats_flyout/README.md b/x-pack/packages/ml/field_stats_flyout/README.md new file mode 100644 index 0000000000000..23a8462c96491 --- /dev/null +++ b/x-pack/packages/ml/field_stats_flyout/README.md @@ -0,0 +1,3 @@ +# @kbn/ml-field-stats-flyout + +This package provides a field statistics flyout component. It is used in the Machine Learning and Transforms plugin. diff --git a/x-pack/plugins/ml/public/application/components/field_stats_flyout/eui_combo_box_with_field_stats.tsx b/x-pack/packages/ml/field_stats_flyout/eui_combo_box_with_field_stats.tsx similarity index 68% rename from x-pack/plugins/ml/public/application/components/field_stats_flyout/eui_combo_box_with_field_stats.tsx rename to x-pack/packages/ml/field_stats_flyout/eui_combo_box_with_field_stats.tsx index 8bb04b7597dd8..a09710da8e398 100644 --- a/x-pack/plugins/ml/public/application/components/field_stats_flyout/eui_combo_box_with_field_stats.tsx +++ b/x-pack/packages/ml/field_stats_flyout/eui_combo_box_with_field_stats.tsx @@ -25,9 +25,25 @@ export const optionCss = css` } `; -export const EuiComboBoxWithFieldStats: FC< - EuiComboBoxProps -> = ({ options, ...restProps }) => { +/** + * Props for the EuiComboBoxWithFieldStats component. + */ +export type EuiComboBoxWithFieldStatsProps = EuiComboBoxProps< + string | number | string[] | undefined +>; + +/** + * React component that wraps the EuiComboBox component and adds field statistics functionality. + * + * @component + * @example + * ```tsx + * + * ``` + * @param {EuiComboBoxWithFieldStatsProps} props - The component props. + */ +export const EuiComboBoxWithFieldStats: FC = (props) => { + const { options, ...restProps } = props; const { renderOption } = useFieldStatsTrigger(); const comboBoxOptions: EuiComboBoxOptionOption[] = useMemo( () => diff --git a/x-pack/plugins/ml/public/application/components/field_stats_flyout/field_stats_content.tsx b/x-pack/packages/ml/field_stats_flyout/field_stats_content.tsx similarity index 73% rename from x-pack/plugins/ml/public/application/components/field_stats_flyout/field_stats_content.tsx rename to x-pack/packages/ml/field_stats_flyout/field_stats_content.tsx index 8e48370c9c785..a649ed778d157 100644 --- a/x-pack/plugins/ml/public/application/components/field_stats_flyout/field_stats_content.tsx +++ b/x-pack/packages/ml/field_stats_flyout/field_stats_content.tsx @@ -15,20 +15,42 @@ import { FieldStats } from '@kbn/unified-field-list/src/components/field_stats'; import { isDefined } from '@kbn/ml-is-defined'; import type { DataView } from '@kbn/data-plugin/common'; import type { TimeRange as TimeRangeMs } from '@kbn/ml-date-picker'; +import { getDefaultDSLQuery } from '@kbn/ml-query-utils'; import moment from 'moment'; import { euiPaletteColorBlind } from '@elastic/eui'; -import { getDefaultDatafeedQuery } from '../../jobs/new_job/utils/new_job_utils'; -import { useFieldStatsFlyoutContext } from './use_field_stats_flytout_context'; +import { useFieldStatsFlyoutContext } from './use_field_stats_flyout_context'; -const DEFAULT_DSL_QUERY = getDefaultDatafeedQuery(); const DEFAULT_COLOR = euiPaletteColorBlind()[0]; -export const FieldStatsContent: FC<{ +/** + * Represents the props for the FieldStatsFlyout component. + */ +export interface FieldStatsFlyoutProps { + /** + * The data view object. + */ dataView: DataView; + /** + * Services required for field statistics. + */ fieldStatsServices: FieldStatsServices; + /** + * Optional time range in milliseconds. + */ timeRangeMs?: TimeRangeMs; + /** + * Optional DSL query for filtering field statistics. + */ dslQuery?: FieldStatsProps['dslQuery']; -}> = ({ dataView: selectedDataView, fieldStatsServices, timeRangeMs, dslQuery }) => { +} + +/** + * Renders the content for the field statistics flyout. + * @param props - The props for the FieldStatsContent component. + * @returns The rendered FieldStatsContent component. + */ +export const FieldStatsContent: FC = (props) => { + const { dataView: selectedDataView, fieldStatsServices, timeRangeMs, dslQuery } = props; const { fieldName } = useFieldStatsFlyoutContext(); // Format timestamp to ISO formatted date strings @@ -58,7 +80,7 @@ export const FieldStatsContent: FC<{ = ({ dataView, fieldStatsServices, timeRangeMs, dslQuery }) => { +} + +/** + * Renders a flyout component for displaying field statistics. + * + * @component + * @example + * ```tsx + * + * ``` + * + * @param {Object} props - The component props. + */ +export const FieldStatsFlyout: FC = (props) => { + const { dataView, fieldStatsServices, timeRangeMs, dslQuery } = props; const { setIsFlyoutVisible, isFlyoutVisible, fieldName } = useFieldStatsFlyoutContext(); const closeFlyout = useCallback(() => setIsFlyoutVisible(false), []); // eslint-disable-line react-hooks/exhaustive-deps diff --git a/x-pack/plugins/ml/public/application/components/field_stats_flyout/field_stats_flyout_provider.tsx b/x-pack/packages/ml/field_stats_flyout/field_stats_flyout_provider.tsx similarity index 72% rename from x-pack/plugins/ml/public/application/components/field_stats_flyout/field_stats_flyout_provider.tsx rename to x-pack/packages/ml/field_stats_flyout/field_stats_flyout_provider.tsx index 9b23ac89afcdb..9dd947f0872f3 100644 --- a/x-pack/plugins/ml/public/application/components/field_stats_flyout/field_stats_flyout_provider.tsx +++ b/x-pack/packages/ml/field_stats_flyout/field_stats_flyout_provider.tsx @@ -7,7 +7,9 @@ import type { PropsWithChildren, FC } from 'react'; import React, { useCallback, useState } from 'react'; +import type { CoreStart } from '@kbn/core/public'; import type { DataView } from '@kbn/data-plugin/common'; +import type { DataPublicPluginStart } from '@kbn/data-plugin/public'; import type { FieldStatsServices } from '@kbn/unified-field-list/src/components/field_stats'; import type { TimeRange as TimeRangeMs } from '@kbn/ml-date-picker'; import type { FieldStatsProps } from '@kbn/unified-field-list/src/components/field_stats'; @@ -16,33 +18,73 @@ import { getProcessedFields } from '@kbn/ml-data-grid'; import { stringHash } from '@kbn/ml-string-hash'; import { lastValueFrom } from 'rxjs'; import { useRef } from 'react'; +import { useKibana } from '@kbn/kibana-react-plugin/public'; import { getMergedSampleDocsForPopulatedFieldsQuery } from './populated_fields/get_merged_populated_fields_query'; -import { useMlKibana } from '../../contexts/kibana'; import { FieldStatsFlyout } from './field_stats_flyout'; -import { MLFieldStatsFlyoutContext } from './use_field_stats_flytout_context'; +import { MLFieldStatsFlyoutContext } from './use_field_stats_flyout_context'; import { PopulatedFieldsCacheManager } from './populated_fields/populated_fields_cache_manager'; -export const FieldStatsFlyoutProvider: FC< - PropsWithChildren<{ - dataView: DataView; - fieldStatsServices: FieldStatsServices; - timeRangeMs?: TimeRangeMs; - dslQuery?: FieldStatsProps['dslQuery']; - disablePopulatedFields?: boolean; - }> -> = ({ - dataView, - fieldStatsServices, - timeRangeMs, - dslQuery, - disablePopulatedFields = false, - children, -}) => { +type Services = CoreStart & { + data: DataPublicPluginStart; +}; + +function useDataSearch() { + const { data } = useKibana().services; + + if (!data) { + throw new Error('Kibana data service not available.'); + } + + return data.search; +} + +/** + * Props for the FieldStatsFlyoutProvider component. + * + * @typedef {Object} FieldStatsFlyoutProviderProps + * @property dataView - The data view object. + * @property fieldStatsServices - Services required for field statistics. + * @property [timeRangeMs] - Optional time range in milliseconds. + * @property [dslQuery] - Optional DSL query for filtering field statistics. + * @property [disablePopulatedFields] - Optional flag to disable populated fields. + */ +export type FieldStatsFlyoutProviderProps = PropsWithChildren<{ + dataView: DataView; + fieldStatsServices: FieldStatsServices; + timeRangeMs?: TimeRangeMs; + dslQuery?: FieldStatsProps['dslQuery']; + disablePopulatedFields?: boolean; +}>; + +/** + * Provides field statistics in a flyout component. + * + * @component + * @example + * ```tsx + * + * {children} + * + * ``` + * + * @param {FieldStatsFlyoutProviderProps} props - The component props. + */ +export const FieldStatsFlyoutProvider: FC = (props) => { const { - services: { - data: { search }, - }, - } = useMlKibana(); + dataView, + fieldStatsServices, + timeRangeMs, + dslQuery, + disablePopulatedFields = false, + children, + } = props; + const search = useDataSearch(); const [isFieldStatsFlyoutVisible, setFieldStatsIsFlyoutVisible] = useState(false); const [fieldName, setFieldName] = useState(); const [fieldValue, setFieldValue] = useState(); diff --git a/x-pack/plugins/ml/public/application/components/field_stats_flyout/field_stats_info_button.tsx b/x-pack/packages/ml/field_stats_flyout/field_stats_info_button.tsx similarity index 66% rename from x-pack/plugins/ml/public/application/components/field_stats_flyout/field_stats_info_button.tsx rename to x-pack/packages/ml/field_stats_flyout/field_stats_info_button.tsx index 0bdd1613a5d5d..936f9550cdda1 100644 --- a/x-pack/plugins/ml/public/application/components/field_stats_flyout/field_stats_info_button.tsx +++ b/x-pack/packages/ml/field_stats_flyout/field_stats_info_button.tsx @@ -7,30 +7,81 @@ import { EuiButtonIcon, EuiFlexGroup, EuiFlexItem, EuiToolTip, EuiText } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import React from 'react'; +import React, { type FC } from 'react'; import { FieldIcon } from '@kbn/react-field'; import { type Field } from '@kbn/ml-anomaly-utils'; -import { useCurrentThemeVars } from '../../contexts/kibana'; -import { getKbnFieldIconType } from '../../../../common/util/get_field_icon_types'; +import { useKibana } from '@kbn/kibana-react-plugin/public'; +import { useCurrentEuiThemeVars } from '@kbn/ml-kibana-theme'; +import { getKbnFieldIconType } from './get_kbn_field_icon_types'; + +function useThemeVars() { + const { theme } = useKibana().services; + + if (!theme) { + throw new TypeError('theme service not available in kibana-react context.'); + } + + return useCurrentEuiThemeVars(theme); +} + +/** + * Represents a field used for statistics. + */ export type FieldForStats = Pick; -export const FieldStatsInfoButton = ({ - field, - label, - onButtonClick, - disabled, - isEmpty = false, - hideTrigger = false, -}: { + +/** + * Represents the props for the FieldStatsInfoButton component. + */ +export interface FieldStatsInfoButtonProps { + /** + * The field for which to display statistics. + */ field: FieldForStats; + /** + * The label for the field. + */ label: string; - searchValue?: string; + /** + * Button click callback function. + * @param field - The field for which to display statistics. + * @returns void + */ + onButtonClick?: (field: FieldForStats) => void; + /** + * If true, the button is disabled. + */ disabled?: boolean; + /** + * If true, the field is empty. + */ isEmpty?: boolean; - onButtonClick?: (field: FieldForStats) => void; + /** + * If true, the trigger is hidden. + */ hideTrigger?: boolean; -}) => { - const themeVars = useCurrentThemeVars(); +} + +/** + * Renders a button component for field statistics information. + * + * @component + * @example + * ```tsx + * + * ``` + * @param {FieldStatsInfoButtonProps} props - The props for the FieldStatsInfoButton component. + */ +export const FieldStatsInfoButton: FC = (props) => { + const { field, label, onButtonClick, disabled, isEmpty, hideTrigger } = props; + const themeVars = useThemeVars(); const emptyFieldMessage = isEmpty ? ' ' + i18n.translate('xpack.ml.newJob.wizard.fieldContextPopover.emptyFieldInSampleDocsMsg', { diff --git a/x-pack/packages/ml/field_stats_flyout/get_kbn_field_icon_types.test.ts b/x-pack/packages/ml/field_stats_flyout/get_kbn_field_icon_types.test.ts new file mode 100644 index 0000000000000..5f930750ae8a8 --- /dev/null +++ b/x-pack/packages/ml/field_stats_flyout/get_kbn_field_icon_types.test.ts @@ -0,0 +1,44 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { getKbnFieldIconType } from './get_kbn_field_icon_types'; +import { ES_FIELD_TYPES } from '@kbn/field-types'; + +describe('getKbnFieldIconType', () => { + it('should return "number" for numeric field types', () => { + const numericTypes = [ + ES_FIELD_TYPES.FLOAT, + ES_FIELD_TYPES.HALF_FLOAT, + ES_FIELD_TYPES.SCALED_FLOAT, + ES_FIELD_TYPES.DOUBLE, + ES_FIELD_TYPES.INTEGER, + ES_FIELD_TYPES.LONG, + ES_FIELD_TYPES.SHORT, + ES_FIELD_TYPES.UNSIGNED_LONG, + ]; + + numericTypes.forEach((type) => { + expect(getKbnFieldIconType(type)).toBe('number'); + }); + }); + + it('should return "date" for date field types', () => { + const dateTypes = [ES_FIELD_TYPES.DATE, ES_FIELD_TYPES.DATE_NANOS]; + + dateTypes.forEach((type) => { + expect(getKbnFieldIconType(type)).toBe('date'); + }); + }); + + it('should return the same type for other field types', () => { + const otherTypes = ['keyword', 'text', 'boolean', 'geo_point', 'geo_shape']; + + otherTypes.forEach((type) => { + expect(getKbnFieldIconType(type)).toBe(type); + }); + }); +}); diff --git a/x-pack/plugins/ml/common/util/get_field_icon_types.ts b/x-pack/packages/ml/field_stats_flyout/get_kbn_field_icon_types.ts similarity index 79% rename from x-pack/plugins/ml/common/util/get_field_icon_types.ts rename to x-pack/packages/ml/field_stats_flyout/get_kbn_field_icon_types.ts index 517089d6b0fa6..7ae82d0c28ca8 100644 --- a/x-pack/plugins/ml/common/util/get_field_icon_types.ts +++ b/x-pack/packages/ml/field_stats_flyout/get_kbn_field_icon_types.ts @@ -8,6 +8,12 @@ import { ES_FIELD_TYPES } from '@kbn/field-types'; import type { FieldIconProps } from '@kbn/react-field'; +/** + * Returns the Kibana field icon type based on the provided field type. + * + * @param fieldType - The type of the field for which the icon type is needed. + * @returns The icon type corresponding to the provided field type. + */ export function getKbnFieldIconType(type: string): FieldIconProps['type'] { switch (type) { case ES_FIELD_TYPES.FLOAT: diff --git a/x-pack/packages/ml/field_stats_flyout/index.ts b/x-pack/packages/ml/field_stats_flyout/index.ts new file mode 100644 index 0000000000000..db4d3c5ee7b15 --- /dev/null +++ b/x-pack/packages/ml/field_stats_flyout/index.ts @@ -0,0 +1,27 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export { FieldStatsFlyout } from './field_stats_flyout'; +export { FieldStatsContent, type FieldStatsFlyoutProps } from './field_stats_content'; +export { + FieldStatsFlyoutProvider, + type FieldStatsFlyoutProviderProps, +} from './field_stats_flyout_provider'; +export { + MLFieldStatsFlyoutContext, + useFieldStatsFlyoutContext, +} from './use_field_stats_flyout_context'; +export { + FieldStatsInfoButton, + type FieldForStats, + type FieldStatsInfoButtonProps, +} from './field_stats_info_button'; +export { useFieldStatsTrigger } from './use_field_stats_trigger'; +export { + EuiComboBoxWithFieldStats, + type EuiComboBoxWithFieldStatsProps, +} from './eui_combo_box_with_field_stats'; diff --git a/x-pack/plugins/security_solution/common/api/timeline/clean_draft_timelines/clean_draft_timelines_route.ts b/x-pack/packages/ml/field_stats_flyout/jest.config.js similarity index 58% rename from x-pack/plugins/security_solution/common/api/timeline/clean_draft_timelines/clean_draft_timelines_route.ts rename to x-pack/packages/ml/field_stats_flyout/jest.config.js index fd967824370ea..92a117be85f1b 100644 --- a/x-pack/plugins/security_solution/common/api/timeline/clean_draft_timelines/clean_draft_timelines_route.ts +++ b/x-pack/packages/ml/field_stats_flyout/jest.config.js @@ -5,10 +5,8 @@ * 2.0. */ -import * as rt from 'io-ts'; - -import { TimelineTypeLiteralRt } from '../model/api'; - -export const cleanDraftTimelineSchema = rt.type({ - timelineType: TimelineTypeLiteralRt, -}); +module.exports = { + preset: '@kbn/test', + rootDir: '../../../..', + roots: ['/x-pack/packages/ml/field_stats_flyout'], +}; diff --git a/x-pack/packages/ml/field_stats_flyout/kibana.jsonc b/x-pack/packages/ml/field_stats_flyout/kibana.jsonc new file mode 100644 index 0000000000000..4c362fcc84e05 --- /dev/null +++ b/x-pack/packages/ml/field_stats_flyout/kibana.jsonc @@ -0,0 +1,5 @@ +{ + "type": "shared-browser", + "id": "@kbn/ml-field-stats-flyout", + "owner": "@elastic/ml-ui" +} diff --git a/x-pack/packages/ml/field_stats_flyout/package.json b/x-pack/packages/ml/field_stats_flyout/package.json new file mode 100644 index 0000000000000..effef071413a1 --- /dev/null +++ b/x-pack/packages/ml/field_stats_flyout/package.json @@ -0,0 +1,6 @@ +{ + "name": "@kbn/ml-field-stats-flyout", + "private": true, + "version": "1.0.0", + "license": "Elastic License 2.0" +} \ No newline at end of file diff --git a/x-pack/plugins/ml/public/application/components/field_stats_flyout/populated_fields/get_merged_populated_fields_query.test.ts b/x-pack/packages/ml/field_stats_flyout/populated_fields/get_merged_populated_fields_query.test.ts similarity index 100% rename from x-pack/plugins/ml/public/application/components/field_stats_flyout/populated_fields/get_merged_populated_fields_query.test.ts rename to x-pack/packages/ml/field_stats_flyout/populated_fields/get_merged_populated_fields_query.test.ts diff --git a/x-pack/plugins/ml/public/application/components/field_stats_flyout/populated_fields/get_merged_populated_fields_query.ts b/x-pack/packages/ml/field_stats_flyout/populated_fields/get_merged_populated_fields_query.ts similarity index 100% rename from x-pack/plugins/ml/public/application/components/field_stats_flyout/populated_fields/get_merged_populated_fields_query.ts rename to x-pack/packages/ml/field_stats_flyout/populated_fields/get_merged_populated_fields_query.ts diff --git a/x-pack/plugins/ml/public/application/components/field_stats_flyout/populated_fields/index.ts b/x-pack/packages/ml/field_stats_flyout/populated_fields/index.ts similarity index 100% rename from x-pack/plugins/ml/public/application/components/field_stats_flyout/populated_fields/index.ts rename to x-pack/packages/ml/field_stats_flyout/populated_fields/index.ts diff --git a/x-pack/plugins/ml/public/application/components/field_stats_flyout/populated_fields/populated_fields_cache_manager.ts b/x-pack/packages/ml/field_stats_flyout/populated_fields/populated_fields_cache_manager.ts similarity index 100% rename from x-pack/plugins/ml/public/application/components/field_stats_flyout/populated_fields/populated_fields_cache_manager.ts rename to x-pack/packages/ml/field_stats_flyout/populated_fields/populated_fields_cache_manager.ts diff --git a/x-pack/packages/ml/field_stats_flyout/tsconfig.json b/x-pack/packages/ml/field_stats_flyout/tsconfig.json new file mode 100644 index 0000000000000..b0920fac0ad2a --- /dev/null +++ b/x-pack/packages/ml/field_stats_flyout/tsconfig.json @@ -0,0 +1,36 @@ +{ + "extends": "../../../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types", + "types": [ + "jest", + "node", + "react" + ] + }, + "include": [ + "**/*.ts", + "**/*.tsx", + ], + "exclude": [ + "target/**/*" + ], + "kbn_references": [ + "@kbn/i18n-react", + "@kbn/data-plugin", + "@kbn/unified-field-list", + "@kbn/ml-date-picker", + "@kbn/i18n", + "@kbn/react-field", + "@kbn/ml-anomaly-utils", + "@kbn/kibana-react-plugin", + "@kbn/ml-kibana-theme", + "@kbn/core", + "@kbn/ml-data-grid", + "@kbn/ml-string-hash", + "@kbn/ml-is-populated-object", + "@kbn/ml-query-utils", + "@kbn/ml-is-defined", + "@kbn/field-types", + ] +} diff --git a/x-pack/plugins/ml/public/application/components/field_stats_flyout/use_field_stats_flytout_context.ts b/x-pack/packages/ml/field_stats_flyout/use_field_stats_flyout_context.ts similarity index 82% rename from x-pack/plugins/ml/public/application/components/field_stats_flyout/use_field_stats_flytout_context.ts rename to x-pack/packages/ml/field_stats_flyout/use_field_stats_flyout_context.ts index 76b7be8d22f86..ec6c28873011c 100644 --- a/x-pack/plugins/ml/public/application/components/field_stats_flyout/use_field_stats_flytout_context.ts +++ b/x-pack/packages/ml/field_stats_flyout/use_field_stats_flyout_context.ts @@ -7,6 +7,10 @@ import { createContext, useContext } from 'react'; import type { TimeRange as TimeRangeMs } from '@kbn/ml-date-picker'; + +/** + * Represents the properties for the MLJobWizardFieldStatsFlyout component. + */ interface MLJobWizardFieldStatsFlyoutProps { isFlyoutVisible: boolean; setIsFlyoutVisible: (v: boolean) => void; @@ -18,6 +22,10 @@ interface MLJobWizardFieldStatsFlyoutProps { timeRangeMs?: TimeRangeMs; populatedFields?: Set; } + +/** + * Context for the ML Field Stats Flyout. + */ export const MLFieldStatsFlyoutContext = createContext({ isFlyoutVisible: false, setIsFlyoutVisible: () => {}, @@ -28,6 +36,10 @@ export const MLFieldStatsFlyoutContext = createContext { field: Field; } +/** + * Custom hook for managing field statistics trigger functionality. + * + * @returns An object containing the following properties and functions: + * - `renderOption`: A callback function for rendering options in a combo box. + * - `setIsFlyoutVisible`: A function for setting the visibility of the flyout. + * - `setFieldName`: A function for setting the field name. + * - `handleFieldStatsButtonClick`: A callback function for handling field stats button click. + * - `closeFlyout`: A callback function for closing the flyout. + * - `optionCss`: CSS styles for the options in the combo box. + * - `populatedFields`: A set of populated fields. + */ export const useFieldStatsTrigger = () => { const { setIsFlyoutVisible, setFieldName, populatedFields } = useFieldStatsFlyoutContext(); diff --git a/x-pack/packages/ml/parse_interval/README.md b/x-pack/packages/ml/parse_interval/README.md new file mode 100644 index 0000000000000..7fb1fc37db18f --- /dev/null +++ b/x-pack/packages/ml/parse_interval/README.md @@ -0,0 +1,14 @@ +# @kbn/ml-parse-interval + +The `parse_interval` package provides the `parseInterval` utility function for parsing time intervals in various formats. + +## Usage + +```javascript +import { parseInterval } = from '@kbn/ml-parse-interval'; + +const intervalString = '1d'; +const intervalInMs = parseInterval(intervalString); + +console.log(intervalInMs); // Output: 86400000 +``` diff --git a/x-pack/plugins/transform/common/shared_imports.ts b/x-pack/packages/ml/parse_interval/index.ts similarity index 76% rename from x-pack/plugins/transform/common/shared_imports.ts rename to x-pack/packages/ml/parse_interval/index.ts index 953e4a3431035..67aca45bab202 100644 --- a/x-pack/plugins/transform/common/shared_imports.ts +++ b/x-pack/packages/ml/parse_interval/index.ts @@ -5,4 +5,4 @@ * 2.0. */ -export { composeValidators, patternValidator } from '@kbn/ml-plugin/common'; +export { parseInterval } from './parse_interval'; diff --git a/x-pack/packages/ml/parse_interval/jest.config.js b/x-pack/packages/ml/parse_interval/jest.config.js new file mode 100644 index 0000000000000..01fc21724c5bf --- /dev/null +++ b/x-pack/packages/ml/parse_interval/jest.config.js @@ -0,0 +1,12 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +module.exports = { + preset: '@kbn/test/jest_node', + rootDir: '../../../..', + roots: ['/x-pack/packages/ml/parse_interval'], +}; diff --git a/x-pack/packages/ml/parse_interval/kibana.jsonc b/x-pack/packages/ml/parse_interval/kibana.jsonc new file mode 100644 index 0000000000000..6d8398c29b1cc --- /dev/null +++ b/x-pack/packages/ml/parse_interval/kibana.jsonc @@ -0,0 +1,5 @@ +{ + "type": "shared-common", + "id": "@kbn/ml-parse-interval", + "owner": "@elastic/ml-ui" +} diff --git a/x-pack/packages/ml/parse_interval/package.json b/x-pack/packages/ml/parse_interval/package.json new file mode 100644 index 0000000000000..7c2eb0c2de1fa --- /dev/null +++ b/x-pack/packages/ml/parse_interval/package.json @@ -0,0 +1,6 @@ +{ + "name": "@kbn/ml-parse-interval", + "private": true, + "version": "1.0.0", + "license": "Elastic License 2.0" +} \ No newline at end of file diff --git a/x-pack/plugins/ml/common/util/parse_interval.test.ts b/x-pack/packages/ml/parse_interval/parse_interval.test.ts similarity index 100% rename from x-pack/plugins/ml/common/util/parse_interval.test.ts rename to x-pack/packages/ml/parse_interval/parse_interval.test.ts diff --git a/x-pack/plugins/ml/common/util/parse_interval.ts b/x-pack/packages/ml/parse_interval/parse_interval.ts similarity index 55% rename from x-pack/plugins/ml/common/util/parse_interval.ts rename to x-pack/packages/ml/parse_interval/parse_interval.ts index 7ae00ab25a52a..ea84f4ba2e467 100644 --- a/x-pack/plugins/ml/common/util/parse_interval.ts +++ b/x-pack/packages/ml/parse_interval/parse_interval.ts @@ -11,30 +11,43 @@ import dateMath from '@kbn/datemath'; type SupportedUnits = unitOfTime.Base; -// Assume interval is in the form (value)(unit), such as "1h" +/** + * Assume interval is in the form (value)(unit), such as "1h" + */ const INTERVAL_STRING_RE = new RegExp('^([0-9]*)\\s*(' + dateMath.units.join('|') + ')$'); -// moment.js is only designed to allow fractional values between 0 and 1 -// for units of hour or less. +/** + * moment.js is only designed to allow fractional values between 0 and 1 + * for units of hour or less. + */ const SUPPORT_ZERO_DURATION_UNITS: SupportedUnits[] = ['ms', 's', 'm', 'h']; -// List of time units which are supported for use in Elasticsearch durations -// (such as anomaly detection job bucket spans) -// See https://www.elastic.co/guide/en/elasticsearch/reference/current/common-options.html#time-units +/** + * List of time units which are supported for use in Elasticsearch durations + * (such as anomaly detection job bucket spans) + * See https://www.elastic.co/guide/en/elasticsearch/reference/current/common-options.html#time-units + */ const SUPPORT_ES_DURATION_UNITS: SupportedUnits[] = ['ms', 's', 'm', 'h', 'd']; -// Parses an interval String, such as 7d, 1h or 30m to a moment duration. -// Optionally carries out an additional check that the interval is supported as a -// time unit by Elasticsearch, as units greater than 'd' for example cannot be used -// for anomaly detection job bucket spans. -// Differs from the Kibana ui/utils/parse_interval in the following ways: -// 1. A value-less interval such as 'm' is not allowed - in line with the ML back-end -// not accepting such interval Strings for the bucket span of a job. -// 2. Zero length durations 0ms, 0s, 0m and 0h are accepted as-is. -// Note that when adding or subtracting fractional durations, moment is only designed -// to work with units less than 'day'. -// 3. Fractional intervals e.g. 1.5h or 4.5d are not allowed, in line with the behaviour -// of the Elasticsearch date histogram aggregation. +/** + * Parses an interval string, such as 7d, 1h, or 30m to a moment duration. + * Optionally carries out an additional check that the interval is supported as a + * time unit by Elasticsearch, as units greater than 'd' for example cannot be used + * for anomaly detection job bucket spans. + * + * Differs from the Kibana ui/utils/parse_interval in the following ways: + * 1. A value-less interval such as 'm' is not allowed - in line with the ML back-end + * not accepting such interval strings for the bucket span of a job. + * 2. Zero length durations 0ms, 0s, 0m, and 0h are accepted as-is. + * Note that when adding or subtracting fractional durations, moment is only designed + * to work with units less than 'day'. + * 3. Fractional intervals e.g. 1.5h or 4.5d are not allowed, in line with the behaviour + * of the Elasticsearch date histogram aggregation. + * + * @param interval - The interval to parse. + * @param checkValidEsUnit - Optional. Specifies whether to check if the unit is a valid Elasticsearch duration unit. Default is false. + * @returns The parsed Duration object, or null if the interval is invalid. + */ export function parseInterval( interval: string | number, checkValidEsUnit = false diff --git a/x-pack/packages/ml/parse_interval/tsconfig.json b/x-pack/packages/ml/parse_interval/tsconfig.json new file mode 100644 index 0000000000000..e1bbb08bab509 --- /dev/null +++ b/x-pack/packages/ml/parse_interval/tsconfig.json @@ -0,0 +1,19 @@ +{ + "extends": "../../../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types", + "types": [ + "jest", + "node" + ] + }, + "include": [ + "**/*.ts", + ], + "exclude": [ + "target/**/*" + ], + "kbn_references": [ + "@kbn/datemath", + ] +} diff --git a/x-pack/packages/ml/query_utils/index.ts b/x-pack/packages/ml/query_utils/index.ts index dfd7f6c08ca0c..9ddcaad02d78c 100644 --- a/x-pack/packages/ml/query_utils/index.ts +++ b/x-pack/packages/ml/query_utils/index.ts @@ -20,4 +20,4 @@ export type { SearchQueryVariant, SimpleQuery, } from './src/types'; -export { getDefaultDSLQuery } from './src/get_default_query'; +export { getDefaultDSLQuery } from './src/get_default_dsl_query'; diff --git a/x-pack/packages/ml/query_utils/src/get_default_query.ts b/x-pack/packages/ml/query_utils/src/get_default_dsl_query.ts similarity index 63% rename from x-pack/packages/ml/query_utils/src/get_default_query.ts rename to x-pack/packages/ml/query_utils/src/get_default_dsl_query.ts index f17746ddd2929..08ed5bb94ddaa 100644 --- a/x-pack/packages/ml/query_utils/src/get_default_query.ts +++ b/x-pack/packages/ml/query_utils/src/get_default_dsl_query.ts @@ -6,9 +6,10 @@ */ import { cloneDeep } from 'lodash'; -import type { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; -const DEFAULT_QUERY = { +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; + +const DEFAULT_DSL_QUERY: estypes.QueryDslQueryContainer = { bool: { must: [ { @@ -21,6 +22,6 @@ const DEFAULT_QUERY = { /** * Default DSL query which matches all the results */ -export function getDefaultDSLQuery(): QueryDslQueryContainer { - return cloneDeep(DEFAULT_QUERY); +export function getDefaultDSLQuery(): estypes.QueryDslQueryContainer { + return cloneDeep(DEFAULT_DSL_QUERY); } diff --git a/x-pack/packages/ml/time_buckets/time_buckets.js b/x-pack/packages/ml/time_buckets/time_buckets.js index c70e7962f4250..d2e52fa475178 100644 --- a/x-pack/packages/ml/time_buckets/time_buckets.js +++ b/x-pack/packages/ml/time_buckets/time_buckets.js @@ -149,7 +149,7 @@ TimeBuckets.prototype.getDuration = function () { * * Input can be one of the following: * - "auto" - * - an interval String, such as 7d, 1h or 30m which can be parsed to a moment duration using ml/common/util/parse_interval + * - an interval String, such as 7d, 1h or 30m which can be parsed to a moment duration using @kbn/ml-parse-interval * - a moment.duration object. * * @param {string|moment.duration} input - see desc diff --git a/x-pack/packages/ml/validators/README.md b/x-pack/packages/ml/validators/README.md new file mode 100644 index 0000000000000..1aee8908113f1 --- /dev/null +++ b/x-pack/packages/ml/validators/README.md @@ -0,0 +1,3 @@ +# @kbn/ml-validators + +This package provides a set of validators for machine learning and transform related functionality in Kibana. diff --git a/x-pack/plugins/ml/common/constants/validation.ts b/x-pack/packages/ml/validators/constants.ts similarity index 52% rename from x-pack/plugins/ml/common/constants/validation.ts rename to x-pack/packages/ml/validators/constants.ts index eec37506c9597..6d6151a151ce7 100644 --- a/x-pack/plugins/ml/common/constants/validation.ts +++ b/x-pack/packages/ml/validators/constants.ts @@ -5,16 +5,40 @@ * 2.0. */ +/** + * Interface for a callout message. + */ export interface CalloutMessage { + /** + * Unique identifier for the callout message. + */ id: string; + /** + * Heading of the callout message. + */ heading: string; + /** + * Status of the callout message. + */ status: VALIDATION_STATUS; + /** + * Text of the callout message. + */ text: string; + /** + * Optional URL for the callout message. + */ url?: string; } +/** + * Type for the response of the validate analytics job API. + */ export type ValidateAnalyticsJobResponse = CalloutMessage[]; +/** + * Enum for the validation status. + */ export enum VALIDATION_STATUS { ERROR = 'error', INFO = 'info', @@ -22,17 +46,54 @@ export enum VALIDATION_STATUS { WARNING = 'warning', } +/** + * Boolean const for skipping the bucket span estimation. + */ export const SKIP_BUCKET_SPAN_ESTIMATION = true; +/** + * Const for allowed data units. + */ export const ALLOWED_DATA_UNITS = ['B', 'KB', 'MB', 'GB', 'TB', 'PB']; +/** + * Const for the maximum length of a job ID. + */ export const JOB_ID_MAX_LENGTH = 64; // Data Frame Analytics + +/** + * Const for the upper limit of training documents. + */ export const TRAINING_DOCS_UPPER = 200000; + +/** + * Const for the lower limit of training documents. + */ export const TRAINING_DOCS_LOWER = 200; + +/** + * Const for the threshold of included fields. + */ export const INCLUDED_FIELDS_THRESHOLD = 100; + +/** + * Const for the minimum number of fields for check. + */ export const MINIMUM_NUM_FIELD_FOR_CHECK = 25; + +/** + * Const for the fraction empty limit. + */ export const FRACTION_EMPTY_LIMIT = 0.3; + +/** + * Const for the maximum length of categories. + */ export const NUM_CATEGORIES_THRESHOLD = 10; + +/** + * Const for all categories. + */ export const ALL_CATEGORIES = -1; diff --git a/x-pack/packages/ml/validators/index.ts b/x-pack/packages/ml/validators/index.ts new file mode 100644 index 0000000000000..da982fec00f33 --- /dev/null +++ b/x-pack/packages/ml/validators/index.ts @@ -0,0 +1,32 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export { + ALL_CATEGORIES, + ALLOWED_DATA_UNITS, + FRACTION_EMPTY_LIMIT, + INCLUDED_FIELDS_THRESHOLD, + JOB_ID_MAX_LENGTH, + MINIMUM_NUM_FIELD_FOR_CHECK, + NUM_CATEGORIES_THRESHOLD, + SKIP_BUCKET_SPAN_ESTIMATION, + TRAINING_DOCS_LOWER, + TRAINING_DOCS_UPPER, + VALIDATION_STATUS, + type CalloutMessage, + type ValidateAnalyticsJobResponse, +} from './constants'; +export { + composeValidators, + dictionaryValidator, + maxLengthValidator, + memoryInputValidator, + patternValidator, + requiredValidator, + timeIntervalInputValidator, + type MemoryInputValidatorResult, +} from './validators'; diff --git a/x-pack/packages/ml/validators/jest.config.js b/x-pack/packages/ml/validators/jest.config.js new file mode 100644 index 0000000000000..67f28da8589d9 --- /dev/null +++ b/x-pack/packages/ml/validators/jest.config.js @@ -0,0 +1,12 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +module.exports = { + preset: '@kbn/test/jest_node', + rootDir: '../../../..', + roots: ['/x-pack/packages/ml/validators'], +}; diff --git a/x-pack/packages/ml/validators/kibana.jsonc b/x-pack/packages/ml/validators/kibana.jsonc new file mode 100644 index 0000000000000..e747549d8e33c --- /dev/null +++ b/x-pack/packages/ml/validators/kibana.jsonc @@ -0,0 +1,5 @@ +{ + "type": "shared-common", + "id": "@kbn/ml-validators", + "owner": "@elastic/ml-ui" +} diff --git a/x-pack/packages/ml/validators/package.json b/x-pack/packages/ml/validators/package.json new file mode 100644 index 0000000000000..958c085a4d3d5 --- /dev/null +++ b/x-pack/packages/ml/validators/package.json @@ -0,0 +1,6 @@ +{ + "name": "@kbn/ml-validators", + "private": true, + "version": "1.0.0", + "license": "Elastic License 2.0" +} \ No newline at end of file diff --git a/x-pack/packages/ml/validators/tsconfig.json b/x-pack/packages/ml/validators/tsconfig.json new file mode 100644 index 0000000000000..ca25f09b5cd50 --- /dev/null +++ b/x-pack/packages/ml/validators/tsconfig.json @@ -0,0 +1,19 @@ +{ + "extends": "../../../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types", + "types": [ + "jest", + "node" + ] + }, + "include": [ + "**/*.ts", + ], + "exclude": [ + "target/**/*" + ], + "kbn_references": [ + "@kbn/ml-parse-interval", + ] +} diff --git a/x-pack/plugins/ml/common/util/validators.test.ts b/x-pack/packages/ml/validators/validators.test.ts similarity index 100% rename from x-pack/plugins/ml/common/util/validators.test.ts rename to x-pack/packages/ml/validators/validators.test.ts diff --git a/x-pack/plugins/ml/common/util/validators.ts b/x-pack/packages/ml/validators/validators.ts similarity index 66% rename from x-pack/plugins/ml/common/util/validators.ts rename to x-pack/packages/ml/validators/validators.ts index 9ceeac4b29e82..39db75cd3dfce 100644 --- a/x-pack/plugins/ml/common/util/validators.ts +++ b/x-pack/packages/ml/validators/validators.ts @@ -5,8 +5,9 @@ * 2.0. */ -import { ALLOWED_DATA_UNITS } from '../constants/validation'; -import { parseInterval } from './parse_interval'; +import { parseInterval } from '@kbn/ml-parse-interval'; + +import { ALLOWED_DATA_UNITS } from './constants'; /** * Provides a validator function for maximum allowed input length. @@ -27,8 +28,9 @@ export function maxLengthValidator( } /** - * Provides a validator function for checking against pattern. - * @param pattern + * Factory that provides a validator function for checking against pattern. + * @param pattern Pattern to check against. + * @returns A validator function that checks if the value matches the pattern. */ export function patternValidator( pattern: RegExp @@ -44,8 +46,10 @@ export function patternValidator( } /** - * Composes multiple validators into a single function - * @param validators + * Factory that composes multiple validators into a single function. + * + * @param validators List of validators to compose. + * @returns A validator function that runs all the validators. */ export function composeValidators( ...validators: Array<(value: any) => { [key: string]: any } | null> @@ -58,16 +62,32 @@ export function composeValidators( }; } +/** + * Factory to create a required validator function. + * @returns A validator function that checks if the value is empty. + */ export function requiredValidator() { return (value: T) => { return value === '' || value === undefined || value === null ? { required: true } : null; }; } +/** + * Type for the result of a validation. + */ export type ValidationResult = Record | null; +/** + * Type for the result of a memory input validation. + */ export type MemoryInputValidatorResult = { invalidUnits: { allowedUnits: string } } | null; +/** + * Factory for creating a memory input validator function. + * + * @param allowedUnits Allowed units for the memory input. + * @returns A validator function that checks if the value is a valid memory input. + */ export function memoryInputValidator(allowedUnits = ALLOWED_DATA_UNITS) { return (value: T) => { if (typeof value !== 'string' || value === '') { @@ -80,6 +100,11 @@ export function memoryInputValidator(allowedUnits = ALLOWED_DATA_UNITS) { }; } +/** + * Factory for creating a time interval input validator function. + * + * @returns A validator function that checks if the value is a valid time interval. + */ export function timeIntervalInputValidator() { return (value: string) => { if (value === '') { @@ -97,6 +122,12 @@ export function timeIntervalInputValidator() { }; } +/** + * Factory to create a dictionary validator function. + * @param dict Dictionary to check against. + * @param shouldInclude Whether the value should be included in the dictionary. + * @returns A validator function that checks if the value is in the dictionary. + */ export function dictionaryValidator(dict: string[], shouldInclude: boolean = false) { const dictSet = new Set(dict); return (value: string) => { diff --git a/x-pack/packages/security-solution/data_table/components/data_table/index.test.tsx b/x-pack/packages/security-solution/data_table/components/data_table/index.test.tsx index f8183c51e4678..7a0a3e8f76caa 100644 --- a/x-pack/packages/security-solution/data_table/components/data_table/index.test.tsx +++ b/x-pack/packages/security-solution/data_table/components/data_table/index.test.tsx @@ -139,9 +139,9 @@ describe('DataTable', () => { wrapper.update(); expect( wrapper - .find('[data-test-subj="dataGridRowCell"]') + .find('div[data-test-subj="dataGridRowCell"]') .at(0) - .find('.euiDataGridRowCell__content') + .find('div.euiDataGridRowCell__content') .childAt(0) .text() ).toEqual(mockTimelineData[0].ecs.timestamp); diff --git a/x-pack/packages/security/api_key_management/src/components/token_field.tsx b/x-pack/packages/security/api_key_management/src/components/token_field.tsx index 4943603dbecf8..ccda03a2315c2 100644 --- a/x-pack/packages/security/api_key_management/src/components/token_field.tsx +++ b/x-pack/packages/security/api_key_management/src/components/token_field.tsx @@ -13,7 +13,6 @@ import { EuiContextMenuPanel, EuiCopy, EuiFieldText, - EuiFormControlLayout, EuiHorizontalRule, EuiPopover, EuiSpacer, @@ -29,12 +28,24 @@ export interface TokenFieldProps extends Omit { value: string; } -export const TokenField: FunctionComponent = (props) => { +export const TokenField: FunctionComponent = ({ value, ...props }) => { return ( - event.currentTarget.select()} + readOnly {...props} append={ - + {(copyText) => ( = (props) => { )} } - style={{ backgroundColor: 'transparent' }} - readOnly - > - event.currentTarget.select()} - readOnly - /> - + /> ); }; @@ -118,7 +111,7 @@ export const SelectableTokenField: FunctionComponent closePopover={closePopover} > ((items, option, i) => { items.push( ; } diff --git a/x-pack/packages/security/plugin_types_public/src/roles/index.ts b/x-pack/packages/security/plugin_types_public/src/roles/index.ts index 36a3e85fa8767..9364f7cee0bc2 100644 --- a/x-pack/packages/security/plugin_types_public/src/roles/index.ts +++ b/x-pack/packages/security/plugin_types_public/src/roles/index.ts @@ -5,4 +5,9 @@ * 2.0. */ -export type { RolePutPayload, RolesAPIClient } from './roles_api_client'; +export type { + BulkUpdatePayload, + BulkUpdateRoleResponse, + RolePutPayload, + RolesAPIClient, +} from './roles_api_client'; diff --git a/x-pack/packages/security/plugin_types_public/src/roles/roles_api_client.ts b/x-pack/packages/security/plugin_types_public/src/roles/roles_api_client.ts index b5c45c5160fde..12f79d3c3449e 100644 --- a/x-pack/packages/security/plugin_types_public/src/roles/roles_api_client.ts +++ b/x-pack/packages/security/plugin_types_public/src/roles/roles_api_client.ts @@ -11,9 +11,20 @@ export interface RolePutPayload { createOnly?: boolean; } +export interface BulkUpdatePayload { + rolesUpdate: Role[]; +} + +export interface BulkUpdateRoleResponse { + created?: string[]; + updated?: string[]; + errors?: Record; +} + export interface RolesAPIClient { getRoles: () => Promise; getRole: (roleName: string) => Promise; deleteRole: (roleName: string) => Promise; saveRole: (payload: RolePutPayload) => Promise; + bulkUpdateRoles: (payload: BulkUpdatePayload) => Promise; } diff --git a/x-pack/packages/security/ui_components/src/kibana_privilege_table/feature_table.test.tsx b/x-pack/packages/security/ui_components/src/kibana_privilege_table/feature_table.test.tsx index 83a0da2e26815..2380088dd713f 100644 --- a/x-pack/packages/security/ui_components/src/kibana_privilege_table/feature_table.test.tsx +++ b/x-pack/packages/security/ui_components/src/kibana_privilege_table/feature_table.test.tsx @@ -15,10 +15,10 @@ import { kibanaFeatures, } from '@kbn/security-role-management-model/src/__fixtures__'; import { findTestSubject, mountWithIntl } from '@kbn/test-jest-helpers'; +import type { Role } from '@kbn/security-plugin-types-common'; import { getDisplayedFeaturePrivileges } from './__fixtures__'; import { FeatureTable } from './feature_table'; -import type { Role } from '@kbn/security-plugin-types-common'; import { PrivilegeFormCalculator } from '../privilege_form_calculator'; const createRole = (kibana: Role['kibana'] = []): Role => { diff --git a/x-pack/packages/security/ui_components/src/kibana_privilege_table/feature_table.tsx b/x-pack/packages/security/ui_components/src/kibana_privilege_table/feature_table.tsx index daa1ddd704f74..45b263b66f2fb 100644 --- a/x-pack/packages/security/ui_components/src/kibana_privilege_table/feature_table.tsx +++ b/x-pack/packages/security/ui_components/src/kibana_privilege_table/feature_table.tsx @@ -48,6 +48,10 @@ interface Props { canCustomizeSubFeaturePrivileges: boolean; allSpacesSelected: boolean; disabled?: boolean; + /** + * default is true, to remain backwards compatible + */ + showTitle?: boolean; } interface State { @@ -58,6 +62,7 @@ export class FeatureTable extends Component { public static defaultProps = { privilegeIndex: -1, showLocks: true, + showTitle: true, }; private featureCategories: Map = new Map(); @@ -187,16 +192,18 @@ export class FeatureTable extends Component {
- - - {i18n.translate( - 'xpack.security.management.editRole.featureTable.featureVisibilityTitle', - { - defaultMessage: 'Customize feature privileges', - } - )} - - + {this.props.showTitle && ( + + + {i18n.translate( + 'xpack.security.management.editRole.featureTable.featureVisibilityTitle', + { + defaultMessage: 'Customize feature privileges', + } + )} + + + )} {!this.props.disabled && ( diff --git a/x-pack/packages/security/ui_components/src/kibana_privilege_table/feature_table_expanded_row.test.tsx b/x-pack/packages/security/ui_components/src/kibana_privilege_table/feature_table_expanded_row.test.tsx index 3b787f01cdf92..5e4f4ce021d44 100644 --- a/x-pack/packages/security/ui_components/src/kibana_privilege_table/feature_table_expanded_row.test.tsx +++ b/x-pack/packages/security/ui_components/src/kibana_privilege_table/feature_table_expanded_row.test.tsx @@ -12,10 +12,10 @@ import { createKibanaPrivileges, kibanaFeatures, } from '@kbn/security-role-management-model/src/__fixtures__'; +import type { Role } from '@kbn/security-plugin-types-common'; import { findTestSubject, mountWithIntl } from '@kbn/test-jest-helpers'; import { FeatureTableExpandedRow } from './feature_table_expanded_row'; -import type { Role } from '@kbn/security-plugin-types-common'; import { PrivilegeFormCalculator } from '../privilege_form_calculator'; const createRole = (kibana: Role['kibana'] = []): Role => { diff --git a/x-pack/packages/security/ui_components/src/privilege_form_calculator/privilege_form_calculator.test.ts b/x-pack/packages/security/ui_components/src/privilege_form_calculator/privilege_form_calculator.test.ts index 0281605f00f34..e61134b816ffa 100644 --- a/x-pack/packages/security/ui_components/src/privilege_form_calculator/privilege_form_calculator.test.ts +++ b/x-pack/packages/security/ui_components/src/privilege_form_calculator/privilege_form_calculator.test.ts @@ -9,9 +9,9 @@ import { createKibanaPrivileges, kibanaFeatures, } from '@kbn/security-role-management-model/src/__fixtures__'; +import type { Role } from '@kbn/security-plugin-types-common'; import { PrivilegeFormCalculator } from './privilege_form_calculator'; -import type { Role } from '@kbn/security-plugin-types-common'; const createRole = (kibana: Role['kibana'] = []): Role => { return { diff --git a/x-pack/plugins/actions/docs/openapi/components/schemas/run_pushtoservice.yaml b/x-pack/plugins/actions/docs/openapi/components/schemas/run_pushtoservice.yaml index 210bf1dcf8570..0d5e2bd6a6d51 100644 --- a/x-pack/plugins/actions/docs/openapi/components/schemas/run_pushtoservice.yaml +++ b/x-pack/plugins/actions/docs/openapi/components/schemas/run_pushtoservice.yaml @@ -30,6 +30,13 @@ properties: type: object description: Information necessary to create or update a Jira, ServiceNow ITSM, ServiveNow SecOps, Swimlane, or TheHive incident. properties: + additional_fields: + type: string + nullable: true + maxLength: 20 + description: > + Additional fields for ServiceNow ITSM and ServiveNow SecOps connectors. + The fields must exist in the Elastic ServiceNow application and must be specified in JSON format. alertId: type: string description: The alert identifier for Swimlane connectors. diff --git a/x-pack/plugins/alerting/server/application/backfill/methods/delete/delete_backfill.test.ts b/x-pack/plugins/alerting/server/application/backfill/methods/delete/delete_backfill.test.ts index 4a2ac84515fe9..b0879613d069f 100644 --- a/x-pack/plugins/alerting/server/application/backfill/methods/delete/delete_backfill.test.ts +++ b/x-pack/plugins/alerting/server/application/backfill/methods/delete/delete_backfill.test.ts @@ -70,6 +70,8 @@ const rulesClientParams: jest.Mocked = { uiSettings: uiSettingsServiceMock.createStartContract(), }; +const fakeRuleName = 'fakeRuleName'; + const mockAdHocRunSO: SavedObject = { id: '1', type: AD_HOC_RUN_SAVED_OBJECT_TYPE, @@ -80,7 +82,7 @@ const mockAdHocRunSO: SavedObject = { duration: '12h', enabled: true, rule: { - name: 'my rule name', + name: fakeRuleName, tags: ['foo'], alertTypeId: 'myType', // @ts-expect-error @@ -149,10 +151,11 @@ describe('deleteBackfill()', () => { saved_object: { id: '1', type: AD_HOC_RUN_SAVED_OBJECT_TYPE, - name: `backfill for rule "my rule name"`, + name: 'backfill for rule "fakeRuleName"', }, }, - message: 'User is deleting ad hoc run for ad_hoc_run_params [id=1]', + message: + 'User is deleting ad hoc run for ad_hoc_run_params [id=1] backfill for rule "fakeRuleName"', }); expect(unsecuredSavedObjectsClient.delete).toHaveBeenLastCalledWith( AD_HOC_RUN_SAVED_OBJECT_TYPE, @@ -212,10 +215,11 @@ describe('deleteBackfill()', () => { saved_object: { id: '1', type: AD_HOC_RUN_SAVED_OBJECT_TYPE, - name: `backfill for rule "my rule name"`, + name: 'backfill for rule "fakeRuleName"', }, }, - message: 'Failed attempt to delete ad hoc run for ad_hoc_run_params [id=1]', + message: + 'Failed attempt to delete ad hoc run for ad_hoc_run_params [id=1] backfill for rule "fakeRuleName"', }); }); @@ -229,6 +233,7 @@ describe('deleteBackfill()', () => { message: 'Unable to get', statusCode: 404, }, + attributes: { rule: { name: fakeRuleName } }, }); await expect(rulesClient.deleteBackfill('1')).rejects.toThrowErrorMatchingInlineSnapshot( @@ -246,8 +251,15 @@ describe('deleteBackfill()', () => { outcome: 'failure', type: ['deletion'], }, - kibana: { saved_object: { id: '1', type: AD_HOC_RUN_SAVED_OBJECT_TYPE } }, - message: 'Failed attempt to delete ad hoc run for ad_hoc_run_params [id=1]', + kibana: { + saved_object: { + id: '1', + type: AD_HOC_RUN_SAVED_OBJECT_TYPE, + name: 'backfill for rule "fakeRuleName"', + }, + }, + message: + 'Failed attempt to delete ad hoc run for ad_hoc_run_params [id=1] backfill for rule "fakeRuleName"', }); }); diff --git a/x-pack/plugins/alerting/server/application/backfill/methods/delete/delete_backfill.ts b/x-pack/plugins/alerting/server/application/backfill/methods/delete/delete_backfill.ts index 3d4d0a03f44dd..d223f944305c7 100644 --- a/x-pack/plugins/alerting/server/application/backfill/methods/delete/delete_backfill.ts +++ b/x-pack/plugins/alerting/server/application/backfill/methods/delete/delete_backfill.ts @@ -37,7 +37,11 @@ async function deleteWithOCC(context: RulesClientContext, { id }: { id: string } context.auditLogger?.log( adHocRunAuditEvent({ action: AdHocRunAuditAction.DELETE, - savedObject: { type: AD_HOC_RUN_SAVED_OBJECT_TYPE, id }, + savedObject: { + type: AD_HOC_RUN_SAVED_OBJECT_TYPE, + id, + name: `backfill for rule "${result.attributes.rule.name}"`, + }, error: new Error(result.error.message), }) ); diff --git a/x-pack/plugins/alerting/server/application/backfill/methods/find/find_backfill.test.ts b/x-pack/plugins/alerting/server/application/backfill/methods/find/find_backfill.test.ts index e7d4ab3644910..dab9d5f38f036 100644 --- a/x-pack/plugins/alerting/server/application/backfill/methods/find/find_backfill.test.ts +++ b/x-pack/plugins/alerting/server/application/backfill/methods/find/find_backfill.test.ts @@ -171,6 +171,8 @@ const rulesClientParams: jest.Mocked = { uiSettings: uiSettingsServiceMock.createStartContract(), }; +const fakeRuleName = 'fakeRuleName'; + const mockAdHocRunSO: SavedObject = { id: '1', type: AD_HOC_RUN_SAVED_OBJECT_TYPE, @@ -181,7 +183,7 @@ const mockAdHocRunSO: SavedObject = { duration: '12h', enabled: true, rule: { - name: 'my rule name', + name: fakeRuleName, tags: ['foo'], alertTypeId: 'myType', // @ts-expect-error @@ -266,10 +268,11 @@ describe('findBackfill()', () => { saved_object: { id: '1', type: AD_HOC_RUN_SAVED_OBJECT_TYPE, - name: `backfill for rule "my rule name"`, + name: 'backfill for rule "fakeRuleName"', }, }, - message: 'User has found ad hoc run for ad_hoc_run_params [id=1]', + message: + 'User has found ad hoc run for ad_hoc_run_params [id=1] backfill for rule "fakeRuleName"', }); expect(result).toEqual({ @@ -311,10 +314,11 @@ describe('findBackfill()', () => { saved_object: { id: '1', type: AD_HOC_RUN_SAVED_OBJECT_TYPE, - name: `backfill for rule "my rule name"`, + name: 'backfill for rule "fakeRuleName"', }, }, - message: 'User has found ad hoc run for ad_hoc_run_params [id=1]', + message: + 'User has found ad hoc run for ad_hoc_run_params [id=1] backfill for rule "fakeRuleName"', }); expect(result).toEqual({ @@ -374,10 +378,11 @@ describe('findBackfill()', () => { saved_object: { id: '1', type: AD_HOC_RUN_SAVED_OBJECT_TYPE, - name: `backfill for rule "my rule name"`, + name: 'backfill for rule "fakeRuleName"', }, }, - message: 'User has found ad hoc run for ad_hoc_run_params [id=1]', + message: + 'User has found ad hoc run for ad_hoc_run_params [id=1] backfill for rule "fakeRuleName"', }); expect(result).toEqual({ @@ -437,10 +442,11 @@ describe('findBackfill()', () => { saved_object: { id: '1', type: AD_HOC_RUN_SAVED_OBJECT_TYPE, - name: `backfill for rule "my rule name"`, + name: 'backfill for rule "fakeRuleName"', }, }, - message: 'User has found ad hoc run for ad_hoc_run_params [id=1]', + message: + 'User has found ad hoc run for ad_hoc_run_params [id=1] backfill for rule "fakeRuleName"', }); expect(result).toEqual({ @@ -516,10 +522,11 @@ describe('findBackfill()', () => { saved_object: { id: '1', type: AD_HOC_RUN_SAVED_OBJECT_TYPE, - name: `backfill for rule "my rule name"`, + name: 'backfill for rule "fakeRuleName"', }, }, - message: 'User has found ad hoc run for ad_hoc_run_params [id=1]', + message: + 'User has found ad hoc run for ad_hoc_run_params [id=1] backfill for rule "fakeRuleName"', }); expect(result).toEqual({ @@ -597,10 +604,11 @@ describe('findBackfill()', () => { saved_object: { id: '1', type: AD_HOC_RUN_SAVED_OBJECT_TYPE, - name: `backfill for rule "my rule name"`, + name: 'backfill for rule "fakeRuleName"', }, }, - message: 'User has found ad hoc run for ad_hoc_run_params [id=1]', + message: + 'User has found ad hoc run for ad_hoc_run_params [id=1] backfill for rule "fakeRuleName"', }); expect(result).toEqual({ @@ -648,10 +656,11 @@ describe('findBackfill()', () => { saved_object: { id: '1', type: AD_HOC_RUN_SAVED_OBJECT_TYPE, - name: `backfill for rule "my rule name"`, + name: 'backfill for rule "fakeRuleName"', }, }, - message: 'User has found ad hoc run for ad_hoc_run_params [id=1]', + message: + 'User has found ad hoc run for ad_hoc_run_params [id=1] backfill for rule "fakeRuleName"', }); expect(result).toEqual({ diff --git a/x-pack/plugins/alerting/server/application/backfill/methods/get/get_backfill.test.ts b/x-pack/plugins/alerting/server/application/backfill/methods/get/get_backfill.test.ts index 952809acaa720..cbf516bfd446e 100644 --- a/x-pack/plugins/alerting/server/application/backfill/methods/get/get_backfill.test.ts +++ b/x-pack/plugins/alerting/server/application/backfill/methods/get/get_backfill.test.ts @@ -70,6 +70,8 @@ const rulesClientParams: jest.Mocked = { uiSettings: uiSettingsServiceMock.createStartContract(), }; +const fakeRuleName = 'fakeRuleName'; + const mockAdHocRunSO: SavedObject = { id: '1', type: AD_HOC_RUN_SAVED_OBJECT_TYPE, @@ -80,7 +82,7 @@ const mockAdHocRunSO: SavedObject = { duration: '12h', enabled: true, rule: { - name: 'my rule name', + name: fakeRuleName, tags: ['foo'], alertTypeId: 'myType', // @ts-expect-error @@ -148,10 +150,11 @@ describe('getBackfill()', () => { saved_object: { id: '1', type: AD_HOC_RUN_SAVED_OBJECT_TYPE, - name: `backfill for rule "my rule name"`, + name: `backfill for rule "fakeRuleName"`, }, }, - message: 'User has got ad hoc run for ad_hoc_run_params [id=1]', + message: + 'User has got ad hoc run for ad_hoc_run_params [id=1] backfill for rule "fakeRuleName"', }); expect(logger.error).not.toHaveBeenCalled(); @@ -194,10 +197,11 @@ describe('getBackfill()', () => { saved_object: { id: '1', type: AD_HOC_RUN_SAVED_OBJECT_TYPE, - name: `backfill for rule "my rule name"`, + name: 'backfill for rule "fakeRuleName"', }, }, - message: 'Failed attempt to get ad hoc run for ad_hoc_run_params [id=1]', + message: + 'Failed attempt to get ad hoc run for ad_hoc_run_params [id=1] backfill for rule "fakeRuleName"', }); }); @@ -211,6 +215,7 @@ describe('getBackfill()', () => { message: 'Unable to get', statusCode: 404, }, + attributes: { rule: { name: fakeRuleName } }, }); await expect(rulesClient.getBackfill('1')).rejects.toThrowErrorMatchingInlineSnapshot( @@ -228,8 +233,15 @@ describe('getBackfill()', () => { outcome: 'failure', type: ['access'], }, - kibana: { saved_object: { id: '1', type: AD_HOC_RUN_SAVED_OBJECT_TYPE } }, - message: 'Failed attempt to get ad hoc run for ad_hoc_run_params [id=1]', + kibana: { + saved_object: { + id: '1', + type: AD_HOC_RUN_SAVED_OBJECT_TYPE, + name: 'backfill for rule "fakeRuleName"', + }, + }, + message: + 'Failed attempt to get ad hoc run for ad_hoc_run_params [id=1] backfill for rule "fakeRuleName"', }); }); }); diff --git a/x-pack/plugins/alerting/server/application/backfill/methods/get/get_backfill.ts b/x-pack/plugins/alerting/server/application/backfill/methods/get/get_backfill.ts index 75116ac0b3d2d..6f14dba88684c 100644 --- a/x-pack/plugins/alerting/server/application/backfill/methods/get/get_backfill.ts +++ b/x-pack/plugins/alerting/server/application/backfill/methods/get/get_backfill.ts @@ -30,7 +30,11 @@ export async function getBackfill(context: RulesClientContext, id: string): Prom context.auditLogger?.log( adHocRunAuditEvent({ action: AdHocRunAuditAction.GET, - savedObject: { type: AD_HOC_RUN_SAVED_OBJECT_TYPE, id }, + savedObject: { + type: AD_HOC_RUN_SAVED_OBJECT_TYPE, + id, + name: `backfill for rule "${result.attributes.rule.name}"`, + }, error: new Error(result.error.message), }) ); diff --git a/x-pack/plugins/alerting/server/application/backfill/methods/schedule/schedule_backfill.test.ts b/x-pack/plugins/alerting/server/application/backfill/methods/schedule/schedule_backfill.test.ts index 7edcb26b9718e..b8f1e5af9c869 100644 --- a/x-pack/plugins/alerting/server/application/backfill/methods/schedule/schedule_backfill.test.ts +++ b/x-pack/plugins/alerting/server/application/backfill/methods/schedule/schedule_backfill.test.ts @@ -73,6 +73,8 @@ const rulesClientParams: jest.Mocked = { uiSettings: uiSettingsServiceMock.createStartContract(), }; +const fakeRuleName = 'fakeRuleName'; + const existingRule = { id: '1', type: RULE_SAVED_OBJECT_TYPE, @@ -99,7 +101,7 @@ const existingRule = { notifyWhen: null, actions: [], systemActions: [], - name: 'my rule name', + name: fakeRuleName, revision: 0, }, references: [], @@ -382,8 +384,8 @@ describe('scheduleBackfill()', () => { outcome: 'success', type: ['access'], }, - kibana: { saved_object: { id: '1', type: RULE_SAVED_OBJECT_TYPE } }, - message: 'User has scheduled backfill for rule [id=1]', + kibana: { saved_object: { id: '1', type: RULE_SAVED_OBJECT_TYPE, name: 'fakeRuleName' } }, + message: 'User has scheduled backfill for rule [id=1] [name=fakeRuleName]', }); expect(auditLogger.log).toHaveBeenNthCalledWith(2, { event: { @@ -392,8 +394,8 @@ describe('scheduleBackfill()', () => { outcome: 'success', type: ['access'], }, - kibana: { saved_object: { id: '2', type: RULE_SAVED_OBJECT_TYPE } }, - message: 'User has scheduled backfill for rule [id=2]', + kibana: { saved_object: { id: '2', type: RULE_SAVED_OBJECT_TYPE, name: 'fakeRuleName' } }, + message: 'User has scheduled backfill for rule [id=2] [name=fakeRuleName]', }); expect(backfillClient.bulkQueue).toHaveBeenCalledWith({ @@ -578,6 +580,7 @@ describe('scheduleBackfill()', () => { await expect( rulesClient.scheduleBackfill(mockData) ).rejects.toThrowErrorMatchingInlineSnapshot(`"Unauthorized"`); + expect(auditLogger?.log).toHaveBeenCalledWith({ error: { code: 'Error', message: 'Unauthorized' }, event: { diff --git a/x-pack/plugins/alerting/server/application/backfill/methods/schedule/schedule_backfill.ts b/x-pack/plugins/alerting/server/application/backfill/methods/schedule/schedule_backfill.ts index 9ff777f0108c6..d755463e9bc3e 100644 --- a/x-pack/plugins/alerting/server/application/backfill/methods/schedule/schedule_backfill.ts +++ b/x-pack/plugins/alerting/server/application/backfill/methods/schedule/schedule_backfill.ts @@ -131,7 +131,11 @@ export async function scheduleBackfill( context.auditLogger?.log( ruleAuditEvent({ action: RuleAuditAction.SCHEDULE_BACKFILL, - savedObject: { type: RULE_SAVED_OBJECT_TYPE, id: rule.id }, + savedObject: { + type: RULE_SAVED_OBJECT_TYPE, + id: rule.id, + name: rule.attributes.name, + }, }) ); } diff --git a/x-pack/plugins/alerting/server/application/rule/methods/bulk_delete/bulk_delete_rules.test.ts b/x-pack/plugins/alerting/server/application/rule/methods/bulk_delete/bulk_delete_rules.test.ts index b72ace206ed68..366b98fc31714 100644 --- a/x-pack/plugins/alerting/server/application/rule/methods/bulk_delete/bulk_delete_rules.test.ts +++ b/x-pack/plugins/alerting/server/application/rule/methods/bulk_delete/bulk_delete_rules.test.ts @@ -595,12 +595,12 @@ describe('bulkDelete', () => { expect(auditLogger.log.mock.calls[0][0]?.event?.action).toEqual('rule_delete'); expect(auditLogger.log.mock.calls[0][0]?.event?.outcome).toEqual('unknown'); expect(auditLogger.log.mock.calls[0][0]?.kibana).toEqual({ - saved_object: { id: 'id1', type: RULE_SAVED_OBJECT_TYPE }, + saved_object: { id: 'id1', type: RULE_SAVED_OBJECT_TYPE, name: 'fakeName' }, }); expect(auditLogger.log.mock.calls[1][0]?.event?.action).toEqual('rule_delete'); expect(auditLogger.log.mock.calls[1][0]?.event?.outcome).toEqual('unknown'); expect(auditLogger.log.mock.calls[1][0]?.kibana).toEqual({ - saved_object: { id: 'id2', type: RULE_SAVED_OBJECT_TYPE }, + saved_object: { id: 'id2', type: RULE_SAVED_OBJECT_TYPE, name: 'fakeName' }, }); }); diff --git a/x-pack/plugins/alerting/server/application/rule/methods/bulk_delete/bulk_delete_rules.ts b/x-pack/plugins/alerting/server/application/rule/methods/bulk_delete/bulk_delete_rules.ts index ab916c5f4e943..d2d5b47a893f3 100644 --- a/x-pack/plugins/alerting/server/application/rule/methods/bulk_delete/bulk_delete_rules.ts +++ b/x-pack/plugins/alerting/server/application/rule/methods/bulk_delete/bulk_delete_rules.ts @@ -167,8 +167,9 @@ const bulkDeleteWithOCC = async ( if (rule.attributes.apiKey && !rule.attributes.apiKeyCreatedByUser) { apiKeyToRuleIdMapping[rule.id] = rule.attributes.apiKey; } - if (rule.attributes.name) { - ruleNameToRuleIdMapping[rule.id] = rule.attributes.name; + const ruleName = rule.attributes.name; + if (ruleName) { + ruleNameToRuleIdMapping[rule.id] = ruleName; } if (rule.attributes.scheduledTaskId) { taskIdToRuleIdMapping[rule.id] = rule.attributes.scheduledTaskId; @@ -179,7 +180,11 @@ const bulkDeleteWithOCC = async ( ruleAuditEvent({ action: RuleAuditAction.DELETE, outcome: 'unknown', - savedObject: { type: RULE_SAVED_OBJECT_TYPE, id: rule.id }, + savedObject: { + type: RULE_SAVED_OBJECT_TYPE, + id: rule.id, + name: ruleName, + }, }) ); } diff --git a/x-pack/plugins/alerting/server/application/rule/methods/bulk_disable/bulk_disable_rules.test.ts b/x-pack/plugins/alerting/server/application/rule/methods/bulk_disable/bulk_disable_rules.test.ts index bfee8a94d6dd6..949bf35361dc0 100644 --- a/x-pack/plugins/alerting/server/application/rule/methods/bulk_disable/bulk_disable_rules.test.ts +++ b/x-pack/plugins/alerting/server/application/rule/methods/bulk_disable/bulk_disable_rules.test.ts @@ -740,12 +740,12 @@ describe('bulkDisableRules', () => { expect(auditLogger.log.mock.calls[0][0]?.event?.action).toEqual('rule_disable'); expect(auditLogger.log.mock.calls[0][0]?.event?.outcome).toEqual('unknown'); expect(auditLogger.log.mock.calls[0][0]?.kibana).toEqual({ - saved_object: { id: 'id1', type: RULE_SAVED_OBJECT_TYPE }, + saved_object: { id: 'id1', type: RULE_SAVED_OBJECT_TYPE, name: 'fakeName' }, }); expect(auditLogger.log.mock.calls[1][0]?.event?.action).toEqual('rule_disable'); expect(auditLogger.log.mock.calls[1][0]?.event?.outcome).toEqual('unknown'); expect(auditLogger.log.mock.calls[1][0]?.kibana).toEqual({ - saved_object: { id: 'id2', type: RULE_SAVED_OBJECT_TYPE }, + saved_object: { id: 'id2', type: RULE_SAVED_OBJECT_TYPE, name: 'fakeName' }, }); }); diff --git a/x-pack/plugins/alerting/server/application/rule/methods/bulk_disable/bulk_disable_rules.ts b/x-pack/plugins/alerting/server/application/rule/methods/bulk_disable/bulk_disable_rules.ts index 78dc98cbbe84a..11f1d43b02b42 100644 --- a/x-pack/plugins/alerting/server/application/rule/methods/bulk_disable/bulk_disable_rules.ts +++ b/x-pack/plugins/alerting/server/application/rule/methods/bulk_disable/bulk_disable_rules.ts @@ -159,13 +159,15 @@ const bulkDisableRulesWithOCC = async ( async () => { for await (const response of rulesFinder.find()) { await pMap(response.saved_objects, async (rule) => { + const ruleName = rule.attributes.name; + try { if (untrack) { await untrackRuleAlerts(context, rule.id, rule.attributes); } - if (rule.attributes.name) { - ruleNameToRuleIdMapping[rule.id] = rule.attributes.name; + if (ruleName) { + ruleNameToRuleIdMapping[rule.id] = ruleName; } // migrate legacy actions only for SIEM rules @@ -212,7 +214,7 @@ const bulkDisableRulesWithOCC = async ( ruleAuditEvent({ action: RuleAuditAction.DISABLE, outcome: 'unknown', - savedObject: { type: RULE_SAVED_OBJECT_TYPE, id: rule.id }, + savedObject: { type: RULE_SAVED_OBJECT_TYPE, id: rule.id, name: ruleName }, }) ); } catch (error) { @@ -220,12 +222,17 @@ const bulkDisableRulesWithOCC = async ( message: error.message, rule: { id: rule.id, - name: rule.attributes?.name, + name: ruleName, }, }); context.auditLogger?.log( ruleAuditEvent({ action: RuleAuditAction.DISABLE, + savedObject: { + type: RULE_SAVED_OBJECT_TYPE, + id: rule.id, + name: ruleName, + }, error, }) ); diff --git a/x-pack/plugins/alerting/server/application/rule/methods/bulk_edit/bulk_edit_rules.ts b/x-pack/plugins/alerting/server/application/rule/methods/bulk_edit/bulk_edit_rules.ts index 81dd189116949..a9a060b99664d 100644 --- a/x-pack/plugins/alerting/server/application/rule/methods/bulk_edit/bulk_edit_rules.ts +++ b/x-pack/plugins/alerting/server/application/rule/methods/bulk_edit/bulk_edit_rules.ts @@ -595,6 +595,7 @@ async function updateRuleAttributesAndParamsInMemory( context.auditLogger?.log( ruleAuditEvent({ action: RuleAuditAction.BULK_EDIT, + savedObject: { type: RULE_SAVED_OBJECT_TYPE, id: rule.id, name: rule.attributes?.name }, error, }) ); diff --git a/x-pack/plugins/alerting/server/application/rule/methods/bulk_enable/bulk_enable_rules.test.ts b/x-pack/plugins/alerting/server/application/rule/methods/bulk_enable/bulk_enable_rules.test.ts index 7815146128522..7138c2cb3a318 100644 --- a/x-pack/plugins/alerting/server/application/rule/methods/bulk_enable/bulk_enable_rules.test.ts +++ b/x-pack/plugins/alerting/server/application/rule/methods/bulk_enable/bulk_enable_rules.test.ts @@ -839,12 +839,12 @@ describe('bulkEnableRules', () => { expect(auditLogger.log.mock.calls[0][0]?.event?.action).toEqual('rule_enable'); expect(auditLogger.log.mock.calls[0][0]?.event?.outcome).toEqual('unknown'); expect(auditLogger.log.mock.calls[0][0]?.kibana).toEqual({ - saved_object: { id: 'id1', type: RULE_SAVED_OBJECT_TYPE }, + saved_object: { id: 'id1', type: RULE_SAVED_OBJECT_TYPE, name: 'fakeName' }, }); expect(auditLogger.log.mock.calls[1][0]?.event?.action).toEqual('rule_enable'); expect(auditLogger.log.mock.calls[1][0]?.event?.outcome).toEqual('unknown'); expect(auditLogger.log.mock.calls[1][0]?.kibana).toEqual({ - saved_object: { id: 'id2', type: RULE_SAVED_OBJECT_TYPE }, + saved_object: { id: 'id2', type: RULE_SAVED_OBJECT_TYPE, name: 'fakeName' }, }); }); diff --git a/x-pack/plugins/alerting/server/application/rule/methods/bulk_enable/bulk_enable_rules.ts b/x-pack/plugins/alerting/server/application/rule/methods/bulk_enable/bulk_enable_rules.ts index 0bf346006e4f8..ff1852d8a4d4d 100644 --- a/x-pack/plugins/alerting/server/application/rule/methods/bulk_enable/bulk_enable_rules.ts +++ b/x-pack/plugins/alerting/server/application/rule/methods/bulk_enable/bulk_enable_rules.ts @@ -204,6 +204,8 @@ const bulkEnableRulesWithOCC = async ( await pMap( rulesFinderRules, async (rule) => { + const ruleName = rule.attributes.name; + try { if (scheduleValidationError) { throw Error(scheduleValidationError); @@ -215,8 +217,8 @@ const bulkEnableRulesWithOCC = async ( throw Error(`Rule not authorized for bulk enable - ${error.message}`); } } - if (rule.attributes.name) { - ruleNameToRuleIdMapping[rule.id] = rule.attributes.name; + if (ruleName) { + ruleNameToRuleIdMapping[rule.id] = ruleName; } // TODO (http-versioning) Remove RawRuleAction and RawRule casts @@ -232,7 +234,7 @@ const bulkEnableRulesWithOCC = async ( ...(!rule.attributes.apiKey && (await createNewAPIKeySet(context, { id: rule.attributes.alertTypeId, - ruleName: rule.attributes.name, + ruleName, username, shouldUpdateApiKey: true, }))), @@ -293,7 +295,11 @@ const bulkEnableRulesWithOCC = async ( ruleAuditEvent({ action: RuleAuditAction.ENABLE, outcome: 'unknown', - savedObject: { type: RULE_SAVED_OBJECT_TYPE, id: rule.id }, + savedObject: { + type: RULE_SAVED_OBJECT_TYPE, + id: rule.id, + name: ruleName, + }, }) ); } catch (error) { @@ -307,6 +313,11 @@ const bulkEnableRulesWithOCC = async ( context.auditLogger?.log( ruleAuditEvent({ action: RuleAuditAction.ENABLE, + savedObject: { + type: RULE_SAVED_OBJECT_TYPE, + id: rule.id, + name: ruleName, + }, error, }) ); diff --git a/x-pack/plugins/alerting/server/application/rule/methods/clone/clone_rule.ts b/x-pack/plugins/alerting/server/application/rule/methods/clone/clone_rule.ts index bb095103f937d..4f83f5b8daa9c 100644 --- a/x-pack/plugins/alerting/server/application/rule/methods/clone/clone_rule.ts +++ b/x-pack/plugins/alerting/server/application/rule/methods/clone/clone_rule.ts @@ -104,7 +104,7 @@ export async function cloneRule( context.auditLogger?.log( ruleAuditEvent({ action: RuleAuditAction.CREATE, - savedObject: { type: RULE_SAVED_OBJECT_TYPE, id }, + savedObject: { type: RULE_SAVED_OBJECT_TYPE, id, name: ruleName }, error, }) ); @@ -152,7 +152,7 @@ export async function cloneRule( ruleAuditEvent({ action: RuleAuditAction.CREATE, outcome: 'unknown', - savedObject: { type: RULE_SAVED_OBJECT_TYPE, id }, + savedObject: { type: RULE_SAVED_OBJECT_TYPE, id, name: ruleName }, }) ); diff --git a/x-pack/plugins/alerting/server/application/rule/methods/create/create_rule.test.ts b/x-pack/plugins/alerting/server/application/rule/methods/create/create_rule.test.ts index 9ace9c2d8f491..fa38c66f3b050 100644 --- a/x-pack/plugins/alerting/server/application/rule/methods/create/create_rule.test.ts +++ b/x-pack/plugins/alerting/server/application/rule/methods/create/create_rule.test.ts @@ -302,7 +302,9 @@ describe('create()', () => { action: 'rule_create', outcome: 'unknown', }), - kibana: { saved_object: { id: 'mock-saved-object-id', type: RULE_SAVED_OBJECT_TYPE } }, + kibana: { + saved_object: { id: 'mock-saved-object-id', type: RULE_SAVED_OBJECT_TYPE, name: 'abc' }, + }, }) ); }); @@ -328,6 +330,7 @@ describe('create()', () => { saved_object: { id: 'mock-saved-object-id', type: RULE_SAVED_OBJECT_TYPE, + name: 'abc', }, }, error: { diff --git a/x-pack/plugins/alerting/server/application/rule/methods/create/create_rule.ts b/x-pack/plugins/alerting/server/application/rule/methods/create/create_rule.ts index d1b41de921952..555429d117a30 100644 --- a/x-pack/plugins/alerting/server/application/rule/methods/create/create_rule.ts +++ b/x-pack/plugins/alerting/server/application/rule/methods/create/create_rule.ts @@ -110,7 +110,7 @@ export async function createRule( context.auditLogger?.log( ruleAuditEvent({ action: RuleAuditAction.CREATE, - savedObject: { type: RULE_SAVED_OBJECT_TYPE, id }, + savedObject: { type: RULE_SAVED_OBJECT_TYPE, id, name: data.name }, error, }) ); diff --git a/x-pack/plugins/alerting/server/application/rule/methods/delete/delete_rule.test.ts b/x-pack/plugins/alerting/server/application/rule/methods/delete/delete_rule.test.ts index caf61d8901d0d..7491df9d3df19 100644 --- a/x-pack/plugins/alerting/server/application/rule/methods/delete/delete_rule.test.ts +++ b/x-pack/plugins/alerting/server/application/rule/methods/delete/delete_rule.test.ts @@ -89,12 +89,15 @@ beforeEach(() => { (auditLogger.log as jest.Mock).mockClear(); }); +const fakeRuleName = 'fakeRuleName'; + describe('delete()', () => { let rulesClient: RulesClient; const existingAlert = { id: '1', type: RULE_SAVED_OBJECT_TYPE, attributes: { + name: fakeRuleName, alertTypeId: 'myType', consumer: 'myApp', schedule: { interval: '10s' }, @@ -341,7 +344,7 @@ describe('delete()', () => { action: 'rule_delete', outcome: 'unknown', }), - kibana: { saved_object: { id: '1', type: RULE_SAVED_OBJECT_TYPE } }, + kibana: { saved_object: { id: '1', type: RULE_SAVED_OBJECT_TYPE, name: fakeRuleName } }, }) ); }); @@ -360,6 +363,7 @@ describe('delete()', () => { saved_object: { id: '1', type: RULE_SAVED_OBJECT_TYPE, + name: fakeRuleName, }, }, error: { diff --git a/x-pack/plugins/alerting/server/application/rule/methods/delete/delete_rule.ts b/x-pack/plugins/alerting/server/application/rule/methods/delete/delete_rule.ts index 4f0c7810486fe..b738bafb3d690 100644 --- a/x-pack/plugins/alerting/server/application/rule/methods/delete/delete_rule.ts +++ b/x-pack/plugins/alerting/server/application/rule/methods/delete/delete_rule.ts @@ -80,7 +80,7 @@ async function deleteRuleWithOCC(context: RulesClientContext, { id }: { id: stri context.auditLogger?.log( ruleAuditEvent({ action: RuleAuditAction.DELETE, - savedObject: { type: RULE_SAVED_OBJECT_TYPE, id }, + savedObject: { type: RULE_SAVED_OBJECT_TYPE, id, name: attributes.name }, error, }) ); @@ -104,7 +104,7 @@ async function deleteRuleWithOCC(context: RulesClientContext, { id }: { id: stri ruleAuditEvent({ action: RuleAuditAction.DELETE, outcome: 'unknown', - savedObject: { type: RULE_SAVED_OBJECT_TYPE, id }, + savedObject: { type: RULE_SAVED_OBJECT_TYPE, id, name: attributes.name }, }) ); const removeResult = await deleteRuleSo({ diff --git a/x-pack/plugins/alerting/server/application/rule/methods/disable/disable_rule.test.ts b/x-pack/plugins/alerting/server/application/rule/methods/disable/disable_rule.test.ts index 85e979b183cb4..62608ed8271da 100644 --- a/x-pack/plugins/alerting/server/application/rule/methods/disable/disable_rule.test.ts +++ b/x-pack/plugins/alerting/server/application/rule/methods/disable/disable_rule.test.ts @@ -85,6 +85,8 @@ const rulesClientParams: jest.Mocked = { isSystemAction: jest.fn(), }; +const fakeRuleName = 'fakeRuleName'; + beforeEach(() => { getBeforeSetup(rulesClientParams, taskManager, ruleTypeRegistry); taskManager.get.mockResolvedValue({ @@ -113,6 +115,7 @@ describe('disableRule()', () => { id: '1', type: RULE_SAVED_OBJECT_TYPE, attributes: { + name: fakeRuleName, consumer: 'myApp', schedule: { interval: '10s' }, alertTypeId: 'myType', @@ -195,7 +198,7 @@ describe('disableRule()', () => { action: 'rule_disable', outcome: 'unknown', }), - kibana: { saved_object: { id: '1', type: RULE_SAVED_OBJECT_TYPE } }, + kibana: { saved_object: { id: '1', type: RULE_SAVED_OBJECT_TYPE, name: fakeRuleName } }, }) ); }); @@ -214,6 +217,7 @@ describe('disableRule()', () => { saved_object: { id: '1', type: RULE_SAVED_OBJECT_TYPE, + name: fakeRuleName, }, }, error: { @@ -239,6 +243,7 @@ describe('disableRule()', () => { RULE_SAVED_OBJECT_TYPE, '1', { + name: fakeRuleName, consumer: 'myApp', schedule: { interval: '10s' }, alertTypeId: 'myType', @@ -317,6 +322,7 @@ describe('disableRule()', () => { RULE_SAVED_OBJECT_TYPE, '1', { + name: fakeRuleName, consumer: 'myApp', schedule: { interval: '10s' }, alertTypeId: 'myType', @@ -387,6 +393,7 @@ describe('disableRule()', () => { id: '1', license: 'basic', ruleset: 'alerts', + name: fakeRuleName, }, }); }); @@ -406,6 +413,7 @@ describe('disableRule()', () => { RULE_SAVED_OBJECT_TYPE, '1', { + name: fakeRuleName, consumer: 'myApp', schedule: { interval: '10s' }, alertTypeId: 'myType', @@ -459,6 +467,7 @@ describe('disableRule()', () => { RULE_SAVED_OBJECT_TYPE, '1', { + name: fakeRuleName, consumer: 'myApp', schedule: { interval: '10s' }, alertTypeId: 'myType', @@ -509,6 +518,7 @@ describe('disableRule()', () => { RULE_SAVED_OBJECT_TYPE, '1', { + name: fakeRuleName, consumer: 'myApp', schedule: { interval: '10s' }, alertTypeId: 'myType', @@ -626,6 +636,7 @@ describe('disableRule()', () => { RULE_SAVED_OBJECT_TYPE, '1', { + name: fakeRuleName, consumer: 'myApp', schedule: { interval: '10s' }, alertTypeId: 'myType', @@ -679,6 +690,7 @@ describe('disableRule()', () => { RULE_SAVED_OBJECT_TYPE, '1', { + name: fakeRuleName, consumer: 'myApp', schedule: { interval: '10s' }, alertTypeId: 'myType', diff --git a/x-pack/plugins/alerting/server/application/rule/methods/disable/disable_rule.ts b/x-pack/plugins/alerting/server/application/rule/methods/disable/disable_rule.ts index e6002352ef65b..3e0d3aa3c67f5 100644 --- a/x-pack/plugins/alerting/server/application/rule/methods/disable/disable_rule.ts +++ b/x-pack/plugins/alerting/server/application/rule/methods/disable/disable_rule.ts @@ -78,7 +78,7 @@ async function disableWithOCC( context.auditLogger?.log( ruleAuditEvent({ action: RuleAuditAction.DISABLE, - savedObject: { type: RULE_SAVED_OBJECT_TYPE, id }, + savedObject: { type: RULE_SAVED_OBJECT_TYPE, id, name: attributes.name }, error, }) ); @@ -93,7 +93,7 @@ async function disableWithOCC( ruleAuditEvent({ action: RuleAuditAction.DISABLE, outcome: 'unknown', - savedObject: { type: RULE_SAVED_OBJECT_TYPE, id }, + savedObject: { type: RULE_SAVED_OBJECT_TYPE, id, name: attributes.name }, }) ); diff --git a/x-pack/plugins/alerting/server/application/rule/methods/enable_rule/enable_rule.test.ts b/x-pack/plugins/alerting/server/application/rule/methods/enable_rule/enable_rule.test.ts index 403b5b650f833..fd4536db38946 100644 --- a/x-pack/plugins/alerting/server/application/rule/methods/enable_rule/enable_rule.test.ts +++ b/x-pack/plugins/alerting/server/application/rule/methods/enable_rule/enable_rule.test.ts @@ -202,7 +202,7 @@ describe('enable()', () => { action: 'rule_enable', outcome: 'unknown', }), - kibana: { saved_object: { id: '1', type: RULE_SAVED_OBJECT_TYPE } }, + kibana: { saved_object: { id: '1', type: RULE_SAVED_OBJECT_TYPE, name: 'name' } }, }) ); }); @@ -221,6 +221,7 @@ describe('enable()', () => { saved_object: { id: '1', type: RULE_SAVED_OBJECT_TYPE, + name: 'name', }, }, error: { diff --git a/x-pack/plugins/alerting/server/application/rule/methods/enable_rule/enable_rule.ts b/x-pack/plugins/alerting/server/application/rule/methods/enable_rule/enable_rule.ts index 6b21269ca1d1e..d4c2e91787aef 100644 --- a/x-pack/plugins/alerting/server/application/rule/methods/enable_rule/enable_rule.ts +++ b/x-pack/plugins/alerting/server/application/rule/methods/enable_rule/enable_rule.ts @@ -105,7 +105,7 @@ async function enableWithOCC(context: RulesClientContext, params: EnableRulePara context.auditLogger?.log( ruleAuditEvent({ action: RuleAuditAction.ENABLE, - savedObject: { type: RULE_SAVED_OBJECT_TYPE, id }, + savedObject: { type: RULE_SAVED_OBJECT_TYPE, id, name: attributes.name }, error, }) ); @@ -116,7 +116,7 @@ async function enableWithOCC(context: RulesClientContext, params: EnableRulePara ruleAuditEvent({ action: RuleAuditAction.ENABLE, outcome: 'unknown', - savedObject: { type: RULE_SAVED_OBJECT_TYPE, id }, + savedObject: { type: RULE_SAVED_OBJECT_TYPE, id, name: attributes.name }, }) ); diff --git a/x-pack/plugins/alerting/server/application/rule/methods/find/find_rules.test.ts b/x-pack/plugins/alerting/server/application/rule/methods/find/find_rules.test.ts index ee8038f2c8b6c..e6bfd3408a538 100644 --- a/x-pack/plugins/alerting/server/application/rule/methods/find/find_rules.test.ts +++ b/x-pack/plugins/alerting/server/application/rule/methods/find/find_rules.test.ts @@ -125,6 +125,7 @@ describe('find()', () => { id: '1', type: RULE_SAVED_OBJECT_TYPE, attributes: { + name: 'fakeRuleName', alertTypeId: 'myType', schedule: { interval: '10s' }, params: { @@ -211,6 +212,7 @@ describe('find()', () => { "status": "pending", }, "id": "1", + "name": "fakeRuleName", "notifyWhen": "onActiveAlert", "params": Object { "bar": true, @@ -1003,7 +1005,7 @@ describe('find()', () => { action: 'rule_find', outcome: 'success', }), - kibana: { saved_object: { id: '1', type: RULE_SAVED_OBJECT_TYPE } }, + kibana: { saved_object: { id: '1', type: RULE_SAVED_OBJECT_TYPE, name: 'fakeRuleName' } }, }) ); }); @@ -1042,7 +1044,7 @@ describe('find()', () => { action: 'rule_find', outcome: 'failure', }), - kibana: { saved_object: { id: '1', type: RULE_SAVED_OBJECT_TYPE } }, + kibana: { saved_object: { id: '1', type: RULE_SAVED_OBJECT_TYPE, name: 'fakeRuleName' } }, error: { code: 'Error', message: 'Unauthorized', diff --git a/x-pack/plugins/alerting/server/application/rule/methods/find/find_rules.ts b/x-pack/plugins/alerting/server/application/rule/methods/find/find_rules.ts index 10aef42955e74..7069000ed16a0 100644 --- a/x-pack/plugins/alerting/server/application/rule/methods/find/find_rules.ts +++ b/x-pack/plugins/alerting/server/application/rule/methods/find/find_rules.ts @@ -142,7 +142,7 @@ export async function findRules( context.auditLogger?.log( ruleAuditEvent({ action: RuleAuditAction.FIND, - savedObject: { type: RULE_SAVED_OBJECT_TYPE, id }, + savedObject: { type: RULE_SAVED_OBJECT_TYPE, id, name: attributes.name }, error, }) ); @@ -168,11 +168,11 @@ export async function findRules( return rule; }); - authorizedData.forEach(({ id }) => + authorizedData.forEach(({ id, name }) => context.auditLogger?.log( ruleAuditEvent({ action: RuleAuditAction.FIND, - savedObject: { type: RULE_SAVED_OBJECT_TYPE, id }, + savedObject: { type: RULE_SAVED_OBJECT_TYPE, id, name }, }) ) ); diff --git a/x-pack/plugins/alerting/server/application/rule/methods/get/get_rule.test.ts b/x-pack/plugins/alerting/server/application/rule/methods/get/get_rule.test.ts index c0f0caeed673f..6c51b7e25f288 100644 --- a/x-pack/plugins/alerting/server/application/rule/methods/get/get_rule.test.ts +++ b/x-pack/plugins/alerting/server/application/rule/methods/get/get_rule.test.ts @@ -630,6 +630,7 @@ describe('get()', () => { id: '1', type: RULE_SAVED_OBJECT_TYPE, attributes: { + name: 'fakeRuleName', alertTypeId: '123', schedule: { interval: '10s' }, params: { @@ -654,7 +655,7 @@ describe('get()', () => { action: 'rule_get', outcome: 'success', }), - kibana: { saved_object: { id: '1', type: RULE_SAVED_OBJECT_TYPE } }, + kibana: { saved_object: { id: '1', type: RULE_SAVED_OBJECT_TYPE, name: 'fakeRuleName' } }, }) ); }); @@ -674,6 +675,7 @@ describe('get()', () => { saved_object: { id: '1', type: RULE_SAVED_OBJECT_TYPE, + name: 'fakeRuleName', }, }, error: { diff --git a/x-pack/plugins/alerting/server/application/rule/methods/get/get_rule.ts b/x-pack/plugins/alerting/server/application/rule/methods/get/get_rule.ts index 9577673cc97b7..548e25fad87c6 100644 --- a/x-pack/plugins/alerting/server/application/rule/methods/get/get_rule.ts +++ b/x-pack/plugins/alerting/server/application/rule/methods/get/get_rule.ts @@ -57,7 +57,7 @@ export async function getRule( context.auditLogger?.log( ruleAuditEvent({ action: RuleAuditAction.GET, - savedObject: { type: RULE_SAVED_OBJECT_TYPE, id }, + savedObject: { type: RULE_SAVED_OBJECT_TYPE, id, name: result.attributes.name }, error, }) ); @@ -66,7 +66,7 @@ export async function getRule( context.auditLogger?.log( ruleAuditEvent({ action: RuleAuditAction.GET, - savedObject: { type: RULE_SAVED_OBJECT_TYPE, id }, + savedObject: { type: RULE_SAVED_OBJECT_TYPE, id, name: result.attributes.name }, }) ); diff --git a/x-pack/plugins/alerting/server/application/rule/methods/mute_alert/mute_instance.ts b/x-pack/plugins/alerting/server/application/rule/methods/mute_alert/mute_instance.ts index d49af9aba93b6..62283bf6e111a 100644 --- a/x-pack/plugins/alerting/server/application/rule/methods/mute_alert/mute_instance.ts +++ b/x-pack/plugins/alerting/server/application/rule/methods/mute_alert/mute_instance.ts @@ -59,7 +59,7 @@ async function muteInstanceWithOCC( context.auditLogger?.log( ruleAuditEvent({ action: RuleAuditAction.MUTE_ALERT, - savedObject: { type: RULE_SAVED_OBJECT_TYPE, id: ruleId }, + savedObject: { type: RULE_SAVED_OBJECT_TYPE, id: ruleId, name: attributes.name }, error, }) ); @@ -70,7 +70,7 @@ async function muteInstanceWithOCC( ruleAuditEvent({ action: RuleAuditAction.MUTE_ALERT, outcome: 'unknown', - savedObject: { type: RULE_SAVED_OBJECT_TYPE, id: ruleId }, + savedObject: { type: RULE_SAVED_OBJECT_TYPE, id: ruleId, name: attributes.name }, }) ); diff --git a/x-pack/plugins/alerting/server/application/rule/methods/resolve/resolve_rule.ts b/x-pack/plugins/alerting/server/application/rule/methods/resolve/resolve_rule.ts index 359f3189958c5..fd9ae07d7ebd2 100644 --- a/x-pack/plugins/alerting/server/application/rule/methods/resolve/resolve_rule.ts +++ b/x-pack/plugins/alerting/server/application/rule/methods/resolve/resolve_rule.ts @@ -53,7 +53,7 @@ Promise> { context.auditLogger?.log( ruleAuditEvent({ action: RuleAuditAction.RESOLVE, - savedObject: { type: RULE_SAVED_OBJECT_TYPE, id }, + savedObject: { type: RULE_SAVED_OBJECT_TYPE, id, name: result.attributes.name }, error, }) ); @@ -62,7 +62,7 @@ Promise> { context.auditLogger?.log( ruleAuditEvent({ action: RuleAuditAction.RESOLVE, - savedObject: { type: RULE_SAVED_OBJECT_TYPE, id }, + savedObject: { type: RULE_SAVED_OBJECT_TYPE, id, name: result.attributes.name }, }) ); diff --git a/x-pack/plugins/alerting/server/application/rule/methods/snooze/snooze_rule.ts b/x-pack/plugins/alerting/server/application/rule/methods/snooze/snooze_rule.ts index 162fe98d31f04..d736cf5227e4c 100644 --- a/x-pack/plugins/alerting/server/application/rule/methods/snooze/snooze_rule.ts +++ b/x-pack/plugins/alerting/server/application/rule/methods/snooze/snooze_rule.ts @@ -72,7 +72,7 @@ async function snoozeWithOCC( context.auditLogger?.log( ruleAuditEvent({ action: RuleAuditAction.SNOOZE, - savedObject: { type: RULE_SAVED_OBJECT_TYPE, id }, + savedObject: { type: RULE_SAVED_OBJECT_TYPE, id, name: attributes.name }, error, }) ); @@ -83,7 +83,7 @@ async function snoozeWithOCC( ruleAuditEvent({ action: RuleAuditAction.SNOOZE, outcome: 'unknown', - savedObject: { type: RULE_SAVED_OBJECT_TYPE, id }, + savedObject: { type: RULE_SAVED_OBJECT_TYPE, id, name: attributes.name }, }) ); diff --git a/x-pack/plugins/alerting/server/application/rule/methods/unmute_alert/unmute_instance.test.ts b/x-pack/plugins/alerting/server/application/rule/methods/unmute_alert/unmute_instance.test.ts index f88b650c322ac..31d0e997b7ffe 100644 --- a/x-pack/plugins/alerting/server/application/rule/methods/unmute_alert/unmute_instance.test.ts +++ b/x-pack/plugins/alerting/server/application/rule/methods/unmute_alert/unmute_instance.test.ts @@ -223,6 +223,7 @@ describe('unmuteInstance()', () => { id: '1', type: RULE_SAVED_OBJECT_TYPE, attributes: { + name: 'fake_rule_name', actions: [], schedule: { interval: '10s' }, alertTypeId: '2', @@ -240,7 +241,9 @@ describe('unmuteInstance()', () => { action: 'rule_alert_unmute', outcome: 'unknown', }), - kibana: { saved_object: { id: '1', type: RULE_SAVED_OBJECT_TYPE } }, + kibana: { + saved_object: { id: '1', type: RULE_SAVED_OBJECT_TYPE, name: 'fake_rule_name' }, + }, }) ); }); @@ -251,6 +254,7 @@ describe('unmuteInstance()', () => { id: '1', type: RULE_SAVED_OBJECT_TYPE, attributes: { + name: 'fake_rule_name', actions: [], schedule: { interval: '10s' }, alertTypeId: '2', @@ -276,6 +280,7 @@ describe('unmuteInstance()', () => { saved_object: { id: '1', type: RULE_SAVED_OBJECT_TYPE, + name: 'fake_rule_name', }, }, error: { diff --git a/x-pack/plugins/alerting/server/application/rule/methods/unmute_alert/unmute_instance.ts b/x-pack/plugins/alerting/server/application/rule/methods/unmute_alert/unmute_instance.ts index 220a1b14e728c..d3936cab1c9ae 100644 --- a/x-pack/plugins/alerting/server/application/rule/methods/unmute_alert/unmute_instance.ts +++ b/x-pack/plugins/alerting/server/application/rule/methods/unmute_alert/unmute_instance.ts @@ -58,7 +58,7 @@ async function unmuteInstanceWithOCC( context.auditLogger?.log( ruleAuditEvent({ action: RuleAuditAction.UNMUTE_ALERT, - savedObject: { type: RULE_SAVED_OBJECT_TYPE, id: ruleId }, + savedObject: { type: RULE_SAVED_OBJECT_TYPE, id: ruleId, name: attributes.name }, error, }) ); @@ -69,7 +69,7 @@ async function unmuteInstanceWithOCC( ruleAuditEvent({ action: RuleAuditAction.UNMUTE_ALERT, outcome: 'unknown', - savedObject: { type: RULE_SAVED_OBJECT_TYPE, id: ruleId }, + savedObject: { type: RULE_SAVED_OBJECT_TYPE, id: ruleId, name: attributes.name }, }) ); diff --git a/x-pack/plugins/alerting/server/application/rule/methods/unsnooze/unsnooze_rule.ts b/x-pack/plugins/alerting/server/application/rule/methods/unsnooze/unsnooze_rule.ts index b5cb6f8f29e33..13a9a96b53ad4 100644 --- a/x-pack/plugins/alerting/server/application/rule/methods/unsnooze/unsnooze_rule.ts +++ b/x-pack/plugins/alerting/server/application/rule/methods/unsnooze/unsnooze_rule.ts @@ -63,7 +63,7 @@ async function unsnoozeWithOCC(context: RulesClientContext, { id, scheduleIds }: context.auditLogger?.log( ruleAuditEvent({ action: RuleAuditAction.UNSNOOZE, - savedObject: { type: RULE_SAVED_OBJECT_TYPE, id }, + savedObject: { type: RULE_SAVED_OBJECT_TYPE, id, name: attributes.name }, error, }) ); @@ -74,7 +74,7 @@ async function unsnoozeWithOCC(context: RulesClientContext, { id, scheduleIds }: ruleAuditEvent({ action: RuleAuditAction.UNSNOOZE, outcome: 'unknown', - savedObject: { type: RULE_SAVED_OBJECT_TYPE, id }, + savedObject: { type: RULE_SAVED_OBJECT_TYPE, id, name: attributes.name }, }) ); diff --git a/x-pack/plugins/alerting/server/application/rule/methods/update/update_rule.test.ts b/x-pack/plugins/alerting/server/application/rule/methods/update/update_rule.test.ts index 748b41c0d2f1a..90f797fbf4a1a 100644 --- a/x-pack/plugins/alerting/server/application/rule/methods/update/update_rule.test.ts +++ b/x-pack/plugins/alerting/server/application/rule/methods/update/update_rule.test.ts @@ -118,6 +118,7 @@ describe('update()', () => { id: '1', type: RULE_SAVED_OBJECT_TYPE, attributes: { + name: 'fakeRuleName', enabled: true, tags: ['foo'], alertTypeId: 'myType', @@ -3001,6 +3002,7 @@ describe('update()', () => { id: '1', type: RULE_SAVED_OBJECT_TYPE, attributes: { + name: 'fakeRuleName', enabled: true, schedule: { interval: '1m' }, params: { @@ -3041,7 +3043,9 @@ describe('update()', () => { action: 'rule_update', outcome: 'unknown', }), - kibana: { saved_object: { id: '1', type: RULE_SAVED_OBJECT_TYPE } }, + kibana: { + saved_object: { id: '1', type: RULE_SAVED_OBJECT_TYPE, name: 'fakeRuleName' }, + }, }) ); }); @@ -3075,6 +3079,7 @@ describe('update()', () => { saved_object: { id: '1', type: RULE_SAVED_OBJECT_TYPE, + name: 'fakeRuleName', }, }, error: { diff --git a/x-pack/plugins/alerting/server/application/rule/methods/update/update_rule.ts b/x-pack/plugins/alerting/server/application/rule/methods/update/update_rule.ts index eef9026a14cd4..4885882451e40 100644 --- a/x-pack/plugins/alerting/server/application/rule/methods/update/update_rule.ts +++ b/x-pack/plugins/alerting/server/application/rule/methods/update/update_rule.ts @@ -148,7 +148,7 @@ async function updateWithOCC( context.auditLogger?.log( ruleAuditEvent({ action: RuleAuditAction.UPDATE, - savedObject: { type: RULE_SAVED_OBJECT_TYPE, id }, + savedObject: { type: RULE_SAVED_OBJECT_TYPE, id, name }, error, }) ); @@ -159,7 +159,7 @@ async function updateWithOCC( ruleAuditEvent({ action: RuleAuditAction.UPDATE, outcome: 'unknown', - savedObject: { type: RULE_SAVED_OBJECT_TYPE, id }, + savedObject: { type: RULE_SAVED_OBJECT_TYPE, id, name }, }) ); diff --git a/x-pack/plugins/alerting/server/application/rule/methods/update_api_key/update_rule_api_key.test.ts b/x-pack/plugins/alerting/server/application/rule/methods/update_api_key/update_rule_api_key.test.ts index ef9979a8c8b88..003bae5da67bc 100644 --- a/x-pack/plugins/alerting/server/application/rule/methods/update_api_key/update_rule_api_key.test.ts +++ b/x-pack/plugins/alerting/server/application/rule/methods/update_api_key/update_rule_api_key.test.ts @@ -41,6 +41,8 @@ const auditLogger = auditLoggerMock.create(); const internalSavedObjectsRepository = savedObjectsRepositoryMock.create(); const kibanaVersion = 'v7.10.0'; +const ruleName = 'fakeRuleName'; + const rulesClientParams: jest.Mocked = { taskManager, ruleTypeRegistry, @@ -83,6 +85,7 @@ describe('updateRuleApiKey()', () => { id: '1', type: RULE_SAVED_OBJECT_TYPE, attributes: { + name: ruleName, revision: 0, schedule: { interval: '10s' }, alertTypeId: 'myType', @@ -137,6 +140,7 @@ describe('updateRuleApiKey()', () => { '1', { schedule: { interval: '10s' }, + name: ruleName, alertTypeId: 'myType', consumer: 'myApp', enabled: true, @@ -198,6 +202,7 @@ describe('updateRuleApiKey()', () => { '1', { schedule: { interval: '10s' }, + name: ruleName, alertTypeId: 'myType', consumer: 'myApp', enabled: true, @@ -254,6 +259,7 @@ describe('updateRuleApiKey()', () => { '1', { schedule: { interval: '10s' }, + name: ruleName, alertTypeId: 'myType', consumer: 'myApp', enabled: true, @@ -324,6 +330,7 @@ describe('updateRuleApiKey()', () => { '1', { schedule: { interval: '10s' }, + name: ruleName, alertTypeId: 'myType', consumer: 'myApp', enabled: true, @@ -434,7 +441,9 @@ describe('updateRuleApiKey()', () => { action: 'rule_update_api_key', outcome: 'unknown', }), - kibana: { saved_object: { id: '1', type: RULE_SAVED_OBJECT_TYPE } }, + kibana: { + saved_object: { id: '1', type: RULE_SAVED_OBJECT_TYPE, name: ruleName }, + }, }) ); }); @@ -453,6 +462,7 @@ describe('updateRuleApiKey()', () => { saved_object: { id: '1', type: RULE_SAVED_OBJECT_TYPE, + name: ruleName, }, }, error: { diff --git a/x-pack/plugins/alerting/server/application/rule/methods/update_api_key/update_rule_api_key.ts b/x-pack/plugins/alerting/server/application/rule/methods/update_api_key/update_rule_api_key.ts index f81dfd64f5684..955109c05bde7 100644 --- a/x-pack/plugins/alerting/server/application/rule/methods/update_api_key/update_rule_api_key.ts +++ b/x-pack/plugins/alerting/server/application/rule/methods/update_api_key/update_rule_api_key.ts @@ -81,7 +81,7 @@ async function updateApiKeyWithOCC(context: RulesClientContext, { id }: UpdateAp context.auditLogger?.log( ruleAuditEvent({ action: RuleAuditAction.UPDATE_API_KEY, - savedObject: { type: RULE_SAVED_OBJECT_TYPE, id }, + savedObject: { type: RULE_SAVED_OBJECT_TYPE, id, name: attributes.name }, error, }) ); @@ -109,7 +109,7 @@ async function updateApiKeyWithOCC(context: RulesClientContext, { id }: UpdateAp ruleAuditEvent({ action: RuleAuditAction.UPDATE_API_KEY, outcome: 'unknown', - savedObject: { type: RULE_SAVED_OBJECT_TYPE, id }, + savedObject: { type: RULE_SAVED_OBJECT_TYPE, id, name: attributes.name }, }) ); diff --git a/x-pack/plugins/alerting/server/rules_client/common/audit_events.test.ts b/x-pack/plugins/alerting/server/rules_client/common/audit_events.test.ts index 1ec0831505507..e9d9c40d0d4ab 100644 --- a/x-pack/plugins/alerting/server/rules_client/common/audit_events.test.ts +++ b/x-pack/plugins/alerting/server/rules_client/common/audit_events.test.ts @@ -19,7 +19,7 @@ describe('#ruleAuditEvent', () => { ruleAuditEvent({ action: RuleAuditAction.CREATE, outcome: 'unknown', - savedObject: { type: RULE_SAVED_OBJECT_TYPE, id: 'ALERT_ID' }, + savedObject: { type: RULE_SAVED_OBJECT_TYPE, id: 'ALERT_ID', name: 'fake_name' }, }) ).toMatchInlineSnapshot(` Object { @@ -37,10 +37,11 @@ describe('#ruleAuditEvent', () => { "kibana": Object { "saved_object": Object { "id": "ALERT_ID", + "name": "fake_name", "type": "alert", }, }, - "message": "User is creating rule [id=ALERT_ID]", + "message": "User is creating rule [id=ALERT_ID] [name=fake_name]", } `); }); @@ -49,7 +50,7 @@ describe('#ruleAuditEvent', () => { expect( ruleAuditEvent({ action: RuleAuditAction.CREATE, - savedObject: { type: RULE_SAVED_OBJECT_TYPE, id: 'ALERT_ID' }, + savedObject: { type: RULE_SAVED_OBJECT_TYPE, id: 'ALERT_ID', name: 'fake_name' }, }) ).toMatchInlineSnapshot(` Object { @@ -67,15 +68,51 @@ describe('#ruleAuditEvent', () => { "kibana": Object { "saved_object": Object { "id": "ALERT_ID", + "name": "fake_name", "type": "alert", }, }, - "message": "User has created rule [id=ALERT_ID]", + "message": "User has created rule [id=ALERT_ID] [name=fake_name]", } `); }); test('creates event with `failure` outcome', () => { + expect( + ruleAuditEvent({ + action: RuleAuditAction.CREATE, + savedObject: { type: RULE_SAVED_OBJECT_TYPE, id: 'ALERT_ID', name: 'fake_name' }, + error: new Error('ERROR_MESSAGE'), + }) + ).toMatchInlineSnapshot(` + Object { + "error": Object { + "code": "Error", + "message": "ERROR_MESSAGE", + }, + "event": Object { + "action": "rule_create", + "category": Array [ + "database", + ], + "outcome": "failure", + "type": Array [ + "creation", + ], + }, + "kibana": Object { + "saved_object": Object { + "id": "ALERT_ID", + "name": "fake_name", + "type": "alert", + }, + }, + "message": "Failed attempt to create rule [id=ALERT_ID] [name=fake_name]", + } + `); + }); + + test('creates event without known name', () => { expect( ruleAuditEvent({ action: RuleAuditAction.CREATE, @@ -116,7 +153,11 @@ describe('#adHocRunAuditEvent', () => { adHocRunAuditEvent({ action: AdHocRunAuditAction.GET, outcome: 'unknown', - savedObject: { type: AD_HOC_RUN_SAVED_OBJECT_TYPE, id: 'AD_HOC_RUN_ID' }, + savedObject: { + type: AD_HOC_RUN_SAVED_OBJECT_TYPE, + id: 'AD_HOC_RUN_ID', + name: `backfill for rule "fake_name"`, + }, }) ).toMatchInlineSnapshot(` Object { @@ -134,10 +175,11 @@ describe('#adHocRunAuditEvent', () => { "kibana": Object { "saved_object": Object { "id": "AD_HOC_RUN_ID", + "name": "backfill for rule \\"fake_name\\"", "type": "ad_hoc_run_params", }, }, - "message": "User is getting ad hoc run for ad_hoc_run_params [id=AD_HOC_RUN_ID]", + "message": "User is getting ad hoc run for ad_hoc_run_params [id=AD_HOC_RUN_ID] backfill for rule \\"fake_name\\"", } `); }); @@ -146,7 +188,11 @@ describe('#adHocRunAuditEvent', () => { expect( adHocRunAuditEvent({ action: AdHocRunAuditAction.FIND, - savedObject: { type: AD_HOC_RUN_SAVED_OBJECT_TYPE, id: 'AD_HOC_RUN_ID' }, + savedObject: { + type: AD_HOC_RUN_SAVED_OBJECT_TYPE, + id: 'AD_HOC_RUN_ID', + name: `backfill for rule "fake_name"`, + }, }) ).toMatchInlineSnapshot(` Object { @@ -164,10 +210,11 @@ describe('#adHocRunAuditEvent', () => { "kibana": Object { "saved_object": Object { "id": "AD_HOC_RUN_ID", + "name": "backfill for rule \\"fake_name\\"", "type": "ad_hoc_run_params", }, }, - "message": "User has found ad hoc run for ad_hoc_run_params [id=AD_HOC_RUN_ID]", + "message": "User has found ad hoc run for ad_hoc_run_params [id=AD_HOC_RUN_ID] backfill for rule \\"fake_name\\"", } `); }); @@ -176,7 +223,11 @@ describe('#adHocRunAuditEvent', () => { expect( adHocRunAuditEvent({ action: AdHocRunAuditAction.DELETE, - savedObject: { type: AD_HOC_RUN_SAVED_OBJECT_TYPE, id: 'AD_HOC_RUN_ID' }, + savedObject: { + type: AD_HOC_RUN_SAVED_OBJECT_TYPE, + id: 'AD_HOC_RUN_ID', + name: `backfill for rule "fake_name"`, + }, error: new Error('ERROR_MESSAGE'), }) ).toMatchInlineSnapshot(` @@ -195,13 +246,44 @@ describe('#adHocRunAuditEvent', () => { "deletion", ], }, + "kibana": Object { + "saved_object": Object { + "id": "AD_HOC_RUN_ID", + "name": "backfill for rule \\"fake_name\\"", + "type": "ad_hoc_run_params", + }, + }, + "message": "Failed attempt to delete ad hoc run for ad_hoc_run_params [id=AD_HOC_RUN_ID] backfill for rule \\"fake_name\\"", + } + `); + }); + + test('creates event without known name', () => { + expect( + adHocRunAuditEvent({ + action: AdHocRunAuditAction.FIND, + savedObject: { type: AD_HOC_RUN_SAVED_OBJECT_TYPE, id: 'AD_HOC_RUN_ID' }, + }) + ).toMatchInlineSnapshot(` + Object { + "error": undefined, + "event": Object { + "action": "ad_hoc_run_find", + "category": Array [ + "database", + ], + "outcome": "success", + "type": Array [ + "access", + ], + }, "kibana": Object { "saved_object": Object { "id": "AD_HOC_RUN_ID", "type": "ad_hoc_run_params", }, }, - "message": "Failed attempt to delete ad hoc run for ad_hoc_run_params [id=AD_HOC_RUN_ID]", + "message": "User has found ad hoc run for ad_hoc_run_params [id=AD_HOC_RUN_ID]", } `); }); diff --git a/x-pack/plugins/alerting/server/rules_client/common/audit_events.ts b/x-pack/plugins/alerting/server/rules_client/common/audit_events.ts index 1ab77379cbeaf..66bba16c2805c 100644 --- a/x-pack/plugins/alerting/server/rules_client/common/audit_events.ts +++ b/x-pack/plugins/alerting/server/rules_client/common/audit_events.ts @@ -161,7 +161,12 @@ export function ruleAuditEvent({ outcome, error, }: RuleAuditEventParams): AuditEvent { - const doc = savedObject ? `rule [id=${savedObject.id}]` : 'a rule'; + const doc = savedObject + ? [`rule [id=${savedObject.id}]`, savedObject.name && `[name=${savedObject.name}]`] + .filter(Boolean) + .join(' ') + : 'a rule'; + const [present, progressive, past] = ruleEventVerbs[action]; const message = error ? `Failed attempt to ${present} ${doc}` @@ -195,7 +200,12 @@ export function adHocRunAuditEvent({ error, }: AdHocRunAuditEventParams): AuditEvent { const doc = savedObject - ? `${AD_HOC_RUN_SAVED_OBJECT_TYPE} [id=${savedObject.id}]` + ? [ + `${AD_HOC_RUN_SAVED_OBJECT_TYPE} [id=${savedObject.id}]`, + savedObject.name && `${savedObject.name}`, + ] + .filter(Boolean) + .join(' ') : 'an ad hoc run'; const [present, progressive, past] = adHocRunEventVerbs[action]; const message = error diff --git a/x-pack/plugins/alerting/server/rules_client/lib/check_authorization_and_get_total.ts b/x-pack/plugins/alerting/server/rules_client/lib/check_authorization_and_get_total.ts index a4e75c58bde4b..47987868d3ca8 100644 --- a/x-pack/plugins/alerting/server/rules_client/lib/check_authorization_and_get_total.ts +++ b/x-pack/plugins/alerting/server/rules_client/lib/check_authorization_and_get_total.ts @@ -84,7 +84,7 @@ export const checkAuthorizationAndGetTotal = async ( await withSpan({ name: 'authorization.ensureAuthorized', type: 'rules' }, () => pMap( buckets, - async ({ key: [ruleType, consumer, actions] }) => { + async ({ key: [ruleType, consumer] }) => { context.ruleTypeRegistry.ensureRuleTypeEnabled(ruleType); try { await context.authorization.ensureAuthorized({ diff --git a/x-pack/plugins/alerting/server/rules_client/lib/create_rule_saved_object.ts b/x-pack/plugins/alerting/server/rules_client/lib/create_rule_saved_object.ts index 938d421e79554..7c40ef31cd8ae 100644 --- a/x-pack/plugins/alerting/server/rules_client/lib/create_rule_saved_object.ts +++ b/x-pack/plugins/alerting/server/rules_client/lib/create_rule_saved_object.ts @@ -57,7 +57,7 @@ export async function createRuleSavedObject { action: 'rule_get_action_error_log', outcome: 'success', }), - kibana: { saved_object: { id: '1', type: RULE_SAVED_OBJECT_TYPE } }, + kibana: { saved_object: { id: '1', type: RULE_SAVED_OBJECT_TYPE, name: 'rule-name' } }, }) ); }); @@ -585,6 +585,7 @@ describe('getActionErrorLog()', () => { saved_object: { id: '1', type: RULE_SAVED_OBJECT_TYPE, + name: 'rule-name', }, }, error: { diff --git a/x-pack/plugins/alerting/server/rules_client/tests/get_execution_log.test.ts b/x-pack/plugins/alerting/server/rules_client/tests/get_execution_log.test.ts index f8416e9cdb6b6..3a3f801dd9085 100644 --- a/x-pack/plugins/alerting/server/rules_client/tests/get_execution_log.test.ts +++ b/x-pack/plugins/alerting/server/rules_client/tests/get_execution_log.test.ts @@ -672,7 +672,7 @@ describe('getExecutionLogForRule()', () => { action: 'rule_get_execution_log', outcome: 'success', }), - kibana: { saved_object: { id: '1', type: RULE_SAVED_OBJECT_TYPE } }, + kibana: { saved_object: { id: '1', type: RULE_SAVED_OBJECT_TYPE, name: 'rule-name' } }, }) ); }); @@ -695,6 +695,7 @@ describe('getExecutionLogForRule()', () => { saved_object: { id: '1', type: RULE_SAVED_OBJECT_TYPE, + name: 'rule-name', }, }, error: { diff --git a/x-pack/plugins/alerting/server/rules_client/tests/mute_all.test.ts b/x-pack/plugins/alerting/server/rules_client/tests/mute_all.test.ts index c84c860599fe2..c79df2a4986c8 100644 --- a/x-pack/plugins/alerting/server/rules_client/tests/mute_all.test.ts +++ b/x-pack/plugins/alerting/server/rules_client/tests/mute_all.test.ts @@ -181,6 +181,7 @@ describe('muteAll()', () => { id: '1', type: RULE_SAVED_OBJECT_TYPE, attributes: { + name: 'fake_rule_name', actions: [ { group: 'default', @@ -204,7 +205,9 @@ describe('muteAll()', () => { action: 'rule_mute', outcome: 'unknown', }), - kibana: { saved_object: { id: '1', type: RULE_SAVED_OBJECT_TYPE } }, + kibana: { + saved_object: { id: '1', type: RULE_SAVED_OBJECT_TYPE, name: 'fake_rule_name' }, + }, }) ); }); @@ -215,6 +218,7 @@ describe('muteAll()', () => { id: '1', type: RULE_SAVED_OBJECT_TYPE, attributes: { + name: 'fake_rule_name', actions: [ { group: 'default', @@ -244,6 +248,7 @@ describe('muteAll()', () => { saved_object: { id: '1', type: RULE_SAVED_OBJECT_TYPE, + name: 'fake_rule_name', }, }, error: { diff --git a/x-pack/plugins/alerting/server/rules_client/tests/run_soon.test.ts b/x-pack/plugins/alerting/server/rules_client/tests/run_soon.test.ts index 026ba3450a700..bc77cc424df8e 100644 --- a/x-pack/plugins/alerting/server/rules_client/tests/run_soon.test.ts +++ b/x-pack/plugins/alerting/server/rules_client/tests/run_soon.test.ts @@ -162,7 +162,7 @@ describe('runSoon()', () => { action: 'rule_run_soon', outcome: 'unknown', }), - kibana: { saved_object: { id: '1', type: RULE_SAVED_OBJECT_TYPE } }, + kibana: { saved_object: { id: '1', type: RULE_SAVED_OBJECT_TYPE, name: 'name' } }, }) ); }); @@ -181,6 +181,7 @@ describe('runSoon()', () => { saved_object: { id: '1', type: RULE_SAVED_OBJECT_TYPE, + name: 'name', }, }, error: { diff --git a/x-pack/plugins/alerting/server/rules_client/tests/unmute_all.test.ts b/x-pack/plugins/alerting/server/rules_client/tests/unmute_all.test.ts index fd09c74d43899..d4cdb4b1b851b 100644 --- a/x-pack/plugins/alerting/server/rules_client/tests/unmute_all.test.ts +++ b/x-pack/plugins/alerting/server/rules_client/tests/unmute_all.test.ts @@ -181,6 +181,7 @@ describe('unmuteAll()', () => { id: '1', type: RULE_SAVED_OBJECT_TYPE, attributes: { + name: 'fake_rule_name', actions: [ { group: 'default', @@ -204,7 +205,9 @@ describe('unmuteAll()', () => { action: 'rule_unmute', outcome: 'unknown', }), - kibana: { saved_object: { id: '1', type: RULE_SAVED_OBJECT_TYPE } }, + kibana: { + saved_object: { id: '1', type: RULE_SAVED_OBJECT_TYPE, name: 'fake_rule_name' }, + }, }) ); }); @@ -215,6 +218,7 @@ describe('unmuteAll()', () => { id: '1', type: RULE_SAVED_OBJECT_TYPE, attributes: { + name: 'fake_rule_name', actions: [ { group: 'default', @@ -244,6 +248,7 @@ describe('unmuteAll()', () => { saved_object: { id: '1', type: RULE_SAVED_OBJECT_TYPE, + name: 'fake_rule_name', }, }, error: { diff --git a/x-pack/plugins/cases/public/components/links/index.test.tsx b/x-pack/plugins/cases/public/components/links/index.test.tsx index 365502f5c02c1..5c450edc39d8a 100644 --- a/x-pack/plugins/cases/public/components/links/index.test.tsx +++ b/x-pack/plugins/cases/public/components/links/index.test.tsx @@ -38,7 +38,8 @@ describe('Configuration button', () => { expect(configureButton).toHaveAttribute('aria-label', 'My label'); }); - it('renders the tooltip correctly when hovering the button', async () => { + // Flaky: https://github.com/elastic/kibana/issues/193209 + it.skip('renders the tooltip correctly when hovering the button', async () => { jest.useFakeTimers(); const user = userEvent.setup({ diff --git a/x-pack/plugins/cloud_security_posture/public/assets/illustrations/clouds.svg b/x-pack/plugins/cloud_security_posture/public/assets/illustrations/clouds.svg new file mode 100644 index 0000000000000..37561c8d5a340 --- /dev/null +++ b/x-pack/plugins/cloud_security_posture/public/assets/illustrations/clouds.svg @@ -0,0 +1,5822 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/x-pack/plugins/cloud_security_posture/public/assets/illustrations/misconfigurations_vendors.svg b/x-pack/plugins/cloud_security_posture/public/assets/illustrations/misconfigurations_vendors.svg new file mode 100644 index 0000000000000..fb177750ed692 --- /dev/null +++ b/x-pack/plugins/cloud_security_posture/public/assets/illustrations/misconfigurations_vendors.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/x-pack/plugins/cloud_security_posture/public/assets/illustrations/vulnerabilities_vendors.svg b/x-pack/plugins/cloud_security_posture/public/assets/illustrations/vulnerabilities_vendors.svg new file mode 100644 index 0000000000000..4c0ac5db13f5a --- /dev/null +++ b/x-pack/plugins/cloud_security_posture/public/assets/illustrations/vulnerabilities_vendors.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/x-pack/plugins/cloud_security_posture/public/common/api/use_wiz_integration_route.ts b/x-pack/plugins/cloud_security_posture/public/common/api/use_wiz_integration_route.ts new file mode 100644 index 0000000000000..aac16021310bd --- /dev/null +++ b/x-pack/plugins/cloud_security_posture/public/common/api/use_wiz_integration_route.ts @@ -0,0 +1,21 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { pagePathGetters } from '@kbn/fleet-plugin/public'; +import { useKibana } from '../hooks/use_kibana'; + +export const useAdd3PIntegrationRoute = (pkgkey: string) => { + const { http } = useKibana().services; + + const path = pagePathGetters + .add_integration_to_policy({ + pkgkey, + }) + .join(''); + + return http.basePath.prepend(path); +}; diff --git a/x-pack/plugins/cloud_security_posture/public/common/navigation/constants.ts b/x-pack/plugins/cloud_security_posture/public/common/navigation/constants.ts index e5abbbfb7a9aa..9444b7b4b1922 100644 --- a/x-pack/plugins/cloud_security_posture/public/common/navigation/constants.ts +++ b/x-pack/plugins/cloud_security_posture/public/common/navigation/constants.ts @@ -11,6 +11,7 @@ import { CLOUD_SECURITY_POSTURE_BASE_PATH, } from '@kbn/cloud-security-posture-common'; import { NAV_ITEMS_NAMES } from '@kbn/cloud-security-posture/constants/navigation'; +import { CNVM_POLICY_TEMPLATE } from '../../../common/constants'; import type { CspBenchmarksPage, CspPage, CspPageNavigationItem } from './types'; const CSPM_DASHBOARD_TAB_NAME = 'Cloud'; @@ -71,4 +72,7 @@ export const cspIntegrationDocsNavigation = { gcpGetStartedPath: `https://www.elastic.co/guide/en/security/current/cspm-get-started-gcp.html`, azureGetStartedPath: `https://www.elastic.co/guide/en/security/current/cspm-get-started-azure.html`, }, + cnvm: { + overviewPath: `${ELASTIC_BASE_SHORT_URL}/${CNVM_POLICY_TEMPLATE}`, + }, }; diff --git a/x-pack/plugins/cloud_security_posture/public/components/no_findings_states/no_findings_states.test.tsx b/x-pack/plugins/cloud_security_posture/public/components/no_findings_states/no_findings_states.test.tsx index 1dcb9454a176a..9ac66d9252187 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/no_findings_states/no_findings_states.test.tsx +++ b/x-pack/plugins/cloud_security_posture/public/components/no_findings_states/no_findings_states.test.tsx @@ -12,11 +12,20 @@ import { renderWrapper } from '../../test/mock_server/mock_server_test_provider' import { NoFindingsStates } from './no_findings_states'; import * as statusHandlers from '../../../server/routes/status/status.handlers.mock'; import * as benchmarksHandlers from '../../../server/routes/benchmarks/benchmarks.handlers.mock'; +import { PACKAGE_NOT_INSTALLED_TEST_SUBJECT } from '../cloud_posture_page'; +import { MemoryRouter, Route } from '@kbn/shared-ux-router'; +import { THIRD_PARTY_INTEGRATIONS_NO_MISCONFIGURATIONS_FINDINGS_PROMPT } from '../test_subjects'; const server = setupMockServer(); -const renderNoFindingsStates = (postureType: 'cspm' | 'kspm' = 'cspm') => { - return renderWrapper(); +const renderNoFindingsStates = (postureType: 'cspm' | 'kspm' = 'cspm', route = '/') => { + return renderWrapper( + + + + + + ); }; describe('NoFindingsStates', () => { @@ -24,12 +33,16 @@ describe('NoFindingsStates', () => { it('shows integrations installation prompt with installation links when integration is not-installed', async () => { server.use(statusHandlers.notInstalledHandler); - renderNoFindingsStates(); + renderNoFindingsStates('cspm', '/app/security/cloud_security_posture/findings/configurations'); expect(screen.getByText(/loading/i)).toBeInTheDocument(); + await waitFor(() => { + expect(screen.getByTestId(PACKAGE_NOT_INSTALLED_TEST_SUBJECT)).toBeInTheDocument(); + }); + await waitFor(() => { expect( - screen.getByText(/detect security misconfigurations in your cloud infrastructure!/i) + screen.getByTestId(THIRD_PARTY_INTEGRATIONS_NO_MISCONFIGURATIONS_FINDINGS_PROMPT) ).toBeInTheDocument(); }); @@ -46,7 +59,33 @@ describe('NoFindingsStates', () => { '/app/fleet/integrations/cloud_security_posture-1.9.0/add-integration/kspm' ); }); + + await waitFor(() => { + expect(screen.getByRole('link', { name: /add wiz integration/i })).toHaveAttribute( + 'href', + '/app/fleet/integrations/wiz/add-integration' + ); + }); + }); + + it('does not show 3P prompt on not supported pages', async () => { + // 3P support is currently determined by the page URL. in this test case we do not provide the required URL + server.use(statusHandlers.notInstalledHandler); + renderNoFindingsStates(); + + expect(screen.getByText(/loading/i)).toBeInTheDocument(); + + await waitFor(() => { + expect(screen.getByTestId(PACKAGE_NOT_INSTALLED_TEST_SUBJECT)).toBeInTheDocument(); + }); + + await waitFor(() => { + expect( + screen.queryByTestId(THIRD_PARTY_INTEGRATIONS_NO_MISCONFIGURATIONS_FINDINGS_PROMPT) + ).not.toBeInTheDocument(); + }); }); + it('shows install agent prompt with install agent link when status is not-deployed', async () => { server.use(statusHandlers.notDeployedHandler); server.use(benchmarksHandlers.cspmInstalledHandler); @@ -64,6 +103,7 @@ describe('NoFindingsStates', () => { ); }); }); + it('shows install agent prompt with install agent link when status is not-deployed and postureType is KSPM', async () => { server.use(statusHandlers.notDeployedHandler); server.use(benchmarksHandlers.kspmInstalledHandler); @@ -84,6 +124,7 @@ describe('NoFindingsStates', () => { ); }); }); + it('shows indexing message when status is indexing', async () => { server.use(statusHandlers.indexingHandler); @@ -100,6 +141,7 @@ describe('NoFindingsStates', () => { ) ).toBeInTheDocument(); }); + it('shows timeout message when status is index-timeout', async () => { server.use(statusHandlers.indexTimeoutHandler); @@ -116,6 +158,7 @@ describe('NoFindingsStates', () => { screen.getByText(/collecting findings is taking longer than expected/i) ).toBeInTheDocument(); }); + it('shows unprivileged message when status is unprivileged', async () => { server.use(statusHandlers.unprivilegedHandler); @@ -137,6 +180,7 @@ describe('NoFindingsStates', () => { ).toBeInTheDocument(); }); }); + it('renders empty container when the status does not match a no finding status', async () => { server.use(statusHandlers.indexedHandler); diff --git a/x-pack/plugins/cloud_security_posture/public/components/no_findings_states/no_findings_states.tsx b/x-pack/plugins/cloud_security_posture/public/components/no_findings_states/no_findings_states.tsx index 9c8f2da45f8e8..5a8db618d5495 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/no_findings_states/no_findings_states.tsx +++ b/x-pack/plugins/cloud_security_posture/public/components/no_findings_states/no_findings_states.tsx @@ -16,6 +16,7 @@ import { EuiFlexGroup, EuiFlexItem, EuiImage, + useEuiTheme, } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import { i18n } from '@kbn/i18n'; @@ -23,16 +24,22 @@ import { css } from '@emotion/react'; import { CSPM_POLICY_TEMPLATE, KSPM_POLICY_TEMPLATE } from '@kbn/cloud-security-posture-common'; import type { IndexDetails, CspStatusCode } from '@kbn/cloud-security-posture-common'; import { useCspSetupStatusApi } from '@kbn/cloud-security-posture/src/hooks/use_csp_setup_status_api'; +import { useLocation } from 'react-router-dom'; +import { findingsNavigation } from '@kbn/cloud-security-posture'; +import { useAdd3PIntegrationRoute } from '../../common/api/use_wiz_integration_route'; import { FullSizeCenteredPage } from '../full_size_centered_page'; import { useCISIntegrationPoliciesLink } from '../../common/navigation/use_navigate_to_cis_integration_policies'; import { CSPM_NOT_INSTALLED_ACTION_SUBJ, KSPM_NOT_INSTALLED_ACTION_SUBJ, NO_FINDINGS_STATUS_TEST_SUBJ, + THIRD_PARTY_INTEGRATIONS_NO_MISCONFIGURATIONS_FINDINGS_PROMPT, + THIRD_PARTY_NO_MISCONFIGURATIONS_FINDINGS_PROMPT_WIZ_INTEGRATION_BUTTON, } from '../test_subjects'; import { CloudPosturePage, PACKAGE_NOT_INSTALLED_TEST_SUBJECT } from '../cloud_posture_page'; import type { PostureTypes } from '../../../common/types_old'; -import noDataIllustration from '../../assets/illustrations/no_data_illustration.svg'; +import cloudsSVG from '../../assets/illustrations/clouds.svg'; +import misconfigurationsVendorsSVG from '../../assets/illustrations/misconfigurations_vendors.svg'; import { useCspIntegrationLink } from '../../common/navigation/use_csp_integration_link'; import { NO_FINDINGS_STATUS_REFRESH_INTERVAL_MS } from '../../common/constants'; import { cspIntegrationDocsNavigation } from '../../common/navigation/constants'; @@ -171,74 +178,143 @@ const Unprivileged = ({ unprivilegedIndices }: { unprivilegedIndices: string[] } ); const EmptySecurityFindingsPrompt = () => { + const location = useLocation(); + const { euiTheme } = useEuiTheme(); const kspmIntegrationLink = useCspIntegrationLink(KSPM_POLICY_TEMPLATE); const cspmIntegrationLink = useCspIntegrationLink(CSPM_POLICY_TEMPLATE); + const wizAddIntegrationLink = useAdd3PIntegrationRoute('wiz'); + const is3PSupportedPage = location.pathname.includes(findingsNavigation.findings_default.path); return ( - } - title={ -

- -

- } - layout="horizontal" - color="plain" - body={ -

- - - - ), - }} - /> -

- } - actions={ - - - + + + } + title={ +

, + }} /> - - - - +

+ } + layout="vertical" + color="plain" + body={ +

, + learnMore: ( + + + + ), + }} /> - - - - } - /> +

+ } + actions={ + + + + + + + + + + + + + } + /> +
+ {is3PSupportedPage && ( + + + } + title={ +

+ }} + /> +

+ } + layout="vertical" + color="plain" + body={ +

+ }} + /> +

+ } + actions={ + + + + + + + + } + /> +
+ )} +
); }; diff --git a/x-pack/plugins/cloud_security_posture/public/components/no_vulnerabilities_states.tsx b/x-pack/plugins/cloud_security_posture/public/components/no_vulnerabilities_states.tsx index 074e75915a5b7..20438aa341ad6 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/no_vulnerabilities_states.tsx +++ b/x-pack/plugins/cloud_security_posture/public/components/no_vulnerabilities_states.tsx @@ -12,28 +12,35 @@ import { EuiIcon, EuiMarkdownFormat, EuiButton, - EuiButtonEmpty, EuiFlexGroup, EuiFlexItem, EuiImage, EuiLink, + useEuiTheme, } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import { i18n } from '@kbn/i18n'; import { css } from '@emotion/react'; import type { IndexDetails } from '@kbn/cloud-security-posture-common'; import { useCspSetupStatusApi } from '@kbn/cloud-security-posture/src/hooks/use_csp_setup_status_api'; +import { useLocation } from 'react-router-dom'; +import { findingsNavigation } from '@kbn/cloud-security-posture'; import { VULN_MGMT_POLICY_TEMPLATE } from '../../common/constants'; import { FullSizeCenteredPage } from './full_size_centered_page'; import { CloudPosturePage } from './cloud_posture_page'; import { NO_VULNERABILITIES_STATUS_TEST_SUBJ, CNVM_NOT_INSTALLED_ACTION_SUBJ, + THIRD_PARTY_INTEGRATIONS_NO_VULNERABILITIES_FINDINGS_PROMPT, + THIRD_PARTY_NO_VULNERABILITIES_FINDINGS_PROMPT_WIZ_INTEGRATION_BUTTON, } from './test_subjects'; -import noDataIllustration from '../assets/illustrations/no_data_illustration.svg'; import { useCspIntegrationLink } from '../common/navigation/use_csp_integration_link'; import { useCISIntegrationPoliciesLink } from '../common/navigation/use_navigate_to_cis_integration_policies'; import { PostureTypes } from '../../common/types_old'; +import { useAdd3PIntegrationRoute } from '../common/api/use_wiz_integration_route'; +import cloudsSVG from '../assets/illustrations/clouds.svg'; +import { cspIntegrationDocsNavigation } from '../common/navigation/constants'; +import vulnerabilitiesVendorsSVG from '../assets/illustrations/vulnerabilities_vendors.svg'; const REFETCH_INTERVAL_MS = 20000; @@ -66,58 +73,128 @@ const CnvmIntegrationNotInstalledEmptyPrompt = ({ }: { vulnMgmtIntegrationLink?: string; }) => { + const location = useLocation(); + const { euiTheme } = useEuiTheme(); + const wizAddIntegrationLink = useAdd3PIntegrationRoute('wiz'); + const is3PSupportedPage = location.pathname.includes(findingsNavigation.vulnerabilities.path); + return ( - } - title={ -

- , - }} - /> -

- } - layout="horizontal" - color="plain" - body={ -

- -

- } - actions={ - - - + + + } + title={ +

, + }} /> - - - - +

+ } + layout="vertical" + color="plain" + body={ +

, + learnMore: ( + + + + ), + }} /> - - - - } - /> +

+ } + actions={ + + + + + + + + } + /> +
+ {is3PSupportedPage && ( + + + } + title={ +

+ }} + /> +

+ } + layout="vertical" + color="plain" + body={ +

+ }} + /> +

+ } + actions={ + + + + + + + + } + /> +
+ )} +
); }; diff --git a/x-pack/plugins/cloud_security_posture/public/components/test_subjects.ts b/x-pack/plugins/cloud_security_posture/public/components/test_subjects.ts index ee40fe4fc894e..6e17a59b3ba08 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/test_subjects.ts +++ b/x-pack/plugins/cloud_security_posture/public/components/test_subjects.ts @@ -32,7 +32,14 @@ export const NO_VULNERABILITIES_STATUS_TEST_SUBJ = { export const CNVM_NOT_INSTALLED_ACTION_SUBJ = 'cnvm-not-installed-action'; export const CSPM_NOT_INSTALLED_ACTION_SUBJ = 'cspm-not-installed-action'; export const KSPM_NOT_INSTALLED_ACTION_SUBJ = 'kspm-not-installed-action'; - +export const THIRD_PARTY_INTEGRATIONS_NO_MISCONFIGURATIONS_FINDINGS_PROMPT = + '3p-integrations-no-misconfigurations-findings-prompt'; +export const THIRD_PARTY_INTEGRATIONS_NO_VULNERABILITIES_FINDINGS_PROMPT = + '3p-integrations-no-vulnerabilities-findings-prompt'; +export const THIRD_PARTY_NO_MISCONFIGURATIONS_FINDINGS_PROMPT_WIZ_INTEGRATION_BUTTON = + '3p-no-misconfigurations-findings-prompt-wiz-integration-button'; +export const THIRD_PARTY_NO_VULNERABILITIES_FINDINGS_PROMPT_WIZ_INTEGRATION_BUTTON = + '3p-no-vulnerabilities-findings-prompt-wiz-integration-button'; export const VULNERABILITIES_CONTAINER_TEST_SUBJ = 'vulnerabilities_container'; export const VULNERABILITIES_CVSS_SCORE_BADGE_SUBJ = 'vulnerabilities_cvss_score_badge'; diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_view/import.ts b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_view/import.ts index f4cbe2f03e966..8611e1ccd2cab 100644 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_view/import.ts +++ b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_view/import.ts @@ -29,6 +29,7 @@ interface Config { mappingsString: string; pipelineString: string; pipelineId: string | null; + createPipeline: boolean; } export async function importData(props: Props, config: Config, setState: (state: unknown) => void) { @@ -41,6 +42,7 @@ export async function importData(props: Props, config: Config, setState: (state: mappingsString, pipelineString, pipelineId, + createPipeline, } = config; const { format } = results; @@ -86,7 +88,7 @@ export async function importData(props: Props, config: Config, setState: (state: let settings = {}; let mappings = {}; - let pipeline = {}; + let pipeline; try { settings = JSON.parse(indexSettingsString); @@ -109,7 +111,9 @@ export async function importData(props: Props, config: Config, setState: (state: } try { - pipeline = JSON.parse(pipelineString); + if (createPipeline) { + pipeline = JSON.parse(pipelineString) as IngestPipeline; + } } catch (error) { success = false; const parseError = i18n.translate('xpack.dataVisualizer.file.importView.parsePipelineError', { @@ -143,12 +147,7 @@ export async function importData(props: Props, config: Config, setState: (state: return; } - const initializeImportResp = await importer.initializeImport( - index, - settings, - mappings, - pipeline as IngestPipeline - ); + const initializeImportResp = await importer.initializeImport(index, settings, mappings, pipeline); const timeFieldName = importer.getTimeField(); setState({ timeFieldName }); @@ -158,14 +157,20 @@ export async function importData(props: Props, config: Config, setState: (state: indexCreatedStatus: getSuccess(indexCreated), }); - const pipelineCreated = initializeImportResp.pipelineId !== undefined; - if (indexCreated) { - setState({ - ingestPipelineCreatedStatus: pipelineCreated ? IMPORT_STATUS.COMPLETE : IMPORT_STATUS.FAILED, - pipelineId: pipelineCreated ? initializeImportResp.pipelineId : '', - }); + if (createPipeline) { + const pipelineCreated = initializeImportResp.pipelineId !== undefined; + if (indexCreated) { + setState({ + ingestPipelineCreatedStatus: pipelineCreated + ? IMPORT_STATUS.COMPLETE + : IMPORT_STATUS.FAILED, + pipelineId: pipelineCreated ? initializeImportResp.pipelineId : '', + }); + } + success = indexCreated && pipelineCreated; + } else { + success = indexCreated; } - success = indexCreated && pipelineCreated; if (success === false) { errors.push(initializeImportResp.error); diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_view/import_view.js b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_view/import_view.js index aecf755c1c7c1..8481ed76e5654 100644 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_view/import_view.js +++ b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_view/import_view.js @@ -109,6 +109,11 @@ export class ImportView extends Component { pipelineId, } = this.state; + const createPipeline = pipelineString !== ''; + this.setState({ + createPipeline, + }); + importData( { data, results, dataViewsContract, fileUpload }, { @@ -119,6 +124,7 @@ export class ImportView extends Component { mappingsString, pipelineString, pipelineId, + createPipeline, }, (state) => this.setState(state) ); diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/domain_management/add_domain/add_domain_form.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/domain_management/add_domain/add_domain_form.tsx index 98d61a2a73662..5dfa65fe7bba3 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/domain_management/add_domain/add_domain_form.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/domain_management/add_domain/add_domain_form.tsx @@ -62,6 +62,7 @@ export const AddDomainForm: React.FC = () => { fullWidth > setAddDomainFormInputValue(e.target.value)} diff --git a/x-pack/plugins/enterprise_search/public/navigation_tree.ts b/x-pack/plugins/enterprise_search/public/navigation_tree.ts index 9264bf5de9750..74db04a3141da 100644 --- a/x-pack/plugins/enterprise_search/public/navigation_tree.ts +++ b/x-pack/plugins/enterprise_search/public/navigation_tree.ts @@ -348,6 +348,7 @@ export const getNavigationTreeDefinition = ({ title: 'Stack', }, ], + id: 'stack_management', // This id can't be changed as we use it to open the panel programmatically link: 'management', renderAs: 'panelOpener', spaceBefore: null, diff --git a/x-pack/plugins/file_upload/public/importer/geo/abstract_geo_file_importer.tsx b/x-pack/plugins/file_upload/public/importer/geo/abstract_geo_file_importer.tsx index 2b366eef42b84..c79228bee933b 100644 --- a/x-pack/plugins/file_upload/public/importer/geo/abstract_geo_file_importer.tsx +++ b/x-pack/plugins/file_upload/public/importer/geo/abstract_geo_file_importer.tsx @@ -196,9 +196,12 @@ export class AbstractGeoFileImporter extends Importer implements GeoFileImporter data: chunks[i], settings: {}, mappings: {}, - ingestPipeline: { - id: pipelineId, - }, + ingestPipeline: + pipelineId !== undefined + ? { + id: pipelineId, + } + : undefined, }); if (!this._isActive) { diff --git a/x-pack/plugins/file_upload/public/importer/importer.ts b/x-pack/plugins/file_upload/public/importer/importer.ts index 6337e892868fe..6c556a3ef49ef 100644 --- a/x-pack/plugins/file_upload/public/importer/importer.ts +++ b/x-pack/plugins/file_upload/public/importer/importer.ts @@ -15,7 +15,13 @@ import { i18n } from '@kbn/i18n'; import { isPopulatedObject } from '@kbn/ml-is-populated-object'; import { getHttp } from '../kibana_services'; import { MB } from '../../common/constants'; -import type { ImportDoc, ImportFailure, ImportResponse, IngestPipeline } from '../../common/types'; +import type { + ImportDoc, + ImportFailure, + ImportResponse, + IngestPipeline, + IngestPipelineWrapper, +} from '../../common/types'; import { CreateDocsResponse, IImporter, ImportResults } from './types'; const CHUNK_SIZE = 5000; @@ -79,26 +85,25 @@ export abstract class Importer implements IImporter { index: string, settings: IndicesIndexSettings, mappings: MappingTypeMapping, - pipeline: IngestPipeline + pipeline: IngestPipeline | undefined ) { - updatePipelineTimezone(pipeline); - - if (pipelineContainsSpecialProcessors(pipeline)) { - // pipeline contains processors which we know are slow - // so reduce the chunk size significantly to avoid timeouts - this._chunkSize = REDUCED_CHUNK_SIZE; + let ingestPipeline: IngestPipelineWrapper | undefined; + if (pipeline !== undefined) { + updatePipelineTimezone(pipeline); + + if (pipelineContainsSpecialProcessors(pipeline)) { + // pipeline contains processors which we know are slow + // so reduce the chunk size significantly to avoid timeouts + this._chunkSize = REDUCED_CHUNK_SIZE; + } + // if no pipeline has been supplied, + // send an empty object + ingestPipeline = { + id: `${index}-pipeline`, + pipeline, + }; } - // if no pipeline has been supplied, - // send an empty object - const ingestPipeline = - pipeline !== undefined - ? { - id: `${index}-pipeline`, - pipeline, - } - : {}; - this._index = index; this._pipeline = pipeline; @@ -139,9 +144,11 @@ export abstract class Importer implements IImporter { const chunks = createDocumentChunks(this._docArray, this._chunkSize); - const ingestPipeline = { - id: pipelineId, - }; + const ingestPipeline: IngestPipelineWrapper | undefined = pipelineId + ? { + id: pipelineId, + } + : undefined; let success = true; const failures: ImportFailure[] = []; @@ -345,10 +352,7 @@ export function callImportRoute({ data: ImportDoc[]; settings: IndicesIndexSettings; mappings: MappingTypeMapping; - ingestPipeline: { - id?: string; - pipeline?: IngestPipeline; - }; + ingestPipeline: IngestPipelineWrapper | undefined; }) { const query = id !== undefined ? { id } : {}; const body = JSON.stringify({ diff --git a/x-pack/plugins/file_upload/public/importer/types.ts b/x-pack/plugins/file_upload/public/importer/types.ts index 1199bb5a15c6a..4181e20528d00 100644 --- a/x-pack/plugins/file_upload/public/importer/types.ts +++ b/x-pack/plugins/file_upload/public/importer/types.ts @@ -43,7 +43,7 @@ export interface IImporter { index: string, settings: IndicesIndexSettings, mappings: MappingTypeMapping, - pipeline: IngestPipeline + pipeline: IngestPipeline | undefined ): Promise; import( id: string, diff --git a/x-pack/plugins/file_upload/server/import_data.ts b/x-pack/plugins/file_upload/server/import_data.ts index 2ae00ee1f9e08..afcec55107ff9 100644 --- a/x-pack/plugins/file_upload/server/import_data.ts +++ b/x-pack/plugins/file_upload/server/import_data.ts @@ -21,7 +21,7 @@ export function importDataProvider({ asCurrentUser }: IScopedClusterClient) { index: string, settings: IndicesIndexSettings, mappings: MappingTypeMapping, - ingestPipeline: IngestPipelineWrapper, + ingestPipeline: IngestPipelineWrapper | undefined, data: InputData ): Promise { let createdIndex; @@ -29,7 +29,8 @@ export function importDataProvider({ asCurrentUser }: IScopedClusterClient) { const docCount = data.length; try { - const { id: pipelineId, pipeline } = ingestPipeline; + const pipelineId = ingestPipeline?.id; + const pipeline = ingestPipeline?.pipeline; if (id === undefined) { // first chunk of data, create the index and id to return @@ -48,7 +49,6 @@ export function importDataProvider({ asCurrentUser }: IScopedClusterClient) { createdPipelineId = pipelineId; } else { createdIndex = index; - createdPipelineId = pipelineId; } let failures: ImportFailure[] = []; @@ -109,7 +109,7 @@ export function importDataProvider({ asCurrentUser }: IScopedClusterClient) { await asCurrentUser.indices.create({ index, body }, { maxRetries: 0 }); } - async function indexData(index: string, pipelineId: string, data: InputData) { + async function indexData(index: string, pipelineId: string | undefined, data: InputData) { try { const body = []; for (let i = 0; i < data.length; i++) { diff --git a/x-pack/plugins/file_upload/server/schemas.ts b/x-pack/plugins/file_upload/server/schemas.ts index b7250b45a82f9..94a4e9d9fa6f2 100644 --- a/x-pack/plugins/file_upload/server/schemas.ts +++ b/x-pack/plugins/file_upload/server/schemas.ts @@ -37,10 +37,12 @@ export const importFileBodySchema = schema.object({ /** Mappings */ mappings: schema.any(), /** Ingest pipeline definition */ - ingestPipeline: schema.object({ - id: schema.maybe(schema.string()), - pipeline: schema.maybe(schema.any()), - }), + ingestPipeline: schema.maybe( + schema.object({ + id: schema.maybe(schema.string()), + pipeline: schema.maybe(schema.any()), + }) + ), }); export const runtimeMappingsSchema = schema.object( diff --git a/x-pack/plugins/fleet/common/types/index.ts b/x-pack/plugins/fleet/common/types/index.ts index 3338c8c86f2f2..647a8b917d0c0 100644 --- a/x-pack/plugins/fleet/common/types/index.ts +++ b/x-pack/plugins/fleet/common/types/index.ts @@ -32,12 +32,12 @@ export interface FleetConfigType { }; agentless?: { enabled: boolean; - api: { - url: string; - tls: { - certificate: string; - key: string; - ca: string; + api?: { + url?: string; + tls?: { + certificate?: string; + key?: string; + ca?: string; }; }; }; diff --git a/x-pack/plugins/fleet/server/routes/agent/handlers.ts b/x-pack/plugins/fleet/server/routes/agent/handlers.ts index e328c73878980..67703bba5caae 100644 --- a/x-pack/plugins/fleet/server/routes/agent/handlers.ts +++ b/x-pack/plugins/fleet/server/routes/agent/handlers.ts @@ -328,7 +328,8 @@ export const getAgentStatusForAgentPolicyHandler: FleetRequestHandler< soClient, request.query.policyId, request.query.kuery, - coreContext.savedObjects.client.getCurrentNamespace() + coreContext.savedObjects.client.getCurrentNamespace(), + request.query.policyIds ); const body: GetAgentStatusResponse = { results }; diff --git a/x-pack/plugins/fleet/server/services/agents/agentless_agent.test.ts b/x-pack/plugins/fleet/server/services/agents/agentless_agent.test.ts index 24c344c15eccc..e55b883e80029 100644 --- a/x-pack/plugins/fleet/server/services/agents/agentless_agent.test.ts +++ b/x-pack/plugins/fleet/server/services/agents/agentless_agent.test.ts @@ -9,6 +9,7 @@ import { securityMock } from '@kbn/security-plugin/server/mocks'; import { loggerMock } from '@kbn/logging-mocks'; import type { Logger } from '@kbn/core/server'; +import type { AxiosError } from 'axios'; import axios from 'axios'; import { AgentlessAgentCreateError } from '../../errors'; @@ -20,7 +21,14 @@ import { listFleetServerHosts } from '../fleet_server_host'; import { agentlessAgentService } from './agentless_agent'; -jest.mock('axios', () => jest.fn()); +jest.mock('axios'); +// Add a mock implementation for `isAxiosError` to simulate that the error is an Axios error +(axios.isAxiosError as unknown as jest.Mock).mockImplementation( + (error: any): error is AxiosError => { + return error.isAxiosError === true; // Simulate that the error is an Axios error if it has `isAxiosError` property + } +); + jest.mock('../fleet_server_host'); jest.mock('../api_keys'); jest.mock('../output'); @@ -361,4 +369,191 @@ describe('Agentless Agent service', () => { }) ); }); + + it('should redact sensitive information from debug logs', async () => { + const returnValue = { + id: 'mocked', + regional_id: 'mocked', + }; + + (axios as jest.MockedFunction).mockResolvedValueOnce(returnValue); + const soClient = getAgentPolicyCreateMock(); + const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + + jest.spyOn(appContextService, 'getConfig').mockReturnValue({ + agentless: { + enabled: true, + api: { + url: 'http://api.agentless.com', + tls: { + certificate: '/path/to/cert', + key: '/path/to/key', + ca: '/path/to/ca', + }, + }, + }, + } as any); + jest.spyOn(appContextService, 'getCloud').mockReturnValue({ isCloudEnabled: true } as any); + jest + .spyOn(appContextService, 'getKibanaVersion') + .mockReturnValue('mocked-kibana-version-infinite'); + + mockedListFleetServerHosts.mockResolvedValue({ + items: [ + { + id: 'mocked-fleet-server-id', + host: 'http://fleetserver:8220', + active: true, + is_default: true, + host_urls: ['http://fleetserver:8220'], + }, + ], + } as any); + + mockedListEnrollmentApiKeys.mockResolvedValue({ + items: [ + { + id: 'mocked-fleet-enrollment-token-id', + policy_id: 'mocked-fleet-enrollment-policy-id', + api_key: 'mocked-fleet-enrollment-api-key', + }, + ], + } as any); + + await agentlessAgentService.createAgentlessAgent(esClient, soClient, { + id: 'mocked-agentless-agent-policy-id', + name: 'agentless agent policy', + namespace: 'default', + supports_agentless: true, + } as AgentPolicy); + + // Assert that sensitive information is redacted + expect(mockedLogger.debug).toHaveBeenCalledWith( + expect.stringContaining('fleet_token: [REDACTED]') + ); + expect(mockedLogger.debug).toHaveBeenCalledWith(expect.stringContaining('cert: [REDACTED]')); + expect(mockedLogger.debug).toHaveBeenCalledWith(expect.stringContaining('key: [REDACTED]')); + expect(mockedLogger.debug).toHaveBeenCalledWith(expect.stringContaining('ca: [REDACTED]')); + }); + + it('should log "undefined" on debug logs when tls configuration is missing', async () => { + const returnValue = { + id: 'mocked', + regional_id: 'mocked', + }; + + (axios as jest.MockedFunction).mockResolvedValueOnce(returnValue); + const soClient = getAgentPolicyCreateMock(); + const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + + jest.spyOn(appContextService, 'getConfig').mockReturnValue({ + agentless: { + enabled: true, + api: { + url: 'http://api.agentless.com', + }, + }, + } as any); + jest.spyOn(appContextService, 'getCloud').mockReturnValue({ isCloudEnabled: true } as any); + jest + .spyOn(appContextService, 'getKibanaVersion') + .mockReturnValue('mocked-kibana-version-infinite'); + + mockedListFleetServerHosts.mockResolvedValue({ + items: [ + { + id: 'mocked-fleet-server-id', + host: 'http://fleetserver:8220', + active: true, + is_default: true, + host_urls: ['http://fleetserver:8220'], + }, + ], + } as any); + + mockedListEnrollmentApiKeys.mockResolvedValue({ + items: [ + { + id: 'mocked-fleet-enrollment-token-id', + policy_id: 'mocked-fleet-enrollment-policy-id', + api_key: 'mocked-fleet-enrollment-api-key', + }, + ], + } as any); + + await expect( + agentlessAgentService.createAgentlessAgent(esClient, soClient, { + id: 'mocked-agentless-agent-policy-id', + name: 'agentless agent policy', + namespace: 'default', + supports_agentless: true, + } as AgentPolicy) + ).rejects.toThrowError(); + + // Assert that tls configuration is missing + expect(mockedLogger.debug).toHaveBeenCalledWith(expect.stringContaining('cert: undefined')); + expect(mockedLogger.debug).toHaveBeenCalledWith(expect.stringContaining('key: undefined')); + expect(mockedLogger.debug).toHaveBeenCalledWith(expect.stringContaining('ca: undefined')); + }); + + it('should redact sensitive information from error logs', async () => { + const soClient = getAgentPolicyCreateMock(); + const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + + jest.spyOn(appContextService, 'getConfig').mockReturnValue({ + agentless: { + enabled: true, + api: { + url: 'http://api.agentless.com', + tls: { + certificate: '/path/to/cert', + key: '/path/to/key', + ca: '/path/to/ca', + }, + }, + }, + } as any); + jest.spyOn(appContextService, 'getCloud').mockReturnValue({ isCloudEnabled: true } as any); + + mockedListFleetServerHosts.mockResolvedValue({ + items: [ + { + id: 'mocked-fleet-server-id', + host: 'http://fleetserver:8220', + active: true, + is_default: true, + host_urls: ['http://fleetserver:8220'], + }, + ], + } as any); + + mockedListEnrollmentApiKeys.mockResolvedValue({ + items: [ + { + id: 'mocked-fleet-enrollment-token-id', + policy_id: 'mocked-fleet-enrollment-policy-id', + api_key: 'mocked-fleet-enrollment-api-key', + }, + ], + } as any); + // Force axios to throw an AxiosError to simulate an error response + const axiosError = new Error('Test Error') as AxiosError; + axiosError.isAxiosError = true; // Mark it as an AxiosError + (axios as jest.MockedFunction).mockRejectedValueOnce(axiosError); + + await expect( + agentlessAgentService.createAgentlessAgent(esClient, soClient, { + id: 'mocked-agentless-agent-policy-id', + name: 'agentless agent policy', + namespace: 'default', + supports_agentless: true, + } as AgentPolicy) + ).rejects.toThrowError(); + + // Assert that sensitive information is redacted + expect(mockedLogger.error).toHaveBeenCalledWith( + expect.stringContaining(`\"fleet_token\":\"[REDACTED]\"`), + expect.any(Object) + ); + }); }); diff --git a/x-pack/plugins/fleet/server/services/agents/agentless_agent.ts b/x-pack/plugins/fleet/server/services/agents/agentless_agent.ts index 7f2c0dfaf1190..c98a5b63e0356 100644 --- a/x-pack/plugins/fleet/server/services/agents/agentless_agent.ts +++ b/x-pack/plugins/fleet/server/services/agents/agentless_agent.ts @@ -7,12 +7,14 @@ import https from 'https'; -import type { ElasticsearchClient, SavedObjectsClientContract } from '@kbn/core/server'; +import type { ElasticsearchClient, LogMeta, SavedObjectsClientContract } from '@kbn/core/server'; import { SslConfig, sslSchema } from '@kbn/server-http-tools'; import type { AxiosError, AxiosRequestConfig } from 'axios'; import axios from 'axios'; +import apm from 'elastic-apm-node'; + import { SO_SEARCH_LIMIT } from '../../constants'; import type { AgentPolicy } from '../../types'; import type { AgentlessApiResponse } from '../../../common/types'; @@ -30,12 +32,22 @@ class AgentlessAgentService { soClient: SavedObjectsClientContract, agentlessAgentPolicy: AgentPolicy ) { + const traceId = apm.currentTransaction?.traceparent; + const withRequestIdMessage = (message: string) => `${message} [Request Id: ${traceId}]`; + + const errorMetadata: LogMeta = { + trace: { + id: traceId, + }, + }; + const logger = appContextService.getLogger(); logger.debug(`Creating agentless agent ${agentlessAgentPolicy.id}`); if (!isAgentlessApiEnabled) { logger.error( - 'Creating agentless agent not supported in non-cloud or non-serverless environments' + 'Creating agentless agent not supported in non-cloud or non-serverless environments', + errorMetadata ); throw new AgentlessAgentCreateError('Agentless agent not supported'); } @@ -46,7 +58,7 @@ class AgentlessAgentService { const agentlessConfig = appContextService.getConfig()?.agentless; if (!agentlessConfig) { - logger.error('Missing agentless configuration'); + logger.error('Missing agentless configuration', errorMetadata); throw new AgentlessAgentCreateError('missing agentless configuration'); } @@ -57,17 +69,23 @@ class AgentlessAgentService { soClient ); - logger.debug(`Creating agentless agent with fleetUrl ${fleetUrl} and fleetToken ${fleetToken}`); + logger.debug( + `Creating agentless agent with fleet_url: ${fleetUrl} and fleet_token: [REDACTED]` + ); - logger.debug(`Creating agentless agent with TLS config with certificate: ${agentlessConfig.api.tls.certificate}, - and key: ${agentlessConfig.api.tls.key}`); + logger.debug( + `Creating agentless agent with TLS cert: ${ + agentlessConfig?.api?.tls?.certificate ? '[REDACTED]' : 'undefined' + } and TLS key: ${agentlessConfig?.api?.tls?.key ? '[REDACTED]' : 'undefined'} + and TLS ca: ${agentlessConfig?.api?.tls?.ca ? '[REDACTED]' : 'undefined'}` + ); const tlsConfig = new SslConfig( sslSchema.validate({ enabled: true, - certificate: agentlessConfig.api.tls.certificate, - key: agentlessConfig.api.tls.key, - certificateAuthorities: agentlessConfig.api.tls.ca, + certificate: agentlessConfig?.api?.tls?.certificate, + key: agentlessConfig?.api?.tls?.key, + certificateAuthorities: agentlessConfig?.api?.tls?.ca, }) ); @@ -81,6 +99,7 @@ class AgentlessAgentService { method: 'POST', headers: { 'Content-type': 'application/json', + 'X-Request-ID': traceId, }, httpsAgent: new https.Agent({ rejectUnauthorized: tlsConfig.rejectUnauthorized, @@ -95,30 +114,45 @@ class AgentlessAgentService { requestConfig.data.stack_version = appContextService.getKibanaVersion(); } - const requestConfigDebug = JSON.stringify({ + const requestConfigDebug = { ...requestConfig, + data: { + ...requestConfig.data, + fleet_token: '[REDACTED]', + }, httpsAgent: { ...requestConfig.httpsAgent, options: { ...requestConfig.httpsAgent.options, - cert: requestConfig.httpsAgent.options.cert ? 'REDACTED' : undefined, - key: requestConfig.httpsAgent.options.key ? 'REDACTED' : undefined, - ca: requestConfig.httpsAgent.options.ca ? 'REDACTED' : undefined, + cert: requestConfig.httpsAgent.options.cert ? '[REDACTED]' : undefined, + key: requestConfig.httpsAgent.options.key ? '[REDACTED]' : undefined, + ca: requestConfig.httpsAgent.options.ca ? '[REDACTED]' : undefined, }, }, - }); + }; + + const requestConfigDebugToString = JSON.stringify(requestConfigDebug); - logger.debug(`Creating agentless agent with request config ${requestConfigDebug}`); + logger.debug(`Creating agentless agent with request config ${requestConfigDebugToString}`); + + const errorMetadataWithRequestConfig: LogMeta = { + ...errorMetadata, + http: { + request: { + id: traceId, + body: requestConfigDebug.data, + }, + }, + }; const response = await axios(requestConfig).catch( (error: Error | AxiosError) => { if (!axios.isAxiosError(error)) { logger.error( - `Creating agentless failed with an error ${error} ${JSON.stringify( - requestConfigDebug - )}` + `Creating agentless failed with an error ${error} ${requestConfigDebugToString}`, + errorMetadataWithRequestConfig ); - throw new AgentlessAgentCreateError(error.message); + throw new AgentlessAgentCreateError(withRequestIdMessage(error.message)); } const errorLogCodeCause = `${error.code} ${this.convertCauseErrorsToString(error)}`; @@ -128,28 +162,38 @@ class AgentlessAgentService { logger.error( `Creating agentless failed because the Agentless API responding with a status code that falls out of the range of 2xx: ${JSON.stringify( error.response.status - )}} ${JSON.stringify(error.response.data)}} ${JSON.stringify(requestConfigDebug)}` + )}} ${JSON.stringify(error.response.data)}} ${requestConfigDebugToString}`, + { + ...errorMetadataWithRequestConfig, + http: { + ...errorMetadataWithRequestConfig.http, + response: { + status_code: error.response.status, + body: error.response.data, + }, + }, + } ); throw new AgentlessAgentCreateError( - `the Agentless API could not create the agentless agent` + withRequestIdMessage(`the Agentless API could not create the agentless agent`) ); } else if (error.request) { // The request was made but no response was received logger.error( - `Creating agentless agent failed while sending the request to the Agentless API: ${errorLogCodeCause} ${JSON.stringify( - requestConfigDebug - )}` + `Creating agentless agent failed while sending the request to the Agentless API: ${errorLogCodeCause} ${requestConfigDebugToString}`, + errorMetadataWithRequestConfig + ); + throw new AgentlessAgentCreateError( + withRequestIdMessage(`no response received from the Agentless API`) ); - throw new AgentlessAgentCreateError(`no response received from the Agentless API`); } else { // Something happened in setting up the request that triggered an Error logger.error( - `Creating agentless agent failed to be created ${errorLogCodeCause} ${JSON.stringify( - requestConfigDebug - )}` + `Creating agentless agent failed to be created ${errorLogCodeCause} ${requestConfigDebugToString}`, + errorMetadataWithRequestConfig ); throw new AgentlessAgentCreateError( - 'the Agentless API could not create the agentless agent' + withRequestIdMessage('the Agentless API could not create the agentless agent') ); } } diff --git a/x-pack/plugins/fleet/server/services/agents/status.test.ts b/x-pack/plugins/fleet/server/services/agents/status.test.ts index 346352f26de70..ae78985a40a1f 100644 --- a/x-pack/plugins/fleet/server/services/agents/status.test.ts +++ b/x-pack/plugins/fleet/server/services/agents/status.test.ts @@ -7,6 +7,8 @@ import { errors as EsErrors } from '@elastic/elasticsearch'; +import { AGENTS_INDEX } from '../../../common'; + import { createAppContextStartContractMock } from '../../mocks'; import { appContextService } from '../app_context'; @@ -168,4 +170,67 @@ describe('getAgentStatusForAgentPolicy', () => { expect(esClient.search).toHaveBeenCalledTimes(2); }); + + it('calls esClient.search with correct parameters when agentPolicyIds are provided', async () => { + const esClient = { + search: jest.fn().mockResolvedValue({ + aggregations: { + status: { + buckets: [ + { key: 'online', doc_count: 2 }, + { key: 'error', doc_count: 1 }, + ], + }, + }, + }), + }; + + const soClient = { + find: jest.fn().mockResolvedValue({ + saved_objects: [ + { id: 'agentPolicyId1', attributes: { name: 'Policy 1' } }, + { id: 'agentPolicyId2', attributes: { name: 'Policy 2' } }, + ], + }), + }; + + const agentPolicyIds = ['agentPolicyId1', 'agentPolicyId2']; + const filterKuery = 'filterKuery'; + const spaceId = 'spaceId'; + + await getAgentStatusForAgentPolicy( + esClient as any, + soClient as any, + undefined, + filterKuery, + spaceId, + agentPolicyIds + ); + + expect(esClient.search).toHaveBeenCalledWith( + expect.objectContaining({ + index: AGENTS_INDEX, + size: 0, + query: expect.objectContaining({ + bool: expect.objectContaining({ + must: expect.arrayContaining([ + expect.objectContaining({ + terms: { + policy_id: agentPolicyIds, + }, + }), + ]), + }), + }), + aggregations: expect.objectContaining({ + status: expect.objectContaining({ + terms: expect.objectContaining({ + field: 'status', + size: expect.any(Number), + }), + }), + }), + }) + ); + }); }); diff --git a/x-pack/plugins/fleet/server/services/agents/status.ts b/x-pack/plugins/fleet/server/services/agents/status.ts index 99d2d25b139c8..c413ee7e268c8 100644 --- a/x-pack/plugins/fleet/server/services/agents/status.ts +++ b/x-pack/plugins/fleet/server/services/agents/status.ts @@ -40,12 +40,23 @@ export async function getAgentStatusById( return (await getAgentById(esClient, soClient, agentId)).status!; } +/** + * getAgentStatusForAgentPolicy + * @param esClient + * @param soClient + * @param agentPolicyId @deprecated use agentPolicyIds instead since the move to multi-policy + * @param filterKuery + * @param spaceId + * @param agentPolicyIds + */ + export async function getAgentStatusForAgentPolicy( esClient: ElasticsearchClient, soClient: SavedObjectsClientContract, agentPolicyId?: string, filterKuery?: string, - spaceId?: string + spaceId?: string, + agentPolicyIds?: string[] ) { const logger = appContextService.getLogger(); const runtimeFields = await buildAgentStatusRuntimeField(soClient); @@ -71,8 +82,14 @@ export async function getAgentStatusForAgentPolicy( ); clauses.push(kueryAsElasticsearchQuery); } - - if (agentPolicyId) { + // If agentPolicyIds is provided, we filter by those, otherwise we filter by depreciated agentPolicyId + if (agentPolicyIds) { + clauses.push({ + terms: { + policy_id: agentPolicyIds, + }, + }); + } else if (agentPolicyId) { clauses.push({ term: { policy_id: agentPolicyId, diff --git a/x-pack/plugins/fleet/server/services/package_policy.ts b/x-pack/plugins/fleet/server/services/package_policy.ts index c457da64ead07..f1cf8bdd3b9a2 100644 --- a/x-pack/plugins/fleet/server/services/package_policy.ts +++ b/x-pack/plugins/fleet/server/services/package_policy.ts @@ -105,7 +105,12 @@ import { getAuthzFromRequest, doesNotHaveRequiredFleetAuthz } from './security'; import { storedPackagePolicyToAgentInputs } from './agent_policies'; import { agentPolicyService } from './agent_policy'; -import { getPackageInfo, getInstallation, ensureInstalledPackage } from './epm/packages'; +import { + getPackageInfo, + getInstallation, + ensureInstalledPackage, + getInstallationObject, +} from './epm/packages'; import { getAssetsDataFromAssetsMap } from './epm/packages/assets'; import { compileTemplate } from './epm/agent/agent'; import { escapeSearchQueryPhrase, normalizeKuery as _normalizeKuery } from './saved_object'; @@ -1874,9 +1879,25 @@ class PackagePolicyClientImpl implements PackagePolicyClient { public async buildPackagePolicyFromPackage( soClient: SavedObjectsClientContract, pkgName: string, - logger?: Logger + options?: { logger?: Logger; installMissingPackage?: boolean } ): Promise { - const pkgInstall = await getInstallation({ savedObjectsClient: soClient, pkgName, logger }); + const pkgInstallObj = await getInstallationObject({ + savedObjectsClient: soClient, + pkgName, + logger: options?.logger, + }); + let pkgInstall = pkgInstallObj?.attributes; + if (!pkgInstall && options?.installMissingPackage) { + const esClient = await appContextService.getInternalUserESClient(); + const result = await ensureInstalledPackage({ + esClient, + pkgName, + savedObjectsClient: soClient, + }); + if (result.package) { + pkgInstall = result.package; + } + } if (pkgInstall) { const packageInfo = await getPackageInfo({ savedObjectsClient: soClient, diff --git a/x-pack/plugins/fleet/server/services/package_policy_service.ts b/x-pack/plugins/fleet/server/services/package_policy_service.ts index 46913642843cf..8bd96fd855312 100644 --- a/x-pack/plugins/fleet/server/services/package_policy_service.ts +++ b/x-pack/plugins/fleet/server/services/package_policy_service.ts @@ -164,7 +164,7 @@ export interface PackagePolicyClient { buildPackagePolicyFromPackage( soClient: SavedObjectsClientContract, pkgName: string, - logger?: Logger + options?: { logger?: Logger; installMissingPackage?: boolean } ): Promise; runExternalCallbacks( diff --git a/x-pack/plugins/fleet/server/types/rest_spec/agent.ts b/x-pack/plugins/fleet/server/types/rest_spec/agent.ts index 4bbd065e23003..82cae68602e94 100644 --- a/x-pack/plugins/fleet/server/types/rest_spec/agent.ts +++ b/x-pack/plugins/fleet/server/types/rest_spec/agent.ts @@ -241,6 +241,7 @@ export const PostBulkUpdateAgentTagsRequestSchema = { export const GetAgentStatusRequestSchema = { query: schema.object({ policyId: schema.maybe(schema.string()), + policyIds: schema.maybe(schema.arrayOf(schema.string())), kuery: schema.maybe( schema.string({ validate: (value: string) => { diff --git a/x-pack/plugins/index_management/public/application/sections/home/index_list/details_page/index_mapping_with_context.tsx b/x-pack/plugins/index_management/public/application/sections/home/index_list/details_page/with_context_components/index_mapping_with_context.tsx similarity index 78% rename from x-pack/plugins/index_management/public/application/sections/home/index_list/details_page/index_mapping_with_context.tsx rename to x-pack/plugins/index_management/public/application/sections/home/index_list/details_page/with_context_components/index_mapping_with_context.tsx index 7aa0f07e8e492..a341b0fb67813 100644 --- a/x-pack/plugins/index_management/public/application/sections/home/index_list/details_page/index_mapping_with_context.tsx +++ b/x-pack/plugins/index_management/public/application/sections/home/index_list/details_page/with_context_components/index_mapping_with_context.tsx @@ -6,14 +6,14 @@ */ import React from 'react'; -import { documentationService } from '../../../../services'; -import { UIM_APP_NAME } from '../../../../../../common/constants/ui_metric'; -import { httpService } from '../../../../services/http'; -import { notificationService } from '../../../../services/notification'; -import { UiMetricService } from '../../../../services/ui_metric'; -import { AppDependencies, IndexManagementAppContext } from '../../../..'; +import { documentationService } from '../../../../../services'; +import { UIM_APP_NAME } from '../../../../../../../common/constants/ui_metric'; +import { httpService } from '../../../../../services/http'; +import { notificationService } from '../../../../../services/notification'; +import { UiMetricService } from '../../../../../services/ui_metric'; +import { AppDependencies, IndexManagementAppContext } from '../../../../..'; import { IndexMappingWithContextProps } from './index_mapping_with_context_types'; -import { DetailsPageMappings } from './details_page_mappings'; +import { DetailsPageMappings } from '../details_page_mappings'; export const IndexMappingWithContext: React.FC = ({ core, diff --git a/x-pack/plugins/index_management/public/application/sections/home/index_list/details_page/index_mapping_with_context_types.tsx b/x-pack/plugins/index_management/public/application/sections/home/index_list/details_page/with_context_components/index_mapping_with_context_types.tsx similarity index 82% rename from x-pack/plugins/index_management/public/application/sections/home/index_list/details_page/index_mapping_with_context_types.tsx rename to x-pack/plugins/index_management/public/application/sections/home/index_list/details_page/with_context_components/index_mapping_with_context_types.tsx index 228f928f1ec74..86d16fc35e65b 100644 --- a/x-pack/plugins/index_management/public/application/sections/home/index_list/details_page/index_mapping_with_context_types.tsx +++ b/x-pack/plugins/index_management/public/application/sections/home/index_list/details_page/with_context_components/index_mapping_with_context_types.tsx @@ -7,8 +7,8 @@ import { CoreStart } from '@kbn/core/public'; import { IndexMappingProps } from '@kbn/index-management-shared-types'; -import { AppDependencies } from '../../../../app_context'; -import { ExtensionsService } from '../../../../../services/extensions_service'; +import { AppDependencies } from '../../../../../app_context'; +import { ExtensionsService } from '../../../../../../services/extensions_service'; export type IndexMappingWithContextProps = { core: CoreStart; diff --git a/x-pack/plugins/index_management/public/application/sections/home/index_list/details_page/index_mappings_embeddable.tsx b/x-pack/plugins/index_management/public/application/sections/home/index_list/details_page/with_context_components/index_mappings_embeddable.tsx similarity index 100% rename from x-pack/plugins/index_management/public/application/sections/home/index_list/details_page/index_mappings_embeddable.tsx rename to x-pack/plugins/index_management/public/application/sections/home/index_list/details_page/with_context_components/index_mappings_embeddable.tsx diff --git a/x-pack/plugins/index_management/public/application/sections/home/index_list/details_page/with_context_components/index_settings_embeddable.tsx b/x-pack/plugins/index_management/public/application/sections/home/index_list/details_page/with_context_components/index_settings_embeddable.tsx new file mode 100644 index 0000000000000..70e738dbd5bd7 --- /dev/null +++ b/x-pack/plugins/index_management/public/application/sections/home/index_list/details_page/with_context_components/index_settings_embeddable.tsx @@ -0,0 +1,29 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +/* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { EuiLoadingSpinner } from '@elastic/eui'; +import { dynamic } from '@kbn/shared-ux-utility'; +import React, { Suspense, ComponentType } from 'react'; +import { IndexSettingWithContextProps } from './index_settings_with_context_types'; + +const IndexSettingsWithContext = dynamic>(() => + import('./index_settings_with_context').then((mod) => ({ default: mod.IndexSettingsWithContext })) +); + +export const IndexSettings: React.FC = (props) => { + return ( + }> + + + ); +}; diff --git a/x-pack/plugins/index_management/public/application/sections/home/index_list/details_page/with_context_components/index_settings_with_context.tsx b/x-pack/plugins/index_management/public/application/sections/home/index_list/details_page/with_context_components/index_settings_with_context.tsx new file mode 100644 index 0000000000000..d56c2c46e8ec4 --- /dev/null +++ b/x-pack/plugins/index_management/public/application/sections/home/index_list/details_page/with_context_components/index_settings_with_context.tsx @@ -0,0 +1,52 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import React from 'react'; +import { documentationService } from '../../../../../services'; +import { UIM_APP_NAME } from '../../../../../../../common/constants/ui_metric'; +import { httpService } from '../../../../../services/http'; +import { notificationService } from '../../../../../services/notification'; +import { UiMetricService } from '../../../../../services/ui_metric'; +import { AppDependencies, IndexManagementAppContext } from '../../../../..'; +import { DetailsPageSettings } from '../details_page_settings'; +import { IndexSettingWithContextProps } from './index_settings_with_context_types'; +import { setUiMetricService } from '../../../../../services/api'; + +export const IndexSettingsWithContext: React.FC = ({ + core, + dependencies, + indexName, + usageCollection, +}) => { + // this normally happens when the index management app is rendered + // but if components are embedded elsewhere that setup is skipped, so we have to do it here + // would do it in plugin.ts but that blows up the bundle size + // can't do it in an effect because then the first http call fails as the instantiation happens after first render + if (!httpService.httpClient) { + httpService.setup(core.http); + notificationService.setup(core.notifications); + } + documentationService.setup(core.docLinks); + + const uiMetricService = new UiMetricService(UIM_APP_NAME); + setUiMetricService(uiMetricService); + uiMetricService.setup(usageCollection); + + const newDependencies: AppDependencies = { + ...dependencies, + services: { + ...(dependencies.services || {}), + httpService, + notificationService, + uiMetricService, + }, + }; + return ( + + + + ); +}; diff --git a/x-pack/plugins/index_management/public/application/sections/home/index_list/details_page/with_context_components/index_settings_with_context_types.tsx b/x-pack/plugins/index_management/public/application/sections/home/index_list/details_page/with_context_components/index_settings_with_context_types.tsx new file mode 100644 index 0000000000000..39600edcc1306 --- /dev/null +++ b/x-pack/plugins/index_management/public/application/sections/home/index_list/details_page/with_context_components/index_settings_with_context_types.tsx @@ -0,0 +1,22 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { CoreStart } from '@kbn/core/public'; +import type { IndexSettingProps } from '@kbn/index-management-shared-types'; +import { UsageCollectionSetup } from '@kbn/usage-collection-plugin/public'; +import { AppDependencies } from '../../../../../app_context'; +import { ExtensionsService } from '../../../../../../services/extensions_service'; + +export type IndexSettingWithContextProps = { + core: CoreStart; + // omitting services here to constitute them inside the component + // this helps reduce bundle size significantly + dependencies: Omit & { + services: { extensionsService: ExtensionsService }; + }; + usageCollection: UsageCollectionSetup; +} & IndexSettingProps; diff --git a/x-pack/plugins/index_management/public/plugin.ts b/x-pack/plugins/index_management/public/plugin.ts index 4efe613fc2a04..5b1706fe807bd 100644 --- a/x-pack/plugins/index_management/public/plugin.ts +++ b/x-pack/plugins/index_management/public/plugin.ts @@ -26,8 +26,9 @@ import { ClientConfigType, SetupDependencies, StartDependencies } from './types' // avoid import from index files in plugin.ts, use specific import paths import { PLUGIN } from '../common/constants/plugin'; -import { IndexMapping } from './application/sections/home/index_list/details_page/index_mappings_embeddable'; +import { IndexMapping } from './application/sections/home/index_list/details_page/with_context_components/index_mappings_embeddable'; import { PublicApiService } from './services/public_api_service'; +import { IndexSettings } from './application/sections/home/index_list/details_page/with_context_components/index_settings_embeddable'; export class IndexMgmtUIPlugin implements @@ -159,6 +160,44 @@ export class IndexMgmtUIPlugin return IndexMapping({ dependencies: appDependencies, core: coreStart, ...props }); }; }, + getIndexSettingsComponent: (deps: { history: ScopedHistory }) => { + const { docLinks, fatalErrors, application, uiSettings, executionContext, settings, http } = + coreStart; + const { url } = share; + const appDependencies = { + core: { + fatalErrors, + getUrlForApp: application.getUrlForApp, + executionContext, + application, + http, + }, + plugins: { + usageCollection, + isFleetEnabled: Boolean(fleet), + share, + cloud, + console, + ml, + licensing, + }, + services: { + extensionsService: this.extensionsService, + }, + config: this.config, + history: deps.history, + setBreadcrumbs: undefined as any, // breadcrumbService.setBreadcrumbs, + uiSettings, + settings, + url, + docLinks, + kibanaVersion: this.kibanaVersion, + theme$: coreStart.theme.theme$, + }; + return (props: any) => { + return IndexSettings({ dependencies: appDependencies, core: coreStart, ...props }); + }; + }, }; } public stop() {} diff --git a/x-pack/plugins/integration_assistant/common/constants.ts b/x-pack/plugins/integration_assistant/common/constants.ts index 296e38c01e71c..3891c1e5e4343 100644 --- a/x-pack/plugins/integration_assistant/common/constants.ts +++ b/x-pack/plugins/integration_assistant/common/constants.ts @@ -26,3 +26,11 @@ export const FLEET_PACKAGES_PATH = `/api/fleet/epm/packages`; // License export const MINIMUM_LICENSE_TYPE: LicenseType = 'enterprise'; + +// ErrorCodes + +export enum ErrorCode { + RECURSION_LIMIT = 'recursion-limit', + RECURSION_LIMIT_ANALYZE_LOGS = 'recursion-limit-analyze-logs', + UNSUPPORTED_LOG_SAMPLES_FORMAT = 'unsupported-log-samples-format', +} diff --git a/x-pack/plugins/integration_assistant/docs/imgs/categorization_graph.png b/x-pack/plugins/integration_assistant/docs/imgs/categorization_graph.png index e7a011ad27b9a..a15dbf54d905a 100644 Binary files a/x-pack/plugins/integration_assistant/docs/imgs/categorization_graph.png and b/x-pack/plugins/integration_assistant/docs/imgs/categorization_graph.png differ diff --git a/x-pack/plugins/integration_assistant/docs/imgs/ecs_graph.png b/x-pack/plugins/integration_assistant/docs/imgs/ecs_graph.png index f2342cfc594c3..49bb9c3243068 100644 Binary files a/x-pack/plugins/integration_assistant/docs/imgs/ecs_graph.png and b/x-pack/plugins/integration_assistant/docs/imgs/ecs_graph.png differ diff --git a/x-pack/plugins/integration_assistant/docs/imgs/ecs_subgraph.png b/x-pack/plugins/integration_assistant/docs/imgs/ecs_subgraph.png index 85358ee453bcf..8e3ea2bc5e0ca 100644 Binary files a/x-pack/plugins/integration_assistant/docs/imgs/ecs_subgraph.png and b/x-pack/plugins/integration_assistant/docs/imgs/ecs_subgraph.png differ diff --git a/x-pack/plugins/integration_assistant/docs/imgs/kv_graph.png b/x-pack/plugins/integration_assistant/docs/imgs/kv_graph.png new file mode 100644 index 0000000000000..48a6099924248 Binary files /dev/null and b/x-pack/plugins/integration_assistant/docs/imgs/kv_graph.png differ diff --git a/x-pack/plugins/integration_assistant/docs/imgs/log_detection_graph.png b/x-pack/plugins/integration_assistant/docs/imgs/log_detection_graph.png index 94830a549dcf1..285e012c57a14 100644 Binary files a/x-pack/plugins/integration_assistant/docs/imgs/log_detection_graph.png and b/x-pack/plugins/integration_assistant/docs/imgs/log_detection_graph.png differ diff --git a/x-pack/plugins/integration_assistant/docs/imgs/related_graph.png b/x-pack/plugins/integration_assistant/docs/imgs/related_graph.png index cebb482a4b495..73a2c3acac0d4 100644 Binary files a/x-pack/plugins/integration_assistant/docs/imgs/related_graph.png and b/x-pack/plugins/integration_assistant/docs/imgs/related_graph.png differ diff --git a/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/generation_modal.test.tsx b/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/generation_modal.test.tsx index 3246caa81b041..a8e6a30ca5dfa 100644 --- a/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/generation_modal.test.tsx +++ b/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/generation_modal.test.tsx @@ -277,7 +277,78 @@ describe('GenerationModal', () => { ); }); - describe('when the retrying successfully', () => { + describe('when retrying successfully', () => { + beforeEach(async () => { + await act(async () => { + result.getByTestId('retryButton').click(); + await waitFor(() => expect(mockOnComplete).toBeCalled()); + }); + }); + + it('should not render the error callout', () => { + expect(result.queryByTestId('generationErrorCallout')).not.toBeInTheDocument(); + }); + it('should not render the retry button', () => { + expect(result.queryByTestId('retryButton')).not.toBeInTheDocument(); + }); + }); + }); + + describe('when there are errors and a message body with error code', () => { + const errorMessage = 'error message'; + const errorCode = 'error code'; + const error = JSON.stringify({ + body: { + message: errorMessage, + attributes: { + errorCode, + }, + }, + }); + let result: RenderResult; + beforeEach(async () => { + mockRunEcsGraph.mockImplementationOnce(() => { + throw new Error(error); + }); + + await act(async () => { + result = render( + , + { wrapper } + ); + await waitFor(() => + expect(result.queryByTestId('generationErrorCallout')).toBeInTheDocument() + ); + }); + }); + + it('should show the error text', () => { + expect(result.queryByText(error)).toBeInTheDocument(); + }); + it('should render the retry button', () => { + expect(result.queryByTestId('retryButton')).toBeInTheDocument(); + }); + it('should report telemetry for generation error', () => { + expect(mockReportEvent).toHaveBeenCalledWith( + TelemetryEventType.IntegrationAssistantGenerationComplete, + { + sessionId: expect.any(String), + sampleRows: integrationSettings.logSamples?.length ?? 0, + actionTypeId: connector.actionTypeId, + model: expect.anything(), + provider: connector.apiProvider ?? 'unknown', + durationMs: expect.any(Number), + errorMessage: error, + } + ); + }); + + describe('when retrying successfully', () => { beforeEach(async () => { await act(async () => { result.getByTestId('retryButton').click(); diff --git a/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/generation_modal.tsx b/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/generation_modal.tsx index b4a9c05b62450..aefde66ed83db 100644 --- a/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/generation_modal.tsx +++ b/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/generation_modal.tsx @@ -42,6 +42,7 @@ import { useKibana } from '../../../../../common/hooks/use_kibana'; import type { State } from '../../state'; import * as i18n from './translations'; import { useTelemetry } from '../../../telemetry'; +import type { ErrorCode } from '../../../../../../common/constants'; export type OnComplete = (result: State['result']) => void; @@ -171,7 +172,7 @@ export const useGeneration = ({ onComplete(result); } catch (e) { if (abortController.signal.aborted) return; - const errorMessage = `${e.message}${ + const originalErrorMessage = `${e.message}${ e.body ? ` (${e.body.statusCode}): ${e.body.message}` : '' }`; @@ -179,9 +180,14 @@ export const useGeneration = ({ connector, integrationSettings, durationMs: Date.now() - generationStartedAt, - error: errorMessage, + error: originalErrorMessage, }); + let errorMessage = originalErrorMessage; + const errorCode = e.body?.attributes?.errorCode as ErrorCode | undefined; + if (errorCode != null) { + errorMessage = i18n.ERROR_TRANSLATION[errorCode]; + } setError(errorMessage); } finally { setIsRequesting(false); diff --git a/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/translations.ts b/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/translations.ts index d44ad97939858..017a1a9c29caa 100644 --- a/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/translations.ts +++ b/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/translations.ts @@ -6,6 +6,7 @@ */ import { i18n } from '@kbn/i18n'; +import { ErrorCode } from '../../../../../../common/constants'; export const INTEGRATION_NAME_TITLE = i18n.translate( 'xpack.integrationAssistant.step.dataStream.integrationNameTitle', @@ -196,3 +197,25 @@ export const GENERATION_ERROR = (progressStep: string) => export const RETRY = i18n.translate('xpack.integrationAssistant.step.dataStream.retryButtonLabel', { defaultMessage: 'Retry', }); + +export const ERROR_TRANSLATION: Record = { + [ErrorCode.RECURSION_LIMIT_ANALYZE_LOGS]: i18n.translate( + 'xpack.integrationAssistant.errors.recursionLimitAnalyzeLogsErrorMessage', + { + defaultMessage: + 'Please verify the format of log samples is correct and try again. Try with a fewer samples if error persists.', + } + ), + [ErrorCode.RECURSION_LIMIT]: i18n.translate( + 'xpack.integrationAssistant.errors.recursionLimitReached', + { + defaultMessage: 'Max attempts exceeded. Please try again.', + } + ), + [ErrorCode.UNSUPPORTED_LOG_SAMPLES_FORMAT]: i18n.translate( + 'xpack.integrationAssistant.errors.unsupportedLogSamples', + { + defaultMessage: 'Unsupported log format in the samples.', + } + ), +}; diff --git a/x-pack/plugins/integration_assistant/server/integration_builder/agent.test.ts b/x-pack/plugins/integration_assistant/server/integration_builder/agent.test.ts index 44a26e40fe780..4c20c44b2ea78 100644 --- a/x-pack/plugins/integration_assistant/server/integration_builder/agent.test.ts +++ b/x-pack/plugins/integration_assistant/server/integration_builder/agent.test.ts @@ -5,7 +5,7 @@ * 2.0. */ -import * as Utils from '../util'; +import { ensureDirSync, createSync } from '../util'; import { createAgentInput } from './agent'; import { InputType } from '../../common'; @@ -27,13 +27,13 @@ describe('createAgentInput', () => { createAgentInput(dataStreamPath, inputTypes); - expect(Utils.ensureDirSync).toHaveBeenCalledWith(`${dataStreamPath}/agent/stream`); + expect(ensureDirSync).toHaveBeenCalledWith(`${dataStreamPath}/agent/stream`); - expect(Utils.createSync).toHaveBeenCalledWith( + expect(createSync).toHaveBeenCalledWith( `${dataStreamPath}/agent/stream/aws-s3.yml.hbs`, expect.any(String) ); - expect(Utils.createSync).toHaveBeenCalledWith( + expect(createSync).toHaveBeenCalledWith( `${dataStreamPath}/agent/stream/filestream.yml.hbs`, expect.any(String) ); @@ -42,7 +42,7 @@ describe('createAgentInput', () => { it('Should not create agent files if there are no input types', async () => { createAgentInput(dataStreamPath, []); - expect(Utils.ensureDirSync).toHaveBeenCalledWith(`${dataStreamPath}/agent/stream`); - expect(Utils.createSync).not.toHaveBeenCalled(); + expect(ensureDirSync).toHaveBeenCalledWith(`${dataStreamPath}/agent/stream`); + expect(createSync).not.toHaveBeenCalled(); }); }); diff --git a/x-pack/plugins/integration_assistant/server/integration_builder/build_integration.test.ts b/x-pack/plugins/integration_assistant/server/integration_builder/build_integration.test.ts index d3bd013e6e267..e8800af12653f 100644 --- a/x-pack/plugins/integration_assistant/server/integration_builder/build_integration.test.ts +++ b/x-pack/plugins/integration_assistant/server/integration_builder/build_integration.test.ts @@ -5,15 +5,14 @@ * 2.0. */ -import * as buildIntegrationModule from './build_integration'; +import { buildPackage, renderPackageManifestYAML } from './build_integration'; import { testIntegration } from '../../__jest__/fixtures/build_integration'; -import * as Utils from '../util'; -import * as DataStreamModule from './data_stream'; -import * as FieldsModule from './fields'; -import * as AgentModule from './agent'; -import * as PipelineModule from './pipeline'; +import { generateUniqueId, ensureDirSync, createSync } from '../util'; +import { createDataStream } from './data_stream'; +import { createFieldMapping } from './fields'; +import { createAgentInput } from './agent'; +import { createPipeline } from './pipeline'; import { DataStream, Docs, InputType, Pipeline, Integration } from '../../common'; -import { renderPackageManifestYAML } from './build_integration'; import yaml from 'js-yaml'; const mockedDataPath = 'path'; @@ -25,7 +24,7 @@ jest.mock('./fields'); jest.mock('./agent'); jest.mock('./pipeline'); -(Utils.generateUniqueId as jest.Mock).mockReturnValue(mockedId); +(generateUniqueId as jest.Mock).mockReturnValue(mockedId); jest.mock('@kbn/utils', () => ({ getDataPath: jest.fn(() => mockedDataPath), @@ -97,77 +96,68 @@ describe('buildPackage', () => { beforeEach(async () => { jest.clearAllMocks(); - await buildIntegrationModule.buildPackage(testIntegration); + await buildPackage(testIntegration); }); it('Should create expected directories and files', async () => { // Package & integration folders - expect(Utils.ensureDirSync).toHaveBeenCalledWith(packagePath); - expect(Utils.ensureDirSync).toHaveBeenCalledWith(integrationPath); + expect(ensureDirSync).toHaveBeenCalledWith(packagePath); + expect(ensureDirSync).toHaveBeenCalledWith(integrationPath); // _dev files - expect(Utils.ensureDirSync).toHaveBeenCalledWith(`${integrationPath}/_dev/build`); - expect(Utils.createSync).toHaveBeenCalledWith( + expect(ensureDirSync).toHaveBeenCalledWith(`${integrationPath}/_dev/build`); + expect(createSync).toHaveBeenCalledWith( `${integrationPath}/_dev/build/docs/README.md`, expect.any(String) ); - expect(Utils.createSync).toHaveBeenCalledWith( + expect(createSync).toHaveBeenCalledWith( `${integrationPath}/_dev/build/build.yml`, expect.any(String) ); // Docs files - expect(Utils.ensureDirSync).toHaveBeenCalledWith(`${integrationPath}/docs/`); - expect(Utils.createSync).toHaveBeenCalledWith( + expect(ensureDirSync).toHaveBeenCalledWith(`${integrationPath}/docs/`); + expect(createSync).toHaveBeenCalledWith( `${integrationPath}/docs/README.md`, expect.any(String) ); // Changelog file - expect(Utils.createSync).toHaveBeenCalledWith( - `${integrationPath}/changelog.yml`, - expect.any(String) - ); + expect(createSync).toHaveBeenCalledWith(`${integrationPath}/changelog.yml`, expect.any(String)); // Manifest files - expect(Utils.createSync).toHaveBeenCalledWith( - `${integrationPath}/manifest.yml`, - expect.any(String) - ); + expect(createSync).toHaveBeenCalledWith(`${integrationPath}/manifest.yml`, expect.any(String)); }); it('Should create logo files if info is present in the integration', async () => { testIntegration.logo = 'logo'; - await buildIntegrationModule.buildPackage(testIntegration); + await buildPackage(testIntegration); - expect(Utils.ensureDirSync).toHaveBeenCalledWith(`${integrationPath}/img`); - expect(Utils.createSync).toHaveBeenCalledWith( - `${integrationPath}/img/logo.svg`, - expect.any(Buffer) - ); + expect(ensureDirSync).toHaveBeenCalledWith(`${integrationPath}/img`); + expect(createSync).toHaveBeenCalledWith(`${integrationPath}/img/logo.svg`, expect.any(Buffer)); }); it('Should not create logo files if info is not present in the integration', async () => { jest.clearAllMocks(); testIntegration.logo = undefined; - await buildIntegrationModule.buildPackage(testIntegration); + await buildPackage(testIntegration); - expect(Utils.ensureDirSync).not.toHaveBeenCalledWith(`${integrationPath}/img`); - expect(Utils.createSync).not.toHaveBeenCalledWith( + expect(ensureDirSync).not.toHaveBeenCalledWith(`${integrationPath}/img`); + expect(createSync).not.toHaveBeenCalledWith( `${integrationPath}/img/logo.svg`, expect.any(Buffer) ); }); it('Should call createDataStream for each datastream', async () => { - expect(DataStreamModule.createDataStream).toHaveBeenCalledWith( + expect(createDataStream).toHaveBeenCalledWith( 'integration', firstDatastreamPath, firstDataStream ); - expect(DataStreamModule.createDataStream).toHaveBeenCalledWith( + expect(createDataStream).toHaveBeenCalledWith( 'integration', secondDatastreamPath, secondDataStream @@ -175,35 +165,23 @@ describe('buildPackage', () => { }); it('Should call createAgentInput for each datastream', async () => { - expect(AgentModule.createAgentInput).toHaveBeenCalledWith( - firstDatastreamPath, - firstDataStreamInputTypes - ); - expect(AgentModule.createAgentInput).toHaveBeenCalledWith( - secondDatastreamPath, - secondDataStreamInputTypes - ); + expect(createAgentInput).toHaveBeenCalledWith(firstDatastreamPath, firstDataStreamInputTypes); + expect(createAgentInput).toHaveBeenCalledWith(secondDatastreamPath, secondDataStreamInputTypes); }); it('Should call createPipeline for each datastream', async () => { - expect(PipelineModule.createPipeline).toHaveBeenCalledWith( - firstDatastreamPath, - firstDataStreamPipeline - ); - expect(PipelineModule.createPipeline).toHaveBeenCalledWith( - secondDatastreamPath, - secondDataStreamPipeline - ); + expect(createPipeline).toHaveBeenCalledWith(firstDatastreamPath, firstDataStreamPipeline); + expect(createPipeline).toHaveBeenCalledWith(secondDatastreamPath, secondDataStreamPipeline); }); it('Should call createFieldMapping for each datastream', async () => { - expect(FieldsModule.createFieldMapping).toHaveBeenCalledWith( + expect(createFieldMapping).toHaveBeenCalledWith( 'integration', firstDatastreamName, firstDatastreamPath, firstDataStreamDocs ); - expect(FieldsModule.createFieldMapping).toHaveBeenCalledWith( + expect(createFieldMapping).toHaveBeenCalledWith( 'integration', secondDatastreamName, secondDatastreamPath, diff --git a/x-pack/plugins/integration_assistant/server/integration_builder/data_stream.test.ts b/x-pack/plugins/integration_assistant/server/integration_builder/data_stream.test.ts index e5b00b85bf1d5..550c6118636cc 100644 --- a/x-pack/plugins/integration_assistant/server/integration_builder/data_stream.test.ts +++ b/x-pack/plugins/integration_assistant/server/integration_builder/data_stream.test.ts @@ -5,10 +5,10 @@ * 2.0. */ -import * as Utils from '../util'; +import { ensureDirSync, createSync, copySync } from '../util'; import { DataStream, Docs, InputType, Pipeline } from '../../common'; import { createDataStream } from './data_stream'; -import * as nunjucks from 'nunjucks'; +import { render } from 'nunjucks'; jest.mock('nunjucks'); @@ -59,31 +59,26 @@ describe('createDataStream', () => { createDataStream(packageName, dataStreamPath, firstDataStream); // pipeline - expect(Utils.ensureDirSync).toHaveBeenCalledWith(dataStreamPath); - expect(Utils.ensureDirSync).toHaveBeenCalledWith( - `${dataStreamPath}/elasticsearch/ingest_pipeline` - ); + expect(ensureDirSync).toHaveBeenCalledWith(dataStreamPath); + expect(ensureDirSync).toHaveBeenCalledWith(`${dataStreamPath}/elasticsearch/ingest_pipeline`); // dataStream files - expect(Utils.copySync).toHaveBeenCalledWith(expect.any(String), `${dataStreamPath}/fields`); + expect(copySync).toHaveBeenCalledWith(expect.any(String), `${dataStreamPath}/fields`); // test files - expect(Utils.ensureDirSync).toHaveBeenCalledWith(`${dataStreamPath}/_dev/test/pipeline`); - expect(Utils.copySync).toHaveBeenCalledWith( + expect(ensureDirSync).toHaveBeenCalledWith(`${dataStreamPath}/_dev/test/pipeline`); + expect(copySync).toHaveBeenCalledWith( expect.any(String), `${dataStreamPath}/_dev/test/pipeline/test-common-config.yml` ); - expect(Utils.createSync).toHaveBeenCalledWith( + expect(createSync).toHaveBeenCalledWith( `${dataStreamPath}/_dev/test/pipeline/test-${packageName}-datastream-1.log`, samples ); // // Manifest files - expect(Utils.createSync).toHaveBeenCalledWith(`${dataStreamPath}/manifest.yml`, undefined); - expect(nunjucks.render).toHaveBeenCalledWith(`filestream_manifest.yml.njk`, expect.anything()); - expect(nunjucks.render).toHaveBeenCalledWith( - `azure_eventhub_manifest.yml.njk`, - expect.anything() - ); + expect(createSync).toHaveBeenCalledWith(`${dataStreamPath}/manifest.yml`, undefined); + expect(render).toHaveBeenCalledWith(`filestream_manifest.yml.njk`, expect.anything()); + expect(render).toHaveBeenCalledWith(`azure_eventhub_manifest.yml.njk`, expect.anything()); }); }); diff --git a/x-pack/plugins/integration_assistant/server/integration_builder/fields.test.ts b/x-pack/plugins/integration_assistant/server/integration_builder/fields.test.ts index 9bd134b21b62e..a657f699cfff9 100644 --- a/x-pack/plugins/integration_assistant/server/integration_builder/fields.test.ts +++ b/x-pack/plugins/integration_assistant/server/integration_builder/fields.test.ts @@ -5,8 +5,8 @@ * 2.0. */ -import * as Utils from '../util'; -import * as nunjucks from 'nunjucks'; +import { createSync } from '../util'; +import { render } from 'nunjucks'; import { createFieldMapping } from './fields'; import { Docs } from '../../common'; @@ -19,7 +19,7 @@ jest.mock('../util', () => ({ const mockedTemplate = 'mocked template'; -(nunjucks.render as jest.Mock).mockReturnValue(mockedTemplate); +(render as jest.Mock).mockReturnValue(mockedTemplate); describe('createFieldMapping', () => { const dataStreamPath = 'path'; @@ -46,14 +46,11 @@ describe('createFieldMapping', () => { type: keyword `; - expect(Utils.createSync).toHaveBeenCalledWith( - `${dataStreamPath}/base-fields.yml`, + expect(createSync).toHaveBeenCalledWith( + `${dataStreamPath}/fields/base-fields.yml`, mockedTemplate ); - expect(Utils.createSync).toHaveBeenCalledWith( - `${dataStreamPath}/fields/fields.yml`, - expectedFields - ); + expect(createSync).toHaveBeenCalledWith(`${dataStreamPath}/fields/fields.yml`, expectedFields); }); it('Should create fields files even if docs value is empty', async () => { @@ -62,13 +59,10 @@ describe('createFieldMapping', () => { const expectedFields = `[] `; - expect(Utils.createSync).toHaveBeenCalledWith( - `${dataStreamPath}/base-fields.yml`, + expect(createSync).toHaveBeenCalledWith( + `${dataStreamPath}/fields/base-fields.yml`, mockedTemplate ); - expect(Utils.createSync).toHaveBeenCalledWith( - `${dataStreamPath}/fields/fields.yml`, - expectedFields - ); + expect(createSync).toHaveBeenCalledWith(`${dataStreamPath}/fields/fields.yml`, expectedFields); }); }); diff --git a/x-pack/plugins/integration_assistant/server/integration_builder/fields.ts b/x-pack/plugins/integration_assistant/server/integration_builder/fields.ts index c95a15cbe871d..79977ef2f3927 100644 --- a/x-pack/plugins/integration_assistant/server/integration_builder/fields.ts +++ b/x-pack/plugins/integration_assistant/server/integration_builder/fields.ts @@ -15,12 +15,13 @@ export function createFieldMapping( specificDataStreamDir: string, docs: object[] ): void { - createBaseFields(specificDataStreamDir, packageName, dataStreamName); - createCustomFields(specificDataStreamDir, docs); + const dataStreamFieldsDir = `${specificDataStreamDir}/fields`; + createBaseFields(dataStreamFieldsDir, packageName, dataStreamName); + createCustomFields(dataStreamFieldsDir, docs); } function createBaseFields( - specificDataStreamDir: string, + dataStreamFieldsDir: string, packageName: string, dataStreamName: string ): void { @@ -30,11 +31,11 @@ function createBaseFields( dataset: datasetName, }); - createSync(`${specificDataStreamDir}/base-fields.yml`, baseFields); + createSync(`${dataStreamFieldsDir}/base-fields.yml`, baseFields); } -function createCustomFields(specificDataStreamDir: string, pipelineResults: object[]): void { +function createCustomFields(dataStreamFieldsDir: string, pipelineResults: object[]): void { const mergedResults = mergeSamples(pipelineResults); const fieldKeys = generateFields(mergedResults); - createSync(`${specificDataStreamDir}/fields/fields.yml`, fieldKeys); + createSync(`${dataStreamFieldsDir}/fields.yml`, fieldKeys); } diff --git a/x-pack/plugins/integration_assistant/server/integration_builder/pipeline.test.ts b/x-pack/plugins/integration_assistant/server/integration_builder/pipeline.test.ts index 95d197ba2081b..a416add5f1048 100644 --- a/x-pack/plugins/integration_assistant/server/integration_builder/pipeline.test.ts +++ b/x-pack/plugins/integration_assistant/server/integration_builder/pipeline.test.ts @@ -6,7 +6,7 @@ */ import { Pipeline } from '../../common'; -import * as Utils from '../util'; +import { createSync } from '../util'; import { createPipeline } from './pipeline'; jest.mock('../util'); @@ -50,7 +50,7 @@ processors: ignore_missing: true if: ctx.event?.original == null `; - expect(Utils.createSync).toHaveBeenCalledWith( + expect(createSync).toHaveBeenCalledWith( `${dataStreamPath}/elasticsearch/ingest_pipeline/default.yml`, expectYamlContent ); @@ -62,7 +62,7 @@ processors: const expectYamlContent = `--- {} `; - expect(Utils.createSync).toHaveBeenCalledWith( + expect(createSync).toHaveBeenCalledWith( `${dataStreamPath}/elasticsearch/ingest_pipeline/default.yml`, expectYamlContent ); diff --git a/x-pack/plugins/integration_assistant/server/lib/errors/index.ts b/x-pack/plugins/integration_assistant/server/lib/errors/index.ts new file mode 100644 index 0000000000000..ae3b009334033 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/lib/errors/index.ts @@ -0,0 +1,17 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { ErrorThatHandlesItsOwnResponse } from './types'; + +export function isErrorThatHandlesItsOwnResponse( + e: ErrorThatHandlesItsOwnResponse +): e is ErrorThatHandlesItsOwnResponse { + return typeof (e as ErrorThatHandlesItsOwnResponse).sendResponse === 'function'; +} + +export { RecursionLimitError } from './recursion_limit_error'; +export { UnsupportedLogFormatError } from './unsupported_error'; diff --git a/x-pack/plugins/integration_assistant/server/lib/errors/recursion_limit_error.ts b/x-pack/plugins/integration_assistant/server/lib/errors/recursion_limit_error.ts new file mode 100644 index 0000000000000..09b307cb841e9 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/lib/errors/recursion_limit_error.ts @@ -0,0 +1,24 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { KibanaResponseFactory } from '@kbn/core/server'; +import { ErrorThatHandlesItsOwnResponse } from './types'; + +export class RecursionLimitError extends Error implements ErrorThatHandlesItsOwnResponse { + private readonly errorCode: string; + + constructor(message: string, errorCode: string) { + super(message); + this.errorCode = errorCode; + } + + public sendResponse(res: KibanaResponseFactory) { + return res.badRequest({ + body: { message: this.message, attributes: { errorCode: this.errorCode } }, + }); + } +} diff --git a/x-pack/plugins/transform/public/__mocks__/shared_imports.ts b/x-pack/plugins/integration_assistant/server/lib/errors/types.ts similarity index 51% rename from x-pack/plugins/transform/public/__mocks__/shared_imports.ts rename to x-pack/plugins/integration_assistant/server/lib/errors/types.ts index ac4b7fe49a38c..2b664da0941e8 100644 --- a/x-pack/plugins/transform/public/__mocks__/shared_imports.ts +++ b/x-pack/plugins/integration_assistant/server/lib/errors/types.ts @@ -5,10 +5,8 @@ * 2.0. */ -// actual mocks -export const expandLiteralStrings = jest.fn(); -export const XJsonMode = jest.fn(); -export const getSavedSearch = jest.fn(); +import { KibanaResponseFactory, IKibanaResponse } from '@kbn/core/server'; -// just passing through the reimports -export { getMlSharedImports } from '@kbn/ml-plugin/public'; +export interface ErrorThatHandlesItsOwnResponse extends Error { + sendResponse(res: KibanaResponseFactory): IKibanaResponse; +} diff --git a/x-pack/plugins/integration_assistant/server/lib/errors/unsupported_error.ts b/x-pack/plugins/integration_assistant/server/lib/errors/unsupported_error.ts new file mode 100644 index 0000000000000..79c4f2ccf69a1 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/lib/errors/unsupported_error.ts @@ -0,0 +1,26 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { KibanaResponseFactory } from '@kbn/core/server'; +import { ErrorThatHandlesItsOwnResponse } from './types'; +import { ErrorCode } from '../../../common/constants'; + +export class UnsupportedLogFormatError extends Error implements ErrorThatHandlesItsOwnResponse { + private readonly errorCode: string = ErrorCode.UNSUPPORTED_LOG_SAMPLES_FORMAT; + + // eslint-disable-next-line @typescript-eslint/no-useless-constructor + constructor(message: string) { + super(message); + } + + public sendResponse(res: KibanaResponseFactory) { + return res.customError({ + statusCode: 501, + body: { message: this.message, attributes: { errorCode: this.errorCode } }, + }); + } +} diff --git a/x-pack/plugins/integration_assistant/server/routes/analyze_logs_routes.ts b/x-pack/plugins/integration_assistant/server/routes/analyze_logs_routes.ts index 29a68c4395a7c..2f0f3db47a7a9 100644 --- a/x-pack/plugins/integration_assistant/server/routes/analyze_logs_routes.ts +++ b/x-pack/plugins/integration_assistant/server/routes/analyze_logs_routes.ts @@ -16,6 +16,9 @@ import type { IntegrationAssistantRouteHandlerContext } from '../plugin'; import { getLLMClass, getLLMType } from '../util/llm'; import { buildRouteValidationWithZod } from '../util/route_validation'; import { withAvailability } from './with_availability'; +import { isErrorThatHandlesItsOwnResponse, UnsupportedLogFormatError } from '../lib/errors'; +import { handleCustomErrors } from './routes_util'; +import { ErrorCode } from '../../common/constants'; export function registerAnalyzeLogsRoutes( router: IRouter @@ -82,14 +85,18 @@ export function registerAnalyzeLogsRoutes( const graphResults = await graph.invoke(logFormatParameters, options); const graphLogFormat = graphResults.results.samplesFormat.name; if (graphLogFormat === 'unsupported' || graphLogFormat === 'csv') { - return res.customError({ - statusCode: 501, - body: { message: `Unsupported log samples format` }, - }); + throw new UnsupportedLogFormatError(ErrorCode.UNSUPPORTED_LOG_SAMPLES_FORMAT); } return res.ok({ body: AnalyzeLogsResponse.parse(graphResults) }); - } catch (e) { - return res.badRequest({ body: e }); + } catch (err) { + try { + handleCustomErrors(err, ErrorCode.RECURSION_LIMIT_ANALYZE_LOGS); + } catch (e) { + if (isErrorThatHandlesItsOwnResponse(e)) { + return e.sendResponse(res); + } + } + return res.badRequest({ body: err }); } }) ); diff --git a/x-pack/plugins/integration_assistant/server/routes/build_integration_routes.ts b/x-pack/plugins/integration_assistant/server/routes/build_integration_routes.ts index d4b4424f5c844..1a7ecb58a2062 100644 --- a/x-pack/plugins/integration_assistant/server/routes/build_integration_routes.ts +++ b/x-pack/plugins/integration_assistant/server/routes/build_integration_routes.ts @@ -11,7 +11,9 @@ import { buildPackage } from '../integration_builder'; import type { IntegrationAssistantRouteHandlerContext } from '../plugin'; import { buildRouteValidationWithZod } from '../util/route_validation'; import { withAvailability } from './with_availability'; - +import { isErrorThatHandlesItsOwnResponse } from '../lib/errors'; +import { handleCustomErrors } from './routes_util'; +import { ErrorCode } from '../../common/constants'; export function registerIntegrationBuilderRoutes( router: IRouter ) { @@ -38,8 +40,15 @@ export function registerIntegrationBuilderRoutes( body: zippedIntegration, headers: { 'Content-Type': 'application/zip' }, }); - } catch (e) { - return response.customError({ statusCode: 500, body: e }); + } catch (err) { + try { + handleCustomErrors(err, ErrorCode.RECURSION_LIMIT); + } catch (e) { + if (isErrorThatHandlesItsOwnResponse(e)) { + return e.sendResponse(response); + } + } + return response.customError({ statusCode: 500, body: err }); } }) ); diff --git a/x-pack/plugins/integration_assistant/server/routes/categorization_routes.ts b/x-pack/plugins/integration_assistant/server/routes/categorization_routes.ts index c6a3cb5d1682a..635ef08dcdf9c 100644 --- a/x-pack/plugins/integration_assistant/server/routes/categorization_routes.ts +++ b/x-pack/plugins/integration_assistant/server/routes/categorization_routes.ts @@ -20,6 +20,9 @@ import type { IntegrationAssistantRouteHandlerContext } from '../plugin'; import { getLLMClass, getLLMType } from '../util/llm'; import { buildRouteValidationWithZod } from '../util/route_validation'; import { withAvailability } from './with_availability'; +import { isErrorThatHandlesItsOwnResponse } from '../lib/errors'; +import { handleCustomErrors } from './routes_util'; +import { ErrorCode } from '../../common/constants'; export function registerCategorizationRoutes( router: IRouter @@ -98,8 +101,15 @@ export function registerCategorizationRoutes( const results = await graph.invoke(parameters, options); return res.ok({ body: CategorizationResponse.parse(results) }); - } catch (e) { - return res.badRequest({ body: e }); + } catch (err) { + try { + handleCustomErrors(err, ErrorCode.RECURSION_LIMIT); + } catch (e) { + if (isErrorThatHandlesItsOwnResponse(e)) { + return e.sendResponse(res); + } + } + return res.badRequest({ body: err }); } } ) diff --git a/x-pack/plugins/integration_assistant/server/routes/ecs_routes.ts b/x-pack/plugins/integration_assistant/server/routes/ecs_routes.ts index 34a9fa5106654..12d77c66a1132 100644 --- a/x-pack/plugins/integration_assistant/server/routes/ecs_routes.ts +++ b/x-pack/plugins/integration_assistant/server/routes/ecs_routes.ts @@ -16,6 +16,9 @@ import type { IntegrationAssistantRouteHandlerContext } from '../plugin'; import { getLLMClass, getLLMType } from '../util/llm'; import { buildRouteValidationWithZod } from '../util/route_validation'; import { withAvailability } from './with_availability'; +import { isErrorThatHandlesItsOwnResponse } from '../lib/errors'; +import { handleCustomErrors } from './routes_util'; +import { ErrorCode } from '../../common/constants'; export function registerEcsRoutes(router: IRouter) { router.versioned @@ -92,8 +95,15 @@ export function registerEcsRoutes(router: IRouter) { router.versioned @@ -46,8 +49,15 @@ export function registerPipelineRoutes(router: IRouter) { router.versioned @@ -89,8 +92,15 @@ export function registerRelatedRoutes(router: IRouter { + it('should throw a RecursionLimitError when given a GraphRecursionError', () => { + const errorMessage = 'Recursion limit exceeded'; + const errorCode = ErrorCode.RECURSION_LIMIT; + const recursionError = new GraphRecursionError(errorMessage); + + expect(() => { + handleCustomErrors(recursionError, errorCode); + }).toThrow(RecursionLimitError); + expect(() => { + handleCustomErrors(recursionError, errorCode); + }).toThrowError(errorMessage); + }); + + it('should rethrow the error when given an error that is not a GraphRecursionError', () => { + const errorMessage = 'Some other error'; + const errorCode = ErrorCode.RECURSION_LIMIT; + const otherError = new Error(errorMessage); + + expect(() => { + handleCustomErrors(otherError, errorCode); + }).toThrow(otherError); + expect(() => { + handleCustomErrors(otherError, errorCode); + }).toThrowError(errorMessage); + }); +}); diff --git a/x-pack/plugins/integration_assistant/server/routes/routes_util.ts b/x-pack/plugins/integration_assistant/server/routes/routes_util.ts new file mode 100644 index 0000000000000..5622392cd06a9 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/routes/routes_util.ts @@ -0,0 +1,30 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { GraphRecursionError } from '@langchain/langgraph'; +import { ErrorCode } from '../../common/constants'; +import { RecursionLimitError } from '../lib/errors'; + +/** + * Handles errors that occur during the execution of a function. + * If the error is an instance of GraphRecursionError, it throws a RecursionLimitError with the same message and error code. + * Otherwise, it rethrows the original error. + * + * @param err - The error that occurred. + * @param errorCode - The error code associated with the error. + * @throws {RecursionLimitError} If the error is an instance of GraphRecursionError. + * @throws {Error} The original error. + */ +export function handleCustomErrors( + err: Error, + recursionErrorCode: ErrorCode.RECURSION_LIMIT | ErrorCode.RECURSION_LIMIT_ANALYZE_LOGS +) { + if (err instanceof GraphRecursionError) { + throw new RecursionLimitError(err.message, recursionErrorCode); + } + throw err; +} diff --git a/x-pack/plugins/integration_assistant/server/util/samples.ts b/x-pack/plugins/integration_assistant/server/util/samples.ts index 65b26ef0476d0..a29813c1643f8 100644 --- a/x-pack/plugins/integration_assistant/server/util/samples.ts +++ b/x-pack/plugins/integration_assistant/server/util/samples.ts @@ -5,7 +5,7 @@ * 2.0. */ /* eslint-disable @typescript-eslint/no-explicit-any */ -import * as yaml from 'js-yaml'; +import { dump } from 'js-yaml'; import type { CategorizationState, EcsMappingState, RelatedState } from '../types'; interface SampleObj { @@ -160,7 +160,7 @@ export function generateFields(mergedDocs: string): string { .filter((key) => !ecsTopKeysSet.has(key)) .map((key) => recursiveParse(doc[key], [key])); - return yaml.dump(fieldsStructure, { sortKeys: false }); + return dump(fieldsStructure, { sortKeys: false }); } export function merge( diff --git a/x-pack/plugins/lens/public/visualizations/datatable/components/table_basic.test.tsx b/x-pack/plugins/lens/public/visualizations/datatable/components/table_basic.test.tsx index 7ca9137f938fb..21361f874e83e 100644 --- a/x-pack/plugins/lens/public/visualizations/datatable/components/table_basic.test.tsx +++ b/x-pack/plugins/lens/public/visualizations/datatable/components/table_basic.test.tsx @@ -141,9 +141,9 @@ describe('DatatableComponent', () => { expect(screen.getByLabelText('My fanci metric chart')).toBeInTheDocument(); expect(screen.getByRole('row')).toBeInTheDocument(); expect(screen.queryAllByRole('gridcell').map((cell) => cell.textContent)).toEqual([ - 'shoes- a, column 1, row 1', - '1588024800000- b, column 2, row 1', - '3- c, column 3, row 1', + 'shoes', + '1588024800000', + '3', ]); }); @@ -352,8 +352,8 @@ describe('DatatableComponent', () => { }, }); expect(screen.queryAllByRole('gridcell').map((cell) => cell.textContent)).toEqual([ - '1588024800000- b, column 1, row 1', - '3- c, column 2, row 1', + '1588024800000', + '3', ]); }); @@ -698,9 +698,9 @@ describe('DatatableComponent', () => { .map((cell) => [cell.textContent, cell.style.backgroundColor]); expect(cellColors).toEqual([ - ['shoes- a, column 1, row 1', 'red'], - ['1588024800000- b, column 2, row 1', ''], - ['3- c, column 3, row 1', ''], + ['shoes', 'red'], + ['1588024800000', ''], + ['3', ''], ]); }); @@ -717,9 +717,9 @@ describe('DatatableComponent', () => { .map((cell) => [cell.textContent, cell.style.backgroundColor]); expect(cellColors).toEqual([ - ['shoes- a, column 1, row 1', ''], - ['1588024800000- b, column 2, row 1', ''], - ['3- c, column 3, row 1', 'red'], + ['shoes', ''], + ['1588024800000', ''], + ['3', 'red'], ]); }); }); diff --git a/x-pack/plugins/logstash/server/routes/pipelines/delete.ts b/x-pack/plugins/logstash/server/routes/pipelines/delete.ts index edf235a7357b0..8c1a6d399a9ba 100644 --- a/x-pack/plugins/logstash/server/routes/pipelines/delete.ts +++ b/x-pack/plugins/logstash/server/routes/pipelines/delete.ts @@ -37,6 +37,7 @@ export function registerPipelinesDeleteRoute(router: LogstashPluginRouter) { { path: '/api/logstash/pipelines/delete', options: { + access: 'public', summary: `Delete managed Logstash pipelines`, }, validate: { diff --git a/x-pack/plugins/logstash/server/routes/pipelines/list.ts b/x-pack/plugins/logstash/server/routes/pipelines/list.ts index 30b4e1d08802c..1b6eaf62fb8d8 100644 --- a/x-pack/plugins/logstash/server/routes/pipelines/list.ts +++ b/x-pack/plugins/logstash/server/routes/pipelines/list.ts @@ -28,6 +28,7 @@ export function registerPipelinesListRoute(router: LogstashPluginRouter) { { path: '/api/logstash/pipelines', options: { + access: 'public', summary: `Get all managed Logstash pipelines`, }, validate: false, diff --git a/x-pack/plugins/maps/public/api/start_api.ts b/x-pack/plugins/maps/public/api/start_api.ts index fcf9dab69e40a..4047c88268e04 100644 --- a/x-pack/plugins/maps/public/api/start_api.ts +++ b/x-pack/plugins/maps/public/api/start_api.ts @@ -9,7 +9,7 @@ import type { LayerDescriptor } from '../../common/descriptor_types'; import type { CreateLayerDescriptorParams } from '../classes/sources/es_search_source'; import type { SampleValuesConfig, EMSTermJoinConfig } from '../ems_autosuggest'; import type { Props as PassiveMapProps } from '../lens/passive_map'; -import type { Props as MapProps } from '../react_embeddable/map_renderer'; +import type { Props as MapProps } from '../react_embeddable/map_renderer/map_renderer'; export interface MapsStartApi { createLayerDescriptors: { diff --git a/x-pack/plugins/maps/public/classes/styles/vector/components/symbol/__snapshots__/icon_select.test.js.snap b/x-pack/plugins/maps/public/classes/styles/vector/components/symbol/__snapshots__/icon_select.test.js.snap index 40e698519e848..c2670eb11fffd 100644 --- a/x-pack/plugins/maps/public/classes/styles/vector/components/symbol/__snapshots__/icon_select.test.js.snap +++ b/x-pack/plugins/maps/public/classes/styles/vector/components/symbol/__snapshots__/icon_select.test.js.snap @@ -5,7 +5,7 @@ exports[`Should render icon select 1`] = ` + } readOnly={true} - > - - } - readOnly={true} - value="symbol1" - /> - + value="symbol1" + /> } closePopover={[Function]} display="block" @@ -97,7 +90,7 @@ exports[`Should render icon select with custom icons 1`] = ` " + symbolId="__kbn__custom_icon_sdf__foobar" + /> + } readOnly={true} - > - " - symbolId="__kbn__custom_icon_sdf__foobar" - /> - } - readOnly={true} - value="My Custom Icon" - /> - + value="My Custom Icon" + /> } closePopover={[Function]} display="block" diff --git a/x-pack/plugins/maps/public/classes/styles/vector/components/symbol/icon_select.js b/x-pack/plugins/maps/public/classes/styles/vector/components/symbol/icon_select.js index 432a36478127f..81bc36109b200 100644 --- a/x-pack/plugins/maps/public/classes/styles/vector/components/symbol/icon_select.js +++ b/x-pack/plugins/maps/public/classes/styles/vector/components/symbol/icon_select.js @@ -8,7 +8,6 @@ import React, { Component, Fragment } from 'react'; import { EuiButton, - EuiFormControlLayout, EuiFieldText, EuiPopover, EuiPopoverTitle, @@ -109,32 +108,25 @@ export class IconSelect extends Component { _renderPopoverButton() { const { value, svg, label } = this.props.icon; return ( - + } append={this.props.append} - > - - } - /> - + /> ); } diff --git a/x-pack/plugins/maps/public/legacy_visualizations/region_map/region_map_visualization.tsx b/x-pack/plugins/maps/public/legacy_visualizations/region_map/region_map_visualization.tsx index d8bc9a56f062a..09cf94a097767 100644 --- a/x-pack/plugins/maps/public/legacy_visualizations/region_map/region_map_visualization.tsx +++ b/x-pack/plugins/maps/public/legacy_visualizations/region_map/region_map_visualization.tsx @@ -11,7 +11,7 @@ import { first } from 'rxjs'; import type { Filter } from '@kbn/es-query'; import type { Query, TimeRange } from '@kbn/es-query'; import { RegionMapVisConfig } from './types'; -import { MapRenderer } from '../../react_embeddable/map_renderer'; +import { MapRenderer } from '../../react_embeddable/map_renderer/map_renderer'; import { createRegionMapLayerDescriptor } from '../../classes/layers/create_region_map_layer_descriptor'; interface Props { diff --git a/x-pack/plugins/maps/public/legacy_visualizations/tile_map/tile_map_visualization.tsx b/x-pack/plugins/maps/public/legacy_visualizations/tile_map/tile_map_visualization.tsx index f1cc8d437e082..35960c0c0dead 100644 --- a/x-pack/plugins/maps/public/legacy_visualizations/tile_map/tile_map_visualization.tsx +++ b/x-pack/plugins/maps/public/legacy_visualizations/tile_map/tile_map_visualization.tsx @@ -11,7 +11,7 @@ import { first } from 'rxjs'; import type { Filter } from '@kbn/es-query'; import type { Query, TimeRange } from '@kbn/es-query'; import type { TileMapVisConfig } from './types'; -import { MapRenderer } from '../../react_embeddable/map_renderer'; +import { MapRenderer } from '../../react_embeddable/map_renderer/map_renderer'; import { createTileMapLayerDescriptor } from '../../classes/layers/create_tile_map_layer_descriptor'; interface Props { diff --git a/x-pack/plugins/maps/public/lens/passive_map.tsx b/x-pack/plugins/maps/public/lens/passive_map.tsx index 30a4b8013b8ab..1be544a8cb423 100644 --- a/x-pack/plugins/maps/public/lens/passive_map.tsx +++ b/x-pack/plugins/maps/public/lens/passive_map.tsx @@ -53,6 +53,7 @@ export function PassiveMap(props: Props) { type={MAP_SAVED_OBJECT_TYPE} getParentApi={() => ({ + hideFilterActions: true, getSerializedStateForChild: () => { const basemapLayerDescriptor = createBasemapLayerDescriptor(); const intialLayers = basemapLayerDescriptor ? [basemapLayerDescriptor] : []; @@ -66,7 +67,6 @@ export function PassiveMap(props: Props) { hidePanelTitles: true, viewMode: ViewMode.VIEW, isLayerTOCOpen: false, - hideFilterActions: true, mapSettings: { disableInteractive: false, hideToolbarOverlay: false, diff --git a/x-pack/plugins/maps/public/plugin.ts b/x-pack/plugins/maps/public/plugin.ts index cc4cc4bcc91e8..fbdb2ef67d2ed 100644 --- a/x-pack/plugins/maps/public/plugin.ts +++ b/x-pack/plugins/maps/public/plugin.ts @@ -88,7 +88,7 @@ import { VectorTileInspectorView } from './inspector/vector_tile_adapter/vector_ import { PassiveMapLazy, setupLensChoroplethChart } from './lens'; import { CONTENT_ID, LATEST_VERSION } from '../common/content_management'; import { setupMapEmbeddable } from './react_embeddable/setup_map_embeddable'; -import { MapRendererLazy } from './react_embeddable/map_renderer_lazy'; +import { MapRendererLazy } from './react_embeddable/map_renderer/map_renderer_lazy'; export interface MapsPluginSetupDependencies { cloud?: CloudSetup; diff --git a/x-pack/plugins/maps/public/react_embeddable/initialize_edit_api.ts b/x-pack/plugins/maps/public/react_embeddable/initialize_edit_api.ts index a9274ed41f0fb..41959c4874223 100644 --- a/x-pack/plugins/maps/public/react_embeddable/initialize_edit_api.ts +++ b/x-pack/plugins/maps/public/react_embeddable/initialize_edit_api.ts @@ -16,33 +16,30 @@ export function initializeEditApi( parentApi?: unknown, savedObjectId?: string ) { - if (!parentApi || !apiHasAppContext(parentApi)) { - return {}; - } - - const parentApiContext = parentApi.getAppContext(); - - return { - getTypeDisplayName: () => { - return MAP_EMBEDDABLE_NAME; - }, - onEdit: async () => { - const stateTransfer = getEmbeddableService().getStateTransfer(); - await stateTransfer.navigateToEditor(APP_ID, { - path: getEditPath(savedObjectId), - state: { - embeddableId: uuid, - valueInput: getState(), - originatingApp: parentApiContext.currentAppId, - originatingPath: parentApiContext.getCurrentPath?.(), + return !parentApi || !apiHasAppContext(parentApi) + ? {} + : { + getTypeDisplayName: () => { + return MAP_EMBEDDABLE_NAME; + }, + onEdit: async () => { + const parentApiContext = parentApi.getAppContext(); + const stateTransfer = getEmbeddableService().getStateTransfer(); + await stateTransfer.navigateToEditor(APP_ID, { + path: getEditPath(savedObjectId), + state: { + embeddableId: uuid, + valueInput: getState(), + originatingApp: parentApiContext.currentAppId, + originatingPath: parentApiContext.getCurrentPath?.(), + }, + }); + }, + isEditingEnabled: () => { + return getMapsCapabilities().save as boolean; + }, + getEditHref: async () => { + return getHttp().basePath.prepend(getFullPath(savedObjectId)); }, - }); - }, - isEditingEnabled: () => { - return getMapsCapabilities().save as boolean; - }, - getEditHref: async () => { - return getHttp().basePath.prepend(getFullPath(savedObjectId)); - }, - }; + }; } diff --git a/x-pack/plugins/maps/public/react_embeddable/map_react_embeddable.tsx b/x-pack/plugins/maps/public/react_embeddable/map_react_embeddable.tsx index 28a14592a8c32..b20c05dba244b 100644 --- a/x-pack/plugins/maps/public/react_embeddable/map_react_embeddable.tsx +++ b/x-pack/plugins/maps/public/react_embeddable/map_react_embeddable.tsx @@ -40,6 +40,9 @@ import { initializeDataViews } from './initialize_data_views'; import { initializeFetch } from './initialize_fetch'; import { initializeEditApi } from './initialize_edit_api'; import { extractReferences } from '../../common/migrations/references'; +import { MapAttributes } from '../../common/content_management'; +import { MapSettings } from '../../common/descriptor_types'; +import { isMapRendererApi } from './map_renderer/types'; export function getControlledBy(id: string) { return `mapEmbeddablePanel${id}`; @@ -65,6 +68,10 @@ export const mapEmbeddableFactory: ReactEmbeddableFactory< }); await savedMap.whenReady(); + const attributes$ = new BehaviorSubject(state.attributes); + const mapSettings$ = new BehaviorSubject | undefined>(state.mapSettings); + const savedObjectId$ = new BehaviorSubject(state.savedObjectId); + // eslint bug, eslint thinks api is never reassigned even though it is // eslint-disable-next-line prefer-const let api: MapApi | undefined; @@ -171,14 +178,14 @@ export const mapEmbeddableFactory: ReactEmbeddableFactory< }), ...crossPanelActions.comparators, ...reduxSync.comparators, + attributes: [attributes$, (next: MapAttributes | undefined) => attributes$.next(next)], + mapSettings: [ + mapSettings$, + (next: Partial | undefined) => mapSettings$.next(next), + ], + savedObjectId: [savedObjectId$, (next: string | undefined) => savedObjectId$.next(next)], // readonly comparators - attributes: getUnchangingComparator(), mapBuffer: getUnchangingComparator(), - savedObjectId: getUnchangingComparator(), - mapSettings: getUnchangingComparator(), - hideFilterActions: getUnchangingComparator(), - isSharable: getUnchangingComparator(), - tooltipRenderer: getUnchangingComparator(), } ); @@ -229,17 +236,28 @@ export const mapEmbeddableFactory: ReactEmbeddableFactory< ); diff --git a/x-pack/plugins/maps/public/react_embeddable/map_renderer.tsx b/x-pack/plugins/maps/public/react_embeddable/map_renderer/map_renderer.tsx similarity index 66% rename from x-pack/plugins/maps/public/react_embeddable/map_renderer.tsx rename to x-pack/plugins/maps/public/react_embeddable/map_renderer/map_renderer.tsx index 7701c7ebbe11b..459c99f9d981c 100644 --- a/x-pack/plugins/maps/public/react_embeddable/map_renderer.tsx +++ b/x-pack/plugins/maps/public/react_embeddable/map_renderer/map_renderer.tsx @@ -9,11 +9,16 @@ import React, { useEffect, useRef } from 'react'; import type { Filter, Query, TimeRange } from '@kbn/es-query'; import { ReactEmbeddableRenderer } from '@kbn/embeddable-plugin/public'; import { useSearchApi } from '@kbn/presentation-publishing'; -import type { LayerDescriptor, MapCenterAndZoom, MapSettings } from '../../common/descriptor_types'; -import { createBasemapLayerDescriptor } from '../classes/layers/create_basemap_layer_descriptor'; -import { MapApi, MapRuntimeState, MapSerializedState } from './types'; -import { MAP_SAVED_OBJECT_TYPE } from '../../common/constants'; -import { RenderToolTipContent } from '../classes/tooltips/tooltip_property'; +import type { + LayerDescriptor, + MapCenterAndZoom, + MapSettings, +} from '../../../common/descriptor_types'; +import { createBasemapLayerDescriptor } from '../../classes/layers/create_basemap_layer_descriptor'; +import { MapApi, MapRuntimeState, MapSerializedState } from '../types'; +import { MAP_SAVED_OBJECT_TYPE } from '../../../common/constants'; +import { RenderToolTipContent } from '../../classes/tooltips/tooltip_property'; +import { MAP_RENDERER_TYPE } from './types'; function getLayers(layerList: LayerDescriptor[]) { const basemapLayer = createBasemapLayerDescriptor(); @@ -61,30 +66,27 @@ export function MapRenderer(props: Props) { type={MAP_SAVED_OBJECT_TYPE} getParentApi={() => ({ - ...searchApi, + type: MAP_RENDERER_TYPE, + getTooltipRenderer: props.getTooltipRenderer, + hideFilterActions: props.hideFilterActions, + isSharable: props.isSharable, getSerializedStateForChild: () => { - const rawState: MapSerializedState = { - attributes: { - title: props.title ?? '', - layerListJSON: JSON.stringify(getLayers(props.layerList)), - }, - hidePanelTitles: !Boolean(props.title), - isLayerTOCOpen: - typeof props.isLayerTOCOpen === 'boolean' ? props.isLayerTOCOpen : false, - hideFilterActions: - typeof props.hideFilterActions === 'boolean' ? props.hideFilterActions : false, - mapCenter: props.mapCenter, - mapSettings: props.mapSettings ?? {}, - isSharable: props.isSharable, - }; - if (props.getTooltipRenderer) { - rawState.tooltipRenderer = props.getTooltipRenderer(); - } return { - rawState, + rawState: { + attributes: { + title: props.title ?? '', + layerListJSON: JSON.stringify(getLayers(props.layerList)), + }, + hidePanelTitles: !Boolean(props.title), + isLayerTOCOpen: + typeof props.isLayerTOCOpen === 'boolean' ? props.isLayerTOCOpen : false, + mapCenter: props.mapCenter, + mapSettings: props.mapSettings ?? {}, + }, references: [], }; }, + ...searchApi, })} onApiAvailable={(api) => { mapApiRef.current = api; diff --git a/x-pack/plugins/maps/public/react_embeddable/map_renderer_lazy.tsx b/x-pack/plugins/maps/public/react_embeddable/map_renderer/map_renderer_lazy.tsx similarity index 100% rename from x-pack/plugins/maps/public/react_embeddable/map_renderer_lazy.tsx rename to x-pack/plugins/maps/public/react_embeddable/map_renderer/map_renderer_lazy.tsx diff --git a/x-pack/plugins/maps/public/react_embeddable/map_renderer/types.ts b/x-pack/plugins/maps/public/react_embeddable/map_renderer/types.ts new file mode 100644 index 0000000000000..0e92e551c821a --- /dev/null +++ b/x-pack/plugins/maps/public/react_embeddable/map_renderer/types.ts @@ -0,0 +1,21 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { HasType, apiIsOfType } from '@kbn/presentation-publishing'; +import { RenderToolTipContent } from '../../classes/tooltips/tooltip_property'; + +export const MAP_RENDERER_TYPE = 'mapRenderer'; + +export type MapRendererApi = HasType & { + getTooltipRenderer?: () => RenderToolTipContent; + hideFilterActions?: boolean; + isSharable?: boolean; +}; + +export function isMapRendererApi(api: unknown): api is MapRendererApi { + return Boolean(api && apiIsOfType(api, MAP_RENDERER_TYPE)); +} diff --git a/x-pack/plugins/maps/public/react_embeddable/types.ts b/x-pack/plugins/maps/public/react_embeddable/types.ts index f020e75723c6c..a61a7e1ce6a03 100644 --- a/x-pack/plugins/maps/public/react_embeddable/types.ts +++ b/x-pack/plugins/maps/public/react_embeddable/types.ts @@ -31,7 +31,6 @@ import { MapSettings, } from '../../common/descriptor_types'; import { ILayer } from '../classes/layers/layer'; -import { RenderToolTipContent } from '../classes/tooltips/tooltip_property'; import { EventHandlers } from '../reducers/non_serializable_instances'; export type MapSerializedState = SerializedTitles & @@ -47,15 +46,9 @@ export type MapSerializedState = SerializedTitles & mapBuffer?: MapExtent; mapSettings?: Partial; hiddenLayers?: string[]; - hideFilterActions?: boolean; timeRange?: TimeRange; filterByMapExtent?: boolean; isMovementSynchronized?: boolean; - - // Configuration item that are never persisted - // Putting in state as a temporary work around - isSharable?: boolean; - tooltipRenderer?: RenderToolTipContent; }; export type MapRuntimeState = MapSerializedState; diff --git a/x-pack/plugins/ml/common/constants/messages.ts b/x-pack/plugins/ml/common/constants/messages.ts index 8eafbccc9bee9..57d6e51cd7b55 100644 --- a/x-pack/plugins/ml/common/constants/messages.ts +++ b/x-pack/plugins/ml/common/constants/messages.ts @@ -10,7 +10,7 @@ import { i18n } from '@kbn/i18n'; import type { DocLinksStart } from '@kbn/core/public'; -import { JOB_ID_MAX_LENGTH, VALIDATION_STATUS } from './validation'; +import { JOB_ID_MAX_LENGTH, VALIDATION_STATUS } from '@kbn/ml-validators'; import { renderTemplate } from '../util/string_utils'; diff --git a/x-pack/plugins/ml/common/index.ts b/x-pack/plugins/ml/common/index.ts index ac0da68923e52..bc53fc4247f2d 100644 --- a/x-pack/plugins/ml/common/index.ts +++ b/x-pack/plugins/ml/common/index.ts @@ -5,7 +5,6 @@ * 2.0. */ -export { composeValidators, patternValidator } from './util/validators'; export { getDefaultCapabilities as getDefaultMlCapabilities } from './types/capabilities'; export { DATAFEED_STATE, JOB_STATE } from './constants/states'; export type { MlSummaryJob, SummaryJobState } from './types/anomaly_detection_jobs'; diff --git a/x-pack/plugins/ml/common/util/alerts.ts b/x-pack/plugins/ml/common/util/alerts.ts index b4be94ec93da5..c73c5a3ede39f 100644 --- a/x-pack/plugins/ml/common/util/alerts.ts +++ b/x-pack/plugins/ml/common/util/alerts.ts @@ -6,10 +6,12 @@ */ import { pick } from 'lodash'; + import { isDefined } from '@kbn/ml-is-defined'; +import { parseInterval } from '@kbn/ml-parse-interval'; + import type { CombinedJobWithStats, Datafeed, Job } from '../types/anomaly_detection_jobs'; import { resolveMaxTimeInterval } from './job_utils'; -import { parseInterval } from './parse_interval'; import type { JobsHealthRuleTestsConfig, JobsHealthTests } from '../types/alerts'; const narrowBucketLength = 60; diff --git a/x-pack/plugins/ml/common/util/job_utils.ts b/x-pack/plugins/ml/common/util/job_utils.ts index eb89fe695522f..cdde803a482e5 100644 --- a/x-pack/plugins/ml/common/util/job_utils.ts +++ b/x-pack/plugins/ml/common/util/job_utils.ts @@ -9,14 +9,15 @@ import { cloneDeep, each, isEmpty, isEqual, pick } from 'lodash'; import semverGte from 'semver/functions/gte'; import type { Duration } from 'moment'; import moment from 'moment'; + import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import numeral from '@elastic/numeral'; + import { i18n } from '@kbn/i18n'; import type { Filter } from '@kbn/es-query'; import { isPopulatedObject } from '@kbn/ml-is-populated-object'; import type { SerializableRecord } from '@kbn/utility-types'; import { FilterStateStore } from '@kbn/es-query'; -import type { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { isDefined } from '@kbn/ml-is-defined'; import { type MlEntityField, @@ -24,9 +25,9 @@ import { ML_JOB_AGGREGATION, MLCATEGORY, } from '@kbn/ml-anomaly-utils'; -import { ALLOWED_DATA_UNITS, JOB_ID_MAX_LENGTH } from '../constants/validation'; -import { parseInterval } from './parse_interval'; -import { maxLengthValidator } from './validators'; +import { maxLengthValidator, ALLOWED_DATA_UNITS, JOB_ID_MAX_LENGTH } from '@kbn/ml-validators'; +import { parseInterval } from '@kbn/ml-parse-interval'; + import { CREATED_BY_LABEL } from '../constants/new_job'; import type { CombinedJob, @@ -875,7 +876,7 @@ export function resolveMaxTimeInterval(timeIntervals: estypes.Duration[]): numbe } export function getFiltersForDSLQuery( - datafeedQuery: QueryDslQueryContainer, + datafeedQuery: estypes.QueryDslQueryContainer, dataViewId: string | undefined, alias?: string, store = FilterStateStore.APP_STATE @@ -903,7 +904,7 @@ export function getFiltersForDSLQuery( } // check to see if the query is a known "empty" shape -export function isKnownEmptyQuery(query: QueryDslQueryContainer) { +export function isKnownEmptyQuery(query: estypes.QueryDslQueryContainer) { const queries = [ // the default query used by the job wizards { bool: { must: [{ match_all: {} }] } }, diff --git a/x-pack/plugins/ml/common/util/validation_utils.ts b/x-pack/plugins/ml/common/util/validation_utils.ts index b31431cdb7d0d..ab5838be86ee9 100644 --- a/x-pack/plugins/ml/common/util/validation_utils.ts +++ b/x-pack/plugins/ml/common/util/validation_utils.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { VALIDATION_STATUS } from '../constants/validation'; +import { VALIDATION_STATUS } from '@kbn/ml-validators'; // get the most severe status level from a list of messages const contains = (arr: string[], str: string) => arr.indexOf(str) >= 0; diff --git a/x-pack/plugins/ml/public/alerting/anomaly_detection_rule/config_validator.tsx b/x-pack/plugins/ml/public/alerting/anomaly_detection_rule/config_validator.tsx index 04e96546196bb..1a2ba113aafe3 100644 --- a/x-pack/plugins/ml/public/alerting/anomaly_detection_rule/config_validator.tsx +++ b/x-pack/plugins/ml/public/alerting/anomaly_detection_rule/config_validator.tsx @@ -10,7 +10,7 @@ import React from 'react'; import { FormattedMessage } from '@kbn/i18n-react'; import { EuiCallOut, EuiSpacer } from '@elastic/eui'; -import { parseInterval } from '../../../common/util/parse_interval'; +import { parseInterval } from '@kbn/ml-parse-interval'; import { type CombinedJobWithStats } from '../../../common/types/anomaly_detection_jobs'; import { DATAFEED_STATE } from '../../../common/constants/states'; import { type MlAnomalyDetectionAlertParams } from '../../../common/types/alerts'; diff --git a/x-pack/plugins/ml/public/alerting/anomaly_detection_rule/ml_anomaly_alert_trigger.tsx b/x-pack/plugins/ml/public/alerting/anomaly_detection_rule/ml_anomaly_alert_trigger.tsx index 7404646db7195..3d70b4bbdc16d 100644 --- a/x-pack/plugins/ml/public/alerting/anomaly_detection_rule/ml_anomaly_alert_trigger.tsx +++ b/x-pack/plugins/ml/public/alerting/anomaly_detection_rule/ml_anomaly_alert_trigger.tsx @@ -14,6 +14,7 @@ import type { RuleTypeParamsExpressionProps } from '@kbn/triggers-actions-ui-plu import { isDefined } from '@kbn/ml-is-defined'; import { ML_ANOMALY_RESULT_TYPE, ML_ANOMALY_THRESHOLD } from '@kbn/ml-anomaly-utils'; import { useKibana } from '@kbn/kibana-react-plugin/public'; +import { parseInterval } from '@kbn/ml-parse-interval'; import type { MlCapabilities } from '../../../common/types/capabilities'; import { ML_PAGES } from '../../../common/constants/locator'; import type { MlCoreSetup } from '../../plugin'; @@ -34,7 +35,6 @@ import { ConfigValidator } from './config_validator'; import { type CombinedJobWithStats } from '../../../common/types/anomaly_detection_jobs'; import { AdvancedSettings } from './advanced_settings'; import { getLookbackInterval, getTopNBuckets } from '../../../common/util/alerts'; -import { parseInterval } from '../../../common/util/parse_interval'; export type MlAnomalyAlertTriggerProps = RuleTypeParamsExpressionProps & { diff --git a/x-pack/plugins/ml/public/alerting/anomaly_detection_rule/preview_alert_condition.tsx b/x-pack/plugins/ml/public/alerting/anomaly_detection_rule/preview_alert_condition.tsx index e9e9c38940d61..4da8f5e63e075 100644 --- a/x-pack/plugins/ml/public/alerting/anomaly_detection_rule/preview_alert_condition.tsx +++ b/x-pack/plugins/ml/public/alerting/anomaly_detection_rule/preview_alert_condition.tsx @@ -24,10 +24,13 @@ import { EuiSpacer, EuiText, } from '@elastic/eui'; +import { + composeValidators, + requiredValidator, + timeIntervalInputValidator, +} from '@kbn/ml-validators'; import type { AlertingApiService } from '../../application/services/ml_api_service/alerting'; import type { MlAnomalyDetectionAlertParams, PreviewResponse } from '../../../common/types/alerts'; -import { composeValidators } from '../../../common'; -import { requiredValidator, timeIntervalInputValidator } from '../../../common/util/validators'; import { invalidTimeIntervalMessage } from '../../application/jobs/new_job/common/job_validator/util'; import { ALERT_PREVIEW_SAMPLE_SIZE } from '../../../common/constants/alerts'; diff --git a/x-pack/plugins/ml/public/alerting/time_interval_control.tsx b/x-pack/plugins/ml/public/alerting/time_interval_control.tsx index 43eafe7acaedc..6ec4e251ee136 100644 --- a/x-pack/plugins/ml/public/alerting/time_interval_control.tsx +++ b/x-pack/plugins/ml/public/alerting/time_interval_control.tsx @@ -5,13 +5,15 @@ * 2.0. */ -import type { EuiFieldTextProps } from '@elastic/eui'; -import { EuiFieldText, EuiFormRow } from '@elastic/eui'; import type { FC, ReactNode } from 'react'; import React, { useMemo } from 'react'; + +import type { EuiFieldTextProps } from '@elastic/eui'; +import { EuiFieldText, EuiFormRow } from '@elastic/eui'; + +import { composeValidators, timeIntervalInputValidator } from '@kbn/ml-validators'; + import { invalidTimeIntervalMessage } from '../application/jobs/new_job/common/job_validator/util'; -import { composeValidators } from '../../common'; -import { timeIntervalInputValidator } from '../../common/util/validators'; type TimeIntervalControlProps = Omit & { label: string | ReactNode; diff --git a/x-pack/plugins/ml/public/alerting/validators.ts b/x-pack/plugins/ml/public/alerting/validators.ts index 4999c8bf45a8f..283e5d473fe3d 100644 --- a/x-pack/plugins/ml/public/alerting/validators.ts +++ b/x-pack/plugins/ml/public/alerting/validators.ts @@ -6,6 +6,7 @@ */ import { numberValidator } from '@kbn/ml-agg-utils'; -import { timeIntervalInputValidator } from '../../common/util/validators'; +import { timeIntervalInputValidator } from '@kbn/ml-validators'; + export const validateLookbackInterval = timeIntervalInputValidator(); export const validateTopNBucket = numberValidator({ min: 1, integerOnly: true }); diff --git a/x-pack/plugins/ml/public/application/aiops/change_point_detection.tsx b/x-pack/plugins/ml/public/application/aiops/change_point_detection.tsx index 386210cc02d25..cbfb7fa3024c3 100644 --- a/x-pack/plugins/ml/public/application/aiops/change_point_detection.tsx +++ b/x-pack/plugins/ml/public/application/aiops/change_point_detection.tsx @@ -13,9 +13,9 @@ import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import { ChangePointDetection } from '@kbn/aiops-plugin/public'; +import { useFieldStatsTrigger, FieldStatsFlyoutProvider } from '@kbn/ml-field-stats-flyout'; import { useDataSource } from '../contexts/ml/data_source_context'; -import { useFieldStatsTrigger, FieldStatsFlyoutProvider } from '../components/field_stats_flyout'; import { useMlKibana } from '../contexts/kibana'; import { HelpMenu } from '../components/help_menu'; import { TechnicalPreviewBadge } from '../components/technical_preview_badge'; diff --git a/x-pack/plugins/ml/public/application/components/anomalies_table/links_menu.tsx b/x-pack/plugins/ml/public/application/components/anomalies_table/links_menu.tsx index 42cf24b52cac4..89bb4b800eb91 100644 --- a/x-pack/plugins/ml/public/application/components/anomalies_table/links_menu.tsx +++ b/x-pack/plugins/ml/public/application/components/anomalies_table/links_menu.tsx @@ -45,10 +45,10 @@ import { escapeQuotes } from '@kbn/es-query'; import { isQuery } from '@kbn/data-plugin/public'; import type { TimeRangeBounds } from '@kbn/ml-time-buckets'; +import { parseInterval } from '@kbn/ml-parse-interval'; import { PLUGIN_ID } from '../../../../common/constants/app'; import { findMessageField } from '../../util/index_utils'; import { getInitialAnomaliesLayers, getInitialSourceIndexFieldLayers } from '../../../maps/util'; -import { parseInterval } from '../../../../common/util/parse_interval'; import { ML_APP_LOCATOR, ML_PAGES } from '../../../../common/constants/locator'; import { getFiltersForDSLQuery } from '../../../../common/util/job_utils'; diff --git a/x-pack/plugins/ml/public/application/components/callout/callout.tsx b/x-pack/plugins/ml/public/application/components/callout/callout.tsx index 8c60f87ef2427..e0ad8952057f3 100644 --- a/x-pack/plugins/ml/public/application/components/callout/callout.tsx +++ b/x-pack/plugins/ml/public/application/components/callout/callout.tsx @@ -9,8 +9,8 @@ import type { FC } from 'react'; import React from 'react'; import { EuiCallOut, EuiLink, EuiSpacer } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; -import type { CalloutMessage } from '../../../../common/constants/validation'; -import { VALIDATION_STATUS } from '../../../../common/constants/validation'; +import type { CalloutMessage } from '@kbn/ml-validators'; +import { VALIDATION_STATUS } from '@kbn/ml-validators'; export const defaultIconType = 'questionInCircle'; diff --git a/x-pack/plugins/ml/public/application/components/custom_urls/custom_url_editor/list.tsx b/x-pack/plugins/ml/public/application/components/custom_urls/custom_url_editor/list.tsx index bb913b8ecec34..e76b55a6f2369 100644 --- a/x-pack/plugins/ml/public/application/components/custom_urls/custom_url_editor/list.tsx +++ b/x-pack/plugins/ml/public/application/components/custom_urls/custom_url_editor/list.tsx @@ -28,13 +28,13 @@ import { type DataFrameAnalyticsConfig, } from '@kbn/ml-data-frame-analytics-utils'; import { parseUrlState } from '@kbn/ml-url-state'; +import { parseInterval } from '@kbn/ml-parse-interval'; import { useMlApi, useMlKibana } from '../../../contexts/kibana'; import { useToastNotificationService } from '../../../services/toast_notification_service'; import { isValidLabel, openCustomUrlWindow } from '../../../util/custom_url_utils'; import { getTestUrl } from './utils'; -import { parseInterval } from '../../../../../common/util/parse_interval'; import { TIME_RANGE_TYPE } from './constants'; import type { Job } from '../../../../../common/types/anomaly_detection_jobs'; diff --git a/x-pack/plugins/ml/public/application/components/custom_urls/custom_url_editor/utils.ts b/x-pack/plugins/ml/public/application/components/custom_urls/custom_url_editor/utils.ts index 0fc2a7b514b2d..c154abb6f5f69 100644 --- a/x-pack/plugins/ml/public/application/components/custom_urls/custom_url_editor/utils.ts +++ b/x-pack/plugins/ml/public/application/components/custom_urls/custom_url_editor/utils.ts @@ -25,8 +25,9 @@ import { type DataFrameAnalyticsConfig, DEFAULT_RESULTS_FIELD, } from '@kbn/ml-data-frame-analytics-utils'; - import { isDefined } from '@kbn/ml-is-defined'; +import { parseInterval } from '@kbn/ml-parse-interval'; + import type { DashboardItems } from '../../../services/dashboard_service'; import { categoryFieldTypes } from '../../../../../common/util/fields_utils'; import { TIME_RANGE_TYPE, URL_TYPE } from './constants'; @@ -35,7 +36,6 @@ import { getPartitioningFieldNames, getFiltersForDSLQuery, } from '../../../../../common/util/job_utils'; -import { parseInterval } from '../../../../../common/util/parse_interval'; import { replaceStringTokens } from '../../../util/string_utils'; import { replaceTokensInUrlValue, diff --git a/x-pack/plugins/ml/public/application/components/field_stats_flyout/index.ts b/x-pack/plugins/ml/public/application/components/field_stats_flyout/index.ts deleted file mode 100644 index d844dd037bd5b..0000000000000 --- a/x-pack/plugins/ml/public/application/components/field_stats_flyout/index.ts +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -export { FieldStatsFlyout } from './field_stats_flyout'; -export { FieldStatsContent } from './field_stats_content'; -export { FieldStatsFlyoutProvider } from './field_stats_flyout_provider'; -export { - MLFieldStatsFlyoutContext, - useFieldStatsFlyoutContext, -} from './use_field_stats_flytout_context'; -export { FieldStatsInfoButton } from './field_stats_info_button'; -export { useFieldStatsTrigger } from './use_field_stats_trigger'; -export { EuiComboBoxWithFieldStats } from './eui_combo_box_with_field_stats'; diff --git a/x-pack/plugins/ml/public/application/components/import_export_jobs/import_jobs_flyout/validate.ts b/x-pack/plugins/ml/public/application/components/import_export_jobs/import_jobs_flyout/validate.ts index 235c3d7b5ffe0..0431addf4b6fa 100644 --- a/x-pack/plugins/ml/public/application/components/import_export_jobs/import_jobs_flyout/validate.ts +++ b/x-pack/plugins/ml/public/application/components/import_export_jobs/import_jobs_flyout/validate.ts @@ -6,11 +6,13 @@ */ import { useCallback } from 'react'; + import { i18n } from '@kbn/i18n'; +import { JOB_ID_MAX_LENGTH } from '@kbn/ml-validators'; + import type { JobType } from '../../../../../common/types/saved_objects'; import { isValidIndexName } from '../../../../../common/util/es_utils'; import { isJobIdValid } from '../../../../../common/util/job_utils'; -import { JOB_ID_MAX_LENGTH } from '../../../../../common/constants/validation'; import type { JobIdObject } from './jobs_import_service'; import { useMlApi } from '../../../contexts/kibana'; diff --git a/x-pack/plugins/ml/public/application/components/model_snapshots/revert_model_snapshot_flyout/revert_model_snapshot_flyout.tsx b/x-pack/plugins/ml/public/application/components/model_snapshots/revert_model_snapshot_flyout/revert_model_snapshot_flyout.tsx index 639c101e7be6f..4cb7df0894899 100644 --- a/x-pack/plugins/ml/public/application/components/model_snapshots/revert_model_snapshot_flyout/revert_model_snapshot_flyout.tsx +++ b/x-pack/plugins/ml/public/application/components/model_snapshots/revert_model_snapshot_flyout/revert_model_snapshot_flyout.tsx @@ -31,6 +31,7 @@ import { import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import { timeFormatter } from '@kbn/ml-date-utils'; +import { parseInterval } from '@kbn/ml-parse-interval'; import type { ModelSnapshot, @@ -42,7 +43,6 @@ import { mlResultsServiceProvider } from '../../../services/results_service'; import type { LineChartPoint } from '../../../jobs/new_job/common/chart_loader'; import { EventRateChart } from '../../../jobs/new_job/pages/components/charts/event_rate_chart/event_rate_chart'; import type { Anomaly } from '../../../jobs/new_job/common/results_loader/results_loader'; -import { parseInterval } from '../../../../../common/util/parse_interval'; import type { CalendarEvent } from './create_calendar'; import { CreateCalendar } from './create_calendar'; diff --git a/x-pack/plugins/ml/public/application/components/scatterplot_matrix/scatterplot_matrix_vega_lite_spec.test.ts b/x-pack/plugins/ml/public/application/components/scatterplot_matrix/scatterplot_matrix_vega_lite_spec.test.ts index dfa2389c6e0a5..e2322ff7dd2b3 100644 --- a/x-pack/plugins/ml/public/application/components/scatterplot_matrix/scatterplot_matrix_vega_lite_spec.test.ts +++ b/x-pack/plugins/ml/public/application/components/scatterplot_matrix/scatterplot_matrix_vega_lite_spec.test.ts @@ -16,6 +16,7 @@ import { LEGEND_TYPES } from '../vega_chart/common'; import { getColorSpec, + getEscapedVegaFieldName, getScatterplotMatrixVegaLiteSpec, COLOR_RANGE_NOMINAL, COLOR_RANGE_OUTLIER, @@ -75,6 +76,56 @@ describe('getColorSpec()', () => { }); }); +describe('getEscapedVegaFieldName()', () => { + it('should escape dots in field names', () => { + const fieldName = 'field.name'; + const escapedFieldName = getEscapedVegaFieldName(fieldName); + expect(escapedFieldName).toBe('field\\.name'); + }); + + it('should escape brackets in field names', () => { + const fieldName = 'field[name]'; + const escapedFieldName = getEscapedVegaFieldName(fieldName); + expect(escapedFieldName).toBe('field\\[name\\]'); + }); + + it('should escape both dots and brackets in field names', () => { + const fieldName = 'field.name[0]'; + const escapedFieldName = getEscapedVegaFieldName(fieldName); + expect(escapedFieldName).toBe('field\\.name\\[0\\]'); + }); + + it('should return the same string if there are no special characters', () => { + const fieldName = 'fieldname'; + const escapedFieldName = getEscapedVegaFieldName(fieldName); + expect(escapedFieldName).toBe('fieldname'); + }); + + it('should prepend a string if provided', () => { + const fieldName = 'field.name'; + const prependString = 'prefix_'; + const escapedFieldName = getEscapedVegaFieldName(fieldName, prependString); + expect(escapedFieldName).toBe('prefix_field\\.name'); + }); + + it('should escape newlines in field names', () => { + // String quotes process backslashes, so we need to escape them for + // the test string to contain a backslash. For example, without the + // double backslash, this string would contain a newline character. + const fieldName = 'field\\name'; + const escapedFieldName = getEscapedVegaFieldName(fieldName); + expect(escapedFieldName).toBe('field\\\\name'); + }); + + it('should escape backslashes in field names', () => { + // String quotes process backslashes, so we need to escape them for + // the test string to contain a backslash. + const fieldName = 'fieldname\\withbackslash'; + const escapedFieldName = getEscapedVegaFieldName(fieldName); + expect(escapedFieldName).toBe('fieldname\\\\withbackslash'); + }); +}); + describe('getScatterplotMatrixVegaLiteSpec()', () => { const forCustomLink = false; diff --git a/x-pack/plugins/ml/public/application/components/scatterplot_matrix/scatterplot_matrix_vega_lite_spec.ts b/x-pack/plugins/ml/public/application/components/scatterplot_matrix/scatterplot_matrix_vega_lite_spec.ts index 96889679ed155..e7d7066339847 100644 --- a/x-pack/plugins/ml/public/application/components/scatterplot_matrix/scatterplot_matrix_vega_lite_spec.ts +++ b/x-pack/plugins/ml/public/application/components/scatterplot_matrix/scatterplot_matrix_vega_lite_spec.ts @@ -249,11 +249,28 @@ const getVegaSpecLayer = ( }; }; -// Escapes the characters .[] in field names with double backslashes +// Escapes the characters .[]\ in field names with double backslashes // since VEGA treats dots/brackets in field names as nested values. // See https://vega.github.io/vega-lite/docs/field.html for details. -function getEscapedVegaFieldName(fieldName: string, prependString: string = '') { - return `${prependString}${fieldName.replace(/([\.|\[|\]])/g, '\\$1')}`; +export function getEscapedVegaFieldName(fieldName: string, prependString: string = '') { + // Note the following isn't 100% ideal because there are cases when we may + // end up with an additional backslash being rendered for labels of the + // scatterplot. However, all other variations I tried caused rendering + // problems of the charts and rendering would fail completely. + + // For example, just escaping \n in the first replace without the general + // backslash escaping causes the following Vega error: + // Duplicate scale or projection name: "child__row_my_numbercolumn_my_number_x" + + // Escaping just the backslash without the additional \n escaping causes + // causes an "expression parse error" in Vega and the chart wouldn't render. + + // Escape newline characters + fieldName = fieldName.replace(/\n/g, '\\n'); + // Escape .[]\ + fieldName = fieldName.replace(/([\.|\[|\]|\\])/g, '\\$1'); + + return `${prependString}${fieldName}`; } type VegaValue = Record; diff --git a/x-pack/plugins/ml/public/application/components/validate_job/validate_job_view.js b/x-pack/plugins/ml/public/application/components/validate_job/validate_job_view.js index a959208fe0c31..4701937a272ed 100644 --- a/x-pack/plugins/ml/public/application/components/validate_job/validate_job_view.js +++ b/x-pack/plugins/ml/public/application/components/validate_job/validate_job_view.js @@ -25,9 +25,9 @@ import { } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; +import { VALIDATION_STATUS } from '@kbn/ml-validators'; import { parseMessages } from '../../../../common/constants/messages'; -import { VALIDATION_STATUS } from '../../../../common/constants/validation'; import { Callout, statusToEuiIconType } from '../callout'; import { getMostSevereMessageStatus } from '../../../../common/util/validation_utils'; import { toastNotificationServiceProvider } from '../../services/toast_notification_service'; diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/configuration_step/analysis_fields_table.tsx b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/configuration_step/analysis_fields_table.tsx index 82582e9b913bf..3ddd02d0052f9 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/configuration_step/analysis_fields_table.tsx +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/configuration_step/analysis_fields_table.tsx @@ -21,9 +21,12 @@ import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import type { ES_FIELD_TYPES } from '@kbn/field-types'; import type { FieldSelectionItem } from '@kbn/ml-data-frame-analytics-utils'; -import { useFieldStatsTrigger } from '../../../../../components/field_stats_flyout/use_field_stats_trigger'; -import type { FieldForStats } from '../../../../../components/field_stats_flyout/field_stats_info_button'; -import { FieldStatsInfoButton } from '../../../../../components/field_stats_flyout/field_stats_info_button'; +import { + useFieldStatsTrigger, + FieldStatsInfoButton, + type FieldForStats, +} from '@kbn/ml-field-stats-flyout'; + // @ts-ignore could not find declaration file import { CustomSelectionTable } from '../../../../../components/custom_selection_table'; diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/configuration_step/configuration_step_form.tsx b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/configuration_step/configuration_step_form.tsx index c0920b39d47fc..b2b60e95dceda 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/configuration_step/configuration_step_form.tsx +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/configuration_step/configuration_step_form.tsx @@ -29,12 +29,13 @@ import { } from '@kbn/ml-data-frame-analytics-utils'; import { DataGrid } from '@kbn/ml-data-grid'; import { SEARCH_QUERY_LANGUAGE } from '@kbn/ml-query-utils'; -import { useMlApi, useMlKibana } from '../../../../../contexts/kibana'; import { EuiComboBoxWithFieldStats, FieldStatsFlyoutProvider, -} from '../../../../../components/field_stats_flyout'; -import type { FieldForStats } from '../../../../../components/field_stats_flyout/field_stats_info_button'; + type FieldForStats, +} from '@kbn/ml-field-stats-flyout'; + +import { useMlApi, useMlKibana } from '../../../../../contexts/kibana'; import { useNewJobCapsServiceAnalytics } from '../../../../../services/new_job_capabilities/new_job_capabilities_service_analytics'; import { useDataSource } from '../../../../../contexts/ml'; diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/details_step/details_step_form.tsx b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/details_step/details_step_form.tsx index f43ce7bd2fb9b..7c40b121aa5fa 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/details_step/details_step_form.tsx +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/details_step/details_step_form.tsx @@ -13,10 +13,10 @@ import { i18n } from '@kbn/i18n'; import { extractErrorMessage } from '@kbn/ml-error-utils'; import { CreateDataViewForm } from '@kbn/ml-data-view-utils/components/create_data_view_form_row'; import { DestinationIndexForm } from '@kbn/ml-creation-wizard-utils/components/destination_index_form'; +import { JOB_ID_MAX_LENGTH } from '@kbn/ml-validators'; import { useMlApi, useMlKibana } from '../../../../../contexts/kibana'; import type { CreateAnalyticsStepProps } from '../../../analytics_management/hooks/use_create_analytics_form'; -import { JOB_ID_MAX_LENGTH } from '../../../../../../../common/constants/validation'; import { ContinueButton } from '../continue_button'; import { ANALYTICS_STEPS } from '../../page'; import { useCanCreateDataView } from '../../hooks/use_can_create_data_view'; diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/validation_step/validation_step.tsx b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/validation_step/validation_step.tsx index 81e4f20dac2ba..b080eacc43424 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/validation_step/validation_step.tsx +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/validation_step/validation_step.tsx @@ -9,7 +9,8 @@ import type { FC } from 'react'; import React from 'react'; import { EuiLoadingSpinner, EuiSpacer } from '@elastic/eui'; -import type { CalloutMessage } from '../../../../../../../common/constants/validation'; +import type { CalloutMessage } from '@kbn/ml-validators'; + import { Callout } from '../../../../../components/callout'; import { ANALYTICS_STEPS } from '../../page'; import { ContinueButton } from '../continue_button'; diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/validation_step/validation_step_wrapper.tsx b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/validation_step/validation_step_wrapper.tsx index 3c8cba36458a2..4dbce9dffd632 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/validation_step/validation_step_wrapper.tsx +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/validation_step/validation_step_wrapper.tsx @@ -13,6 +13,8 @@ import { EuiForm } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { extractErrorMessage } from '@kbn/ml-error-utils'; +import type { CalloutMessage, ValidateAnalyticsJobResponse } from '@kbn/ml-validators'; +import { VALIDATION_STATUS } from '@kbn/ml-validators'; import type { CreateAnalyticsStepProps } from '../../../analytics_management/hooks/use_create_analytics_form'; import { ValidationStep } from './validation_step'; @@ -20,11 +22,6 @@ import { ValidationStepDetails } from './validation_step_details'; import { ANALYTICS_STEPS } from '../../page'; import { useMlApi } from '../../../../../contexts/kibana'; import { getJobConfigFromFormState } from '../../../analytics_management/hooks/use_create_analytics_form/state'; -import type { - CalloutMessage, - ValidateAnalyticsJobResponse, -} from '../../../../../../../common/constants/validation'; -import { VALIDATION_STATUS } from '../../../../../../../common/constants/validation'; export interface ValidationSummary { warning: number; diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/expandable_section/expandable_section_results.tsx b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/expandable_section/expandable_section_results.tsx index 212c0fa6d2cf7..cc296a42afbae 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/expandable_section/expandable_section_results.tsx +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/expandable_section/expandable_section_results.tsx @@ -39,6 +39,7 @@ import { import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { SEARCH_QUERY_LANGUAGE } from '@kbn/ml-query-utils'; +import { parseInterval } from '@kbn/ml-parse-interval'; import type { useColorRange } from '../../../../../components/color_range_legend'; import { ColorRangeLegend } from '../../../../../components/color_range_legend'; @@ -51,7 +52,6 @@ import { openCustomUrlWindow, } from '../../../../../util/custom_url_utils'; import { replaceStringTokens } from '../../../../../util/string_utils'; -import { parseInterval } from '../../../../../../../common/util/parse_interval'; import type { ExpandableSectionProps } from '.'; import { ExpandableSection, HEADER_ITEMS_LOADING } from '.'; diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/action_edit/edit_action_flyout.tsx b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/action_edit/edit_action_flyout.tsx index 77aa8b669011c..4922ae35e81d5 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/action_edit/edit_action_flyout.tsx +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/action_edit/edit_action_flyout.tsx @@ -35,11 +35,11 @@ import { type DataFrameAnalyticsConfig, type UpdateDataFrameAnalyticsConfig, } from '@kbn/ml-data-frame-analytics-utils'; +import type { MemoryInputValidatorResult } from '@kbn/ml-validators'; +import { memoryInputValidator } from '@kbn/ml-validators'; import { useMlKibana, useMlApi } from '../../../../../contexts/kibana'; import { useToastNotificationService } from '../../../../../services/toast_notification_service'; -import type { MemoryInputValidatorResult } from '../../../../../../../common/util/validators'; -import { memoryInputValidator } from '../../../../../../../common/util/validators'; import { useRefreshAnalyticsList } from '../../../../common/analytics'; import type { EditAction } from './use_edit_action'; diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/hooks/use_create_analytics_form/reducer.ts b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/hooks/use_create_analytics_form/reducer.ts index 8181b6b6360c4..2fd395a5e20c5 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/hooks/use_create_analytics_form/reducer.ts +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/hooks/use_create_analytics_form/reducer.ts @@ -24,6 +24,14 @@ import { TRAINING_PERCENT_MIN, TRAINING_PERCENT_MAX, } from '@kbn/ml-data-frame-analytics-utils'; +import { + composeValidators, + maxLengthValidator, + memoryInputValidator, + requiredValidator, + JOB_ID_MAX_LENGTH, + ALLOWED_DATA_UNITS, +} from '@kbn/ml-validators'; import { isValidIndexName } from '../../../../../../../common/util/es_utils'; @@ -35,16 +43,6 @@ import { isJobIdValid, validateModelMemoryLimitUnits, } from '../../../../../../../common/util/job_utils'; -import { - composeValidators, - maxLengthValidator, - memoryInputValidator, - requiredValidator, -} from '../../../../../../../common/util/validators'; -import { - JOB_ID_MAX_LENGTH, - ALLOWED_DATA_UNITS, -} from '../../../../../../../common/constants/validation'; import { isAdvancedConfig } from '../../components/action_clone/clone_action_name'; const { collapseLiteralStrings } = XJson; diff --git a/x-pack/plugins/ml/public/application/explorer/explorer_utils.ts b/x-pack/plugins/ml/public/application/explorer/explorer_utils.ts index 90182b07152ad..abe921ee4352e 100644 --- a/x-pack/plugins/ml/public/application/explorer/explorer_utils.ts +++ b/x-pack/plugins/ml/public/application/explorer/explorer_utils.ts @@ -27,6 +27,7 @@ import { import type { InfluencersFilterQuery } from '@kbn/ml-anomaly-utils'; import type { TimeRangeBounds } from '@kbn/ml-time-buckets'; import type { IUiSettingsClient } from '@kbn/core/public'; +import { parseInterval } from '@kbn/ml-parse-interval'; import { ANNOTATIONS_TABLE_DEFAULT_QUERY_SIZE, @@ -39,7 +40,6 @@ import { isModelPlotEnabled, isTimeSeriesViewJob, } from '../../../common/util/job_utils'; -import { parseInterval } from '../../../common/util/parse_interval'; import type { MlJobService } from '../services/job_service'; import type { SwimlaneType } from './explorer_constants'; diff --git a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/edit_job_flyout/tabs/datafeed.js b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/edit_job_flyout/tabs/datafeed.js index c62907052773c..5f6ba8f6c89be 100644 --- a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/edit_job_flyout/tabs/datafeed.js +++ b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/edit_job_flyout/tabs/datafeed.js @@ -17,11 +17,12 @@ import { EuiCallOut, } from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { parseInterval } from '@kbn/ml-parse-interval'; + import { calculateDatafeedFrequencyDefaultSeconds } from '../../../../../../../common/util/job_utils'; import { getNewJobDefaults } from '../../../../../services/ml_server_info'; -import { parseInterval } from '../../../../../../../common/util/parse_interval'; import { MLJobEditor, ML_EDITOR_MODE } from '../../ml_job_editor'; -import { FormattedMessage } from '@kbn/i18n-react'; function getDefaults(bucketSpan, jobDefaults) { const bucketSpanSeconds = bucketSpan !== undefined ? parseInterval(bucketSpan).asSeconds() : ''; diff --git a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/utils.js b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/utils.js index 8e457e8b1e800..57ee1e5f3ef5f 100644 --- a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/utils.js +++ b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/utils.js @@ -6,13 +6,14 @@ */ import { each } from 'lodash'; + import { i18n } from '@kbn/i18n'; +import { parseInterval } from '@kbn/ml-parse-interval'; import { toastNotificationServiceProvider } from '../../../services/toast_notification_service'; import { stringMatch } from '../../../util/string_utils'; import { JOB_STATE, DATAFEED_STATE } from '../../../../../common/constants/states'; import { JOB_ACTION } from '../../../../../common/constants/job_actions'; -import { parseInterval } from '../../../../../common/util/parse_interval'; import { mlCalendarService } from '../../../services/calendar_service'; import { jobCloningService } from '../../../services/job_cloning_service'; import { ML_PAGES } from '../../../../../common/constants/locator'; diff --git a/x-pack/plugins/ml/public/application/jobs/new_job/common/job_creator/job_creator.ts b/x-pack/plugins/ml/public/application/jobs/new_job/common/job_creator/job_creator.ts index 103b789fe66b6..f43fa93368447 100644 --- a/x-pack/plugins/ml/public/application/jobs/new_job/common/job_creator/job_creator.ts +++ b/x-pack/plugins/ml/public/application/jobs/new_job/common/job_creator/job_creator.ts @@ -7,6 +7,7 @@ import { BehaviorSubject } from 'rxjs'; import { cloneDeep } from 'lodash'; + import { ES_FIELD_TYPES } from '@kbn/field-types'; import type { Query } from '@kbn/es-query'; import type { DataView } from '@kbn/data-views-plugin/public'; @@ -22,6 +23,8 @@ import { import type { RuntimeMappings } from '@kbn/ml-runtime-field-utils'; import type { SavedSearch } from '@kbn/saved-search-plugin/public'; import { isPopulatedObject } from '@kbn/ml-is-populated-object'; +import { parseInterval } from '@kbn/ml-parse-interval'; + import { createDatafeedId } from '../../../../../../common/util/job_utils'; import type { MlApi } from '../../../../services/ml_api_service'; import type { IndexPatternTitle } from '../../../../../../common/types/kibana'; @@ -42,7 +45,6 @@ import type { CREATED_BY_LABEL } from '../../../../../../common/constants/new_jo import { JOB_TYPE, SHARED_RESULTS_INDEX_NAME } from '../../../../../../common/constants/new_job'; import { collectAggs } from './util/general'; import { filterRuntimeMappings } from './util/filter_runtime_mappings'; -import { parseInterval } from '../../../../../../common/util/parse_interval'; import type { Calendar } from '../../../../../../common/types/calendars'; import { mlCalendarService } from '../../../../services/calendar_service'; import { getDatafeedAggregations } from '../../../../../../common/util/datafeed_utils'; diff --git a/x-pack/plugins/ml/public/application/jobs/new_job/common/job_creator/single_metric_job_creator.ts b/x-pack/plugins/ml/public/application/jobs/new_job/common/job_creator/single_metric_job_creator.ts index a90cca5153069..29ce6de6e54d7 100644 --- a/x-pack/plugins/ml/public/application/jobs/new_job/common/job_creator/single_metric_job_creator.ts +++ b/x-pack/plugins/ml/public/application/jobs/new_job/common/job_creator/single_metric_job_creator.ts @@ -15,8 +15,9 @@ import { ES_AGGREGATION, } from '@kbn/ml-anomaly-utils'; import type { SavedSearch } from '@kbn/saved-search-plugin/public'; +import { parseInterval } from '@kbn/ml-parse-interval'; + import type { MlApi } from '../../../../services/ml_api_service'; -import { parseInterval } from '../../../../../../common/util/parse_interval'; import { JobCreator } from './job_creator'; import type { Job, diff --git a/x-pack/plugins/ml/public/application/jobs/new_job/common/job_validator/util.ts b/x-pack/plugins/ml/public/application/jobs/new_job/common/job_validator/util.ts index 91de9a04043e3..340ab047d6582 100644 --- a/x-pack/plugins/ml/public/application/jobs/new_job/common/job_validator/util.ts +++ b/x-pack/plugins/ml/public/application/jobs/new_job/common/job_validator/util.ts @@ -5,14 +5,13 @@ * 2.0. */ -import { i18n } from '@kbn/i18n'; import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; + +import { i18n } from '@kbn/i18n'; +import { ALLOWED_DATA_UNITS, JOB_ID_MAX_LENGTH } from '@kbn/ml-validators'; + import type { BasicValidations } from './job_validator'; import type { Job, Datafeed } from '../../../../../../common/types/anomaly_detection_jobs'; -import { - ALLOWED_DATA_UNITS, - JOB_ID_MAX_LENGTH, -} from '../../../../../../common/constants/validation'; import { getNewJobLimits } from '../../../../services/ml_server_info'; import type { ValidationResults } from '../../../../../../common/util/job_utils'; diff --git a/x-pack/plugins/ml/public/application/jobs/new_job/common/results_loader/results_loader.ts b/x-pack/plugins/ml/public/application/jobs/new_job/common/results_loader/results_loader.ts index 0492cb49ebedd..f3d1803415f10 100644 --- a/x-pack/plugins/ml/public/application/jobs/new_job/common/results_loader/results_loader.ts +++ b/x-pack/plugins/ml/public/application/jobs/new_job/common/results_loader/results_loader.ts @@ -10,8 +10,8 @@ import { BehaviorSubject, lastValueFrom } from 'rxjs'; import type { ML_ANOMALY_SEVERITY } from '@kbn/ml-anomaly-utils'; import { getSeverityType, ES_AGGREGATION } from '@kbn/ml-anomaly-utils'; import type { TimeBuckets } from '@kbn/ml-time-buckets'; +import { parseInterval } from '@kbn/ml-parse-interval'; -import { parseInterval } from '../../../../../../common/util/parse_interval'; import { JOB_TYPE } from '../../../../../../common/constants/new_job'; import type { ModelPlotOutputResults } from '../../../../services/results_service'; diff --git a/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/pick_fields_step/components/advanced_detector_modal/advanced_detector_modal.tsx b/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/pick_fields_step/components/advanced_detector_modal/advanced_detector_modal.tsx index fbfaceafde822..667840a6ca486 100644 --- a/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/pick_fields_step/components/advanced_detector_modal/advanced_detector_modal.tsx +++ b/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/pick_fields_step/components/advanced_detector_modal/advanced_detector_modal.tsx @@ -8,6 +8,7 @@ import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import type { FC } from 'react'; import React, { Fragment, useState, useContext, useEffect } from 'react'; + import type { EuiComboBoxOptionOption } from '@elastic/eui'; import { EuiComboBox, @@ -17,13 +18,15 @@ import { EuiHorizontalRule, EuiTextArea, } from '@elastic/eui'; + import { type Field, type Aggregation, EVENT_RATE_FIELD_ID, mlCategory, } from '@kbn/ml-anomaly-utils'; -import { useFieldStatsTrigger } from '../../../../../../../components/field_stats_flyout/use_field_stats_trigger'; +import { useFieldStatsTrigger } from '@kbn/ml-field-stats-flyout'; + import { JobCreatorContext } from '../../../job_creator_context'; import type { AdvancedJobCreator } from '../../../../../common/job_creator'; import { diff --git a/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/pick_fields_step/components/agg_select/agg_select.tsx b/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/pick_fields_step/components/agg_select/agg_select.tsx index 4ac460d997e43..257b075ed4511 100644 --- a/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/pick_fields_step/components/agg_select/agg_select.tsx +++ b/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/pick_fields_step/components/agg_select/agg_select.tsx @@ -11,9 +11,8 @@ import type { EuiComboBoxOptionOption } from '@elastic/eui'; import { EuiComboBox, EuiFormRow } from '@elastic/eui'; import type { Field, Aggregation, AggFieldPair } from '@kbn/ml-anomaly-utils'; import { EVENT_RATE_FIELD_ID } from '@kbn/ml-anomaly-utils'; -import { FieldStatsInfoButton } from '../../../../../../../components/field_stats_flyout/field_stats_info_button'; +import { useFieldStatsTrigger, FieldStatsInfoButton } from '@kbn/ml-field-stats-flyout'; import { JobCreatorContext } from '../../../job_creator_context'; -import { useFieldStatsTrigger } from '../../../../../../../components/field_stats_flyout/use_field_stats_trigger'; // The display label used for an aggregation e.g. sum(bytes). export type Label = string; diff --git a/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/pick_fields_step/components/categorization_field/categorization_field_select.tsx b/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/pick_fields_step/components/categorization_field/categorization_field_select.tsx index 8ecdd28113e3e..b2eb7a08d93be 100644 --- a/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/pick_fields_step/components/categorization_field/categorization_field_select.tsx +++ b/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/pick_fields_step/components/categorization_field/categorization_field_select.tsx @@ -11,7 +11,8 @@ import type { EuiComboBoxOptionOption } from '@elastic/eui'; import { EuiComboBox } from '@elastic/eui'; import type { Field } from '@kbn/ml-anomaly-utils'; -import { useFieldStatsTrigger } from '../../../../../../../components/field_stats_flyout/use_field_stats_trigger'; +import { useFieldStatsTrigger } from '@kbn/ml-field-stats-flyout'; + import { JobCreatorContext } from '../../../job_creator_context'; import { createFieldOptions } from '../../../../../common/job_creator/util/general'; diff --git a/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/pick_fields_step/components/categorization_partition_field/categorization_per_partition_input.tsx b/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/pick_fields_step/components/categorization_partition_field/categorization_per_partition_input.tsx index 513522c50bee3..237688b215511 100644 --- a/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/pick_fields_step/components/categorization_partition_field/categorization_per_partition_input.tsx +++ b/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/pick_fields_step/components/categorization_partition_field/categorization_per_partition_input.tsx @@ -11,7 +11,7 @@ import type { EuiComboBoxOptionOption } from '@elastic/eui'; import { EuiComboBox } from '@elastic/eui'; import type { Field } from '@kbn/ml-anomaly-utils'; -import { useFieldStatsTrigger } from '../../../../../../../components/field_stats_flyout/use_field_stats_trigger'; +import { useFieldStatsTrigger } from '@kbn/ml-field-stats-flyout'; import { JobCreatorContext } from '../../../job_creator_context'; import { createFieldOptions } from '../../../../../common/job_creator/util/general'; diff --git a/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/pick_fields_step/components/geo_field/geo_field_select.tsx b/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/pick_fields_step/components/geo_field/geo_field_select.tsx index a22b04ea7f4c9..f40e28f2fea28 100644 --- a/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/pick_fields_step/components/geo_field/geo_field_select.tsx +++ b/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/pick_fields_step/components/geo_field/geo_field_select.tsx @@ -10,7 +10,7 @@ import React, { useCallback, useMemo } from 'react'; import type { EuiComboBoxOptionOption } from '@elastic/eui'; import { EuiComboBox } from '@elastic/eui'; import type { Field } from '@kbn/ml-anomaly-utils'; -import { useFieldStatsTrigger } from '../../../../../../../components/field_stats_flyout/use_field_stats_trigger'; +import { useFieldStatsTrigger } from '@kbn/ml-field-stats-flyout'; interface DropDownLabel { label: string; diff --git a/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/pick_fields_step/components/influencers/influencers_select.tsx b/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/pick_fields_step/components/influencers/influencers_select.tsx index 2894072bacce5..4c0946657d8e6 100644 --- a/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/pick_fields_step/components/influencers/influencers_select.tsx +++ b/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/pick_fields_step/components/influencers/influencers_select.tsx @@ -11,7 +11,8 @@ import type { EuiComboBoxOptionOption } from '@elastic/eui'; import { EuiComboBox } from '@elastic/eui'; import type { Field } from '@kbn/ml-anomaly-utils'; -import { useFieldStatsTrigger } from '../../../../../../../components/field_stats_flyout/use_field_stats_trigger'; +import { useFieldStatsTrigger } from '@kbn/ml-field-stats-flyout'; + import { JobCreatorContext } from '../../../job_creator_context'; import { createFieldOptions, diff --git a/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/pick_fields_step/components/rare_field/rare_field_select.tsx b/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/pick_fields_step/components/rare_field/rare_field_select.tsx index 76d9f63aef828..a834a0d3bbdd4 100644 --- a/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/pick_fields_step/components/rare_field/rare_field_select.tsx +++ b/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/pick_fields_step/components/rare_field/rare_field_select.tsx @@ -10,7 +10,7 @@ import React from 'react'; import type { EuiComboBoxOptionOption } from '@elastic/eui'; import { EuiComboBox } from '@elastic/eui'; import type { Field, SplitField } from '@kbn/ml-anomaly-utils'; -import { useFieldStatsTrigger } from '../../../../../../../components/field_stats_flyout/use_field_stats_trigger'; +import { useFieldStatsTrigger } from '@kbn/ml-field-stats-flyout'; interface DropDownLabel { label: string; diff --git a/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/pick_fields_step/components/split_field_select/split_field_select.tsx b/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/pick_fields_step/components/split_field_select/split_field_select.tsx index 20cf8bbc0a195..d621e85b3f56a 100644 --- a/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/pick_fields_step/components/split_field_select/split_field_select.tsx +++ b/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/pick_fields_step/components/split_field_select/split_field_select.tsx @@ -11,7 +11,7 @@ import type { EuiComboBoxOptionOption } from '@elastic/eui'; import { EuiComboBox } from '@elastic/eui'; import type { Field, SplitField } from '@kbn/ml-anomaly-utils'; -import { useFieldStatsTrigger } from '../../../../../../../components/field_stats_flyout/use_field_stats_trigger'; +import { useFieldStatsTrigger } from '@kbn/ml-field-stats-flyout'; interface DropDownLabel { label: string; diff --git a/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/pick_fields_step/components/summary_count_field/summary_count_field_select.tsx b/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/pick_fields_step/components/summary_count_field/summary_count_field_select.tsx index 9a7826533f082..8fc91b74d1a2c 100644 --- a/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/pick_fields_step/components/summary_count_field/summary_count_field_select.tsx +++ b/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/pick_fields_step/components/summary_count_field/summary_count_field_select.tsx @@ -11,7 +11,8 @@ import type { EuiComboBoxOptionOption } from '@elastic/eui'; import { EuiComboBox } from '@elastic/eui'; import type { Field } from '@kbn/ml-anomaly-utils'; -import { useFieldStatsTrigger } from '../../../../../../../components/field_stats_flyout/use_field_stats_trigger'; +import { useFieldStatsTrigger } from '@kbn/ml-field-stats-flyout'; + import { JobCreatorContext } from '../../../job_creator_context'; import { createFieldOptions, diff --git a/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/pick_fields_step/pick_fields.tsx b/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/pick_fields_step/pick_fields.tsx index 76e35e1d5847d..5f85554470258 100644 --- a/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/pick_fields_step/pick_fields.tsx +++ b/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/pick_fields_step/pick_fields.tsx @@ -8,7 +8,8 @@ import type { FC } from 'react'; import React, { Fragment, useContext, useEffect, useState } from 'react'; -import { useFieldStatsFlyoutContext } from '../../../../../components/field_stats_flyout'; +import { useFieldStatsFlyoutContext } from '@kbn/ml-field-stats-flyout'; + import { JobCreatorContext } from '../job_creator_context'; import { WizardNav } from '../wizard_nav'; import type { StepProps } from '../step_types'; diff --git a/x-pack/plugins/ml/public/application/jobs/new_job/pages/new_job/wizard_steps.tsx b/x-pack/plugins/ml/public/application/jobs/new_job/pages/new_job/wizard_steps.tsx index e81650e17c646..6c4600be5d25e 100644 --- a/x-pack/plugins/ml/public/application/jobs/new_job/pages/new_job/wizard_steps.tsx +++ b/x-pack/plugins/ml/public/application/jobs/new_job/pages/new_job/wizard_steps.tsx @@ -13,9 +13,9 @@ import { FormattedMessage } from '@kbn/i18n-react'; import { EuiSpacer, EuiTitle, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import type { FieldStatsServices } from '@kbn/unified-field-list/src/components/field_stats'; +import { FieldStatsFlyoutProvider } from '@kbn/ml-field-stats-flyout'; import { JobCreatorContext } from '../components/job_creator_context'; import { useMlKibana } from '../../../../contexts/kibana'; -import { FieldStatsFlyoutProvider } from '../../../../components/field_stats_flyout'; import { WIZARD_STEPS } from '../components/step_types'; import { TimeRangeStep } from '../components/time_range_step'; diff --git a/x-pack/plugins/ml/public/application/jobs/new_job/recognize/components/edit_job.tsx b/x-pack/plugins/ml/public/application/jobs/new_job/recognize/components/edit_job.tsx index ef036b2abb05f..68093350c1de8 100644 --- a/x-pack/plugins/ml/public/application/jobs/new_job/recognize/components/edit_job.tsx +++ b/x-pack/plugins/ml/public/application/jobs/new_job/recognize/components/edit_job.tsx @@ -7,6 +7,7 @@ import type { FC } from 'react'; import React, { useEffect, useState } from 'react'; + import { EuiButton, EuiButtonEmpty, @@ -21,12 +22,14 @@ import { EuiSpacer, EuiTitle, } from '@elastic/eui'; + import { FormattedMessage } from '@kbn/i18n-react'; +import { composeValidators, maxLengthValidator } from '@kbn/ml-validators'; +import { JOB_ID_MAX_LENGTH } from '@kbn/ml-validators'; + import type { ModuleJobUI } from '../page'; import { usePartialState } from '../../../../components/custom_hooks'; -import { composeValidators, maxLengthValidator } from '../../../../../../common/util/validators'; import { isJobIdValid } from '../../../../../../common/util/job_utils'; -import { JOB_ID_MAX_LENGTH } from '../../../../../../common/constants/validation'; import { JobGroupsInput } from '../../common/components'; import type { JobOverride } from '../../../../../../common/types/modules'; diff --git a/x-pack/plugins/ml/public/application/jobs/new_job/recognize/components/job_settings_form.tsx b/x-pack/plugins/ml/public/application/jobs/new_job/recognize/components/job_settings_form.tsx index a13664e663e5a..db9d8993f0430 100644 --- a/x-pack/plugins/ml/public/application/jobs/new_job/recognize/components/job_settings_form.tsx +++ b/x-pack/plugins/ml/public/application/jobs/new_job/recognize/components/job_settings_form.tsx @@ -7,6 +7,7 @@ import type { FC } from 'react'; import React, { useEffect, useState, useCallback, useMemo } from 'react'; + import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import { @@ -21,15 +22,16 @@ import { EuiTextAlign, } from '@elastic/eui'; import { getTimeFilterRange, useTimefilter } from '@kbn/ml-date-picker'; -import { useDataSource } from '../../../../contexts/ml/data_source_context'; -import type { ModuleJobUI } from '../page'; -import { SAVE_STATE } from '../page'; import { composeValidators, maxLengthValidator, patternValidator, -} from '../../../../../../common/util/validators'; -import { JOB_ID_MAX_LENGTH } from '../../../../../../common/constants/validation'; + JOB_ID_MAX_LENGTH, +} from '@kbn/ml-validators'; + +import { useDataSource } from '../../../../contexts/ml/data_source_context'; +import type { ModuleJobUI } from '../page'; +import { SAVE_STATE } from '../page'; import type { TimeRange } from '../../common/components'; import { TimeRangePicker } from '../../common/components'; diff --git a/x-pack/plugins/ml/public/application/jobs/new_job/utils/new_job_utils.ts b/x-pack/plugins/ml/public/application/jobs/new_job/utils/new_job_utils.ts index 531b4ad4d0ac4..e96643c7ba6c1 100644 --- a/x-pack/plugins/ml/public/application/jobs/new_job/utils/new_job_utils.ts +++ b/x-pack/plugins/ml/public/application/jobs/new_job/utils/new_job_utils.ts @@ -18,28 +18,18 @@ import type { Filter, Query, DataViewBase } from '@kbn/es-query'; import type { IUiSettingsClient } from '@kbn/core/public'; import { getEsQueryConfig } from '@kbn/data-plugin/public'; import type { SavedSearch } from '@kbn/saved-search-plugin/public'; -import { SEARCH_QUERY_LANGUAGE } from '@kbn/ml-query-utils'; +import { getDefaultDSLQuery, SEARCH_QUERY_LANGUAGE } from '@kbn/ml-query-utils'; import { getQueryFromSavedSearchObject } from '../../../util/index_utils'; // Provider for creating the items used for searching and job creation. -const DEFAULT_DSL_QUERY: estypes.QueryDslQueryContainer = { - bool: { - must: [ - { - match_all: {}, - }, - ], - }, -}; - export const DEFAULT_QUERY: Query = { query: '', language: 'lucene', }; export function getDefaultDatafeedQuery() { - return cloneDeep(DEFAULT_DSL_QUERY); + return getDefaultDSLQuery(); } export function getDefaultQuery() { diff --git a/x-pack/plugins/ml/public/application/model_management/deployment_setup.tsx b/x-pack/plugins/ml/public/application/model_management/deployment_setup.tsx index 96152e6726ba8..c62a1122c2d0f 100644 --- a/x-pack/plugins/ml/public/application/model_management/deployment_setup.tsx +++ b/x-pack/plugins/ml/public/application/model_management/deployment_setup.tsx @@ -32,12 +32,8 @@ import type { CoreStart, OverlayStart } from '@kbn/core/public'; import { css } from '@emotion/react'; import { numberValidator } from '@kbn/ml-agg-utils'; import { toMountPoint } from '@kbn/react-kibana-mount'; +import { composeValidators, dictionaryValidator, requiredValidator } from '@kbn/ml-validators'; import { getNewJobLimits, isCloudTrial } from '../services/ml_server_info'; -import { - composeValidators, - dictionaryValidator, - requiredValidator, -} from '../../../common/util/validators'; import type { ModelItem } from './models_list'; import { useEnabledFeatures } from '../contexts/ml'; diff --git a/x-pack/plugins/ml/public/application/services/job_service.js b/x-pack/plugins/ml/public/application/services/job_service.js index 936317675fbbb..3c896e5d00a88 100644 --- a/x-pack/plugins/ml/public/application/services/job_service.js +++ b/x-pack/plugins/ml/public/application/services/job_service.js @@ -7,7 +7,8 @@ import { cloneDeep, each, find, get } from 'lodash'; -import { parseInterval } from '../../../common/util/parse_interval'; +import { parseInterval } from '@kbn/ml-parse-interval'; + import { createDatafeedId } from '../../../common/util/job_utils'; import { isWebUrl } from '../util/url_utils'; diff --git a/x-pack/plugins/ml/public/application/services/ml_api_service/data_frame_analytics.ts b/x-pack/plugins/ml/public/application/services/ml_api_service/data_frame_analytics.ts index e9b2e914fabe3..37709b7474978 100644 --- a/x-pack/plugins/ml/public/application/services/ml_api_service/data_frame_analytics.ts +++ b/x-pack/plugins/ml/public/application/services/ml_api_service/data_frame_analytics.ts @@ -16,15 +16,16 @@ import type { DeleteDataFrameAnalyticsWithIndexStatus, UpdateDataFrameAnalyticsConfig, } from '@kbn/ml-data-frame-analytics-utils'; +import type { ValidateAnalyticsJobResponse } from '@kbn/ml-validators'; import { ML_INTERNAL_BASE_PATH } from '../../../../common/constants/app'; -import type { HttpService } from '../http_service'; -import { useMlKibana } from '../../contexts/kibana'; - -import type { ValidateAnalyticsJobResponse } from '../../../../common/constants/validation'; import type { JobMessage } from '../../../../common/types/audit_message'; import type { PutDataFrameAnalyticsResponseSchema } from '../../../../server/routes/schemas/data_frame_analytics_schema'; +import { useMlKibana } from '../../contexts/kibana'; + +import type { HttpService } from '../http_service'; + export interface GetDataFrameAnalyticsStatsResponseOk { node_failures?: object; count: number; diff --git a/x-pack/plugins/ml/public/application/timeseriesexplorer/components/forecasting_modal/forecasting_modal.js b/x-pack/plugins/ml/public/application/timeseriesexplorer/components/forecasting_modal/forecasting_modal.js index fe6b132635301..5ac0dd68700d6 100644 --- a/x-pack/plugins/ml/public/application/timeseriesexplorer/components/forecasting_modal/forecasting_modal.js +++ b/x-pack/plugins/ml/public/application/timeseriesexplorer/components/forecasting_modal/forecasting_modal.js @@ -19,11 +19,11 @@ import { EuiToolTip } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { context } from '@kbn/kibana-react-plugin/public'; import { extractErrorMessage } from '@kbn/ml-error-utils'; +import { parseInterval } from '@kbn/ml-parse-interval'; import { FORECAST_REQUEST_STATE, JOB_STATE } from '../../../../../common/constants/states'; import { MESSAGE_LEVEL } from '../../../../../common/constants/message_levels'; import { isJobVersionGte } from '../../../../../common/util/job_utils'; -import { parseInterval } from '../../../../../common/util/parse_interval'; import { Modal } from './modal'; import { PROGRESS_STATES } from './progress_states'; import { forecastServiceFactory } from '../../../services/forecast_service'; diff --git a/x-pack/plugins/ml/public/application/util/custom_url_utils.ts b/x-pack/plugins/ml/public/application/util/custom_url_utils.ts index 8e9279688e91f..b71c78d466eb3 100644 --- a/x-pack/plugins/ml/public/application/util/custom_url_utils.ts +++ b/x-pack/plugins/ml/public/application/util/custom_url_utils.ts @@ -18,7 +18,8 @@ import type { MlCustomUrlAnomalyRecordDoc, } from '@kbn/ml-anomaly-utils'; import type { DataGridItem } from '@kbn/ml-data-grid'; -import { parseInterval } from '../../../common/util/parse_interval'; +import { parseInterval } from '@kbn/ml-parse-interval'; + import { escapeForElasticsearchQuery, replaceStringTokens } from './string_utils'; // Value of custom_url time_range property indicating drilldown time range is calculated automatically diff --git a/x-pack/plugins/ml/public/application/util/time_series_explorer_service.ts b/x-pack/plugins/ml/public/application/util/time_series_explorer_service.ts index c0c7995f1b310..a89cac8269b6f 100644 --- a/x-pack/plugins/ml/public/application/util/time_series_explorer_service.ts +++ b/x-pack/plugins/ml/public/application/util/time_series_explorer_service.ts @@ -6,18 +6,19 @@ */ import { useMemo } from 'react'; +import moment from 'moment'; +import type { Observable } from 'rxjs'; +import { forkJoin, of, catchError, map } from 'rxjs'; +import { each, get } from 'lodash'; + import type { IUiSettingsClient } from '@kbn/core/public'; import { aggregationTypeTransform } from '@kbn/ml-anomaly-utils'; import { isMultiBucketAnomaly, ML_JOB_AGGREGATION } from '@kbn/ml-anomaly-utils'; import { extractErrorMessage } from '@kbn/ml-error-utils'; -import moment from 'moment'; -import type { Observable } from 'rxjs'; -import { forkJoin, of } from 'rxjs'; -import { each, get } from 'lodash'; -import { catchError, map } from 'rxjs'; import { type MlAnomalyRecordDoc } from '@kbn/ml-anomaly-utils'; import type { TimeRangeBounds, TimeBucketsInterval } from '@kbn/ml-time-buckets'; -import { parseInterval } from '../../../common/util/parse_interval'; +import { parseInterval } from '@kbn/ml-parse-interval'; + import type { GetAnnotationsResponse } from '../../../common/types/annotations'; import { mlFunctionToESAggregation } from '../../../common/util/job_utils'; import { ANNOTATIONS_TABLE_DEFAULT_QUERY_SIZE } from '../../../common/constants/search'; diff --git a/x-pack/plugins/ml/public/embeddables/common/get_jobs_observable.ts b/x-pack/plugins/ml/public/embeddables/common/get_jobs_observable.ts index e1fc6a6d178c1..d050b40458519 100644 --- a/x-pack/plugins/ml/public/embeddables/common/get_jobs_observable.ts +++ b/x-pack/plugins/ml/public/embeddables/common/get_jobs_observable.ts @@ -8,8 +8,10 @@ import { isEqual } from 'lodash'; import type { Observable } from 'rxjs'; import { catchError, distinctUntilChanged, EMPTY, map, switchMap } from 'rxjs'; + +import { parseInterval } from '@kbn/ml-parse-interval'; + import type { JobId } from '../../../common/types/anomaly_detection_jobs'; -import { parseInterval } from '../../../common/util/parse_interval'; import type { ExplorerJob } from '../../application/explorer/explorer_utils'; import type { AnomalyDetectorService } from '../../application/services/anomaly_detector_service'; diff --git a/x-pack/plugins/ml/public/embeddables/job_creation/common/job_details.tsx b/x-pack/plugins/ml/public/embeddables/job_creation/common/job_details.tsx index 3bfa1a0caf799..0e843da22a74b 100644 --- a/x-pack/plugins/ml/public/embeddables/job_creation/common/job_details.tsx +++ b/x-pack/plugins/ml/public/embeddables/job_creation/common/job_details.tsx @@ -31,12 +31,13 @@ import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import { extractErrorMessage } from '@kbn/ml-error-utils'; import type { TimeRange } from '@kbn/es-query'; +import { JOB_ID_MAX_LENGTH } from '@kbn/ml-validators'; + import type { QuickLensJobCreator } from '../../../application/jobs/new_job/job_from_lens'; import type { LayerResult } from '../../../application/jobs/new_job/job_from_lens'; import type { CreateState } from '../../../application/jobs/new_job/job_from_dashboard'; import { JOB_TYPE, DEFAULT_BUCKET_SPAN } from '../../../../common/constants/new_job'; import { basicJobValidation } from '../../../../common/util/job_utils'; -import { JOB_ID_MAX_LENGTH } from '../../../../common/constants/validation'; import { invalidTimeIntervalMessage } from '../../../application/jobs/new_job/common/job_validator/util'; import { ML_APP_LOCATOR, ML_PAGES } from '../../../../common/constants/locator'; import { useMlFromLensKibanaContext } from './context'; diff --git a/x-pack/plugins/ml/public/index.ts b/x-pack/plugins/ml/public/index.ts index bf293e2228570..d18b4f60a085f 100755 --- a/x-pack/plugins/ml/public/index.ts +++ b/x-pack/plugins/ml/public/index.ts @@ -41,15 +41,5 @@ export { CONTROLLED_BY_SWIM_LANE_FILTER } from './ui_actions/constants'; export type { MlLocator } from './locator'; export { useMlHref, ML_PAGES, MlLocatorDefinition } from './locator'; -// Bundled shared exports -// Exported this way so the code doesn't end up in ML's page load bundle -export const getMlSharedImports = async () => { - return await import('./shared'); -}; - -// Helper to get Type returned by getMlSharedImports. -type AwaitReturnType = T extends PromiseLike ? U : T; -export type GetMlSharedImportsReturnType = AwaitReturnType>; - export { MLJobsAwaitingNodeWarning } from './application/components/jobs_awaiting_node_warning/new_job_awaiting_node_shared'; export { MlNodeAvailableWarningShared } from './application/components/node_available_warning'; diff --git a/x-pack/plugins/ml/public/shared.ts b/x-pack/plugins/ml/public/shared.ts deleted file mode 100644 index fec15f3181a84..0000000000000 --- a/x-pack/plugins/ml/public/shared.ts +++ /dev/null @@ -1,11 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -export { FieldStatsInfoButton } from './application/components/field_stats_flyout/field_stats_info_button'; -export { useFieldStatsTrigger } from './application/components/field_stats_flyout/use_field_stats_trigger'; -export { FieldStatsFlyoutProvider } from './application/components/field_stats_flyout/field_stats_flyout_provider'; -export { useFieldStatsFlyoutContext } from './application/components/field_stats_flyout/use_field_stats_flytout_context'; diff --git a/x-pack/plugins/ml/server/lib/alerts/jobs_health_service.ts b/x-pack/plugins/ml/server/lib/alerts/jobs_health_service.ts index 5e79e0f460b73..1e60dc1aeb3cf 100644 --- a/x-pack/plugins/ml/server/lib/alerts/jobs_health_service.ts +++ b/x-pack/plugins/ml/server/lib/alerts/jobs_health_service.ts @@ -6,11 +6,14 @@ */ import { groupBy, keyBy, memoize, partition } from 'lodash'; + import type { KibanaRequest, Logger, SavedObjectsClientContract } from '@kbn/core/server'; import { i18n } from '@kbn/i18n'; import type { MlJob } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { isDefined } from '@kbn/ml-is-defined'; import { ALERT_REASON } from '@kbn/rule-data-utils'; +import { parseInterval } from '@kbn/ml-parse-interval'; + import type { MlClient } from '../ml_client'; import type { JobSelection } from '../../routes/schemas/alerting_schema'; import { datafeedsProvider, type DatafeedsService } from '../../models/job_service/datafeeds'; @@ -39,7 +42,6 @@ import { } from '../../../common/util/alerts'; import type { AnnotationService } from '../../models/annotation_service/annotation'; import { annotationServiceProvider } from '../../models/annotation_service'; -import { parseInterval } from '../../../common/util/parse_interval'; import { jobAuditMessagesProvider, type JobAuditMessagesService, diff --git a/x-pack/plugins/ml/server/models/data_frame_analytics/validation.ts b/x-pack/plugins/ml/server/models/data_frame_analytics/validation.ts index d82b52920dbc6..515de87e79c56 100644 --- a/x-pack/plugins/ml/server/models/data_frame_analytics/validation.ts +++ b/x-pack/plugins/ml/server/models/data_frame_analytics/validation.ts @@ -27,7 +27,7 @@ import { TRAINING_DOCS_LOWER, TRAINING_DOCS_UPPER, VALIDATION_STATUS, -} from '../../../common/constants/validation'; +} from '@kbn/ml-validators'; interface MissingAgg { [key: string]: { diff --git a/x-pack/plugins/ml/server/models/fields_service/fields_service.ts b/x-pack/plugins/ml/server/models/fields_service/fields_service.ts index a7e1812888c2f..95e97ef01e3b3 100644 --- a/x-pack/plugins/ml/server/models/fields_service/fields_service.ts +++ b/x-pack/plugins/ml/server/models/fields_service/fields_service.ts @@ -5,14 +5,16 @@ * 2.0. */ -import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import Boom from '@hapi/boom'; -import type { IScopedClusterClient } from '@kbn/core/server'; import { duration } from 'moment'; + +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import type { IScopedClusterClient } from '@kbn/core/server'; import type { AggCardinality } from '@kbn/ml-agg-utils'; import { isPopulatedObject } from '@kbn/ml-is-populated-object'; import type { RuntimeMappings } from '@kbn/ml-runtime-field-utils'; -import { parseInterval } from '../../../common/util/parse_interval'; +import { parseInterval } from '@kbn/ml-parse-interval'; + import { initCardinalityFieldsCache } from './fields_aggs_cache'; import { isValidAggregationField } from '../../../common/util/validation_utils'; import { getDatafeedAggregations } from '../../../common/util/datafeed_utils'; diff --git a/x-pack/plugins/ml/server/models/job_service/jobs.ts b/x-pack/plugins/ml/server/models/job_service/jobs.ts index 172d5d1b7e582..9c4ea6b1d3307 100644 --- a/x-pack/plugins/ml/server/models/job_service/jobs.ts +++ b/x-pack/plugins/ml/server/models/job_service/jobs.ts @@ -7,9 +7,12 @@ import { uniq } from 'lodash'; import Boom from '@hapi/boom'; + import type { IScopedClusterClient } from '@kbn/core/server'; import type { RulesClient } from '@kbn/alerting-plugin/server'; import { isPopulatedObject } from '@kbn/ml-is-populated-object'; +import { parseInterval } from '@kbn/ml-parse-interval'; + import { getSingleMetricViewerJobErrorMessage, parseTimeIntervalForJob, @@ -52,7 +55,6 @@ import type { MlClient } from '../../lib/ml_client'; import { ML_ALERT_TYPES } from '../../../common/constants/alerts'; import type { MlAnomalyDetectionAlertParams } from '../../routes/schemas/alerting_schema'; import type { AuthorizationHeader } from '../../lib/request_authorization'; -import { parseInterval } from '../../../common/util/parse_interval'; interface Results { [id: string]: { diff --git a/x-pack/plugins/ml/server/models/job_validation/job_validation.ts b/x-pack/plugins/ml/server/models/job_validation/job_validation.ts index da751c9d33be4..fff24e7730f18 100644 --- a/x-pack/plugins/ml/server/models/job_validation/job_validation.ts +++ b/x-pack/plugins/ml/server/models/job_validation/job_validation.ts @@ -6,12 +6,14 @@ */ import Boom from '@hapi/boom'; + import type { IScopedClusterClient } from '@kbn/core/server'; import type { TypeOf } from '@kbn/config-schema'; +import { VALIDATION_STATUS } from '@kbn/ml-validators'; + import { fieldsServiceProvider } from '../fields_service'; import type { MessageId, JobValidationMessage } from '../../../common/constants/messages'; import { getMessages } from '../../../common/constants/messages'; -import { VALIDATION_STATUS } from '../../../common/constants/validation'; import { basicJobValidation, uniqWithIsEqual } from '../../../common/util/job_utils'; import { validateBucketSpan } from './validate_bucket_span'; diff --git a/x-pack/plugins/ml/server/models/job_validation/validate_bucket_span.js b/x-pack/plugins/ml/server/models/job_validation/validate_bucket_span.js index 75b1b98213036..bd3ab7c7e8769 100644 --- a/x-pack/plugins/ml/server/models/job_validation/validate_bucket_span.js +++ b/x-pack/plugins/ml/server/models/job_validation/validate_bucket_span.js @@ -5,9 +5,10 @@ * 2.0. */ +import { SKIP_BUCKET_SPAN_ESTIMATION } from '@kbn/ml-validators'; + import { estimateBucketSpanFactory } from '../bucket_span_estimator'; import { mlFunctionToESAggregation, parseTimeIntervalForJob } from '../../../common/util/job_utils'; -import { SKIP_BUCKET_SPAN_ESTIMATION } from '../../../common/constants/validation'; import { validateJobObject } from './validate_job_object'; diff --git a/x-pack/plugins/ml/server/models/job_validation/validate_bucket_span.test.ts b/x-pack/plugins/ml/server/models/job_validation/validate_bucket_span.test.ts index b660e6f8040c0..c8827be8bad2c 100644 --- a/x-pack/plugins/ml/server/models/job_validation/validate_bucket_span.test.ts +++ b/x-pack/plugins/ml/server/models/job_validation/validate_bucket_span.test.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { SKIP_BUCKET_SPAN_ESTIMATION } from '../../../common/constants/validation'; +import { SKIP_BUCKET_SPAN_ESTIMATION } from '@kbn/ml-validators'; import type { JobValidationMessage } from '../../../common/constants/messages'; // @ts-ignore diff --git a/x-pack/plugins/ml/server/models/job_validation/validate_model_memory_limit.ts b/x-pack/plugins/ml/server/models/job_validation/validate_model_memory_limit.ts index c22c514db73d6..85ce1cd8d3427 100644 --- a/x-pack/plugins/ml/server/models/job_validation/validate_model_memory_limit.ts +++ b/x-pack/plugins/ml/server/models/job_validation/validate_model_memory_limit.ts @@ -6,11 +6,13 @@ */ import numeral from '@elastic/numeral'; + import type { IScopedClusterClient } from '@kbn/core/server'; +import { ALLOWED_DATA_UNITS } from '@kbn/ml-validators'; + import type { CombinedJob } from '../../../common/types/anomaly_detection_jobs'; import { validateJobObject } from './validate_job_object'; import { calculateModelMemoryLimitProvider } from '../calculate_model_memory_limit'; -import { ALLOWED_DATA_UNITS } from '../../../common/constants/validation'; import type { MlClient } from '../../lib/ml_client'; // The minimum value the backend expects is 1MByte diff --git a/x-pack/plugins/ml/server/models/job_validation/validate_time_range.ts b/x-pack/plugins/ml/server/models/job_validation/validate_time_range.ts index 0c6af17a4a069..de9f624485bb7 100644 --- a/x-pack/plugins/ml/server/models/job_validation/validate_time_range.ts +++ b/x-pack/plugins/ml/server/models/job_validation/validate_time_range.ts @@ -7,7 +7,8 @@ import type { IScopedClusterClient } from '@kbn/core/server'; import { ES_FIELD_TYPES } from '@kbn/field-types'; -import { parseInterval } from '../../../common/util/parse_interval'; +import { parseInterval } from '@kbn/ml-parse-interval'; + import type { CombinedJob } from '../../../common/types/anomaly_detection_jobs'; import { validateJobObject } from './validate_job_object'; diff --git a/x-pack/plugins/ml/server/models/results_service/anomaly_charts.ts b/x-pack/plugins/ml/server/models/results_service/anomaly_charts.ts index 7e551b0624261..1690e2db74164 100644 --- a/x-pack/plugins/ml/server/models/results_service/anomaly_charts.ts +++ b/x-pack/plugins/ml/server/models/results_service/anomaly_charts.ts @@ -26,6 +26,8 @@ import { ML_JOB_AGGREGATION, } from '@kbn/ml-anomaly-utils'; import { isRuntimeMappings } from '@kbn/ml-runtime-field-utils'; +import { parseInterval } from '@kbn/ml-parse-interval'; + import type { MlClient } from '../../lib/ml_client'; import type { MetricData, @@ -48,7 +50,6 @@ import { } from '../../../common/util/job_utils'; import type { CriteriaField } from './results_service'; import type { CombinedJob, Datafeed } from '../../shared'; -import { parseInterval } from '../../../common/util/parse_interval'; import { getDatafeedAggregations } from '../../../common/util/datafeed_utils'; import { findAggField } from '../../../common/util/validation_utils'; diff --git a/x-pack/plugins/ml/tsconfig.json b/x-pack/plugins/ml/tsconfig.json index 2f980378de923..b625562ab2674 100644 --- a/x-pack/plugins/ml/tsconfig.json +++ b/x-pack/plugins/ml/tsconfig.json @@ -37,7 +37,6 @@ "@kbn/data-plugin", "@kbn/data-views-plugin", "@kbn/data-visualizer-plugin", - "@kbn/datemath", "@kbn/embeddable-plugin", "@kbn/es-query", "@kbn/es-types", @@ -70,7 +69,6 @@ "@kbn/ml-trained-models-utils", "@kbn/ml-url-state", "@kbn/monaco", - "@kbn/react-field", "@kbn/rison", "@kbn/saved-objects-finder-plugin", "@kbn/saved-objects-management-plugin", @@ -130,6 +128,9 @@ "@kbn/esql-utils", "@kbn/core-lifecycle-browser", "@kbn/observability-ai-assistant-plugin", - "@kbn/json-schemas" + "@kbn/json-schemas", + "@kbn/ml-field-stats-flyout", + "@kbn/ml-parse-interval", + "@kbn/ml-validators" ] } diff --git a/x-pack/plugins/observability_solution/apm/public/components/app/service_groups/service_groups_list/index.tsx b/x-pack/plugins/observability_solution/apm/public/components/app/service_groups/service_groups_list/index.tsx index 00197ab761044..4381523417b25 100644 --- a/x-pack/plugins/observability_solution/apm/public/components/app/service_groups/service_groups_list/index.tsx +++ b/x-pack/plugins/observability_solution/apm/public/components/app/service_groups/service_groups_list/index.tsx @@ -98,6 +98,7 @@ export function ServiceGroupsList() { clear={!isEmpty(filter) ? { onClick: clearFilterCallback } : undefined} > { expect(services.alertsClient.setAlertData).toHaveBeenCalledWith({ context: { - alertDetailsUrl: 'mockedAlertsLocator > getLocation', + alertDetailsUrl: 'http://localhost:5601/eyr/app/observability/alerts/test-uuid', environment: 'development', reason: 'critical latency anomaly with a score of 80, was detected in the last 5 mins for foo.', diff --git a/x-pack/plugins/observability_solution/apm/server/routes/alerts/rule_types/anomaly/register_anomaly_rule_type.ts b/x-pack/plugins/observability_solution/apm/server/routes/alerts/rule_types/anomaly/register_anomaly_rule_type.ts index d9a58d23a5888..531b5c9558a56 100644 --- a/x-pack/plugins/observability_solution/apm/server/routes/alerts/rule_types/anomaly/register_anomaly_rule_type.ts +++ b/x-pack/plugins/observability_solution/apm/server/routes/alerts/rule_types/anomaly/register_anomaly_rule_type.ts @@ -18,7 +18,11 @@ import { import { KibanaRequest, DEFAULT_APP_CATEGORIES } from '@kbn/core/server'; import datemath from '@kbn/datemath'; import type { ESSearchResponse } from '@kbn/es-types'; -import { getAlertUrl, observabilityPaths, ProcessorEvent } from '@kbn/observability-plugin/common'; +import { + getAlertDetailsUrl, + observabilityPaths, + ProcessorEvent, +} from '@kbn/observability-plugin/common'; import { termQuery, termsQuery } from '@kbn/observability-plugin/server'; import { ALERT_EVALUATION_THRESHOLD, @@ -128,7 +132,7 @@ export function registerAnomalyRuleType({ return { state: {} }; } - const { params, services, spaceId, startedAt, getTimeRange } = options; + const { params, services, spaceId, getTimeRange } = options; const { alertsClient, savedObjectsClient, scopedClusterClient, uiSettingsClient } = services; if (!alertsClient) { throw new AlertsClientError(); @@ -303,11 +307,10 @@ export function registerAnomalyRuleType({ const alertId = bucketKey.join('_'); - const { uuid, start } = alertsClient.report({ + const { uuid } = alertsClient.report({ id: alertId, actionGroup: ruleTypeConfig.defaultActionGroupId, }); - const indexedStartedAt = start ?? startedAt.toISOString(); const relativeViewInAppUrl = getAlertUrlTransaction( serviceName, @@ -319,13 +322,7 @@ export function registerAnomalyRuleType({ spaceId, relativeViewInAppUrl ); - const alertDetailsUrl = await getAlertUrl( - uuid, - spaceId, - indexedStartedAt, - alertsLocator, - basePath.publicBaseUrl - ); + const alertDetailsUrl = await getAlertDetailsUrl(basePath, spaceId, uuid); const payload = { [SERVICE_NAME]: serviceName, diff --git a/x-pack/plugins/observability_solution/apm/server/routes/alerts/rule_types/error_count/register_error_count_rule_type.test.ts b/x-pack/plugins/observability_solution/apm/server/routes/alerts/rule_types/error_count/register_error_count_rule_type.test.ts index 2115a517beedf..a27b0ca78e510 100644 --- a/x-pack/plugins/observability_solution/apm/server/routes/alerts/rule_types/error_count/register_error_count_rule_type.test.ts +++ b/x-pack/plugins/observability_solution/apm/server/routes/alerts/rule_types/error_count/register_error_count_rule_type.test.ts @@ -142,7 +142,7 @@ describe('Error count alert', () => { expect(services.alertsClient.setAlertData).toHaveBeenCalledWith({ context: { - alertDetailsUrl: 'mockedAlertsLocator > getLocation', + alertDetailsUrl: 'http://localhost:5601/eyr/app/observability/alerts/test-uuid', environment: 'env-foo', errorGroupingKey: undefined, interval: '5 mins', @@ -167,7 +167,7 @@ describe('Error count alert', () => { }); expect(services.alertsClient.setAlertData).toHaveBeenCalledWith({ context: { - alertDetailsUrl: 'mockedAlertsLocator > getLocation', + alertDetailsUrl: 'http://localhost:5601/eyr/app/observability/alerts/test-uuid', environment: 'env-foo-2', errorGroupingKey: undefined, interval: '5 mins', @@ -192,7 +192,7 @@ describe('Error count alert', () => { }); expect(services.alertsClient.setAlertData).toHaveBeenCalledWith({ context: { - alertDetailsUrl: 'mockedAlertsLocator > getLocation', + alertDetailsUrl: 'http://localhost:5601/eyr/app/observability/alerts/test-uuid', environment: 'env-bar', errorGroupingKey: undefined, interval: '5 mins', @@ -283,7 +283,7 @@ describe('Error count alert', () => { expect(services.alertsClient.setAlertData).toHaveBeenCalledWith({ context: { - alertDetailsUrl: 'mockedAlertsLocator > getLocation', + alertDetailsUrl: 'http://localhost:5601/eyr/app/observability/alerts/test-uuid', environment: 'env-foo', errorGroupingKey: undefined, interval: '5 mins', @@ -310,7 +310,7 @@ describe('Error count alert', () => { }); expect(services.alertsClient.setAlertData).toHaveBeenCalledWith({ context: { - alertDetailsUrl: 'mockedAlertsLocator > getLocation', + alertDetailsUrl: 'http://localhost:5601/eyr/app/observability/alerts/test-uuid', environment: 'env-foo-2', errorGroupingKey: undefined, interval: '5 mins', @@ -337,7 +337,7 @@ describe('Error count alert', () => { }); expect(services.alertsClient.setAlertData).toHaveBeenCalledWith({ context: { - alertDetailsUrl: 'mockedAlertsLocator > getLocation', + alertDetailsUrl: 'http://localhost:5601/eyr/app/observability/alerts/test-uuid', environment: 'env-bar', errorGroupingKey: undefined, interval: '5 mins', @@ -433,7 +433,7 @@ describe('Error count alert', () => { expect(services.alertsClient.setAlertData).toHaveBeenCalledWith({ context: { - alertDetailsUrl: 'mockedAlertsLocator > getLocation', + alertDetailsUrl: 'http://localhost:5601/eyr/app/observability/alerts/test-uuid', environment: 'env-foo', errorGroupingKey: 'error-key-foo', interval: '5 mins', @@ -458,7 +458,7 @@ describe('Error count alert', () => { }); expect(services.alertsClient.setAlertData).toHaveBeenCalledWith({ context: { - alertDetailsUrl: 'mockedAlertsLocator > getLocation', + alertDetailsUrl: 'http://localhost:5601/eyr/app/observability/alerts/test-uuid', environment: 'env-foo-2', errorGroupingKey: 'error-key-foo-2', interval: '5 mins', @@ -483,7 +483,7 @@ describe('Error count alert', () => { }); expect(services.alertsClient.setAlertData).toHaveBeenCalledWith({ context: { - alertDetailsUrl: 'mockedAlertsLocator > getLocation', + alertDetailsUrl: 'http://localhost:5601/eyr/app/observability/alerts/test-uuid', environment: 'env-bar', errorGroupingKey: 'error-key-bar', interval: '5 mins', @@ -573,7 +573,7 @@ describe('Error count alert', () => { expect(services.alertsClient.setAlertData).toHaveBeenCalledWith({ context: { - alertDetailsUrl: 'mockedAlertsLocator > getLocation', + alertDetailsUrl: 'http://localhost:5601/eyr/app/observability/alerts/test-uuid', environment: 'env-foo', errorGroupingKey: undefined, interval: '5 mins', @@ -598,7 +598,7 @@ describe('Error count alert', () => { }); expect(services.alertsClient.setAlertData).toHaveBeenCalledWith({ context: { - alertDetailsUrl: 'mockedAlertsLocator > getLocation', + alertDetailsUrl: 'http://localhost:5601/eyr/app/observability/alerts/test-uuid', environment: 'env-foo-2', errorGroupingKey: undefined, interval: '5 mins', @@ -623,7 +623,7 @@ describe('Error count alert', () => { }); expect(services.alertsClient.setAlertData).toHaveBeenCalledWith({ context: { - alertDetailsUrl: 'mockedAlertsLocator > getLocation', + alertDetailsUrl: 'http://localhost:5601/eyr/app/observability/alerts/test-uuid', environment: 'env-bar', errorGroupingKey: undefined, interval: '5 mins', @@ -714,7 +714,7 @@ describe('Error count alert', () => { expect(services.alertsClient.setAlertData).toHaveBeenCalledWith({ context: { - alertDetailsUrl: 'mockedAlertsLocator > getLocation', + alertDetailsUrl: 'http://localhost:5601/eyr/app/observability/alerts/test-uuid', environment: 'Not defined', errorGroupingKey: undefined, interval: '5 mins', @@ -740,7 +740,7 @@ describe('Error count alert', () => { }); expect(services.alertsClient.setAlertData).toHaveBeenCalledWith({ context: { - alertDetailsUrl: 'mockedAlertsLocator > getLocation', + alertDetailsUrl: 'http://localhost:5601/eyr/app/observability/alerts/test-uuid', environment: 'Not defined', errorGroupingKey: undefined, interval: '5 mins', @@ -766,7 +766,7 @@ describe('Error count alert', () => { }); expect(services.alertsClient.setAlertData).toHaveBeenCalledWith({ context: { - alertDetailsUrl: 'mockedAlertsLocator > getLocation', + alertDetailsUrl: 'http://localhost:5601/eyr/app/observability/alerts/test-uuid', environment: 'env-bar', errorGroupingKey: undefined, interval: '5 mins', @@ -860,7 +860,7 @@ describe('Error count alert', () => { expect(services.alertsClient.setAlertData).toHaveBeenCalledWith({ context: { - alertDetailsUrl: 'mockedAlertsLocator > getLocation', + alertDetailsUrl: 'http://localhost:5601/eyr/app/observability/alerts/test-uuid', environment: 'env-foo', errorGroupingKey: 'error-key-foo', errorGroupingName: 'error-name-foo', @@ -887,7 +887,7 @@ describe('Error count alert', () => { }); expect(services.alertsClient.setAlertData).toHaveBeenCalledWith({ context: { - alertDetailsUrl: 'mockedAlertsLocator > getLocation', + alertDetailsUrl: 'http://localhost:5601/eyr/app/observability/alerts/test-uuid', environment: 'env-foo-2', errorGroupingKey: 'error-key-foo-2', errorGroupingName: 'error-name-foo2', @@ -914,7 +914,7 @@ describe('Error count alert', () => { }); expect(services.alertsClient.setAlertData).toHaveBeenCalledWith({ context: { - alertDetailsUrl: 'mockedAlertsLocator > getLocation', + alertDetailsUrl: 'http://localhost:5601/eyr/app/observability/alerts/test-uuid', environment: 'env-bar', errorGroupingKey: 'error-key-bar', errorGroupingName: 'error-name-bar', @@ -1001,7 +1001,7 @@ describe('Error count alert', () => { expect(services.alertsClient.setAlertData).toHaveBeenCalledWith({ context: { - alertDetailsUrl: 'mockedAlertsLocator > getLocation', + alertDetailsUrl: 'http://localhost:5601/eyr/app/observability/alerts/test-uuid', environment: 'env-foo', errorGroupingKey: undefined, interval: '5 mins', diff --git a/x-pack/plugins/observability_solution/apm/server/routes/alerts/rule_types/error_count/register_error_count_rule_type.ts b/x-pack/plugins/observability_solution/apm/server/routes/alerts/rule_types/error_count/register_error_count_rule_type.ts index 2539a63ea8575..8fb4000645a2e 100644 --- a/x-pack/plugins/observability_solution/apm/server/routes/alerts/rule_types/error_count/register_error_count_rule_type.ts +++ b/x-pack/plugins/observability_solution/apm/server/routes/alerts/rule_types/error_count/register_error_count_rule_type.ts @@ -17,7 +17,7 @@ import { } from '@kbn/alerting-plugin/server'; import { formatDurationFromTimeUnitChar, - getAlertUrl, + getAlertDetailsUrl, observabilityPaths, ProcessorEvent, TimeUnitChar, @@ -127,7 +127,7 @@ export function registerErrorCountRuleType({ ErrorCountAlert > ) => { - const { params: ruleParams, services, spaceId, startedAt, getTimeRange } = options; + const { params: ruleParams, services, spaceId, getTimeRange } = options; const { alertsClient, savedObjectsClient, scopedClusterClient, uiSettingsClient } = services; if (!alertsClient) { throw new AlertsClientError(); @@ -221,11 +221,10 @@ export function registerErrorCountRuleType({ groupByFields, }); - const { uuid, start } = alertsClient.report({ + const { uuid } = alertsClient.report({ id: alertId, actionGroup: ruleTypeConfig.defaultActionGroupId, }); - const indexedStartedAt = start ?? startedAt.toISOString(); const relativeViewInAppUrl = getAlertUrlErrorCount( groupByFields[SERVICE_NAME], @@ -236,13 +235,7 @@ export function registerErrorCountRuleType({ spaceId, relativeViewInAppUrl ); - const alertDetailsUrl = await getAlertUrl( - uuid, - spaceId, - indexedStartedAt, - alertsLocator, - basePath.publicBaseUrl - ); + const alertDetailsUrl = await getAlertDetailsUrl(basePath, spaceId, uuid); const groupByActionVariables = getGroupByActionVariables(groupByFields); const payload = { diff --git a/x-pack/plugins/observability_solution/apm/server/routes/alerts/rule_types/transaction_error_rate/register_transaction_error_rate_rule_type.test.ts b/x-pack/plugins/observability_solution/apm/server/routes/alerts/rule_types/transaction_error_rate/register_transaction_error_rate_rule_type.test.ts index 382cc9f53767e..98eda3ef9e904 100644 --- a/x-pack/plugins/observability_solution/apm/server/routes/alerts/rule_types/transaction_error_rate/register_transaction_error_rate_rule_type.test.ts +++ b/x-pack/plugins/observability_solution/apm/server/routes/alerts/rule_types/transaction_error_rate/register_transaction_error_rate_rule_type.test.ts @@ -129,7 +129,7 @@ describe('Transaction error rate alert', () => { expect(services.alertsClient.setAlertData).toHaveBeenCalledWith({ context: { - alertDetailsUrl: 'mockedAlertsLocator > getLocation', + alertDetailsUrl: 'http://localhost:5601/eyr/app/observability/alerts/test-uuid', environment: 'env-foo', interval: '5 mins', reason: @@ -242,7 +242,7 @@ describe('Transaction error rate alert', () => { expect(services.alertsClient.setAlertData).toHaveBeenCalledWith({ context: { - alertDetailsUrl: 'mockedAlertsLocator > getLocation', + alertDetailsUrl: 'http://localhost:5601/eyr/app/observability/alerts/test-uuid', environment: 'env-foo', interval: '5 mins', reason: @@ -355,7 +355,7 @@ describe('Transaction error rate alert', () => { expect(services.alertsClient.setAlertData).toHaveBeenCalledWith({ context: { - alertDetailsUrl: 'mockedAlertsLocator > getLocation', + alertDetailsUrl: 'http://localhost:5601/eyr/app/observability/alerts/test-uuid', environment: 'env-foo', interval: '5 mins', reason: @@ -468,7 +468,7 @@ describe('Transaction error rate alert', () => { expect(services.alertsClient.setAlertData).toHaveBeenCalledWith({ context: { - alertDetailsUrl: 'mockedAlertsLocator > getLocation', + alertDetailsUrl: 'http://localhost:5601/eyr/app/observability/alerts/test-uuid', environment: 'Not defined', interval: '5 mins', reason: @@ -569,7 +569,7 @@ describe('Transaction error rate alert', () => { expect(services.alertsClient.setAlertData).toHaveBeenCalledWith({ context: { - alertDetailsUrl: 'mockedAlertsLocator > getLocation', + alertDetailsUrl: 'http://localhost:5601/eyr/app/observability/alerts/test-uuid', environment: 'env-bar', interval: '5 mins', reason: diff --git a/x-pack/plugins/observability_solution/apm/server/routes/alerts/rule_types/transaction_error_rate/register_transaction_error_rate_rule_type.ts b/x-pack/plugins/observability_solution/apm/server/routes/alerts/rule_types/transaction_error_rate/register_transaction_error_rate_rule_type.ts index cff5a481f9200..1090a1c91d54b 100644 --- a/x-pack/plugins/observability_solution/apm/server/routes/alerts/rule_types/transaction_error_rate/register_transaction_error_rate_rule_type.ts +++ b/x-pack/plugins/observability_solution/apm/server/routes/alerts/rule_types/transaction_error_rate/register_transaction_error_rate_rule_type.ts @@ -17,7 +17,7 @@ import { } from '@kbn/alerting-plugin/server'; import { formatDurationFromTimeUnitChar, - getAlertUrl, + getAlertDetailsUrl, observabilityPaths, ProcessorEvent, TimeUnitChar, @@ -137,7 +137,7 @@ export function registerTransactionErrorRateRuleType({ TransactionErrorRateAlert > ) => { - const { services, spaceId, params: ruleParams, startedAt, getTimeRange } = options; + const { services, spaceId, params: ruleParams, getTimeRange } = options; const { alertsClient, savedObjectsClient, scopedClusterClient, uiSettingsClient } = services; if (!alertsClient) { throw new AlertsClientError(); @@ -273,11 +273,10 @@ export function registerTransactionErrorRateRuleType({ groupByFields, }); - const { uuid, start } = alertsClient.report({ + const { uuid } = alertsClient.report({ id: alertId, actionGroup: ruleTypeConfig.defaultActionGroupId, }); - const indexedStartedAt = start ?? startedAt.toISOString(); const relativeViewInAppUrl = getAlertUrlTransaction( groupByFields[SERVICE_NAME], @@ -289,13 +288,7 @@ export function registerTransactionErrorRateRuleType({ spaceId, relativeViewInAppUrl ); - const alertDetailsUrl = await getAlertUrl( - uuid, - spaceId, - indexedStartedAt, - alertsLocator, - basePath.publicBaseUrl - ); + const alertDetailsUrl = await getAlertDetailsUrl(basePath, spaceId, uuid); const groupByActionVariables = getGroupByActionVariables(groupByFields); const payload = { diff --git a/x-pack/plugins/observability_solution/apm/server/routes/alerts/test_utils/index.ts b/x-pack/plugins/observability_solution/apm/server/routes/alerts/test_utils/index.ts index 8db29408d4752..ce3e67baea1d6 100644 --- a/x-pack/plugins/observability_solution/apm/server/routes/alerts/test_utils/index.ts +++ b/x-pack/plugins/observability_solution/apm/server/routes/alerts/test_utils/index.ts @@ -7,8 +7,6 @@ import { IBasePath, Logger } from '@kbn/core/server'; import { elasticsearchServiceMock } from '@kbn/core/server/mocks'; -import type { AlertsLocatorParams } from '@kbn/observability-plugin/common'; -import { LocatorPublic } from '@kbn/share-plugin/common'; import { IRuleDataClient } from '@kbn/rule-registry-plugin/server'; import { ruleRegistryMocks } from '@kbn/rule-registry-plugin/server/mocks'; import { PluginSetupContract as AlertingPluginSetupContract } from '@kbn/alerting-plugin/server'; @@ -80,11 +78,6 @@ export const createRuleTypeMocks = () => { ruleDataClient: ruleRegistryMocks.createRuleDataClient( '.alerts-observability.apm.alerts' ) as IRuleDataClient, - alertsLocator: { - getLocation: jest.fn().mockImplementation(() => ({ - path: 'mockedAlertsLocator > getLocation', - })), - } as any as LocatorPublic, } as unknown as RegisterRuleDependencies; return { diff --git a/x-pack/plugins/observability_solution/dataset_quality/server/services/data_telemetry/constants.ts b/x-pack/plugins/observability_solution/dataset_quality/server/services/data_telemetry/constants.ts index 619a6efc3bfdd..7f03b4d67ce5c 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/server/services/data_telemetry/constants.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/server/services/data_telemetry/constants.ts @@ -25,7 +25,8 @@ export const EXCLUDE_ELASTIC_LOGS = ['logs-synth', 'logs-elastic', 'logs-endpoin export const TELEMETRY_CHANNEL = 'logs-data-telemetry'; -const LOGS_INDEX_PATTERN_NAMES = [ +type ObsPatternName = (typeof DATA_DATASETS_INDEX_PATTERNS_UNIQUE)[number]['patternName']; +const LOGS_INDEX_PATTERN_NAMES: ObsPatternName[] = [ 'filebeat', 'generic-filebeat', 'metricbeat', @@ -43,6 +44,7 @@ const LOGS_INDEX_PATTERN_NAMES = [ 'fluentbit', 'nginx', 'apache', + 'dsns-logs', 'generic-logs', ]; diff --git a/x-pack/plugins/observability_solution/infra/public/components/logging/log_analysis_setup/initial_configuration_step/analysis_setup_timerange_form.tsx b/x-pack/plugins/observability_solution/infra/public/components/logging/log_analysis_setup/initial_configuration_step/analysis_setup_timerange_form.tsx index 957391694cbbf..8ad9769c29fb1 100644 --- a/x-pack/plugins/observability_solution/infra/public/components/logging/log_analysis_setup/initial_configuration_step/analysis_setup_timerange_form.tsx +++ b/x-pack/plugins/observability_solution/infra/public/components/logging/log_analysis_setup/initial_configuration_step/analysis_setup_timerange_form.tsx @@ -5,14 +5,7 @@ * 2.0. */ -import { - EuiTitle, - EuiText, - EuiFlexGroup, - EuiFlexItem, - EuiFormControlLayout, - EuiFormRow, -} from '@elastic/eui'; +import { EuiTitle, EuiText, EuiFlexGroup, EuiFlexItem, EuiFormRow } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import moment, { Moment } from 'moment'; @@ -107,21 +100,15 @@ export const AnalysisSetupTimerangeForm: React.FunctionComponent<{ label={startTimeLabel} > - setStartTime(undefined) } : undefined - } - isDisabled={disabled} - > - setStartTime(selectedDateToParam(date))} - placeholder={startTimeDefaultDescription} - maxDate={now} - /> - + setStartTime(selectedDateToParam(date))} + onClear={() => setStartTime(undefined)} + placeholder={startTimeDefaultDescription} + maxDate={now} + /> - setEndTime(undefined) } : undefined} - isDisabled={disabled} - > - setEndTime(selectedDateToParam(date))} - placeholder={endTimeDefaultDescription} - openToDate={now} - minDate={startTimeValue} - minTime={selectedEndTimeIsToday ? now : moment().hour(0).minutes(0)} - maxTime={moment().hour(23).minutes(59)} - /> - + setEndTime(selectedDateToParam(date))} + onClear={() => setEndTime(undefined)} + placeholder={endTimeDefaultDescription} + openToDate={now} + minDate={startTimeValue} + minTime={selectedEndTimeIsToday ? now : moment().hour(0).minutes(0)} + maxTime={moment().hour(23).minutes(59)} + />
diff --git a/x-pack/plugins/observability_solution/infra/server/lib/alerting/inventory_metric_threshold/inventory_metric_threshold_executor.ts b/x-pack/plugins/observability_solution/infra/server/lib/alerting/inventory_metric_threshold/inventory_metric_threshold_executor.ts index d4c5a3b25c902..38bbe40e69855 100644 --- a/x-pack/plugins/observability_solution/infra/server/lib/alerting/inventory_metric_threshold/inventory_metric_threshold_executor.ts +++ b/x-pack/plugins/observability_solution/infra/server/lib/alerting/inventory_metric_threshold/inventory_metric_threshold_executor.ts @@ -21,7 +21,7 @@ import { AlertInstanceState as AlertState, } from '@kbn/alerting-plugin/common'; import { AlertsClientError, RuleExecutorOptions, RuleTypeState } from '@kbn/alerting-plugin/server'; -import { convertToBuiltInComparators, getAlertUrl } from '@kbn/observability-plugin/common'; +import { convertToBuiltInComparators, getAlertDetailsUrl } from '@kbn/observability-plugin/common'; import type { InventoryItemType, SnapshotMetricType } from '@kbn/metrics-data-access-plugin/common'; import { ObservabilityMetricsAlert } from '@kbn/alerts-as-data-utils'; import { getOriginalActionGroup } from '../../../utils/get_original_action_group'; @@ -140,13 +140,7 @@ export const createInventoryMetricThresholdExecutor = [ALERT_REASON]: reason, }, context: { - alertDetailsUrl: await getAlertUrl( - uuid, - spaceId, - indexedStartedAt, - alertsLocator, - libs.basePath.publicBaseUrl - ), + alertDetailsUrl: await getAlertDetailsUrl(libs.basePath, spaceId, uuid), alertState: stateToAlertMessage[AlertStates.ERROR], group: UNGROUPED_FACTORY_KEY, metric: mapToConditionsLookup(criteria, (c) => c.metric), @@ -292,13 +286,7 @@ export const createInventoryMetricThresholdExecutor = scheduledActionsCount++; const context = { - alertDetailsUrl: await getAlertUrl( - uuid, - spaceId, - indexedStartedAt, - alertsLocator, - libs.basePath.publicBaseUrl - ), + alertDetailsUrl: await getAlertDetailsUrl(libs.basePath, spaceId, uuid), alertState: stateToAlertMessage[nextState], group, reason, @@ -346,13 +334,7 @@ export const createInventoryMetricThresholdExecutor = const originalActionGroup = getOriginalActionGroup(alertHits); const recoveredContext = { - alertDetailsUrl: await getAlertUrl( - alertUuid, - spaceId, - indexedStartedAt, - alertsLocator, - libs.basePath.publicBaseUrl - ), + alertDetailsUrl: await getAlertDetailsUrl(libs.basePath, spaceId, alertUuid), alertState: stateToAlertMessage[AlertStates.OK], group: recoveredAlertId, metric: mapToConditionsLookup(criteria, (c) => c.metric), diff --git a/x-pack/plugins/observability_solution/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.test.ts b/x-pack/plugins/observability_solution/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.test.ts index 47266cee5ec06..9777f7ceda476 100644 --- a/x-pack/plugins/observability_solution/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.test.ts +++ b/x-pack/plugins/observability_solution/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.test.ts @@ -2384,7 +2384,7 @@ describe('The metric threshold rule type', () => { }); expect(services.alertsClient.setAlertData).toHaveBeenNthCalledWith(index, { context: { - alertDetailsUrl: '', + alertDetailsUrl: `http://localhost:5601/app/observability/alerts/uuid-${id}`, alertState, group: id, reason, diff --git a/x-pack/plugins/observability_solution/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.ts b/x-pack/plugins/observability_solution/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.ts index a98253553e4f2..ff75a4b84c466 100644 --- a/x-pack/plugins/observability_solution/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.ts +++ b/x-pack/plugins/observability_solution/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.ts @@ -20,7 +20,7 @@ import { RecoveredActionGroup, } from '@kbn/alerting-plugin/common'; import { AlertsClientError, RuleExecutorOptions, RuleTypeState } from '@kbn/alerting-plugin/server'; -import { TimeUnitChar, getAlertUrl } from '@kbn/observability-plugin/common'; +import { TimeUnitChar, getAlertDetailsUrl } from '@kbn/observability-plugin/common'; import { ObservabilityMetricsAlert } from '@kbn/alerts-as-data-utils'; import { COMPARATORS } from '@kbn/alerting-comparators'; import { getEcsGroups, type Group } from '@kbn/observability-alerting-rule-utils'; @@ -153,7 +153,7 @@ export const createMetricThresholdExecutor = groups, thresholds, }) => { - const { uuid, start } = alertsClient.report({ + const { uuid } = alertsClient.report({ id, actionGroup, }); @@ -170,13 +170,7 @@ export const createMetricThresholdExecutor = }, context: { ...contextWithoutAlertDetailsUrl, - alertDetailsUrl: await getAlertUrl( - uuid, - spaceId, - start ?? startedAt.toISOString(), - alertsLocator, - libs.basePath.publicBaseUrl - ), + alertDetailsUrl: await getAlertDetailsUrl(libs.basePath, spaceId, uuid), }, }); }; @@ -456,13 +450,7 @@ export const createMetricThresholdExecutor = const originalActionGroup = getOriginalActionGroup(alertHits); recoveredAlert.alert.setContext({ - alertDetailsUrl: await getAlertUrl( - alertUuid, - spaceId, - indexedStartedAt, - alertsLocator, - libs.basePath.publicBaseUrl - ), + alertDetailsUrl: await getAlertDetailsUrl(libs.basePath, spaceId, alertUuid), alertState: stateToAlertMessage[AlertStates.OK], group: recoveredAlertId, groupByKeys: groupByKeysObjectForRecovered[recoveredAlertId], diff --git a/x-pack/plugins/observability_solution/inventory/common/entities.ts b/x-pack/plugins/observability_solution/inventory/common/entities.ts index cc69a4c4a687e..2135688d75467 100644 --- a/x-pack/plugins/observability_solution/inventory/common/entities.ts +++ b/x-pack/plugins/observability_solution/inventory/common/entities.ts @@ -23,6 +23,18 @@ export const ENTITIES_LATEST_ALIAS = entitiesAliasPattern({ dataset: ENTITY_LATEST, }); +const BUILTIN_SERVICES_FROM_ECS_DATA = 'builtin_services_from_ecs_data'; +const BUILTIN_HOSTS_FROM_ECS_DATA = 'builtin_hosts_from_ecs_data'; +const BUILTIN_CONTAINERS_FROM_ECS_DATA = 'builtin_containers_from_ecs_data'; + +export const defaultEntityDefinitions = [ + BUILTIN_SERVICES_FROM_ECS_DATA, + BUILTIN_HOSTS_FROM_ECS_DATA, + BUILTIN_CONTAINERS_FROM_ECS_DATA, +]; + +export const defaultEntityTypes: EntityType[] = ['service', 'host', 'container']; + const entityArrayRt = t.array(entityTypeRt); export const entityTypesRt = new t.Type( 'entityTypesRt', diff --git a/x-pack/plugins/observability_solution/inventory/public/components/app_root/header_action_menu/add_data_action_menu.tsx b/x-pack/plugins/observability_solution/inventory/public/components/app_root/header_action_menu/add_data_action_menu.tsx index ca4bc06df648a..cec6188a1553f 100644 --- a/x-pack/plugins/observability_solution/inventory/public/components/app_root/header_action_menu/add_data_action_menu.tsx +++ b/x-pack/plugins/observability_solution/inventory/public/components/app_root/header_action_menu/add_data_action_menu.tsx @@ -15,26 +15,18 @@ import { EuiIcon, EuiPopover, } from '@elastic/eui'; -import { i18n } from '@kbn/i18n'; import { OBSERVABILITY_ONBOARDING_LOCATOR, ObservabilityOnboardingLocatorParams, } from '@kbn/deeplinks-observability'; import { useKibana } from '../../../hooks/use_kibana'; import type { InventoryAddDataParams } from '../../../services/telemetry/types'; - -const addDataTitle = i18n.translate('xpack.inventory.addDataContextMenu.link', { - defaultMessage: 'Add data', -}); -const addDataItem = i18n.translate('xpack.inventory.add.apm.agent.button.', { - defaultMessage: 'Add data', -}); - -const associateServiceLogsItem = i18n.translate('xpack.inventory.associate.service.logs.button', { - defaultMessage: 'Associate existing service logs', -}); - -const ASSOCIATE_LOGS_LINK = 'https://ela.st/new-experience-associate-service-logs'; +import { + ASSOCIATE_LOGS_LINK, + addDataItem, + addDataTitle, + associateServiceLogsItem, +} from '../../shared/add_data_buttons/buttons'; export function AddDataContextMenu() { const [popoverOpen, setPopoverOpen] = useState(false); diff --git a/x-pack/plugins/observability_solution/inventory/public/components/badge_filter_with_popover/badge_filter_with_popover.test.tsx b/x-pack/plugins/observability_solution/inventory/public/components/badge_filter_with_popover/badge_filter_with_popover.test.tsx new file mode 100644 index 0000000000000..cda2f0bcb42d3 --- /dev/null +++ b/x-pack/plugins/observability_solution/inventory/public/components/badge_filter_with_popover/badge_filter_with_popover.test.tsx @@ -0,0 +1,61 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { render, fireEvent, screen } from '@testing-library/react'; +import { BadgeFilterWithPopover } from '.'; +import { EuiThemeProvider, copyToClipboard } from '@elastic/eui'; +import { ENTITY_TYPE } from '../../../common/es_fields/entities'; + +jest.mock('@elastic/eui', () => ({ + ...jest.requireActual('@elastic/eui'), + copyToClipboard: jest.fn(), +})); + +describe('BadgeFilterWithPopover', () => { + const mockOnFilter = jest.fn(); + const field = ENTITY_TYPE; + const value = 'host'; + const label = 'Host'; + const popoverContentDataTestId = 'inventoryBadgeFilterWithPopoverContent'; + const popoverContentTitleTestId = 'inventoryBadgeFilterWithPopoverTitle'; + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('renders the badge with the correct label', () => { + render( + , + { wrapper: EuiThemeProvider } + ); + expect(screen.queryByText(label)).toBeInTheDocument(); + expect(screen.getByText(label).textContent).toBe(label); + }); + + it('opens the popover when the badge is clicked', () => { + render(); + expect(screen.queryByTestId(popoverContentDataTestId)).not.toBeInTheDocument(); + fireEvent.click(screen.getByText(value)); + expect(screen.queryByTestId(popoverContentDataTestId)).toBeInTheDocument(); + expect(screen.queryByTestId(popoverContentTitleTestId)?.textContent).toBe(`${field}:${value}`); + }); + + it('calls onFilter when the "Filter for" button is clicked', () => { + render(); + fireEvent.click(screen.getByText(value)); + fireEvent.click(screen.getByTestId('inventoryBadgeFilterWithPopoverFilterForButton')); + expect(mockOnFilter).toHaveBeenCalled(); + }); + + it('copies value to clipboard when the "Copy value" button is clicked', () => { + render(); + fireEvent.click(screen.getByText(value)); + fireEvent.click(screen.getByTestId('inventoryBadgeFilterWithPopoverCopyValueButton')); + expect(copyToClipboard).toHaveBeenCalledWith(value); + }); +}); diff --git a/x-pack/plugins/observability_solution/inventory/public/components/badge_filter_with_popover/index.tsx b/x-pack/plugins/observability_solution/inventory/public/components/badge_filter_with_popover/index.tsx new file mode 100644 index 0000000000000..d1e952e189d6e --- /dev/null +++ b/x-pack/plugins/observability_solution/inventory/public/components/badge_filter_with_popover/index.tsx @@ -0,0 +1,103 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { + EuiBadge, + EuiButtonEmpty, + EuiFlexGrid, + EuiFlexGroup, + EuiFlexItem, + EuiPopover, + EuiPopoverFooter, + copyToClipboard, + useEuiTheme, +} from '@elastic/eui'; +import { css } from '@emotion/react'; +import { i18n } from '@kbn/i18n'; +import React, { useState } from 'react'; + +interface Props { + field: string; + value: string; + label?: string; + onFilter: () => void; +} + +export function BadgeFilterWithPopover({ field, value, onFilter, label }: Props) { + const [isOpen, setIsOpen] = useState(false); + const theme = useEuiTheme(); + + return ( + setIsOpen((state) => !state)} + onClickAriaLabel={i18n.translate( + 'xpack.inventory.badgeFilterWithPopover.openPopoverBadgeLabel', + { defaultMessage: 'Open popover' } + )} + > + {label || value} + + } + isOpen={isOpen} + closePopover={() => setIsOpen(false)} + > + + + + + {field}: + + + + {value} + + + + + + + + {i18n.translate('xpack.inventory.badgeFilterWithPopover.filterForButtonEmptyLabel', { + defaultMessage: 'Filter for', + })} + + + + copyToClipboard(value)} + > + {i18n.translate('xpack.inventory.badgeFilterWithPopover.copyValueButtonEmptyLabel', { + defaultMessage: 'Copy value', + })} + + + + + + ); +} diff --git a/x-pack/plugins/observability_solution/inventory/public/components/empty_states/empty_state.tsx b/x-pack/plugins/observability_solution/inventory/public/components/empty_states/empty_state.tsx new file mode 100644 index 0000000000000..587812aa6c86e --- /dev/null +++ b/x-pack/plugins/observability_solution/inventory/public/components/empty_states/empty_state.tsx @@ -0,0 +1,137 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { + COLOR_MODES_STANDARD, + EuiCallOut, + EuiEmptyPrompt, + EuiFlexGroup, + EuiFlexItem, + EuiHorizontalRule, + EuiImage, + EuiLink, + EuiText, + EuiTextColor, + useEuiTheme, +} from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import React from 'react'; +import { dashboardsLight, dashboardsDark } from '@kbn/shared-svg'; +import useLocalStorage from 'react-use/lib/useLocalStorage'; +import { AddData, AssociateServiceLogs } from '../shared/add_data_buttons/buttons'; +import { useKibana } from '../../hooks/use_kibana'; +import { InventoryAddDataParams } from '../../services/telemetry/types'; + +export function EmptyState() { + const { services } = useKibana(); + + const [isDismissed, setDismissed] = useLocalStorage( + 'inventory.emptyStateDismissed', + false + ); + + function reportButtonClick(journey: InventoryAddDataParams['journey']) { + services.telemetry.reportInventoryAddData({ + view: 'empty_state', + journey, + }); + } + + const { colorMode } = useEuiTheme(); + + return ( + + {!isDismissed && ( + + setDismissed(true)} + title={i18n.translate('xpack.inventory.noEntitiesEmptyState.callout.title', { + defaultMessage: 'Trying for the first time?', + })} + > +

+ {i18n.translate('xpack.inventory.noEntitiesEmptyState.description', { + defaultMessage: + 'It can take a couple of minutes for your entities to show. Try refreshing in a minute or two.', + })} +

+ + {i18n.translate('xpack.inventory.noEntitiesEmptyState.learnMore.link', { + defaultMessage: 'Learn more', + })} + +
+
+ )} + + + } + title={ +

+ {i18n.translate('xpack.inventory.noEntitiesEmptyState.title', { + defaultMessage: 'No entities available', + })} +

+ } + layout={'horizontal'} + color="plain" + body={ + <> +

+ {i18n.translate('xpack.inventory.noEntitiesEmptyState.body.description', { + defaultMessage: + 'See all of your observed entities in one place by collecting some data.', + })} +

+ + +
+ + {i18n.translate('xpack.inventory.noEntitiesEmptyState.actions.title', { + defaultMessage: 'Start observing your entities:', + })} + +
+
+ + } + actions={ + + + { + reportButtonClick('add_data'); + }} + /> + { + reportButtonClick('associate_existing_service_logs'); + }} + /> + + + } + /> +
+
+ ); +} diff --git a/x-pack/plugins/observability_solution/inventory/public/components/entities_grid/entities_grid.stories.tsx b/x-pack/plugins/observability_solution/inventory/public/components/entities_grid/entities_grid.stories.tsx index b0e6c2fcc5ee4..996f0ec951581 100644 --- a/x-pack/plugins/observability_solution/inventory/public/components/entities_grid/entities_grid.stories.tsx +++ b/x-pack/plugins/observability_solution/inventory/public/components/entities_grid/entities_grid.stories.tsx @@ -5,12 +5,13 @@ * 2.0. */ -import { EuiDataGridSorting } from '@elastic/eui'; +import { EuiDataGridSorting, EuiFlexGroup, EuiFlexItem, EuiLink } from '@elastic/eui'; import { Meta, Story } from '@storybook/react'; -import React, { useMemo, useState } from 'react'; import { orderBy } from 'lodash'; +import React, { useMemo, useState } from 'react'; import { EntitiesGrid } from '.'; -import { ENTITY_LAST_SEEN } from '../../../common/es_fields/entities'; +import { EntityType } from '../../../common/entities'; +import { ENTITY_LAST_SEEN, ENTITY_TYPE } from '../../../common/es_fields/entities'; import { entitiesMock } from './mock/entities_mock'; const stories: Meta<{}> = { @@ -25,22 +26,44 @@ export const Example: Story<{}> = () => { id: ENTITY_LAST_SEEN, direction: 'desc', }); - - const sortedItems = useMemo( - () => orderBy(entitiesMock, sort.id, sort.direction), - [sort.direction, sort.id] + const [selectedEntityType, setSelectedEntityType] = useState(); + const filteredAndSortedItems = useMemo( + () => + orderBy( + selectedEntityType + ? entitiesMock.filter((mock) => mock[ENTITY_TYPE] === selectedEntityType) + : entitiesMock, + sort.id, + sort.direction + ), + [selectedEntityType, sort.direction, sort.id] ); return ( - + + + {`Entity filter: ${selectedEntityType || 'N/A'}`} + setSelectedEntityType(undefined)} + > + Clear filter + + + + + + ); }; @@ -60,6 +83,7 @@ export const EmptyGridExample: Story<{}> = () => { onChangePage={setPageIndex} onChangeSort={setSort} pageIndex={pageIndex} + onFilterByType={() => {}} /> ); }; diff --git a/x-pack/plugins/observability_solution/inventory/public/components/entities_grid/index.tsx b/x-pack/plugins/observability_solution/inventory/public/components/entities_grid/index.tsx index d5ab911605109..dbd1f0806895a 100644 --- a/x-pack/plugins/observability_solution/inventory/public/components/entities_grid/index.tsx +++ b/x-pack/plugins/observability_solution/inventory/public/components/entities_grid/index.tsx @@ -5,7 +5,6 @@ * 2.0. */ import { - EuiBadge, EuiButtonIcon, EuiDataGrid, EuiDataGridCellValueElementProps, @@ -20,6 +19,7 @@ import { i18n } from '@kbn/i18n'; import { FormattedDate, FormattedMessage, FormattedTime } from '@kbn/i18n-react'; import { last } from 'lodash'; import React, { useCallback, useState } from 'react'; +import { EntityType } from '../../../common/entities'; import { ENTITY_DISPLAY_NAME, ENTITY_LAST_SEEN, @@ -27,11 +27,14 @@ import { } from '../../../common/es_fields/entities'; import { APIReturnType } from '../../api'; import { getEntityTypeLabel } from '../../utils/get_entity_type_label'; -import { EntityType } from '../../../common/entities'; +import { BadgeFilterWithPopover } from '../badge_filter_with_popover'; type InventoryEntitiesAPIReturnType = APIReturnType<'GET /internal/inventory/entities'>; -type EntityColumnIds = typeof ENTITY_DISPLAY_NAME | typeof ENTITY_LAST_SEEN | typeof ENTITY_TYPE; +export type EntityColumnIds = + | typeof ENTITY_DISPLAY_NAME + | typeof ENTITY_LAST_SEEN + | typeof ENTITY_TYPE; const CustomHeaderCell = ({ title, tooltipContent }: { title: string; tooltipContent: string }) => ( <> @@ -106,6 +109,7 @@ interface Props { pageIndex: number; onChangeSort: (sorting: EuiDataGridSorting['columns'][0]) => void; onChangePage: (nextPage: number) => void; + onFilterByType: (entityType: EntityType) => void; } const PAGE_SIZE = 20; @@ -118,6 +122,7 @@ export function EntitiesGrid({ pageIndex, onChangePage, onChangeSort, + onFilterByType, }: Props) { const [visibleColumns, setVisibleColumns] = useState(columns.map(({ id }) => id)); @@ -141,10 +146,14 @@ export function EntitiesGrid({ const columnEntityTableId = columnId as EntityColumnIds; switch (columnEntityTableId) { case ENTITY_TYPE: + const entityType = entity[columnEntityTableId] as EntityType; return ( - - {getEntityTypeLabel(entity[columnEntityTableId] as EntityType)} - + onFilterByType(entityType)} + /> ); case ENTITY_LAST_SEEN: return ( @@ -183,7 +192,7 @@ export function EntitiesGrid({ return entity[columnId as EntityColumnIds] || ''; } }, - [entities] + [entities, onFilterByType] ); if (loading) { diff --git a/x-pack/plugins/observability_solution/inventory/public/components/inventory_page_template/index.tsx b/x-pack/plugins/observability_solution/inventory/public/components/inventory_page_template/index.tsx index fc0f3c03660a9..c2734d6643553 100644 --- a/x-pack/plugins/observability_solution/inventory/public/components/inventory_page_template/index.tsx +++ b/x-pack/plugins/observability_solution/inventory/public/components/inventory_page_template/index.tsx @@ -7,15 +7,24 @@ import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import React from 'react'; +import { EuiEmptyPrompt, EuiLoadingLogo } from '@elastic/eui'; import { useKibana } from '../../hooks/use_kibana'; import { SearchBar } from '../search_bar'; import { getEntityManagerEnablement } from './no_data_config'; import { useEntityManager } from '../../hooks/use_entity_manager'; import { Welcome } from '../entity_enablement/welcome_modal'; +import { useInventoryAbortableAsync } from '../../hooks/use_inventory_abortable_async'; +import { EmptyState } from '../empty_states/empty_state'; + +const pageTitle = { + pageTitle: i18n.translate('xpack.inventory.inventoryPageHeaderLabel', { + defaultMessage: 'Inventory', + }), +}; export function InventoryPageTemplate({ children }: { children: React.ReactNode }) { const { - services: { observabilityShared }, + services: { observabilityShared, inventoryAPIClient }, } = useKibana(); const { PageTemplate: ObservabilityPageTemplate } = observabilityShared.navigation; @@ -32,6 +41,23 @@ export function InventoryPageTemplate({ children }: { children: React.ReactNode toggleWelcomedModal(); }; + const { value = { hasData: false }, loading: hasDataLoading } = useInventoryAbortableAsync( + ({ signal }) => { + return inventoryAPIClient.fetch('GET /internal/inventory/has_data', { + signal, + }); + }, + [inventoryAPIClient] + ); + + if (isEnablementLoading || hasDataLoading) { + return ( + + } /> + + ); + } + return ( - - - - - - {children} - {showWelcomedModal ? ( - - ) : null} - - + {value.hasData ? ( + + + + + + {children} + {showWelcomedModal ? ( + + ) : null} + + + ) : ( + + )} ); } diff --git a/x-pack/plugins/observability_solution/inventory/public/components/search_bar/discover_button.tsx b/x-pack/plugins/observability_solution/inventory/public/components/search_bar/discover_button.tsx new file mode 100644 index 0000000000000..d91ca5bf7d2d9 --- /dev/null +++ b/x-pack/plugins/observability_solution/inventory/public/components/search_bar/discover_button.tsx @@ -0,0 +1,83 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useMemo } from 'react'; +import { i18n } from '@kbn/i18n'; +import { EuiButton } from '@elastic/eui'; +import { DataView } from '@kbn/data-views-plugin/public'; +import { buildPhrasesFilter, PhrasesFilter } from '@kbn/es-query'; + +import { useKibana } from '../../hooks/use_kibana'; +import { + ENTITY_DEFINITION_ID, + ENTITY_DISPLAY_NAME, + ENTITY_LAST_SEEN, + ENTITY_TYPE, +} from '../../../common/es_fields/entities'; +import { EntityColumnIds } from '../entities_grid'; +import { defaultEntityDefinitions } from '../../../common/entities'; +import { useInventoryParams } from '../../hooks/use_inventory_params'; + +const ACTIVE_COLUMNS: EntityColumnIds[] = [ENTITY_DISPLAY_NAME, ENTITY_TYPE, ENTITY_LAST_SEEN]; + +export function DiscoverButton({ dataView }: { dataView: DataView }) { + const { + services: { share, application }, + } = useKibana(); + const { + query: { kuery, entityTypes }, + } = useInventoryParams('/*'); + + const discoverLocator = useMemo( + () => share.url.locators.get('DISCOVER_APP_LOCATOR'), + [share.url.locators] + ); + + const filters: PhrasesFilter[] = []; + + const entityDefinitionField = dataView.getFieldByName(ENTITY_DEFINITION_ID); + + if (entityDefinitionField) { + const entityDefinitionFilter = buildPhrasesFilter( + entityDefinitionField!, + defaultEntityDefinitions, + dataView + ); + filters.push(entityDefinitionFilter); + } + + const entityTypeField = dataView.getFieldByName(ENTITY_TYPE); + + if (entityTypes && entityTypeField) { + const entityTypeFilter = buildPhrasesFilter(entityTypeField, entityTypes, dataView); + filters.push(entityTypeFilter); + } + + const discoverLink = discoverLocator?.getRedirectUrl({ + indexPatternId: dataView?.id ?? '', + columns: ACTIVE_COLUMNS, + query: { query: kuery ?? '', language: 'kuery' }, + filters, + }); + + if (!application.capabilities.discover?.show || !discoverLink) { + return null; + } + + return ( + + {i18n.translate('xpack.inventory.searchBar.discoverButton', { + defaultMessage: 'Open in discover', + })} + + ); +} diff --git a/x-pack/plugins/observability_solution/inventory/public/components/search_bar/index.tsx b/x-pack/plugins/observability_solution/inventory/public/components/search_bar/index.tsx index 0b3beb5e00f8c..46ef45cfc195d 100644 --- a/x-pack/plugins/observability_solution/inventory/public/components/search_bar/index.tsx +++ b/x-pack/plugins/observability_solution/inventory/public/components/search_bar/index.tsx @@ -8,12 +8,14 @@ import { i18n } from '@kbn/i18n'; import { SearchBarOwnProps } from '@kbn/unified-search-plugin/public/search_bar'; import deepEqual from 'fast-deep-equal'; import React, { useCallback, useEffect } from 'react'; +import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import { EntityType } from '../../../common/entities'; import { useInventorySearchBarContext } from '../../context/inventory_search_bar_context_provider'; import { useAdHocInventoryDataView } from '../../hooks/use_adhoc_inventory_data_view'; import { useInventoryParams } from '../../hooks/use_inventory_params'; import { useKibana } from '../../hooks/use_kibana'; import { EntityTypesControls } from './entity_types_controls'; +import { DiscoverButton } from './discover_button'; export function SearchBar() { const { searchBarContentSubject$ } = useInventorySearchBarContext(); @@ -68,18 +70,28 @@ export function SearchBar() { ); return ( - } - onQuerySubmit={handleQuerySubmit} - placeholder={i18n.translate('xpack.inventory.searchBar.placeholder', { - defaultMessage: - 'Search for your entities by name or its metadata (e.g. entity.type : service)', - })} - /> + + + } + onQuerySubmit={handleQuerySubmit} + placeholder={i18n.translate('xpack.inventory.searchBar.placeholder', { + defaultMessage: + 'Search for your entities by name or its metadata (e.g. entity.type : service)', + })} + /> + + + {dataView ? ( + + + + ) : null} + ); } diff --git a/x-pack/plugins/observability_solution/inventory/public/components/shared/add_data_buttons/buttons.tsx b/x-pack/plugins/observability_solution/inventory/public/components/shared/add_data_buttons/buttons.tsx new file mode 100644 index 0000000000000..90f8cdbba0946 --- /dev/null +++ b/x-pack/plugins/observability_solution/inventory/public/components/shared/add_data_buttons/buttons.tsx @@ -0,0 +1,72 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +// Disabling it for now until the EUI team fixes it + +/* eslint-disable @elastic/eui/href-or-on-click */ +import React from 'react'; +import { + OBSERVABILITY_ONBOARDING_LOCATOR, + ObservabilityOnboardingLocatorParams, +} from '@kbn/deeplinks-observability'; +import { EuiButton } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { useKibana } from '../../../hooks/use_kibana'; + +export const addDataTitle = i18n.translate('xpack.inventory.addDataContextMenu.link', { + defaultMessage: 'Add data', +}); +export const addDataItem = i18n.translate('xpack.inventory.add.apm.agent.button.', { + defaultMessage: 'Add data', +}); + +export const associateServiceLogsItem = i18n.translate( + 'xpack.inventory.associate.service.logs.button', + { + defaultMessage: 'Associate existing service logs', + } +); + +export const ASSOCIATE_LOGS_LINK = 'https://ela.st/new-experience-associate-service-logs'; + +export function AssociateServiceLogs({ onClick }: { onClick?: () => void }) { + return ( + + {associateServiceLogsItem} + + ); +} + +export function AddData({ onClick }: { onClick?: () => void }) { + const { + services: { share }, + } = useKibana(); + const onboardingLocator = share.url.locators.get( + OBSERVABILITY_ONBOARDING_LOCATOR + ); + return ( + + {addDataItem} + + ); +} diff --git a/x-pack/plugins/observability_solution/inventory/public/pages/inventory_page/index.tsx b/x-pack/plugins/observability_solution/inventory/public/pages/inventory_page/index.tsx index 2fcb147cbe61f..7af9a9fc21acc 100644 --- a/x-pack/plugins/observability_solution/inventory/public/pages/inventory_page/index.tsx +++ b/x-pack/plugins/observability_solution/inventory/public/pages/inventory_page/index.tsx @@ -7,6 +7,7 @@ import { EuiDataGridSorting } from '@elastic/eui'; import React from 'react'; import useEffectOnce from 'react-use/lib/useEffectOnce'; +import { EntityType } from '../../../common/entities'; import { EntitiesGrid } from '../../components/entities_grid'; import { useInventorySearchBarContext } from '../../context/inventory_search_bar_context_provider'; import { useInventoryAbortableAsync } from '../../hooks/use_inventory_abortable_async'; @@ -81,6 +82,17 @@ export function InventoryPage() { }); } + function handleTypeFilter(entityType: EntityType) { + inventoryRoute.push('/', { + path: {}, + query: { + ...query, + // Override the current entity types + entityTypes: [entityType], + }, + }); + } + return ( ); } diff --git a/x-pack/plugins/observability_solution/inventory/public/services/telemetry/types.ts b/x-pack/plugins/observability_solution/inventory/public/services/telemetry/types.ts index 494391aa1a7c1..e5fdf162b750c 100644 --- a/x-pack/plugins/observability_solution/inventory/public/services/telemetry/types.ts +++ b/x-pack/plugins/observability_solution/inventory/public/services/telemetry/types.ts @@ -12,7 +12,7 @@ export interface TelemetryServiceSetupParams { } export interface InventoryAddDataParams { - view: 'add_data_button'; + view: 'add_data_button' | 'empty_state'; journey?: 'add_data' | 'associate_existing_service_logs'; } diff --git a/x-pack/plugins/observability_solution/inventory/server/routes/entities/query_helper.ts b/x-pack/plugins/observability_solution/inventory/server/routes/entities/query_helper.ts index c27e5ffd103aa..cb0257010f3c0 100644 --- a/x-pack/plugins/observability_solution/inventory/server/routes/entities/query_helper.ts +++ b/x-pack/plugins/observability_solution/inventory/server/routes/entities/query_helper.ts @@ -5,23 +5,13 @@ * 2.0. */ -import { EntityType } from '../../../common/entities'; +import { EntityType, defaultEntityTypes, defaultEntityDefinitions } from '../../../common/entities'; import { ENTITY_DEFINITION_ID, ENTITY_TYPE } from '../../../common/es_fields/entities'; -const defaultEntityTypes: EntityType[] = ['service', 'host', 'container']; - export const getEntityTypesWhereClause = (entityTypes: EntityType[] = defaultEntityTypes) => `WHERE ${ENTITY_TYPE} IN (${entityTypes.map((entityType) => `"${entityType}"`).join()})`; -const BUILTIN_SERVICES_FROM_ECS_DATA = 'builtin_services_from_ecs_data'; -const BUILTIN_HOSTS_FROM_ECS_DATA = 'builtin_hosts_from_ecs_data'; -const BUILTIN_CONTAINERS_FROM_ECS_DATA = 'builtin_containers_from_ecs_data'; - export const getEntityDefinitionIdWhereClause = () => - `WHERE ${ENTITY_DEFINITION_ID} IN (${[ - BUILTIN_SERVICES_FROM_ECS_DATA, - BUILTIN_HOSTS_FROM_ECS_DATA, - BUILTIN_CONTAINERS_FROM_ECS_DATA, - ] + `WHERE ${ENTITY_DEFINITION_ID} IN (${[...defaultEntityDefinitions] .map((buildin) => `"${buildin}"`) .join()})`; diff --git a/x-pack/plugins/observability_solution/inventory/server/routes/get_global_inventory_route_repository.ts b/x-pack/plugins/observability_solution/inventory/server/routes/get_global_inventory_route_repository.ts index 190178cb25a95..598b69db90e5a 100644 --- a/x-pack/plugins/observability_solution/inventory/server/routes/get_global_inventory_route_repository.ts +++ b/x-pack/plugins/observability_solution/inventory/server/routes/get_global_inventory_route_repository.ts @@ -6,10 +6,12 @@ */ import { entitiesRoutes } from './entities/route'; +import { hasDataRoutes } from './has_data/route'; export function getGlobalInventoryServerRouteRepository() { return { ...entitiesRoutes, + ...hasDataRoutes, }; } diff --git a/x-pack/plugins/observability_solution/inventory/server/routes/has_data/get_has_data.ts b/x-pack/plugins/observability_solution/inventory/server/routes/has_data/get_has_data.ts new file mode 100644 index 0000000000000..465e720938b32 --- /dev/null +++ b/x-pack/plugins/observability_solution/inventory/server/routes/has_data/get_has_data.ts @@ -0,0 +1,39 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import type { Logger } from '@kbn/core/server'; +import { esqlResultToPlainObjects } from '@kbn/observability-utils/es/utils/esql_result_to_plain_objects'; +import { type ObservabilityElasticsearchClient } from '@kbn/observability-utils/es/client/create_observability_es_client'; +import { + getEntityDefinitionIdWhereClause, + getEntityTypesWhereClause, +} from '../entities/query_helper'; +import { ENTITIES_LATEST_ALIAS } from '../../../common/entities'; + +export async function getHasData({ + inventoryEsClient, + logger, +}: { + inventoryEsClient: ObservabilityElasticsearchClient; + logger: Logger; +}) { + try { + const esqlResults = await inventoryEsClient.esql('get_has_data', { + query: `FROM ${ENTITIES_LATEST_ALIAS} + | ${getEntityDefinitionIdWhereClause()} + | ${getEntityTypesWhereClause()} + | STATS _count = COUNT(*) + | LIMIT 1`, + }); + + const totalCount = esqlResultToPlainObjects(esqlResults)?.[0]._count ?? 0; + + return { hasData: totalCount > 0 }; + } catch (e) { + logger.error(e); + return { hasData: false }; + } +} diff --git a/x-pack/plugins/observability_solution/inventory/server/routes/has_data/route.ts b/x-pack/plugins/observability_solution/inventory/server/routes/has_data/route.ts new file mode 100644 index 0000000000000..aae8be7f846f8 --- /dev/null +++ b/x-pack/plugins/observability_solution/inventory/server/routes/has_data/route.ts @@ -0,0 +1,34 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { createObservabilityEsClient } from '@kbn/observability-utils/es/client/create_observability_es_client'; +import { INVENTORY_APP_ID } from '@kbn/deeplinks-observability/constants'; +import { createInventoryServerRoute } from '../create_inventory_server_route'; +import { getHasData } from './get_has_data'; + +export const hasDataRoute = createInventoryServerRoute({ + endpoint: 'GET /internal/inventory/has_data', + options: { + tags: ['access:inventory'], + }, + handler: async ({ context, logger }) => { + const coreContext = await context.core; + const inventoryEsClient = createObservabilityEsClient({ + client: coreContext.elasticsearch.client.asCurrentUser, + logger, + plugin: `@kbn/${INVENTORY_APP_ID}-plugin`, + }); + + return getHasData({ + inventoryEsClient, + logger, + }); + }, +}); + +export const hasDataRoutes = { + ...hasDataRoute, +}; diff --git a/x-pack/plugins/observability_solution/inventory/tsconfig.json b/x-pack/plugins/observability_solution/inventory/tsconfig.json index 009221ad0c0ca..c4b6b55d41f4c 100644 --- a/x-pack/plugins/observability_solution/inventory/tsconfig.json +++ b/x-pack/plugins/observability_solution/inventory/tsconfig.json @@ -39,6 +39,8 @@ "@kbn/unified-search-plugin", "@kbn/data-plugin", "@kbn/core-analytics-browser", - "@kbn/core-http-browser" + "@kbn/core-http-browser", + "@kbn/es-query", + "@kbn/shared-svg" ] } diff --git a/x-pack/plugins/observability_solution/investigate_app/public/components/investigation_edit_form/fields/external_incident_field.tsx b/x-pack/plugins/observability_solution/investigate_app/public/components/investigation_edit_form/fields/external_incident_field.tsx new file mode 100644 index 0000000000000..faeebb34ccb9c --- /dev/null +++ b/x-pack/plugins/observability_solution/investigate_app/public/components/investigation_edit_form/fields/external_incident_field.tsx @@ -0,0 +1,45 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { EuiFormRow, EuiFieldText } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import React from 'react'; +import { Controller, useFormContext } from 'react-hook-form'; +import { InvestigationForm } from '../investigation_edit_form'; + +const I18N_LABEL = i18n.translate( + 'xpack.investigateApp.investigationEditForm.externalIncidentUrlLabel', + { defaultMessage: 'External incident URL' } +); + +export function ExternalIncidentField() { + const { control, getFieldState } = useFormContext(); + + return ( + + ( + + )} + /> + + ); +} diff --git a/x-pack/plugins/observability_solution/investigate_app/public/components/investigation_edit_form/form_helper.ts b/x-pack/plugins/observability_solution/investigate_app/public/components/investigation_edit_form/form_helper.ts new file mode 100644 index 0000000000000..102b6d81d67b6 --- /dev/null +++ b/x-pack/plugins/observability_solution/investigate_app/public/components/investigation_edit_form/form_helper.ts @@ -0,0 +1,43 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { CreateInvestigationParams, UpdateInvestigationParams } from '@kbn/investigation-shared'; +import { v4 as uuidv4 } from 'uuid'; +import type { InvestigationForm } from './investigation_edit_form'; + +export function toCreateInvestigationParams(data: InvestigationForm): CreateInvestigationParams { + return { + id: uuidv4(), + title: data.title, + params: { + timeRange: { + from: new Date(new Date().getTime() - 30 * 60 * 1000).getTime(), + to: new Date().getTime(), + }, + }, + tags: data.tags, + origin: { + type: 'blank', + }, + externalIncidentUrl: + data.externalIncidentUrl && data.externalIncidentUrl.trim().length > 0 + ? data.externalIncidentUrl + : null, + }; +} + +export function toUpdateInvestigationParams(data: InvestigationForm): UpdateInvestigationParams { + return { + title: data.title, + status: data.status, + tags: data.tags, + externalIncidentUrl: + data.externalIncidentUrl && data.externalIncidentUrl.trim().length > 0 + ? data.externalIncidentUrl + : null, + }; +} diff --git a/x-pack/plugins/observability_solution/investigate_app/public/components/investigation_edit_form/investigation_edit_form.tsx b/x-pack/plugins/observability_solution/investigate_app/public/components/investigation_edit_form/investigation_edit_form.tsx index 40d845533fe0a..968e5e85320a0 100644 --- a/x-pack/plugins/observability_solution/investigate_app/public/components/investigation_edit_form/investigation_edit_form.tsx +++ b/x-pack/plugins/observability_solution/investigate_app/public/components/investigation_edit_form/investigation_edit_form.tsx @@ -24,20 +24,22 @@ import { InvestigationResponse } from '@kbn/investigation-shared'; import { pick } from 'lodash'; import React from 'react'; import { Controller, FormProvider, useForm } from 'react-hook-form'; -import { v4 as uuidv4 } from 'uuid'; import { paths } from '../../../common/paths'; import { useCreateInvestigation } from '../../hooks/use_create_investigation'; import { useFetchInvestigation } from '../../hooks/use_fetch_investigation'; import { useKibana } from '../../hooks/use_kibana'; import { useUpdateInvestigation } from '../../hooks/use_update_investigation'; import { InvestigationNotFound } from '../investigation_not_found/investigation_not_found'; +import { ExternalIncidentField } from './fields/external_incident_field'; import { StatusField } from './fields/status_field'; import { TagsField } from './fields/tags_field'; +import { toCreateInvestigationParams, toUpdateInvestigationParams } from './form_helper'; export interface InvestigationForm { title: string; status: InvestigationResponse['status']; tags: string[]; + externalIncidentUrl: string | null; } interface Props { @@ -64,8 +66,17 @@ export function InvestigationEditForm({ investigationId, onClose }: Props) { const { mutateAsync: createInvestigation } = useCreateInvestigation(); const methods = useForm({ - defaultValues: { title: 'New investigation', status: 'triage', tags: [] }, - values: investigation ? pick(investigation, ['title', 'status', 'tags']) : undefined, + defaultValues: { + title: i18n.translate('xpack.investigateApp.investigationDetailsPage.newInvestigationLabel', { + defaultMessage: 'New investigation', + }), + status: 'triage', + tags: [], + externalIncidentUrl: null, + }, + values: investigation + ? pick(investigation, ['title', 'status', 'tags', 'externalIncidentUrl']) + : undefined, mode: 'all', }); @@ -81,24 +92,11 @@ export function InvestigationEditForm({ investigationId, onClose }: Props) { if (isEditing) { await updateInvestigation({ investigationId: investigationId!, - payload: { title: data.title, status: data.status, tags: data.tags }, + payload: toUpdateInvestigationParams(data), }); onClose(); } else { - const resp = await createInvestigation({ - id: uuidv4(), - title: data.title, - params: { - timeRange: { - from: new Date(new Date().getTime() - 30 * 60 * 1000).getTime(), - to: new Date().getTime(), - }, - }, - tags: data.tags, - origin: { - type: 'blank', - }, - }); + const resp = await createInvestigation(toCreateInvestigationParams(data)); navigateToUrl(basePath.prepend(paths.investigationDetails(resp.id))); } }; @@ -157,6 +155,9 @@ export function InvestigationEditForm({ investigationId, onClose }: Props) { + + +
diff --git a/x-pack/plugins/observability_solution/investigate_app/public/pages/details/components/investigation_details/investigation_details.tsx b/x-pack/plugins/observability_solution/investigate_app/public/pages/details/components/investigation_details/investigation_details.tsx index 0a2952f09e1ee..c5f30795535b4 100644 --- a/x-pack/plugins/observability_solution/investigate_app/public/pages/details/components/investigation_details/investigation_details.tsx +++ b/x-pack/plugins/observability_solution/investigate_app/public/pages/details/components/investigation_details/investigation_details.tsx @@ -70,7 +70,7 @@ export function InvestigationDetails({ user }: Props) { ], }} > - + diff --git a/x-pack/plugins/observability_solution/investigate_app/public/pages/details/components/investigation_header/external_incident_button.tsx b/x-pack/plugins/observability_solution/investigate_app/public/pages/details/components/investigation_header/external_incident_button.tsx new file mode 100644 index 0000000000000..911f4e0661fe7 --- /dev/null +++ b/x-pack/plugins/observability_solution/investigate_app/public/pages/details/components/investigation_header/external_incident_button.tsx @@ -0,0 +1,35 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { EuiButtonEmpty, EuiText } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import React from 'react'; +import { useInvestigation } from '../../contexts/investigation_context'; + +export function ExternalIncidentButton() { + const { investigation } = useInvestigation(); + + if (!investigation?.externalIncidentUrl) { + return null; + } + + return ( + + + {i18n.translate('xpack.investigateApp.investigationHeader.externalIncidentTextLabel', { + defaultMessage: 'External incident', + })} + + + ); +} diff --git a/x-pack/plugins/observability_solution/investigate_app/public/pages/details/components/investigation_header/investigation_header.tsx b/x-pack/plugins/observability_solution/investigate_app/public/pages/details/components/investigation_header/investigation_header.tsx index 339f2ce1be8e7..d6bfb1c496793 100644 --- a/x-pack/plugins/observability_solution/investigate_app/public/pages/details/components/investigation_header/investigation_header.tsx +++ b/x-pack/plugins/observability_solution/investigate_app/public/pages/details/components/investigation_header/investigation_header.tsx @@ -6,14 +6,15 @@ */ import { EuiFlexGroup, EuiFlexItem, EuiText } from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n-react'; // eslint-disable-next-line import/no-extraneous-dependencies import { formatDistance } from 'date-fns'; -import { FormattedMessage } from '@kbn/i18n-react'; import React from 'react'; import { InvestigationStatusBadge } from '../../../../components/investigation_status_badge/investigation_status_badge'; import { InvestigationTag } from '../../../../components/investigation_tag/investigation_tag'; import { useInvestigation } from '../../contexts/investigation_context'; import { AlertDetailsButton } from './alert_details_button'; +import { ExternalIncidentButton } from './external_incident_button'; export function InvestigationHeader() { const { investigation } = useInvestigation(); @@ -62,6 +63,12 @@ export function InvestigationHeader() { />
+ + {!!investigation.externalIncidentUrl && ( + + + + )}
); diff --git a/x-pack/plugins/observability_solution/investigate_app/public/pages/details/components/investigation_items/investigation_items.tsx b/x-pack/plugins/observability_solution/investigate_app/public/pages/details/components/investigation_items/investigation_items.tsx index c15cdf3d3f7f3..f9398038173cd 100644 --- a/x-pack/plugins/observability_solution/investigate_app/public/pages/details/components/investigation_items/investigation_items.tsx +++ b/x-pack/plugins/observability_solution/investigate_app/public/pages/details/components/investigation_items/investigation_items.tsx @@ -18,7 +18,7 @@ export function InvestigationItems() { return ( - + + - - - - + + + diff --git a/x-pack/plugins/observability_solution/investigate_app/server/services/investigation_repository.ts b/x-pack/plugins/observability_solution/investigate_app/server/services/investigation_repository.ts index ffefe757c7c72..3e0b5e8fe8b87 100644 --- a/x-pack/plugins/observability_solution/investigate_app/server/services/investigation_repository.ts +++ b/x-pack/plugins/observability_solution/investigate_app/server/services/investigation_repository.ts @@ -45,9 +45,7 @@ export function investigationRepositoryFactory({ logger: Logger; }): InvestigationRepository { function toInvestigation(stored: StoredInvestigation): Investigation | undefined { - const result = investigationSchema.safeParse({ - ...stored, - }); + const result = investigationSchema.safeParse(stored); if (!result.success) { logger.error(`Invalid stored Investigation with id [${stored.id}]`); diff --git a/x-pack/plugins/observability_solution/observability/public/pages/alert_details/helpers/get_related_alerts_query.test.ts b/x-pack/plugins/observability_solution/observability/common/utils/alerting/get_related_alerts_query.test.ts similarity index 100% rename from x-pack/plugins/observability_solution/observability/public/pages/alert_details/helpers/get_related_alerts_query.test.ts rename to x-pack/plugins/observability_solution/observability/common/utils/alerting/get_related_alerts_query.test.ts diff --git a/x-pack/plugins/observability_solution/observability/public/pages/alert_details/helpers/get_related_alerts_query.ts b/x-pack/plugins/observability_solution/observability/common/utils/alerting/get_related_alerts_query.ts similarity index 94% rename from x-pack/plugins/observability_solution/observability/public/pages/alert_details/helpers/get_related_alerts_query.ts rename to x-pack/plugins/observability_solution/observability/common/utils/alerting/get_related_alerts_query.ts index c319af70db13f..cb2ad27bc8981 100644 --- a/x-pack/plugins/observability_solution/observability/public/pages/alert_details/helpers/get_related_alerts_query.ts +++ b/x-pack/plugins/observability_solution/observability/common/utils/alerting/get_related_alerts_query.ts @@ -5,7 +5,7 @@ * 2.0. */ -import type { Group } from '../../../../common/typings'; +import type { Group } from '../../typings'; export interface Query { query: string; diff --git a/x-pack/plugins/observability_solution/observability/public/components/annotations/components/annotation_range.tsx b/x-pack/plugins/observability_solution/observability/public/components/annotations/components/annotation_range.tsx index 5dada5bde32a2..632e89906be25 100644 --- a/x-pack/plugins/observability_solution/observability/public/components/annotations/components/annotation_range.tsx +++ b/x-pack/plugins/observability_solution/observability/public/components/annotations/components/annotation_range.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { EuiFormRow, EuiFormControlLayout, EuiFormLabel, EuiDatePicker } from '@elastic/eui'; +import { EuiFormRow, EuiFormLabel, EuiDatePicker } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { Controller, useFormContext } from 'react-hook-form'; import React from 'react'; @@ -37,70 +37,62 @@ export function AnnotationRange() { display="rowCompressed" fullWidth > - - {i18n.translate('xpack.observability.annotationRange.fromFormLabelLabel', { - defaultMessage: 'From', - })} - - } - > - { - const { value, ref, ...rest } = field; - return ( - - ); - }} - /> - + { + const { value, ref, ...rest } = field; + return ( + + {i18n.translate('xpack.observability.annotationRange.fromFormLabelLabel', { + defaultMessage: 'From', + })} + + } + dateFormat={dateFormat} + {...rest} + /> + ); + }} + /> - - {i18n.translate('xpack.observability.annotationRange.toFormLabelLabel', { - defaultMessage: 'To', - })} - - } - > - { - const { value, ref, ...rest } = field; - return ( - - ); - }} - /> - + { + const { value, ref, ...rest } = field; + return ( + + {i18n.translate('xpack.observability.annotationRange.toFormLabelLabel', { + defaultMessage: 'To', + })} + + } + dateFormat={dateFormat} + {...rest} + /> + ); + }} + /> ); diff --git a/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/alert_details_app_section.test.tsx b/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/alert_details_app_section.test.tsx index a98a519a1606a..553ca19787d4f 100644 --- a/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/alert_details_app_section.test.tsx +++ b/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/alert_details_app_section.test.tsx @@ -78,6 +78,7 @@ jest.mock('../../../../utils/kibana_react', () => ({ describe('AlertDetailsAppSection', () => { const queryClient = new QueryClient(); const mockedSetAlertSummaryFields = jest.fn(); + const mockedSetRelatedAlertsKuery = jest.fn(); const renderComponent = ( alert: Partial = {}, @@ -90,6 +91,7 @@ describe('AlertDetailsAppSection', () => { alert={buildCustomThresholdAlert(alert, alertFields)} rule={buildCustomThresholdRule()} setAlertSummaryFields={mockedSetAlertSummaryFields} + setRelatedAlertsKuery={mockedSetRelatedAlertsKuery} /> @@ -140,6 +142,15 @@ describe('AlertDetailsAppSection', () => { expect(mockedRuleConditionChart.mock.calls[0]).toMatchSnapshot(); }); + it('should set relatedAlertsKuery', async () => { + renderComponent(); + + expect(mockedSetAlertSummaryFields).toBeCalledTimes(2); + expect(mockedSetRelatedAlertsKuery).toHaveBeenLastCalledWith( + '(tags: "tag 1" or tags: "tag 2") or (host.name: "host-1" or kibana.alert.group.value: "host-1")' + ); + }); + it('should render title on condition charts', async () => { const result = renderComponent(); diff --git a/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/alert_details_app_section.tsx b/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/alert_details_app_section.tsx index 83aa8cf2a35d3..cb7cbd6fca914 100644 --- a/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/alert_details_app_section.tsx +++ b/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/alert_details_app_section.tsx @@ -32,6 +32,7 @@ import moment from 'moment'; import { LOGS_EXPLORER_LOCATOR_ID, LogsExplorerLocatorParams } from '@kbn/deeplinks-observability'; import { TimeRange } from '@kbn/es-query'; import { getGroupFilters } from '../../../../../common/custom_threshold_rule/helpers/get_group'; +import { getRelatedAlertKuery } from '../../../../../common/utils/alerting/get_related_alerts_query'; import { useLicense } from '../../../../hooks/use_license'; import { useKibana } from '../../../../utils/kibana_react'; import { metricValueFormatter } from '../../../../../common/custom_threshold_rule/metric_value_formatter'; @@ -49,6 +50,7 @@ interface AppSectionProps { alert: CustomThresholdAlert; rule: CustomThresholdRule; setAlertSummaryFields: React.Dispatch>; + setRelatedAlertsKuery: React.Dispatch>; } // eslint-disable-next-line import/no-default-export @@ -56,6 +58,7 @@ export default function AlertDetailsAppSection({ alert, rule, setAlertSummaryFields, + setRelatedAlertsKuery, }: AppSectionProps) { const services = useKibana().services; const { @@ -79,6 +82,7 @@ export default function AlertDetailsAppSection({ const alertStart = alert.fields[ALERT_START]; const alertEnd = alert.fields[ALERT_END]; const groups = alert.fields[ALERT_GROUP]; + const tags = alert.fields.tags; const chartTitleAndTooltip: Array<{ title: string; tooltip: string }> = []; @@ -97,7 +101,6 @@ export default function AlertDetailsAppSection({ icon: 'alert', id: 'custom_threshold_alert_start_annotation', }; - const alertRangeAnnotation: RangeEventAnnotationConfig = { label: `${alertEnd ? 'Alert duration' : 'Active alert'}`, type: 'manual', @@ -109,10 +112,13 @@ export default function AlertDetailsAppSection({ color: chroma(transparentize('#F04E981A', 0.2)).hex().toUpperCase(), id: `custom_threshold_${alertEnd ? 'recovered' : 'active'}_alert_range_annotation`, }; - const annotations: EventAnnotationConfig[] = []; annotations.push(alertStartAnnotation, alertRangeAnnotation); + useEffect(() => { + setRelatedAlertsKuery(getRelatedAlertKuery(tags, groups)); + }, [groups, setRelatedAlertsKuery, tags]); + useEffect(() => { setTimeRange(getPaddedAlertTimeRange(alertStart!, alertEnd)); }, [alertStart, alertEnd]); diff --git a/x-pack/plugins/observability_solution/observability/public/navigation_tree.ts b/x-pack/plugins/observability_solution/observability/public/navigation_tree.ts index 6d63c9c89eaf1..309d2f2264300 100644 --- a/x-pack/plugins/observability_solution/observability/public/navigation_tree.ts +++ b/x-pack/plugins/observability_solution/observability/public/navigation_tree.ts @@ -272,6 +272,7 @@ export function createNavTree(pluginsStart: ObservabilityPublicPluginsStart) { breadcrumbStatus: 'hidden', children: [ { + id: 'stack_management', // This id can't be changed as we use it to open the panel programmatically link: 'management', title: i18n.translate('xpack.observability.obltNav.stackManagement', { defaultMessage: 'Stack Management', diff --git a/x-pack/plugins/observability_solution/observability/public/pages/alert_details/alert_details.tsx b/x-pack/plugins/observability_solution/observability/public/pages/alert_details/alert_details.tsx index 00dd03734b9b0..9561dc37b3e7f 100644 --- a/x-pack/plugins/observability_solution/observability/public/pages/alert_details/alert_details.tsx +++ b/x-pack/plugins/observability_solution/observability/public/pages/alert_details/alert_details.tsx @@ -23,7 +23,6 @@ import { ALERT_RULE_UUID, ALERT_STATUS, ALERT_STATUS_UNTRACKED, - ALERT_GROUP, } from '@kbn/rule-data-utils'; import { RuleTypeModel } from '@kbn/triggers-actions-ui-plugin/public'; import { useBreadcrumbs } from '@kbn/observability-shared-plugin/public'; @@ -31,7 +30,6 @@ import dedent from 'dedent'; import { AlertFieldsTable } from '@kbn/alerts-ui-shared'; import { css } from '@emotion/react'; import { omit } from 'lodash'; -import type { Group } from '../../../common/typings'; import { observabilityFeatureId } from '../../../common'; import { RelatedAlerts } from './components/related_alerts'; import { useKibana } from '../../utils/kibana_react'; @@ -98,6 +96,7 @@ export function AlertDetails() { const [alertStatus, setAlertStatus] = useState(); const { euiTheme } = useEuiTheme(); + const [relatedAlertsKuery, setRelatedAlertsKuery] = useState(); const [activeTabId, setActiveTabId] = useState(() => { const searchParams = new URLSearchParams(search); const urlTabId = searchParams.get(ALERT_DETAILS_TAB_URL_STORAGE_KEY); @@ -213,6 +212,7 @@ export function AlertDetails() { rule={rule} timeZone={timeZone} setAlertSummaryFields={setSummaryFields} + setRelatedAlertsKuery={setRelatedAlertsKuery} /> - ), - }, - ]; + content: , + }); + } return ( (); - const alertStart = alert?.fields[ALERT_START]; - const alertEnd = alert?.fields[ALERT_END]; - const alertId = alert?.fields[ALERT_UUID]; + const alertStart = alert.fields[ALERT_START]; + const alertEnd = alert.fields[ALERT_END]; + const alertId = alert.fields[ALERT_UUID]; const defaultQuery = useRef([ { query: `not kibana.alert.uuid: ${alertId}`, language: 'kuery' }, @@ -93,7 +90,7 @@ export function InternalRelatedAlerts({ alert, groups, tags }: Props) { defaultSearchQueries={defaultQuery.current} defaultState={{ ...defaultState, - kuery: getRelatedAlertKuery(tags, groups) ?? '', + kuery, }} /> diff --git a/x-pack/plugins/observability_solution/observability/public/utils/investigation_item_helper.ts b/x-pack/plugins/observability_solution/observability/public/utils/investigation_item_helper.ts index 5ffaa234b3d97..cddf3290ed370 100644 --- a/x-pack/plugins/observability_solution/observability/public/utils/investigation_item_helper.ts +++ b/x-pack/plugins/observability_solution/observability/public/utils/investigation_item_helper.ts @@ -22,12 +22,12 @@ const AggMappingForLens: Record = { const genLensEqForCustomThresholdRule = (criterion: MetricExpression) => { const metricNameResolver: Record = {}; - criterion.metrics.forEach( - (metric: CustomThresholdExpressionMetric) => - (metricNameResolver[metric.name] = `${ - AggMappingForLens[metric.aggType] ? AggMappingForLens[metric.aggType] : metric.aggType - }(${metric.field ? metric.field : metric.filter ? metric.filter : ''})`) - ); + criterion.metrics.forEach((metric: CustomThresholdExpressionMetric) => { + const metricFilter = metric.filter ? `kql='${metric.filter}'` : ''; + metricNameResolver[metric.name] = `${ + AggMappingForLens[metric.aggType] ? AggMappingForLens[metric.aggType] : metric.aggType + }(${metric.field ? metric.field : metricFilter})`; + }); let equation = criterion.equation ? criterion.equation diff --git a/x-pack/plugins/observability_solution/profiling/public/components/normalization_menu/index.tsx b/x-pack/plugins/observability_solution/profiling/public/components/normalization_menu/index.tsx index 778033e89c7e3..4f31857aa8827 100644 --- a/x-pack/plugins/observability_solution/profiling/public/components/normalization_menu/index.tsx +++ b/x-pack/plugins/observability_solution/profiling/public/components/normalization_menu/index.tsx @@ -187,26 +187,22 @@ export function NormalizationMenu(props: Props) { - {SCALE_LABEL}} - > - { - if (mode === NormalizationMode.Scale) { - setOptions((prevOptions) => ({ - ...prevOptions, - baselineScale: e.target.valueAsNumber, - })); - } - }} - disabled={mode === NormalizationMode.Time} - /> - + data-test-subj="profilingNormalizationMenuFieldNumber" + id={baselineScaleFactorInputId} + value={baseline} + onChange={(e) => { + if (mode === NormalizationMode.Scale) { + setOptions((prevOptions) => ({ + ...prevOptions, + baselineScale: e.target.valueAsNumber, + })); + } + }} + disabled={mode === NormalizationMode.Time} + />
@@ -216,26 +212,22 @@ export function NormalizationMenu(props: Props) {
- {SCALE_LABEL}} - > - { - if (mode === NormalizationMode.Scale) { - setOptions((prevOptions) => ({ - ...prevOptions, - comparisonScale: e.target.valueAsNumber, - })); - } - }} - disabled={mode === NormalizationMode.Time} - /> - + data-test-subj="profilingNormalizationMenuFieldNumber" + id={comparisonScaleFactorInputId} + value={comparison} + onChange={(e) => { + if (mode === NormalizationMode.Scale) { + setOptions((prevOptions) => ({ + ...prevOptions, + comparisonScale: e.target.valueAsNumber, + })); + } + }} + disabled={mode === NormalizationMode.Time} + /> { expect(await screen.findByTestId('compactView')).toBeTruthy(); fireEvent.click(screen.getByTestId('compactView')); - (await screen.findAllByLabelText('All actions')).at(0)?.click(); + (await screen.findByLabelText('All actions, row 1')).click(); await waitForEuiPopoverOpen(); @@ -311,7 +311,7 @@ describe('SLOs Page', () => { }); expect(await screen.findByTestId('compactView')).toBeTruthy(); fireEvent.click(screen.getByTestId('compactView')); - screen.getAllByLabelText('All actions').at(0)?.click(); + screen.getByLabelText('All actions, row 1').click(); await waitForEuiPopoverOpen(); @@ -337,7 +337,7 @@ describe('SLOs Page', () => { }); expect(await screen.findByTestId('compactView')).toBeTruthy(); fireEvent.click(screen.getByTestId('compactView')); - screen.getAllByLabelText('All actions').at(0)?.click(); + screen.getByLabelText('All actions, row 1').click(); await waitForEuiPopoverOpen(); @@ -364,7 +364,7 @@ describe('SLOs Page', () => { expect(await screen.findByTestId('compactView')).toBeTruthy(); fireEvent.click(screen.getByTestId('compactView')); - (await screen.findAllByLabelText('All actions')).at(0)?.click(); + screen.getByLabelText('All actions, row 1').click(); await waitForEuiPopoverOpen(); @@ -396,7 +396,7 @@ describe('SLOs Page', () => { expect(await screen.findByTestId('compactView')).toBeTruthy(); fireEvent.click(screen.getByTestId('compactView')); - screen.getAllByLabelText('All actions').at(0)?.click(); + screen.getByLabelText('All actions, row 1').click(); await waitForEuiPopoverOpen(); diff --git a/x-pack/plugins/observability_solution/slo/server/lib/rules/slo_burn_rate/executor.test.ts b/x-pack/plugins/observability_solution/slo/server/lib/rules/slo_burn_rate/executor.test.ts index 28fdae0c12f38..32090cf88390c 100644 --- a/x-pack/plugins/observability_solution/slo/server/lib/rules/slo_burn_rate/executor.test.ts +++ b/x-pack/plugins/observability_solution/slo/server/lib/rules/slo_burn_rate/executor.test.ts @@ -25,9 +25,7 @@ import { import { ISearchStartSearchSource } from '@kbn/data-plugin/public'; import { dataViewPluginMocks } from '@kbn/data-views-plugin/public/mocks'; import { MockedLogger } from '@kbn/logging-mocks'; -import { AlertsLocatorParams } from '@kbn/observability-plugin/common'; import { Rule } from '@kbn/alerting-plugin/common'; -import { LocatorPublic } from '@kbn/share-plugin/common'; import { SharePluginStart } from '@kbn/share-plugin/server'; import { sloDefinitionSchema } from '@kbn/slo-schema'; import { get } from 'lodash'; @@ -148,13 +146,6 @@ describe('BurnRateRuleExecutor', () => { let soClientMock: jest.Mocked; let loggerMock: jest.Mocked; const basePathMock = { publicBaseUrl: 'https://kibana.dev' } as IBasePath; - const alertsLocatorMock = { - getLocation: jest.fn().mockImplementation(() => ({ - path: 'mockedAlertsLocator > getLocation', - })), - } as any as LocatorPublic; - const ISO_DATE_REGEX = - /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)((-(\d{2}):(\d{2})|Z)?)$/; let searchSourceClientMock: jest.Mocked; let uiSettingsClientMock: jest.Mocked; @@ -375,7 +366,6 @@ describe('BurnRateRuleExecutor', () => { const executor = getRuleExecutor({ basePath: basePathMock, - alertsLocator: alertsLocatorMock, }); await executor({ @@ -456,7 +446,7 @@ describe('BurnRateRuleExecutor', () => { burnRateThreshold: 2, reason: 'CRITICAL: The burn rate for the past 1h is 2.3 and for the past 5m is 2.1 for foo,asia. Alert when above 2 for both windows', - alertDetailsUrl: 'mockedAlertsLocator > getLocation', + alertDetailsUrl: 'https://kibana.dev/s/irrelevant/app/observability/alerts/uuid-foo,asia', }), }); expect(servicesMock.alertsClient?.setAlertData).toHaveBeenNthCalledWith(2, { @@ -467,23 +457,9 @@ describe('BurnRateRuleExecutor', () => { burnRateThreshold: 2, reason: 'CRITICAL: The burn rate for the past 1h is 2.5 and for the past 5m is 2.2 for bar,asia. Alert when above 2 for both windows', - alertDetailsUrl: 'mockedAlertsLocator > getLocation', + alertDetailsUrl: 'https://kibana.dev/s/irrelevant/app/observability/alerts/uuid-bar,asia', }), }); - - expect(alertsLocatorMock.getLocation).toHaveBeenCalledTimes(2); - expect(alertsLocatorMock.getLocation).toHaveBeenNthCalledWith(1, { - baseUrl: 'https://kibana.dev', - kuery: 'kibana.alert.uuid: "uuid-foo,asia"', - rangeFrom: expect.stringMatching(ISO_DATE_REGEX), - spaceId: 'irrelevant', - }); - expect(alertsLocatorMock.getLocation).toHaveBeenNthCalledWith(2, { - baseUrl: 'https://kibana.dev', - kuery: 'kibana.alert.uuid: "uuid-bar,asia"', - rangeFrom: expect.stringMatching(ISO_DATE_REGEX), - spaceId: 'irrelevant', - }); }); it('schedules a suppressed alert when both windows of first window definition burn rate have reached the threshold but the dependency matches', async () => { @@ -539,7 +515,6 @@ describe('BurnRateRuleExecutor', () => { const executor = getRuleExecutor({ basePath: basePathMock, - alertsLocator: alertsLocatorMock, }); await executor({ @@ -609,7 +584,7 @@ describe('BurnRateRuleExecutor', () => { burnRateThreshold: 2, reason: 'SUPPRESSED - CRITICAL: The burn rate for the past 1h is 2.3 and for the past 5m is 2.1 for foo. Alert when above 2 for both windows', - alertDetailsUrl: 'mockedAlertsLocator > getLocation', + alertDetailsUrl: 'https://kibana.dev/s/irrelevant/app/observability/alerts/uuid-foo', }), }); expect(servicesMock.alertsClient?.setAlertData).toHaveBeenNthCalledWith(2, { @@ -620,16 +595,9 @@ describe('BurnRateRuleExecutor', () => { burnRateThreshold: 2, reason: 'SUPPRESSED - CRITICAL: The burn rate for the past 1h is 2.5 and for the past 5m is 2.2 for bar. Alert when above 2 for both windows', - alertDetailsUrl: 'mockedAlertsLocator > getLocation', + alertDetailsUrl: 'https://kibana.dev/s/irrelevant/app/observability/alerts/uuid-bar', }), }); - - expect(alertsLocatorMock.getLocation).toBeCalledWith({ - baseUrl: 'https://kibana.dev', - kuery: 'kibana.alert.uuid: "uuid-foo"', - rangeFrom: expect.stringMatching(ISO_DATE_REGEX), - spaceId: 'irrelevant', - }); }); it('schedules an alert when both windows of second window definition burn rate have reached the threshold', async () => { diff --git a/x-pack/plugins/observability_solution/slo/server/lib/rules/slo_burn_rate/executor.ts b/x-pack/plugins/observability_solution/slo/server/lib/rules/slo_burn_rate/executor.ts index 6fbf8bcc0e891..7671ed7ebbaa3 100644 --- a/x-pack/plugins/observability_solution/slo/server/lib/rules/slo_burn_rate/executor.ts +++ b/x-pack/plugins/observability_solution/slo/server/lib/rules/slo_burn_rate/executor.ts @@ -21,7 +21,7 @@ import { LocatorPublic } from '@kbn/share-plugin/common'; import { upperCase } from 'lodash'; import { addSpaceIdToPath } from '@kbn/spaces-plugin/server'; import { ALL_VALUE } from '@kbn/slo-schema'; -import { AlertsLocatorParams, getAlertUrl } from '@kbn/observability-plugin/common'; +import { AlertsLocatorParams, getAlertDetailsUrl } from '@kbn/observability-plugin/common'; import { ObservabilitySloAlert } from '@kbn/alerts-as-data-utils'; import { ExecutorType } from '@kbn/alerting-plugin/server'; import { @@ -171,7 +171,7 @@ export const getRuleExecutor = ({ ? SUPPRESSED_PRIORITY_ACTION.id : windowDef.actionGroup; - const { uuid, start } = alertsClient.report({ + const { uuid } = alertsClient.report({ id: alertId, actionGroup, state: { @@ -189,14 +189,7 @@ export const getRuleExecutor = ({ }, }); - const indexedStartedAt = start ?? startedAt.toISOString(); - const alertDetailsUrl = await getAlertUrl( - uuid, - spaceId, - indexedStartedAt, - alertsLocator, - basePath.publicBaseUrl - ); + const alertDetailsUrl = await getAlertDetailsUrl(basePath, spaceId, uuid); const context = { alertDetailsUrl, @@ -228,15 +221,8 @@ export const getRuleExecutor = ({ const recoveredAlerts = alertsClient.getRecoveredAlerts() ?? []; for (const recoveredAlert of recoveredAlerts) { const alertId = recoveredAlert.alert.getId(); - const indexedStartedAt = recoveredAlert.alert.getStart() ?? startedAt.toISOString(); const alertUuid = recoveredAlert.alert.getUuid(); - const alertDetailsUrl = await getAlertUrl( - alertUuid, - spaceId, - indexedStartedAt, - alertsLocator, - basePath.publicBaseUrl - ); + const alertDetailsUrl = await getAlertDetailsUrl(basePath, spaceId, alertUuid); const urlQuery = alertId === ALL_VALUE ? '' : `?instanceId=${alertId}`; const viewInAppUrl = addSpaceIdToPath( diff --git a/x-pack/plugins/observability_solution/synthetics/common/runtime_types/monitor_management/locations.ts b/x-pack/plugins/observability_solution/synthetics/common/runtime_types/monitor_management/locations.ts index 4445fd22172cf..4c71d81e0a84f 100644 --- a/x-pack/plugins/observability_solution/synthetics/common/runtime_types/monitor_management/locations.ts +++ b/x-pack/plugins/observability_solution/synthetics/common/runtime_types/monitor_management/locations.ts @@ -78,9 +78,9 @@ export const PublicLocationsCodec = t.array(PublicLocationCodec); export const MonitorServiceLocationCodec = t.intersection([ t.interface({ id: t.string, + label: t.string, }), t.partial({ - label: t.string, geo: LocationGeoCodec, url: t.string, isServiceManaged: t.boolean, diff --git a/x-pack/plugins/observability_solution/synthetics/common/runtime_types/monitor_management/monitor_types.ts b/x-pack/plugins/observability_solution/synthetics/common/runtime_types/monitor_management/monitor_types.ts index 7246ba2d9bac6..578d823aafae2 100644 --- a/x-pack/plugins/observability_solution/synthetics/common/runtime_types/monitor_management/monitor_types.ts +++ b/x-pack/plugins/observability_solution/synthetics/common/runtime_types/monitor_management/monitor_types.ts @@ -173,7 +173,8 @@ export type ICMPFields = t.TypeOf; export const HTTPSimpleFieldsCodec = t.intersection([ t.interface({ [ConfigKey.METADATA]: MetadataCodec, - [ConfigKey.MAX_REDIRECTS]: t.string, + // string is for yaml config and number for public api + [ConfigKey.MAX_REDIRECTS]: t.union([t.string, t.number]), [ConfigKey.URLS]: getNonEmptyStringCodec('url'), [ConfigKey.PORT]: t.union([t.number, t.null]), }), @@ -318,6 +319,11 @@ export const MonitorFieldsCodec = t.intersection([ BrowserFieldsCodec, ]); +export const MonitorFieldsResultCodec = t.intersection([ + MonitorFieldsCodec, + t.interface({ id: t.string, updated_at: t.string, created_at: t.string }), +]); + // Monitor, represents one of (Icmp | Tcp | Http | Browser) decrypted export const SyntheticsMonitorCodec = t.union([ HTTPFieldsCodec, @@ -336,7 +342,7 @@ export const EncryptedSyntheticsMonitorCodec = t.union([ export const SyntheticsMonitorWithIdCodec = t.intersection([ SyntheticsMonitorCodec, - t.interface({ id: t.string }), + t.interface({ id: t.string, updated_at: t.string, created_at: t.string }), ]); const HeartbeatFieldsCodec = t.intersection([ @@ -355,7 +361,10 @@ const HeartbeatFieldsCodec = t.intersection([ ]); export const HeartbeatConfigCodec = t.intersection([ - SyntheticsMonitorWithIdCodec, + SyntheticsMonitorCodec, + t.interface({ + id: t.string, + }), t.partial({ fields_under_root: t.boolean, fields: HeartbeatFieldsCodec, @@ -400,6 +409,7 @@ export type BrowserFields = t.TypeOf; export type BrowserSimpleFields = t.TypeOf; export type BrowserAdvancedFields = t.TypeOf; export type MonitorFields = t.TypeOf; +export type MonitorFieldsResult = t.TypeOf; export type HeartbeatFields = t.TypeOf; export type SyntheticsMonitor = t.TypeOf; export type SyntheticsMonitorWithId = t.TypeOf; diff --git a/x-pack/plugins/observability_solution/synthetics/common/runtime_types/monitor_management/monitor_types_project.ts b/x-pack/plugins/observability_solution/synthetics/common/runtime_types/monitor_management/monitor_types_project.ts index 8e25ec1a714e4..ed3e6b28eef26 100644 --- a/x-pack/plugins/observability_solution/synthetics/common/runtime_types/monitor_management/monitor_types_project.ts +++ b/x-pack/plugins/observability_solution/synthetics/common/runtime_types/monitor_management/monitor_types_project.ts @@ -62,7 +62,7 @@ export const ProjectMonitorCodec = t.intersection([ hash: t.string, namespace: t.string, retestOnFailure: t.boolean, - labels: t.record(t.string, t.string), + fields: t.record(t.string, t.string), }), ]); @@ -91,14 +91,10 @@ export const ProjectMonitorsResponseCodec = t.intersection([ }), ]); -export type ProjectMonitorThrottlingConfig = t.TypeOf; - export type ProjectMonitor = t.TypeOf; export type LegacyProjectMonitorsRequest = t.TypeOf; export type ProjectMonitorsRequest = t.TypeOf; -export type ProjectMonitorsResponse = t.TypeOf; - export type ProjectMonitorMetaData = t.TypeOf; diff --git a/x-pack/plugins/observability_solution/synthetics/common/runtime_types/monitor_management/synthetics_overview_status.ts b/x-pack/plugins/observability_solution/synthetics/common/runtime_types/monitor_management/synthetics_overview_status.ts index 46a421ea98270..6f806d0995543 100644 --- a/x-pack/plugins/observability_solution/synthetics/common/runtime_types/monitor_management/synthetics_overview_status.ts +++ b/x-pack/plugins/observability_solution/synthetics/common/runtime_types/monitor_management/synthetics_overview_status.ts @@ -63,6 +63,7 @@ export const OverviewStatusCodec = t.interface({ upConfigs: t.record(t.string, OverviewStatusMetaDataCodec), downConfigs: t.record(t.string, OverviewStatusMetaDataCodec), pendingConfigs: t.record(t.string, OverviewStatusMetaDataCodec), + disabledConfigs: t.record(t.string, OverviewStatusMetaDataCodec), enabledMonitorQueryIds: t.array(t.string), disabledMonitorQueryIds: t.array(t.string), allIds: t.array(t.string), diff --git a/x-pack/plugins/observability_solution/synthetics/e2e/config.ts b/x-pack/plugins/observability_solution/synthetics/e2e/config.ts index 4b2aef573d687..8e1e97e5c1d37 100644 --- a/x-pack/plugins/observability_solution/synthetics/e2e/config.ts +++ b/x-pack/plugins/observability_solution/synthetics/e2e/config.ts @@ -10,6 +10,7 @@ import { CA_CERT_PATH } from '@kbn/dev-utils'; import { get } from 'lodash'; import { commonFunctionalServices } from '@kbn/ftr-common-functional-services'; import { commonFunctionalUIServices } from '@kbn/ftr-common-functional-ui-services'; + import { readKibanaConfig } from './tasks/read_kibana_config'; const MANIFEST_KEY = 'xpack.uptime.service.manifestUrl'; const SERVICE_PASSWORD = 'xpack.uptime.service.password'; diff --git a/x-pack/plugins/observability_solution/synthetics/e2e/synthetics/journeys/project_monitor_read_only.journey.ts b/x-pack/plugins/observability_solution/synthetics/e2e/synthetics/journeys/project_monitor_read_only.journey.ts index 3e2a4467bd61a..edef44a21d051 100644 --- a/x-pack/plugins/observability_solution/synthetics/e2e/synthetics/journeys/project_monitor_read_only.journey.ts +++ b/x-pack/plugins/observability_solution/synthetics/e2e/synthetics/journeys/project_monitor_read_only.journey.ts @@ -6,9 +6,10 @@ */ import { after, before, expect, journey, step } from '@elastic/synthetics'; +import { omit } from 'lodash'; import { SyntheticsMonitor } from '@kbn/synthetics-plugin/common/runtime_types'; import { SyntheticsServices } from './services/synthetics_services'; -import { cleanTestMonitors, enableMonitorManagedViaApi } from './services/add_monitor'; +import { cleanTestMonitors } from './services/add_monitor'; import { addTestMonitorProject } from './services/add_monitor_project'; import { syntheticsAppPageProvider } from '../page_objects/synthetics_app'; @@ -23,14 +24,13 @@ journey('ProjectMonitorReadOnly', async ({ page, params }) => { before(async () => { await cleanTestMonitors(params); - await enableMonitorManagedViaApi(params.kibanaUrl); + }); + step('Go to monitor-management', async () => { await addTestMonitorProject(params.kibanaUrl, monitorName); await syntheticsApp.waitForLoadingToFinish(); - }); - step('Go to monitor-management', async () => { await syntheticsApp.navigateToMonitorManagement(); }); @@ -62,11 +62,16 @@ journey('ProjectMonitorReadOnly', async ({ page, params }) => { // hash is always reset to empty string when monitor is edited // this ensures that when the monitor is pushed again, the monitor // config in the process takes precedence - expect(newConfiguration).toEqual({ - ...originalMonitorConfiguration, - hash: '', - revision: 2, - }); + expect(omit(newConfiguration, ['updated_at'])).toEqual( + omit( + { + ...originalMonitorConfiguration, + hash: '', + revision: 2, + }, + ['updated_at'] + ) + ); }); step('Navigate to edit monitor', async () => { @@ -83,29 +88,39 @@ journey('ProjectMonitorReadOnly', async ({ page, params }) => { // hash is always reset to empty string when monitor is edited // this ensures that when the monitor is pushed again, the monitor // config in the process takes precedence - expect(newConfiguration).toEqual({ - ...originalMonitorConfiguration, - hash: '', - revision: 3, - alert: { - status: { - enabled: !(originalMonitorConfiguration?.alert?.status?.enabled as boolean), - }, - tls: { - enabled: originalMonitorConfiguration?.alert?.tls?.enabled as boolean, + expect(omit(newConfiguration, ['updated_at'])).toEqual( + omit( + { + ...originalMonitorConfiguration, + hash: '', + revision: 3, + alert: { + status: { + enabled: !(originalMonitorConfiguration?.alert?.status?.enabled as boolean), + }, + tls: { + enabled: originalMonitorConfiguration?.alert?.tls?.enabled as boolean, + }, + }, + enabled: !originalMonitorConfiguration?.enabled, }, - }, - enabled: !originalMonitorConfiguration?.enabled, - }); + ['updated_at'] + ) + ); }); step('Monitor can be re-pushed and overwrite any changes', async () => { await addTestMonitorProject(params.kibanaUrl, monitorName); const repushedConfiguration = await services.getMonitor(monitorId); - expect(repushedConfiguration).toEqual({ - ...originalMonitorConfiguration, - revision: 4, - }); + expect(omit(repushedConfiguration, ['updated_at'])).toEqual( + omit( + { + ...originalMonitorConfiguration, + revision: 4, + }, + ['updated_at'] + ) + ); }); step('Navigate to edit monitor', async () => { diff --git a/x-pack/plugins/observability_solution/synthetics/e2e/synthetics/journeys/services/add_monitor_project.ts b/x-pack/plugins/observability_solution/synthetics/e2e/synthetics/journeys/services/add_monitor_project.ts index 8cc9529e94c9f..85c0f512beb1b 100644 --- a/x-pack/plugins/observability_solution/synthetics/e2e/synthetics/journeys/services/add_monitor_project.ts +++ b/x-pack/plugins/observability_solution/synthetics/e2e/synthetics/journeys/services/add_monitor_project.ts @@ -17,23 +17,15 @@ export const addTestMonitorProject = async ( const testData = { ...testProjectMonitorBrowser(name, config), }; - try { - return await axios.put( - kibanaUrl + - SYNTHETICS_API_URLS.SYNTHETICS_MONITORS_PROJECT_UPDATE.replace( - '{projectName}', - projectName - ), - testData, - { - auth: { username: 'elastic', password: 'changeme' }, - headers: { 'kbn-xsrf': 'true', 'x-elastic-internal-origin': 'synthetics-e2e' }, - } - ); - } catch (e) { - // eslint-disable-next-line no-console - console.log(e); - } + return await axios.put( + kibanaUrl + + SYNTHETICS_API_URLS.SYNTHETICS_MONITORS_PROJECT_UPDATE.replace('{projectName}', projectName), + testData, + { + auth: { username: 'elastic', password: 'changeme' }, + headers: { 'kbn-xsrf': 'true', 'x-elastic-internal-origin': 'synthetics-e2e' }, + } + ); }; const testProjectMonitorBrowser = (name: string, config?: Record) => ({ diff --git a/x-pack/plugins/observability_solution/synthetics/e2e/synthetics/journeys/services/synthetics_services.ts b/x-pack/plugins/observability_solution/synthetics/e2e/synthetics/journeys/services/synthetics_services.ts index 988327ee3fc19..028f8a736e93c 100644 --- a/x-pack/plugins/observability_solution/synthetics/e2e/synthetics/journeys/services/synthetics_services.ts +++ b/x-pack/plugins/observability_solution/synthetics/e2e/synthetics/journeys/services/synthetics_services.ts @@ -28,10 +28,9 @@ export class SyntheticsServices { try { const { data } = await this.requester.request({ description: 'get monitor by id', - path: SYNTHETICS_API_URLS.GET_SYNTHETICS_MONITOR.replace('{monitorId}', monitorId), - query: { - decrypted: true, - }, + path: + SYNTHETICS_API_URLS.GET_SYNTHETICS_MONITOR.replace('{monitorId}', monitorId) + + '?internal=true', method: 'GET', }); return data as SyntheticsMonitor; diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/common/components/monitor_details_panel.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/common/components/monitor_details_panel.tsx index d0db68035b147..1222455443bbf 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/common/components/monitor_details_panel.tsx +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/common/components/monitor_details_panel.tsx @@ -28,6 +28,7 @@ import { EncryptedSyntheticsSavedMonitor, MonitorFields, Ping, + SyntheticsMonitorWithId, } from '../../../../../../common/runtime_types'; import { MonitorTypeBadge } from './monitor_type_badge'; import { useDateFormat } from '../../../../../hooks/use_date_format'; @@ -36,7 +37,7 @@ export interface MonitorDetailsPanelProps { latestPing?: Ping; loading: boolean; configId: string; - monitor: EncryptedSyntheticsSavedMonitor | null; + monitor: SyntheticsMonitorWithId | EncryptedSyntheticsSavedMonitor | null; hideEnabled?: boolean; hideLocations?: boolean; hasBorder?: boolean; diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/common/header/action_menu_content.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/common/header/action_menu_content.tsx index bc878a4388f02..84e536bfec0ee 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/common/header/action_menu_content.tsx +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/common/header/action_menu_content.tsx @@ -15,7 +15,12 @@ import { LastRefreshed } from '../components/last_refreshed'; import { AutoRefreshButton } from '../components/auto_refresh_button'; import { useSyntheticsSettingsContext } from '../../../contexts'; import { useGetUrlParams } from '../../../hooks'; -import { MONITOR_ROUTE, SETTINGS_ROUTE } from '../../../../../../common/constants'; +import { + MONITOR_ADD_ROUTE, + MONITOR_EDIT_ROUTE, + MONITOR_ROUTE, + SETTINGS_ROUTE, +} from '../../../../../../common/constants'; import { stringifyUrlParams } from '../../../utils/url_params'; import { InspectorHeaderLink } from './inspector_header_link'; import { ToggleAlertFlyoutButton } from '../../alerts/toggle_alert_flyout_button'; @@ -41,6 +46,8 @@ export function ActionMenuContent(): React.ReactElement { }; /* useSelector(monitorStatusSelector) TODO: Implement state for monitor status */ const detailRouteMatch = useRouteMatch(MONITOR_ROUTE); + const isEditRoute = useRouteMatch(MONITOR_EDIT_ROUTE); + const isAddRoute = useRouteMatch(MONITOR_ADD_ROUTE); const monitorId = selectedMonitor?.monitor?.id; const syntheticExploratoryViewLink = createExploratoryViewUrl( @@ -69,8 +76,12 @@ export function ActionMenuContent(): React.ReactElement { return ( - - + {!isEditRoute && !isAddRoute && ( + <> + + + + )} { { id: 'us_central', isServiceManaged: true, + label: 'US Central', }, ], name: 'Browser monitor', @@ -89,6 +90,7 @@ describe('defaults', () => { { id: 'us_central', isServiceManaged: true, + label: 'US Central', }, ], name: 'Browser monitor', diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/form/defaults.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/form/defaults.tsx index 5a4071182a4b4..ab278a4f8835a 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/form/defaults.tsx +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/form/defaults.tsx @@ -14,6 +14,7 @@ import { SyntheticsMonitor, BrowserFields, HTTPFields, + ScheduleUnit, } from '../types'; export const getDefaultFormFields = ( @@ -61,13 +62,33 @@ export const formatDefaultFormValues = (monitor?: SyntheticsMonitor) => { let formMonitorType = monitor[ConfigKey.FORM_MONITOR_TYPE]; const monitorType = monitor[ConfigKey.MONITOR_TYPE]; + let schedule = monitor[ConfigKey.SCHEDULE]; + if (schedule?.unit === 's') { + schedule = { number: `${schedule.number}s`, unit: 's' as ScheduleUnit }; + } const monitorWithFormMonitorType = { ...monitor, + [ConfigKey.SCHEDULE]: schedule, }; - const schedule = monitor[ConfigKey.SCHEDULE]; - if (schedule?.unit === 's') { - schedule.number = `${schedule.number}s`; + const params = monitorWithFormMonitorType[ConfigKey.PARAMS]; + if (typeof params !== 'string' && params) { + try { + monitorWithFormMonitorType[ConfigKey.PARAMS] = JSON.stringify(params); + } catch (e) { + // ignore + } + } + const browserMonitor = monitor as BrowserFields; + + const pwOptions = browserMonitor[ConfigKey.PLAYWRIGHT_OPTIONS]; + if (typeof pwOptions !== 'string' && pwOptions) { + try { + (monitorWithFormMonitorType as BrowserFields)[ConfigKey.PLAYWRIGHT_OPTIONS] = + JSON.stringify(pwOptions); + } catch (e) { + // ignore + } } // handle default monitor types from Uptime, which don't contain `ConfigKey.FORM_MONITOR_TYPE` @@ -81,7 +102,6 @@ export const formatDefaultFormValues = (monitor?: SyntheticsMonitor) => { switch (formMonitorType) { case FormMonitorType.MULTISTEP: - const browserMonitor = monitor as BrowserFields; return { ...monitorWithFormMonitorType, 'source.inline': { diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/form/form_config.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/form/form_config.tsx index 7e29504aca41f..470c344deb5e0 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/form/form_config.tsx +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/form/form_config.tsx @@ -148,6 +148,7 @@ export const BROWSER_ADVANCED = (readOnly: boolean) => [ FIELD(readOnly)[ConfigKey.IGNORE_HTTPS_ERRORS], FIELD(readOnly)[ConfigKey.SYNTHETICS_ARGS], FIELD(readOnly)[ConfigKey.PLAYWRIGHT_OPTIONS], + FIELD(readOnly)[ConfigKey.PARAMS], ], }, ]; diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/form/validation.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/form/validation.tsx index fbd792fd02238..3cd741fc44ce7 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/form/validation.tsx +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/form/validation.tsx @@ -117,8 +117,7 @@ const validateHTTP: ValidationLibrary = { return validateHeaders(headers); }, [ConfigKey.MAX_REDIRECTS]: ({ [ConfigKey.MAX_REDIRECTS]: value }) => - (!!value && !`${value}`.match(DIGITS_ONLY)) || - parseFloat(value as MonitorFields[ConfigKey.MAX_REDIRECTS]) < 0, + (!!value && !`${value}`.match(DIGITS_ONLY)) || parseFloat(value as string) < 0, [ConfigKey.URLS]: ({ [ConfigKey.URLS]: value }) => !value, ...validateCommon, }; diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/hooks/use_clone_monitor.ts b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/hooks/use_clone_monitor.ts index ff871ae5fad98..637166af20155 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/hooks/use_clone_monitor.ts +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/hooks/use_clone_monitor.ts @@ -6,13 +6,13 @@ */ import { useFetcher } from '@kbn/observability-shared-plugin/public'; +import { fetchSyntheticsMonitor } from '../../../state/monitor_details/api'; import { useGetUrlParams } from '../../../hooks'; -import { getDecryptedMonitorAPI } from '../../../state/monitor_management/api'; export const useCloneMonitor = () => { const { cloneId } = useGetUrlParams(); return useFetcher(() => { if (!cloneId) return Promise.resolve(undefined); - return getDecryptedMonitorAPI({ id: cloneId }); + return fetchSyntheticsMonitor({ monitorId: cloneId }); }, [cloneId]); }; diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/hooks/use_monitor_not_found.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/hooks/use_monitor_not_found.tsx index 6577b039e2290..6a27d43808f84 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/hooks/use_monitor_not_found.tsx +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/hooks/use_monitor_not_found.tsx @@ -6,10 +6,10 @@ */ import { useEffect } from 'react'; -import { IHttpFetchError, ResponseErrorBody } from '@kbn/core-http-browser'; import { useGetUrlParams, useUrlParams } from '../../../hooks'; +import { IHttpSerializedFetchError } from '../../../state'; -export const useMonitorNotFound = (error?: IHttpFetchError, id?: string) => { +export const useMonitorNotFound = (error?: IHttpSerializedFetchError | null, id?: string) => { const { packagePolicyId } = useGetUrlParams(); const updateUrlParams = useUrlParams()[1]; diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/monitor_details_portal.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/monitor_details_portal.tsx index fbdd823b49682..d63106bb42a7f 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/monitor_details_portal.tsx +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/monitor_details_portal.tsx @@ -22,17 +22,21 @@ interface Props { export const MonitorDetailsLinkPortal = ({ name, configId, locationId, updateUrl }: Props) => { return ( - + {locationId ? ( + + ) : ( + + )} ); }; -export const MonitorDetailsLink = ({ name, configId, locationId, updateUrl }: Props) => { +const MonitorDetailsLinkWithLocation = ({ name, configId, locationId, updateUrl }: Props) => { const selectedLocation = useSelectedLocation(updateUrl); let locId = locationId; @@ -45,6 +49,18 @@ export const MonitorDetailsLink = ({ name, configId, locationId, updateUrl }: Pr const href = history.createHref({ pathname: locId ? `monitor/${configId}?locationId=${locId}` : `monitor/${configId}`, }); + return ; +}; + +const MonitorDetailsLink = ({ name, configId }: Props) => { + const history = useHistory(); + const href = history.createHref({ + pathname: `monitor/${configId}`, + }); + return ; +}; + +const MonitorLink = ({ href, name }: { href: string; name: string }) => { return ( {name} diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/monitor_edit_page.test.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/monitor_edit_page.test.tsx index abcb69c5da9ba..6c4c7d5103c19 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/monitor_edit_page.test.tsx +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/monitor_edit_page.test.tsx @@ -115,6 +115,9 @@ describe('MonitorEditPage', () => { locationsLoaded: true, loading: false, }, + monitorDetails: { + syntheticsMonitorLoading: true, + }, }, }); @@ -173,6 +176,10 @@ describe('MonitorEditPage', () => { locationsLoaded: true, loading: false, }, + monitorDetails: { + syntheticsMonitorLoading: false, + syntheticsMonitorError: new Error('test error'), + }, }, }); diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/monitor_edit_page.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/monitor_edit_page.tsx index f339c69610672..9bfd306c4a6d9 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/monitor_edit_page.tsx +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/monitor_edit_page.tsx @@ -10,22 +10,27 @@ import { useParams } from 'react-router-dom'; import { useDispatch, useSelector } from 'react-redux'; import { EuiEmptyPrompt } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import { useTrackPageview, useFetcher } from '@kbn/observability-shared-plugin/public'; -import { IHttpFetchError, ResponseErrorBody } from '@kbn/core-http-browser'; +import { useTrackPageview } from '@kbn/observability-shared-plugin/public'; import { CanUsePublicLocationsCallout } from './steps/can_use_public_locations_callout'; import { DisabledCallout } from '../monitors_page/management/disabled_callout'; import { useCanUsePublicLocations } from '../../../../hooks/use_capabilities'; import { EditMonitorNotFound } from './edit_monitor_not_found'; import { LoadingState } from '../monitors_page/overview/overview/monitor_detail_flyout'; import { ConfigKey, SourceType } from '../../../../../common/runtime_types'; -import { getServiceLocations, selectServiceLocationsState } from '../../state'; +import { + getMonitorAction, + getServiceLocations, + selectServiceLocationsState, + selectSyntheticsMonitor, + selectSyntheticsMonitorError, + selectSyntheticsMonitorLoading, +} from '../../state'; import { AlertingCallout } from '../common/alerting_callout/alerting_callout'; import { MonitorSteps } from './steps'; import { MonitorForm } from './form'; import { LocationsLoadingError } from './locations_loading_error'; import { MonitorDetailsLinkPortal } from './monitor_details_portal'; import { useMonitorAddEditBreadcrumbs } from './use_breadcrumbs'; -import { getDecryptedMonitorAPI } from '../../state/monitor_management/api'; import { EDIT_MONITOR_STEPS } from './steps/step_config'; import { useMonitorNotFound } from './hooks/use_monitor_not_found'; @@ -43,17 +48,15 @@ export const MonitorEditPage: React.FC = () => { } }, [locationsLoaded, dispatch]); - const { data, loading, error } = useFetcher(() => { - return getDecryptedMonitorAPI({ id: monitorId }); - // FIXME: Dario thinks there is a better way to do this but - // he's getting tired and maybe the Synthetics folks can fix it - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); + const data = useSelector(selectSyntheticsMonitor); + const isLoading = useSelector(selectSyntheticsMonitorLoading); + const error = useSelector(selectSyntheticsMonitorError); - const monitorNotFoundError = useMonitorNotFound( - error as IHttpFetchError, - data?.id - ); + useEffect(() => { + dispatch(getMonitorAction.get({ monitorId })); + }, [dispatch, monitorId]); + + const monitorNotFoundError = useMonitorNotFound(error, data?.id); const canUsePublicLocations = useCanUsePublicLocations(data?.[ConfigKey.LOCATIONS]); @@ -93,7 +96,7 @@ export const MonitorEditPage: React.FC = () => { ); } - return data && locationsLoaded && !loading && !error ? ( + return data && locationsLoaded && !isLoading && !error ? ( <> diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_details/hooks/use_selected_monitor.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_details/hooks/use_selected_monitor.tsx index 1f2eadb7c09fc..1f4fab7e0d977 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_details/hooks/use_selected_monitor.tsx +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_details/hooks/use_selected_monitor.tsx @@ -7,7 +7,7 @@ import { useEffect, useMemo } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { useParams } from 'react-router-dom'; -import { ConfigKey, EncryptedSyntheticsSavedMonitor } from '../../../../../../common/runtime_types'; +import { ConfigKey } from '../../../../../../common/runtime_types'; import { useSyntheticsRefreshContext } from '../../../contexts'; import { getMonitorAction, @@ -40,7 +40,8 @@ export const useSelectedMonitor = (monId?: string) => { monitorId && monitorFromList && monitorFromList[ConfigKey.CONFIG_ID] === monitorId; const isLoadedSyntheticsMonitorValid = monitorId && syntheticsMonitor && syntheticsMonitor[ConfigKey.CONFIG_ID] === monitorId; - const availableMonitor: EncryptedSyntheticsSavedMonitor | null = isLoadedSyntheticsMonitorValid + + const availableMonitor = isLoadedSyntheticsMonitorValid ? syntheticsMonitor : isMonitorFromListValid ? monitorFromList diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/monitor_detail_flyout.test.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/monitor_detail_flyout.test.tsx index dad59de6d630b..a575ecc110eb4 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/monitor_detail_flyout.test.tsx +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/monitor_detail_flyout.test.tsx @@ -23,11 +23,6 @@ TagsListMock.mockReturnValue(
Tags list
); describe('Monitor Detail Flyout', () => { beforeEach(() => { - jest.spyOn(observabilitySharedPublic, 'useFetcher').mockReturnValue({ - status: observabilitySharedPublic.FETCH_STATUS.PENDING, - data: null, - refetch: () => null, - }); jest .spyOn(observabilitySharedPublic, 'useTheme') .mockReturnValue({ eui: { euiColorVis0: 'red', euiColorVis9: 'red' } } as any); @@ -76,11 +71,6 @@ describe('Monitor Detail Flyout', () => { it('renders error boundary for fetch failure', () => { const testErrorText = 'This is a test error'; - jest.spyOn(observabilitySharedPublic, 'useFetcher').mockReturnValue({ - status: observabilitySharedPublic.FETCH_STATUS.FAILURE, - error: new Error('This is a test error'), - refetch: () => null, - }); const { getByText } = render( { onClose={jest.fn()} onEnabledChange={jest.fn()} onLocationChange={jest.fn()} - /> + />, + { + state: { + monitorDetails: { + syntheticsMonitorError: { body: { message: 'This is a test error' } }, + }, + }, + } ); getByText(testErrorText); }); it('renders loading state while fetching', () => { - jest.spyOn(observabilitySharedPublic, 'useFetcher').mockReturnValue({ - status: observabilitySharedPublic.FETCH_STATUS.LOADING, - refetch: jest.fn(), - }); - const { getByRole } = render( { onClose={jest.fn()} onEnabledChange={jest.fn()} onLocationChange={jest.fn()} - /> + />, + { + state: { + monitorDetails: { + syntheticsMonitorLoading: true, + }, + }, + } ); expect(getByRole('progressbar')); }); it('renders details for fetch success', () => { - jest.spyOn(observabilitySharedPublic, 'useFetcher').mockReturnValue({ - status: observabilitySharedPublic.FETCH_STATUS.SUCCESS, - data: { - enabled: true, - type: 'http', - name: 'test-monitor', - schedule: { - number: '1', - unit: 'm', - }, - tags: ['prod'], - config_id: 'test-id', - }, - refetch: jest.fn(), - }); const detailLink = '/app/synthetics/monitor/test-id'; jest.spyOn(monitorDetailLocator, 'useMonitorDetailLocator').mockReturnValue(detailLink); jest.spyOn(monitorDetailLocator, 'useMonitorDetailLocator').mockReturnValue(detailLink); @@ -146,7 +130,24 @@ describe('Monitor Detail Flyout', () => { onClose={jest.fn()} onEnabledChange={jest.fn()} onLocationChange={jest.fn()} - /> + />, + { + state: { + monitorDetails: { + syntheticsMonitor: { + enabled: true, + type: 'http', + name: 'test-monitor', + schedule: { + number: '1', + unit: 'm', + }, + tags: ['prod'], + config_id: 'test-id', + } as any, + }, + }, + } ); expect(getByText('Every 1 minute')); diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/monitor_detail_flyout.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/monitor_detail_flyout.tsx index 8c07b3e0cad2d..22dff2d8ddef2 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/monitor_detail_flyout.tsx +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/monitor_detail_flyout.tsx @@ -29,7 +29,7 @@ import { i18n } from '@kbn/i18n'; import { useKibana } from '@kbn/kibana-react-plugin/public'; import React, { useCallback, useEffect, useMemo, useState } from 'react'; import { useDispatch, useSelector } from 'react-redux'; -import { useTheme, FETCH_STATUS, useFetcher } from '@kbn/observability-shared-plugin/public'; +import { useTheme } from '@kbn/observability-shared-plugin/public'; import { useOverviewStatus } from '../../hooks/use_overview_status'; import { MonitorDetailsPanel } from '../../../common/components/monitor_details_panel'; import { ClientPluginsStart } from '../../../../../../plugin'; @@ -37,8 +37,12 @@ import { LocationsStatus, useStatusByLocation } from '../../../../hooks/use_stat import { MonitorEnabled } from '../../management/monitor_list_table/monitor_enabled'; import { ActionsPopover } from './actions_popover'; import { + getMonitorAction, selectMonitorUpsertStatus, selectServiceLocationsState, + selectSyntheticsMonitor, + selectSyntheticsMonitorError, + selectSyntheticsMonitorLoading, setFlyoutConfig, } from '../../../../state'; import { useMonitorDetail } from '../../../../hooks/use_monitor_detail'; @@ -46,7 +50,6 @@ import { ConfigKey, EncryptedSyntheticsMonitor, OverviewStatusMetaData } from '. import { useMonitorDetailLocator } from '../../../../hooks/use_monitor_detail_locator'; import { MonitorStatus } from '../../../common/components/monitor_status'; import { MonitorLocationSelect } from '../../../common/components/monitor_location_select'; -import { fetchSyntheticsMonitor } from '../../../../state/monitor_details/api'; interface Props { configId: string; @@ -250,21 +253,15 @@ export function MonitorDetailFlyout(props: Props) { }, [dispatch]); const upsertStatus = useSelector(selectMonitorUpsertStatus(configId)); + const monitorObject = useSelector(selectSyntheticsMonitor); + const isLoading = useSelector(selectSyntheticsMonitorLoading); + const error = useSelector(selectSyntheticsMonitorError); const upsertSuccess = upsertStatus?.status === 'success'; - const { - data: monitorObject, - error, - status, - loading, - } = useFetcher( - () => fetchSyntheticsMonitor({ monitorId: configId }), - // FIXME: Dario thinks there is a better way to do this but - // he's getting tired and maybe the Synthetics folks can fix it - // eslint-disable-next-line react-hooks/exhaustive-deps - [configId, upsertSuccess] - ); + useEffect(() => { + dispatch(getMonitorAction.get({ monitorId: configId })); + }, [configId, dispatch, upsertSuccess]); const [isActionsPopoverOpen, setIsActionsPopoverOpen] = useState(false); @@ -283,9 +280,9 @@ export function MonitorDetailFlyout(props: Props) { onClose={props.onClose} paddingSize="none" > - {status === FETCH_STATUS.FAILURE && {error?.message}} - {status === FETCH_STATUS.LOADING && } - {status === FETCH_STATUS.SUCCESS && monitorObject && ( + {error && !isLoading && {error?.body?.message}} + {isLoading && } + {monitorObject && ( <> @@ -332,7 +329,7 @@ export function MonitorDetailFlyout(props: Props) { ...monitorObject, id, }} - loading={Boolean(loading)} + loading={Boolean(isLoading)} /> diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/monitor_details/actions.ts b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/monitor_details/actions.ts index 26e0a4c7f4c41..dd0db45112113 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/monitor_details/actions.ts +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/monitor_details/actions.ts @@ -7,21 +7,16 @@ import { createAction } from '@reduxjs/toolkit'; import { MostRecentPingsRequest } from './api'; -import { - Ping, - PingsResponse, - EncryptedSyntheticsSavedMonitor, -} from '../../../../../common/runtime_types'; +import { Ping, PingsResponse, SyntheticsMonitorWithId } from '../../../../../common/runtime_types'; import { createAsyncAction } from '../utils/actions'; export const setMonitorDetailsLocationAction = createAction( '[MONITOR SUMMARY] SET LOCATION' ); -export const getMonitorAction = createAsyncAction< - { monitorId: string }, - EncryptedSyntheticsSavedMonitor ->('[MONITOR DETAILS] GET MONITOR'); +export const getMonitorAction = createAsyncAction<{ monitorId: string }, SyntheticsMonitorWithId>( + '[MONITOR DETAILS] GET MONITOR' +); export const getMonitorLastRunAction = createAsyncAction< { monitorId: string; locationId: string }, diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/monitor_details/api.ts b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/monitor_details/api.ts index 8a75ab6884560..6fa59e4c175d1 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/monitor_details/api.ts +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/monitor_details/api.ts @@ -8,10 +8,10 @@ import moment from 'moment'; import { apiService } from '../../../../utils/api_service'; import { - EncryptedSyntheticsSavedMonitor, EncryptedSyntheticsMonitorCodec, PingsResponse, PingsResponseType, + SyntheticsMonitorWithId, } from '../../../../../common/runtime_types'; import { INITIAL_REST_VERSION, SYNTHETICS_API_URLS } from '../../../../../common/constants'; @@ -67,11 +67,13 @@ export const fetchSyntheticsMonitor = async ({ monitorId, }: { monitorId: string; -}): Promise => - apiService.get( +}): Promise => { + return apiService.get( SYNTHETICS_API_URLS.GET_SYNTHETICS_MONITOR.replace('{monitorId}', monitorId), { + internal: true, version: INITIAL_REST_VERSION, }, EncryptedSyntheticsMonitorCodec ); +}; diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/monitor_details/index.ts b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/monitor_details/index.ts index 162ed90dfb928..d247acba5d626 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/monitor_details/index.ts +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/monitor_details/index.ts @@ -6,7 +6,7 @@ */ import { createReducer } from '@reduxjs/toolkit'; -import { EncryptedSyntheticsSavedMonitor, Ping } from '../../../../../common/runtime_types'; +import { Ping, SyntheticsMonitorWithId } from '../../../../../common/runtime_types'; import { checkIsStalePing } from '../../utils/monitor_test_result/check_pings'; import { enableMonitorAlertAction } from '../monitor_list/actions'; @@ -34,7 +34,8 @@ export interface MonitorDetailsState { loaded: boolean; }; syntheticsMonitorLoading: boolean; - syntheticsMonitor: EncryptedSyntheticsSavedMonitor | null; + syntheticsMonitor: SyntheticsMonitorWithId | null; + syntheticsMonitorError?: IHttpSerializedFetchError | null; syntheticsMonitorDispatchedAt: number; error: IHttpSerializedFetchError | null; selectedLocationId: string | null; @@ -97,15 +98,15 @@ export const monitorDetailsReducer = createReducer(initialState, (builder) => { .addCase(getMonitorAction.get, (state, action) => { state.syntheticsMonitorDispatchedAt = action.meta.dispatchedAt; state.syntheticsMonitorLoading = true; - state.error = null; + state.syntheticsMonitorError = null; }) .addCase(getMonitorAction.success, (state, action) => { state.syntheticsMonitor = action.payload; state.syntheticsMonitorLoading = false; - state.error = null; + state.syntheticsMonitorError = null; }) .addCase(getMonitorAction.fail, (state, action) => { - state.error = action.payload; + state.syntheticsMonitorError = action.payload; state.syntheticsMonitorLoading = false; }) .addCase(enableMonitorAlertAction.success, (state, action) => { diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/monitor_details/selectors.ts b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/monitor_details/selectors.ts index af30569836e44..47d116594eb3b 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/monitor_details/selectors.ts +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/monitor_details/selectors.ts @@ -27,3 +27,14 @@ export const selectMonitorPingsMetadata = createSelector(getState, (state) => st export const selectPingsError = createSelector(getState, (state) => state.error); export const selectStatusFilter = createSelector(getState, (state) => state.statusFilter); + +export const selectSyntheticsMonitor = createSelector(getState, (state) => state.syntheticsMonitor); +export const selectSyntheticsMonitorError = createSelector( + getState, + (state) => state.syntheticsMonitorError +); + +export const selectSyntheticsMonitorLoading = createSelector( + getState, + (state) => state.syntheticsMonitorLoading +); diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/monitor_list/actions.ts b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/monitor_list/actions.ts index d15ea77d0d1a4..e914b27a26b67 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/monitor_list/actions.ts +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/monitor_list/actions.ts @@ -11,6 +11,7 @@ import { MonitorManagementListResult, MonitorFiltersResult, EncryptedSyntheticsSavedMonitor, + SyntheticsMonitorWithId, } from '../../../../../common/runtime_types'; import { createAsyncAction } from '../utils/actions'; @@ -34,7 +35,7 @@ export const fetchUpsertFailureAction = createAction( export const enableMonitorAlertAction = createAsyncAction< UpsertMonitorRequest, - EncryptedSyntheticsSavedMonitor, + SyntheticsMonitorWithId, UpsertMonitorError >('enableMonitorAlertAction'); diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/monitor_list/api.ts b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/monitor_list/api.ts index 4994921598997..bab1062a683a4 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/monitor_list/api.ts +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/monitor_list/api.ts @@ -70,7 +70,7 @@ export const fetchUpsertMonitor = async ({ null, { version: INITIAL_REST_VERSION, - ui: true, + internal: true, } ); } else { diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/monitor_list/effects.ts b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/monitor_list/effects.ts index ac142d7c52055..bbec528db6de2 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/monitor_list/effects.ts +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/monitor_list/effects.ts @@ -9,7 +9,11 @@ import { PayloadAction } from '@reduxjs/toolkit'; import { call, put, takeEvery, select, takeLatest, debounce } from 'redux-saga/effects'; import { quietFetchOverviewStatusAction } from '../overview_status'; import { enableDefaultAlertingAction } from '../alert_rules'; -import { ConfigKey, EncryptedSyntheticsSavedMonitor } from '../../../../../common/runtime_types'; +import { + ConfigKey, + EncryptedSyntheticsSavedMonitor, + SyntheticsMonitorWithId, +} from '../../../../../common/runtime_types'; import { kibanaService } from '../../../../utils/kibana_service'; import { MonitorOverviewPageState } from '../overview'; import { selectOverviewState } from '../overview/selectors'; @@ -48,7 +52,7 @@ export function* enableMonitorAlertEffect() { function* (action: PayloadAction): Generator { try { const response = yield call(fetchUpsertMonitor, action.payload); - yield put(enableMonitorAlertAction.success(response as EncryptedSyntheticsSavedMonitor)); + yield put(enableMonitorAlertAction.success(response as SyntheticsMonitorWithId)); sendSuccessToast(action.payload.success); if ( (response as EncryptedSyntheticsSavedMonitor)[ConfigKey.ALERT_CONFIG]?.status?.enabled diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/monitor_management/api.ts b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/monitor_management/api.ts index 69101f77e8291..f4118bed3b14c 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/monitor_management/api.ts +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/monitor_management/api.ts @@ -11,12 +11,12 @@ import { apiService } from '../../../../utils/api_service'; import { EncryptedSyntheticsMonitor, SyntheticsMonitor, - SyntheticsMonitorCodec, ServiceLocationErrorsResponse, + SyntheticsMonitorWithId, } from '../../../../../common/runtime_types'; import { INITIAL_REST_VERSION, SYNTHETICS_API_URLS } from '../../../../../common/constants'; -export type UpsertMonitorResponse = ServiceLocationErrorsResponse | EncryptedSyntheticsMonitor; +export type UpsertMonitorResponse = ServiceLocationErrorsResponse | SyntheticsMonitorWithId; export const createMonitorAPI = async ({ monitor, @@ -25,6 +25,7 @@ export const createMonitorAPI = async ({ }): Promise => { return await apiService.post(SYNTHETICS_API_URLS.SYNTHETICS_MONITORS, monitor, null, { version: INITIAL_REST_VERSION, + internal: true, }); }; @@ -53,21 +54,11 @@ export const updateMonitorAPI = async ({ id: string; }): Promise => { return await apiService.put(`${SYNTHETICS_API_URLS.SYNTHETICS_MONITORS}/${id}`, monitor, null, { - ui: true, + internal: true, version: INITIAL_REST_VERSION, }); }; -export const getDecryptedMonitorAPI = async ({ id }: { id: string }): Promise => - apiService.get( - SYNTHETICS_API_URLS.GET_SYNTHETICS_MONITOR.replace('{monitorId}', id), - { - decrypted: true, - version: INITIAL_REST_VERSION, - }, - SyntheticsMonitorCodec - ); - export const fetchProjectAPIKey = async ( accessToElasticManagedLocations: boolean ): Promise => { diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/overview_status/index.ts b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/overview_status/index.ts index 6d00d5929fef1..6cdadd03d15bd 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/overview_status/index.ts +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/overview_status/index.ts @@ -53,6 +53,7 @@ export const overviewStatusReducer = createReducer(initialState, (builder) => { ...action.payload.upConfigs, ...action.payload.downConfigs, ...action.payload.pendingConfigs, + ...action.payload.disabledConfigs, }); state.disabledConfigs = state.allConfigs.filter((monitor) => !monitor.isEnabled); state.loaded = true; diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/utils/testing/__mocks__/synthetics_store.mock.ts b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/utils/testing/__mocks__/synthetics_store.mock.ts index 2849fa1628924..aa1743b7f27db 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/utils/testing/__mocks__/synthetics_store.mock.ts +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/utils/testing/__mocks__/synthetics_store.mock.ts @@ -438,7 +438,7 @@ function getMonitorDetailsMockSlice() { tags: [], timeout: null, name: 'One pixel monitor', - locations: [{ isServiceManaged: true, id: 'us_central' }], + locations: [{ isServiceManaged: true, id: 'us_central', label: 'US Central' }], namespace: 'default', origin: SourceType.UI, max_attempts: 2, diff --git a/x-pack/plugins/observability_solution/synthetics/server/alert_rules/common.ts b/x-pack/plugins/observability_solution/synthetics/server/alert_rules/common.ts index 27f051ff2e9c9..18ade57662ed3 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/alert_rules/common.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/alert_rules/common.ts @@ -4,6 +4,7 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ + import moment, { Moment } from 'moment'; import { isRight } from 'fp-ts/lib/Either'; import Mustache from 'mustache'; @@ -14,6 +15,7 @@ import { AlertInstanceContext as AlertContext, AlertInstanceState as AlertState, } from '@kbn/alerting-plugin/server'; +import { getAlertDetailsUrl } from '@kbn/observability-plugin/common'; import { addSpaceIdToPath } from '@kbn/spaces-plugin/common'; import { i18n } from '@kbn/i18n'; import { fromKueryExpression, toElasticsearchQuery } from '@kbn/es-query'; @@ -113,12 +115,6 @@ export const getViewInAppUrl = ( relativeViewInAppUrl: string ) => addSpaceIdToPath(basePath.publicBaseUrl, spaceId, relativeViewInAppUrl); -export const getAlertDetailsUrl = ( - basePath: IBasePath, - spaceId: string, - alertUuid: string | null -) => addSpaceIdToPath(basePath.publicBaseUrl, spaceId, `/app/observability/alerts/${alertUuid}`); - export const getRelativeViewInAppUrl = ({ configId, stateId, diff --git a/x-pack/plugins/observability_solution/synthetics/server/alert_rules/status_rule/monitor_status_rule.ts b/x-pack/plugins/observability_solution/synthetics/server/alert_rules/status_rule/monitor_status_rule.ts index 3ca5aeb94af58..a5d530f2ec53b 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/alert_rules/status_rule/monitor_status_rule.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/alert_rules/status_rule/monitor_status_rule.ts @@ -14,7 +14,7 @@ import { RuleExecutorOptions, AlertsClientError, } from '@kbn/alerting-plugin/server'; -import { observabilityPaths } from '@kbn/observability-plugin/common'; +import { getAlertDetailsUrl, observabilityPaths } from '@kbn/observability-plugin/common'; import { ObservabilityUptimeAlert } from '@kbn/alerts-as-data-utils'; import { syntheticsRuleFieldMap } from '../../../common/rules/synthetics_rule_field_map'; import { SyntheticsPluginsSetupDependencies, SyntheticsServerSetup } from '../../types'; @@ -33,7 +33,6 @@ import { import { setRecoveredAlertsContext, updateState, - getAlertDetailsUrl, getViewInAppUrl, getRelativeViewInAppUrl, getFullViewInAppMessage, diff --git a/x-pack/plugins/observability_solution/synthetics/server/alert_rules/tls_rule/message_utils.test.ts b/x-pack/plugins/observability_solution/synthetics/server/alert_rules/tls_rule/message_utils.test.ts index e07ba00c1de6c..39fa7b185fb8d 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/alert_rules/tls_rule/message_utils.test.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/alert_rules/tls_rule/message_utils.test.ts @@ -4,9 +4,8 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ + import { IBasePath } from '@kbn/core/server'; -import { AlertsLocatorParams } from '@kbn/observability-plugin/common'; -import { LocatorPublic } from '@kbn/share-plugin/common'; import { setTLSRecoveredAlertsContext } from './message_utils'; import { TLSLatestPing } from './tls_rule_executor'; @@ -17,11 +16,6 @@ describe('setTLSRecoveredAlertsContext', () => { const basePath = { publicBaseUrl: 'https://localhost:5601', } as IBasePath; - const alertsLocatorMock = { - getLocation: jest.fn().mockImplementation(() => ({ - path: 'https://localhost:5601/app/observability/alerts/alert-id', - })), - } as any as LocatorPublic; const alertState = { summary: 'test-summary', status: 'has expired', @@ -57,9 +51,7 @@ describe('setTLSRecoveredAlertsContext', () => { await setTLSRecoveredAlertsContext({ alertsClient: alertsClientMock, basePath, - defaultStartedAt: timestamp, spaceId: 'default', - alertsLocator: alertsLocatorMock, latestPings: [ { config_id: configId, @@ -122,9 +114,7 @@ describe('setTLSRecoveredAlertsContext', () => { await setTLSRecoveredAlertsContext({ alertsClient: alertsClientMock, basePath, - defaultStartedAt: timestamp, spaceId: 'default', - alertsLocator: alertsLocatorMock, latestPings: [ { config_id: configId, diff --git a/x-pack/plugins/observability_solution/synthetics/server/alert_rules/tls_rule/message_utils.ts b/x-pack/plugins/observability_solution/synthetics/server/alert_rules/tls_rule/message_utils.ts index 5fc23a370caea..3f0650f12ee8b 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/alert_rules/tls_rule/message_utils.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/alert_rules/tls_rule/message_utils.ts @@ -7,8 +7,7 @@ import moment from 'moment/moment'; import { IBasePath } from '@kbn/core-http-server'; -import { LocatorPublic } from '@kbn/share-plugin/common'; -import { AlertsLocatorParams, getAlertUrl } from '@kbn/observability-plugin/common'; +import { getAlertDetailsUrl } from '@kbn/observability-plugin/common'; import { AlertInstanceContext as AlertContext, AlertInstanceState as AlertState, @@ -85,9 +84,7 @@ export const getCertSummary = (cert: Cert, expirationThreshold: number, ageThres export const setTLSRecoveredAlertsContext = async ({ alertsClient, basePath, - defaultStartedAt, spaceId, - alertsLocator, latestPings, }: { alertsClient: PublicAlertsClient< @@ -96,10 +93,8 @@ export const setTLSRecoveredAlertsContext = async ({ AlertContext, ActionGroupIdsOf >; - defaultStartedAt: string; basePath: IBasePath; spaceId: string; - alertsLocator?: LocatorPublic; latestPings: TLSLatestPing[]; }) => { const recoveredAlerts = alertsClient.getRecoveredAlerts() ?? []; @@ -107,16 +102,9 @@ export const setTLSRecoveredAlertsContext = async ({ for (const recoveredAlert of recoveredAlerts) { const recoveredAlertId = recoveredAlert.alert.getId(); const alertUuid = recoveredAlert.alert.getUuid(); - const indexedStartedAt = recoveredAlert.alert.getStart() ?? defaultStartedAt; const state = recoveredAlert.alert.getState(); - const alertUrl = await getAlertUrl( - alertUuid, - spaceId, - indexedStartedAt, - alertsLocator, - basePath.publicBaseUrl - ); + const alertUrl = await getAlertDetailsUrl(basePath, spaceId, alertUuid); const configId = state.configId; const latestPing = latestPings.find((ping) => ping.config_id === configId); diff --git a/x-pack/plugins/observability_solution/synthetics/server/alert_rules/tls_rule/tls_rule.ts b/x-pack/plugins/observability_solution/synthetics/server/alert_rules/tls_rule/tls_rule.ts index 3aaafcaf17468..1339aeac89ad3 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/alert_rules/tls_rule/tls_rule.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/alert_rules/tls_rule/tls_rule.ts @@ -15,13 +15,7 @@ import { } from '@kbn/alerting-plugin/server'; import { asyncForEach } from '@kbn/std'; import { ALERT_REASON, ALERT_UUID } from '@kbn/rule-data-utils'; -import { - alertsLocatorID, - AlertsLocatorParams, - getAlertUrl, - observabilityPaths, -} from '@kbn/observability-plugin/common'; -import { LocatorPublic } from '@kbn/share-plugin/common'; +import { getAlertDetailsUrl, observabilityPaths } from '@kbn/observability-plugin/common'; import { schema } from '@kbn/config-schema'; import { ObservabilityUptimeAlert } from '@kbn/alerts-as-data-utils'; import { syntheticsRuleFieldMap } from '../../../common/rules/synthetics_rule_field_map'; @@ -92,14 +86,12 @@ export const registerSyntheticsTLSCheckRule = ( TLSAlert > ) => { - const { state: ruleState, params, services, spaceId, previousStartedAt, startedAt } = options; + const { state: ruleState, params, services, spaceId, previousStartedAt } = options; const { alertsClient, savedObjectsClient, scopedClusterClient } = services; if (!alertsClient) { throw new AlertsClientError(); } - const { basePath, share } = server; - const alertsLocator: LocatorPublic | undefined = - share.url.locators.get(alertsLocatorID); + const { basePath } = server; const tlsRule = new TLSRuleExecutor( previousStartedAt, @@ -121,12 +113,11 @@ export const registerSyntheticsTLSCheckRule = ( } const alertId = cert.sha256; - const { uuid, start } = alertsClient.report({ + const { uuid } = alertsClient.report({ id: alertId, actionGroup: TLS_CERTIFICATE.id, state: { ...updateState(ruleState, foundCerts), ...summary }, }); - const indexedStartedAt = start ?? startedAt.toISOString(); const payload = { [CERT_COMMON_NAME]: cert.common_name, @@ -139,13 +130,7 @@ export const registerSyntheticsTLSCheckRule = ( }; const context = { - [ALERT_DETAILS_URL]: await getAlertUrl( - uuid, - spaceId, - indexedStartedAt, - alertsLocator, - basePath.publicBaseUrl - ), + [ALERT_DETAILS_URL]: await getAlertDetailsUrl(basePath, spaceId, uuid), ...summary, }; @@ -159,9 +144,7 @@ export const registerSyntheticsTLSCheckRule = ( await setTLSRecoveredAlertsContext({ alertsClient, basePath, - defaultStartedAt: startedAt.toISOString(), spaceId, - alertsLocator, latestPings, }); diff --git a/x-pack/plugins/observability_solution/synthetics/server/queries/get_monitor.ts b/x-pack/plugins/observability_solution/synthetics/server/queries/get_monitor.ts index 64e425951f5ff..2ccc8fe84d89c 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/queries/get_monitor.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/queries/get_monitor.ts @@ -5,12 +5,11 @@ * 2.0. */ -import { SavedObjectsClientContract } from '@kbn/core/server'; +import { SavedObject } from '@kbn/core/server'; import { EncryptedSavedObjectsClient } from '@kbn/encrypted-saved-objects-plugin/server'; import { syntheticsMonitorType } from '../../common/types/saved_objects'; import { SyntheticsMonitorWithSecretsAttributes, - EncryptedSyntheticsMonitorAttributes, SyntheticsMonitor, } from '../../common/runtime_types'; import { normalizeSecrets } from '../synthetics_service/utils/secrets'; @@ -18,28 +17,22 @@ import { normalizeSecrets } from '../synthetics_service/utils/secrets'; export const getSyntheticsMonitor = async ({ monitorId, encryptedSavedObjectsClient, - savedObjectsClient, + spaceId, }: { monitorId: string; + spaceId: string; encryptedSavedObjectsClient: EncryptedSavedObjectsClient; - savedObjectsClient: SavedObjectsClientContract; -}): Promise => { +}): Promise> => { try { - const encryptedMonitor = await savedObjectsClient.get( - syntheticsMonitorType, - monitorId - ); - const decryptedMonitor = await encryptedSavedObjectsClient.getDecryptedAsInternalUser( syntheticsMonitorType, monitorId, { - namespace: encryptedMonitor.namespaces?.[0], + namespace: spaceId, } ); - const { attributes } = normalizeSecrets(decryptedMonitor); - return attributes; + return normalizeSecrets(decryptedMonitor); } catch (e) { throw e; } diff --git a/x-pack/plugins/observability_solution/synthetics/server/queries/query_monitor_status.ts b/x-pack/plugins/observability_solution/synthetics/server/queries/query_monitor_status.ts index 4c3072ffce50f..f7fa0fc0a50af 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/queries/query_monitor_status.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/queries/query_monitor_status.ts @@ -153,6 +153,23 @@ export async function queryMonitorStatus({ const downConfigs: Record = {}; const monitorsWithoutData = new Map(Object.entries(cloneDeep(monitorLocationsMap))); const pendingConfigs: Record = {}; + const disabledConfigs: Record = {}; + + monitors + .filter((monitor) => !monitor.attributes[ConfigKey.ENABLED]) + .forEach((monitor) => { + const monitorQueryId = monitor.attributes[ConfigKey.MONITOR_QUERY_ID]; + monitor.attributes[ConfigKey.LOCATIONS]?.forEach((location) => { + disabledConfigs[`${monitorQueryIdToConfigIdMap[monitorQueryId]}-${location.id}`] = { + configId: `${monitorQueryIdToConfigIdMap[monitorQueryId]}`, + monitorQueryId, + status: 'disabled', + locationId: location.id, + locationLabel: location.label, + ...getMonitorMeta(monitor), + }; + }); + }); const queries: MsearchMultisearchBody[] = times(pageCount).map((i) => { const idsToQuery = (monitorQueryIds as string[]).slice(i * idSize, i * idSize + idSize); @@ -164,78 +181,73 @@ export async function queryMonitorStatus({ }).body; }); - const { responses } = await esClient.msearch( - queries, - 'getCurrentStatusOverview' - ); - - responses.forEach((result) => { - result.aggregations?.id.buckets.forEach(({ location, key: queryId }) => { - const locationSummaries = location.buckets.map(({ status, key: locationName }) => { - const ping = status.hits.hits[0]._source; - return { location: locationName, ping }; - }); + if (queries.length) { + const { responses } = await esClient.msearch( + queries, + 'getCurrentStatusOverview' + ); - const monitor = monitors.find((m) => m.attributes[ConfigKey.MONITOR_QUERY_ID] === queryId)!; + responses.forEach((result) => { + result.aggregations?.id.buckets.forEach(({ location, key: queryId }) => { + const locationSummaries = location.buckets.map(({ status, key: locationName }) => { + const ping = status.hits.hits[0]._source; + return { location: locationName, ping }; + }); - // discard any locations that are not in the monitorLocationsMap for the given monitor as well as those which are - // in monitorLocationsMap but not in listOfLocations - const monLocations = monitorLocationsMap?.[queryId]; - const monQueriedLocations = intersection(monLocations, monitorLocationIds); - monQueriedLocations?.forEach((monLocation) => { - const locationSummary = locationSummaries.find( - (summary) => summary.location === monLocation - ); + const monitor = monitors.find((m) => m.attributes[ConfigKey.MONITOR_QUERY_ID] === queryId)!; - if (locationSummary) { - const { ping } = locationSummary; - const downCount = ping.summary?.down ?? 0; - const upCount = ping.summary?.up ?? 0; - const configId = ping.config_id; - const monitorQueryId = ping.monitor.id; + // discard any locations that are not in the monitorLocationsMap for the given monitor as well as those which are + // in monitorLocationsMap but not in listOfLocations + const monLocations = monitorLocationsMap?.[queryId]; + const monQueriedLocations = intersection(monLocations, monitorLocationIds); + monQueriedLocations?.forEach((monLocation) => { + const locationSummary = locationSummaries.find( + (summary) => summary.location === monLocation + ); - const meta = { - ping, - configId, - monitorQueryId, - locationId: monLocation, - timestamp: ping['@timestamp'], - locationLabel: ping.observer.geo!.name!, - name: monitor.attributes[ConfigKey.NAME], - schedule: monitor.attributes[ConfigKey.SCHEDULE].number, - tags: monitor.attributes[ConfigKey.TAGS], - isEnabled: monitor.attributes[ConfigKey.ENABLED], - type: monitor.attributes[ConfigKey.MONITOR_TYPE], - projectId: monitor.attributes[ConfigKey.PROJECT_ID], - isStatusAlertEnabled: isStatusEnabled(monitor.attributes[ConfigKey.ALERT_CONFIG]), - updated_at: monitor.updated_at, - }; + if (locationSummary) { + const { ping } = locationSummary; + const downCount = ping.summary?.down ?? 0; + const upCount = ping.summary?.up ?? 0; + const configId = ping.config_id; + const monitorQueryId = ping.monitor.id; - if (downCount > 0) { - down += 1; - downConfigs[`${configId}-${monLocation}`] = { - ...meta, - status: 'down', + const meta = { + ping, + configId, + monitorQueryId, + locationId: monLocation, + timestamp: ping['@timestamp'], + locationLabel: ping.observer.geo!.name!, + ...getMonitorMeta(monitor), }; - } else if (upCount > 0) { - up += 1; - upConfigs[`${configId}-${monLocation}`] = { - ...meta, - status: 'up', - }; - } - const monitorsMissingData = monitorsWithoutData.get(monitorQueryId) || []; - monitorsWithoutData.set( - monitorQueryId, - monitorsMissingData?.filter((loc) => loc !== monLocation) - ); - if (!monitorsWithoutData.get(monitorQueryId)?.length) { - monitorsWithoutData.delete(monitorQueryId); + + if (downCount > 0) { + down += 1; + downConfigs[`${configId}-${monLocation}`] = { + ...meta, + status: 'down', + }; + } else if (upCount > 0) { + up += 1; + upConfigs[`${configId}-${monLocation}`] = { + ...meta, + status: 'up', + }; + } + const monitorsMissingData = monitorsWithoutData.get(monitorQueryId) || []; + monitorsWithoutData.set( + monitorQueryId, + monitorsMissingData?.filter((loc) => loc !== monLocation) + ); + if (!monitorsWithoutData.get(monitorQueryId)?.length) { + monitorsWithoutData.delete(monitorQueryId); + } } - } + }); }); }); - }); + } // identify the remaining monitors without data, to determine pending monitors for (const [queryId, locs] of monitorsWithoutData) { @@ -269,5 +281,19 @@ export async function queryMonitorStatus({ downConfigs, pendingConfigs, enabledMonitorQueryIds: monitorQueryIds, + disabledConfigs, }; } + +const getMonitorMeta = (monitor: SavedObjectsFindResult) => { + return { + name: monitor.attributes[ConfigKey.NAME], + schedule: monitor.attributes[ConfigKey.SCHEDULE].number, + tags: monitor.attributes[ConfigKey.TAGS], + isEnabled: monitor.attributes[ConfigKey.ENABLED], + type: monitor.attributes[ConfigKey.MONITOR_TYPE], + projectId: monitor.attributes[ConfigKey.PROJECT_ID], + isStatusAlertEnabled: isStatusEnabled(monitor.attributes[ConfigKey.ALERT_CONFIG]), + updated_at: monitor.updated_at, + }; +}; diff --git a/x-pack/plugins/observability_solution/synthetics/server/routes/index.ts b/x-pack/plugins/observability_solution/synthetics/server/routes/index.ts index 75aaf9f49c4d3..48e0de1c7fba4 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/routes/index.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/routes/index.ts @@ -66,7 +66,6 @@ export const syntheticsAppRestApiRoutes: SyntheticsRestApiRouteFactory[] = [ disableSyntheticsRoute, getServiceLocationsRoute, getSyntheticsProjectMonitorsRoute, - getAllSyntheticsMonitorRoute, installIndexTemplatesRoute, runOnceSyntheticsMonitorRoute, testNowMonitorRoute, @@ -109,6 +108,7 @@ export const syntheticsAppPublicRestApiRoutes: SyntheticsRestApiRouteFactory[] = addPrivateLocationRoute, deletePrivateLocationRoute, getPrivateLocationsRoute, + getAllSyntheticsMonitorRoute, getSyntheticsMonitorRoute, addSyntheticsMonitorRoute, editSyntheticsMonitorRoute, diff --git a/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/add_monitor.ts b/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/add_monitor.ts index 57f305b0ec2ef..f2c8f0974a6b4 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/add_monitor.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/add_monitor.ts @@ -13,7 +13,7 @@ import { AddEditMonitorAPI, CreateMonitorPayLoad } from './add_monitor/add_monit import { SyntheticsRestApiRouteFactory } from '../types'; import { SYNTHETICS_API_URLS } from '../../../common/constants'; import { normalizeAPIConfig, validateMonitor } from './monitor_validation'; -import { mapSavedObjectToMonitor } from './helper'; +import { mapSavedObjectToMonitor } from './formatters/saved_object_to_monitor'; export const addSyntheticsMonitorRoute: SyntheticsRestApiRouteFactory = () => ({ method: 'POST', @@ -26,13 +26,18 @@ export const addSyntheticsMonitorRoute: SyntheticsRestApiRouteFactory = () => ({ id: schema.maybe(schema.string()), preserve_namespace: schema.maybe(schema.boolean()), gettingStarted: schema.maybe(schema.boolean()), + internal: schema.maybe( + schema.boolean({ + defaultValue: false, + }) + ), }), }, }, handler: async (routeContext): Promise => { const { request, response, server } = routeContext; // usually id is auto generated, but this is useful for testing - const { id } = request.query; + const { id, internal } = request.query; const addMonitorAPI = new AddEditMonitorAPI(routeContext); @@ -113,7 +118,7 @@ export const addSyntheticsMonitorRoute: SyntheticsRestApiRouteFactory = () => ({ addMonitorAPI.initDefaultAlerts(newMonitor.attributes.name); addMonitorAPI.setupGettingStarted(newMonitor.id); - return mapSavedObjectToMonitor(newMonitor); + return mapSavedObjectToMonitor({ monitor: newMonitor, internal }); } catch (getErr) { server.logger.error(getErr); if (getErr instanceof InvalidLocationError) { diff --git a/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/add_monitor/add_monitor_api.ts b/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/add_monitor/add_monitor_api.ts index 359f3373cfd35..b80a4f5be6825 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/add_monitor/add_monitor_api.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/add_monitor/add_monitor_api.ts @@ -188,7 +188,7 @@ export class AddEditMonitorAPI { prevLocations?: MonitorFields['locations'] ) { const { savedObjectsClient, syntheticsMonitorClient, request } = this.routeContext; - const ui = Boolean((request.query as { ui?: boolean })?.ui); + const internal = Boolean((request.query as { internal?: boolean })?.internal); const { locations, private_locations: privateLocations, @@ -212,7 +212,7 @@ export class AddEditMonitorAPI { if (!locations && !privateLocations && prevLocations) { locationsVal = prevLocations; } else { - const monitorLocations = parseMonitorLocations(monitorPayload, prevLocations, ui); + const monitorLocations = parseMonitorLocations(monitorPayload, prevLocations, internal); if (monitorLocations.privateLocations.length > 0) { this.allPrivateLocations = await getPrivateLocations(savedObjectsClient); diff --git a/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/add_monitor/utils.ts b/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/add_monitor/utils.ts index cd3c05855629d..0d096ee21745f 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/add_monitor/utils.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/add_monitor/utils.ts @@ -25,7 +25,7 @@ export const getPrivateLocationsForMonitor = async ( export const parseMonitorLocations = ( monitorPayload: CreateMonitorPayLoad, prevLocations?: MonitorFields['locations'], - ui: boolean = false + internal: boolean = false ) => { const { locations, private_locations: privateLocations } = monitorPayload; @@ -37,11 +37,11 @@ export const parseMonitorLocations = ( let pvtLocs = [...(privateLocations ?? []), ...extractPvtLocs]?.map((loc) => typeof loc === 'string' ? loc : loc.id ); - if (ui && !privateLocations && !locations && prevLocations) { + if (internal && !privateLocations && !locations && prevLocations) { locs = prevLocations.filter((loc) => loc.isServiceManaged).map((loc) => loc.id); pvtLocs = prevLocations.filter((loc) => !loc.isServiceManaged).map((loc) => loc.id); } else { - if (prevLocations && !ui) { + if (prevLocations && !internal) { if (!locations && !privateLocations) { locs = prevLocations.filter((loc) => loc.isServiceManaged).map((loc) => loc.id); pvtLocs = prevLocations.filter((loc) => !loc.isServiceManaged).map((loc) => loc.id); diff --git a/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/edit_monitor.ts b/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/edit_monitor.ts index b2871f6a9accb..d9261847db1ab 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/edit_monitor.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/edit_monitor.ts @@ -14,7 +14,7 @@ import { AddEditMonitorAPI, CreateMonitorPayLoad } from './add_monitor/add_monit import { ELASTIC_MANAGED_LOCATIONS_DISABLED } from './add_monitor_project'; import { getDecryptedMonitor } from '../../saved_objects/synthetics_monitor'; import { getPrivateLocations } from '../../synthetics_service/get_private_locations'; -import { mergeSourceMonitor } from './helper'; +import { mergeSourceMonitor } from './formatters/saved_object_to_monitor'; import { RouteContext, SyntheticsRestApiRouteFactory } from '../types'; import { syntheticsMonitorType } from '../../../common/types/saved_objects'; import { @@ -33,7 +33,7 @@ import { formatTelemetryUpdateEvent, } from '../telemetry/monitor_upgrade_sender'; import { formatSecrets, normalizeSecrets } from '../../synthetics_service/utils/secrets'; -import { mapSavedObjectToMonitor } from './helper'; +import { mapSavedObjectToMonitor } from './formatters/saved_object_to_monitor'; // Simplify return promise type and type it with runtime_types export const editSyntheticsMonitorRoute: SyntheticsRestApiRouteFactory = () => ({ @@ -46,7 +46,11 @@ export const editSyntheticsMonitorRoute: SyntheticsRestApiRouteFactory = () => ( monitorId: schema.string(), }), query: schema.object({ - ui: schema.maybe(schema.boolean()), + internal: schema.maybe( + schema.boolean({ + defaultValue: false, + }) + ), }), body: schema.any(), }, @@ -55,7 +59,7 @@ export const editSyntheticsMonitorRoute: SyntheticsRestApiRouteFactory = () => ( const { request, response, spaceId, server } = routeContext; const { logger } = server; const monitor = request.body as SyntheticsMonitor; - const reqQuery = request.query as { ui?: boolean }; + const reqQuery = request.query as { internal?: boolean }; const { monitorId } = request.params; if (!monitor || typeof monitor !== 'object' || isEmpty(monitor) || Array.isArray(monitor)) { @@ -86,7 +90,7 @@ export const editSyntheticsMonitorRoute: SyntheticsRestApiRouteFactory = () => ( const previousMonitor = await getDecryptedMonitor(server, monitorId, spaceId); const normalizedPreviousMonitor = normalizeSecrets(previousMonitor).attributes; - if (normalizedPreviousMonitor.origin !== 'ui' && !reqQuery.ui) { + if (normalizedPreviousMonitor.origin !== 'ui' && !reqQuery.internal) { return response.badRequest(getInvalidOriginError(monitor)); } @@ -170,9 +174,13 @@ export const editSyntheticsMonitorRoute: SyntheticsRestApiRouteFactory = () => ( }); } - return mapSavedObjectToMonitor( - editedMonitorSavedObject as SavedObject - ); + return mapSavedObjectToMonitor({ + internal: reqQuery.internal, + monitor: { + ...(editedMonitorSavedObject as SavedObject), + created_at: previousMonitor.created_at, + }, + }); } catch (updateErr) { if (SavedObjectsErrorHelpers.isNotFoundError(updateErr)) { return getMonitorNotFoundResponse(response, monitorId); diff --git a/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/helper.test.ts b/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/formatters/saved_object_to_monitor.test.ts similarity index 64% rename from x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/helper.test.ts rename to x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/formatters/saved_object_to_monitor.test.ts index 9e0bbf10f45e0..0ddfda0f77874 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/helper.test.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/formatters/saved_object_to_monitor.test.ts @@ -5,8 +5,8 @@ * 2.0. */ -import { mapSavedObjectToMonitor, mergeSourceMonitor } from './helper'; -import { EncryptedSyntheticsMonitor } from '../../../common/runtime_types'; +import { mapSavedObjectToMonitor, mergeSourceMonitor } from './saved_object_to_monitor'; +import { EncryptedSyntheticsMonitor } from '../../../../common/runtime_types'; describe('mergeSourceMonitor', () => { it('should merge keys', function () { @@ -66,8 +66,82 @@ describe('mergeSourceMonitor', () => { ]); }); - it('should omit null or undefined values', () => { - const result = mapSavedObjectToMonitor({ attributes: testMonitor } as any); + it('should not omit null or undefined values', () => { + const result = mapSavedObjectToMonitor({ monitor: { attributes: testMonitor } } as any); + + expect(result).toEqual({ + alert: { + status: { + enabled: true, + }, + tls: { + enabled: true, + }, + }, + config_id: 'ae88f0aa-9c7d-4a5f-96dc-89d65a0ca947', + custom_heartbeat_id: 'todos-lightweight-test-projects-default', + enabled: true, + id: 'todos-lightweight-test-projects-default', + ipv4: true, + ipv6: true, + locations: [ + { + geo: { + lat: 41.25, + lon: -95.86, + }, + id: 'us_central', + isServiceManaged: true, + label: 'North America - US Central', + }, + ], + max_redirects: 0, + mode: 'any', + name: 'Todos Lightweight', + namespace: 'default', + original_space: 'default', + proxy_url: '', + retest_on_failure: true, + revision: 21, + schedule: { + number: '3', + unit: 'm', + }, + 'service.name': '', + tags: [], + timeout: '16', + type: 'http', + url: '${devUrl}', + 'url.port': null, + ssl: { + certificate: '', + certificate_authorities: '', + supported_protocols: ['TLSv1.1', 'TLSv1.2', 'TLSv1.3'], + verification_mode: 'full', + key: 'test-key', + }, + response: { + include_body: 'on_error', + include_body_max_bytes: '1024', + include_headers: true, + }, + check: { + request: { + method: 'GET', + }, + response: { + status: ['404'], + }, + }, + params: {}, + }); + }); + + it('should not omit null or undefined values with ui', () => { + const result = mapSavedObjectToMonitor({ + monitor: { attributes: { ...testMonitor } }, + internal: true, + } as any); expect(result).toEqual({ __ui: { @@ -100,27 +174,37 @@ describe('mergeSourceMonitor', () => { label: 'North America - US Central', }, ], - max_attempts: 2, max_redirects: '0', mode: 'any', name: 'Todos Lightweight', namespace: 'default', - origin: 'project', original_space: 'default', project_id: 'test-projects', - 'response.include_body': 'on_error', - 'response.include_body_max_bytes': '1024', - 'response.include_headers': true, + proxy_url: '', revision: 21, schedule: { number: '3', unit: 'm', }, + 'service.name': '', + 'ssl.certificate': '', + 'ssl.certificate_authorities': '', + 'ssl.key': 'test-key', 'ssl.supported_protocols': ['TLSv1.1', 'TLSv1.2', 'TLSv1.3'], 'ssl.verification_mode': 'full', + 'response.include_body': 'on_error', + 'response.include_body_max_bytes': '1024', + 'response.include_headers': true, + tags: [], timeout: '16', type: 'http', - url: '${devUrl}', + 'url.port': null, + form_monitor_type: 'http', + hash: 'f4b6u3Q/PMK5KzEtPeMNzXJBA46rt+yilohaAoqMzqk=', + journey_id: 'todos-lightweight', + max_attempts: 2, + origin: 'project', + urls: '${devUrl}', }); }); }); @@ -179,6 +263,7 @@ const testMonitor = { ipv4: true, ipv6: true, 'ssl.certificate_authorities': '', + 'ssl.key': 'test-key', 'ssl.certificate': '', 'ssl.verification_mode': 'full', 'ssl.supported_protocols': ['TLSv1.1', 'TLSv1.2', 'TLSv1.3'], diff --git a/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/formatters/saved_object_to_monitor.ts b/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/formatters/saved_object_to_monitor.ts new file mode 100644 index 0000000000000..4f5a3b194c896 --- /dev/null +++ b/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/formatters/saved_object_to_monitor.ts @@ -0,0 +1,158 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { SavedObject } from '@kbn/core/server'; +import { mergeWith, omit, omitBy } from 'lodash'; +import { + ConfigKey, + EncryptedSyntheticsMonitor, + MonitorFields, + MonitorFieldsResult, +} from '../../../../common/runtime_types'; + +const keysToOmit = [ + ConfigKey.URLS, + ConfigKey.SOURCE_INLINE, + ConfigKey.HOSTS, + ConfigKey.CONFIG_HASH, + ConfigKey.JOURNEY_ID, + ConfigKey.FORM_MONITOR_TYPE, + ConfigKey.MAX_ATTEMPTS, + ConfigKey.MONITOR_SOURCE_TYPE, + ConfigKey.METADATA, + ConfigKey.SOURCE_PROJECT_CONTENT, + ConfigKey.PROJECT_ID, + ConfigKey.JOURNEY_FILTERS_MATCH, + ConfigKey.JOURNEY_FILTERS_TAGS, + ConfigKey.MONITOR_SOURCE_TYPE, +]; + +type Result = MonitorFieldsResult & { + url?: string; + host?: string; + inline_script?: string; + ssl: Record; + response: Record; + check: Record; +}; + +export const transformPublicKeys = (result: Result) => { + let formattedResult = { + ...result, + [ConfigKey.PARAMS]: formatParams(result), + retest_on_failure: (result[ConfigKey.MAX_ATTEMPTS] ?? 1) > 1, + ...(result[ConfigKey.HOSTS] && { host: result[ConfigKey.HOSTS] }), + ...(result[ConfigKey.URLS] && { url: result[ConfigKey.URLS] }), + }; + if (formattedResult[ConfigKey.MONITOR_TYPE] === 'browser') { + formattedResult = { + ...formattedResult, + ...(result[ConfigKey.SOURCE_INLINE] && { inline_script: result[ConfigKey.SOURCE_INLINE] }), + [ConfigKey.PLAYWRIGHT_OPTIONS]: formatPWOptions(result), + }; + } else { + formattedResult.ssl = formatNestedFields(formattedResult, 'ssl'); + formattedResult.response = formatNestedFields(formattedResult, 'response'); + formattedResult.check = formatNestedFields(formattedResult, 'check'); + if (formattedResult[ConfigKey.MAX_REDIRECTS]) { + formattedResult[ConfigKey.MAX_REDIRECTS] = Number(formattedResult[ConfigKey.MAX_REDIRECTS]); + } + } + const res = omit(formattedResult, keysToOmit) as Result; + + return omitBy( + res, + (value, key) => + key.startsWith('response.') || key.startsWith('ssl.') || key.startsWith('check.') + ); +}; + +export function mapSavedObjectToMonitor({ + monitor, + internal = false, +}: { + monitor: SavedObject; + internal?: boolean; +}) { + const result = { + ...monitor.attributes, + created_at: monitor.created_at, + updated_at: monitor.updated_at, + } as Result; + if (internal) { + return result; + } + return transformPublicKeys(result); +} +export function mergeSourceMonitor( + normalizedPreviousMonitor: EncryptedSyntheticsMonitor, + monitor: EncryptedSyntheticsMonitor +) { + return mergeWith({ ...normalizedPreviousMonitor }, monitor, customizer); +} + +// Ensure that METADATA is merged deeply, to protect AAD and prevent decryption errors +const customizer = (destVal: any, srcValue: any, key: string) => { + if (key === ConfigKey.ALERT_CONFIG) { + return { ...destVal, ...srcValue }; + } + if (key !== ConfigKey.METADATA) { + return srcValue; + } +}; + +const formatParams = (config: MonitorFields) => { + if (config[ConfigKey.PARAMS]) { + try { + return (config[ConfigKey.PARAMS] = JSON.parse(config[ConfigKey.PARAMS] ?? '{}')); + } catch (e) { + // ignore + return {}; + } + } + return {}; +}; + +const formatPWOptions = (config: MonitorFields) => { + if (config[ConfigKey.PLAYWRIGHT_OPTIONS]) { + try { + return (config[ConfigKey.PLAYWRIGHT_OPTIONS] = JSON.parse( + config[ConfigKey.PLAYWRIGHT_OPTIONS] ?? '{}' + )); + } catch (e) { + // ignore + return {}; + } + } + return {}; +}; + +// combine same nested fields into same object +const formatNestedFields = ( + config: MonitorFields | Record, + nestedKey: 'ssl' | 'response' | 'check' | 'request' +): Record => { + const nestedFields = Object.keys(config).filter((key) => + key.startsWith(`${nestedKey}.`) + ) as ConfigKey[]; + const obj: Record = {}; + + nestedFields.forEach((key) => { + const newKey = key.replace(`${nestedKey}.`, ''); + obj[newKey] = config[key]; + delete config[key]; + }); + + if (nestedKey === 'check') { + return { + request: formatNestedFields(obj, 'request'), + response: formatNestedFields(obj, 'response'), + }; + } + + return obj; +}; diff --git a/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/get_monitor.ts b/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/get_monitor.ts index 69e7491a86b2b..1a07ddc832561 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/get_monitor.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/get_monitor.ts @@ -12,7 +12,7 @@ import { isStatusEnabled } from '../../../common/runtime_types/monitor_managemen import { ConfigKey, EncryptedSyntheticsMonitorAttributes } from '../../../common/runtime_types'; import { SYNTHETICS_API_URLS } from '../../../common/constants'; import { getMonitorNotFoundResponse } from '../synthetics_service/service_errors'; -import { mapSavedObjectToMonitor } from './helper'; +import { mapSavedObjectToMonitor } from './formatters/saved_object_to_monitor'; import { getSyntheticsMonitor } from '../../queries/get_monitor'; export const getSyntheticsMonitorRoute: SyntheticsRestApiRouteFactory = () => ({ @@ -25,7 +25,11 @@ export const getSyntheticsMonitorRoute: SyntheticsRestApiRouteFactory = () => ({ monitorId: schema.string({ minLength: 1, maxLength: 1024 }), }), query: schema.object({ - decrypted: schema.maybe(schema.boolean()), + internal: schema.maybe( + schema.boolean({ + defaultValue: false, + }) + ), }), }, }, @@ -34,36 +38,36 @@ export const getSyntheticsMonitorRoute: SyntheticsRestApiRouteFactory = () => ({ response, server: { encryptedSavedObjects, coreStart }, savedObjectsClient, + spaceId, }): Promise => { const { monitorId } = request.params; try { - const { decrypted } = request.query; + const { internal } = request.query; - if (!decrypted) { - return mapSavedObjectToMonitor( - await savedObjectsClient.get( - syntheticsMonitorType, - monitorId - ) - ); - } else { - // only user with write permissions can decrypt the monitor - const canSave = - ( - await coreStart?.capabilities.resolveCapabilities(request, { - capabilityPath: 'uptime.*', - }) - ).uptime.save ?? false; - if (!canSave) { - return response.forbidden(); - } + const canSave = + ( + await coreStart?.capabilities.resolveCapabilities(request, { + capabilityPath: 'uptime.*', + }) + ).uptime.save ?? false; + if (Boolean(canSave)) { + // only user with write permissions can decrypt the monitor const encryptedSavedObjectsClient = encryptedSavedObjects.getClient(); - return await getSyntheticsMonitor({ + const monitor = await getSyntheticsMonitor({ monitorId, encryptedSavedObjectsClient, - savedObjectsClient, + spaceId, + }); + return mapSavedObjectToMonitor({ monitor, internal }); + } else { + return mapSavedObjectToMonitor({ + monitor: await savedObjectsClient.get( + syntheticsMonitorType, + monitorId + ), + internal, }); } } catch (getErr) { diff --git a/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/get_monitors_list.ts b/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/get_monitors_list.ts index 563a7fde740bb..62f60f6b5636c 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/get_monitors_list.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/get_monitors_list.ts @@ -4,17 +4,20 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ +import { mapSavedObjectToMonitor } from './formatters/saved_object_to_monitor'; import { SyntheticsRestApiRouteFactory } from '../types'; import { SYNTHETICS_API_URLS } from '../../../common/constants'; import { getMonitors, isMonitorsQueryFiltered, QuerySchema } from '../common'; import { syntheticsMonitorType } from '../../../common/types/saved_objects'; -import { mapSavedObjectToMonitor } from './helper'; export const getAllSyntheticsMonitorRoute: SyntheticsRestApiRouteFactory = () => ({ method: 'GET', path: SYNTHETICS_API_URLS.SYNTHETICS_MONITORS, - validate: { - query: QuerySchema, + validate: {}, + validation: { + request: { + query: QuerySchema, + }, }, handler: async (routeContext): Promise => { const { request, savedObjectsClient, syntheticsMonitorClient } = routeContext; @@ -39,7 +42,11 @@ export const getAllSyntheticsMonitorRoute: SyntheticsRestApiRouteFactory = () => return { ...rest, - monitors: savedObjects.map(mapSavedObjectToMonitor), + monitors: savedObjects.map((monitor) => + mapSavedObjectToMonitor({ + monitor, + }) + ), absoluteTotal, perPage: perPageT, syncErrors: syntheticsMonitorClient.syntheticsService.syncErrors, diff --git a/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/helper.ts b/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/helper.ts deleted file mode 100644 index d5480e0013b70..0000000000000 --- a/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/helper.ts +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { SavedObject } from '@kbn/core/server'; -import { mergeWith, omit, omitBy } from 'lodash'; -import { - ConfigKey, - EncryptedSyntheticsMonitor, - MonitorFields, -} from '../../../common/runtime_types'; - -const keysToOmit = [ - ConfigKey.URLS, - ConfigKey.SOURCE_INLINE, - ConfigKey.HOSTS, - ConfigKey.CONFIG_HASH, - ConfigKey.JOURNEY_ID, - ConfigKey.FORM_MONITOR_TYPE, -]; - -type Result = MonitorFields & { url?: string; host?: string; inline_script?: string }; - -export const transformPublicKeys = (result: Result) => { - if (result[ConfigKey.URLS]) { - result.url = result[ConfigKey.URLS]; - } - if (result[ConfigKey.SOURCE_INLINE]) { - result.inline_script = result[ConfigKey.SOURCE_INLINE]; - } - if (result[ConfigKey.HOSTS]) { - result.host = result[ConfigKey.HOSTS]; - } - if (result[ConfigKey.PARAMS]) { - try { - result[ConfigKey.PARAMS] = JSON.parse(result[ConfigKey.PARAMS] ?? '{}'); - } catch (e) { - // ignore - } - } - if (result[ConfigKey.PLAYWRIGHT_OPTIONS]) { - try { - result[ConfigKey.PLAYWRIGHT_OPTIONS] = JSON.parse( - result[ConfigKey.PLAYWRIGHT_OPTIONS] ?? '{}' - ); - } catch (e) { - // ignore - } - } - return omit(result, keysToOmit) as Result; -}; - -export function mapSavedObjectToMonitor( - so: SavedObject -) { - let result = Object.assign(so.attributes, { - created_at: so.created_at, - updated_at: so.updated_at, - }) as Result; - result = transformPublicKeys(result); - - // omit undefined value or null value - return omitBy(result, removeMonitorEmptyValues); -} -export function mergeSourceMonitor( - normalizedPreviousMonitor: EncryptedSyntheticsMonitor, - monitor: EncryptedSyntheticsMonitor -) { - return mergeWith({ ...normalizedPreviousMonitor }, monitor, customizer); -} - -// Ensure that METADATA is merged deeply, to protect AAD and prevent decryption errors -const customizer = (destVal: any, srcValue: any, key: string) => { - if (key === ConfigKey.ALERT_CONFIG) { - return { ...destVal, ...srcValue }; - } - if (key !== ConfigKey.METADATA) { - return srcValue; - } -}; - -export const removeMonitorEmptyValues = (v: any) => { - // value is falsy - return ( - v === undefined || - v === null || - // value is empty string - (typeof v === 'string' && v.trim() === '') || - // is empty array - (Array.isArray(v) && v.length === 0) || - // object is has no values - (typeof v === 'object' && Object.keys(v).length === 0) - ); -}; diff --git a/x-pack/plugins/observability_solution/synthetics/server/routes/overview_status/overview_status.test.ts b/x-pack/plugins/observability_solution/synthetics/server/routes/overview_status/overview_status.test.ts index 084070fd95595..b6909ba33a576 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/routes/overview_status/overview_status.test.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/routes/overview_status/overview_status.test.ts @@ -262,6 +262,7 @@ describe('current status route', () => { }) ).toMatchInlineSnapshot(` Object { + "disabledConfigs": Object {}, "down": 1, "downConfigs": Object { "id2-Europe - Germany": Object { @@ -527,6 +528,7 @@ describe('current status route', () => { }) ).toMatchInlineSnapshot(` Object { + "disabledConfigs": Object {}, "down": 1, "downConfigs": Object { "id2-Europe - Germany": Object { @@ -820,6 +822,7 @@ describe('current status route', () => { }) ).toMatchInlineSnapshot(` Object { + "disabledConfigs": Object {}, "down": 1, "downConfigs": Object { "id2-Europe - Germany": Object { diff --git a/x-pack/plugins/observability_solution/synthetics/server/routes/overview_status/overview_status.ts b/x-pack/plugins/observability_solution/synthetics/server/routes/overview_status/overview_status.ts index 9fff3710fc6a8..a68dcdea56657 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/routes/overview_status/overview_status.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/routes/overview_status/overview_status.ts @@ -67,6 +67,7 @@ export async function getStatus(context: RouteContext, params: OverviewStatusQue ConfigKey.NAME, ConfigKey.TAGS, ConfigKey.PROJECT_ID, + ConfigKey.ALERT_CONFIG, ], }); @@ -94,15 +95,16 @@ export async function getStatus(context: RouteContext, params: OverviewStatusQue to: 'now', }; - const { up, down, pending, upConfigs, downConfigs, pendingConfigs } = await queryMonitorStatus({ - range, - monitors: allMonitors, - monitorLocationsMap, - monitorQueryIdToConfigIdMap, - esClient: syntheticsEsClient, - monitorLocationIds: listOfLocationAfterFilter, - monitorQueryIds: enabledMonitorQueryIds, - }); + const { up, down, pending, upConfigs, downConfigs, pendingConfigs, disabledConfigs } = + await queryMonitorStatus({ + range, + monitors: allMonitors, + monitorLocationsMap, + monitorQueryIdToConfigIdMap, + esClient: syntheticsEsClient, + monitorLocationIds: listOfLocationAfterFilter, + monitorQueryIds: enabledMonitorQueryIds, + }); return { allIds, @@ -118,6 +120,7 @@ export async function getStatus(context: RouteContext, params: OverviewStatusQue upConfigs, downConfigs, pendingConfigs, + disabledConfigs, }; } diff --git a/x-pack/plugins/observability_solution/synthetics/server/saved_objects/migrations/monitors/8.6.0.test.ts b/x-pack/plugins/observability_solution/synthetics/server/saved_objects/migrations/monitors/8.6.0.test.ts index d587ca26718d8..e7c58f85577a1 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/saved_objects/migrations/monitors/8.6.0.test.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/saved_objects/migrations/monitors/8.6.0.test.ts @@ -28,7 +28,7 @@ const monitor850UI = { tags: [], timeout: '16', name: 'Dominique Clarke', - locations: [{ id: 'us_central', isServiceManaged: true }], + locations: [{ id: 'us_central', isServiceManaged: true }] as any, namespace: 'default', origin: 'ui', journey_id: '', diff --git a/x-pack/plugins/observability_solution/synthetics/server/saved_objects/migrations/monitors/test_fixtures/8.5.0.ts b/x-pack/plugins/observability_solution/synthetics/server/saved_objects/migrations/monitors/test_fixtures/8.5.0.ts index 516511b722d6d..38684ff25b3f5 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/saved_objects/migrations/monitors/test_fixtures/8.5.0.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/saved_objects/migrations/monitors/test_fixtures/8.5.0.ts @@ -27,7 +27,7 @@ export const httpUI = { tags: [], timeout: '16', name: 'Test monitor', - locations: [{ id: 'us_central', isServiceManaged: true }], + locations: [{ id: 'us_central', isServiceManaged: true }] as any, namespace: 'default', origin: 'ui', journey_id: '', diff --git a/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/private_location/synthetics_private_location.test.ts b/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/private_location/synthetics_private_location.test.ts index 21ed8e9021e14..2b3a7a81a01ad 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/private_location/synthetics_private_location.test.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/private_location/synthetics_private_location.test.ts @@ -288,7 +288,7 @@ const dummyBrowserConfig: Partial & { tags: [], timeout: null, name: 'Browser monitor', - locations: [{ isServiceManaged: false, id: '1' }], + locations: [{ isServiceManaged: false, id: '1', label: 'Fleet managed' }], namespace: 'default', origin: SourceType.UI, journey_id: '', diff --git a/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/private_location/synthetics_private_location.ts b/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/private_location/synthetics_private_location.ts index 52bb0eefcb84e..fe5f74529121e 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/private_location/synthetics_private_location.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/private_location/synthetics_private_location.ts @@ -52,7 +52,7 @@ export class SyntheticsPrivateLocation { const newPolicy = await this.server.fleet.packagePolicyService.buildPackagePolicyFromPackage( soClient, 'synthetics', - this.server.logger + { logger: this.server.logger, installMissingPackage: true } ); if (!newPolicy) { diff --git a/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/project_monitor/normalizers/common_fields.test.ts b/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/project_monitor/normalizers/common_fields.test.ts index 650c9b964aaec..b4dd34952c7a8 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/project_monitor/normalizers/common_fields.test.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/project_monitor/normalizers/common_fields.test.ts @@ -163,6 +163,7 @@ describe('getNormalizeCommonFields', () => { timeout: '16', params: '', max_attempts: 2, + labels: {}, }, }); } @@ -228,6 +229,7 @@ describe('getNormalizeCommonFields', () => { timeout: '16', params: '', max_attempts: 2, + labels: {}, }, }); }); diff --git a/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/project_monitor/normalizers/common_fields.ts b/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/project_monitor/normalizers/common_fields.ts index d657ad376b38d..0a3aa8295a94d 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/project_monitor/normalizers/common_fields.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/project_monitor/normalizers/common_fields.ts @@ -94,6 +94,7 @@ export const getNormalizeCommonFields = ({ : defaultFields[ConfigKey.PARAMS], // picking out keys specifically, so users can't add arbitrary fields [ConfigKey.ALERT_CONFIG]: getAlertConfig(monitor), + [ConfigKey.LABELS]: monitor.fields || defaultFields[ConfigKey.LABELS], }; return { normalizedFields, errors }; }; @@ -459,7 +460,9 @@ export const flattenAndFormatObject = (obj: Record, prefix = '' return acc; }, {}); -export const normalizeYamlConfig = (monitor: NormalizedProjectProps['monitor']) => { +export const normalizeYamlConfig = (data: NormalizedProjectProps['monitor']) => { + // we map fields to labels + const { fields: _fields, ...monitor } = data; const defaultFields = DEFAULT_FIELDS[monitor.type as MonitorTypeEnum]; const supportedKeys = Object.keys(defaultFields); const flattenedConfig = flattenAndFormatObject(monitor, '', supportedKeys); diff --git a/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/project_monitor/normalizers/http_monitor.ts b/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/project_monitor/normalizers/http_monitor.ts index caef8a1ba3381..3e8e8647568c4 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/project_monitor/normalizers/http_monitor.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/project_monitor/normalizers/http_monitor.ts @@ -124,5 +124,5 @@ export const formatMaxRedirects = (value?: string | number): string => { const defaultFields = DEFAULT_FIELDS[MonitorTypeEnum.HTTP]; - return value ?? defaultFields[ConfigKey.MAX_REDIRECTS]; + return value ?? String(defaultFields[ConfigKey.MAX_REDIRECTS]); }; diff --git a/x-pack/plugins/osquery/docs/openapi/ess/osquery_api_2023_10_31.bundled.schema.yaml b/x-pack/plugins/osquery/docs/openapi/ess/osquery_api_2023_10_31.bundled.schema.yaml index 1c660af3c886f..f224add76d524 100644 --- a/x-pack/plugins/osquery/docs/openapi/ess/osquery_api_2023_10_31.bundled.schema.yaml +++ b/x-pack/plugins/osquery/docs/openapi/ess/osquery_api_2023_10_31.bundled.schema.yaml @@ -1,7 +1,7 @@ openapi: 3.0.3 info: description: Run live queries, manage packs and saved queries. - title: Security Solution Osquery API (Elastic Cloud and self-hosted) + title: Security Osquery API (Elastic Cloud and self-hosted) version: '2023-10-31' servers: - url: http://{kibana_host}:{port} @@ -30,7 +30,7 @@ paths: description: OK summary: Get live queries tags: - - Security Solution Osquery API + - Security Osquery API post: description: Create and run a live query. operationId: OsqueryCreateLiveQuery @@ -49,7 +49,7 @@ paths: description: OK summary: Create a live query tags: - - Security Solution Osquery API + - Security Osquery API /api/osquery/live_queries/{id}: get: description: Get the details of a live query using the query ID. @@ -74,7 +74,7 @@ paths: description: OK summary: Get live query details tags: - - Security Solution Osquery API + - Security Osquery API /api/osquery/live_queries/{id}/results/{actionId}: get: description: Get the results of a live query using the query action ID. @@ -104,7 +104,7 @@ paths: description: OK summary: Get live query results tags: - - Security Solution Osquery API + - Security Osquery API /api/osquery/packs: get: description: Get a list of all query packs. @@ -124,7 +124,7 @@ paths: description: OK summary: Get packs tags: - - Security Solution Osquery API + - Security Osquery API post: description: Create a query pack. operationId: OsqueryCreatePacks @@ -143,7 +143,7 @@ paths: description: OK summary: Create a pack tags: - - Security Solution Osquery API + - Security Osquery API /api/osquery/packs/{id}: delete: description: Delete a query pack using the pack ID. @@ -163,7 +163,7 @@ paths: description: OK summary: Delete a pack tags: - - Security Solution Osquery API + - Security Osquery API get: description: Get the details of a query pack using the pack ID. operationId: OsqueryGetPacksDetails @@ -182,7 +182,7 @@ paths: description: OK summary: Get pack details tags: - - Security Solution Osquery API + - Security Osquery API put: description: | Update a query pack using the pack ID. @@ -210,7 +210,7 @@ paths: description: OK summary: Update a pack tags: - - Security Solution Osquery API + - Security Osquery API /api/osquery/saved_queries: get: description: Get a list of all saved queries. @@ -230,7 +230,7 @@ paths: description: OK summary: Get saved queries tags: - - Security Solution Osquery API + - Security Osquery API post: description: Create and run a saved query. operationId: OsqueryCreateSavedQuery @@ -249,7 +249,7 @@ paths: description: OK summary: Create a saved query tags: - - Security Solution Osquery API + - Security Osquery API /api/osquery/saved_queries/{id}: delete: description: Delete a saved query using the query ID. @@ -269,7 +269,7 @@ paths: description: OK summary: Delete a saved query tags: - - Security Solution Osquery API + - Security Osquery API get: description: Get the details of a saved query using the query ID. operationId: OsqueryGetSavedQueryDetails @@ -288,7 +288,7 @@ paths: description: OK summary: Get saved query details tags: - - Security Solution Osquery API + - Security Osquery API put: description: | Update a saved query using the query ID. @@ -316,7 +316,7 @@ paths: description: OK summary: Update a saved query tags: - - Security Solution Osquery API + - Security Osquery API components: schemas: ArrayQueries: @@ -638,4 +638,4 @@ security: - BasicAuth: [] tags: - description: Run live queries, manage packs and saved queries. - name: Security Solution Osquery API + name: Security Osquery API diff --git a/x-pack/plugins/osquery/docs/openapi/serverless/osquery_api_2023_10_31.bundled.schema.yaml b/x-pack/plugins/osquery/docs/openapi/serverless/osquery_api_2023_10_31.bundled.schema.yaml index 98c114af74705..9228355269d02 100644 --- a/x-pack/plugins/osquery/docs/openapi/serverless/osquery_api_2023_10_31.bundled.schema.yaml +++ b/x-pack/plugins/osquery/docs/openapi/serverless/osquery_api_2023_10_31.bundled.schema.yaml @@ -1,7 +1,7 @@ openapi: 3.0.3 info: description: Run live queries, manage packs and saved queries. - title: Security Solution Osquery API (Elastic Cloud Serverless) + title: Security Osquery API (Elastic Cloud Serverless) version: '2023-10-31' servers: - url: http://{kibana_host}:{port} @@ -30,7 +30,7 @@ paths: description: OK summary: Get live queries tags: - - Security Solution Osquery API + - Security Osquery API post: description: Create and run a live query. operationId: OsqueryCreateLiveQuery @@ -49,7 +49,7 @@ paths: description: OK summary: Create a live query tags: - - Security Solution Osquery API + - Security Osquery API /api/osquery/live_queries/{id}: get: description: Get the details of a live query using the query ID. @@ -74,7 +74,7 @@ paths: description: OK summary: Get live query details tags: - - Security Solution Osquery API + - Security Osquery API /api/osquery/live_queries/{id}/results/{actionId}: get: description: Get the results of a live query using the query action ID. @@ -104,7 +104,7 @@ paths: description: OK summary: Get live query results tags: - - Security Solution Osquery API + - Security Osquery API /api/osquery/packs: get: description: Get a list of all query packs. @@ -124,7 +124,7 @@ paths: description: OK summary: Get packs tags: - - Security Solution Osquery API + - Security Osquery API post: description: Create a query pack. operationId: OsqueryCreatePacks @@ -143,7 +143,7 @@ paths: description: OK summary: Create a pack tags: - - Security Solution Osquery API + - Security Osquery API /api/osquery/packs/{id}: delete: description: Delete a query pack using the pack ID. @@ -163,7 +163,7 @@ paths: description: OK summary: Delete a pack tags: - - Security Solution Osquery API + - Security Osquery API get: description: Get the details of a query pack using the pack ID. operationId: OsqueryGetPacksDetails @@ -182,7 +182,7 @@ paths: description: OK summary: Get pack details tags: - - Security Solution Osquery API + - Security Osquery API put: description: | Update a query pack using the pack ID. @@ -210,7 +210,7 @@ paths: description: OK summary: Update a pack tags: - - Security Solution Osquery API + - Security Osquery API /api/osquery/saved_queries: get: description: Get a list of all saved queries. @@ -230,7 +230,7 @@ paths: description: OK summary: Get saved queries tags: - - Security Solution Osquery API + - Security Osquery API post: description: Create and run a saved query. operationId: OsqueryCreateSavedQuery @@ -249,7 +249,7 @@ paths: description: OK summary: Create a saved query tags: - - Security Solution Osquery API + - Security Osquery API /api/osquery/saved_queries/{id}: delete: description: Delete a saved query using the query ID. @@ -269,7 +269,7 @@ paths: description: OK summary: Delete a saved query tags: - - Security Solution Osquery API + - Security Osquery API get: description: Get the details of a saved query using the query ID. operationId: OsqueryGetSavedQueryDetails @@ -288,7 +288,7 @@ paths: description: OK summary: Get saved query details tags: - - Security Solution Osquery API + - Security Osquery API put: description: | Update a saved query using the query ID. @@ -316,7 +316,7 @@ paths: description: OK summary: Update a saved query tags: - - Security Solution Osquery API + - Security Osquery API components: schemas: ArrayQueries: @@ -638,4 +638,4 @@ security: - BasicAuth: [] tags: - description: Run live queries, manage packs and saved queries. - name: Security Solution Osquery API + name: Security Osquery API diff --git a/x-pack/plugins/osquery/scripts/openapi/bundle.js b/x-pack/plugins/osquery/scripts/openapi/bundle.js index 519b83bcc8a56..cc9e1dc93b66d 100644 --- a/x-pack/plugins/osquery/scripts/openapi/bundle.js +++ b/x-pack/plugins/osquery/scripts/openapi/bundle.js @@ -22,12 +22,12 @@ const ELASTIC_ASSISTANT_ROOT = resolve(__dirname, '../..'); includeLabels: ['serverless'], prototypeDocument: { info: { - title: 'Security Solution Osquery API (Elastic Cloud Serverless)', + title: 'Security Osquery API (Elastic Cloud Serverless)', description: 'Run live queries, manage packs and saved queries.', }, tags: [ { - name: 'Security Solution Osquery API', + name: 'Security Osquery API', description: 'Run live queries, manage packs and saved queries.', }, ], @@ -43,12 +43,12 @@ const ELASTIC_ASSISTANT_ROOT = resolve(__dirname, '../..'); includeLabels: ['ess'], prototypeDocument: { info: { - title: 'Security Solution Osquery API (Elastic Cloud and self-hosted)', + title: 'Security Osquery API (Elastic Cloud and self-hosted)', description: 'Run live queries, manage packs and saved queries.', }, tags: [ { - name: 'Security Solution Osquery API', + name: 'Security Osquery API', description: 'Run live queries, manage packs and saved queries.', }, ], diff --git a/x-pack/plugins/search_indices/public/analytics/constants.ts b/x-pack/plugins/search_indices/public/analytics/constants.ts index 48ecec88ff053..563e5b62382c0 100644 --- a/x-pack/plugins/search_indices/public/analytics/constants.ts +++ b/x-pack/plugins/search_indices/public/analytics/constants.ts @@ -13,4 +13,7 @@ export enum AnalyticsEvents { startCreateIndexLanguageSelect = 'start_code_lang_select', startCreateIndexCodeCopyInstall = 'start_code_copy_install', startCreateIndexCodeCopy = 'start_code_copy', + indexDetailsInstallCodeCopy = 'index_details_code_copy_install', + indexDetailsAddMappingsCodeCopy = 'index_details_add_mappings_code_copy', + indexDetailsIngestDocumentsCodeCopy = 'index_details_ingest_documents_code_copy', } diff --git a/x-pack/plugins/search_indices/public/code_examples/constants.ts b/x-pack/plugins/search_indices/public/code_examples/constants.ts new file mode 100644 index 0000000000000..31850ce7fbbe0 --- /dev/null +++ b/x-pack/plugins/search_indices/public/code_examples/constants.ts @@ -0,0 +1,15 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; + +export const UPLOAD_VECTORS_TITLE = i18n.translate( + 'xpack.searchIndices.codeExamples.ingest.denseVector.title', + { + defaultMessage: 'Upload vectors', + } +); diff --git a/x-pack/plugins/search_indices/public/code_examples/create_index.ts b/x-pack/plugins/search_indices/public/code_examples/create_index.ts index ec11283b2185f..627329b37d0be 100644 --- a/x-pack/plugins/search_indices/public/code_examples/create_index.ts +++ b/x-pack/plugins/search_indices/public/code_examples/create_index.ts @@ -7,21 +7,21 @@ import { CreateIndexCodeExamples } from '../types'; -import { CurlExamples } from './curl'; -import { JavascriptServerlessExamples } from './javascript'; -import { PythonServerlessExamples } from './python'; -import { ConsoleExamples } from './sense'; +import { CurlCreateIndexExamples } from './curl'; +import { JavascriptServerlessCreateIndexExamples } from './javascript'; +import { PythonServerlessCreateIndexExamples } from './python'; +import { ConsoleCreateIndexExamples } from './sense'; export const DefaultServerlessCodeExamples: CreateIndexCodeExamples = { - sense: ConsoleExamples.default, - curl: CurlExamples.default, - python: PythonServerlessExamples.default, - javascript: JavascriptServerlessExamples.default, + sense: ConsoleCreateIndexExamples.default, + curl: CurlCreateIndexExamples.default, + python: PythonServerlessCreateIndexExamples.default, + javascript: JavascriptServerlessCreateIndexExamples.default, }; export const DenseVectorSeverlessCodeExamples: CreateIndexCodeExamples = { - sense: ConsoleExamples.dense_vector, - curl: CurlExamples.dense_vector, - python: PythonServerlessExamples.dense_vector, - javascript: JavascriptServerlessExamples.dense_vector, + sense: ConsoleCreateIndexExamples.dense_vector, + curl: CurlCreateIndexExamples.dense_vector, + python: PythonServerlessCreateIndexExamples.dense_vector, + javascript: JavascriptServerlessCreateIndexExamples.dense_vector, }; diff --git a/x-pack/plugins/search_indices/public/code_examples/curl.ts b/x-pack/plugins/search_indices/public/code_examples/curl.ts index c5ee1d581250c..a451f7cf08967 100644 --- a/x-pack/plugins/search_indices/public/code_examples/curl.ts +++ b/x-pack/plugins/search_indices/public/code_examples/curl.ts @@ -7,7 +7,8 @@ import { i18n } from '@kbn/i18n'; import { API_KEY_PLACEHOLDER, INDEX_PLACEHOLDER } from '../constants'; -import { CodeLanguage, CreateIndexLanguageExamples } from '../types'; +import { CodeLanguage, IngestDataCodeDefinition } from '../types'; +import { CreateIndexLanguageExamples } from './types'; export const CURL_INFO: CodeLanguage = { id: 'curl', @@ -16,7 +17,7 @@ export const CURL_INFO: CodeLanguage = { codeBlockLanguage: 'shell', }; -export const CurlExamples: CreateIndexLanguageExamples = { +export const CurlCreateIndexExamples: CreateIndexLanguageExamples = { default: { createIndex: ({ elasticsearchURL, apiKey, indexName }) => `curl PUT '${elasticsearchURL}/${ indexName ?? INDEX_PLACEHOLDER @@ -45,3 +46,27 @@ export const CurlExamples: CreateIndexLanguageExamples = { }'`, }, }; + +export const CurlVectorsIngestDataExample: IngestDataCodeDefinition = { + ingestCommand: ({ + elasticsearchURL, + apiKey, + indexName, + sampleDocument, + }) => `curl -X POST "${elasticsearchURL}/_bulk?pretty" \ +--header 'Authorization: ApiKey ${apiKey ?? API_KEY_PLACEHOLDER}' \ +--header 'Content-Type: application/json' \ +-d' +{ "index": { "_index": "${indexName}" } } +${JSON.stringify(sampleDocument)} +`, + updateMappingsCommand: ({ + elasticsearchURL, + apiKey, + indexName, + mappingProperties, + }) => `curl -X PUT "${elasticsearchURL}/${indexName}/_mapping" \ +--header 'Authorization: ApiKey ${apiKey ?? API_KEY_PLACEHOLDER}' \ +--header 'Content-Type: application/json' \ +--data-raw '${JSON.stringify({ properties: mappingProperties })}'`, +}; diff --git a/x-pack/plugins/search_indices/public/code_examples/ingest_data.ts b/x-pack/plugins/search_indices/public/code_examples/ingest_data.ts new file mode 100644 index 0000000000000..885a383295338 --- /dev/null +++ b/x-pack/plugins/search_indices/public/code_examples/ingest_data.ts @@ -0,0 +1,35 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; +import { IngestDataCodeExamples } from '../types'; +import { UPLOAD_VECTORS_TITLE } from './constants'; + +import { JSServerlessIngestVectorDataExample } from './javascript'; +import { PythonServerlessVectorsIngestDataExample } from './python'; +import { ConsoleVectorsIngestDataExample } from './sense'; +import { CurlVectorsIngestDataExample } from './curl'; + +export const DenseVectorServerlessCodeExamples: IngestDataCodeExamples = { + title: UPLOAD_VECTORS_TITLE, + ingestTitle: UPLOAD_VECTORS_TITLE, + description: i18n.translate( + 'xpack.searchIndices.codeExamples.serverless.denseVector.description', + { + defaultMessage: + 'The following example connects to your Elasticsearch endpoint and uploads vectors to the index.', + } + ), + defaultMapping: { + vector: { type: 'dense_vector', dims: 3 }, + text: { type: 'text' }, + }, + sense: ConsoleVectorsIngestDataExample, + curl: CurlVectorsIngestDataExample, + python: PythonServerlessVectorsIngestDataExample, + javascript: JSServerlessIngestVectorDataExample, +}; diff --git a/x-pack/plugins/search_indices/public/code_examples/javascript.ts b/x-pack/plugins/search_indices/public/code_examples/javascript.ts index 26b7b5e8111ac..3e91cb99301a7 100644 --- a/x-pack/plugins/search_indices/public/code_examples/javascript.ts +++ b/x-pack/plugins/search_indices/public/code_examples/javascript.ts @@ -7,7 +7,8 @@ import { i18n } from '@kbn/i18n'; import { API_KEY_PLACEHOLDER, INDEX_PLACEHOLDER } from '../constants'; -import { CodeLanguage, CreateIndexLanguageExamples } from '../types'; +import { CodeLanguage, IngestDataCodeDefinition } from '../types'; +import { CreateIndexLanguageExamples } from './types'; export const JAVASCRIPT_INFO: CodeLanguage = { id: 'javascript', @@ -20,7 +21,7 @@ export const JAVASCRIPT_INFO: CodeLanguage = { const SERVERLESS_INSTALL_CMD = `npm install @elastic/elasticsearch-serverless`; -export const JavascriptServerlessExamples: CreateIndexLanguageExamples = { +export const JavascriptServerlessCreateIndexExamples: CreateIndexLanguageExamples = { default: { installCommand: SERVERLESS_INSTALL_CMD, createIndex: ({ @@ -66,3 +67,58 @@ client.indices.create({ });`, }, }; + +export const JSServerlessIngestVectorDataExample: IngestDataCodeDefinition = { + installCommand: SERVERLESS_INSTALL_CMD, + ingestCommand: ({ + apiKey, + elasticsearchURL, + sampleDocument, + indexName, + }) => `import { Client } from "@elastic/elasticsearch"; + +const client = new Client({ + node: '${elasticsearchURL}', + auth: { + apiKey: "${apiKey ?? API_KEY_PLACEHOLDER}" + }, +}); + +const index = "${indexName}"; +const docs = [ +${JSON.stringify(sampleDocument, null, 2)}, +] + +const bulkIngestResponse = await client.helpers.bulk({ + index, + datasource: docs, + onDocument() { + return { + index: {}, + }; + } +}); +console.log(bulkIngestResponse);`, + updateMappingsCommand: ({ + apiKey, + elasticsearchURL, + indexName, + mappingProperties, + }) => `import { Client } from "@elastic/elasticsearch"; + +const client = new Client({ +node: '${elasticsearchURL}', +auth: { + apiKey: "${apiKey ?? API_KEY_PLACEHOLDER}" +} +}); + +const index = "${indexName}"; +const mapping = ${JSON.stringify(mappingProperties, null, 2)}; + +const updateMappingResponse = await client.indices.putMapping({ + index, + properties: mapping, +}); +console.log(updateMappingResponse);`, +}; diff --git a/x-pack/plugins/search_indices/public/code_examples/python.ts b/x-pack/plugins/search_indices/public/code_examples/python.ts index 0d9e778ca1060..e41e542456e72 100644 --- a/x-pack/plugins/search_indices/public/code_examples/python.ts +++ b/x-pack/plugins/search_indices/public/code_examples/python.ts @@ -7,7 +7,14 @@ import { i18n } from '@kbn/i18n'; import { API_KEY_PLACEHOLDER, INDEX_PLACEHOLDER } from '../constants'; -import { CodeLanguage, CodeSnippetParameters, CreateIndexLanguageExamples } from '../types'; +import { + CodeLanguage, + CodeSnippetParameters, + IngestCodeSnippetFunction, + IngestDataCodeDefinition, +} from '../types'; + +import { CreateIndexLanguageExamples } from './types'; export const PYTHON_INFO: CodeLanguage = { id: 'python', @@ -18,7 +25,7 @@ export const PYTHON_INFO: CodeLanguage = { const SERVERLESS_PYTHON_INSTALL_CMD = 'pip install elasticsearch-serverless'; -export const PythonServerlessExamples: CreateIndexLanguageExamples = { +export const PythonServerlessCreateIndexExamples: CreateIndexLanguageExamples = { default: { installCommand: SERVERLESS_PYTHON_INSTALL_CMD, createIndex: ({ @@ -60,3 +67,54 @@ client.indices.create( )`, }, }; +const serverlessIngestionCommand: IngestCodeSnippetFunction = ({ + elasticsearchURL, + apiKey, + indexName, + sampleDocument, +}) => `from elasticsearch-serverless import Elasticsearch, helpers + +client = Elasticsearch( + "${elasticsearchURL}", + api_key="${apiKey ?? API_KEY_PLACEHOLDER}" +) + +index_name = "${indexName}" + +docs = [ +${JSON.stringify(sampleDocument, null, 4)}, +] + +bulk_response = helpers.bulk(client, docs, index=index_name) +print(bulk_response)`; + +const serverlessUpdateMappingsCommand: IngestCodeSnippetFunction = ({ + elasticsearchURL, + apiKey, + indexName, + mappingProperties, +}) => `from elasticsearch-serverless import Elasticsearch + +client = Elasticsearch( +"${elasticsearchURL}", +api_key="${apiKey ?? API_KEY_PLACEHOLDER}" +) + +index_name = "${indexName}" + +mappings = ${JSON.stringify({ properties: mappingProperties }, null, 4)} + +update_mapping_response = client.indices.put_mapping(index=index_name, body=mappings) + +# Print the response +print(update_mapping_response) + +# Verify the mapping +mapping = client.indices.get_mapping(index=index_name) +print(mapping)`; + +export const PythonServerlessVectorsIngestDataExample: IngestDataCodeDefinition = { + installCommand: SERVERLESS_PYTHON_INSTALL_CMD, + ingestCommand: serverlessIngestionCommand, + updateMappingsCommand: serverlessUpdateMappingsCommand, +}; diff --git a/x-pack/plugins/search_indices/public/code_examples/sense.ts b/x-pack/plugins/search_indices/public/code_examples/sense.ts index ad7b5834c9d26..c1864287ab169 100644 --- a/x-pack/plugins/search_indices/public/code_examples/sense.ts +++ b/x-pack/plugins/search_indices/public/code_examples/sense.ts @@ -6,9 +6,10 @@ */ import { INDEX_PLACEHOLDER } from '../constants'; -import { CreateIndexLanguageExamples } from '../types'; +import { IngestDataCodeDefinition } from '../types'; +import { CreateIndexLanguageExamples } from './types'; -export const ConsoleExamples: CreateIndexLanguageExamples = { +export const ConsoleCreateIndexExamples: CreateIndexLanguageExamples = { default: { createIndex: ({ indexName }) => `PUT /${indexName ?? INDEX_PLACEHOLDER}`, }, @@ -29,3 +30,12 @@ export const ConsoleExamples: CreateIndexLanguageExamples = { }`, }, }; + +export const ConsoleVectorsIngestDataExample: IngestDataCodeDefinition = { + ingestCommand: ({ indexName, sampleDocument }) => `POST /_bulk?pretty +{ "index": { "_index": "${indexName}" } } +${JSON.stringify(sampleDocument)} +`, + updateMappingsCommand: ({ indexName, mappingProperties }) => `PUT /${indexName}/_mapping +${JSON.stringify({ properties: mappingProperties }, null, 2)}`, +}; diff --git a/x-pack/plugins/search_indices/public/code_examples/types.ts b/x-pack/plugins/search_indices/public/code_examples/types.ts new file mode 100644 index 0000000000000..dc8f877f565d5 --- /dev/null +++ b/x-pack/plugins/search_indices/public/code_examples/types.ts @@ -0,0 +1,17 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { CreateIndexCodeDefinition, IngestDataCodeDefinition } from '../types'; + +export interface CreateIndexLanguageExamples { + default: CreateIndexCodeDefinition; + dense_vector: CreateIndexCodeDefinition; +} + +export interface IngestDataLanguageExamples { + dense_vector: IngestDataCodeDefinition; +} diff --git a/x-pack/plugins/search_indices/public/components/index_documents/add_documents_code_example.tsx b/x-pack/plugins/search_indices/public/components/index_documents/add_documents_code_example.tsx index 8d0b3af3f9d72..c629903b38444 100644 --- a/x-pack/plugins/search_indices/public/components/index_documents/add_documents_code_example.tsx +++ b/x-pack/plugins/search_indices/public/components/index_documents/add_documents_code_example.tsx @@ -5,19 +5,156 @@ * 2.0. */ -import React from 'react'; +import React, { useCallback, useMemo, useState } from 'react'; +import { MappingProperty } from '@elastic/elasticsearch/lib/api/types'; +import { EuiFlexGroup, EuiFlexItem, EuiPanel, EuiText } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { TryInConsoleButton } from '@kbn/try-in-console'; -import { EuiPanel } from '@elastic/eui'; +import { useKibana } from '../../hooks/use_kibana'; +import { IngestCodeSnippetParameters } from '../../types'; +import { LanguageSelector } from '../shared/language_selector'; +import { useIngestCodeExamples } from './hooks/use_ingest_code_examples'; +import { useElasticsearchUrl } from '../../hooks/use_elasticsearch_url'; +import { useUsageTracker } from '../../contexts/usage_tracker_context'; +import { AvailableLanguages, LanguageOptions, Languages } from '../../code_examples'; +import { AnalyticsEvents } from '../../analytics/constants'; +import { CodeSample } from '../shared/code_sample'; +import { generateSampleDocument } from '../../utils/document_generation'; +import { getDefaultCodingLanguage } from '../../utils/language'; + +export interface AddDocumentsCodeExampleProps { + indexName: string; + mappingProperties: Record; +} + +export const AddDocumentsCodeExample = ({ + indexName, + mappingProperties, +}: AddDocumentsCodeExampleProps) => { + const { application, share, console: consolePlugin } = useKibana().services; + const ingestCodeExamples = useIngestCodeExamples(); + const elasticsearchUrl = useElasticsearchUrl(); + const usageTracker = useUsageTracker(); + const indexHasMappings = Object.keys(mappingProperties).length > 0; + + const [selectedLanguage, setSelectedLanguage] = + useState(getDefaultCodingLanguage); + const selectedCodeExamples = ingestCodeExamples[selectedLanguage]; + const codeSampleMappings = indexHasMappings + ? mappingProperties + : ingestCodeExamples.defaultMapping; + const onSelectLanguage = useCallback( + (value: AvailableLanguages) => { + setSelectedLanguage(value); + usageTracker.count([ + AnalyticsEvents.startCreateIndexLanguageSelect, + `${AnalyticsEvents.startCreateIndexLanguageSelect}_${value}`, + ]); + }, + [usageTracker] + ); + const sampleDocument = useMemo(() => { + // TODO: implement smart document generation + return generateSampleDocument(codeSampleMappings); + }, [codeSampleMappings]); + const codeParams: IngestCodeSnippetParameters = useMemo(() => { + return { + indexName, + elasticsearchURL: elasticsearchUrl, + sampleDocument, + indexHasMappings, + mappingProperties: codeSampleMappings, + }; + }, [indexName, elasticsearchUrl, sampleDocument, codeSampleMappings, indexHasMappings]); -export const AddDocumentsCodeExample: React.FC = () => { return ( - TODO: WITHOUT DATA TICKET + + + + + + {selectedLanguage === 'curl' && ( + + + + )} + + +

{ingestCodeExamples.description}

+
+ {selectedCodeExamples.installCommand && ( + + { + usageTracker.click([ + AnalyticsEvents.indexDetailsInstallCodeCopy, + `${AnalyticsEvents.indexDetailsInstallCodeCopy}_${selectedLanguage}`, + ]); + }} + /> + + )} + {!indexHasMappings && ( + + { + usageTracker.click([ + AnalyticsEvents.indexDetailsAddMappingsCodeCopy, + `${AnalyticsEvents.indexDetailsAddMappingsCodeCopy}_${selectedLanguage}`, + ]); + }} + /> + + )} + + { + usageTracker.click([ + AnalyticsEvents.indexDetailsIngestDocumentsCodeCopy, + `${AnalyticsEvents.indexDetailsIngestDocumentsCodeCopy}_${selectedLanguage}`, + ]); + }} + /> + +
); }; diff --git a/x-pack/plugins/search_indices/public/components/index_documents/constants.ts b/x-pack/plugins/search_indices/public/components/index_documents/constants.ts new file mode 100644 index 0000000000000..944a7f54507a1 --- /dev/null +++ b/x-pack/plugins/search_indices/public/components/index_documents/constants.ts @@ -0,0 +1,8 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export const DEFAULT_PAGE_SIZE = 50; diff --git a/x-pack/plugins/search_indices/public/components/index_documents/document_list.tsx b/x-pack/plugins/search_indices/public/components/index_documents/document_list.tsx new file mode 100644 index 0000000000000..ddf4f27122ef9 --- /dev/null +++ b/x-pack/plugins/search_indices/public/components/index_documents/document_list.tsx @@ -0,0 +1,38 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { MappingProperty, SearchHit } from '@elastic/elasticsearch/lib/api/types'; + +import { Result, resultToField, resultMetaData } from '@kbn/search-index-documents'; + +import { EuiSpacer } from '@elastic/eui'; + +import { RecentDocsActionMessage } from './recent_docs_action_message'; + +export interface DocumentListProps { + indexName: string; + docs: SearchHit[]; + mappingProperties: Record; +} + +export const DocumentList = ({ indexName, docs, mappingProperties }: DocumentListProps) => { + return ( + <> + + + {docs.map((doc) => { + return ( + + + + + ); + })} + + ); +}; diff --git a/x-pack/plugins/search_indices/public/components/index_documents/hooks/use_ingest_code_examples.tsx b/x-pack/plugins/search_indices/public/components/index_documents/hooks/use_ingest_code_examples.tsx new file mode 100644 index 0000000000000..7eb84e6f62933 --- /dev/null +++ b/x-pack/plugins/search_indices/public/components/index_documents/hooks/use_ingest_code_examples.tsx @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import * as IngestCodeExamples from '../../../code_examples/ingest_data'; + +export const useIngestCodeExamples = () => { + // TODO: Choose code examples based on onboarding token, stack vs es3, or project type + return IngestCodeExamples.DenseVectorServerlessCodeExamples; +}; diff --git a/x-pack/plugins/search_indices/public/components/index_documents/index_documents.tsx b/x-pack/plugins/search_indices/public/components/index_documents/index_documents.tsx index e431a62a3e53b..9b8852eb596bc 100644 --- a/x-pack/plugins/search_indices/public/components/index_documents/index_documents.tsx +++ b/x-pack/plugins/search_indices/public/components/index_documents/index_documents.tsx @@ -7,71 +7,18 @@ import React from 'react'; -import { Result, resultToField, resultMetaData } from '@kbn/search-index-documents'; - -import { i18n } from '@kbn/i18n'; -import { - EuiFlexGroup, - EuiFlexItem, - EuiIcon, - EuiLink, - EuiPanel, - EuiProgress, - EuiSpacer, -} from '@elastic/eui'; +import { EuiFlexGroup, EuiFlexItem, EuiPanel, EuiProgress, EuiSpacer } from '@elastic/eui'; import { useIndexDocumentSearch } from '../../hooks/api/use_document_search'; import { useIndexMapping } from '../../hooks/api/use_index_mappings'; -import { useKibana } from '../../hooks/use_kibana'; import { AddDocumentsCodeExample } from './add_documents_code_example'; -interface IndexDocumentsProps { - indexName: string; -} +import { DEFAULT_PAGE_SIZE } from './constants'; +import { DocumentList } from './document_list'; -interface RecentDocsActionMessageProps { +interface IndexDocumentsProps { indexName: string; } -const DEFAULT_PAGE_SIZE = 50; - -const RecentDocsActionMessage: React.FC = ({ indexName }) => { - const { - services: { share }, - } = useKibana(); - - const discoverLocator = share.url.locators.get('DISCOVER_APP_LOCATOR'); - - const onClick = async () => { - await discoverLocator?.navigate({ dataViewSpec: { title: indexName } }); - }; - - return ( - - - - - - -

- {i18n.translate('xpack.searchIndices.indexDocuments.recentDocsActionMessage', { - defaultMessage: - 'You are viewing the {pageSize} most recently ingested documents in this index. To see all documents, view in', - values: { - pageSize: DEFAULT_PAGE_SIZE, - }, - })}{' '} - - {i18n.translate('xpack.searchIndices.indexDocuments.recentDocsActionMessageLink', { - defaultMessage: 'Discover.', - })} - -

-
-
-
- ); -}; - export const IndexDocuments: React.FC = ({ indexName }) => { const { data: indexDocuments, isInitialLoading } = useIndexDocumentSearch(indexName, { pageSize: DEFAULT_PAGE_SIZE, @@ -89,23 +36,11 @@ export const IndexDocuments: React.FC = ({ indexName }) => {isInitialLoading && } - {docs.length === 0 && } + {!isInitialLoading && docs.length === 0 && ( + + )} {docs.length > 0 && ( - <> - - - {docs.map((doc) => { - return ( - - - - - ); - })} - + )} diff --git a/x-pack/plugins/search_indices/public/components/index_documents/recent_docs_action_message.tsx b/x-pack/plugins/search_indices/public/components/index_documents/recent_docs_action_message.tsx new file mode 100644 index 0000000000000..a3039e8e68602 --- /dev/null +++ b/x-pack/plugins/search_indices/public/components/index_documents/recent_docs_action_message.tsx @@ -0,0 +1,56 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; + +import { i18n } from '@kbn/i18n'; +import { EuiFlexGroup, EuiFlexItem, EuiIcon, EuiLink, EuiPanel } from '@elastic/eui'; +import { useKibana } from '../../hooks/use_kibana'; + +import { DEFAULT_PAGE_SIZE } from './constants'; + +export interface RecentDocsActionMessageProps { + indexName: string; +} + +export const RecentDocsActionMessage: React.FC = ({ indexName }) => { + const { + services: { share }, + } = useKibana(); + + const discoverLocator = share.url.locators.get('DISCOVER_APP_LOCATOR'); + + const onClick = async () => { + await discoverLocator?.navigate({ dataViewSpec: { title: indexName } }); + }; + + return ( + + + + + + +

+ {i18n.translate('xpack.searchIndices.indexDocuments.recentDocsActionMessage', { + defaultMessage: + 'You are viewing the {pageSize} most recently ingested documents in this index. To see all documents, view in', + values: { + pageSize: DEFAULT_PAGE_SIZE, + }, + })}{' '} + + {i18n.translate('xpack.searchIndices.indexDocuments.recentDocsActionMessageLink', { + defaultMessage: 'Discover.', + })} + +

+
+
+
+ ); +}; diff --git a/x-pack/plugins/search_indices/public/components/indices/details_page.tsx b/x-pack/plugins/search_indices/public/components/indices/details_page.tsx index bca02f1ef1264..46e595a3d2207 100644 --- a/x-pack/plugins/search_indices/public/components/indices/details_page.tsx +++ b/x-pack/plugins/search_indices/public/components/indices/details_page.tsx @@ -34,8 +34,9 @@ import { useIndexMapping } from '../../hooks/api/use_index_mappings'; import { IndexDocuments } from '../index_documents/index_documents'; import { DeleteIndexModal } from './delete_index_modal'; import { IndexloadingError } from './details_page_loading_error'; -import { SearchIndicesDetailsMappingsTabs } from '../../routes'; +import { SearchIndexDetailsTabs } from '../../routes'; import { SearchIndexDetailsMappings } from './details_page_mappings'; +import { SearchIndexDetailsSettings } from './details_page_settings'; export const SearchIndexDetailsPage = () => { const indexName = decodeURIComponent(useParams<{ indexName: string }>().indexName); @@ -49,33 +50,40 @@ export const SearchIndexDetailsPage = () => { isInitialLoading: isMappingsInitialLoading, } = useIndexMapping(indexName); - const SearchIndexDetailsTabs: EuiTabbedContentTab[] = useMemo(() => { + const detailsPageTabs: EuiTabbedContentTab[] = useMemo(() => { return [ { - id: SearchIndicesDetailsMappingsTabs.DATA, + id: SearchIndexDetailsTabs.DATA, name: i18n.translate('xpack.searchIndices.documentsTabLabel', { defaultMessage: 'Data', }), content: , - 'data-test-subj': `${SearchIndicesDetailsMappingsTabs.DATA}Tab`, + 'data-test-subj': `${SearchIndexDetailsTabs.DATA}Tab`, }, { - id: SearchIndicesDetailsMappingsTabs.MAPPINGS, + id: SearchIndexDetailsTabs.MAPPINGS, name: i18n.translate('xpack.searchIndices.mappingsTabLabel', { defaultMessage: 'Mappings', }), content: , - 'data-test-subj': `${SearchIndicesDetailsMappingsTabs.MAPPINGS}Tab`, + 'data-test-subj': `${SearchIndexDetailsTabs.MAPPINGS}Tab`, + }, + { + id: SearchIndexDetailsTabs.SETTINGS, + name: i18n.translate('xpack.searchIndices.settingsTabLabel', { + defaultMessage: 'Settings', + }), + content: , + 'data-test-subj': `${SearchIndexDetailsTabs.SETTINGS}Tab`, }, ]; }, [index, indexName]); - - const [selectedTab, setSelectedTab] = useState(SearchIndexDetailsTabs[0]); + const [selectedTab, setSelectedTab] = useState(detailsPageTabs[0]); useEffect(() => { - const newTab = SearchIndexDetailsTabs.find((tab) => tab.id === tabId); + const newTab = detailsPageTabs.find((tab) => tab.id === tabId); if (newTab) setSelectedTab(newTab); - }, [SearchIndexDetailsTabs, tabId]); + }, [detailsPageTabs, tabId]); const handleTabClick = useCallback( (tab) => { @@ -215,7 +223,7 @@ export const SearchIndexDetailsPage = () => { diff --git a/x-pack/plugins/search_indices/public/components/indices/details_page_settings.tsx b/x-pack/plugins/search_indices/public/components/indices/details_page_settings.tsx new file mode 100644 index 0000000000000..d70591c065b13 --- /dev/null +++ b/x-pack/plugins/search_indices/public/components/indices/details_page_settings.tsx @@ -0,0 +1,24 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { useMemo } from 'react'; +import { useKibana } from '../../hooks/use_kibana'; + +interface SearchIndexDetailsSettingsProps { + indexName: string; +} +export const SearchIndexDetailsSettings = ({ indexName }: SearchIndexDetailsSettingsProps) => { + const { indexManagement, history } = useKibana().services; + + const IndexSettingsComponent = useMemo( + () => indexManagement.getIndexSettingsComponent({ history }), + [indexManagement, history] + ); + + return ; +}; diff --git a/x-pack/plugins/search_indices/public/components/indices/indices_router.tsx b/x-pack/plugins/search_indices/public/components/indices/indices_router.tsx index 73aec33f80b5c..f6c931d73a99e 100644 --- a/x-pack/plugins/search_indices/public/components/indices/indices_router.tsx +++ b/x-pack/plugins/search_indices/public/components/indices/indices_router.tsx @@ -9,7 +9,7 @@ import { Route, Router, Routes } from '@kbn/shared-ux-router'; import { Redirect } from 'react-router-dom'; import { useKibana } from '../../hooks/use_kibana'; import { - SearchIndicesDetailsMappingsTabs, + SearchIndexDetailsTabs, SEARCH_INDICES_DETAILS_PATH, SEARCH_INDICES_DETAILS_TABS_PATH, } from '../../routes'; @@ -25,7 +25,7 @@ export const SearchIndicesRouter: React.FC = () => { diff --git a/x-pack/plugins/search_indices/public/components/start/code_sample.tsx b/x-pack/plugins/search_indices/public/components/shared/code_sample.tsx similarity index 89% rename from x-pack/plugins/search_indices/public/components/start/code_sample.tsx rename to x-pack/plugins/search_indices/public/components/shared/code_sample.tsx index fbc1c7be8af74..4ddce94d685b0 100644 --- a/x-pack/plugins/search_indices/public/components/start/code_sample.tsx +++ b/x-pack/plugins/search_indices/public/components/shared/code_sample.tsx @@ -18,13 +18,14 @@ import { } from '@elastic/eui'; export interface CodeSampleProps { + id?: string; title: string; language: string; code: string; onCodeCopyClick?: React.MouseEventHandler; } -export const CodeSample = ({ title, language, code, onCodeCopyClick }: CodeSampleProps) => { +export const CodeSample = ({ id, title, language, code, onCodeCopyClick }: CodeSampleProps) => { const onCodeClick = React.useCallback( (e: React.MouseEvent) => { if (onCodeCopyClick === undefined) return; @@ -38,7 +39,7 @@ export const CodeSample = ({ title, language, code, onCodeCopyClick }: CodeSampl ); return ( - + {title} @@ -47,6 +48,7 @@ export const CodeSample = ({ title, language, code, onCodeCopyClick }: CodeSampl
onSelectLanguage(value)} + data-test-subj="codeExampleLanguageSelect" /> ); }; diff --git a/x-pack/plugins/search_indices/public/components/start/create_index_code.tsx b/x-pack/plugins/search_indices/public/components/start/create_index_code.tsx index 8c0f1973378b5..6fc2fb3b50e2f 100644 --- a/x-pack/plugins/search_indices/public/components/start/create_index_code.tsx +++ b/x-pack/plugins/search_indices/public/components/start/create_index_code.tsx @@ -15,10 +15,11 @@ import { DenseVectorSeverlessCodeExamples } from '../../code_examples/create_ind import { useUsageTracker } from '../../hooks/use_usage_tracker'; import { useKibana } from '../../hooks/use_kibana'; import { useElasticsearchUrl } from '../../hooks/use_elasticsearch_url'; +import { getDefaultCodingLanguage } from '../../utils/language'; +import { CodeSample } from '../shared/code_sample'; import { LanguageSelector } from '../shared/language_selector'; -import { CodeSample } from './code_sample'; import { CreateIndexFormState } from './types'; export interface CreateIndexCodeViewProps { @@ -32,8 +33,8 @@ export const CreateIndexCodeView = ({ createIndexForm }: CreateIndexCodeViewProp const { application, share, console: consolePlugin } = useKibana().services; const usageTracker = useUsageTracker(); - // TODO: initing this should be dynamic and possibly saved in the form state - const [selectedLanguage, setSelectedLanguage] = useState('python'); + const [selectedLanguage, setSelectedLanguage] = + useState(getDefaultCodingLanguage); const onSelectLanguage = useCallback( (value: AvailableLanguages) => { setSelectedLanguage(value); diff --git a/x-pack/plugins/search_indices/public/routes.ts b/x-pack/plugins/search_indices/public/routes.ts index 3e347881d1219..9afa046385576 100644 --- a/x-pack/plugins/search_indices/public/routes.ts +++ b/x-pack/plugins/search_indices/public/routes.ts @@ -8,7 +8,8 @@ export const ROOT_PATH = '/'; export const SEARCH_INDICES_DETAILS_PATH = `${ROOT_PATH}index_details/:indexName`; export const SEARCH_INDICES_DETAILS_TABS_PATH = `${SEARCH_INDICES_DETAILS_PATH}/:tabId`; -export enum SearchIndicesDetailsMappingsTabs { +export enum SearchIndexDetailsTabs { DATA = 'data', MAPPINGS = 'mappings', + SETTINGS = 'settings', } diff --git a/x-pack/plugins/search_indices/public/types.ts b/x-pack/plugins/search_indices/public/types.ts index 0f68863fe72f8..95f5eb2883d2e 100644 --- a/x-pack/plugins/search_indices/public/types.ts +++ b/x-pack/plugins/search_indices/public/types.ts @@ -11,7 +11,10 @@ import type { AppMountParameters, CoreStart } from '@kbn/core/public'; import type { NavigationPublicPluginStart } from '@kbn/navigation-plugin/public'; import type { SharePluginStart } from '@kbn/share-plugin/public'; import type { UsageCollectionStart } from '@kbn/usage-collection-plugin/public'; -import type { MappingPropertyBase } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import type { + MappingProperty, + MappingPropertyBase, +} from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { IndexManagementPluginStart } from '@kbn/index-management-shared-types'; export interface SearchIndicesPluginSetup { @@ -80,7 +83,27 @@ export interface CreateIndexCodeExamples { javascript: CreateIndexCodeDefinition; } -export interface CreateIndexLanguageExamples { - default: CreateIndexCodeDefinition; - dense_vector: CreateIndexCodeDefinition; +export interface IngestCodeSnippetParameters extends CodeSnippetParameters { + indexName: string; + sampleDocument: object; + mappingProperties: Record; +} + +export type IngestCodeSnippetFunction = (params: IngestCodeSnippetParameters) => string; + +export interface IngestDataCodeDefinition { + installCommand?: string; + ingestCommand: IngestCodeSnippetFunction; + updateMappingsCommand: IngestCodeSnippetFunction; +} + +export interface IngestDataCodeExamples { + title: string; + ingestTitle: string; + description: string; + defaultMapping: Record; + sense: IngestDataCodeDefinition; + curl: IngestDataCodeDefinition; + python: IngestDataCodeDefinition; + javascript: IngestDataCodeDefinition; } diff --git a/x-pack/plugins/search_indices/public/utils/document_generation.test.ts b/x-pack/plugins/search_indices/public/utils/document_generation.test.ts new file mode 100644 index 0000000000000..67ae2e81f3c14 --- /dev/null +++ b/x-pack/plugins/search_indices/public/utils/document_generation.test.ts @@ -0,0 +1,143 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { MappingProperty } from '@elastic/elasticsearch/lib/api/types'; + +import { generateSampleDocument } from './document_generation'; + +describe('document generation util', () => { + it('should generate a sample document for text and keyword fields', () => { + const mapping: Record = { + body: { type: 'semantic_text', inference_id: '.elser_model_2' }, + title: { type: 'text' }, + tags: { type: 'keyword' }, + }; + + const result = generateSampleDocument(mapping); + + expect(result).toEqual({ + title: 'Sample text for title', + tags: 'sample-keyword-tags', + body: 'Hello World', + }); + }); + + it('should generate a sample document for integer and float fields', () => { + const mapping: Record = { + age: { type: 'integer' }, + rating: { type: 'float' }, + price: { type: 'double' }, + }; + + const result = generateSampleDocument(mapping); + + expect(Number.isInteger(result.age)).toBe(true); + expect(typeof result.rating).toBe('number'); + expect(typeof result.price).toBe('number'); + }); + + it('should generate a sample document for boolean and date fields', () => { + const mapping: Record = { + isActive: { type: 'boolean' }, + createdAt: { type: 'date' }, + }; + + const result = generateSampleDocument(mapping); + + expect(typeof result.isActive).toBe('boolean'); + expect(new Date(result.createdAt as string).toISOString()).toBe(result.createdAt); + }); + + it('should generate a sample document for geo_point fields', () => { + const mapping: Record = { + location: { type: 'geo_point' }, + }; + + const result = generateSampleDocument(mapping); + + expect(result.location).toEqual({ + lat: 40.7128, + lon: -74.006, + }); + }); + + it('should generate a sample document for nested fields', () => { + const mapping: Record = { + user: { + type: 'nested', + properties: { + name: { type: 'text' }, + age: { type: 'integer' }, + }, + }, + }; + + const result = generateSampleDocument(mapping); + + expect(result.user).toEqual([ + { + name: 'Sample text for name', + age: expect.any(Number), + }, + ]); + }); + + it('should generate a sample document for object fields', () => { + const mapping: Record = { + address: { + type: 'object', + properties: { + city: { type: 'text' }, + postalCode: { type: 'integer' }, + }, + }, + }; + + const result = generateSampleDocument(mapping); + + expect(result.address).toEqual({ + city: 'Sample text for city', + postalCode: expect.any(Number), + }); + }); + + it('should generate a sample document for dense_vector fields', () => { + const mapping: Record = { + embedding: { type: 'dense_vector', dims: 512 }, + }; + + const result = generateSampleDocument(mapping); + + expect(Array.isArray(result.embedding)).toBe(true); + expect((result.embedding as number[]).length!).toBe(21); + expect((result.embedding as number[])[20]).toBe('...'); + }); + + it('should generate a sample document for sparse_vector fields', () => { + const mapping: Record = { + vector: { type: 'sparse_vector' }, + }; + + const result = generateSampleDocument(mapping); + + expect(result.vector).toBeDefined(); + for (const [key, value] of Object.entries(result.vector!)) { + expect(key).toEqual(expect.any(String)); + expect(value).toEqual(expect.any(Number)); + } + }); + + it('should handle unknown mapping types by setting null', () => { + const mapping: Record = { + unknownField: { type: 'unknown' as any }, + }; + + const result = generateSampleDocument(mapping); + + expect(result.unknownField).toBeNull(); + }); +}); diff --git a/x-pack/plugins/search_indices/public/utils/document_generation.ts b/x-pack/plugins/search_indices/public/utils/document_generation.ts new file mode 100644 index 0000000000000..42f4dc88ee5b2 --- /dev/null +++ b/x-pack/plugins/search_indices/public/utils/document_generation.ts @@ -0,0 +1,107 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { + MappingDenseVectorProperty, + MappingProperty, +} from '@elastic/elasticsearch/lib/api/types'; + +export function generateSampleDocument( + mappingProperties: Record +): Record { + const sampleDocument: Record = {}; + + Object.entries(mappingProperties).forEach(([field, mapping]) => { + if ('type' in mapping) { + switch (mapping.type) { + case 'text': + sampleDocument[field] = `Sample text for ${field}`; + break; + case 'keyword': + sampleDocument[field] = `sample-keyword-${field}`; + break; + case 'semantic_text': + sampleDocument[field] = 'Hello World'; + break; + case 'integer': + case 'long': + sampleDocument[field] = Math.floor(Math.random() * 100); + break; + case 'float': + case 'double': + sampleDocument[field] = Math.random() * 100; + break; + case 'boolean': + sampleDocument[field] = Math.random() < 0.5; + break; + case 'date': + sampleDocument[field] = new Date().toISOString(); + break; + case 'geo_point': + sampleDocument[field] = { + lat: 40.7128, + lon: -74.006, + }; + break; + case 'nested': + if (mapping.properties) { + sampleDocument[field] = [generateSampleDocument(mapping.properties)]; + } + break; + case 'object': + if (mapping.properties) { + sampleDocument[field] = generateSampleDocument(mapping.properties); + } + break; + case 'dense_vector': + sampleDocument[field] = generateDenseVector(mapping); + break; + case 'sparse_vector': + sampleDocument[field] = generateSparseVector(); + break; + default: + // Default to null for unhandled types + sampleDocument[field] = null; + break; + } + } + }); + + return sampleDocument; +} + +function generateDenseVector(mapping: MappingDenseVectorProperty, maxDisplayDims = 20) { + // Limit the dimensions for better UI display + const dimension = Math.min(mapping?.dims ?? 20, maxDisplayDims); + + // Generate an array of random floating-point numbers + const denseVector: Array = Array.from({ length: dimension }, () => + parseFloat((Math.random() * 10).toFixed(3)) + ); + if (dimension < (mapping?.dims || 0)) { + denseVector.push('...'); + } + + return denseVector; +} + +function generateSparseVector(numElements: number = 5, vectorSize: number = 100) { + const sparseVector: Record = {}; + const usedIndices = new Set(); + + while (usedIndices.size < numElements) { + // Generate a random index for the sparse vector + const index = Math.floor(Math.random() * vectorSize); + + if (!usedIndices.has(index)) { + sparseVector[index] = parseFloat((Math.random() * 10).toFixed(3)); + usedIndices.add(index); + } + } + + return sparseVector; +} diff --git a/x-pack/plugins/search_indices/public/utils/language.ts b/x-pack/plugins/search_indices/public/utils/language.ts new file mode 100644 index 0000000000000..240434256b8f0 --- /dev/null +++ b/x-pack/plugins/search_indices/public/utils/language.ts @@ -0,0 +1,26 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { AvailableLanguages, Languages } from '../code_examples'; + +export function getDefaultCodingLanguage(): AvailableLanguages { + const defaultLang = readConsoleDefaultLanguage() ?? 'python'; + return defaultLang; +} + +const validLanguages = Object.keys(Languages); + +const CONSOLE_DEFAULT_LANGUAGE_KEY = 'sense:defaultLanguage'; +function readConsoleDefaultLanguage() { + const consoleLanguageValue = localStorage + .getItem(CONSOLE_DEFAULT_LANGUAGE_KEY) + ?.replaceAll('"', ''); // Console is storing the value wrapped in "", so we want to remove them + if (consoleLanguageValue && validLanguages.includes(consoleLanguageValue)) { + return consoleLanguageValue as AvailableLanguages; + } + return undefined; +} diff --git a/x-pack/plugins/search_playground/public/components/view_code/create_api_key_form.tsx b/x-pack/plugins/search_playground/public/components/view_code/create_api_key_form.tsx index b0014c7286af3..09eb328cebb9e 100644 --- a/x-pack/plugins/search_playground/public/components/view_code/create_api_key_form.tsx +++ b/x-pack/plugins/search_playground/public/components/view_code/create_api_key_form.tsx @@ -11,7 +11,6 @@ import { EuiFieldText, EuiFlexGroup, EuiForm, - EuiFormControlLayout, EuiFormRow, EuiText, } from '@elastic/eui'; @@ -83,7 +82,7 @@ export const CreateApiKeyForm = () => { control={control} rules={{ min: 0, required: true }} render={({ field }) => ( - @@ -95,20 +94,16 @@ export const CreateApiKeyForm = () => { } - > - - + type="number" + placeholder={i18n.translate( + 'xpack.searchPlayground.viewCode.apiForm.expire.placeholder', + { + defaultMessage: 'Set expiry in days', + } + )} + value={field.value || ''} + onChange={field.onChange} + /> )} /> diff --git a/x-pack/plugins/security/public/authentication/index.mock.ts b/x-pack/plugins/security/public/authentication/index.mock.ts index 166583b1274cb..f30d47af3f701 100644 --- a/x-pack/plugins/security/public/authentication/index.mock.ts +++ b/x-pack/plugins/security/public/authentication/index.mock.ts @@ -31,6 +31,7 @@ export const authorizationMock = { getRole: jest.fn(), deleteRole: jest.fn(), saveRole: jest.fn(), + bulkUpdateRoles: jest.fn(), }, privileges: { getAll: jest.fn(), @@ -43,6 +44,7 @@ export const authorizationMock = { getRole: jest.fn(), deleteRole: jest.fn(), saveRole: jest.fn(), + bulkUpdateRoles: jest.fn(), }, privileges: { getAll: jest.fn(), diff --git a/x-pack/plugins/security/public/authorization/authorization_service.ts b/x-pack/plugins/security/public/authorization/authorization_service.ts index c650d381be1af..4fbae4fb54e6a 100644 --- a/x-pack/plugins/security/public/authorization/authorization_service.ts +++ b/x-pack/plugins/security/public/authorization/authorization_service.ts @@ -29,6 +29,7 @@ export class AuthorizationService { getRole: rolesAPIClient.getRole, deleteRole: rolesAPIClient.deleteRole, saveRole: rolesAPIClient.saveRole, + bulkUpdateRoles: rolesAPIClient.bulkUpdateRoles, }, privileges: { getAll: privilegesAPIClient.getAll.bind(privilegesAPIClient), diff --git a/x-pack/plugins/security/public/management/roles/edit_role/edit_role_page.tsx b/x-pack/plugins/security/public/management/roles/edit_role/edit_role_page.tsx index 63229be3c8683..02812eda34c7b 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/edit_role_page.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/edit_role_page.tsx @@ -14,6 +14,7 @@ import { EuiFlexItem, EuiForm, EuiFormRow, + EuiIconTip, EuiPanel, EuiSpacer, EuiText, @@ -556,30 +557,27 @@ export const EditRolePage: FunctionComponent = ({ const getElasticsearchPrivileges = () => { return ( -
- - -
+ ); }; @@ -587,21 +585,18 @@ export const EditRolePage: FunctionComponent = ({ const getKibanaPrivileges = () => { return ( -
- - -
+ ); }; @@ -800,44 +795,89 @@ export const EditRolePage: FunctionComponent = ({ return (
- - {getFormTitle()} - - - - - {isRoleReserved && ( - - - -

+ + + + {getFormTitle()} + + + + + + + {isRoleReserved && ( + + +

+ +

+
+
+ )} + + + {isDeprecatedRole && ( + + + + + )} + + {getRoleNameAndDescription()} + + -

- - - )} - {isDeprecatedRole && ( - - - - - )} - - {getRoleNameAndDescription()} - {getElasticsearchPrivileges()} - {getKibanaPrivileges()} - - {getFormButtons()} + } + > + {getElasticsearchPrivileges()} +
+
+ + + + + + + + } + /> + + + } + > + {getKibanaPrivileges()} + + + + {getFormButtons()} + +
); diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/privilege_space_form.tsx b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/privilege_space_form.tsx index a37fd799a035e..8275a7b1203ab 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/privilege_space_form.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/privilege_space_form.tsx @@ -107,10 +107,18 @@ export class PrivilegeSpaceForm extends Component {

+ +

+ +

+
{this.getForm()} diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/space_aware_privilege_section.tsx b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/space_aware_privilege_section.tsx index e5a4cb1494d77..2bb3292932870 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/space_aware_privilege_section.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/space_aware_privilege_section.tsx @@ -206,7 +206,7 @@ export class SpaceAwarePrivilegeSection extends Component { > ); diff --git a/x-pack/plugins/security/public/management/roles/roles_api_client.mock.ts b/x-pack/plugins/security/public/management/roles/roles_api_client.mock.ts index 0e756e87c081c..5f868fda093a4 100644 --- a/x-pack/plugins/security/public/management/roles/roles_api_client.mock.ts +++ b/x-pack/plugins/security/public/management/roles/roles_api_client.mock.ts @@ -11,5 +11,6 @@ export const rolesAPIClientMock = { getRole: jest.fn(), deleteRole: jest.fn(), saveRole: jest.fn(), + bulkUpdateRoles: jest.fn(), }), }; diff --git a/x-pack/plugins/security/public/management/roles/roles_api_client.test.ts b/x-pack/plugins/security/public/management/roles/roles_api_client.test.ts index e7f4839e56c5d..688aa78699769 100644 --- a/x-pack/plugins/security/public/management/roles/roles_api_client.test.ts +++ b/x-pack/plugins/security/public/management/roles/roles_api_client.test.ts @@ -11,260 +11,330 @@ import { RolesAPIClient } from './roles_api_client'; import type { Role } from '../../../common'; describe('RolesAPIClient', () => { - async function saveRole(role: Role) { - const httpMock = httpServiceMock.createStartContract(); - const rolesAPIClient = new RolesAPIClient(httpMock); - - await rolesAPIClient.saveRole({ role }); - expect(httpMock.put).toHaveBeenCalledTimes(1); - - return JSON.parse((httpMock.put.mock.calls[0] as any)[1]?.body as any); - } - - it('removes placeholder index privileges', async () => { - const role: Role = { - name: 'my role', - elasticsearch: { - cluster: [], - indices: [{ names: [], privileges: [] }], - remote_indices: [{ clusters: [], names: [], privileges: [] }], - run_as: [], - }, - kibana: [], - }; - - const result = await saveRole(role); - - expect(result).toEqual({ - elasticsearch: { - cluster: [], - indices: [], - remote_indices: [], - run_as: [], - }, - kibana: [], - }); - }); + describe('#saveRole', () => { + async function saveRole(role: Role) { + const httpMock = httpServiceMock.createStartContract(); + const rolesAPIClient = new RolesAPIClient(httpMock); + + await rolesAPIClient.saveRole({ role }); + expect(httpMock.put).toHaveBeenCalledTimes(1); + + return JSON.parse((httpMock.put.mock.calls[0] as any)[1]?.body as any); + } - it('removes placeholder query entries', async () => { - const role: Role = { - name: 'my role', - elasticsearch: { - cluster: [], - indices: [{ names: ['.kibana*'], privileges: ['all'], query: '' }], - run_as: [], - }, - kibana: [], - }; - - const result = await saveRole(role); - - expect(result).toEqual({ - elasticsearch: { - cluster: [], - indices: [{ names: ['.kibana*'], privileges: ['all'] }], - run_as: [], - }, - kibana: [], + it('removes placeholder index privileges', async () => { + const role: Role = { + name: 'my role', + elasticsearch: { + cluster: [], + indices: [{ names: [], privileges: [] }], + remote_indices: [{ clusters: [], names: [], privileges: [] }], + run_as: [], + }, + kibana: [], + }; + + const result = await saveRole(role); + + expect(result).toEqual({ + elasticsearch: { + cluster: [], + indices: [], + remote_indices: [], + run_as: [], + }, + kibana: [], + }); }); - }); - it('removes transient fields not required for save', async () => { - const role: Role = { - name: 'my role', - transient_metadata: { - foo: 'bar', - }, - _transform_error: ['kibana'], - metadata: { - someOtherMetadata: true, - }, - _unrecognized_applications: ['foo'], - elasticsearch: { - cluster: [], - indices: [], - run_as: [], - }, - kibana: [], - }; - - const result = await saveRole(role); - - expect(result).toEqual({ - metadata: { - someOtherMetadata: true, - }, - elasticsearch: { - cluster: [], - indices: [], - run_as: [], - }, - kibana: [], + it('removes placeholder query entries', async () => { + const role: Role = { + name: 'my role', + elasticsearch: { + cluster: [], + indices: [{ names: ['.kibana*'], privileges: ['all'], query: '' }], + run_as: [], + }, + kibana: [], + }; + + const result = await saveRole(role); + + expect(result).toEqual({ + elasticsearch: { + cluster: [], + indices: [{ names: ['.kibana*'], privileges: ['all'] }], + run_as: [], + }, + kibana: [], + }); }); - }); - it('does not remove actual query entries', async () => { - const role: Role = { - name: 'my role', - elasticsearch: { - cluster: [], - indices: [{ names: ['.kibana*'], privileges: ['all'], query: 'something' }], - remote_indices: [ - { clusters: ['cluster'], names: ['.kibana*'], privileges: ['all'], query: 'something' }, - ], - run_as: [], - }, - kibana: [], - }; - - const result = await saveRole(role); - - expect(result).toEqual({ - elasticsearch: { - cluster: [], - indices: [{ names: ['.kibana*'], privileges: ['all'], query: 'something' }], - remote_indices: [ - { clusters: ['cluster'], names: ['.kibana*'], privileges: ['all'], query: 'something' }, - ], - run_as: [], - }, - kibana: [], + it('removes transient fields not required for save', async () => { + const role: Role = { + name: 'my role', + transient_metadata: { + foo: 'bar', + }, + _transform_error: ['kibana'], + metadata: { + someOtherMetadata: true, + }, + _unrecognized_applications: ['foo'], + elasticsearch: { + cluster: [], + indices: [], + run_as: [], + }, + kibana: [], + }; + + const result = await saveRole(role); + + expect(result).toEqual({ + metadata: { + someOtherMetadata: true, + }, + elasticsearch: { + cluster: [], + indices: [], + run_as: [], + }, + kibana: [], + }); }); - }); - it('should remove feature privileges if a corresponding base privilege is defined', async () => { - const role: Role = { - name: 'my role', - elasticsearch: { - cluster: [], - indices: [], - run_as: [], - }, - kibana: [ - { - spaces: ['foo'], - base: ['all'], - feature: { - feature1: ['read'], - feature2: ['write'], - }, + it('does not remove actual query entries', async () => { + const role: Role = { + name: 'my role', + elasticsearch: { + cluster: [], + indices: [{ names: ['.kibana*'], privileges: ['all'], query: 'something' }], + remote_indices: [ + { + clusters: ['cluster'], + names: ['.kibana*'], + privileges: ['all'], + query: 'something', + }, + ], + run_as: [], }, - ], - }; - - const result = await saveRole(role); - - expect(result).toEqual({ - elasticsearch: { - cluster: [], - indices: [], - run_as: [], - }, - kibana: [ - { - spaces: ['foo'], - base: ['all'], - feature: {}, + kibana: [], + }; + + const result = await saveRole(role); + + expect(result).toEqual({ + elasticsearch: { + cluster: [], + indices: [{ names: ['.kibana*'], privileges: ['all'], query: 'something' }], + remote_indices: [ + { + clusters: ['cluster'], + names: ['.kibana*'], + privileges: ['all'], + query: 'something', + }, + ], + run_as: [], }, - ], + kibana: [], + }); }); - }); - it('should not remove feature privileges if a corresponding base privilege is not defined', async () => { - const role: Role = { - name: 'my role', - elasticsearch: { - cluster: [], - indices: [], - run_as: [], - }, - kibana: [ - { - spaces: ['foo'], - base: [], - feature: { - feature1: ['read'], - feature2: ['write'], - }, + it('should remove feature privileges if a corresponding base privilege is defined', async () => { + const role: Role = { + name: 'my role', + elasticsearch: { + cluster: [], + indices: [], + run_as: [], }, - ], - }; - - const result = await saveRole(role); - - expect(result).toEqual({ - elasticsearch: { - cluster: [], - indices: [], - run_as: [], - }, - kibana: [ - { - spaces: ['foo'], - base: [], - feature: { - feature1: ['read'], - feature2: ['write'], + kibana: [ + { + spaces: ['foo'], + base: ['all'], + feature: { + feature1: ['read'], + feature2: ['write'], + }, }, + ], + }; + + const result = await saveRole(role); + + expect(result).toEqual({ + elasticsearch: { + cluster: [], + indices: [], + run_as: [], }, - ], + kibana: [ + { + spaces: ['foo'], + base: ['all'], + feature: {}, + }, + ], + }); }); - }); - it('should not remove space privileges', async () => { - const role: Role = { - name: 'my role', - elasticsearch: { - cluster: [], - indices: [], - run_as: [], - }, - kibana: [ - { - spaces: ['*'], - base: [], - feature: { - feature1: ['read'], - feature2: ['write'], - }, + it('should not remove feature privileges if a corresponding base privilege is not defined', async () => { + const role: Role = { + name: 'my role', + elasticsearch: { + cluster: [], + indices: [], + run_as: [], }, - { - spaces: ['marketing'], - base: [], - feature: { - feature1: ['read'], - feature2: ['write'], + kibana: [ + { + spaces: ['foo'], + base: [], + feature: { + feature1: ['read'], + feature2: ['write'], + }, }, + ], + }; + + const result = await saveRole(role); + + expect(result).toEqual({ + elasticsearch: { + cluster: [], + indices: [], + run_as: [], }, - ], - }; - - const result = await saveRole(role); - - expect(result).toEqual({ - elasticsearch: { - cluster: [], - indices: [], - run_as: [], - }, - kibana: [ - { - spaces: ['*'], - base: [], - feature: { - feature1: ['read'], - feature2: ['write'], + kibana: [ + { + spaces: ['foo'], + base: [], + feature: { + feature1: ['read'], + feature2: ['write'], + }, }, + ], + }); + }); + + it('should not remove space privileges', async () => { + const role: Role = { + name: 'my role', + elasticsearch: { + cluster: [], + indices: [], + run_as: [], }, - { - spaces: ['marketing'], - base: [], - feature: { - feature1: ['read'], - feature2: ['write'], + kibana: [ + { + spaces: ['*'], + base: [], + feature: { + feature1: ['read'], + feature2: ['write'], + }, }, + { + spaces: ['marketing'], + base: [], + feature: { + feature1: ['read'], + feature2: ['write'], + }, + }, + ], + }; + + const result = await saveRole(role); + + expect(result).toEqual({ + elasticsearch: { + cluster: [], + indices: [], + run_as: [], }, - ], + kibana: [ + { + spaces: ['*'], + base: [], + feature: { + feature1: ['read'], + feature2: ['write'], + }, + }, + { + spaces: ['marketing'], + base: [], + feature: { + feature1: ['read'], + feature2: ['write'], + }, + }, + ], + }); + }); + + describe('#bulkUpdateRoles', () => { + async function bulkUpdateRoles(roles: Role[]) { + const httpMock = httpServiceMock.createStartContract(); + const rolesAPIClient = new RolesAPIClient(httpMock); + + await rolesAPIClient.bulkUpdateRoles({ rolesUpdate: roles }); + expect(httpMock.post).toHaveBeenCalledTimes(1); + + return JSON.parse((httpMock.post.mock.calls[0] as any)[1]?.body as any); + } + + it('send payload in the accepted format', async () => { + const roles: Role[] = [ + { + name: 'role1', + elasticsearch: { + cluster: [], + indices: [], + run_as: [], + }, + kibana: [], + }, + { + name: 'role2', + elasticsearch: { + cluster: [], + indices: [], + run_as: [], + }, + kibana: [], + }, + ]; + + const result = await bulkUpdateRoles(roles); + + expect(result).toEqual({ + roles: { + role1: { + elasticsearch: { + cluster: [], + indices: [], + run_as: [], + }, + kibana: [], + }, + role2: { + elasticsearch: { + cluster: [], + indices: [], + run_as: [], + }, + kibana: [], + }, + }, + }); + }); }); }); }); diff --git a/x-pack/plugins/security/public/management/roles/roles_api_client.ts b/x-pack/plugins/security/public/management/roles/roles_api_client.ts index c870f99e24dd3..d6dcab658d21c 100644 --- a/x-pack/plugins/security/public/management/roles/roles_api_client.ts +++ b/x-pack/plugins/security/public/management/roles/roles_api_client.ts @@ -6,6 +6,7 @@ */ import type { HttpStart } from '@kbn/core/public'; +import type { BulkUpdatePayload, BulkUpdateRoleResponse } from '@kbn/security-plugin-types-public'; import type { Role, RoleIndexPrivilege, RoleRemoteIndexPrivilege } from '../../../common'; import { copyRole } from '../../../common/model'; @@ -32,6 +33,18 @@ export class RolesAPIClient { }); }; + public bulkUpdateRoles = async ({ + rolesUpdate, + }: BulkUpdatePayload): Promise => { + return await this.http.post('/api/security/roles', { + body: JSON.stringify({ + roles: Object.fromEntries( + rolesUpdate.map((role) => [role.name, this.transformRoleForSave(copyRole(role))]) + ), + }), + }); + }; + private transformRoleForSave = (role: Role) => { // Remove any placeholder index privileges const isPlaceholderPrivilege = ( diff --git a/x-pack/plugins/security/public/management/users/users_grid/users_grid_page.tsx b/x-pack/plugins/security/public/management/users/users_grid/users_grid_page.tsx index a9861850cf13e..6e4c30c3fdec5 100644 --- a/x-pack/plugins/security/public/management/users/users_grid/users_grid_page.tsx +++ b/x-pack/plugins/security/public/management/users/users_grid/users_grid_page.tsx @@ -236,6 +236,7 @@ export class UsersGridPage extends Component { defaultMessage="Users" /> } + data-test-subj="securityUsersPageHeader" rightSideItems={ this.props.readOnly ? undefined diff --git a/x-pack/plugins/security/public/plugin.test.tsx b/x-pack/plugins/security/public/plugin.test.tsx index 336a42a1fd324..e58539bf2bc8f 100644 --- a/x-pack/plugins/security/public/plugin.test.tsx +++ b/x-pack/plugins/security/public/plugin.test.tsx @@ -137,6 +137,7 @@ describe('Security Plugin', () => { "getAll": [Function], }, "roles": Object { + "bulkUpdateRoles": [Function], "deleteRole": [Function], "getRole": [Function], "getRoles": [Function], diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/delete.gen.ts b/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/delete.gen.ts index 34acf2a802076..af147e63d05fc 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/delete.gen.ts +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/delete.gen.ts @@ -10,7 +10,7 @@ * This file is automatically generated by the OpenAPI Generator, @kbn/openapi-generator. * * info: - * title: Delete the entity store engine + * title: Delete an Entity Engine * version: 2023-10-31 */ @@ -19,25 +19,25 @@ import { BooleanFromString } from '@kbn/zod-helpers'; import { EntityType } from '../common.gen'; -export type DeleteEntityStoreRequestQuery = z.infer; -export const DeleteEntityStoreRequestQuery = z.object({ +export type DeleteEntityEngineRequestQuery = z.infer; +export const DeleteEntityEngineRequestQuery = z.object({ /** * Control flag to also delete the entity data. */ data: BooleanFromString.optional(), }); -export type DeleteEntityStoreRequestQueryInput = z.input; +export type DeleteEntityEngineRequestQueryInput = z.input; -export type DeleteEntityStoreRequestParams = z.infer; -export const DeleteEntityStoreRequestParams = z.object({ +export type DeleteEntityEngineRequestParams = z.infer; +export const DeleteEntityEngineRequestParams = z.object({ /** - * The entity type of the store (either 'user' or 'host'). + * The entity type of the engine (either 'user' or 'host'). */ entityType: EntityType, }); -export type DeleteEntityStoreRequestParamsInput = z.input; +export type DeleteEntityEngineRequestParamsInput = z.input; -export type DeleteEntityStoreResponse = z.infer; -export const DeleteEntityStoreResponse = z.object({ +export type DeleteEntityEngineResponse = z.infer; +export const DeleteEntityEngineResponse = z.object({ deleted: z.boolean().optional(), }); diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/delete.schema.yaml b/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/delete.schema.yaml index c766d9895c5fa..4de339ea14e1c 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/delete.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/delete.schema.yaml @@ -1,22 +1,22 @@ openapi: 3.0.0 info: - title: Delete the entity store engine + title: Delete an Entity Engine version: '2023-10-31' paths: /api/entity_store/engines/{entityType}: delete: x-labels: [ess, serverless] x-codegen-enabled: true - operationId: DeleteEntityStore - summary: Delete the Entity Store engine + operationId: DeleteEntityEngine + summary: Delete the Entity Engine parameters: - name: entityType in: path required: true schema: $ref: '../common.schema.yaml#/components/schemas/EntityType' - description: The entity type of the store (either 'user' or 'host'). + description: The entity type of the engine (either 'user' or 'host'). - name: data in: query diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/get.gen.ts b/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/get.gen.ts index 44f6f45844fc1..c5ebbb1aebb99 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/get.gen.ts +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/get.gen.ts @@ -10,7 +10,7 @@ * This file is automatically generated by the OpenAPI Generator, @kbn/openapi-generator. * * info: - * title: Get Entity Store engine + * title: Get Entity Engine * version: 2023-10-31 */ @@ -18,16 +18,14 @@ import { z } from '@kbn/zod'; import { EntityType, EngineDescriptor } from '../common.gen'; -export type GetEntityStoreEngineRequestParams = z.infer; -export const GetEntityStoreEngineRequestParams = z.object({ +export type GetEntityEngineRequestParams = z.infer; +export const GetEntityEngineRequestParams = z.object({ /** - * The entity type of the store (either 'user' or 'host'). + * The entity type of the engine (either 'user' or 'host'). */ entityType: EntityType, }); -export type GetEntityStoreEngineRequestParamsInput = z.input< - typeof GetEntityStoreEngineRequestParams ->; +export type GetEntityEngineRequestParamsInput = z.input; -export type GetEntityStoreEngineResponse = z.infer; -export const GetEntityStoreEngineResponse = EngineDescriptor; +export type GetEntityEngineResponse = z.infer; +export const GetEntityEngineResponse = EngineDescriptor; diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/get.schema.yaml b/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/get.schema.yaml index d65a5906e54d9..4108f3f4594ae 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/get.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/get.schema.yaml @@ -1,21 +1,21 @@ openapi: 3.0.0 info: - title: Get Entity Store engine + title: Get Entity Engine version: '2023-10-31' paths: /api/entity_store/engines/{entityType}: get: x-labels: [ess, serverless] x-codegen-enabled: true - operationId: GetEntityStoreEngine - summary: Get the Entity Store engine + operationId: GetEntityEngine + summary: Get an Entity Engine parameters: - name: entityType in: path required: true schema: $ref: '../common.schema.yaml#/components/schemas/EntityType' - description: The entity type of the store (either 'user' or 'host'). + description: The entity type of the engine (either 'user' or 'host'). responses: '200': description: Successful response diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/init.gen.ts b/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/init.gen.ts index 07f32f4cb7144..3812d8a6a580b 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/init.gen.ts +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/init.gen.ts @@ -10,7 +10,7 @@ * This file is automatically generated by the OpenAPI Generator, @kbn/openapi-generator. * * info: - * title: Init Entity Store types + * title: Init Entity Engine * version: 2023-10-31 */ @@ -18,21 +18,21 @@ import { z } from '@kbn/zod'; import { EntityType, IndexPattern, EngineDescriptor } from '../common.gen'; -export type InitEntityStoreRequestParams = z.infer; -export const InitEntityStoreRequestParams = z.object({ +export type InitEntityEngineRequestParams = z.infer; +export const InitEntityEngineRequestParams = z.object({ /** - * The entity type of the store (either 'user' or 'host'). + * The entity type of the engine (either 'user' or 'host'). */ entityType: EntityType, }); -export type InitEntityStoreRequestParamsInput = z.input; +export type InitEntityEngineRequestParamsInput = z.input; -export type InitEntityStoreRequestBody = z.infer; -export const InitEntityStoreRequestBody = z.object({ +export type InitEntityEngineRequestBody = z.infer; +export const InitEntityEngineRequestBody = z.object({ indexPattern: IndexPattern.optional(), filter: z.string().optional(), }); -export type InitEntityStoreRequestBodyInput = z.input; +export type InitEntityEngineRequestBodyInput = z.input; -export type InitEntityStoreResponse = z.infer; -export const InitEntityStoreResponse = EngineDescriptor; +export type InitEntityEngineResponse = z.infer; +export const InitEntityEngineResponse = EngineDescriptor; diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/init.schema.yaml b/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/init.schema.yaml index 8e826d57ce40a..7410dcba7ef21 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/init.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/init.schema.yaml @@ -1,22 +1,22 @@ openapi: 3.0.0 info: - title: Init Entity Store types + title: Init Entity Engine version: '2023-10-31' paths: /api/entity_store/engines/{entityType}/init: post: x-labels: [ess, serverless] x-codegen-enabled: true - operationId: InitEntityStore - summary: Initialize the Entity Store + operationId: InitEntityEngine + summary: Initialize an Entity Engine parameters: - name: entityType in: path required: true schema: $ref: '../common.schema.yaml#/components/schemas/EntityType' - description: The entity type of the store (either 'user' or 'host'). + description: The entity type of the engine (either 'user' or 'host'). requestBody: description: Schema for the engine initialization required: true diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/list.gen.ts b/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/list.gen.ts index 926549a329a4b..0a35fa49f6b33 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/list.gen.ts +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/list.gen.ts @@ -10,7 +10,7 @@ * This file is automatically generated by the OpenAPI Generator, @kbn/openapi-generator. * * info: - * title: List Entity Store engines + * title: List Entity Engines * version: 2023-10-31 */ @@ -18,8 +18,8 @@ import { z } from '@kbn/zod'; import { EngineDescriptor } from '../common.gen'; -export type ListEntityStoreEnginesResponse = z.infer; -export const ListEntityStoreEnginesResponse = z.object({ +export type ListEntityEnginesResponse = z.infer; +export const ListEntityEnginesResponse = z.object({ count: z.number().int().optional(), engines: z.array(EngineDescriptor).optional(), }); diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/list.schema.yaml b/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/list.schema.yaml index efad1a4380352..deee32a8b2bb7 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/list.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/list.schema.yaml @@ -1,14 +1,14 @@ openapi: 3.0.0 info: - title: List Entity Store engines + title: List Entity Engines version: '2023-10-31' paths: /api/entity_store/engines: get: x-labels: [ess, serverless] x-codegen-enabled: true - operationId: ListEntityStoreEngines - summary: List the Entity Store engines + operationId: ListEntityEngines + summary: List the Entity Engines responses: '200': description: Successful response diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/start.gen.ts b/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/start.gen.ts index b8e94d00551c0..8260597d044fc 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/start.gen.ts +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/start.gen.ts @@ -10,7 +10,7 @@ * This file is automatically generated by the OpenAPI Generator, @kbn/openapi-generator. * * info: - * title: Start the entity store engine + * title: Start an Entity Engine * version: 2023-10-31 */ @@ -18,16 +18,16 @@ import { z } from '@kbn/zod'; import { EntityType } from '../common.gen'; -export type StartEntityStoreRequestParams = z.infer; -export const StartEntityStoreRequestParams = z.object({ +export type StartEntityEngineRequestParams = z.infer; +export const StartEntityEngineRequestParams = z.object({ /** - * The entity type of the store (either 'user' or 'host'). + * The entity type of the engine (either 'user' or 'host'). */ entityType: EntityType, }); -export type StartEntityStoreRequestParamsInput = z.input; +export type StartEntityEngineRequestParamsInput = z.input; -export type StartEntityStoreResponse = z.infer; -export const StartEntityStoreResponse = z.object({ +export type StartEntityEngineResponse = z.infer; +export const StartEntityEngineResponse = z.object({ started: z.boolean().optional(), }); diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/start.schema.yaml b/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/start.schema.yaml index 5c048bf3d973c..595fd1e074441 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/start.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/start.schema.yaml @@ -1,22 +1,22 @@ openapi: 3.0.0 info: - title: Start the entity store engine + title: Start an Entity Engine version: '2023-10-31' paths: /api/entity_store/engines/{entityType}/start: post: x-labels: [ess, serverless] x-codegen-enabled: true - operationId: StartEntityStore - summary: Start the Entity Store engine + operationId: StartEntityEngine + summary: Start an Entity Engine parameters: - name: entityType in: path required: true schema: $ref: '../common.schema.yaml#/components/schemas/EntityType' - description: The entity type of the store (either 'user' or 'host'). + description: The entity type of the engine (either 'user' or 'host'). responses: '200': description: Successful response diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/stats.gen.ts b/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/stats.gen.ts index 631399faebc96..8b2cb44947535 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/stats.gen.ts +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/stats.gen.ts @@ -10,7 +10,7 @@ * This file is automatically generated by the OpenAPI Generator, @kbn/openapi-generator. * * info: - * title: Get the entity store engine stats + * title: Get Entity Engine stats * version: 2023-10-31 */ @@ -18,19 +18,19 @@ import { z } from '@kbn/zod'; import { EntityType, IndexPattern, EngineStatus } from '../common.gen'; -export type GetEntityStoreStatsRequestParams = z.infer; -export const GetEntityStoreStatsRequestParams = z.object({ +export type GetEntityEngineStatsRequestParams = z.infer; +export const GetEntityEngineStatsRequestParams = z.object({ /** - * The entity type of the store (either 'user' or 'host'). + * The entity type of the engine (either 'user' or 'host'). */ entityType: EntityType, }); -export type GetEntityStoreStatsRequestParamsInput = z.input< - typeof GetEntityStoreStatsRequestParams +export type GetEntityEngineStatsRequestParamsInput = z.input< + typeof GetEntityEngineStatsRequestParams >; -export type GetEntityStoreStatsResponse = z.infer; -export const GetEntityStoreStatsResponse = z.object({ +export type GetEntityEngineStatsResponse = z.infer; +export const GetEntityEngineStatsResponse = z.object({ type: EntityType.optional(), indexPattern: IndexPattern.optional(), status: EngineStatus.optional(), diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/stats.schema.yaml b/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/stats.schema.yaml index 8d8327d5e6468..25c010acc92ce 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/stats.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/stats.schema.yaml @@ -1,22 +1,22 @@ openapi: 3.0.0 info: - title: Get the entity store engine stats + title: Get Entity Engine stats version: '2023-10-31' paths: /api/entity_store/engines/{entityType}/stats: post: x-labels: [ess, serverless] x-codegen-enabled: true - operationId: GetEntityStoreStats - summary: Get the Entity Store engine stats + operationId: GetEntityEngineStats + summary: Get Entity Engine stats parameters: - name: entityType in: path required: true schema: $ref: '../common.schema.yaml#/components/schemas/EntityType' - description: The entity type of the store (either 'user' or 'host'). + description: The entity type of the engine (either 'user' or 'host'). responses: '200': description: Successful response diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/stop.gen.ts b/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/stop.gen.ts index ff3ef7a2f3eac..c2bb1bcc834be 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/stop.gen.ts +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/stop.gen.ts @@ -10,7 +10,7 @@ * This file is automatically generated by the OpenAPI Generator, @kbn/openapi-generator. * * info: - * title: Stop the entity store engine + * title: Stop an Entity Engine * version: 2023-10-31 */ @@ -18,16 +18,16 @@ import { z } from '@kbn/zod'; import { EntityType } from '../common.gen'; -export type StopEntityStoreRequestParams = z.infer; -export const StopEntityStoreRequestParams = z.object({ +export type StopEntityEngineRequestParams = z.infer; +export const StopEntityEngineRequestParams = z.object({ /** - * The entity type of the store (either 'user' or 'host'). + * The entity type of the engine (either 'user' or 'host'). */ entityType: EntityType, }); -export type StopEntityStoreRequestParamsInput = z.input; +export type StopEntityEngineRequestParamsInput = z.input; -export type StopEntityStoreResponse = z.infer; -export const StopEntityStoreResponse = z.object({ +export type StopEntityEngineResponse = z.infer; +export const StopEntityEngineResponse = z.object({ stopped: z.boolean().optional(), }); diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/stop.schema.yaml b/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/stop.schema.yaml index 214f803a76e34..7c2c16c94fcc8 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/stop.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/entity_store/engine/stop.schema.yaml @@ -1,22 +1,22 @@ openapi: 3.0.0 info: - title: Stop the entity store engine + title: Stop an Entity Engine version: '2023-10-31' paths: /api/entity_store/engines/{entityType}/stop: post: x-labels: [ess, serverless] x-codegen-enabled: true - operationId: StopEntityStore - summary: Stop the Entity Store engine + operationId: StopEntityEngine + summary: Stop an Entity Engine parameters: - name: entityType in: path required: true schema: $ref: '../common.schema.yaml#/components/schemas/EntityType' - description: The entity type of the store (either 'user' or 'host'). + description: The entity type of the engine (either 'user' or 'host'). responses: '200': description: Successful response diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_cleanup_route.gen.ts b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_cleanup_route.gen.ts new file mode 100644 index 0000000000000..13194051244cb --- /dev/null +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_cleanup_route.gen.ts @@ -0,0 +1,33 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +/* + * NOTICE: Do not edit this file manually. + * This file is automatically generated by the OpenAPI Generator, @kbn/openapi-generator. + * + * info: + * title: Risk Scoring API + * version: 1 + */ + +import { z } from '@kbn/zod'; + +export type CleanUpRiskEngineErrorResponse = z.infer; +export const CleanUpRiskEngineErrorResponse = z.object({ + cleanup_successful: z.boolean(), + errors: z.array( + z.object({ + seq: z.number().int(), + error: z.string(), + }) + ), +}); + +export type CleanUpRiskEngineResponse = z.infer; +export const CleanUpRiskEngineResponse = z.object({ + cleanup_successful: z.boolean().optional(), +}); diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_cleanup_route.schema.yaml b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_cleanup_route.schema.yaml new file mode 100644 index 0000000000000..2dffe3879961e --- /dev/null +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_cleanup_route.schema.yaml @@ -0,0 +1,60 @@ +openapi: 3.0.0 +info: + version: '1' + title: Risk Scoring API + description: These APIs allow the consumer to manage Entity Risk Scores within Entity Analytics. +paths: + /api/risk_score/engine/dangerously_delete_data: + delete: + x-labels: [ess, serverless] + x-codegen-enabled: true + operationId: CleanUpRiskEngine + summary: Cleanup the Risk Engine + description: Cleaning up the the Risk Engine by removing the indices, mapping and transforms + responses: + '200': + description: Successful response + content: + application/json: + schema: + type: object + properties: + cleanup_successful: + type: boolean + '400': + description: Task manager is unavailable + content: + application/json: + schema: + $ref: '../common/common.schema.yaml#/components/schemas/TaskManagerUnavailableResponse' + default: + description: Unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/CleanUpRiskEngineErrorResponse' + +components: + schemas: + CleanUpRiskEngineErrorResponse: + type: object + required: + - cleanup_successful + - errors + properties: + cleanup_successful: + type: boolean + example: false + errors: + type: array + items: + type: object + required: + - seq + - error + properties: + seq: + type: integer + error: + type: string + diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_status_route.gen.ts b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_status_route.gen.ts index b06f8960a4516..0faf22c032e06 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_status_route.gen.ts +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_status_route.gen.ts @@ -45,10 +45,6 @@ export type RiskEngineStatusResponse = z.infer; export const RiskEngineStatusResponse = z.object({ legacy_risk_engine_status: RiskEngineStatus, risk_engine_status: RiskEngineStatus, - /** - * Indicates whether the maximum amount of risk engines has been reached - */ - is_max_amount_of_risk_engines_reached: z.boolean(), risk_engine_task_status: RiskEngineTaskStatus.optional(), }); diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_status_route.schema.yaml b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_status_route.schema.yaml index d502848911f89..f4d074d67c2a4 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_status_route.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_status_route.schema.yaml @@ -59,14 +59,10 @@ components: required: - legacy_risk_engine_status - risk_engine_status - - is_max_amount_of_risk_engines_reached properties: legacy_risk_engine_status: $ref: '#/components/schemas/RiskEngineStatus' risk_engine_status: $ref: '#/components/schemas/RiskEngineStatus' - is_max_amount_of_risk_engines_reached: - description: Indicates whether the maximum amount of risk engines has been reached - type: boolean risk_engine_task_status: $ref: '#/components/schemas/RiskEngineTaskStatus' diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/index.ts b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/index.ts index 94d587cd2bfc7..21dc89544c8d8 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/index.ts +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/index.ts @@ -15,3 +15,4 @@ export * from './calculation_route.gen'; export * from './preview_route.gen'; export * from './entity_calculation_route.gen'; export * from './get_risk_engine_privileges.gen'; +export * from './engine_cleanup_route.gen'; diff --git a/x-pack/plugins/security_solution/common/api/quickstart_client.gen.ts b/x-pack/plugins/security_solution/common/api/quickstart_client.gen.ts index 0e4b7456547cc..9b057bb19d7e2 100644 --- a/x-pack/plugins/security_solution/common/api/quickstart_client.gen.ts +++ b/x-pack/plugins/security_solution/common/api/quickstart_client.gen.ts @@ -244,36 +244,37 @@ import type { UploadAssetCriticalityRecordsResponse, } from './entity_analytics/asset_criticality/upload_asset_criticality_csv.gen'; import type { - DeleteEntityStoreRequestQueryInput, - DeleteEntityStoreRequestParamsInput, - DeleteEntityStoreResponse, + DeleteEntityEngineRequestQueryInput, + DeleteEntityEngineRequestParamsInput, + DeleteEntityEngineResponse, } from './entity_analytics/entity_store/engine/delete.gen'; import type { - GetEntityStoreEngineRequestParamsInput, - GetEntityStoreEngineResponse, + GetEntityEngineRequestParamsInput, + GetEntityEngineResponse, } from './entity_analytics/entity_store/engine/get.gen'; import type { - InitEntityStoreRequestParamsInput, - InitEntityStoreRequestBodyInput, - InitEntityStoreResponse, + InitEntityEngineRequestParamsInput, + InitEntityEngineRequestBodyInput, + InitEntityEngineResponse, } from './entity_analytics/entity_store/engine/init.gen'; -import type { ListEntityStoreEnginesResponse } from './entity_analytics/entity_store/engine/list.gen'; +import type { ListEntityEnginesResponse } from './entity_analytics/entity_store/engine/list.gen'; import type { - StartEntityStoreRequestParamsInput, - StartEntityStoreResponse, + StartEntityEngineRequestParamsInput, + StartEntityEngineResponse, } from './entity_analytics/entity_store/engine/start.gen'; import type { - GetEntityStoreStatsRequestParamsInput, - GetEntityStoreStatsResponse, + GetEntityEngineStatsRequestParamsInput, + GetEntityEngineStatsResponse, } from './entity_analytics/entity_store/engine/stats.gen'; import type { - StopEntityStoreRequestParamsInput, - StopEntityStoreResponse, + StopEntityEngineRequestParamsInput, + StopEntityEngineResponse, } from './entity_analytics/entity_store/engine/stop.gen'; import type { ListEntitiesRequestQueryInput, ListEntitiesResponse, } from './entity_analytics/entity_store/entities/list_entities.gen'; +import type { CleanUpRiskEngineResponse } from './entity_analytics/risk_engine/engine_cleanup_route.gen'; import type { DisableRiskEngineResponse } from './entity_analytics/risk_engine/engine_disable_route.gen'; import type { EnableRiskEngineResponse } from './entity_analytics/risk_engine/engine_enable_route.gen'; import type { InitRiskEngineResponse } from './entity_analytics/risk_engine/engine_init_route.gen'; @@ -315,7 +316,10 @@ import type { GetDraftTimelinesRequestQueryInput, GetDraftTimelinesResponse, } from './timeline/get_draft_timelines/get_draft_timelines_route.gen'; -import type { GetNotesRequestQueryInput } from './timeline/get_notes/get_notes_route.gen'; +import type { + GetNotesRequestQueryInput, + GetNotesResponse, +} from './timeline/get_notes/get_notes_route.gen'; import type { GetTimelineRequestQueryInput, GetTimelineResponse, @@ -537,6 +541,21 @@ If asset criticality records already exist for the specified entities, those rec }) .catch(catchAxiosErrorFormatAndThrow); } + /** + * Cleaning up the the Risk Engine by removing the indices, mapping and transforms + */ + async cleanUpRiskEngine() { + this.log.info(`${new Date().toISOString()} Calling API CleanUpRiskEngine`); + return this.kbnClient + .request({ + path: '/api/risk_score/engine/dangerously_delete_data', + headers: { + [ELASTIC_HTTP_VERSION_HEADER]: '1', + }, + method: 'DELETE', + }) + .catch(catchAxiosErrorFormatAndThrow); + } async createAlertsIndex() { this.log.info(`${new Date().toISOString()} Calling API CreateAlertsIndex`); return this.kbnClient @@ -663,10 +682,10 @@ If a record already exists for the specified entity, that record is overwritten }) .catch(catchAxiosErrorFormatAndThrow); } - async deleteEntityStore(props: DeleteEntityStoreProps) { - this.log.info(`${new Date().toISOString()} Calling API DeleteEntityStore`); + async deleteEntityEngine(props: DeleteEntityEngineProps) { + this.log.info(`${new Date().toISOString()} Calling API DeleteEntityEngine`); return this.kbnClient - .request({ + .request({ path: replaceParams('/api/entity_store/engines/{entityType}', props.params), headers: { [ELASTIC_HTTP_VERSION_HEADER]: '2023-10-31', @@ -1224,10 +1243,10 @@ finalize it. }) .catch(catchAxiosErrorFormatAndThrow); } - async getEntityStoreEngine(props: GetEntityStoreEngineProps) { - this.log.info(`${new Date().toISOString()} Calling API GetEntityStoreEngine`); + async getEntityEngine(props: GetEntityEngineProps) { + this.log.info(`${new Date().toISOString()} Calling API GetEntityEngine`); return this.kbnClient - .request({ + .request({ path: replaceParams('/api/entity_store/engines/{entityType}', props.params), headers: { [ELASTIC_HTTP_VERSION_HEADER]: '2023-10-31', @@ -1236,10 +1255,10 @@ finalize it. }) .catch(catchAxiosErrorFormatAndThrow); } - async getEntityStoreStats(props: GetEntityStoreStatsProps) { - this.log.info(`${new Date().toISOString()} Calling API GetEntityStoreStats`); + async getEntityEngineStats(props: GetEntityEngineStatsProps) { + this.log.info(`${new Date().toISOString()} Calling API GetEntityEngineStats`); return this.kbnClient - .request({ + .request({ path: replaceParams('/api/entity_store/engines/{entityType}/stats', props.params), headers: { [ELASTIC_HTTP_VERSION_HEADER]: '2023-10-31', @@ -1254,7 +1273,7 @@ finalize it. async getNotes(props: GetNotesProps) { this.log.info(`${new Date().toISOString()} Calling API GetNotes`); return this.kbnClient - .request({ + .request({ path: '/api/note', headers: { [ELASTIC_HTTP_VERSION_HEADER]: '2023-10-31', @@ -1413,10 +1432,10 @@ finalize it. }) .catch(catchAxiosErrorFormatAndThrow); } - async initEntityStore(props: InitEntityStoreProps) { - this.log.info(`${new Date().toISOString()} Calling API InitEntityStore`); + async initEntityEngine(props: InitEntityEngineProps) { + this.log.info(`${new Date().toISOString()} Calling API InitEntityEngine`); return this.kbnClient - .request({ + .request({ path: replaceParams('/api/entity_store/engines/{entityType}/init', props.params), headers: { [ELASTIC_HTTP_VERSION_HEADER]: '2023-10-31', @@ -1502,10 +1521,10 @@ finalize it. }) .catch(catchAxiosErrorFormatAndThrow); } - async listEntityStoreEngines() { - this.log.info(`${new Date().toISOString()} Calling API ListEntityStoreEngines`); + async listEntityEngines() { + this.log.info(`${new Date().toISOString()} Calling API ListEntityEngines`); return this.kbnClient - .request({ + .request({ path: '/api/entity_store/engines', headers: { [ELASTIC_HTTP_VERSION_HEADER]: '2023-10-31', @@ -1859,10 +1878,10 @@ detection engine rules. }) .catch(catchAxiosErrorFormatAndThrow); } - async startEntityStore(props: StartEntityStoreProps) { - this.log.info(`${new Date().toISOString()} Calling API StartEntityStore`); + async startEntityEngine(props: StartEntityEngineProps) { + this.log.info(`${new Date().toISOString()} Calling API StartEntityEngine`); return this.kbnClient - .request({ + .request({ path: replaceParams('/api/entity_store/engines/{entityType}/start', props.params), headers: { [ELASTIC_HTTP_VERSION_HEADER]: '2023-10-31', @@ -1871,10 +1890,10 @@ detection engine rules. }) .catch(catchAxiosErrorFormatAndThrow); } - async stopEntityStore(props: StopEntityStoreProps) { - this.log.info(`${new Date().toISOString()} Calling API StopEntityStore`); + async stopEntityEngine(props: StopEntityEngineProps) { + this.log.info(`${new Date().toISOString()} Calling API StopEntityEngine`); return this.kbnClient - .request({ + .request({ path: replaceParams('/api/entity_store/engines/{entityType}/stop', props.params), headers: { [ELASTIC_HTTP_VERSION_HEADER]: '2023-10-31', @@ -1993,9 +2012,9 @@ export interface CreateUpdateProtectionUpdatesNoteProps { export interface DeleteAssetCriticalityRecordProps { query: DeleteAssetCriticalityRecordRequestQueryInput; } -export interface DeleteEntityStoreProps { - query: DeleteEntityStoreRequestQueryInput; - params: DeleteEntityStoreRequestParamsInput; +export interface DeleteEntityEngineProps { + query: DeleteEntityEngineRequestQueryInput; + params: DeleteEntityEngineRequestParamsInput; } export interface DeleteNoteProps { body: DeleteNoteRequestBodyInput; @@ -2090,11 +2109,11 @@ export interface GetEndpointSuggestionsProps { params: GetEndpointSuggestionsRequestParamsInput; body: GetEndpointSuggestionsRequestBodyInput; } -export interface GetEntityStoreEngineProps { - params: GetEntityStoreEngineRequestParamsInput; +export interface GetEntityEngineProps { + params: GetEntityEngineRequestParamsInput; } -export interface GetEntityStoreStatsProps { - params: GetEntityStoreStatsRequestParamsInput; +export interface GetEntityEngineStatsProps { + params: GetEntityEngineStatsRequestParamsInput; } export interface GetNotesProps { query: GetNotesRequestQueryInput; @@ -2126,9 +2145,9 @@ export interface ImportRulesProps { export interface ImportTimelinesProps { body: ImportTimelinesRequestBodyInput; } -export interface InitEntityStoreProps { - params: InitEntityStoreRequestParamsInput; - body: InitEntityStoreRequestBodyInput; +export interface InitEntityEngineProps { + params: InitEntityEngineRequestParamsInput; + body: InitEntityEngineRequestBodyInput; } export interface InstallPrepackedTimelinesProps { body: InstallPrepackedTimelinesRequestBodyInput; @@ -2186,11 +2205,11 @@ export interface SetAlertsStatusProps { export interface SetAlertTagsProps { body: SetAlertTagsRequestBodyInput; } -export interface StartEntityStoreProps { - params: StartEntityStoreRequestParamsInput; +export interface StartEntityEngineProps { + params: StartEntityEngineRequestParamsInput; } -export interface StopEntityStoreProps { - params: StopEntityStoreRequestParamsInput; +export interface StopEntityEngineProps { + params: StopEntityEngineRequestParamsInput; } export interface SuggestUserProfilesProps { query: SuggestUserProfilesRequestQueryInput; diff --git a/x-pack/plugins/security_solution/common/api/timeline/delete_note/delete_note_route.gen.ts b/x-pack/plugins/security_solution/common/api/timeline/delete_note/delete_note_route.gen.ts index fc06d819ab39a..d98455c1fdb59 100644 --- a/x-pack/plugins/security_solution/common/api/timeline/delete_note/delete_note_route.gen.ts +++ b/x-pack/plugins/security_solution/common/api/timeline/delete_note/delete_note_route.gen.ts @@ -23,9 +23,11 @@ export const DeleteNoteRequestBody = z.union([ noteId: z.string(), }) .nullable(), - z.object({ - noteIds: z.array(z.string()).nullable(), - }), + z + .object({ + noteIds: z.array(z.string()).nullable(), + }) + .nullable(), ]); export type DeleteNoteRequestBodyInput = z.input; diff --git a/x-pack/plugins/security_solution/common/api/timeline/delete_note/delete_note_route.schema.yaml b/x-pack/plugins/security_solution/common/api/timeline/delete_note/delete_note_route.schema.yaml index 02a75d4e0ac77..380029bff8070 100644 --- a/x-pack/plugins/security_solution/common/api/timeline/delete_note/delete_note_route.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/timeline/delete_note/delete_note_route.schema.yaml @@ -34,6 +34,7 @@ paths: type: string - type: object required: [noteIds] + nullable: true properties: noteIds: type: array diff --git a/x-pack/plugins/security_solution/common/api/timeline/delete_note/delete_note_route.ts b/x-pack/plugins/security_solution/common/api/timeline/delete_note/delete_note_route.ts deleted file mode 100644 index 717440fa0717a..0000000000000 --- a/x-pack/plugins/security_solution/common/api/timeline/delete_note/delete_note_route.ts +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import * as runtimeTypes from 'io-ts'; -import { unionWithNullType } from '../../../utility_types'; - -export const deleteNoteSchema = runtimeTypes.partial({ - noteId: unionWithNullType(runtimeTypes.string), - noteIds: unionWithNullType(runtimeTypes.array(runtimeTypes.string)), -}); diff --git a/x-pack/plugins/security_solution/common/api/timeline/delete_timelines/delete_timelines_route.ts b/x-pack/plugins/security_solution/common/api/timeline/delete_timelines/delete_timelines_route.ts deleted file mode 100644 index c6b8f1baf6974..0000000000000 --- a/x-pack/plugins/security_solution/common/api/timeline/delete_timelines/delete_timelines_route.ts +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import * as rt from 'io-ts'; - -const searchId = rt.partial({ searchIds: rt.array(rt.string) }); - -const baseDeleteTimelinesSchema = rt.type({ - savedObjectIds: rt.array(rt.string), -}); - -export const deleteTimelinesSchema = rt.intersection([baseDeleteTimelinesSchema, searchId]); diff --git a/x-pack/plugins/security_solution/common/api/timeline/export_timelines/export_timelines_route.ts b/x-pack/plugins/security_solution/common/api/timeline/export_timelines/export_timelines_route.ts deleted file mode 100644 index cc391a47e0b9e..0000000000000 --- a/x-pack/plugins/security_solution/common/api/timeline/export_timelines/export_timelines_route.ts +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import * as rt from 'io-ts'; -import { unionWithNullType } from '../../../utility_types'; - -export const exportTimelinesQuerySchema = rt.type({ - file_name: rt.string, -}); - -export const exportTimelinesRequestBodySchema = rt.partial({ - ids: unionWithNullType(rt.array(rt.string)), -}); diff --git a/x-pack/plugins/security_solution/common/api/timeline/get_notes/get_notes_route.gen.ts b/x-pack/plugins/security_solution/common/api/timeline/get_notes/get_notes_route.gen.ts index b20b713bc3ed3..5851b95d4d606 100644 --- a/x-pack/plugins/security_solution/common/api/timeline/get_notes/get_notes_route.gen.ts +++ b/x-pack/plugins/security_solution/common/api/timeline/get_notes/get_notes_route.gen.ts @@ -16,17 +16,28 @@ import { z } from '@kbn/zod'; +import { Note } from '../model/components.gen'; + export type DocumentIds = z.infer; export const DocumentIds = z.union([z.array(z.string()), z.string()]); +export type GetNotesResult = z.infer; +export const GetNotesResult = z.object({ + totalCount: z.number(), + notes: z.array(Note), +}); + export type GetNotesRequestQuery = z.infer; export const GetNotesRequestQuery = z.object({ - documentIds: DocumentIds, - page: z.coerce.number().optional(), - perPage: z.coerce.number().optional(), + documentIds: DocumentIds.optional(), + page: z.string().nullable().optional(), + perPage: z.string().nullable().optional(), search: z.string().nullable().optional(), sortField: z.string().nullable().optional(), sortOrder: z.string().nullable().optional(), filter: z.string().nullable().optional(), }); export type GetNotesRequestQueryInput = z.input; + +export type GetNotesResponse = z.infer; +export const GetNotesResponse = z.union([GetNotesResult, z.object({})]); diff --git a/x-pack/plugins/security_solution/common/api/timeline/get_notes/get_notes_route.schema.yaml b/x-pack/plugins/security_solution/common/api/timeline/get_notes/get_notes_route.schema.yaml index 19b5d2074d18e..5942fd76c5d51 100644 --- a/x-pack/plugins/security_solution/common/api/timeline/get_notes/get_notes_route.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/timeline/get_notes/get_notes_route.schema.yaml @@ -22,18 +22,17 @@ paths: parameters: - name: documentIds in: query - required: true schema: $ref: '#/components/schemas/DocumentIds' - name: page in: query schema: - type: number + type: string nullable: true - name: perPage in: query schema: - type: number + type: string nullable: true - name: search in: query @@ -58,6 +57,12 @@ paths: responses: '200': description: Indicates the requested notes were returned. + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/GetNotesResult' + - type: object components: schemas: @@ -67,3 +72,13 @@ components: items: type: string - type: string + GetNotesResult: + type: object + required: [totalCount, notes] + properties: + totalCount: + type: number + notes: + type: array + items: + $ref: '../model/components.schema.yaml#/components/schemas/Note' diff --git a/x-pack/plugins/security_solution/common/api/timeline/get_notes/get_notes_route.ts b/x-pack/plugins/security_solution/common/api/timeline/get_notes/get_notes_route.ts deleted file mode 100644 index 219632fc522e9..0000000000000 --- a/x-pack/plugins/security_solution/common/api/timeline/get_notes/get_notes_route.ts +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import * as runtimeTypes from 'io-ts'; -import { unionWithNullType } from '../../../utility_types'; - -export const getNotesSchema = runtimeTypes.partial({ - documentIds: runtimeTypes.union([runtimeTypes.array(runtimeTypes.string), runtimeTypes.string]), - page: unionWithNullType(runtimeTypes.string), - perPage: unionWithNullType(runtimeTypes.string), - search: unionWithNullType(runtimeTypes.string), - sortField: unionWithNullType(runtimeTypes.string), - sortOrder: unionWithNullType(runtimeTypes.string), - filter: unionWithNullType(runtimeTypes.string), -}); diff --git a/x-pack/plugins/security_solution/common/api/timeline/import_timelines/import_timelines_route.ts b/x-pack/plugins/security_solution/common/api/timeline/import_timelines/import_timelines_route.ts index ecd40bab9476b..2ad6f3f8c7333 100644 --- a/x-pack/plugins/security_solution/common/api/timeline/import_timelines/import_timelines_route.ts +++ b/x-pack/plugins/security_solution/common/api/timeline/import_timelines/import_timelines_route.ts @@ -10,7 +10,7 @@ import * as rt from 'io-ts'; import { BareNoteSchema, SavedTimelineRuntimeType } from '../model/api'; import { unionWithNullType } from '../../../utility_types'; -import { pinnedEventIds } from '../pinned_events/pinned_events_route'; +const pinnedEventIds = unionWithNullType(rt.array(rt.string)); export const eventNotes = unionWithNullType(rt.array(BareNoteSchema)); export const globalNotes = unionWithNullType(rt.array(BareNoteSchema)); diff --git a/x-pack/plugins/security_solution/common/api/timeline/index.ts b/x-pack/plugins/security_solution/common/api/timeline/index.ts index c2901b96417db..806c0c8539d97 100644 --- a/x-pack/plugins/security_solution/common/api/timeline/index.ts +++ b/x-pack/plugins/security_solution/common/api/timeline/index.ts @@ -6,19 +6,14 @@ */ export * from './model/api'; -export * from './clean_draft_timelines/clean_draft_timelines_route'; +export * from './routes'; + export * from './get_draft_timelines/get_draft_timelines_route'; export * from './create_timelines/create_timelines_route'; -export * from './delete_note/delete_note_route'; -export * from './delete_timelines/delete_timelines_route'; -export * from './export_timelines/export_timelines_route'; export * from './get_timeline/get_timeline_route'; export * from './get_timelines/get_timelines_route'; export * from './import_timelines/import_timelines_route'; export * from './patch_timelines/patch_timelines_schema'; -export * from './persist_favorite/persist_favorite_route'; -export * from './persist_note/persist_note_route'; export * from './pinned_events/pinned_events_route'; export * from './install_prepackaged_timelines/install_prepackaged_timelines'; export * from './copy_timeline/copy_timeline_route'; -export * from './get_notes/get_notes_route'; diff --git a/x-pack/plugins/security_solution/common/api/timeline/model/api.ts b/x-pack/plugins/security_solution/common/api/timeline/model/api.ts index 1e40484505d1b..ff6707b700626 100644 --- a/x-pack/plugins/security_solution/common/api/timeline/model/api.ts +++ b/x-pack/plugins/security_solution/common/api/timeline/model/api.ts @@ -12,12 +12,17 @@ import { stringEnum, unionWithNullType } from '../../../utility_types'; import type { Maybe } from '../../../search_strategy'; import { Direction } from '../../../search_strategy'; -import type { PinnedEvent } from '../pinned_events/pinned_events_route'; import { PinnedEventRuntimeType } from '../pinned_events/pinned_events_route'; import { ErrorSchema } from './error_schema'; import type { DataProviderType } from './components.gen'; import { + BareNote, + BarePinnedEvent, DataProviderTypeEnum, + FavoriteTimelineResponse, + type FavoriteTimelineResult, + type Note, + PinnedEvent, RowRendererId, RowRendererIdEnum, SortFieldTimeline, @@ -31,8 +36,13 @@ import { } from './components.gen'; export { + BareNote, + BarePinnedEvent, DataProviderType, DataProviderTypeEnum, + FavoriteTimelineResponse, + Note, + PinnedEvent, RowRendererId, RowRendererIdEnum, SortFieldTimeline, @@ -45,6 +55,8 @@ export { TimelineTypeEnum, }; +export type BarePinnedEventWithoutExternalRefs = Omit; + /** * Outcome is a property of the saved object resolve api * will tell us info about the rule after 8.0 migrations @@ -83,24 +95,12 @@ export const BareNoteSchema = runtimeTypes.intersection([ }), ]); -export type BareNote = runtimeTypes.TypeOf; - /** * This type represents a note type stored in a saved object that does not include any fields that reference * other saved objects. */ export type BareNoteWithoutExternalRefs = Omit; -export const BareNoteWithoutExternalRefsSchema = runtimeTypes.partial({ - timelineId: unionWithNullType(runtimeTypes.string), - eventId: unionWithNullType(runtimeTypes.string), - note: unionWithNullType(runtimeTypes.string), - created: unionWithNullType(runtimeTypes.number), - createdBy: unionWithNullType(runtimeTypes.string), - updated: unionWithNullType(runtimeTypes.number), - updatedBy: unionWithNullType(runtimeTypes.string), -}); - export const NoteRuntimeType = runtimeTypes.intersection([ BareNoteSchema, runtimeTypes.type({ @@ -109,16 +109,6 @@ export const NoteRuntimeType = runtimeTypes.intersection([ }), ]); -export type Note = runtimeTypes.TypeOf; - -export interface ResponseNote { - code?: Maybe; - - message?: Maybe; - - note: Note; -} - /* * ColumnHeader Types */ @@ -489,27 +479,6 @@ export const importTimelineResultSchema = runtimeTypes.exact( export type ImportTimelineResultSchema = runtimeTypes.TypeOf; -const favoriteTimelineResult = runtimeTypes.partial({ - fullName: unionWithNullType(runtimeTypes.string), - userName: unionWithNullType(runtimeTypes.string), - favoriteDate: unionWithNullType(runtimeTypes.number), -}); - -export type FavoriteTimelineResult = runtimeTypes.TypeOf; - -export const responseFavoriteTimeline = runtimeTypes.partial({ - savedObjectId: runtimeTypes.string, - version: runtimeTypes.string, - code: unionWithNullType(runtimeTypes.number), - message: unionWithNullType(runtimeTypes.string), - templateTimelineId: unionWithNullType(runtimeTypes.string), - templateTimelineVersion: unionWithNullType(runtimeTypes.number), - timelineType: unionWithNullType(TimelineTypeLiteralRt), - favorite: unionWithNullType(runtimeTypes.array(favoriteTimelineResult)), -}); - -export type ResponseFavoriteTimeline = runtimeTypes.TypeOf; - export const pageInfoTimeline = runtimeTypes.type({ pageIndex: runtimeTypes.number, pageSize: runtimeTypes.number, diff --git a/x-pack/plugins/security_solution/common/api/timeline/model/components.gen.ts b/x-pack/plugins/security_solution/common/api/timeline/model/components.gen.ts index 392699b711ecf..990b19d6f3bab 100644 --- a/x-pack/plugins/security_solution/common/api/timeline/model/components.gen.ts +++ b/x-pack/plugins/security_solution/common/api/timeline/model/components.gen.ts @@ -217,7 +217,7 @@ export type BareNote = z.infer; export const BareNote = z.object({ eventId: z.string().nullable().optional(), note: z.string().nullable().optional(), - timelineId: z.string().nullable(), + timelineId: z.string(), created: z.number().nullable().optional(), createdBy: z.string().nullable().optional(), updated: z.number().nullable().optional(), @@ -227,23 +227,29 @@ export const BareNote = z.object({ export type Note = z.infer; export const Note = BareNote.merge( z.object({ - noteId: z.string().optional(), - version: z.string().optional(), + noteId: z.string(), + version: z.string(), }) ); -export type PinnedEvent = z.infer; -export const PinnedEvent = z.object({ - pinnedEventId: z.string(), +export type BarePinnedEvent = z.infer; +export const BarePinnedEvent = z.object({ eventId: z.string(), timelineId: z.string(), created: z.number().nullable().optional(), createdBy: z.string().nullable().optional(), updated: z.number().nullable().optional(), updatedBy: z.string().nullable().optional(), - version: z.string(), }); +export type PinnedEvent = z.infer; +export const PinnedEvent = BarePinnedEvent.merge( + z.object({ + pinnedEventId: z.string(), + version: z.string(), + }) +); + export type TimelineResponse = z.infer; export const TimelineResponse = SavedTimeline.merge( z.object({ @@ -269,6 +275,17 @@ export const FavoriteTimelineResponse = z.object({ favorite: z.array(FavoriteTimelineResult).optional(), }); +export type BareNoteWithoutExternalRefs = z.infer; +export const BareNoteWithoutExternalRefs = z.object({ + eventId: z.string().nullable().optional(), + note: z.string().nullable().optional(), + timelineId: z.string().nullable().optional(), + created: z.number().nullable().optional(), + createdBy: z.string().nullable().optional(), + updated: z.number().nullable().optional(), + updatedBy: z.string().nullable().optional(), +}); + export type GlobalNote = z.infer; export const GlobalNote = z.object({ noteId: z.string().optional(), diff --git a/x-pack/plugins/security_solution/common/api/timeline/model/components.schema.yaml b/x-pack/plugins/security_solution/common/api/timeline/model/components.schema.yaml index d5d4af4cb1e24..c8ba2e6019f16 100644 --- a/x-pack/plugins/security_solution/common/api/timeline/model/components.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/timeline/model/components.schema.yaml @@ -305,6 +305,30 @@ components: nullable: true queryMatch: $ref: '#/components/schemas/QueryMatchResult' + BareNoteWithoutExternalRefs: + type: object + properties: + eventId: + type: string + nullable: true + note: + type: string + nullable: true + timelineId: + type: string + nullable: true + created: + type: number + nullable: true + createdBy: + type: string + nullable: true + updated: + type: number + nullable: true + updatedBy: + type: string + nullable: true BareNote: type: object required: [timelineId] @@ -317,7 +341,6 @@ components: nullable: true timelineId: type: string - nullable: true created: type: number nullable: true @@ -334,6 +357,7 @@ components: allOf: - $ref: '#/components/schemas/BareNote' - type: object + required: [noteId, version] properties: noteId: type: string @@ -451,12 +475,10 @@ components: serializedQuery: type: string nullable: true - PinnedEvent: + BarePinnedEvent: type: object - required: [eventId, pinnedEventId, timelineId, version] + required: [eventId, timelineId] properties: - pinnedEventId: - type: string eventId: type: string timelineId: @@ -473,8 +495,16 @@ components: updatedBy: type: string nullable: true - version: - type: string + PinnedEvent: + allOf: + - $ref: '#/components/schemas/BarePinnedEvent' + - type: object + required: [pinnedEventId, version] + properties: + pinnedEventId: + type: string + version: + type: string Sort: oneOf: - $ref: '#/components/schemas/SortObject' diff --git a/x-pack/plugins/security_solution/common/api/timeline/persist_favorite/persist_favorite_route.ts b/x-pack/plugins/security_solution/common/api/timeline/persist_favorite/persist_favorite_route.ts deleted file mode 100644 index 0f4adff41c910..0000000000000 --- a/x-pack/plugins/security_solution/common/api/timeline/persist_favorite/persist_favorite_route.ts +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import * as rt from 'io-ts'; - -import { TimelineTypeLiteralRt } from '../model/api'; -import { unionWithNullType } from '../../../utility_types'; - -export const persistFavoriteSchema = rt.type({ - timelineId: unionWithNullType(rt.string), - templateTimelineId: unionWithNullType(rt.string), - templateTimelineVersion: unionWithNullType(rt.number), - timelineType: unionWithNullType(TimelineTypeLiteralRt), -}); diff --git a/x-pack/plugins/security_solution/common/api/timeline/persist_note/persist_note_route.gen.ts b/x-pack/plugins/security_solution/common/api/timeline/persist_note/persist_note_route.gen.ts index 002c8df84e86a..36def713d4994 100644 --- a/x-pack/plugins/security_solution/common/api/timeline/persist_note/persist_note_route.gen.ts +++ b/x-pack/plugins/security_solution/common/api/timeline/persist_note/persist_note_route.gen.ts @@ -18,6 +18,13 @@ import { z } from '@kbn/zod'; import { BareNote, Note } from '../model/components.gen'; +export type ResponseNote = z.infer; +export const ResponseNote = z.object({ + code: z.number(), + message: z.string(), + note: Note, +}); + export type PersistNoteRouteRequestBody = z.infer; export const PersistNoteRouteRequestBody = z.object({ note: BareNote, @@ -33,10 +40,6 @@ export type PersistNoteRouteRequestBodyInput = z.input; export const PersistNoteRouteResponse = z.object({ data: z.object({ - persistNote: z.object({ - code: z.number(), - message: z.string(), - note: Note, - }), + persistNote: ResponseNote, }), }); diff --git a/x-pack/plugins/security_solution/common/api/timeline/persist_note/persist_note_route.schema.yaml b/x-pack/plugins/security_solution/common/api/timeline/persist_note/persist_note_route.schema.yaml index 41ae12c974d6f..4ca14d2b15b13 100644 --- a/x-pack/plugins/security_solution/common/api/timeline/persist_note/persist_note_route.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/timeline/persist_note/persist_note_route.schema.yaml @@ -65,12 +65,16 @@ paths: required: [persistNote] properties: persistNote: - type: object - required: [code, message, note] - properties: - code: - type: number - message: - type: string - note: - $ref: '../model/components.schema.yaml#/components/schemas/Note' + $ref: '#/components/schemas/ResponseNote' +components: + schemas: + ResponseNote: + type: object + required: [code, message, note] + properties: + code: + type: number + message: + type: string + note: + $ref: '../model/components.schema.yaml#/components/schemas/Note' diff --git a/x-pack/plugins/security_solution/common/api/timeline/persist_note/persist_note_route.ts b/x-pack/plugins/security_solution/common/api/timeline/persist_note/persist_note_route.ts deleted file mode 100644 index e6f8b9cc94fd3..0000000000000 --- a/x-pack/plugins/security_solution/common/api/timeline/persist_note/persist_note_route.ts +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import * as runtimeTypes from 'io-ts'; -import { unionWithNullType } from '../../../utility_types'; -import { BareNoteSchema, BareNoteWithoutExternalRefsSchema } from '../model/api'; - -export const persistNoteWithRefSchema = runtimeTypes.intersection([ - runtimeTypes.type({ - note: BareNoteSchema, - }), - runtimeTypes.partial({ - overrideOwner: unionWithNullType(runtimeTypes.boolean), - noteId: unionWithNullType(runtimeTypes.string), - version: unionWithNullType(runtimeTypes.string), - }), -]); - -export const persistNoteWithoutRefSchema = runtimeTypes.intersection([ - runtimeTypes.type({ - note: BareNoteWithoutExternalRefsSchema, - }), - runtimeTypes.partial({ - overrideOwner: unionWithNullType(runtimeTypes.boolean), - noteId: unionWithNullType(runtimeTypes.string), - version: unionWithNullType(runtimeTypes.string), - eventIngested: unionWithNullType(runtimeTypes.string), - eventTimestamp: unionWithNullType(runtimeTypes.string), - eventDataView: unionWithNullType(runtimeTypes.string), - }), -]); - -export const persistNoteSchema = runtimeTypes.union([ - persistNoteWithRefSchema, - persistNoteWithoutRefSchema, -]); diff --git a/x-pack/plugins/security_solution/common/api/timeline/pinned_events/pinned_events_route.gen.ts b/x-pack/plugins/security_solution/common/api/timeline/pinned_events/pinned_events_route.gen.ts index 905e2740d32f2..6fd628e5a258e 100644 --- a/x-pack/plugins/security_solution/common/api/timeline/pinned_events/pinned_events_route.gen.ts +++ b/x-pack/plugins/security_solution/common/api/timeline/pinned_events/pinned_events_route.gen.ts @@ -18,6 +18,18 @@ import { z } from '@kbn/zod'; import { PinnedEvent } from '../model/components.gen'; +export type PinnedEventBaseResponseBody = z.infer; +export const PinnedEventBaseResponseBody = z.object({ + code: z.number(), + message: z.string().optional(), +}); + +export type PersistPinnedEventResponse = z.infer; +export const PersistPinnedEventResponse = z.union([ + PinnedEvent.merge(PinnedEventBaseResponseBody), + z.object({}).nullable(), +]); + export type PersistPinnedEventRouteRequestBody = z.infer; export const PersistPinnedEventRouteRequestBody = z.object({ eventId: z.string(), @@ -31,11 +43,6 @@ export type PersistPinnedEventRouteRequestBodyInput = z.input< export type PersistPinnedEventRouteResponse = z.infer; export const PersistPinnedEventRouteResponse = z.object({ data: z.object({ - persistPinnedEventOnTimeline: PinnedEvent.merge( - z.object({ - code: z.number().optional(), - message: z.string().optional(), - }) - ), + persistPinnedEventOnTimeline: PersistPinnedEventResponse, }), }); diff --git a/x-pack/plugins/security_solution/common/api/timeline/pinned_events/pinned_events_route.schema.yaml b/x-pack/plugins/security_solution/common/api/timeline/pinned_events/pinned_events_route.schema.yaml index de6ff200257c4..4ef83ebe04183 100644 --- a/x-pack/plugins/security_solution/common/api/timeline/pinned_events/pinned_events_route.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/timeline/pinned_events/pinned_events_route.schema.yaml @@ -52,11 +52,22 @@ paths: required: [persistPinnedEventOnTimeline] properties: persistPinnedEventOnTimeline: - allOf: - - $ref: '../model/components.schema.yaml#/components/schemas/PinnedEvent' - - type: object - properties: - code: - type: number - message: - type: string + $ref: '#/components/schemas/PersistPinnedEventResponse' + +components: + schemas: + PersistPinnedEventResponse: + oneOf: + - allOf: + - $ref: '../model/components.schema.yaml#/components/schemas/PinnedEvent' + - $ref: '#/components/schemas/PinnedEventBaseResponseBody' + - type: object + nullable: true + PinnedEventBaseResponseBody: + type: object + required: [code] + properties: + code: + type: number + message: + type: string diff --git a/x-pack/plugins/security_solution/common/api/timeline/pinned_events/pinned_events_route.ts b/x-pack/plugins/security_solution/common/api/timeline/pinned_events/pinned_events_route.ts index 369cc6cc57089..31c3233e9b8ca 100644 --- a/x-pack/plugins/security_solution/common/api/timeline/pinned_events/pinned_events_route.ts +++ b/x-pack/plugins/security_solution/common/api/timeline/pinned_events/pinned_events_route.ts @@ -5,26 +5,14 @@ * 2.0. */ -/* eslint-disable @typescript-eslint/no-empty-interface */ - import * as runtimeTypes from 'io-ts'; import { unionWithNullType } from '../../../utility_types'; -export const pinnedEventIds = unionWithNullType(runtimeTypes.array(runtimeTypes.string)); -export const persistPinnedEventSchema = runtimeTypes.intersection([ - runtimeTypes.type({ - eventId: runtimeTypes.string, - timelineId: runtimeTypes.string, - }), - runtimeTypes.partial({ - pinnedEventId: unionWithNullType(runtimeTypes.string), - }), -]); - /* - * Note Types + * Pinned Event Types + * TODO: remove these when the timeline types are moved to zod */ -export const BarePinnedEventType = runtimeTypes.intersection([ +const BarePinnedEventType = runtimeTypes.intersection([ runtimeTypes.type({ timelineId: runtimeTypes.string, eventId: runtimeTypes.string, @@ -37,14 +25,6 @@ export const BarePinnedEventType = runtimeTypes.intersection([ }), ]); -export interface BarePinnedEvent extends runtimeTypes.TypeOf {} - -/** - * This type represents a pinned event type stored in a saved object that does not include any fields that reference - * other saved objects. - */ -export type BarePinnedEventWithoutExternalRefs = Omit; - export const PinnedEventRuntimeType = runtimeTypes.intersection([ runtimeTypes.type({ pinnedEventId: runtimeTypes.string, @@ -52,7 +32,3 @@ export const PinnedEventRuntimeType = runtimeTypes.intersection([ }), BarePinnedEventType, ]); - -export interface PinnedEvent extends runtimeTypes.TypeOf {} - -export type PinnedEventResponse = PinnedEvent & { code: number; message?: string }; diff --git a/x-pack/plugins/security_solution/common/api/timeline/routes.ts b/x-pack/plugins/security_solution/common/api/timeline/routes.ts new file mode 100644 index 0000000000000..9d3aec839a5c1 --- /dev/null +++ b/x-pack/plugins/security_solution/common/api/timeline/routes.ts @@ -0,0 +1,42 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export { + DeleteTimelinesRequestBody, + DeleteTimelinesResponse, +} from './delete_timelines/delete_timelines_route.gen'; + +export { + PersistNoteRouteRequestBody, + PersistNoteRouteResponse, + ResponseNote, +} from './persist_note/persist_note_route.gen'; +export { DeleteNoteRequestBody, DeleteNoteResponse } from './delete_note/delete_note_route.gen'; + +export { CleanDraftTimelinesRequestBody } from './clean_draft_timelines/clean_draft_timelines_route.gen'; + +export { + ExportTimelinesRequestQuery, + ExportTimelinesRequestBody, +} from './export_timelines/export_timelines_route.gen'; + +export { + PersistFavoriteRouteResponse, + PersistFavoriteRouteRequestBody, +} from './persist_favorite/persist_favorite_route.gen'; + +export { + PersistPinnedEventRouteRequestBody, + PersistPinnedEventResponse, + PersistPinnedEventRouteResponse, +} from './pinned_events/pinned_events_route.gen'; + +export { + GetNotesRequestQuery, + GetNotesResponse, + GetNotesResult, +} from './get_notes/get_notes_route.gen'; diff --git a/x-pack/plugins/security_solution/common/entity_analytics/risk_engine/constants.ts b/x-pack/plugins/security_solution/common/entity_analytics/risk_engine/constants.ts index 08ffb774c2aac..0eda694aed24b 100644 --- a/x-pack/plugins/security_solution/common/entity_analytics/risk_engine/constants.ts +++ b/x-pack/plugins/security_solution/common/entity_analytics/risk_engine/constants.ts @@ -16,8 +16,7 @@ export const RISK_ENGINE_SETTINGS_URL = `${RISK_ENGINE_URL}/settings` as const; // Public Risk Score routes export const PUBLIC_RISK_ENGINE_URL = `${PUBLIC_RISK_SCORE_URL}/engine` as const; export const RISK_ENGINE_SCHEDULE_NOW_URL = `${RISK_ENGINE_URL}/schedule_now` as const; - -export const MAX_SPACES_COUNT = 1; +export const RISK_ENGINE_CLEANUP_URL = `${PUBLIC_RISK_ENGINE_URL}/dangerously_delete_data` as const; type ClusterPrivilege = 'manage_index_templates' | 'manage_transform'; export const RISK_ENGINE_REQUIRED_ES_CLUSTER_PRIVILEGES = [ diff --git a/x-pack/plugins/security_solution/docs/openapi/ess/security_solution_detections_api_2023_10_31.bundled.schema.yaml b/x-pack/plugins/security_solution/docs/openapi/ess/security_solution_detections_api_2023_10_31.bundled.schema.yaml index b9c1ac658fd90..73a8554ceaac0 100644 --- a/x-pack/plugins/security_solution/docs/openapi/ess/security_solution_detections_api_2023_10_31.bundled.schema.yaml +++ b/x-pack/plugins/security_solution/docs/openapi/ess/security_solution_detections_api_2023_10_31.bundled.schema.yaml @@ -4,7 +4,7 @@ info: You can create rules that automatically turn events and external alerts sent to Elastic Security into detection alerts. These alerts are displayed on the Detections page. - title: Security Solution Detections API (Elastic Cloud and self-hosted) + title: Security Detections API (Elastic Cloud and self-hosted) version: '2023-10-31' servers: - url: http://{kibana_host}:{port} @@ -55,7 +55,7 @@ paths: description: Internal server error response summary: Delete an alerts index tags: - - Security Solution Detections API + - Security Detections API - Alert index API get: operationId: ReadAlertsIndex @@ -101,7 +101,7 @@ paths: description: Internal server error response summary: Reads the alert index name if it exists tags: - - Security Solution Detections API + - Security Detections API - Alert index API post: operationId: CreateAlertsIndex @@ -143,7 +143,7 @@ paths: description: Internal server error response summary: Create an alerts index tags: - - Security Solution Detections API + - Security Detections API - Alert index API /api/detection_engine/privileges: get: @@ -186,7 +186,7 @@ paths: description: Internal server error response summary: Returns user privileges for the Kibana space tags: - - Security Solution Detections API + - Security Detections API - Privileges API /api/detection_engine/rules: delete: @@ -214,7 +214,7 @@ paths: description: Indicates a successful call. summary: Delete a detection rule tags: - - Security Solution Detections API + - Security Detections API - Rules API get: description: Retrieve a detection rule using the `rule_id` or `id` field. @@ -241,7 +241,7 @@ paths: description: Indicates a successful call. summary: Retrieve a detection rule tags: - - Security Solution Detections API + - Security Detections API - Rules API patch: description: >- @@ -263,7 +263,7 @@ paths: description: Indicates a successful call. summary: Patch a detection rule tags: - - Security Solution Detections API + - Security Detections API - Rules API post: description: Create a new detection rule. @@ -283,7 +283,7 @@ paths: description: Indicates a successful call. summary: Create a detection rule tags: - - Security Solution Detections API + - Security Detections API - Rules API put: description: > @@ -309,7 +309,7 @@ paths: description: Indicates a successful call. summary: Update a detection rule tags: - - Security Solution Detections API + - Security Detections API - Rules API /api/detection_engine/rules/_bulk_action: post: @@ -348,7 +348,7 @@ paths: description: OK summary: Apply a bulk action to detection rules tags: - - Security Solution Detections API + - Security Detections API - Bulk API /api/detection_engine/rules/_bulk_create: post: @@ -373,7 +373,7 @@ paths: description: Indicates a successful call. summary: Create multiple detection rules tags: - - Security Solution Detections API + - Security Detections API - Bulk API /api/detection_engine/rules/_bulk_delete: delete: @@ -425,7 +425,7 @@ paths: description: Internal server error response summary: Delete multiple detection rules tags: - - Security Solution Detections API + - Security Detections API - Bulk API post: deprecated: true @@ -476,7 +476,7 @@ paths: description: Internal server error response summary: Delete multiple detection rules tags: - - Security Solution Detections API + - Security Detections API - Bulk API /api/detection_engine/rules/_bulk_update: patch: @@ -503,7 +503,7 @@ paths: description: Indicates a successful call. summary: Patch multiple detection rules tags: - - Security Solution Detections API + - Security Detections API - Bulk API put: deprecated: true @@ -535,7 +535,7 @@ paths: description: Indicates a successful call. summary: Update multiple detection rules tags: - - Security Solution Detections API + - Security Detections API - Bulk API /api/detection_engine/rules/_export: post: @@ -599,7 +599,7 @@ paths: description: Indicates a successful call. summary: Export detection rules tags: - - Security Solution Detections API + - Security Detections API - Import/Export API /api/detection_engine/rules/_find: get: @@ -674,7 +674,7 @@ paths: description: Successful response summary: List all detection rules tags: - - Security Solution Detections API + - Security Detections API - Rules API /api/detection_engine/rules/_import: post: @@ -789,7 +789,7 @@ paths: description: Indicates a successful call. summary: Import detection rules tags: - - Security Solution Detections API + - Security Detections API - Import/Export API /api/detection_engine/rules/prepackaged: put: @@ -827,7 +827,7 @@ paths: description: Indicates a successful call summary: Install prebuilt detection rules and Timelines tags: - - Security Solution Detections API + - Security Detections API - Prebuilt Rules API /api/detection_engine/rules/prepackaged/_status: get: @@ -886,7 +886,7 @@ paths: description: Indicates a successful call summary: Retrieve the status of prebuilt detection rules and Timelines tags: - - Security Solution Detections API + - Security Detections API - Prebuilt Rules API /api/detection_engine/rules/preview: post: @@ -975,7 +975,7 @@ paths: description: Internal server error response summary: Preview rule alerts generated on specified time range tags: - - Security Solution Detections API + - Security Detections API - Rule preview API /api/detection_engine/signals/assignees: post: @@ -1007,7 +1007,7 @@ paths: description: Invalid request. summary: Assign and unassign users from detection alerts tags: - - Security Solution Detections API + - Security Detections API /api/detection_engine/signals/finalize_migration: post: description: > @@ -1065,7 +1065,7 @@ paths: description: Internal server error response summary: Finalize detection alert migrations tags: - - Security Solution Detections API + - Security Detections API - Alerts migration API /api/detection_engine/signals/migration: delete: @@ -1133,7 +1133,7 @@ paths: description: Internal server error response summary: Clean up detection alert migrations tags: - - Security Solution Detections API + - Security Detections API - Alerts migration API post: description: > @@ -1200,7 +1200,7 @@ paths: description: Internal server error response summary: Initiate a detection alert migration tags: - - Security Solution Detections API + - Security Detections API - Alerts migration API /api/detection_engine/signals/migration_status: post: @@ -1258,7 +1258,7 @@ paths: description: Internal server error response summary: Retrieve the status of detection alert migrations tags: - - Security Solution Detections API + - Security Detections API - Alerts migration API /api/detection_engine/signals/search: post: @@ -1331,7 +1331,7 @@ paths: description: Internal server error response summary: Find and/or aggregate detection alerts tags: - - Security Solution Detections API + - Security Detections API - Alerts API /api/detection_engine/signals/status: post: @@ -1379,7 +1379,7 @@ paths: description: Internal server error response summary: Set a detection alert status tags: - - Security Solution Detections API + - Security Detections API - Alerts API /api/detection_engine/signals/tags: post: @@ -1436,7 +1436,7 @@ paths: description: Internal server error response summary: Add and remove detection alert tags tags: - - Security Solution Detections API + - Security Detections API - Alerts API /api/detection_engine/tags: get: @@ -1451,7 +1451,7 @@ paths: description: Indicates a successful call summary: List all detection rule tags tags: - - Security Solution Detections API + - Security Detections API - Tags API components: schemas: @@ -6999,4 +6999,4 @@ tags: You can create rules that automatically turn events and external alerts sent to Elastic Security into detection alerts. These alerts are displayed on the Detections page. - name: Security Solution Detections API + name: Security Detections API diff --git a/x-pack/plugins/security_solution/docs/openapi/ess/security_solution_endpoint_management_api_2023_10_31.bundled.schema.yaml b/x-pack/plugins/security_solution/docs/openapi/ess/security_solution_endpoint_management_api_2023_10_31.bundled.schema.yaml index 0513864243682..3aa292c02c18c 100644 --- a/x-pack/plugins/security_solution/docs/openapi/ess/security_solution_endpoint_management_api_2023_10_31.bundled.schema.yaml +++ b/x-pack/plugins/security_solution/docs/openapi/ess/security_solution_endpoint_management_api_2023_10_31.bundled.schema.yaml @@ -1,7 +1,7 @@ openapi: 3.0.3 info: description: Interact with and manage endpoints running the Elastic Defend integration. - title: Security Solution Endpoint Management API (Elastic Cloud and self-hosted) + title: Security Endpoint Management API (Elastic Cloud and self-hosted) version: '2023-10-31' servers: - url: http://{kibana_host}:{port} @@ -30,7 +30,7 @@ paths: description: OK summary: Get response actions tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action_log/{agent_id}: get: deprecated: true @@ -56,7 +56,7 @@ paths: description: OK summary: Get an action request log tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action_status: get: description: Get the status of response actions for the specified agent IDs. @@ -79,7 +79,7 @@ paths: description: OK summary: Get response actions status tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action/{action_id}: get: description: Get the details of a response action using the action ID. @@ -99,7 +99,7 @@ paths: description: OK summary: Get action details tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action/{action_id}/file/{file_id}: get: description: Get information for the specified file using the file ID. @@ -124,7 +124,7 @@ paths: description: OK summary: Get file information tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action/{action_id}/file/{file_id}/download: get: description: Download a file from an endpoint. @@ -149,7 +149,7 @@ paths: description: OK summary: Download a file tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action/execute: post: description: Run a shell command on an endpoint. @@ -169,7 +169,7 @@ paths: description: OK summary: Run a command tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action/get_file: post: description: Get a file from an endpoint. @@ -189,7 +189,7 @@ paths: description: OK summary: Get a file tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action/isolate: post: description: >- @@ -211,7 +211,7 @@ paths: description: OK summary: Isolate an endpoint tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action/kill_process: post: description: Terminate a running process on an endpoint. @@ -231,7 +231,7 @@ paths: description: OK summary: Terminate a process tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action/running_procs: post: description: Get a list of all processes running on an endpoint. @@ -251,7 +251,7 @@ paths: description: OK summary: Get running processes tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action/scan: post: description: Scan a specific file or directory on an endpoint for malware. @@ -271,7 +271,7 @@ paths: description: OK summary: Scan a file or directory tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action/state: get: description: >- @@ -287,7 +287,7 @@ paths: description: OK summary: Get actions state tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action/suspend_process: post: description: Suspend a running process on an endpoint. @@ -307,7 +307,7 @@ paths: description: OK summary: Suspend a process tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action/unisolate: post: description: Release an isolated endpoint, allowing it to rejoin a network. @@ -327,7 +327,7 @@ paths: description: OK summary: Release an isolated endpoint tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action/upload: post: description: Upload a file to an endpoint. @@ -347,7 +347,7 @@ paths: description: OK summary: Upload a file tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/isolate: post: deprecated: true @@ -397,7 +397,7 @@ paths: type: string summary: Isolate an endpoint tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/metadata: get: operationId: GetEndpointMetadataList @@ -416,7 +416,7 @@ paths: description: OK summary: Get a metadata list tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/metadata/{id}: get: operationId: GetEndpointMetadata @@ -435,7 +435,7 @@ paths: description: OK summary: Get metadata tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/metadata/transforms: get: operationId: GetEndpointMetadataTransform @@ -448,7 +448,7 @@ paths: description: OK summary: Get metadata transforms tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/policy_response: get: operationId: GetPolicyResponse @@ -470,7 +470,7 @@ paths: description: OK summary: Get a policy response tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/policy/summaries: get: deprecated: true @@ -496,7 +496,7 @@ paths: description: OK summary: Get an agent policy summary tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/protection_updates_note/{package_policy_id}: get: operationId: GetProtectionUpdatesNote @@ -515,7 +515,7 @@ paths: description: OK summary: Get a protection updates note tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API post: operationId: CreateUpdateProtectionUpdatesNote parameters: @@ -542,7 +542,7 @@ paths: description: OK summary: Create or update a protection updates note tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/suggestions/{suggestion_type}: post: operationId: GetEndpointSuggestions @@ -578,7 +578,7 @@ paths: description: OK summary: Get suggestions tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/unisolate: post: deprecated: true @@ -628,7 +628,7 @@ paths: type: string summary: Release an isolated endpoint tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API components: schemas: ActionLogRequestQuery: @@ -1135,4 +1135,4 @@ security: - BasicAuth: [] tags: - description: Interact with and manage endpoints running the Elastic Defend integration. - name: Security Solution Endpoint Management API + name: Security Endpoint Management API diff --git a/x-pack/plugins/security_solution/docs/openapi/ess/security_solution_entity_analytics_api_1.bundled.schema.yaml b/x-pack/plugins/security_solution/docs/openapi/ess/security_solution_entity_analytics_api_1.bundled.schema.yaml new file mode 100644 index 0000000000000..9d6d57abd382a --- /dev/null +++ b/x-pack/plugins/security_solution/docs/openapi/ess/security_solution_entity_analytics_api_1.bundled.schema.yaml @@ -0,0 +1,88 @@ +openapi: 3.0.3 +info: + description: '' + title: Security Entity Analytics API (Elastic Cloud and self-hosted) + version: '1' +servers: + - url: http://{kibana_host}:{port} + variables: + kibana_host: + default: localhost + port: + default: '5601' +paths: + /api/risk_score/engine/dangerously_delete_data: + delete: + description: >- + Cleaning up the the Risk Engine by removing the indices, mapping and + transforms + operationId: CleanUpRiskEngine + responses: + '200': + content: + application/json: + schema: + type: object + properties: + cleanup_successful: + type: boolean + description: Successful response + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/TaskManagerUnavailableResponse' + description: Task manager is unavailable + default: + content: + application/json: + schema: + $ref: '#/components/schemas/CleanUpRiskEngineErrorResponse' + description: Unexpected error + summary: Cleanup the Risk Engine + tags: + - Security Entity Analytics API +components: + schemas: + CleanUpRiskEngineErrorResponse: + type: object + properties: + cleanup_successful: + example: false + type: boolean + errors: + items: + type: object + properties: + error: + type: string + seq: + type: integer + required: + - seq + - error + type: array + required: + - cleanup_successful + - errors + TaskManagerUnavailableResponse: + description: Task manager is unavailable + type: object + properties: + message: + type: string + status_code: + minimum: 400 + type: integer + required: + - status_code + - message + securitySchemes: + BasicAuth: + scheme: basic + type: http +security: + - BasicAuth: [] +tags: + - description: '' + name: Security Entity Analytics API diff --git a/x-pack/plugins/security_solution/docs/openapi/ess/security_solution_entity_analytics_api_2023_10_31.bundled.schema.yaml b/x-pack/plugins/security_solution/docs/openapi/ess/security_solution_entity_analytics_api_2023_10_31.bundled.schema.yaml index c72b38d04c6cd..372793a1ffb0a 100644 --- a/x-pack/plugins/security_solution/docs/openapi/ess/security_solution_entity_analytics_api_2023_10_31.bundled.schema.yaml +++ b/x-pack/plugins/security_solution/docs/openapi/ess/security_solution_entity_analytics_api_2023_10_31.bundled.schema.yaml @@ -1,7 +1,7 @@ openapi: 3.0.3 info: description: '' - title: Security Solution Entity Analytics API (Elastic Cloud and self-hosted) + title: Security Entity Analytics API (Elastic Cloud and self-hosted) version: '2023-10-31' servers: - url: http://{kibana_host}:{port} @@ -59,7 +59,7 @@ paths: description: Invalid request summary: Delete an asset criticality record tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API get: description: Get the asset criticality record for a specific entity. operationId: GetAssetCriticalityRecord @@ -90,7 +90,7 @@ paths: description: Criticality record not found summary: Get an asset criticality record tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API post: description: > Create or update an asset criticality record for a specific entity. @@ -127,7 +127,7 @@ paths: description: Invalid request summary: Upsert an asset criticality record tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API /api/asset_criticality/bulk: post: description: > @@ -190,7 +190,7 @@ paths: description: File too large summary: Bulk upsert asset criticality records tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API /api/asset_criticality/list: get: description: List asset criticality records, paging, sorting and filtering as needed. @@ -266,10 +266,10 @@ paths: description: Bulk upload successful summary: List asset criticality records tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API /api/entity_store/engines: get: - operationId: ListEntityStoreEngines + operationId: ListEntityEngines responses: '200': content: @@ -284,14 +284,14 @@ paths: $ref: '#/components/schemas/EngineDescriptor' type: array description: Successful response - summary: List the Entity Store engines + summary: List the Entity Engines tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API /api/entity_store/engines/{entityType}: delete: - operationId: DeleteEntityStore + operationId: DeleteEntityEngine parameters: - - description: The entity type of the store (either 'user' or 'host'). + - description: The entity type of the engine (either 'user' or 'host'). in: path name: entityType required: true @@ -313,13 +313,13 @@ paths: deleted: type: boolean description: Successful response - summary: Delete the Entity Store engine + summary: Delete the Entity Engine tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API get: - operationId: GetEntityStoreEngine + operationId: GetEntityEngine parameters: - - description: The entity type of the store (either 'user' or 'host'). + - description: The entity type of the engine (either 'user' or 'host'). in: path name: entityType required: true @@ -332,14 +332,14 @@ paths: schema: $ref: '#/components/schemas/EngineDescriptor' description: Successful response - summary: Get the Entity Store engine + summary: Get an Entity Engine tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API /api/entity_store/engines/{entityType}/init: post: - operationId: InitEntityStore + operationId: InitEntityEngine parameters: - - description: The entity type of the store (either 'user' or 'host'). + - description: The entity type of the engine (either 'user' or 'host'). in: path name: entityType required: true @@ -364,14 +364,14 @@ paths: schema: $ref: '#/components/schemas/EngineDescriptor' description: Successful response - summary: Initialize the Entity Store + summary: Initialize an Entity Engine tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API /api/entity_store/engines/{entityType}/start: post: - operationId: StartEntityStore + operationId: StartEntityEngine parameters: - - description: The entity type of the store (either 'user' or 'host'). + - description: The entity type of the engine (either 'user' or 'host'). in: path name: entityType required: true @@ -387,14 +387,14 @@ paths: started: type: boolean description: Successful response - summary: Start the Entity Store engine + summary: Start an Entity Engine tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API /api/entity_store/engines/{entityType}/stats: post: - operationId: GetEntityStoreStats + operationId: GetEntityEngineStats parameters: - - description: The entity type of the store (either 'user' or 'host'). + - description: The entity type of the engine (either 'user' or 'host'). in: path name: entityType required: true @@ -422,14 +422,14 @@ paths: type: $ref: '#/components/schemas/EntityType' description: Successful response - summary: Get the Entity Store engine stats + summary: Get Entity Engine stats tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API /api/entity_store/engines/{entityType}/stop: post: - operationId: StopEntityStore + operationId: StopEntityEngine parameters: - - description: The entity type of the store (either 'user' or 'host'). + - description: The entity type of the engine (either 'user' or 'host'). in: path name: entityType required: true @@ -445,9 +445,9 @@ paths: stopped: type: boolean description: Successful response - summary: Stop the Entity Store engine + summary: Stop an Entity Engine tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API /api/entity_store/entities/list: get: description: List entities records, paging, sorting and filtering as needed. @@ -523,7 +523,7 @@ paths: description: Entities returned successfully summary: List Entity Store Entities tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API /api/risk_score/engine/schedule_now: post: description: >- @@ -555,7 +555,7 @@ paths: description: Unexpected error summary: Run the risk scoring engine tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API components: schemas: AssetCriticalityBulkUploadErrorItem: @@ -851,4 +851,4 @@ security: - BasicAuth: [] tags: - description: '' - name: Security Solution Entity Analytics API + name: Security Entity Analytics API diff --git a/x-pack/plugins/security_solution/docs/openapi/ess/security_solution_timeline_api_2023_10_31.bundled.schema.yaml b/x-pack/plugins/security_solution/docs/openapi/ess/security_solution_timeline_api_2023_10_31.bundled.schema.yaml index 5d55fac18c402..2adc4e7009b1d 100644 --- a/x-pack/plugins/security_solution/docs/openapi/ess/security_solution_timeline_api_2023_10_31.bundled.schema.yaml +++ b/x-pack/plugins/security_solution/docs/openapi/ess/security_solution_timeline_api_2023_10_31.bundled.schema.yaml @@ -3,7 +3,7 @@ info: description: >- You can create Timelines and Timeline templates via the API, as well as import new Timelines from an ndjson file. - title: Security Solution Timeline API (Elastic Cloud and self-hosted) + title: Security Timeline API (Elastic Cloud and self-hosted) version: '2023-10-31' servers: - url: http://{kibana_host}:{port} @@ -29,7 +29,8 @@ paths: type: string required: - noteId - - type: object + - nullable: true + type: object properties: noteIds: items: @@ -52,7 +53,7 @@ paths: description: Indicates the note was successfully deleted. summary: Delete a note tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution get: description: Get all notes for a given document. @@ -60,19 +61,18 @@ paths: parameters: - in: query name: documentIds - required: true schema: $ref: '#/components/schemas/DocumentIds' - in: query name: page schema: nullable: true - type: number + type: string - in: query name: perPage schema: nullable: true - type: number + type: string - in: query name: search schema: @@ -95,10 +95,16 @@ paths: type: string responses: '200': + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/GetNotesResult' + - type: object description: Indicates the requested notes were returned. summary: Get notes tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution patch: description: Add a note to a Timeline or update an existing note. @@ -144,18 +150,7 @@ paths: type: object properties: persistNote: - type: object - properties: - code: - type: number - message: - type: string - note: - $ref: '#/components/schemas/Note' - required: - - code - - message - - note + $ref: '#/components/schemas/ResponseNote' required: - persistNote required: @@ -163,7 +158,7 @@ paths: description: Indicates the note was successfully created. summary: Add or update a note tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution /api/pinned_event: patch: @@ -198,14 +193,7 @@ paths: type: object properties: persistPinnedEventOnTimeline: - allOf: - - $ref: '#/components/schemas/PinnedEvent' - - type: object - properties: - code: - type: number - message: - type: string + $ref: '#/components/schemas/PersistPinnedEventResponse' required: - persistPinnedEventOnTimeline required: @@ -213,7 +201,7 @@ paths: description: Indicates the event was successfully pinned to the Timeline. summary: Pin an event tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution /api/timeline: delete: @@ -259,7 +247,7 @@ paths: description: Indicates the Timeline was successfully deleted. summary: Delete Timelines or Timeline templates tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution get: description: Get the details of an existing saved Timeline or Timeline template. @@ -295,7 +283,7 @@ paths: description: Indicates that the (template) Timeline was found and returned. summary: Get Timeline or Timeline template details tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution patch: description: >- @@ -363,7 +351,7 @@ paths: a draft Timeline. summary: Update a Timeline tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution post: description: Create a new Timeline or Timeline template. @@ -433,7 +421,7 @@ paths: description: Indicates that there was an error in the Timeline creation. summary: Create a Timeline or Timeline template tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution /api/timeline/_draft: get: @@ -500,7 +488,7 @@ paths: draft Timeline with the given `timelineId`. summary: Get draft Timeline or Timeline template details tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution post: description: > @@ -578,7 +566,7 @@ paths: `timelineId`. summary: Create a clean draft Timeline or Timeline template tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution /api/timeline/_export: post: @@ -625,7 +613,7 @@ paths: description: Indicates that the export size limit was exceeded. summary: Export Timelines tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution /api/timeline/_favorite: patch: @@ -688,7 +676,7 @@ paths: the favorite status. summary: Favorite a Timeline or Timeline template tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution /api/timeline/_import: post: @@ -779,7 +767,7 @@ paths: description: Indicates the import of Timelines was unsuccessful. summary: Import Timelines tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution /api/timeline/_prepackaged: post: @@ -838,7 +826,7 @@ paths: unsuccessful. summary: Install prepackaged Timelines tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution /api/timeline/resolve: get: @@ -878,7 +866,7 @@ paths: description: The (template) Timeline was not found summary: Get an existing saved Timeline or Timeline template tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution /api/timelines: get: @@ -982,7 +970,7 @@ paths: description: Bad request. The user supplied invalid data. summary: Get Timelines or Timeline templates tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution components: schemas: @@ -1002,8 +990,28 @@ components: nullable: true type: string timelineId: + type: string + updated: + nullable: true + type: number + updatedBy: + nullable: true + type: string + required: + - timelineId + BarePinnedEvent: + type: object + properties: + created: + nullable: true + type: number + createdBy: nullable: true type: string + eventId: + type: string + timelineId: + type: string updated: nullable: true type: number @@ -1011,6 +1019,7 @@ components: nullable: true type: string required: + - eventId - timelineId ColumnHeaderResult: type: object @@ -1184,6 +1193,18 @@ components: type: string script: type: string + GetNotesResult: + type: object + properties: + notes: + items: + $ref: '#/components/schemas/Note' + type: array + totalCount: + type: number + required: + - totalCount + - notes ImportTimelineResult: type: object properties: @@ -1244,34 +1265,37 @@ components: type: string version: type: string + required: + - noteId + - version + PersistPinnedEventResponse: + oneOf: + - allOf: + - $ref: '#/components/schemas/PinnedEvent' + - $ref: '#/components/schemas/PinnedEventBaseResponseBody' + - nullable: true + type: object PinnedEvent: + allOf: + - $ref: '#/components/schemas/BarePinnedEvent' + - type: object + properties: + pinnedEventId: + type: string + version: + type: string + required: + - pinnedEventId + - version + PinnedEventBaseResponseBody: type: object properties: - created: - nullable: true - type: number - createdBy: - nullable: true - type: string - eventId: - type: string - pinnedEventId: - type: string - timelineId: - type: string - updated: - nullable: true + code: type: number - updatedBy: - nullable: true - type: string - version: + message: type: string required: - - eventId - - pinnedEventId - - timelineId - - version + - code QueryMatchResult: type: object properties: @@ -1316,6 +1340,19 @@ components: type: object readable: type: boolean + ResponseNote: + type: object + properties: + code: + type: number + message: + type: string + note: + $ref: '#/components/schemas/Note' + required: + - code + - message + - note RowRendererId: enum: - alert @@ -1564,4 +1601,4 @@ tags: - description: >- You can create Timelines and Timeline templates via the API, as well as import new Timelines from an ndjson file. - name: Security Solution Timeline API + name: Security Timeline API diff --git a/x-pack/plugins/security_solution/docs/openapi/serverless/security_solution_detections_api_2023_10_31.bundled.schema.yaml b/x-pack/plugins/security_solution/docs/openapi/serverless/security_solution_detections_api_2023_10_31.bundled.schema.yaml index d1de42913c4e0..24a0032201c90 100644 --- a/x-pack/plugins/security_solution/docs/openapi/serverless/security_solution_detections_api_2023_10_31.bundled.schema.yaml +++ b/x-pack/plugins/security_solution/docs/openapi/serverless/security_solution_detections_api_2023_10_31.bundled.schema.yaml @@ -4,7 +4,7 @@ info: You can create rules that automatically turn events and external alerts sent to Elastic Security into detection alerts. These alerts are displayed on the Detections page. - title: Security Solution Detections API (Elastic Cloud Serverless) + title: Security Detections API (Elastic Cloud Serverless) version: '2023-10-31' servers: - url: http://{kibana_host}:{port} @@ -55,7 +55,7 @@ paths: description: Internal server error response summary: Returns user privileges for the Kibana space tags: - - Security Solution Detections API + - Security Detections API - Privileges API /api/detection_engine/rules: delete: @@ -83,7 +83,7 @@ paths: description: Indicates a successful call. summary: Delete a detection rule tags: - - Security Solution Detections API + - Security Detections API - Rules API get: description: Retrieve a detection rule using the `rule_id` or `id` field. @@ -110,7 +110,7 @@ paths: description: Indicates a successful call. summary: Retrieve a detection rule tags: - - Security Solution Detections API + - Security Detections API - Rules API patch: description: >- @@ -132,7 +132,7 @@ paths: description: Indicates a successful call. summary: Patch a detection rule tags: - - Security Solution Detections API + - Security Detections API - Rules API post: description: Create a new detection rule. @@ -152,7 +152,7 @@ paths: description: Indicates a successful call. summary: Create a detection rule tags: - - Security Solution Detections API + - Security Detections API - Rules API put: description: > @@ -178,7 +178,7 @@ paths: description: Indicates a successful call. summary: Update a detection rule tags: - - Security Solution Detections API + - Security Detections API - Rules API /api/detection_engine/rules/_bulk_action: post: @@ -217,7 +217,7 @@ paths: description: OK summary: Apply a bulk action to detection rules tags: - - Security Solution Detections API + - Security Detections API - Bulk API /api/detection_engine/rules/_export: post: @@ -281,7 +281,7 @@ paths: description: Indicates a successful call. summary: Export detection rules tags: - - Security Solution Detections API + - Security Detections API - Import/Export API /api/detection_engine/rules/_find: get: @@ -356,7 +356,7 @@ paths: description: Successful response summary: List all detection rules tags: - - Security Solution Detections API + - Security Detections API - Rules API /api/detection_engine/rules/_import: post: @@ -471,7 +471,7 @@ paths: description: Indicates a successful call. summary: Import detection rules tags: - - Security Solution Detections API + - Security Detections API - Import/Export API /api/detection_engine/rules/preview: post: @@ -560,7 +560,7 @@ paths: description: Internal server error response summary: Preview rule alerts generated on specified time range tags: - - Security Solution Detections API + - Security Detections API - Rule preview API /api/detection_engine/signals/assignees: post: @@ -592,7 +592,7 @@ paths: description: Invalid request. summary: Assign and unassign users from detection alerts tags: - - Security Solution Detections API + - Security Detections API /api/detection_engine/signals/search: post: description: Find and/or aggregate detection alerts that match the given query. @@ -664,7 +664,7 @@ paths: description: Internal server error response summary: Find and/or aggregate detection alerts tags: - - Security Solution Detections API + - Security Detections API - Alerts API /api/detection_engine/signals/status: post: @@ -712,7 +712,7 @@ paths: description: Internal server error response summary: Set a detection alert status tags: - - Security Solution Detections API + - Security Detections API - Alerts API /api/detection_engine/signals/tags: post: @@ -769,7 +769,7 @@ paths: description: Internal server error response summary: Add and remove detection alert tags tags: - - Security Solution Detections API + - Security Detections API - Alerts API /api/detection_engine/tags: get: @@ -784,7 +784,7 @@ paths: description: Indicates a successful call summary: List all detection rule tags tags: - - Security Solution Detections API + - Security Detections API - Tags API components: schemas: @@ -6145,4 +6145,4 @@ tags: You can create rules that automatically turn events and external alerts sent to Elastic Security into detection alerts. These alerts are displayed on the Detections page. - name: Security Solution Detections API + name: Security Detections API diff --git a/x-pack/plugins/security_solution/docs/openapi/serverless/security_solution_endpoint_management_api_2023_10_31.bundled.schema.yaml b/x-pack/plugins/security_solution/docs/openapi/serverless/security_solution_endpoint_management_api_2023_10_31.bundled.schema.yaml index 24951f89d1bf1..7156c0a5226be 100644 --- a/x-pack/plugins/security_solution/docs/openapi/serverless/security_solution_endpoint_management_api_2023_10_31.bundled.schema.yaml +++ b/x-pack/plugins/security_solution/docs/openapi/serverless/security_solution_endpoint_management_api_2023_10_31.bundled.schema.yaml @@ -1,7 +1,7 @@ openapi: 3.0.3 info: description: Interact with and manage endpoints running the Elastic Defend integration. - title: Security Solution Endpoint Management API (Elastic Cloud Serverless) + title: Security Endpoint Management API (Elastic Cloud Serverless) version: '2023-10-31' servers: - url: http://{kibana_host}:{port} @@ -30,7 +30,7 @@ paths: description: OK summary: Get response actions tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action_log/{agent_id}: get: deprecated: true @@ -56,7 +56,7 @@ paths: description: OK summary: Get an action request log tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action_status: get: description: Get the status of response actions for the specified agent IDs. @@ -79,7 +79,7 @@ paths: description: OK summary: Get response actions status tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action/{action_id}: get: description: Get the details of a response action using the action ID. @@ -99,7 +99,7 @@ paths: description: OK summary: Get action details tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action/{action_id}/file/{file_id}: get: description: Get information for the specified file using the file ID. @@ -124,7 +124,7 @@ paths: description: OK summary: Get file information tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action/{action_id}/file/{file_id}/download: get: description: Download a file from an endpoint. @@ -149,7 +149,7 @@ paths: description: OK summary: Download a file tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action/execute: post: description: Run a shell command on an endpoint. @@ -169,7 +169,7 @@ paths: description: OK summary: Run a command tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action/get_file: post: description: Get a file from an endpoint. @@ -189,7 +189,7 @@ paths: description: OK summary: Get a file tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action/isolate: post: description: >- @@ -211,7 +211,7 @@ paths: description: OK summary: Isolate an endpoint tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action/kill_process: post: description: Terminate a running process on an endpoint. @@ -231,7 +231,7 @@ paths: description: OK summary: Terminate a process tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action/running_procs: post: description: Get a list of all processes running on an endpoint. @@ -251,7 +251,7 @@ paths: description: OK summary: Get running processes tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action/scan: post: description: Scan a specific file or directory on an endpoint for malware. @@ -271,7 +271,7 @@ paths: description: OK summary: Scan a file or directory tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action/state: get: description: >- @@ -287,7 +287,7 @@ paths: description: OK summary: Get actions state tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action/suspend_process: post: description: Suspend a running process on an endpoint. @@ -307,7 +307,7 @@ paths: description: OK summary: Suspend a process tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action/unisolate: post: description: Release an isolated endpoint, allowing it to rejoin a network. @@ -327,7 +327,7 @@ paths: description: OK summary: Release an isolated endpoint tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/action/upload: post: description: Upload a file to an endpoint. @@ -347,7 +347,7 @@ paths: description: OK summary: Upload a file tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/metadata: get: operationId: GetEndpointMetadataList @@ -366,7 +366,7 @@ paths: description: OK summary: Get a metadata list tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/metadata/{id}: get: operationId: GetEndpointMetadata @@ -385,7 +385,7 @@ paths: description: OK summary: Get metadata tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/metadata/transforms: get: operationId: GetEndpointMetadataTransform @@ -398,7 +398,7 @@ paths: description: OK summary: Get metadata transforms tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/policy_response: get: operationId: GetPolicyResponse @@ -420,7 +420,7 @@ paths: description: OK summary: Get a policy response tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/policy/summaries: get: deprecated: true @@ -446,7 +446,7 @@ paths: description: OK summary: Get an agent policy summary tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/protection_updates_note/{package_policy_id}: get: operationId: GetProtectionUpdatesNote @@ -465,7 +465,7 @@ paths: description: OK summary: Get a protection updates note tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API post: operationId: CreateUpdateProtectionUpdatesNote parameters: @@ -492,7 +492,7 @@ paths: description: OK summary: Create or update a protection updates note tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API /api/endpoint/suggestions/{suggestion_type}: post: operationId: GetEndpointSuggestions @@ -528,7 +528,7 @@ paths: description: OK summary: Get suggestions tags: - - Security Solution Endpoint Management API + - Security Endpoint Management API components: schemas: ActionLogRequestQuery: @@ -1035,4 +1035,4 @@ security: - BasicAuth: [] tags: - description: Interact with and manage endpoints running the Elastic Defend integration. - name: Security Solution Endpoint Management API + name: Security Endpoint Management API diff --git a/x-pack/plugins/security_solution/docs/openapi/serverless/security_solution_entity_analytics_api_1.bundled.schema.yaml b/x-pack/plugins/security_solution/docs/openapi/serverless/security_solution_entity_analytics_api_1.bundled.schema.yaml new file mode 100644 index 0000000000000..835d8f79b1fea --- /dev/null +++ b/x-pack/plugins/security_solution/docs/openapi/serverless/security_solution_entity_analytics_api_1.bundled.schema.yaml @@ -0,0 +1,88 @@ +openapi: 3.0.3 +info: + description: '' + title: Security Entity Analytics API (Elastic Cloud Serverless) + version: '1' +servers: + - url: http://{kibana_host}:{port} + variables: + kibana_host: + default: localhost + port: + default: '5601' +paths: + /api/risk_score/engine/dangerously_delete_data: + delete: + description: >- + Cleaning up the the Risk Engine by removing the indices, mapping and + transforms + operationId: CleanUpRiskEngine + responses: + '200': + content: + application/json: + schema: + type: object + properties: + cleanup_successful: + type: boolean + description: Successful response + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/TaskManagerUnavailableResponse' + description: Task manager is unavailable + default: + content: + application/json: + schema: + $ref: '#/components/schemas/CleanUpRiskEngineErrorResponse' + description: Unexpected error + summary: Cleanup the Risk Engine + tags: + - Security Entity Analytics API +components: + schemas: + CleanUpRiskEngineErrorResponse: + type: object + properties: + cleanup_successful: + example: false + type: boolean + errors: + items: + type: object + properties: + error: + type: string + seq: + type: integer + required: + - seq + - error + type: array + required: + - cleanup_successful + - errors + TaskManagerUnavailableResponse: + description: Task manager is unavailable + type: object + properties: + message: + type: string + status_code: + minimum: 400 + type: integer + required: + - status_code + - message + securitySchemes: + BasicAuth: + scheme: basic + type: http +security: + - BasicAuth: [] +tags: + - description: '' + name: Security Entity Analytics API diff --git a/x-pack/plugins/security_solution/docs/openapi/serverless/security_solution_entity_analytics_api_2023_10_31.bundled.schema.yaml b/x-pack/plugins/security_solution/docs/openapi/serverless/security_solution_entity_analytics_api_2023_10_31.bundled.schema.yaml index 9df11c7eb9e10..50cfd4e893ca7 100644 --- a/x-pack/plugins/security_solution/docs/openapi/serverless/security_solution_entity_analytics_api_2023_10_31.bundled.schema.yaml +++ b/x-pack/plugins/security_solution/docs/openapi/serverless/security_solution_entity_analytics_api_2023_10_31.bundled.schema.yaml @@ -1,7 +1,7 @@ openapi: 3.0.3 info: description: '' - title: Security Solution Entity Analytics API (Elastic Cloud Serverless) + title: Security Entity Analytics API (Elastic Cloud Serverless) version: '2023-10-31' servers: - url: http://{kibana_host}:{port} @@ -59,7 +59,7 @@ paths: description: Invalid request summary: Delete an asset criticality record tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API get: description: Get the asset criticality record for a specific entity. operationId: GetAssetCriticalityRecord @@ -90,7 +90,7 @@ paths: description: Criticality record not found summary: Get an asset criticality record tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API post: description: > Create or update an asset criticality record for a specific entity. @@ -127,7 +127,7 @@ paths: description: Invalid request summary: Upsert an asset criticality record tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API /api/asset_criticality/bulk: post: description: > @@ -190,7 +190,7 @@ paths: description: File too large summary: Bulk upsert asset criticality records tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API /api/asset_criticality/list: get: description: List asset criticality records, paging, sorting and filtering as needed. @@ -266,10 +266,10 @@ paths: description: Bulk upload successful summary: List asset criticality records tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API /api/entity_store/engines: get: - operationId: ListEntityStoreEngines + operationId: ListEntityEngines responses: '200': content: @@ -284,14 +284,14 @@ paths: $ref: '#/components/schemas/EngineDescriptor' type: array description: Successful response - summary: List the Entity Store engines + summary: List the Entity Engines tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API /api/entity_store/engines/{entityType}: delete: - operationId: DeleteEntityStore + operationId: DeleteEntityEngine parameters: - - description: The entity type of the store (either 'user' or 'host'). + - description: The entity type of the engine (either 'user' or 'host'). in: path name: entityType required: true @@ -313,13 +313,13 @@ paths: deleted: type: boolean description: Successful response - summary: Delete the Entity Store engine + summary: Delete the Entity Engine tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API get: - operationId: GetEntityStoreEngine + operationId: GetEntityEngine parameters: - - description: The entity type of the store (either 'user' or 'host'). + - description: The entity type of the engine (either 'user' or 'host'). in: path name: entityType required: true @@ -332,14 +332,14 @@ paths: schema: $ref: '#/components/schemas/EngineDescriptor' description: Successful response - summary: Get the Entity Store engine + summary: Get an Entity Engine tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API /api/entity_store/engines/{entityType}/init: post: - operationId: InitEntityStore + operationId: InitEntityEngine parameters: - - description: The entity type of the store (either 'user' or 'host'). + - description: The entity type of the engine (either 'user' or 'host'). in: path name: entityType required: true @@ -364,14 +364,14 @@ paths: schema: $ref: '#/components/schemas/EngineDescriptor' description: Successful response - summary: Initialize the Entity Store + summary: Initialize an Entity Engine tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API /api/entity_store/engines/{entityType}/start: post: - operationId: StartEntityStore + operationId: StartEntityEngine parameters: - - description: The entity type of the store (either 'user' or 'host'). + - description: The entity type of the engine (either 'user' or 'host'). in: path name: entityType required: true @@ -387,14 +387,14 @@ paths: started: type: boolean description: Successful response - summary: Start the Entity Store engine + summary: Start an Entity Engine tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API /api/entity_store/engines/{entityType}/stats: post: - operationId: GetEntityStoreStats + operationId: GetEntityEngineStats parameters: - - description: The entity type of the store (either 'user' or 'host'). + - description: The entity type of the engine (either 'user' or 'host'). in: path name: entityType required: true @@ -422,14 +422,14 @@ paths: type: $ref: '#/components/schemas/EntityType' description: Successful response - summary: Get the Entity Store engine stats + summary: Get Entity Engine stats tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API /api/entity_store/engines/{entityType}/stop: post: - operationId: StopEntityStore + operationId: StopEntityEngine parameters: - - description: The entity type of the store (either 'user' or 'host'). + - description: The entity type of the engine (either 'user' or 'host'). in: path name: entityType required: true @@ -445,9 +445,9 @@ paths: stopped: type: boolean description: Successful response - summary: Stop the Entity Store engine + summary: Stop an Entity Engine tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API /api/entity_store/entities/list: get: description: List entities records, paging, sorting and filtering as needed. @@ -523,7 +523,7 @@ paths: description: Entities returned successfully summary: List Entity Store Entities tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API /api/risk_score/engine/schedule_now: post: description: >- @@ -555,7 +555,7 @@ paths: description: Unexpected error summary: Run the risk scoring engine tags: - - Security Solution Entity Analytics API + - Security Entity Analytics API components: schemas: AssetCriticalityBulkUploadErrorItem: @@ -851,4 +851,4 @@ security: - BasicAuth: [] tags: - description: '' - name: Security Solution Entity Analytics API + name: Security Entity Analytics API diff --git a/x-pack/plugins/security_solution/docs/openapi/serverless/security_solution_timeline_api_2023_10_31.bundled.schema.yaml b/x-pack/plugins/security_solution/docs/openapi/serverless/security_solution_timeline_api_2023_10_31.bundled.schema.yaml index d8536c1703ed7..633a0fd041969 100644 --- a/x-pack/plugins/security_solution/docs/openapi/serverless/security_solution_timeline_api_2023_10_31.bundled.schema.yaml +++ b/x-pack/plugins/security_solution/docs/openapi/serverless/security_solution_timeline_api_2023_10_31.bundled.schema.yaml @@ -3,7 +3,7 @@ info: description: >- You can create Timelines and Timeline templates via the API, as well as import new Timelines from an ndjson file. - title: Security Solution Timeline API (Elastic Cloud Serverless) + title: Security Timeline API (Elastic Cloud Serverless) version: '2023-10-31' servers: - url: http://{kibana_host}:{port} @@ -29,7 +29,8 @@ paths: type: string required: - noteId - - type: object + - nullable: true + type: object properties: noteIds: items: @@ -52,7 +53,7 @@ paths: description: Indicates the note was successfully deleted. summary: Delete a note tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution get: description: Get all notes for a given document. @@ -60,19 +61,18 @@ paths: parameters: - in: query name: documentIds - required: true schema: $ref: '#/components/schemas/DocumentIds' - in: query name: page schema: nullable: true - type: number + type: string - in: query name: perPage schema: nullable: true - type: number + type: string - in: query name: search schema: @@ -95,10 +95,16 @@ paths: type: string responses: '200': + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/GetNotesResult' + - type: object description: Indicates the requested notes were returned. summary: Get notes tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution patch: description: Add a note to a Timeline or update an existing note. @@ -144,18 +150,7 @@ paths: type: object properties: persistNote: - type: object - properties: - code: - type: number - message: - type: string - note: - $ref: '#/components/schemas/Note' - required: - - code - - message - - note + $ref: '#/components/schemas/ResponseNote' required: - persistNote required: @@ -163,7 +158,7 @@ paths: description: Indicates the note was successfully created. summary: Add or update a note tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution /api/pinned_event: patch: @@ -198,14 +193,7 @@ paths: type: object properties: persistPinnedEventOnTimeline: - allOf: - - $ref: '#/components/schemas/PinnedEvent' - - type: object - properties: - code: - type: number - message: - type: string + $ref: '#/components/schemas/PersistPinnedEventResponse' required: - persistPinnedEventOnTimeline required: @@ -213,7 +201,7 @@ paths: description: Indicates the event was successfully pinned to the Timeline. summary: Pin an event tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution /api/timeline: delete: @@ -259,7 +247,7 @@ paths: description: Indicates the Timeline was successfully deleted. summary: Delete Timelines or Timeline templates tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution get: description: Get the details of an existing saved Timeline or Timeline template. @@ -295,7 +283,7 @@ paths: description: Indicates that the (template) Timeline was found and returned. summary: Get Timeline or Timeline template details tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution patch: description: >- @@ -363,7 +351,7 @@ paths: a draft Timeline. summary: Update a Timeline tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution post: description: Create a new Timeline or Timeline template. @@ -433,7 +421,7 @@ paths: description: Indicates that there was an error in the Timeline creation. summary: Create a Timeline or Timeline template tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution /api/timeline/_draft: get: @@ -500,7 +488,7 @@ paths: draft Timeline with the given `timelineId`. summary: Get draft Timeline or Timeline template details tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution post: description: > @@ -578,7 +566,7 @@ paths: `timelineId`. summary: Create a clean draft Timeline or Timeline template tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution /api/timeline/_export: post: @@ -625,7 +613,7 @@ paths: description: Indicates that the export size limit was exceeded. summary: Export Timelines tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution /api/timeline/_favorite: patch: @@ -688,7 +676,7 @@ paths: the favorite status. summary: Favorite a Timeline or Timeline template tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution /api/timeline/_import: post: @@ -779,7 +767,7 @@ paths: description: Indicates the import of Timelines was unsuccessful. summary: Import Timelines tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution /api/timeline/_prepackaged: post: @@ -838,7 +826,7 @@ paths: unsuccessful. summary: Install prepackaged Timelines tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution /api/timeline/resolve: get: @@ -878,7 +866,7 @@ paths: description: The (template) Timeline was not found summary: Get an existing saved Timeline or Timeline template tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution /api/timelines: get: @@ -982,7 +970,7 @@ paths: description: Bad request. The user supplied invalid data. summary: Get Timelines or Timeline templates tags: - - Security Solution Timeline API + - Security Timeline API - access:securitySolution components: schemas: @@ -1002,8 +990,28 @@ components: nullable: true type: string timelineId: + type: string + updated: + nullable: true + type: number + updatedBy: + nullable: true + type: string + required: + - timelineId + BarePinnedEvent: + type: object + properties: + created: + nullable: true + type: number + createdBy: nullable: true type: string + eventId: + type: string + timelineId: + type: string updated: nullable: true type: number @@ -1011,6 +1019,7 @@ components: nullable: true type: string required: + - eventId - timelineId ColumnHeaderResult: type: object @@ -1184,6 +1193,18 @@ components: type: string script: type: string + GetNotesResult: + type: object + properties: + notes: + items: + $ref: '#/components/schemas/Note' + type: array + totalCount: + type: number + required: + - totalCount + - notes ImportTimelineResult: type: object properties: @@ -1244,34 +1265,37 @@ components: type: string version: type: string + required: + - noteId + - version + PersistPinnedEventResponse: + oneOf: + - allOf: + - $ref: '#/components/schemas/PinnedEvent' + - $ref: '#/components/schemas/PinnedEventBaseResponseBody' + - nullable: true + type: object PinnedEvent: + allOf: + - $ref: '#/components/schemas/BarePinnedEvent' + - type: object + properties: + pinnedEventId: + type: string + version: + type: string + required: + - pinnedEventId + - version + PinnedEventBaseResponseBody: type: object properties: - created: - nullable: true - type: number - createdBy: - nullable: true - type: string - eventId: - type: string - pinnedEventId: - type: string - timelineId: - type: string - updated: - nullable: true + code: type: number - updatedBy: - nullable: true - type: string - version: + message: type: string required: - - eventId - - pinnedEventId - - timelineId - - version + - code QueryMatchResult: type: object properties: @@ -1316,6 +1340,19 @@ components: type: object readable: type: boolean + ResponseNote: + type: object + properties: + code: + type: number + message: + type: string + note: + $ref: '#/components/schemas/Note' + required: + - code + - message + - note RowRendererId: enum: - alert @@ -1564,4 +1601,4 @@ tags: - description: >- You can create Timelines and Timeline templates via the API, as well as import new Timelines from an ndjson file. - name: Security Solution Timeline API + name: Security Timeline API diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_creation/components/schedule_item_form/index.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_creation/components/schedule_item_form/index.tsx index 997930926f26f..293e24f533126 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_creation/components/schedule_item_form/index.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_creation/components/schedule_item_form/index.tsx @@ -12,7 +12,6 @@ import { EuiFieldNumber, EuiFormRow, EuiSelect, - EuiFormControlLayout, transparentize, } from '@elastic/eui'; import { isEmpty } from 'lodash/fp'; @@ -51,37 +50,21 @@ const StyledLabelAppend = styled(EuiFlexItem)` const StyledEuiFormRow = styled(EuiFormRow)` max-width: none; - .euiFormControlLayout { - max-width: auto; - width: auto; - } - - .euiFormControlLayout__childrenWrapper > *:first-child { - box-shadow: none; - height: 38px; - width: 100%; - } - - .euiFormControlLayout__childrenWrapper > select { - background-color: ${({ theme }) => transparentize(theme.eui.euiColorPrimary, 0.1)}; - color: ${({ theme }) => theme.eui.euiColorPrimary}; - } - - .euiFormControlLayout--group .euiFormControlLayout { - min-width: 100px; + .euiFormControlLayout__append { + padding-inline: 0 !important; } .euiFormControlLayoutIcons { color: ${({ theme }) => theme.eui.euiColorPrimary}; } - - .euiFormControlLayout:not(:first-child) { - border-left: 1px solid ${({ theme }) => theme.eui.euiColorLightShade}; - } `; const MyEuiSelect = styled(EuiSelect)` - width: auto; + min-width: 106px; // Preserve layout when disabled & dropdown arrow is not rendered + background: ${({ theme }) => + transparentize(theme.eui.euiColorPrimary, 0.1)} !important; // Override focus states etc. + color: ${({ theme }) => theme.eui.euiColorPrimary}; + box-shadow: none; `; const getNumberFromUserInput = (input: string, minimumValue = 0): number => { @@ -173,10 +156,10 @@ export const ScheduleItem = ({ data-test-subj={dataTestSubj} describedByIds={idAria ? [idAria] : undefined} > - timeTypes.includes(type.value))} onChange={onChangeTimeType} value={timeType} @@ -185,17 +168,14 @@ export const ScheduleItem = ({ {...rest} /> } - > - - + fullWidth + min={minimumValue} + max={Number.MAX_SAFE_INTEGER} + onChange={onChangeTimeVal} + value={timeVal} + data-test-subj="interval" + {...rest} + /> ); }; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/duration_input/index.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/duration_input/index.tsx index 5163be74eed67..99222756bcf26 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/duration_input/index.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/duration_input/index.tsx @@ -5,13 +5,7 @@ * 2.0. */ -import { - EuiFieldNumber, - EuiFormRow, - EuiSelect, - EuiFormControlLayout, - transparentize, -} from '@elastic/eui'; +import { EuiFieldNumber, EuiFormRow, EuiSelect, transparentize } from '@elastic/eui'; import React, { useCallback } from 'react'; import styled from 'styled-components'; @@ -37,39 +31,23 @@ const getNumberFromUserInput = (input: string, minimumValue = 0): number | undef }; const StyledEuiFormRow = styled(EuiFormRow)` - max-width: none; + max-width: 235px; - .euiFormControlLayout { - max-width: 235px; - width: auto; - } - - .euiFormControlLayout__childrenWrapper > *:first-child { - box-shadow: none; - height: 38px; - width: 100%; - } - - .euiFormControlLayout__childrenWrapper > select { - background-color: ${({ theme }) => transparentize(theme.eui.euiColorPrimary, 0.1)}; - color: ${({ theme }) => theme.eui.euiColorPrimary}; - } - - .euiFormControlLayout--group .euiFormControlLayout { - min-width: 100px; + .euiFormControlLayout__append { + padding-inline: 0 !important; } .euiFormControlLayoutIcons { color: ${({ theme }) => theme.eui.euiColorPrimary}; } - - .euiFormControlLayout:not(:first-child) { - border-left: 1px solid ${({ theme }) => theme.eui.euiColorLightShade}; - } `; const MyEuiSelect = styled(EuiSelect)` - width: auto; + min-width: 106px; // Preserve layout when disabled & dropdown arrow is not rendered + box-shadow: none; + background: ${({ theme }) => + transparentize(theme.eui.euiColorPrimary, 0.1)} !important; // Override focus states etc. + color: ${({ theme }) => theme.eui.euiColorPrimary}; `; // This component is similar to the ScheduleItem component, but instead of combining the value @@ -111,10 +89,9 @@ const DurationInputComponent: React.FC = ({ return ( - = ({ {...rest} /> } - > - - + min={minimumValue} + max={Number.MAX_SAFE_INTEGER} + onChange={onChangeTimeVal} + value={durationValue} + data-test-subj="interval" + {...rest} + /> ); }; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/json_diff/json_diff.test.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/json_diff/json_diff.test.tsx index 8e9c465d265b8..2a769e4be87d4 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/json_diff/json_diff.test.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/json_diff/json_diff.test.tsx @@ -19,7 +19,7 @@ import { COLORS } from './constants'; /* Finds an element with a text content that exactly matches the passed argument. - Handly because React Testing Library's doesn't provide an easy way to search by + Handy because React Testing Library's doesn't provide an easy way to search by text if the text is split into multiple DOM elements. */ function findChildByTextContent(parent: Element, textContent: string): HTMLElement { diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/rule_about_section.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/rule_about_section.tsx index 1d2e93df8e7f7..396811892610b 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/rule_about_section.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/rule_about_section.tsx @@ -72,11 +72,11 @@ interface AuthorProps { author: string[]; } -const Author = ({ author }: AuthorProps) => ( +export const Author = ({ author }: AuthorProps) => ( ); -const BuildingBlock = () => ( +export const BuildingBlock = () => ( {i18n.BUILDING_BLOCK_FIELD_DESCRIPTION} @@ -124,7 +124,7 @@ interface RiskScoreProps { riskScore: number; } -const RiskScore = ({ riskScore }: RiskScoreProps) => ( +export const RiskScore = ({ riskScore }: RiskScoreProps) => ( {riskScore} @@ -157,7 +157,7 @@ interface ReferencesProps { references: string[]; } -const References = ({ references }: ReferencesProps) => ( +export const References = ({ references }: ReferencesProps) => (
    {references @@ -173,7 +173,7 @@ const References = ({ references }: ReferencesProps) => ( ); -const FalsePositives = ({ falsePositives }: { falsePositives: string[] }) => ( +export const FalsePositives = ({ falsePositives }: { falsePositives: string[] }) => (
      {falsePositives.map((falsePositivesItem) => ( @@ -192,7 +192,7 @@ interface InvestigationFieldsProps { investigationFields: string[]; } -const InvestigationFields = ({ investigationFields }: InvestigationFieldsProps) => ( +export const InvestigationFields = ({ investigationFields }: InvestigationFieldsProps) => ( ); @@ -200,7 +200,7 @@ interface LicenseProps { license: string; } -const License = ({ license }: LicenseProps) => ( +export const License = ({ license }: LicenseProps) => ( {license} @@ -210,7 +210,7 @@ interface RuleNameOverrideProps { ruleNameOverride: string; } -const RuleNameOverride = ({ ruleNameOverride }: RuleNameOverrideProps) => ( +export const RuleNameOverride = ({ ruleNameOverride }: RuleNameOverrideProps) => ( {ruleNameOverride} @@ -236,7 +236,7 @@ interface TimestampOverrideProps { timestampOverride: string; } -const TimestampOverride = ({ timestampOverride }: TimestampOverrideProps) => ( +export const TimestampOverride = ({ timestampOverride }: TimestampOverrideProps) => ( {timestampOverride} @@ -246,7 +246,7 @@ interface MaxSignalsProps { maxSignals: number; } -const MaxSignals = ({ maxSignals }: MaxSignalsProps) => ( +export const MaxSignals = ({ maxSignals }: MaxSignalsProps) => ( {maxSignals} diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/rule_definition_section.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/rule_definition_section.tsx index e0b0431138508..184633d813675 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/rule_definition_section.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/rule_definition_section.tsx @@ -179,7 +179,7 @@ interface ThresholdProps { threshold: ThresholdType; } -const Threshold = ({ threshold }: ThresholdProps) => ( +export const Threshold = ({ threshold }: ThresholdProps) => (
      {isEmpty(threshold.field[0]) ? `${descriptionStepI18n.THRESHOLD_RESULTS_ALL} >= ${threshold.value}` @@ -193,7 +193,7 @@ interface AnomalyThresholdProps { anomalyThreshold: number; } -const AnomalyThreshold = ({ anomalyThreshold }: AnomalyThresholdProps) => ( +export const AnomalyThreshold = ({ anomalyThreshold }: AnomalyThresholdProps) => ( {anomalyThreshold} @@ -258,7 +258,7 @@ interface RuleTypeProps { type: Type; } -const RuleType = ({ type }: RuleTypeProps) => ( +export const RuleType = ({ type }: RuleTypeProps) => ( {getRuleTypeDescription(type)} ); @@ -298,7 +298,7 @@ interface TimelineTitleProps { timelineTitle: string; } -const TimelineTitle = ({ timelineTitle }: TimelineTitleProps) => ( +export const TimelineTitle = ({ timelineTitle }: TimelineTitleProps) => ( {timelineTitle} @@ -354,7 +354,7 @@ interface SuppressAlertsByFieldProps { fields: string[]; } -const SuppressAlertsByField = ({ fields }: SuppressAlertsByFieldProps) => ( +export const SuppressAlertsByField = ({ fields }: SuppressAlertsByFieldProps) => ( ); @@ -362,7 +362,7 @@ interface SuppressAlertsDurationProps { duration?: Duration; } -const SuppressAlertsDuration = ({ duration }: SuppressAlertsDurationProps) => { +export const SuppressAlertsDuration = ({ duration }: SuppressAlertsDurationProps) => { const durationDescription = duration ? `${duration.value}${duration.unit}` : descriptionStepI18n.ALERT_SUPPRESSION_PER_RULE_EXECUTION; @@ -378,7 +378,7 @@ interface MissingFieldsStrategyProps { missingFieldsStrategy?: AlertSuppressionMissingFieldsStrategy; } -const MissingFieldsStrategy = ({ missingFieldsStrategy }: MissingFieldsStrategyProps) => { +export const MissingFieldsStrategy = ({ missingFieldsStrategy }: MissingFieldsStrategyProps) => { const missingFieldsDescription = missingFieldsStrategy === AlertSuppressionMissingFieldsStrategyEnum.suppress ? descriptionStepI18n.ALERT_SUPPRESSION_SUPPRESS_ON_MISSING_FIELDS @@ -395,7 +395,7 @@ interface NewTermsFieldsProps { newTermsFields: string[]; } -const NewTermsFields = ({ newTermsFields }: NewTermsFieldsProps) => ( +export const NewTermsFields = ({ newTermsFields }: NewTermsFieldsProps) => ( ); @@ -403,7 +403,7 @@ interface HistoryWindowSizeProps { historyWindowStart?: string; } -const HistoryWindowSize = ({ historyWindowStart }: HistoryWindowSizeProps) => { +export const HistoryWindowSize = ({ historyWindowStart }: HistoryWindowSizeProps) => { const size = historyWindowStart ? convertHistoryStartToSize(historyWindowStart) : '7d'; return ( diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/rule_schedule_section.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/rule_schedule_section.tsx index 7d7579521c82d..5ed99e4328136 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/rule_schedule_section.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/rule_schedule_section.tsx @@ -14,14 +14,26 @@ import { getHumanizedDuration } from '../../../../detections/pages/detection_eng import { DEFAULT_DESCRIPTION_LIST_COLUMN_WIDTHS } from './constants'; import * as i18n from './translations'; +interface AccessibleTimeValueProps { + timeValue: string; + 'data-test-subj'?: string; +} + +export const AccessibleTimeValue = ({ + timeValue, + 'data-test-subj': dataTestSubj, +}: AccessibleTimeValueProps) => ( + + + +); + interface IntervalProps { interval: string; } const Interval = ({ interval }: IntervalProps) => ( - - - + ); interface FromProps { @@ -30,9 +42,10 @@ interface FromProps { } const From = ({ from, interval }: FromProps) => ( - - - + ); export interface RuleScheduleSectionProps extends React.ComponentProps { diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/common_rule_field_readonly.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/common_rule_field_readonly.tsx index 35bde351bbeb6..9471a17b216b3 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/common_rule_field_readonly.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/common_rule_field_readonly.tsx @@ -19,6 +19,21 @@ import { NameReadOnly } from './fields/name/name'; import { TagsReadOnly } from './fields/tags/tags'; import { DescriptionReadOnly } from './fields/description/description'; import { assertUnreachable } from '../../../../../../../common/utility_types'; +import { AuthorReadOnly } from './fields/author/author'; +import { BuildingBlockReadOnly } from './fields/building_block/building_block'; +import { InvestigationFieldsReadOnly } from './fields/investigation_fields/investigation_fields'; +import { FalsePositivesReadOnly } from './fields/false_positives/false_positives'; +import { LicenseReadOnly } from './fields/license/license'; +import { MaxSignalsReadOnly } from './fields/max_signals/max_signals'; +import { NoteReadOnly } from './fields/note/note'; +import { RuleScheduleReadOnly } from './fields/rule_schedule/rule_schedule'; +import { ReferencesReadOnly } from './fields/references/references'; +import { RiskScoreReadOnly } from './fields/risk_score/risk_score'; +import { RuleNameOverrideReadOnly } from './fields/rule_name_override/rule_name_override'; +import { SetupReadOnly } from './fields/setup/setup'; +import { SeverityReadOnly } from './fields/severity/severity'; +import { TimestampOverrideReadOnly } from './fields/timestamp_override/timestamp_override'; +import { TimelineTemplateReadOnly } from './fields/timeline_template/timeline_template'; interface CommonRuleFieldReadOnlyProps { fieldName: keyof DiffableCommonFields; @@ -32,25 +47,28 @@ export function CommonRuleFieldReadOnly({ }: CommonRuleFieldReadOnlyProps) { switch (fieldName) { case 'author': - return null; + return ; case 'building_block': - return null; + return ; case 'description': return ; case 'exceptions_list': + /* Exceptions are not used in prebuilt rules */ return null; case 'investigation_fields': - return null; + return ( + + ); case 'false_positives': - return null; + return ; case 'license': - return null; + return ; case 'max_signals': - return null; + return ; case 'name': return ; case 'note': - return null; + return ; case 'related_integrations': return ( @@ -60,7 +78,7 @@ export function CommonRuleFieldReadOnly({ case 'risk_score_mapping': return ; case 'rule_schedule': - return null; + return ; case 'severity_mapping': return ; case 'tags': @@ -68,22 +86,24 @@ export function CommonRuleFieldReadOnly({ case 'threat': return ; case 'references': - return null; + return ; case 'risk_score': - return null; + return ; case 'rule_id': + /* Rule ID is not displayed in the UI */ return null; case 'rule_name_override': - return null; + return ; case 'setup': - return null; + return ; case 'severity': - return null; + return ; case 'timestamp_override': - return null; + return ; case 'timeline_template': - return null; + return ; case 'version': + /* Version is not displayed in the UI */ return null; default: return assertUnreachable(fieldName); diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/custom_query_rule_field_readonly.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/custom_query_rule_field_readonly.tsx index 3d22d268438c4..da435b8092cd6 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/custom_query_rule_field_readonly.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/custom_query_rule_field_readonly.tsx @@ -9,6 +9,9 @@ import React from 'react'; import type { DiffableCustomQueryFields } from '../../../../../../../common/api/detection_engine'; import { DataSourceReadOnly } from './fields/data_source/data_source'; import { KqlQueryReadOnly } from './fields/kql_query'; +import { assertUnreachable } from '../../../../../../../common/utility_types'; +import { TypeReadOnly } from './fields/type/type'; +import { AlertSuppressionReadOnly } from './fields/alert_suppression/alert_suppression'; interface CustomQueryRuleFieldReadOnlyProps { fieldName: keyof DiffableCustomQueryFields; @@ -20,6 +23,13 @@ export function CustomQueryRuleFieldReadOnly({ finalDiffableRule, }: CustomQueryRuleFieldReadOnlyProps) { switch (fieldName) { + case 'alert_suppression': + return ( + + ); case 'data_source': return ; case 'kql_query': @@ -30,7 +40,9 @@ export function CustomQueryRuleFieldReadOnly({ ruleType={finalDiffableRule.type} /> ); + case 'type': + return ; default: - return null; // Will replace with `assertUnreachable(fieldName)` once all fields are implemented + return assertUnreachable(fieldName); } } diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/eql_rule_field_readonly.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/eql_rule_field_readonly.tsx index 126775965724b..b72fce91f198c 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/eql_rule_field_readonly.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/eql_rule_field_readonly.tsx @@ -9,6 +9,12 @@ import React from 'react'; import type { DiffableEqlFields } from '../../../../../../../common/api/detection_engine'; import { DataSourceReadOnly } from './fields/data_source/data_source'; import { EqlQueryReadOnly } from './fields/eql_query/eql_query'; +import { TypeReadOnly } from './fields/type/type'; +import { AlertSuppressionReadOnly } from './fields/alert_suppression/alert_suppression'; +import { assertUnreachable } from '../../../../../../../common/utility_types'; +import { EventCategoryOverrideReadOnly } from './fields/event_category_override/event_category_override'; +import { TimestampFieldReadOnly } from './fields/timestamp_field/timestamp_field'; +import { TiebreakerFieldReadOnly } from './fields/tiebreaker_field/tiebreaker_field'; interface EqlRuleFieldReadOnlyProps { fieldName: keyof DiffableEqlFields; @@ -17,6 +23,13 @@ interface EqlRuleFieldReadOnlyProps { export function EqlRuleFieldReadOnly({ fieldName, finalDiffableRule }: EqlRuleFieldReadOnlyProps) { switch (fieldName) { + case 'alert_suppression': + return ( + + ); case 'data_source': return ; case 'eql_query': @@ -26,9 +39,19 @@ export function EqlRuleFieldReadOnly({ fieldName, finalDiffableRule }: EqlRuleFi dataSource={finalDiffableRule.data_source} /> ); + case 'event_category_override': + return ( + + ); + case 'tiebreaker_field': + return ; + case 'timestamp_field': + return ; case 'type': - return null; + return ; default: - return null; // Will replace with `assertUnreachable(fieldName)` once all fields are implemented + return assertUnreachable(fieldName); } } diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/esql_rule_field_readonly.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/esql_rule_field_readonly.tsx index 755ad6b1b4789..04280ebaacc5b 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/esql_rule_field_readonly.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/esql_rule_field_readonly.tsx @@ -8,6 +8,9 @@ import React from 'react'; import type { DiffableEsqlFields } from '../../../../../../../common/api/detection_engine'; import { EsqlQueryReadOnly } from './fields/esql_query/esql_query'; +import { TypeReadOnly } from './fields/type/type'; +import { AlertSuppressionReadOnly } from './fields/alert_suppression/alert_suppression'; +import { assertUnreachable } from '../../../../../../../common/utility_types'; interface EsqlRuleFieldReadOnlyProps { fieldName: keyof DiffableEsqlFields; @@ -19,11 +22,18 @@ export function EsqlRuleFieldReadOnly({ finalDiffableRule, }: EsqlRuleFieldReadOnlyProps) { switch (fieldName) { + case 'alert_suppression': + return ( + + ); case 'esql_query': return ; case 'type': - return null; + return ; default: - return null; // Will replace with `assertUnreachable(fieldName)` once all fields are implemented + return assertUnreachable(fieldName); } } diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/alert_suppression/alert_suppression.stories.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/alert_suppression/alert_suppression.stories.tsx new file mode 100644 index 0000000000000..4f6739a3af481 --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/alert_suppression/alert_suppression.stories.tsx @@ -0,0 +1,44 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import type { Story } from '@storybook/react'; +import { AlertSuppressionReadOnly } from './alert_suppression'; +import { FieldReadOnly } from '../../field_readonly'; +import type { DiffableRule } from '../../../../../../../../../common/api/detection_engine'; +import { mockCustomQueryRule } from '../../storybook/mocks'; +import { ThreeWayDiffStorybookProviders } from '../../storybook/three_way_diff_storybook_providers'; + +export default { + component: AlertSuppressionReadOnly, + title: + 'Rule Management/Prebuilt Rules/Upgrade Flyout/ThreeWayDiff/FieldReadOnly/alert_suppression', +}; + +interface TemplateProps { + finalDiffableRule: DiffableRule; +} + +const Template: Story = (args) => { + return ( + + + + ); +}; + +export const Default = Template.bind({}); + +Default.args = { + finalDiffableRule: mockCustomQueryRule({ + alert_suppression: { + group_by: ['host.name'], + duration: { value: 5, unit: 'm' }, + missing_fields_strategy: 'suppress', + }, + }), +}; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/alert_suppression/alert_suppression.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/alert_suppression/alert_suppression.tsx new file mode 100644 index 0000000000000..8c15347bc6d90 --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/alert_suppression/alert_suppression.tsx @@ -0,0 +1,81 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { EuiDescriptionList } from '@elastic/eui'; +import * as ruleDetailsI18n from '../../../../translations'; +import type { + AlertSuppression, + DiffableRuleTypes, + ThresholdAlertSuppression, +} from '../../../../../../../../../common/api/detection_engine'; +import { AlertSuppressionLabel } from '../../../../../../../rule_creation_ui/components/description_step/alert_suppression_label'; +import { + MissingFieldsStrategy, + SuppressAlertsByField, + SuppressAlertsDuration, +} from '../../../../rule_definition_section'; + +interface AlertSuppressionReadOnlyProps { + alertSuppression?: AlertSuppression | ThresholdAlertSuppression; + ruleType: DiffableRuleTypes; +} + +export function AlertSuppressionReadOnly({ + alertSuppression, + ruleType, +}: AlertSuppressionReadOnlyProps) { + if (!alertSuppression) { + return null; + } + + const listItems = []; + + if ('group_by' in alertSuppression) { + listItems.push({ + title: ( + + ), + description: , + }); + } + + if ('duration' in alertSuppression) { + listItems.push({ + title: ( + + + + ), + description: , + }); + } + + if ('missing_fields_strategy' in alertSuppression) { + listItems.push({ + title: ( + + + + ), + description: ( + + ), + }); + } + + return ; +} diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/anomaly_threshold/anomaly_threshold.stories.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/anomaly_threshold/anomaly_threshold.stories.tsx new file mode 100644 index 0000000000000..8203e015d11db --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/anomaly_threshold/anomaly_threshold.stories.tsx @@ -0,0 +1,35 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import type { Story } from '@storybook/react'; +import { AnomalyThresholdReadOnly } from './anomaly_threshold'; +import { FieldReadOnly } from '../../field_readonly'; +import type { DiffableRule } from '../../../../../../../../../common/api/detection_engine'; +import { mockMachineLearningRule } from '../../storybook/mocks'; + +export default { + component: AnomalyThresholdReadOnly, + title: + 'Rule Management/Prebuilt Rules/Upgrade Flyout/ThreeWayDiff/FieldReadOnly/anomaly_threshold', +}; + +interface TemplateProps { + finalDiffableRule: DiffableRule; +} + +const Template: Story = (args) => { + return ; +}; + +export const Default = Template.bind({}); + +Default.args = { + finalDiffableRule: mockMachineLearningRule({ + anomaly_threshold: 50, + }), +}; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/anomaly_threshold/anomaly_threshold.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/anomaly_threshold/anomaly_threshold.tsx new file mode 100644 index 0000000000000..20b9026c2a8ae --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/anomaly_threshold/anomaly_threshold.tsx @@ -0,0 +1,29 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { EuiDescriptionList } from '@elastic/eui'; +import * as ruleDetailsI18n from '../../../../translations'; +import type { AnomalyThreshold as AnomalyThresholdType } from '../../../../../../../../../common/api/detection_engine'; +import { AnomalyThreshold } from '../../../../rule_definition_section'; + +interface TagsReadOnlyProps { + anomalyThreshold: AnomalyThresholdType; +} + +export function AnomalyThresholdReadOnly({ anomalyThreshold }: TagsReadOnlyProps) { + return ( + , + }, + ]} + /> + ); +} diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/author/author.stories.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/author/author.stories.tsx new file mode 100644 index 0000000000000..2700517c1c3ec --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/author/author.stories.tsx @@ -0,0 +1,34 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import type { Story } from '@storybook/react'; +import { AuthorReadOnly } from './author'; +import { FieldReadOnly } from '../../field_readonly'; +import type { DiffableRule } from '../../../../../../../../../common/api/detection_engine'; +import { mockCustomQueryRule } from '../../storybook/mocks'; + +export default { + component: AuthorReadOnly, + title: 'Rule Management/Prebuilt Rules/Upgrade Flyout/ThreeWayDiff/FieldReadOnly/author', +}; + +interface TemplateProps { + finalDiffableRule: DiffableRule; +} + +const Template: Story = (args) => { + return ; +}; + +export const Default = Template.bind({}); + +Default.args = { + finalDiffableRule: mockCustomQueryRule({ + author: ['Elastic', 'John Doe'], + }), +}; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/author/author.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/author/author.tsx new file mode 100644 index 0000000000000..c284275bd4db4 --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/author/author.tsx @@ -0,0 +1,29 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { EuiDescriptionList } from '@elastic/eui'; +import * as ruleDetailsI18n from '../../../../translations'; +import type { RuleAuthorArray } from '../../../../../../../../../common/api/detection_engine'; +import { Author } from '../../../../rule_about_section'; + +interface AuthorReadOnlyProps { + author: RuleAuthorArray; +} + +export function AuthorReadOnly({ author }: AuthorReadOnlyProps) { + return ( + , + }, + ]} + /> + ); +} diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/building_block/building_block.stories.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/building_block/building_block.stories.tsx new file mode 100644 index 0000000000000..f927b753c17ab --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/building_block/building_block.stories.tsx @@ -0,0 +1,36 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import type { Story } from '@storybook/react'; +import { BuildingBlockReadOnly } from './building_block'; +import { FieldReadOnly } from '../../field_readonly'; +import type { DiffableRule } from '../../../../../../../../../common/api/detection_engine'; +import { mockCustomQueryRule } from '../../storybook/mocks'; + +export default { + component: BuildingBlockReadOnly, + title: 'Rule Management/Prebuilt Rules/Upgrade Flyout/ThreeWayDiff/FieldReadOnly/building_block', +}; + +interface TemplateProps { + finalDiffableRule: DiffableRule; +} + +const Template: Story = (args) => { + return ; +}; + +export const Default = Template.bind({}); + +Default.args = { + finalDiffableRule: mockCustomQueryRule({ + building_block: { + type: 'default', + }, + }), +}; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/building_block/building_block.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/building_block/building_block.tsx new file mode 100644 index 0000000000000..84edd7932a2d7 --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/building_block/building_block.tsx @@ -0,0 +1,24 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { EuiDescriptionList } from '@elastic/eui'; +import * as ruleDetailsI18n from '../../../../translations'; +import { BuildingBlock } from '../../../../rule_about_section'; + +export function BuildingBlockReadOnly() { + return ( + , + }, + ]} + /> + ); +} diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/data_source/data_source.stories.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/data_source/data_source.stories.tsx index 9deebf794c241..091a874385156 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/data_source/data_source.stories.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/data_source/data_source.stories.tsx @@ -24,12 +24,12 @@ export default { interface TemplateProps { finalDiffableRule: DiffableRule; - kibanaServicesMock?: Record; + kibanaServicesOverrides?: Record; } const Template: Story = (args) => { return ( - + ); @@ -49,7 +49,7 @@ DataSourceWithDataView.args = { finalDiffableRule: mockCustomQueryRule({ data_source: dataSourceWithDataView, }), - kibanaServicesMock: { + kibanaServicesOverrides: { data: { dataViews: { get: async () => mockDataView(), diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/eql_query/eql_query.stories.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/eql_query/eql_query.stories.tsx index af835c5a92779..84ea98047bcee 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/eql_query/eql_query.stories.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/eql_query/eql_query.stories.tsx @@ -26,12 +26,12 @@ export default { interface TemplateProps { finalDiffableRule: DiffableRule; - kibanaServicesMock?: Record; + kibanaServicesOverrides?: Record; } const Template: Story = (args) => { return ( - + ); @@ -44,7 +44,7 @@ EqlQueryWithIndexPatterns.args = { eql_query: eqlQuery, data_source: dataSourceWithIndexPatterns, }), - kibanaServicesMock: { + kibanaServicesOverrides: { data: { dataViews: { create: async () => mockDataView(), @@ -60,7 +60,7 @@ EqlQueryWithDataView.args = { eql_query: eqlQuery, data_source: dataSourceWithDataView, }), - kibanaServicesMock: { + kibanaServicesOverrides: { data: { dataViews: { get: async () => mockDataView(), diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/event_category_override/event_category_override.stories.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/event_category_override/event_category_override.stories.tsx new file mode 100644 index 0000000000000..1eb29ef1084d9 --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/event_category_override/event_category_override.stories.tsx @@ -0,0 +1,37 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import type { Story } from '@storybook/react'; +import { EventCategoryOverrideReadOnly } from './event_category_override'; +import { FieldReadOnly } from '../../field_readonly'; +import type { DiffableRule } from '../../../../../../../../../common/api/detection_engine'; +import { mockEqlRule } from '../../storybook/mocks'; + +export default { + component: EventCategoryOverrideReadOnly, + title: + 'Rule Management/Prebuilt Rules/Upgrade Flyout/ThreeWayDiff/FieldReadOnly/event_category_override', +}; + +interface TemplateProps { + finalDiffableRule: DiffableRule; +} + +const Template: Story = (args) => { + return ( + + ); +}; + +export const Default = Template.bind({}); + +Default.args = { + finalDiffableRule: mockEqlRule({ + event_category_override: 'event.action', + }), +}; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/event_category_override/event_category_override.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/event_category_override/event_category_override.tsx new file mode 100644 index 0000000000000..910e639049f96 --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/event_category_override/event_category_override.tsx @@ -0,0 +1,42 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { EuiDescriptionList, EuiText } from '@elastic/eui'; +import * as descriptionStepI18n from '../../../../../../../rule_creation_ui/components/description_step/translations'; +import type { EventCategoryOverride as EventCategoryOverrideType } from '../../../../../../../../../common/api/detection_engine'; + +interface EventCategoryOverrideReadOnlyProps { + eventCategoryOverride?: EventCategoryOverrideType; +} + +export function EventCategoryOverrideReadOnly({ + eventCategoryOverride, +}: EventCategoryOverrideReadOnlyProps) { + if (!eventCategoryOverride) { + return null; + } + + return ( + , + }, + ]} + /> + ); +} + +interface EventCategoryOverrideProps { + eventCategoryOverride: EventCategoryOverrideType; +} + +function EventCategoryOverride({ eventCategoryOverride }: EventCategoryOverrideProps) { + return {eventCategoryOverride}; +} diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/false_positives/false_positives.stories.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/false_positives/false_positives.stories.tsx new file mode 100644 index 0000000000000..60d8a34616652 --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/false_positives/false_positives.stories.tsx @@ -0,0 +1,37 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import type { Story } from '@storybook/react'; +import { FalsePositivesReadOnly } from './false_positives'; +import { FieldReadOnly } from '../../field_readonly'; +import type { DiffableRule } from '../../../../../../../../../common/api/detection_engine'; +import { mockCustomQueryRule } from '../../storybook/mocks'; + +export default { + component: FalsePositivesReadOnly, + title: 'Rule Management/Prebuilt Rules/Upgrade Flyout/ThreeWayDiff/FieldReadOnly/false_positives', +}; + +interface TemplateProps { + finalDiffableRule: DiffableRule; +} + +const Template: Story = (args) => { + return ; +}; + +export const Default = Template.bind({}); + +Default.args = { + finalDiffableRule: mockCustomQueryRule({ + false_positives: [ + 'WAF rules or rule groups may be deleted by a system or network administrator. Verify whether the user identity, user agent, and/or hostname should be making changes in your environment. Rule deletions by unfamiliar users or hosts should be investigated. If known behavior is causing false positives, it can be exempted from the rule.', + 'Uncommon user command activity can be due to an engineer logging onto a server instance in order to perform manual troubleshooting or reconfiguration.', + ], + }), +}; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/false_positives/false_positives.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/false_positives/false_positives.tsx new file mode 100644 index 0000000000000..f026609b6c850 --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/false_positives/false_positives.tsx @@ -0,0 +1,29 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { EuiDescriptionList } from '@elastic/eui'; +import * as ruleDetailsI18n from '../../../../translations'; +import type { RuleFalsePositiveArray } from '../../../../../../../../../common/api/detection_engine'; +import { FalsePositives } from '../../../../rule_about_section'; + +interface FalsePositivesReadOnlyProps { + falsePositives: RuleFalsePositiveArray; +} + +export function FalsePositivesReadOnly({ falsePositives }: FalsePositivesReadOnlyProps) { + return ( + , + }, + ]} + /> + ); +} diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/history_window_start/history_window_start.stories.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/history_window_start/history_window_start.stories.tsx new file mode 100644 index 0000000000000..c84868e97ee0c --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/history_window_start/history_window_start.stories.tsx @@ -0,0 +1,37 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import type { Story } from '@storybook/react'; +import { HistoryWindowStartReadOnly } from './history_window_start'; +import { FieldReadOnly } from '../../field_readonly'; +import type { DiffableRule } from '../../../../../../../../../common/api/detection_engine'; +import { mockNewTermsRule } from '../../storybook/mocks'; + +export default { + component: HistoryWindowStartReadOnly, + title: + 'Rule Management/Prebuilt Rules/Upgrade Flyout/ThreeWayDiff/FieldReadOnly/history_window_start', +}; + +interface TemplateProps { + finalDiffableRule: DiffableRule; +} + +const Template: Story = (args) => { + return ( + + ); +}; + +export const Default = Template.bind({}); + +Default.args = { + finalDiffableRule: mockNewTermsRule({ + history_window_start: 'now-14d', + }), +}; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/history_window_start/history_window_start.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/history_window_start/history_window_start.tsx new file mode 100644 index 0000000000000..c6bd8ebf7b972 --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/history_window_start/history_window_start.tsx @@ -0,0 +1,31 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { EuiDescriptionList } from '@elastic/eui'; +import * as ruleDetailsI18n from '../../../../translations'; +import type { HistoryWindowStart as HistoryWindowStartType } from '../../../../../../../../../common/api/detection_engine'; +import { HistoryWindowSize } from '../../../../rule_definition_section'; + +interface HistoryWindowStartReadOnlyProps { + historyWindowStart: HistoryWindowStartType; +} + +export function HistoryWindowStartReadOnly({ + historyWindowStart, +}: HistoryWindowStartReadOnlyProps) { + return ( + , + }, + ]} + /> + ); +} diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/investigation_fields/investigation_fields.stories.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/investigation_fields/investigation_fields.stories.tsx new file mode 100644 index 0000000000000..e73b01a719f8a --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/investigation_fields/investigation_fields.stories.tsx @@ -0,0 +1,39 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import type { Story } from '@storybook/react'; +import { InvestigationFieldsReadOnly } from './investigation_fields'; +import { FieldReadOnly } from '../../field_readonly'; +import type { DiffableRule } from '../../../../../../../../../common/api/detection_engine'; +import { mockCustomQueryRule } from '../../storybook/mocks'; + +export default { + component: InvestigationFieldsReadOnly, + title: + 'Rule Management/Prebuilt Rules/Upgrade Flyout/ThreeWayDiff/FieldReadOnly/investigation_fields', +}; + +interface TemplateProps { + finalDiffableRule: DiffableRule; +} + +const Template: Story = (args) => { + return ( + + ); +}; + +export const Default = Template.bind({}); + +Default.args = { + finalDiffableRule: mockCustomQueryRule({ + investigation_fields: { + field_names: ['host.name', 'source.ip'], + }, + }), +}; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/investigation_fields/investigation_fields.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/investigation_fields/investigation_fields.tsx new file mode 100644 index 0000000000000..b567b32ada533 --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/investigation_fields/investigation_fields.tsx @@ -0,0 +1,37 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { EuiDescriptionList } from '@elastic/eui'; +import * as ruleDetailsI18n from '../../../../translations'; +import type { InvestigationFields } from '../../../../../../../../../common/api/detection_engine'; +import { InvestigationFields as InvestigationFieldsComponent } from '../../../../rule_about_section'; + +interface InvestigationFieldsReadOnlyProps { + investigationFields?: InvestigationFields; +} + +export function InvestigationFieldsReadOnly({ + investigationFields, +}: InvestigationFieldsReadOnlyProps) { + if (!investigationFields || !investigationFields.field_names.length) { + return null; + } + + return ( + + ), + }, + ]} + /> + ); +} diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/kql_query/kql_query.stories.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/kql_query/kql_query.stories.tsx index 2b4844ceac5d5..4fd102fc0627f 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/kql_query/kql_query.stories.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/kql_query/kql_query.stories.tsx @@ -28,12 +28,12 @@ export default { interface TemplateProps { finalDiffableRule: DiffableRule; - kibanaServicesMock?: Record; + kibanaServicesOverrides?: Record; } const Template: Story = (args) => { return ( - + ); @@ -46,7 +46,7 @@ InlineKqlQueryWithIndexPatterns.args = { kql_query: inlineKqlQuery, data_source: dataSourceWithIndexPatterns, }), - kibanaServicesMock: { + kibanaServicesOverrides: { data: { dataViews: { create: async () => mockDataView(), @@ -62,7 +62,7 @@ InlineKqlQueryWithDataView.args = { kql_query: inlineKqlQuery, data_source: dataSourceWithDataView, }), - kibanaServicesMock: { + kibanaServicesOverrides: { data: { dataViews: { get: async () => mockDataView(), @@ -81,7 +81,7 @@ InlineKqlQueryWithoutDataSource.args = { finalDiffableRule: mockCustomQueryRule({ kql_query: inlineKqlQuery, }), - kibanaServicesMock: { + kibanaServicesOverrides: { data: { dataViews: { create: async () => mockDataView(), @@ -98,7 +98,7 @@ SavedKqlQueryWithIndexPatterns.args = { data_source: dataSourceWithIndexPatterns, type: 'saved_query', }), - kibanaServicesMock: { + kibanaServicesOverrides: { data: { dataViews: { create: async () => mockDataView(), @@ -118,7 +118,7 @@ SavedKqlQueryWithDataView.args = { data_source: dataSourceWithDataView, type: 'saved_query', }), - kibanaServicesMock: { + kibanaServicesOverrides: { data: { dataViews: { get: async () => mockDataView(), diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/license/license.stories.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/license/license.stories.tsx new file mode 100644 index 0000000000000..044564acd91d8 --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/license/license.stories.tsx @@ -0,0 +1,34 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import type { Story } from '@storybook/react'; +import { LicenseReadOnly } from './license'; +import { FieldReadOnly } from '../../field_readonly'; +import type { DiffableRule } from '../../../../../../../../../common/api/detection_engine'; +import { mockCustomQueryRule } from '../../storybook/mocks'; + +export default { + component: LicenseReadOnly, + title: 'Rule Management/Prebuilt Rules/Upgrade Flyout/ThreeWayDiff/FieldReadOnly/license', +}; + +interface TemplateProps { + finalDiffableRule: DiffableRule; +} + +const Template: Story = (args) => { + return ; +}; + +export const Default = Template.bind({}); + +Default.args = { + finalDiffableRule: mockCustomQueryRule({ + license: 'Elastic License 2.0', + }), +}; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/license/license.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/license/license.tsx new file mode 100644 index 0000000000000..18032f66ab81d --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/license/license.tsx @@ -0,0 +1,29 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { EuiDescriptionList } from '@elastic/eui'; +import * as ruleDetailsI18n from '../../../../translations'; +import type { RuleLicense } from '../../../../../../../../../common/api/detection_engine'; +import { License } from '../../../../rule_about_section'; + +interface LicenseReadOnlyProps { + license: RuleLicense; +} + +export function LicenseReadOnly({ license }: LicenseReadOnlyProps) { + return ( + , + }, + ]} + /> + ); +} diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/max_signals/max_signals.stories.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/max_signals/max_signals.stories.tsx new file mode 100644 index 0000000000000..d6f369ff47ce6 --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/max_signals/max_signals.stories.tsx @@ -0,0 +1,34 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import type { Story } from '@storybook/react'; +import { MaxSignalsReadOnly } from './max_signals'; +import { FieldReadOnly } from '../../field_readonly'; +import type { DiffableRule } from '../../../../../../../../../common/api/detection_engine'; +import { mockCustomQueryRule } from '../../storybook/mocks'; + +export default { + component: MaxSignalsReadOnly, + title: 'Rule Management/Prebuilt Rules/Upgrade Flyout/ThreeWayDiff/FieldReadOnly/max_signals', +}; + +interface TemplateProps { + finalDiffableRule: DiffableRule; +} + +const Template: Story = (args) => { + return ; +}; + +export const Default = Template.bind({}); + +Default.args = { + finalDiffableRule: mockCustomQueryRule({ + max_signals: 100, + }), +}; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/max_signals/max_signals.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/max_signals/max_signals.tsx new file mode 100644 index 0000000000000..d0bda317a416a --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/max_signals/max_signals.tsx @@ -0,0 +1,29 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { EuiDescriptionList } from '@elastic/eui'; +import * as ruleDetailsI18n from '../../../../translations'; +import type { MaxSignals as MaxSignalsType } from '../../../../../../../../../common/api/detection_engine'; +import { MaxSignals } from '../../../../rule_about_section'; + +interface MaxSignalsReadOnlyProps { + maxSignals: MaxSignalsType; +} + +export function MaxSignalsReadOnly({ maxSignals }: MaxSignalsReadOnlyProps) { + return ( + , + }, + ]} + /> + ); +} diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/new_terms_fields/new_terms_fields.stories.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/new_terms_fields/new_terms_fields.stories.tsx new file mode 100644 index 0000000000000..8f77a747fa06c --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/new_terms_fields/new_terms_fields.stories.tsx @@ -0,0 +1,35 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import type { Story } from '@storybook/react'; +import { NewTermsFieldsReadOnly } from './new_terms_fields'; +import { FieldReadOnly } from '../../field_readonly'; +import type { DiffableRule } from '../../../../../../../../../common/api/detection_engine'; +import { mockNewTermsRule } from '../../storybook/mocks'; + +export default { + component: NewTermsFieldsReadOnly, + title: + 'Rule Management/Prebuilt Rules/Upgrade Flyout/ThreeWayDiff/FieldReadOnly/new_terms_fields', +}; + +interface TemplateProps { + finalDiffableRule: DiffableRule; +} + +const Template: Story = (args) => { + return ; +}; + +export const Default = Template.bind({}); + +Default.args = { + finalDiffableRule: mockNewTermsRule({ + new_terms_fields: ['user.name', 'source.ip'], + }), +}; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/new_terms_fields/new_terms_fields.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/new_terms_fields/new_terms_fields.tsx new file mode 100644 index 0000000000000..b77f7b0736482 --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/new_terms_fields/new_terms_fields.tsx @@ -0,0 +1,29 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { EuiDescriptionList } from '@elastic/eui'; +import * as ruleDetailsI18n from '../../../../translations'; +import type { NewTermsFields as NewTermsFieldsType } from '../../../../../../../../../common/api/detection_engine'; +import { NewTermsFields } from '../../../../rule_definition_section'; + +interface NewTermsFieldsReadOnlyProps { + newTermsFields: NewTermsFieldsType; +} + +export function NewTermsFieldsReadOnly({ newTermsFields }: NewTermsFieldsReadOnlyProps) { + return ( + , + }, + ]} + /> + ); +} diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/note/note.stories.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/note/note.stories.tsx new file mode 100644 index 0000000000000..501faeb1cfbad --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/note/note.stories.tsx @@ -0,0 +1,34 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import type { Story } from '@storybook/react'; +import { NoteReadOnly } from './note'; +import { FieldReadOnly } from '../../field_readonly'; +import type { DiffableRule } from '../../../../../../../../../common/api/detection_engine'; +import { mockCustomQueryRule } from '../../storybook/mocks'; + +export default { + component: NoteReadOnly, + title: 'Rule Management/Prebuilt Rules/Upgrade Flyout/ThreeWayDiff/FieldReadOnly/note', +}; + +interface TemplateProps { + finalDiffableRule: DiffableRule; +} + +const Template: Story = (args) => { + return ; +}; + +export const Default = Template.bind({}); + +Default.args = { + finalDiffableRule: mockCustomQueryRule({ + note: '## Triage and analysis\n\n### Investigating Unusual Network Activity\nDetection alerts from this rule indicate the presence of network activity from a Linux process for which network activity is rare and unusual. Here are some possible avenues of investigation:\n- Consider the IP addresses and ports. Are these used by normal but infrequent network workflows? Are they expected or unexpected?\n- If the destination IP address is remote or external, does it associate with an expected domain, organization or geography? Note: avoid interacting directly with suspected malicious IP addresses.\n- Consider the user as identified by the username field. Is this network activity part of an expected workflow for the user who ran the program?\n- Examine the history of execution. If this process only manifested recently, it might be part of a new software package. If it has a consistent cadence (for example if it runs monthly or quarterly), it might be part of a monthly or quarterly business or maintenance process.\n- Examine the process arguments, title and working directory. These may provide indications as to the source of the program or the nature of the tasks it is performing.', + }), +}; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/note/note.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/note/note.tsx new file mode 100644 index 0000000000000..37184df117110 --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/note/note.tsx @@ -0,0 +1,37 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { EuiDescriptionList } from '@elastic/eui'; +import * as i18n from './translations'; +import type { InvestigationGuide } from '../../../../../../../../../common/api/detection_engine'; +import { MarkdownRenderer } from '../../../../../../../../common/components/markdown_editor'; + +interface NoteReadOnlyProps { + note: InvestigationGuide; +} + +export function NoteReadOnly({ note }: NoteReadOnlyProps) { + return ( + , + }, + ]} + /> + ); +} + +interface NoteProps { + note: InvestigationGuide; +} + +function Note({ note }: NoteProps) { + return {note}; +} diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/note/translations.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/note/translations.ts new file mode 100644 index 0000000000000..7a36a7d117d8d --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/note/translations.ts @@ -0,0 +1,15 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; + +export const NOTE_LABEL = i18n.translate( + 'xpack.securitySolution.detectionEngine.rules.upgradeRules.fieldReadOnly.noteLabel', + { + defaultMessage: 'Investigation guide', + } +); diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/references/references.stories.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/references/references.stories.tsx new file mode 100644 index 0000000000000..561d5b36cf4f3 --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/references/references.stories.tsx @@ -0,0 +1,38 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import type { Story } from '@storybook/react'; +import { ReferencesReadOnly } from './references'; +import { FieldReadOnly } from '../../field_readonly'; +import type { DiffableRule } from '../../../../../../../../../common/api/detection_engine'; +import { mockCustomQueryRule } from '../../storybook/mocks'; + +export default { + component: ReferencesReadOnly, + title: 'Rule Management/Prebuilt Rules/Upgrade Flyout/ThreeWayDiff/FieldReadOnly/references', +}; + +interface TemplateProps { + finalDiffableRule: DiffableRule; +} + +const Template: Story = (args) => { + return ; +}; + +export const Default = Template.bind({}); + +Default.args = { + finalDiffableRule: mockCustomQueryRule({ + references: [ + 'https://www.elastic.co/guide/en/security/current/prebuilt-ml-jobs.html', + 'https://docs.elastic.co/en/integrations/beaconing', + 'https://www.elastic.co/security-labs/identifying-beaconing-malware-using-elastic', + ], + }), +}; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/references/references.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/references/references.tsx new file mode 100644 index 0000000000000..c98c5a53bb2e8 --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/references/references.tsx @@ -0,0 +1,29 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { EuiDescriptionList } from '@elastic/eui'; +import * as ruleDetailsI18n from '../../../../translations'; +import type { RuleReferenceArray } from '../../../../../../../../../common/api/detection_engine'; +import { References } from '../../../../rule_about_section'; + +interface ReferencesReadOnlyProps { + references: RuleReferenceArray; +} + +export function ReferencesReadOnly({ references }: ReferencesReadOnlyProps) { + return ( + , + }, + ]} + /> + ); +} diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/risk_score/risk_score.stories.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/risk_score/risk_score.stories.tsx new file mode 100644 index 0000000000000..c0be0fb6190f6 --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/risk_score/risk_score.stories.tsx @@ -0,0 +1,34 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import type { Story } from '@storybook/react'; +import { RiskScoreReadOnly } from './risk_score'; +import { FieldReadOnly } from '../../field_readonly'; +import type { DiffableRule } from '../../../../../../../../../common/api/detection_engine'; +import { mockCustomQueryRule } from '../../storybook/mocks'; + +export default { + component: RiskScoreReadOnly, + title: 'Rule Management/Prebuilt Rules/Upgrade Flyout/ThreeWayDiff/FieldReadOnly/risk_score', +}; + +interface TemplateProps { + finalDiffableRule: DiffableRule; +} + +const Template: Story = (args) => { + return ; +}; + +export const Default = Template.bind({}); + +Default.args = { + finalDiffableRule: mockCustomQueryRule({ + risk_score: 96, + }), +}; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/risk_score/risk_score.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/risk_score/risk_score.tsx new file mode 100644 index 0000000000000..ef6ddbd7d8217 --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/risk_score/risk_score.tsx @@ -0,0 +1,29 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { EuiDescriptionList } from '@elastic/eui'; +import * as ruleDetailsI18n from '../../../../translations'; +import type { RiskScore as RiskScoreType } from '../../../../../../../../../common/api/detection_engine'; +import { RiskScore } from '../../../../rule_about_section'; + +interface RiskScoreReadOnlyProps { + riskScore: RiskScoreType; +} + +export function RiskScoreReadOnly({ riskScore }: RiskScoreReadOnlyProps) { + return ( + , + }, + ]} + /> + ); +} diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/rule_name_override/rule_name_override.stories.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/rule_name_override/rule_name_override.stories.tsx new file mode 100644 index 0000000000000..fa46e313fd664 --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/rule_name_override/rule_name_override.stories.tsx @@ -0,0 +1,39 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import type { Story } from '@storybook/react'; +import { RuleNameOverrideReadOnly } from './rule_name_override'; +import { FieldReadOnly } from '../../field_readonly'; +import type { DiffableRule } from '../../../../../../../../../common/api/detection_engine'; +import { mockCustomQueryRule } from '../../storybook/mocks'; + +export default { + component: RuleNameOverrideReadOnly, + title: + 'Rule Management/Prebuilt Rules/Upgrade Flyout/ThreeWayDiff/FieldReadOnly/rule_name_override', +}; + +interface TemplateProps { + finalDiffableRule: DiffableRule; +} + +const Template: Story = (args) => { + return ( + + ); +}; + +export const Default = Template.bind({}); + +Default.args = { + finalDiffableRule: mockCustomQueryRule({ + rule_name_override: { + field_name: 'event.action', + }, + }), +}; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/rule_name_override/rule_name_override.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/rule_name_override/rule_name_override.tsx new file mode 100644 index 0000000000000..9090138ab91ee --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/rule_name_override/rule_name_override.tsx @@ -0,0 +1,33 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { EuiDescriptionList } from '@elastic/eui'; +import * as ruleDetailsI18n from '../../../../translations'; +import type { RuleNameOverrideObject } from '../../../../../../../../../common/api/detection_engine'; +import { RuleNameOverride } from '../../../../rule_about_section'; + +interface RuleNameOverrideReadOnlyProps { + ruleNameOverride?: RuleNameOverrideObject; +} + +export function RuleNameOverrideReadOnly({ ruleNameOverride }: RuleNameOverrideReadOnlyProps) { + if (!ruleNameOverride) { + return null; + } + + return ( + , + }, + ]} + /> + ); +} diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/rule_schedule/rule_schedule.stories.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/rule_schedule/rule_schedule.stories.tsx new file mode 100644 index 0000000000000..9e6be8a3cbe82 --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/rule_schedule/rule_schedule.stories.tsx @@ -0,0 +1,37 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import type { Story } from '@storybook/react'; +import { RuleScheduleReadOnly } from './rule_schedule'; +import { FieldReadOnly } from '../../field_readonly'; +import type { DiffableRule } from '../../../../../../../../../common/api/detection_engine'; +import { mockCustomQueryRule } from '../../storybook/mocks'; + +export default { + component: RuleScheduleReadOnly, + title: 'Rule Management/Prebuilt Rules/Upgrade Flyout/ThreeWayDiff/FieldReadOnly/rule_schedule', +}; + +interface TemplateProps { + finalDiffableRule: DiffableRule; +} + +const Template: Story = (args) => { + return ; +}; + +export const Default = Template.bind({}); + +Default.args = { + finalDiffableRule: mockCustomQueryRule({ + rule_schedule: { + interval: '5m', + lookback: '60s', + }, + }), +}; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/rule_schedule/rule_schedule.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/rule_schedule/rule_schedule.tsx new file mode 100644 index 0000000000000..24d0e5d6e05f1 --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/rule_schedule/rule_schedule.tsx @@ -0,0 +1,38 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { EuiDescriptionList } from '@elastic/eui'; +import { parseDuration } from '@kbn/alerting-plugin/common'; +import * as i18n from '../../../../translations'; +import type { RuleSchedule } from '../../../../../../../../../common/api/detection_engine'; +import { AccessibleTimeValue } from '../../../../rule_schedule_section'; +import { secondsToDurationString } from '../../../../../../../../detections/pages/detection_engine/rules/helpers'; + +interface RuleScheduleReadOnlyProps { + ruleSchedule: RuleSchedule; +} + +export function RuleScheduleReadOnly({ ruleSchedule }: RuleScheduleReadOnlyProps) { + const lookbackSeconds = parseDuration(ruleSchedule.lookback) / 1000; + const lookbackHumanized = secondsToDurationString(lookbackSeconds); + + return ( + , + }, + { + title: i18n.FROM_FIELD_LABEL, + description: , + }, + ]} + /> + ); +} diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/setup/setup.stories.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/setup/setup.stories.tsx new file mode 100644 index 0000000000000..f610cbf9eafbb --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/setup/setup.stories.tsx @@ -0,0 +1,35 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import type { Story } from '@storybook/react'; +import { SetupReadOnly } from './setup'; +import { FieldReadOnly } from '../../field_readonly'; +import type { DiffableRule } from '../../../../../../../../../common/api/detection_engine'; +import { mockCustomQueryRule } from '../../storybook/mocks'; + +export default { + component: SetupReadOnly, + title: 'Rule Management/Prebuilt Rules/Upgrade Flyout/ThreeWayDiff/FieldReadOnly/setup', +}; + +interface TemplateProps { + finalDiffableRule: DiffableRule; +} + +const Template: Story = (args) => { + return ; +}; + +export const Default = Template.bind({}); + +Default.args = { + finalDiffableRule: mockCustomQueryRule({ + setup: + 'The \'PowerShell Script Block Logging\' logging policy must be enabled.\nSteps to implement the logging policy with Advanced Audit Configuration:\n\n```\nComputer Configuration >\nAdministrative Templates >\nWindows PowerShell >\nTurn on PowerShell Script Block Logging (Enable)\n```\n\nSteps to implement the logging policy via registry:\n\n```\nreg add "hklm\\SOFTWARE\\Policies\\Microsoft\\Windows\\PowerShell\\ScriptBlockLogging" /v EnableScriptBlockLogging /t REG_DWORD /d 1\n```', + }), +}; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/setup/setup.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/setup/setup.tsx new file mode 100644 index 0000000000000..a4ed7ba9539f1 --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/setup/setup.tsx @@ -0,0 +1,37 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { EuiDescriptionList } from '@elastic/eui'; +import * as ruleDetailsI18n from '../../../../translations'; +import type { SetupGuide } from '../../../../../../../../../common/api/detection_engine'; +import { MarkdownRenderer } from '../../../../../../../../common/components/markdown_editor'; + +interface SetupReadOnlyProps { + setup: SetupGuide; +} + +export function SetupReadOnly({ setup }: SetupReadOnlyProps) { + return ( + , + }, + ]} + /> + ); +} + +interface SetupProps { + setup: SetupGuide; +} + +function Setup({ setup }: SetupProps) { + return {setup}; +} diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/severity/severity.stories.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/severity/severity.stories.tsx new file mode 100644 index 0000000000000..51956bb27fa0e --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/severity/severity.stories.tsx @@ -0,0 +1,34 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import type { Story } from '@storybook/react'; +import { SeverityReadOnly } from './severity'; +import { FieldReadOnly } from '../../field_readonly'; +import type { DiffableRule } from '../../../../../../../../../common/api/detection_engine'; +import { mockCustomQueryRule } from '../../storybook/mocks'; + +export default { + component: SeverityReadOnly, + title: 'Rule Management/Prebuilt Rules/Upgrade Flyout/ThreeWayDiff/FieldReadOnly/severity', +}; + +interface TemplateProps { + finalDiffableRule: DiffableRule; +} + +const Template: Story = (args) => { + return ; +}; + +export const Default = Template.bind({}); + +Default.args = { + finalDiffableRule: mockCustomQueryRule({ + severity: 'high', + }), +}; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/severity/severity.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/severity/severity.tsx new file mode 100644 index 0000000000000..71ab7bf07d793 --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/severity/severity.tsx @@ -0,0 +1,29 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { EuiDescriptionList } from '@elastic/eui'; +import * as ruleDetailsI18n from '../../../../translations'; +import type { Severity } from '../../../../../../../../../common/api/detection_engine'; +import { SeverityBadge } from '../../../../../../../../common/components/severity_badge'; + +interface SeverityReadOnlyProps { + severity: Severity; +} + +export function SeverityReadOnly({ severity }: SeverityReadOnlyProps) { + return ( + , + }, + ]} + /> + ); +} diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/threat_language/threat_language.stories.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/threat_language/threat_language.stories.tsx new file mode 100644 index 0000000000000..0e3408aae043e --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/threat_language/threat_language.stories.tsx @@ -0,0 +1,34 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import type { Story } from '@storybook/react'; +import { ThreatLanguageReadOnly } from './threat_language'; +import { FieldReadOnly } from '../../field_readonly'; +import type { DiffableRule } from '../../../../../../../../../common/api/detection_engine'; +import { mockThreatMatchRule } from '../../storybook/mocks'; + +export default { + component: ThreatLanguageReadOnly, + title: 'Rule Management/Prebuilt Rules/Upgrade Flyout/ThreeWayDiff/FieldReadOnly/threat_language', +}; + +interface TemplateProps { + finalDiffableRule: DiffableRule; +} + +const Template: Story = (args) => { + return ; +}; + +export const Default = Template.bind({}); + +Default.args = { + finalDiffableRule: mockThreatMatchRule({ + threat_language: 'lucene', + }), +}; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/threat_language/threat_language.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/threat_language/threat_language.tsx new file mode 100644 index 0000000000000..df43373783b1b --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/threat_language/threat_language.tsx @@ -0,0 +1,33 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { EuiDescriptionList } from '@elastic/eui'; +import * as ruleDetailsI18n from '../../../../translations'; +import type { KqlQueryLanguage } from '../../../../../../../../../common/api/detection_engine'; +import { getQueryLanguageLabel } from '../../../../helpers'; + +interface ThreatLanguageReadOnlyProps { + threatLanguage?: KqlQueryLanguage; +} + +export function ThreatLanguageReadOnly({ threatLanguage }: ThreatLanguageReadOnlyProps) { + if (!threatLanguage) { + return null; + } + + return ( + + ); +} diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/threat_query/threat_query.stories.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/threat_query/threat_query.stories.tsx index 28b4cd65ba78b..bbc5b19d7e66a 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/threat_query/threat_query.stories.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/threat_query/threat_query.stories.tsx @@ -26,12 +26,12 @@ export default { interface TemplateProps { finalDiffableRule: DiffableRule; - kibanaServicesMock?: Record; + kibanaServicesOverrides?: Record; } const Template: Story = (args) => { return ( - + ); @@ -44,7 +44,7 @@ ThreatQueryWithIndexPatterns.args = { threat_query: inlineKqlQuery, data_source: dataSourceWithIndexPatterns, }), - kibanaServicesMock: { + kibanaServicesOverrides: { data: { dataViews: { create: async () => mockDataView(), @@ -60,7 +60,7 @@ ThreatQueryWithDataView.args = { threat_query: inlineKqlQuery, data_source: dataSourceWithDataView, }), - kibanaServicesMock: { + kibanaServicesOverrides: { data: { dataViews: { get: async () => mockDataView(), diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/threshold/threshold.stories.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/threshold/threshold.stories.tsx new file mode 100644 index 0000000000000..8dfee48ba7d23 --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/threshold/threshold.stories.tsx @@ -0,0 +1,38 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import type { Story } from '@storybook/react'; +import { ThresholdReadOnly } from './threshold'; +import { FieldReadOnly } from '../../field_readonly'; +import type { DiffableRule } from '../../../../../../../../../common/api/detection_engine'; +import { mockThresholdRule } from '../../storybook/mocks'; + +export default { + component: ThresholdReadOnly, + title: 'Rule Management/Prebuilt Rules/Upgrade Flyout/ThreeWayDiff/FieldReadOnly/threshold', +}; + +interface TemplateProps { + finalDiffableRule: DiffableRule; +} + +const Template: Story = (args) => { + return ; +}; + +export const Default = Template.bind({}); + +Default.args = { + finalDiffableRule: mockThresholdRule({ + threshold: { + field: ['Responses.process.pid'], + value: 100, + cardinality: [{ field: 'host.id', value: 2 }], + }, + }), +}; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/threshold/threshold.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/threshold/threshold.tsx new file mode 100644 index 0000000000000..19e2b824a9ce5 --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/threshold/threshold.tsx @@ -0,0 +1,29 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { EuiDescriptionList } from '@elastic/eui'; +import * as ruleDetailsI18n from '../../../../translations'; +import type { Threshold as ThresholdType } from '../../../../../../../../../common/api/detection_engine'; +import { Threshold } from '../../../../rule_definition_section'; + +interface ThresholdReadOnlyProps { + threshold: ThresholdType; +} + +export function ThresholdReadOnly({ threshold }: ThresholdReadOnlyProps) { + return ( + , + }, + ]} + /> + ); +} diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/tiebreaker_field/tiebreaker_field.stories.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/tiebreaker_field/tiebreaker_field.stories.tsx new file mode 100644 index 0000000000000..2a41b6c928963 --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/tiebreaker_field/tiebreaker_field.stories.tsx @@ -0,0 +1,35 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import type { Story } from '@storybook/react'; +import { TiebreakerFieldReadOnly } from './tiebreaker_field'; +import { FieldReadOnly } from '../../field_readonly'; +import type { DiffableRule } from '../../../../../../../../../common/api/detection_engine'; +import { mockEqlRule } from '../../storybook/mocks'; + +export default { + component: TiebreakerFieldReadOnly, + title: + 'Rule Management/Prebuilt Rules/Upgrade Flyout/ThreeWayDiff/FieldReadOnly/tiebreaker_field', +}; + +interface TemplateProps { + finalDiffableRule: DiffableRule; +} + +const Template: Story = (args) => { + return ; +}; + +export const Default = Template.bind({}); + +Default.args = { + finalDiffableRule: mockEqlRule({ + tiebreaker_field: 'process.name', + }), +}; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/tiebreaker_field/tiebreaker_field.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/tiebreaker_field/tiebreaker_field.tsx new file mode 100644 index 0000000000000..10e52240748c7 --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/tiebreaker_field/tiebreaker_field.tsx @@ -0,0 +1,40 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { EuiDescriptionList, EuiText } from '@elastic/eui'; +import * as descriptionStepI18n from '../../../../../../../rule_creation_ui/components/description_step/translations'; +import type { TiebreakerField as TiebreakerFieldType } from '../../../../../../../../../common/api/detection_engine'; + +interface TiebreakerFieldReadOnlyProps { + tiebreakerField?: TiebreakerFieldType; +} + +export function TiebreakerFieldReadOnly({ tiebreakerField }: TiebreakerFieldReadOnlyProps) { + if (!tiebreakerField) { + return null; + } + + return ( + , + }, + ]} + /> + ); +} + +interface TiebreakerFieldProps { + tiebreakerField: TiebreakerFieldType; +} + +function TiebreakerField({ tiebreakerField }: TiebreakerFieldProps) { + return {tiebreakerField}; +} diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/timeline_template/timeline_template.stories.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/timeline_template/timeline_template.stories.tsx new file mode 100644 index 0000000000000..e8646a562dadd --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/timeline_template/timeline_template.stories.tsx @@ -0,0 +1,38 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import type { Story } from '@storybook/react'; +import { TimelineTemplateReadOnly } from './timeline_template'; +import { FieldReadOnly } from '../../field_readonly'; +import type { DiffableRule } from '../../../../../../../../../common/api/detection_engine'; +import { mockCustomQueryRule } from '../../storybook/mocks'; + +export default { + component: TimelineTemplateReadOnly, + title: + 'Rule Management/Prebuilt Rules/Upgrade Flyout/ThreeWayDiff/FieldReadOnly/timeline_template', +}; + +interface TemplateProps { + finalDiffableRule: DiffableRule; +} + +const Template: Story = (args) => { + return ; +}; + +export const Default = Template.bind({}); + +Default.args = { + finalDiffableRule: mockCustomQueryRule({ + timeline_template: { + timeline_title: 'Alerts Involving a Single User Timeline', + timeline_id: 'some-timeline-id-123', + }, + }), +}; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/timeline_template/timeline_template.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/timeline_template/timeline_template.tsx new file mode 100644 index 0000000000000..d6cc75cec5843 --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/timeline_template/timeline_template.tsx @@ -0,0 +1,33 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { EuiDescriptionList } from '@elastic/eui'; +import * as ruleDetailsI18n from '../../../../translations'; +import type { TimelineTemplateReference } from '../../../../../../../../../common/api/detection_engine'; +import { TimelineTitle } from '../../../../rule_definition_section'; + +interface TimelineTemplateReadOnlyProps { + timelineTemplate?: TimelineTemplateReference; +} + +export function TimelineTemplateReadOnly({ timelineTemplate }: TimelineTemplateReadOnlyProps) { + if (!timelineTemplate) { + return null; + } + + return ( + , + }, + ]} + /> + ); +} diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/timestamp_field/timestamp_field.stories.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/timestamp_field/timestamp_field.stories.tsx new file mode 100644 index 0000000000000..5d6b6c0a7bc3a --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/timestamp_field/timestamp_field.stories.tsx @@ -0,0 +1,34 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import type { Story } from '@storybook/react'; +import { TimestampFieldReadOnly } from './timestamp_field'; +import { FieldReadOnly } from '../../field_readonly'; +import type { DiffableRule } from '../../../../../../../../../common/api/detection_engine'; +import { mockEqlRule } from '../../storybook/mocks'; + +export default { + component: TimestampFieldReadOnly, + title: 'Rule Management/Prebuilt Rules/Upgrade Flyout/ThreeWayDiff/FieldReadOnly/timestamp_field', +}; + +interface TemplateProps { + finalDiffableRule: DiffableRule; +} + +const Template: Story = (args) => { + return ; +}; + +export const Default = Template.bind({}); + +Default.args = { + finalDiffableRule: mockEqlRule({ + timestamp_field: 'event.created', + }), +}; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/timestamp_field/timestamp_field.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/timestamp_field/timestamp_field.tsx new file mode 100644 index 0000000000000..cd27bfde3db60 --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/timestamp_field/timestamp_field.tsx @@ -0,0 +1,40 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { EuiDescriptionList, EuiText } from '@elastic/eui'; +import * as descriptionStepI18n from '../../../../../../../rule_creation_ui/components/description_step/translations'; +import type { TimestampField as TimestampFieldType } from '../../../../../../../../../common/api/detection_engine'; + +interface TimestampFieldReadOnlyProps { + timestampField?: TimestampFieldType; +} + +export function TimestampFieldReadOnly({ timestampField }: TimestampFieldReadOnlyProps) { + if (!timestampField) { + return null; + } + + return ( + , + }, + ]} + /> + ); +} + +interface TimestampFieldProps { + timestampField: TimestampFieldType; +} + +function TimestampField({ timestampField }: TimestampFieldProps) { + return {timestampField}; +} diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/timestamp_override/timestamp_override.stories.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/timestamp_override/timestamp_override.stories.tsx new file mode 100644 index 0000000000000..eaba3bda0c2e7 --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/timestamp_override/timestamp_override.stories.tsx @@ -0,0 +1,40 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import type { Story } from '@storybook/react'; +import { TimestampOverrideReadOnly } from './timestamp_override'; +import { FieldReadOnly } from '../../field_readonly'; +import type { DiffableRule } from '../../../../../../../../../common/api/detection_engine'; +import { mockCustomQueryRule } from '../../storybook/mocks'; + +export default { + component: TimestampOverrideReadOnly, + title: + 'Rule Management/Prebuilt Rules/Upgrade Flyout/ThreeWayDiff/FieldReadOnly/timestamp_override', +}; + +interface TemplateProps { + finalDiffableRule: DiffableRule; +} + +const Template: Story = (args) => { + return ( + + ); +}; + +export const Default = Template.bind({}); + +Default.args = { + finalDiffableRule: mockCustomQueryRule({ + timestamp_override: { + field_name: 'event.ingested', + fallback_disabled: true, + }, + }), +}; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/timestamp_override/timestamp_override.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/timestamp_override/timestamp_override.tsx new file mode 100644 index 0000000000000..5d4c6ba3e1d2b --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/timestamp_override/timestamp_override.tsx @@ -0,0 +1,33 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { EuiDescriptionList } from '@elastic/eui'; +import * as ruleDetailsI18n from '../../../../translations'; +import type { TimestampOverrideObject } from '../../../../../../../../../common/api/detection_engine'; +import { TimestampOverride } from '../../../../rule_about_section'; + +interface TimestampOverrideReadOnlyProps { + timestampOverride?: TimestampOverrideObject; +} + +export function TimestampOverrideReadOnly({ timestampOverride }: TimestampOverrideReadOnlyProps) { + if (!timestampOverride) { + return null; + } + + return ( + , + }, + ]} + /> + ); +} diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/type/type.stories.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/type/type.stories.tsx new file mode 100644 index 0000000000000..e3f901c958788 --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/type/type.stories.tsx @@ -0,0 +1,34 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import type { Story } from '@storybook/react'; +import { TypeReadOnly } from './type'; +import { FieldReadOnly } from '../../field_readonly'; +import type { DiffableRule } from '../../../../../../../../../common/api/detection_engine'; +import { mockCustomQueryRule } from '../../storybook/mocks'; + +export default { + component: TypeReadOnly, + title: 'Rule Management/Prebuilt Rules/Upgrade Flyout/ThreeWayDiff/FieldReadOnly/type', +}; + +interface TemplateProps { + finalDiffableRule: DiffableRule; +} + +const Template: Story = (args) => { + return ; +}; + +export const Default = Template.bind({}); + +Default.args = { + finalDiffableRule: mockCustomQueryRule({ + type: 'query', + }), +}; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/type/type.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/type/type.tsx new file mode 100644 index 0000000000000..c08a77a2c1d0c --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/fields/type/type.tsx @@ -0,0 +1,29 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { EuiDescriptionList } from '@elastic/eui'; +import * as ruleDetailsI18n from '../../../../translations'; +import type { DiffableRuleTypes } from '../../../../../../../../../common/api/detection_engine'; +import { RuleType } from '../../../../rule_definition_section'; + +interface TypeReadOnlyProps { + type: DiffableRuleTypes; +} + +export function TypeReadOnly({ type }: TypeReadOnlyProps) { + return ( + , + }, + ]} + /> + ); +} diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/machine_learning_rule_field_readonly.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/machine_learning_rule_field_readonly.tsx index 5ebc6f80b13f2..1212905c930c7 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/machine_learning_rule_field_readonly.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/machine_learning_rule_field_readonly.tsx @@ -8,6 +8,10 @@ import React from 'react'; import type { DiffableMachineLearningFields } from '../../../../../../../common/api/detection_engine'; import { MachineLearningJobIdReadOnly } from './fields/machine_learning_job_id/machine_learning_job_id'; +import { TypeReadOnly } from './fields/type/type'; +import { AlertSuppressionReadOnly } from './fields/alert_suppression/alert_suppression'; +import { assertUnreachable } from '../../../../../../../common/utility_types'; +import { AnomalyThresholdReadOnly } from './fields/anomaly_threshold/anomaly_threshold'; interface MachineLearningRuleFieldReadOnlyProps { fieldName: keyof DiffableMachineLearningFields; @@ -19,6 +23,15 @@ export function MachineLearningRuleFieldReadOnly({ finalDiffableRule, }: MachineLearningRuleFieldReadOnlyProps) { switch (fieldName) { + case 'anomaly_threshold': + return ; + case 'alert_suppression': + return ( + + ); case 'machine_learning_job_id': return ( ); case 'type': - return null; + return ; default: - return null; // Will replace with `assertUnreachable(fieldName)` once all fields are implemented + return assertUnreachable(fieldName); } } diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/new_terms_rule_field_readonly.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/new_terms_rule_field_readonly.tsx index 0e2b52c71ba2b..45eeb17f730fb 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/new_terms_rule_field_readonly.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/new_terms_rule_field_readonly.tsx @@ -9,6 +9,11 @@ import React from 'react'; import type { DiffableNewTermsFields } from '../../../../../../../common/api/detection_engine'; import { DataSourceReadOnly } from './fields/data_source/data_source'; import { KqlQueryReadOnly } from './fields/kql_query'; +import { TypeReadOnly } from './fields/type/type'; +import { AlertSuppressionReadOnly } from './fields/alert_suppression/alert_suppression'; +import { NewTermsFieldsReadOnly } from './fields/new_terms_fields/new_terms_fields'; +import { HistoryWindowStartReadOnly } from './fields/history_window_start/history_window_start'; +import { assertUnreachable } from '../../../../../../../common/utility_types'; interface NewTermsRuleFieldReadOnlyProps { fieldName: keyof DiffableNewTermsFields; @@ -20,8 +25,19 @@ export function NewTermsRuleFieldReadOnly({ finalDiffableRule, }: NewTermsRuleFieldReadOnlyProps) { switch (fieldName) { + case 'alert_suppression': + return ( + + ); case 'data_source': return ; + case 'history_window_start': + return ( + + ); case 'kql_query': return ( ); + case 'new_terms_fields': + return ; case 'type': - return null; + return ; default: - return null; // Will replace with `assertUnreachable(fieldName)` once all fields are implemented + return assertUnreachable(fieldName); } } diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/saved_query_rule_field_readonly.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/saved_query_rule_field_readonly.tsx index 41e2e0c32108b..e4a5dbf7242d1 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/saved_query_rule_field_readonly.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/saved_query_rule_field_readonly.tsx @@ -9,6 +9,9 @@ import React from 'react'; import type { DiffableSavedQueryFields } from '../../../../../../../common/api/detection_engine'; import { DataSourceReadOnly } from './fields/data_source/data_source'; import { KqlQueryReadOnly } from './fields/kql_query'; +import { TypeReadOnly } from './fields/type/type'; +import { AlertSuppressionReadOnly } from './fields/alert_suppression/alert_suppression'; +import { assertUnreachable } from '../../../../../../../common/utility_types'; interface SavedQueryRuleFieldReadOnlyProps { fieldName: keyof DiffableSavedQueryFields; @@ -20,6 +23,13 @@ export function SavedQueryRuleFieldReadOnly({ finalDiffableRule, }: SavedQueryRuleFieldReadOnlyProps) { switch (fieldName) { + case 'alert_suppression': + return ( + + ); case 'data_source': return ; case 'kql_query': @@ -31,8 +41,8 @@ export function SavedQueryRuleFieldReadOnly({ /> ); case 'type': - return null; + return ; default: - return null; // Will replace with `assertUnreachable(fieldName)` once all fields are implemented + return assertUnreachable(fieldName); } } diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/storybook/mocks.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/storybook/mocks.ts index 854251450809f..4612852c0ff7e 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/storybook/mocks.ts +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/storybook/mocks.ts @@ -16,9 +16,11 @@ import type { DiffableEqlFields, DiffableEsqlFields, DiffableMachineLearningFields, + DiffableNewTermsFields, DiffableRule, DiffableSavedQueryFields, DiffableThreatMatchFields, + DiffableThresholdFields, InlineKqlQuery, RuleEqlQuery, SavedKqlQuery, @@ -274,3 +276,49 @@ export function mockThreatMatchRule( ...overrides, }; } + +const newTermsDiffableRuleFields: DiffableNewTermsFields = { + type: 'new_terms', + kql_query: { + type: KqlQueryType.inline_query, + query: '*', + language: 'kuery', + filters: [], + }, + new_terms_fields: ['host.name'], + history_window_start: 'now-7d', +}; + +export function mockNewTermsRule( + overrides: Partial +): DiffableRule { + return { + ...commonDiffableRuleFields, + ...newTermsDiffableRuleFields, + ...overrides, + }; +} + +export const thresholdDiffableRuleFields: DiffableThresholdFields = { + type: 'threshold', + kql_query: { + type: KqlQueryType.inline_query, + query: '*', + language: 'kuery', + filters: [], + }, + threshold: { + field: ['user.name'], + value: 200, + }, +}; + +export function mockThresholdRule( + overrides: Partial +): DiffableRule { + return { + ...commonDiffableRuleFields, + ...thresholdDiffableRuleFields, + ...overrides, + }; +} diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/storybook/three_way_diff_storybook_providers.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/storybook/three_way_diff_storybook_providers.tsx index 483624b6fb408..4eb14440c056c 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/storybook/three_way_diff_storybook_providers.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/storybook/three_way_diff_storybook_providers.tsx @@ -11,8 +11,10 @@ import { merge } from 'lodash'; import { Subject } from 'rxjs'; import { Provider as ReduxStoreProvider } from 'react-redux'; import type { CoreStart } from '@kbn/core/public'; +import type { UpsellingService } from '@kbn/security-solution-upselling/service'; import { createKibanaReactContext } from '@kbn/kibana-react-plugin/public'; import { ReactQueryClientProvider } from '../../../../../../../common/containers/query_client/query_client_provider'; +import { UpsellingProvider } from '../../../../../../../common/components/upselling_provider'; function createKibanaServicesMock(overrides?: Partial) { const baseMock = { @@ -44,6 +46,10 @@ function createKibanaServicesMock(overrides?: Partial) { }, }, uiSettings: {}, + upsellingService: { + messages$: new Subject(), + getMessagesValue: () => new Map(), + } as unknown as UpsellingService, }; return merge(baseMock, overrides); @@ -65,21 +71,26 @@ function createMockStore() { interface StorybookProvidersProps { children: React.ReactNode; - kibanaServicesMock?: Record; + kibanaServicesOverrides?: Record; } export function ThreeWayDiffStorybookProviders({ children, - kibanaServicesMock, + kibanaServicesOverrides, }: StorybookProvidersProps) { - const KibanaReactContext = createKibanaReactContext(createKibanaServicesMock(kibanaServicesMock)); + const kibanaServicesMock = createKibanaServicesMock(kibanaServicesOverrides); + const KibanaReactContext = createKibanaReactContext(kibanaServicesMock); const store = createMockStore(); return ( - {children} + + + {children} + + ); diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/threat_match_rule_field_readonly.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/threat_match_rule_field_readonly.tsx index 11fd941601922..3e23a064d14f2 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/threat_match_rule_field_readonly.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/threat_match_rule_field_readonly.tsx @@ -13,6 +13,10 @@ import { ThreatIndexReadOnly } from './fields/threat_index/threat_index'; import { ThreatIndicatorPathReadOnly } from './fields/threat_indicator_path/threat_indicator_path'; import { ThreatMappingReadOnly } from './fields/threat_mapping/threat_mapping'; import { ThreatQueryReadOnly } from './fields/threat_query/threat_query'; +import { TypeReadOnly } from './fields/type/type'; +import { AlertSuppressionReadOnly } from './fields/alert_suppression/alert_suppression'; +import { assertUnreachable } from '../../../../../../../common/utility_types'; +import { ThreatLanguageReadOnly } from './fields/threat_language/threat_language'; interface ThreatMatchRuleFieldReadOnlyProps { fieldName: keyof DiffableThreatMatchFields; @@ -24,6 +28,13 @@ export function ThreatMatchRuleFieldReadOnly({ finalDiffableRule, }: ThreatMatchRuleFieldReadOnlyProps) { switch (fieldName) { + case 'alert_suppression': + return ( + + ); case 'data_source': return ; case 'kql_query': @@ -42,6 +53,8 @@ export function ThreatMatchRuleFieldReadOnly({ threatIndicatorPath={finalDiffableRule.threat_indicator_path} /> ); + case 'threat_language': + return ; case 'threat_mapping': return ; case 'threat_query': @@ -52,8 +65,8 @@ export function ThreatMatchRuleFieldReadOnly({ /> ); case 'type': - return null; + return ; default: - return null; // Will replace with `assertUnreachable(fieldName)` once all fields are implemented + return assertUnreachable(fieldName); } } diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/threshold_rule_field_readonly.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/threshold_rule_field_readonly.tsx index da7d3984d7ccb..d3208a055fa48 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/threshold_rule_field_readonly.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_readonly/threshold_rule_field_readonly.tsx @@ -9,6 +9,10 @@ import React from 'react'; import type { DiffableThresholdFields } from '../../../../../../../common/api/detection_engine'; import { DataSourceReadOnly } from './fields/data_source/data_source'; import { KqlQueryReadOnly } from './fields/kql_query'; +import { TypeReadOnly } from './fields/type/type'; +import { AlertSuppressionReadOnly } from './fields/alert_suppression/alert_suppression'; +import { assertUnreachable } from '../../../../../../../common/utility_types'; +import { ThresholdReadOnly } from './fields/threshold/threshold'; interface ThresholdRuleFieldReadOnlyProps { fieldName: keyof DiffableThresholdFields; @@ -20,6 +24,13 @@ export function ThresholdRuleFieldReadOnly({ finalDiffableRule, }: ThresholdRuleFieldReadOnlyProps) { switch (fieldName) { + case 'alert_suppression': + return ( + + ); case 'data_source': return ; case 'kql_query': @@ -30,9 +41,11 @@ export function ThresholdRuleFieldReadOnly({ ruleType={finalDiffableRule.type} /> ); + case 'threshold': + return ; case 'type': - return null; + return ; default: - return null; // Will replace with `assertUnreachable(fieldName)` once all fields are implemented + return assertUnreachable(fieldName); } } diff --git a/x-pack/plugins/security_solution/public/detections/pages/detection_engine/rules/helpers.tsx b/x-pack/plugins/security_solution/public/detections/pages/detection_engine/rules/helpers.tsx index 24f871125ce4d..8fccd1fb8ac73 100644 --- a/x-pack/plugins/security_solution/public/detections/pages/detection_engine/rules/helpers.tsx +++ b/x-pack/plugins/security_solution/public/detections/pages/detection_engine/rules/helpers.tsx @@ -199,6 +199,23 @@ export const getScheduleStepsData = (rule: RuleResponse): ScheduleStepRule => { }; }; +/** + * Converts seconds to duration string, like "1h", "30m" or "15s" + */ +export const secondsToDurationString = (seconds: number): string => { + if (seconds === 0) { + return `0s`; + } + + if (seconds % 3600 === 0) { + return `${seconds / 3600}h`; + } else if (seconds % 60 === 0) { + return `${seconds / 60}m`; + } else { + return `${seconds}s`; + } +}; + export const getHumanizedDuration = (from: string, interval: string): string => { const fromValue = dateMath.parse(from) ?? moment(); const intervalValue = dateMath.parse(`now-${interval}`) ?? moment(); @@ -208,17 +225,8 @@ export const getHumanizedDuration = (from: string, interval: string): string => // Basing calculations off floored seconds count as moment durations weren't precise const intervalDuration = Math.floor(fromDuration.asSeconds()); // For consistency of display value - if (intervalDuration === 0) { - return `0s`; - } - if (intervalDuration % 3600 === 0) { - return `${intervalDuration / 3600}h`; - } else if (intervalDuration % 60 === 0) { - return `${intervalDuration / 60}m`; - } else { - return `${intervalDuration}s`; - } + return secondsToDurationString(intervalDuration); }; export const getAboutStepsData = (rule: RuleResponse, detailsView: boolean): AboutStepRule => { diff --git a/x-pack/plugins/security_solution/public/entity_analytics/api/api.ts b/x-pack/plugins/security_solution/public/entity_analytics/api/api.ts index f958d20d7c96b..18cb9ef570bd5 100644 --- a/x-pack/plugins/security_solution/public/entity_analytics/api/api.ts +++ b/x-pack/plugins/security_solution/public/entity_analytics/api/api.ts @@ -7,12 +7,12 @@ import { useMemo } from 'react'; import { LIST_ENTITIES_URL } from '../../../common/entity_analytics/entity_store/constants'; -import type { RiskEngineScheduleNowResponse } from '../../../common/api/entity_analytics/risk_engine/engine_schedule_now_route.gen'; -import type { DisableRiskEngineResponse } from '../../../common/api/entity_analytics/risk_engine/engine_disable_route.gen'; import type { UploadAssetCriticalityRecordsResponse } from '../../../common/api/entity_analytics/asset_criticality/upload_asset_criticality_csv.gen'; +import type { DisableRiskEngineResponse } from '../../../common/api/entity_analytics/risk_engine/engine_disable_route.gen'; import type { RiskEngineStatusResponse } from '../../../common/api/entity_analytics/risk_engine/engine_status_route.gen'; import type { InitRiskEngineResponse } from '../../../common/api/entity_analytics/risk_engine/engine_init_route.gen'; import type { EnableRiskEngineResponse } from '../../../common/api/entity_analytics/risk_engine/engine_enable_route.gen'; +import type { RiskEngineScheduleNowResponse } from '../../../common/api/entity_analytics/risk_engine/engine_schedule_now_route.gen'; import type { RiskScoresPreviewRequest, RiskScoresPreviewResponse, @@ -40,6 +40,7 @@ import { ASSET_CRITICALITY_PUBLIC_CSV_UPLOAD_URL, RISK_SCORE_ENTITY_CALCULATION_URL, API_VERSIONS, + RISK_ENGINE_CLEANUP_URL, RISK_ENGINE_SCHEDULE_NOW_URL, } from '../../../common/constants'; import type { SnakeToCamelCase } from '../common/utils'; @@ -191,12 +192,18 @@ export const useEntityAnalyticsRoutes = () => { }); const deleteAssetCriticality = async ( - params: Pick & { refresh?: 'wait_for' } + params: Pick & { + refresh?: 'wait_for'; + } ): Promise<{ deleted: true }> => { await http.fetch(ASSET_CRITICALITY_PUBLIC_URL, { version: API_VERSIONS.public.v1, method: 'DELETE', - query: { id_value: params.idValue, id_field: params.idField, refresh: params.refresh }, + query: { + id_value: params.idValue, + id_field: params.idField, + refresh: params.refresh, + }, }); // spoof a response to allow us to better distnguish a delete from a create in use_asset_criticality.ts @@ -220,7 +227,9 @@ export const useEntityAnalyticsRoutes = () => { fileContent: string, fileName: string ): Promise => { - const file = new File([new Blob([fileContent])], fileName, { type: 'text/csv' }); + const file = new File([new Blob([fileContent])], fileName, { + type: 'text/csv', + }); const body = new FormData(); body.append('file', file); @@ -267,6 +276,16 @@ export const useEntityAnalyticsRoutes = () => { method: 'GET', }); + /** + * Deletes Risk engine installation and associated data + */ + + const cleanUpRiskEngine = () => + http.fetch(RISK_ENGINE_CLEANUP_URL, { + version: '1', + method: 'DELETE', + }); + return { fetchRiskScorePreview, fetchRiskEngineStatus, @@ -283,6 +302,7 @@ export const useEntityAnalyticsRoutes = () => { getRiskScoreIndexStatus, fetchRiskEngineSettings, calculateEntityRiskScore, + cleanUpRiskEngine, fetchEntitiesList, }; }, [http]); diff --git a/x-pack/plugins/security_solution/public/entity_analytics/api/hooks/use_risk_engine_status.ts b/x-pack/plugins/security_solution/public/entity_analytics/api/hooks/use_risk_engine_status.ts index 7dc5b27d2ead5..a9c9dc0939b03 100644 --- a/x-pack/plugins/security_solution/public/entity_analytics/api/hooks/use_risk_engine_status.ts +++ b/x-pack/plugins/security_solution/public/entity_analytics/api/hooks/use_risk_engine_status.ts @@ -62,7 +62,6 @@ export const useRiskEngineStatus = ( isNewRiskScoreModuleAvailable, risk_engine_status: null, legacy_risk_engine_status: null, - is_max_amount_of_risk_engines_reached: false, risk_engine_task_status: null, }; } diff --git a/x-pack/plugins/security_solution/public/entity_analytics/components/risk_score_enable_section.tsx b/x-pack/plugins/security_solution/public/entity_analytics/components/risk_score_enable_section.tsx index b5faebe500dac..63ff39ebca7dc 100644 --- a/x-pack/plugins/security_solution/public/entity_analytics/components/risk_score_enable_section.tsx +++ b/x-pack/plugins/security_solution/public/entity_analytics/components/risk_score_enable_section.tsx @@ -37,7 +37,6 @@ import { useRiskEngineStatus } from '../api/hooks/use_risk_engine_status'; import { useInitRiskEngineMutation } from '../api/hooks/use_init_risk_engine_mutation'; import { useEnableRiskEngineMutation } from '../api/hooks/use_enable_risk_engine_mutation'; import { useDisableRiskEngineMutation } from '../api/hooks/use_disable_risk_engine_mutation'; -import { MAX_SPACES_COUNT } from '../../../common/entity_analytics/risk_engine'; import { useAppToasts } from '../../common/hooks/use_app_toasts'; import { RiskInformationFlyout } from './risk_information'; import { useOnOpenCloseHandler } from '../../helper_hooks'; @@ -252,22 +251,6 @@ export const RiskScoreEnableSection: React.FC<{ const errorBody = initRiskEngineMutation.error.body; initRiskEngineErrors = [errorBody.message]; } - - if ( - currentRiskEngineStatus !== RiskEngineStatusEnum.ENABLED && - riskEngineStatus?.is_max_amount_of_risk_engines_reached - ) { - return ( - -

      {i18n.MAX_SPACE_PANEL_MESSAGE}

      -
      - ); - } return ( <> <> diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/add_note.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/add_note.tsx index 88c77b5d09160..5e4e390ac5077 100644 --- a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/add_note.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/add_note.tsx @@ -16,6 +16,7 @@ import { EuiIcon, EuiSpacer, EuiToolTip, + useEuiTheme, } from '@elastic/eui'; import { css } from '@emotion/react'; import { useDispatch, useSelector } from 'react-redux'; @@ -40,31 +41,34 @@ import { } from '../../../../notes/store/notes.slice'; import { MarkdownEditor } from '../../../../common/components/markdown_editor'; -const timelineCheckBoxId = 'xpack.securitySolution.notes.attachToTimelineCheckboxId'; +const timelineCheckBoxId = 'xpack.securitySolution.flyout.left.notes.attachToTimelineCheckboxId'; export const MARKDOWN_ARIA_LABEL = i18n.translate( - 'xpack.securitySolution.notes.markdownAriaLabel', + 'xpack.securitySolution.flyout.left.notes.markdownAriaLabel', { defaultMessage: 'Note', } ); -export const ADD_NOTE_BUTTON = i18n.translate('xpack.securitySolution.notes.addNoteBtnLabel', { - defaultMessage: 'Add note', -}); +export const ADD_NOTE_BUTTON = i18n.translate( + 'xpack.securitySolution.flyout.left.notes.addNoteBtnLabel', + { + defaultMessage: 'Add note', + } +); export const CREATE_NOTE_ERROR = i18n.translate( - 'xpack.securitySolution.notes.createNoteErrorLabel', + 'xpack.securitySolution.flyout.left.notes.createNoteErrorLabel', { defaultMessage: 'Error create note', } ); export const ATTACH_TO_TIMELINE_CHECKBOX = i18n.translate( - 'xpack.securitySolution.notes.attachToTimelineCheckboxLabel', + 'xpack.securitySolution.flyout.left.notes.attachToTimelineCheckboxLabel', { defaultMessage: 'Attach to active timeline', } ); export const ATTACH_TO_TIMELINE_INFO = i18n.translate( - 'xpack.securitySolution.notes.attachToTimelineInfoLabel', + 'xpack.securitySolution.flyout.left.notes.attachToTimelineInfoLabel', { defaultMessage: 'The active timeline must be saved before a note can be associated with it', } @@ -83,6 +87,7 @@ export interface AddNewNoteProps { */ export const AddNote = memo(({ eventId }: AddNewNoteProps) => { const { telemetry } = useKibana().services; + const { euiTheme } = useEuiTheme(); const dispatch = useDispatch(); const { addError: addErrorToast } = useAppToasts(); const [editorValue, setEditorValue] = useState(''); @@ -171,7 +176,7 @@ export const AddNote = memo(({ eventId }: AddNewNoteProps) => { diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/notes_list.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/notes_list.tsx index 6fb9241973bac..ba7d0b961ddef 100644 --- a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/notes_list.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/notes_list.tsx @@ -42,23 +42,29 @@ import { import { useAppToasts } from '../../../../common/hooks/use_app_toasts'; import { useUserPrivileges } from '../../../../common/components/user_privileges'; -export const ADDED_A_NOTE = i18n.translate('xpack.securitySolution.notes.addedANoteLabel', { - defaultMessage: 'added a note', -}); +export const ADDED_A_NOTE = i18n.translate( + 'xpack.securitySolution.flyout.left.notes.addedANoteLabel', + { + defaultMessage: 'added a note', + } +); export const FETCH_NOTES_ERROR = i18n.translate( - 'xpack.securitySolution.notes.fetchNotesErrorLabel', + 'xpack.securitySolution.flyout.left.notes.fetchNotesErrorLabel', { defaultMessage: 'Error fetching notes', } ); -export const NO_NOTES = i18n.translate('xpack.securitySolution.notes.noNotesLabel', { +export const NO_NOTES = i18n.translate('xpack.securitySolution.flyout.left.notes.noNotesLabel', { defaultMessage: 'No notes have been created for this document', }); -export const DELETE_NOTE = i18n.translate('xpack.securitySolution.notes.deleteNoteLabel', { - defaultMessage: 'Delete note', -}); +export const DELETE_NOTE = i18n.translate( + 'xpack.securitySolution.flyout.left.notes.deleteNoteLabel', + { + defaultMessage: 'Delete note', + } +); export const DELETE_NOTE_ERROR = i18n.translate( - 'xpack.securitySolution.notes.deleteNoteErrorLabel', + 'xpack.securitySolution.flyout.left.notes.deleteNoteErrorLabel', { defaultMessage: 'Error deleting note', } @@ -93,7 +99,7 @@ export const NotesList = memo(({ eventId }: NotesListProps) => { const notes: Note[] = useSelector((state: State) => selectSortedNotesByDocumentId(state, { documentId: eventId, - sort: { field: 'created', direction: 'desc' }, + sort: { field: 'created', direction: 'asc' }, }) ); diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/right/components/alert_header_block.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/alert_header_block.tsx index 84259ffcf0eb6..fac083f90de5f 100644 --- a/x-pack/plugins/security_solution/public/flyout/document_details/right/components/alert_header_block.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/alert_header_block.tsx @@ -30,7 +30,7 @@ export interface AlertHeaderBlockProps { export const AlertHeaderBlock: VFC = memo( ({ title, children, 'data-test-subj': dataTestSubj }) => ( - +

      {title}

      diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/right/components/notes.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/notes.test.tsx index 437fb5d9e21b2..f70cd2aae3e8d 100644 --- a/x-pack/plugins/security_solution/public/flyout/document_details/right/components/notes.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/notes.test.tsx @@ -8,12 +8,23 @@ import React from 'react'; import { render } from '@testing-library/react'; import { DocumentDetailsContext } from '../../shared/context'; -import { NOTES_COUNT_TEST_ID, NOTES_LOADING_TEST_ID, NOTES_TITLE_TEST_ID } from './test_ids'; +import { + NOTES_ADD_NOTE_BUTTON_TEST_ID, + NOTES_ADD_NOTE_ICON_BUTTON_TEST_ID, + NOTES_COUNT_TEST_ID, + NOTES_LOADING_TEST_ID, + NOTES_TITLE_TEST_ID, +} from './test_ids'; import { FETCH_NOTES_ERROR, Notes } from './notes'; import { mockContextValue } from '../../shared/mocks/mock_context'; import { createMockStore, mockGlobalState, TestProviders } from '../../../../common/mock'; import { ReqStatus } from '../../../../notes'; import type { Note } from '../../../../../common/api/timeline'; +import { useExpandableFlyoutApi } from '@kbn/expandable-flyout'; +import { DocumentDetailsLeftPanelKey } from '../../shared/constants/panel_keys'; +import { LeftPanelNotesTab } from '../../left'; + +jest.mock('@kbn/expandable-flyout'); const mockAddError = jest.fn(); jest.mock('../../../../common/hooks/use_app_toasts', () => ({ @@ -33,6 +44,8 @@ jest.mock('react-redux', () => { describe('', () => { it('should render loading spinner', () => { + (useExpandableFlyoutApi as jest.Mock).mockReturnValue({ openLeftPanel: jest.fn() }); + const store = createMockStore({ ...mockGlobalState, notes: { @@ -58,7 +71,38 @@ describe('', () => { expect(getByTestId(NOTES_LOADING_TEST_ID)).toBeInTheDocument(); }); - it('should render number of notes', () => { + it('should render Add note button if no notes are present', () => { + const mockOpenLeftPanel = jest.fn(); + (useExpandableFlyoutApi as jest.Mock).mockReturnValue({ openLeftPanel: mockOpenLeftPanel }); + + const { getByTestId } = render( + + + + + + ); + + const button = getByTestId(NOTES_ADD_NOTE_BUTTON_TEST_ID); + expect(button).toBeInTheDocument(); + + button.click(); + + expect(mockOpenLeftPanel).toHaveBeenCalledWith({ + id: DocumentDetailsLeftPanelKey, + path: { tab: LeftPanelNotesTab }, + params: { + id: mockContextValue.eventId, + indexName: mockContextValue.indexName, + scopeId: mockContextValue.scopeId, + }, + }); + }); + + it('should render number of notes and plus button', () => { + const mockOpenLeftPanel = jest.fn(); + (useExpandableFlyoutApi as jest.Mock).mockReturnValue({ openLeftPanel: mockOpenLeftPanel }); + const contextValue = { ...mockContextValue, eventId: '1', @@ -72,10 +116,23 @@ describe('', () => { ); - expect(getByTestId(NOTES_TITLE_TEST_ID)).toBeInTheDocument(); - expect(getByTestId(NOTES_TITLE_TEST_ID)).toHaveTextContent('Notes'); expect(getByTestId(NOTES_COUNT_TEST_ID)).toBeInTheDocument(); expect(getByTestId(NOTES_COUNT_TEST_ID)).toHaveTextContent('1'); + + const button = getByTestId(NOTES_ADD_NOTE_ICON_BUTTON_TEST_ID); + + expect(button).toBeInTheDocument(); + button.click(); + + expect(mockOpenLeftPanel).toHaveBeenCalledWith({ + id: DocumentDetailsLeftPanelKey, + path: { tab: LeftPanelNotesTab }, + params: { + id: contextValue.eventId, + indexName: mockContextValue.indexName, + scopeId: mockContextValue.scopeId, + }, + }); }); it('should render number of notes in scientific notation for big numbers', () => { diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/right/components/notes.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/notes.tsx index 41f96c90f89ec..a981a16117a68 100644 --- a/x-pack/plugins/security_solution/public/flyout/document_details/right/components/notes.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/notes.tsx @@ -5,14 +5,30 @@ * 2.0. */ -import React, { memo, useEffect } from 'react'; +import React, { memo, useCallback, useEffect } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { FormattedMessage } from '@kbn/i18n-react'; import { i18n } from '@kbn/i18n'; -import { EuiLoadingSpinner } from '@elastic/eui'; +import { + EuiButtonEmpty, + EuiButtonIcon, + EuiFlexGroup, + EuiFlexItem, + EuiLoadingSpinner, + useEuiTheme, +} from '@elastic/eui'; +import { css } from '@emotion/react'; +import { useExpandableFlyoutApi } from '@kbn/expandable-flyout'; +import { DocumentDetailsLeftPanelKey } from '../../shared/constants/panel_keys'; import { FormattedCount } from '../../../../common/components/formatted_number'; import { useDocumentDetailsContext } from '../../shared/context'; -import { NOTES_COUNT_TEST_ID, NOTES_LOADING_TEST_ID, NOTES_TITLE_TEST_ID } from './test_ids'; +import { + NOTES_ADD_NOTE_BUTTON_TEST_ID, + NOTES_ADD_NOTE_ICON_BUTTON_TEST_ID, + NOTES_COUNT_TEST_ID, + NOTES_LOADING_TEST_ID, + NOTES_TITLE_TEST_ID, +} from './test_ids'; import type { State } from '../../../../common/store'; import type { Note } from '../../../../../common/api/timeline'; import { @@ -20,26 +36,49 @@ import { ReqStatus, selectFetchNotesByDocumentIdsError, selectFetchNotesByDocumentIdsStatus, - selectSortedNotesByDocumentId, + selectNotesByDocumentId, } from '../../../../notes/store/notes.slice'; import { useAppToasts } from '../../../../common/hooks/use_app_toasts'; import { AlertHeaderBlock } from './alert_header_block'; +import { LeftPanelNotesTab } from '../../left'; export const FETCH_NOTES_ERROR = i18n.translate( - 'xpack.securitySolution.notes.fetchNotesErrorLabel', + 'xpack.securitySolution.flyout.right.notes.fetchNotesErrorLabel', { defaultMessage: 'Error fetching notes', } ); +export const ADD_NOTE_BUTTON = i18n.translate( + 'xpack.securitySolution.flyout.right.notes.addNoteButtonLabel', + { + defaultMessage: 'Add note', + } +); /** * Renders a block with the number of notes for the event */ export const Notes = memo(() => { + const { euiTheme } = useEuiTheme(); const dispatch = useDispatch(); - const { eventId } = useDocumentDetailsContext(); + const { eventId, indexName, scopeId } = useDocumentDetailsContext(); const { addError: addErrorToast } = useAppToasts(); + const { openLeftPanel } = useExpandableFlyoutApi(); + const openExpandedFlyoutNotesTab = useCallback( + () => + openLeftPanel({ + id: DocumentDetailsLeftPanelKey, + path: { tab: LeftPanelNotesTab }, + params: { + id: eventId, + indexName, + scopeId, + }, + }), + [eventId, indexName, openLeftPanel, scopeId] + ); + useEffect(() => { dispatch(fetchNotesByDocumentIds({ documentIds: [eventId] })); }, [dispatch, eventId]); @@ -47,12 +86,7 @@ export const Notes = memo(() => { const fetchStatus = useSelector((state: State) => selectFetchNotesByDocumentIdsStatus(state)); const fetchError = useSelector((state: State) => selectFetchNotesByDocumentIdsError(state)); - const notes: Note[] = useSelector((state: State) => - selectSortedNotesByDocumentId(state, { - documentId: eventId, - sort: { field: 'created', direction: 'desc' }, - }) - ); + const notes: Note[] = useSelector((state: State) => selectNotesByDocumentId(state, eventId)); // show a toast if the fetch notes call fails useEffect(() => { @@ -76,9 +110,36 @@ export const Notes = memo(() => { {fetchStatus === ReqStatus.Loading ? ( ) : ( -
      - -
      + <> + {notes.length === 0 ? ( + + {ADD_NOTE_BUTTON} + + ) : ( + + + + + + + + + )} + )} ); diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/right/components/test_ids.ts b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/test_ids.ts index 83f833a4b24ac..40670ddc7110a 100644 --- a/x-pack/plugins/security_solution/public/flyout/document_details/right/components/test_ids.ts +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/test_ids.ts @@ -34,6 +34,9 @@ export const SHARE_BUTTON_TEST_ID = `${FLYOUT_HEADER_TEST_ID}ShareButton` as con export const CHAT_BUTTON_TEST_ID = 'newChatByTitle' as const; export const NOTES_TITLE_TEST_ID = `${FLYOUT_HEADER_TEST_ID}NotesTitle` as const; +export const NOTES_ADD_NOTE_BUTTON_TEST_ID = `${FLYOUT_HEADER_TEST_ID}NotesAddNoteButton` as const; +export const NOTES_ADD_NOTE_ICON_BUTTON_TEST_ID = + `${FLYOUT_HEADER_TEST_ID}NotesAddNoteIconButton` as const; export const NOTES_COUNT_TEST_ID = `${FLYOUT_HEADER_TEST_ID}NotesCount` as const; export const NOTES_LOADING_TEST_ID = `${FLYOUT_HEADER_TEST_ID}NotesLoading` as const; diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_response_actions_list/components/actions_log_users_filter.tsx b/x-pack/plugins/security_solution/public/management/components/endpoint_response_actions_list/components/actions_log_users_filter.tsx index 68cbfbffeb261..c458beb4faefd 100644 --- a/x-pack/plugins/security_solution/public/management/components/endpoint_response_actions_list/components/actions_log_users_filter.tsx +++ b/x-pack/plugins/security_solution/public/management/components/endpoint_response_actions_list/components/actions_log_users_filter.tsx @@ -6,7 +6,7 @@ */ import React, { memo, useCallback, useState, useEffect } from 'react'; -import { EuiFieldSearch, EuiFormControlLayout } from '@elastic/eui'; +import { EuiFieldSearch } from '@elastic/eui'; import { useTestIdGenerator } from '../../../hooks/use_test_id_generator'; import { FILTER_NAMES } from '../translations'; import { useActionHistoryUrlParams } from './use_action_history_url_params'; @@ -27,31 +27,36 @@ export const ActionsLogUsersFilter = memo( const onChange = useCallback( (e: React.ChangeEvent) => { + const { value } = e.target; setSearchValue(e.target.value); + + if (!value) { + onChangeUsersFilter([]); + if (!isFlyout) { + setUrlUsersFilters(''); + } + } }, - [setSearchValue] + [setSearchValue, isFlyout, setUrlUsersFilters, onChangeUsersFilter] ); - const onSearch = useCallback(() => { - const userIds = searchValue.split(',').reduce((acc, curr) => { - if (curr.trim() !== '') { - acc.push(curr.trim()); - } - return acc; - }, []); - onChangeUsersFilter(userIds); - if (!isFlyout) { - setUrlUsersFilters(userIds.join(',')); - } - }, [isFlyout, onChangeUsersFilter, searchValue, setUrlUsersFilters]); + const onSearch = useCallback( + (onSearchValue: string) => { + if (!onSearchValue) return; - const onClear = useCallback(() => { - setSearchValue(''); - onChangeUsersFilter([]); - if (!isFlyout) { - setUrlUsersFilters(''); - } - }, [isFlyout, onChangeUsersFilter, setUrlUsersFilters, setSearchValue]); + const userIds = searchValue.split(',').reduce((acc, curr) => { + if (curr.trim() !== '') { + acc.push(curr.trim()); + } + return acc; + }, []); + onChangeUsersFilter(userIds); + if (!isFlyout) { + setUrlUsersFilters(userIds.join(',')); + } + }, + [isFlyout, onChangeUsersFilter, searchValue, setUrlUsersFilters] + ); // on load with users in urlParams, set the search value useEffect(() => { @@ -63,17 +68,15 @@ export const ActionsLogUsersFilter = memo( }, []); return ( - - - + ); } ); diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/models/advanced_policy_schema.ts b/x-pack/plugins/security_solution/public/management/pages/policy/models/advanced_policy_schema.ts index 5cefd39ace739..a169d43d4e374 100644 --- a/x-pack/plugins/security_solution/public/management/pages/policy/models/advanced_policy_schema.ts +++ b/x-pack/plugins/security_solution/public/management/pages/policy/models/advanced_policy_schema.ts @@ -1941,4 +1941,37 @@ export const AdvancedPolicySchema: AdvancedPolicySchemaType[] = [ } ), }, + { + key: 'windows.advanced.events.file.max_hash_size_mb', + first_supported_version: '8.16', + documentation: i18n.translate( + 'xpack.securitySolution.endpoint.policy.advanced.windows.advanced.events.file.max_hash_size_mb', + { + defaultMessage: + "Attempt to include file.hash.sha256 in file events. Hashing is asynchronous, best-effort, and is not guaranteed to succeed, especially on network drives. WARNING: File hashing is a very CPU- and I/O-intensive process. WARNING: This feature will increase Endpoint's CPU and I/O, and may adversely affect system responsiveness, especially during I/O-intensive activity such as directory copies and compilation. WARNING: Event processing will be delayed due to the time spent hashing, causing Endpoint's Behavioral and Ransomware protections to fire later than normal, potentially allowing threats to inflect additional damage. Set to 'off' to disable this feature. Set to '0' to hash all files up to 1 GiB. Otherwise, this sets the maximum to-be-hashed file size in MiB. Default: off", + } + ), + }, + { + key: 'linux.advanced.events.file.max_hash_size_mb', + first_supported_version: '8.16', + documentation: i18n.translate( + 'xpack.securitySolution.endpoint.policy.advanced.linux.advanced.events.file.max_hash_size_mb', + { + defaultMessage: + "Attempt to include file.hash.sha256 in file events. Hashing is asynchronous, best-effort, and is not guaranteed to succeed, especially on network drives. WARNING: File hashing is a very CPU- and I/O-intensive process. WARNING: This feature will increase Endpoint's CPU and I/O, and may adversely affect system responsiveness, especially during I/O-intensive activity such as directory copies and compilation. WARNING: Event processing will be delayed due to the time spent hashing, causing Endpoint's Behavioral and Ransomware protections to fire later than normal, potentially allowing threats to inflect additional damage. Set to 'off' to disable this feature. Set to '0' to hash all files up to 1 GiB. Otherwise, this sets the maximum to-be-hashed file size in MiB. Default: off", + } + ), + }, + { + key: 'mac.advanced.events.file.max_hash_size_mb', + first_supported_version: '8.16', + documentation: i18n.translate( + 'xpack.securitySolution.endpoint.policy.advanced.mac.advanced.events.file.max_hash_size_mb', + { + defaultMessage: + "Attempt to include file.hash.sha256 in file events. Hashing is asynchronous, best-effort, and is not guaranteed to succeed, especially on network drives. WARNING: File hashing is a very CPU- and I/O-intensive process. WARNING: This feature will increase Endpoint's CPU and I/O, and may adversely affect system responsiveness, especially during I/O-intensive activity such as directory copies and compilation. WARNING: Event processing will be delayed due to the time spent hashing, causing Endpoint's Behavioral and Ransomware protections to fire later than normal, potentially allowing threats to inflect additional damage. Set to 'off' to disable this feature. Set to '0' to hash all files up to 1 GiB. Otherwise, this sets the maximum to-be-hashed file size in MiB. Default: off", + } + ), + }, ]; diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/store/policy_details/middleware/policy_settings_middleware.ts b/x-pack/plugins/security_solution/public/management/pages/policy/store/policy_details/middleware/policy_settings_middleware.ts index a22dd2a5edfdf..e74403777523c 100644 --- a/x-pack/plugins/security_solution/public/management/pages/policy/store/policy_details/middleware/policy_settings_middleware.ts +++ b/x-pack/plugins/security_solution/public/management/pages/policy/store/policy_details/middleware/policy_settings_middleware.ts @@ -97,7 +97,7 @@ export const policySettingsMiddlewareRunner: MiddlewareRunner = async ( // Agent summary is secondary data, so its ok for it to come after the details // page is populated with the main content if (policyItem.policy_id) { - const { results } = await sendGetFleetAgentStatusForPolicy(http, policyItem.policy_id); + const { results } = await sendGetFleetAgentStatusForPolicy(http, policyItem.policy_ids); dispatch({ type: 'serverReturnedPolicyDetailsAgentSummaryData', payload: { diff --git a/x-pack/plugins/security_solution/public/management/services/policies/ingest.ts b/x-pack/plugins/security_solution/public/management/services/policies/ingest.ts index 4a2690a112e24..523b1b9a858b1 100644 --- a/x-pack/plugins/security_solution/public/management/services/policies/ingest.ts +++ b/x-pack/plugins/security_solution/public/management/services/policies/ingest.ts @@ -86,20 +86,20 @@ export const sendPutPackagePolicy = ( * Get a status summary for all Agents that are currently assigned to a given agent policy * * @param http - * @param policyId + * @param policyIds * @param options */ export const sendGetFleetAgentStatusForPolicy = ( http: HttpStart, /** the Agent (fleet) policy id */ - policyId: string, + policyIds: string[], options: Exclude = {} ): Promise => { return http.get(INGEST_API_FLEET_AGENT_STATUS, { ...options, version: API_VERSIONS.public.v1, query: { - policyId, + policyIds, }, }); }; diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/query/query_tab_unified_components.test.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/query/query_tab_unified_components.test.tsx index bd8a002666aaf..f70f4e1f261f2 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/query/query_tab_unified_components.test.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/query/query_tab_unified_components.test.tsx @@ -383,11 +383,7 @@ describe('query tab with unified timeline', () => { expect(container.querySelector('[data-gridcell-column-id="message"]')).toBeInTheDocument(); - fireEvent.click( - container.querySelector( - '[data-gridcell-column-id="message"] .euiDataGridHeaderCell__icon' - ) as HTMLElement - ); + fireEvent.click(screen.getByTestId('dataGridHeaderCellActionButton-message')); await waitFor(() => { expect(screen.getByTitle('Move left')).toBeEnabled(); @@ -416,11 +412,7 @@ describe('query tab with unified timeline', () => { expect(container.querySelector('[data-gridcell-column-id="message"]')).toBeInTheDocument(); - fireEvent.click( - container.querySelector( - '[data-gridcell-column-id="message"] .euiDataGridHeaderCell__icon' - ) as HTMLElement - ); + fireEvent.click(screen.getByTestId('dataGridHeaderCellActionButton-message')); await waitFor(() => { expect(screen.getByTitle('Remove column')).toBeVisible(); @@ -449,16 +441,12 @@ describe('query tab with unified timeline', () => { container.querySelector('[data-gridcell-column-id="@timestamp"]') ).toBeInTheDocument(); - fireEvent.click( - container.querySelector( - '[data-gridcell-column-id="@timestamp"] .euiDataGridHeaderCell__icon' - ) as HTMLElement - ); + fireEvent.click(screen.getByTestId('dataGridHeaderCellActionButton-@timestamp')); await waitFor(() => { expect(screen.getByTitle('Sort Old-New')).toBeVisible(); }); - expect(screen.getByTitle('Sort New-Old')).toBeVisible(); + expect(screen.getByTitle('Unsort New-Old')).toBeVisible(); useTimelineEventsMock.mockClear(); @@ -495,11 +483,7 @@ describe('query tab with unified timeline', () => { container.querySelector('[data-gridcell-column-id="host.name"]') ).toBeInTheDocument(); - fireEvent.click( - container.querySelector( - '[data-gridcell-column-id="host.name"] .euiDataGridHeaderCell__icon' - ) as HTMLElement - ); + fireEvent.click(screen.getByTestId('dataGridHeaderCellActionButton-host.name')); await waitFor(() => { expect(screen.getByTestId('dataGridHeaderCellActionGroup-host.name')).toBeVisible(); @@ -554,11 +538,7 @@ describe('query tab with unified timeline', () => { container.querySelector(`[data-gridcell-column-id="${field.name}"]`) ).toBeInTheDocument(); - fireEvent.click( - container.querySelector( - `[data-gridcell-column-id="${field.name}"] .euiDataGridHeaderCell__icon` - ) as HTMLElement - ); + fireEvent.click(screen.getByTestId(`dataGridHeaderCellActionButton-${field.name}`)); await waitFor(() => { expect(screen.getByTestId(`dataGridHeaderCellActionGroup-${field.name}`)).toBeVisible(); diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/unified_components/index.test.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/unified_components/index.test.tsx index b1f05281de803..c50c2877e2fe1 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/unified_components/index.test.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/unified_components/index.test.tsx @@ -239,11 +239,7 @@ describe('unified timeline', () => { container.querySelector(`[data-gridcell-column-id="${field.name}"]`) ).toBeInTheDocument(); - fireEvent.click( - container.querySelector( - `[data-gridcell-column-id="${field.name}"] .euiDataGridHeaderCell__icon` - ) as HTMLElement - ); + fireEvent.click(screen.getByTestId(`dataGridHeaderCellActionButton-${field.name}`)); await waitFor(() => { expect(screen.getByTitle('Move left')).toBeEnabled(); @@ -278,11 +274,7 @@ describe('unified timeline', () => { container.querySelector(`[data-gridcell-column-id="${field.name}"]`) ).toBeInTheDocument(); - fireEvent.click( - container.querySelector( - `[data-gridcell-column-id="${field.name}"] .euiDataGridHeaderCell__icon` - ) as HTMLElement - ); + fireEvent.click(screen.getByTestId(`dataGridHeaderCellActionButton-${field.name}`)); await waitFor(() => { expect(screen.getByTitle('Move right')).toBeEnabled(); @@ -314,11 +306,7 @@ describe('unified timeline', () => { container.querySelector(`[data-gridcell-column-id="${field.name}"]`) ).toBeInTheDocument(); - fireEvent.click( - container.querySelector( - `[data-gridcell-column-id="${field.name}"] .euiDataGridHeaderCell__icon` - ) as HTMLElement - ); + fireEvent.click(screen.getByTestId(`dataGridHeaderCellActionButton-${field.name}`)); // column is currently present in the state const currentColumns = getTimelineFromStore(customStore).columns; @@ -363,16 +351,12 @@ describe('unified timeline', () => { container.querySelector('[data-gridcell-column-id="@timestamp"]') ).toBeInTheDocument(); - fireEvent.click( - container.querySelector( - '[data-gridcell-column-id="@timestamp"] .euiDataGridHeaderCell__icon' - ) as HTMLElement - ); + fireEvent.click(screen.getByTestId('dataGridHeaderCellActionButton-@timestamp')); await waitFor(() => { expect(screen.getByTitle('Sort Old-New')).toBeVisible(); }); - expect(screen.getByTitle('Sort New-Old')).toBeVisible(); + expect(screen.getByTitle('Unsort New-Old')).toBeVisible(); useTimelineEventsMock.mockClear(); @@ -404,11 +388,7 @@ describe('unified timeline', () => { container.querySelector('[data-gridcell-column-id="host.name"]') ).toBeInTheDocument(); - fireEvent.click( - container.querySelector( - '[data-gridcell-column-id="host.name"] .euiDataGridHeaderCell__icon' - ) as HTMLElement - ); + fireEvent.click(screen.getByTestId('dataGridHeaderCellActionButton-host.name')); await waitFor(() => { expect(screen.getByTestId('dataGridHeaderCellActionGroup-host.name')).toBeVisible(); @@ -457,11 +437,7 @@ describe('unified timeline', () => { container.querySelector(`[data-gridcell-column-id="${field.name}"]`) ).toBeInTheDocument(); - fireEvent.click( - container.querySelector( - `[data-gridcell-column-id="${field.name}"] .euiDataGridHeaderCell__icon` - ) as HTMLElement - ); + fireEvent.click(screen.getByTestId(`dataGridHeaderCellActionButton-${field.name}`)); await waitFor(() => { expect(screen.getByTestId(`dataGridHeaderCellActionGroup-${field.name}`)).toBeVisible(); @@ -512,11 +488,7 @@ describe('unified timeline', () => { container.querySelector(`[data-gridcell-column-id="${field.name}"]`) ).toBeInTheDocument(); - fireEvent.click( - container.querySelector( - `[data-gridcell-column-id="${field.name}"] .euiDataGridHeaderCell__icon` - ) as HTMLElement - ); + fireEvent.click(screen.getByTestId(`dataGridHeaderCellActionButton-${field.name}`)); await waitFor(() => { expect(screen.getByTitle('Edit data view field')).toBeEnabled(); diff --git a/x-pack/plugins/security_solution/public/timelines/containers/api.ts b/x-pack/plugins/security_solution/public/timelines/containers/api.ts index a6e1f448f5191..155d95c5acef2 100644 --- a/x-pack/plugins/security_solution/public/timelines/containers/api.ts +++ b/x-pack/plugins/security_solution/public/timelines/containers/api.ts @@ -17,7 +17,6 @@ import type { TimelineResponse, TimelineErrorResponse, ImportTimelineResultSchema, - ResponseFavoriteTimeline, AllTimelinesResponse, SingleTimelineResponse, SingleTimelineResolveResponse, @@ -29,7 +28,7 @@ import { TimelineErrorResponseType, importTimelineResultSchema, allTimelinesResponse, - responseFavoriteTimeline, + PersistFavoriteRouteResponse, SingleTimelineResponseType, type TimelineType, TimelineTypeEnum, @@ -105,11 +104,8 @@ const decodePrepackedTimelineResponse = (respTimeline?: ImportTimelineResultSche fold(throwErrors(createToasterPlainError), identity) ); -const decodeResponseFavoriteTimeline = (respTimeline?: ResponseFavoriteTimeline) => - pipe( - responseFavoriteTimeline.decode(respTimeline), - fold(throwErrors(createToasterPlainError), identity) - ); +const decodeResponseFavoriteTimeline = (respTimeline?: PersistFavoriteRouteResponse) => + PersistFavoriteRouteResponse.parse(respTimeline); const postTimeline = async ({ timeline, @@ -469,7 +465,7 @@ export const persistFavorite = async ({ return Promise.reject(new Error(`Failed to stringify query: ${JSON.stringify(err)}`)); } - const response = await KibanaServices.get().http.patch( + const response = await KibanaServices.get().http.patch( TIMELINE_FAVORITE_URL, { method: 'PATCH', diff --git a/x-pack/plugins/security_solution/public/timelines/containers/pinned_event/api.ts b/x-pack/plugins/security_solution/public/timelines/containers/pinned_event/api.ts index 8eb149f0f43fb..7df7fb7c62b62 100644 --- a/x-pack/plugins/security_solution/public/timelines/containers/pinned_event/api.ts +++ b/x-pack/plugins/security_solution/public/timelines/containers/pinned_event/api.ts @@ -5,7 +5,7 @@ * 2.0. */ import { PINNED_EVENT_URL } from '../../../../common/constants'; -import type { PinnedEvent } from '../../../../common/api/timeline'; +import type { PersistPinnedEventRouteResponse } from '../../../../common/api/timeline'; import { KibanaServices } from '../../../common/lib/kibana'; export const persistPinnedEvent = async ({ @@ -23,10 +23,13 @@ export const persistPinnedEvent = async ({ } catch (err) { return Promise.reject(new Error(`Failed to stringify query: ${JSON.stringify(err)}`)); } - const response = await KibanaServices.get().http.patch(PINNED_EVENT_URL, { - method: 'PATCH', - body: requestBody, - version: '2023-10-31', - }); + const response = await KibanaServices.get().http.patch( + PINNED_EVENT_URL, + { + method: 'PATCH', + body: requestBody, + version: '2023-10-31', + } + ); return response; }; diff --git a/x-pack/plugins/security_solution/public/timelines/store/middlewares/timeline_favorite.ts b/x-pack/plugins/security_solution/public/timelines/store/middlewares/timeline_favorite.ts index 17fd55ee194c1..bf4854e60666b 100644 --- a/x-pack/plugins/security_solution/public/timelines/store/middlewares/timeline_favorite.ts +++ b/x-pack/plugins/security_solution/public/timelines/store/middlewares/timeline_favorite.ts @@ -17,7 +17,7 @@ import { startTimelineSaving, showCallOutUnauthorizedMsg, } from '../actions'; -import type { ResponseFavoriteTimeline } from '../../../../common/api/timeline'; +import type { FavoriteTimelineResponse } from '../../../../common/api/timeline'; import { TimelineTypeEnum } from '../../../../common/api/timeline'; import { persistFavorite } from '../../containers/api'; import { selectTimelineById } from '../selectors'; @@ -49,7 +49,7 @@ export const favoriteTimelineMiddleware: (kibana: CoreStart) => Middleware<{}, S timelineType: timeline.timelineType ?? TimelineTypeEnum.default, }); - const response: ResponseFavoriteTimeline = get('data.persistFavorite', result); + const response: FavoriteTimelineResponse = get('data.persistFavorite', result); if (response.code === 403) { store.dispatch(showCallOutUnauthorizedMsg()); diff --git a/x-pack/plugins/security_solution/public/timelines/store/middlewares/timeline_pinned_event.ts b/x-pack/plugins/security_solution/public/timelines/store/middlewares/timeline_pinned_event.ts index c26c458042dad..8461ed3c2fc17 100644 --- a/x-pack/plugins/security_solution/public/timelines/store/middlewares/timeline_pinned_event.ts +++ b/x-pack/plugins/security_solution/public/timelines/store/middlewares/timeline_pinned_event.ts @@ -5,14 +5,13 @@ * 2.0. */ -import { get, omit } from 'lodash/fp'; +import { omit } from 'lodash/fp'; import type { Action, Middleware } from 'redux'; import type { CoreStart } from '@kbn/core/public'; import type { State } from '../../../common/store/types'; import { selectTimelineById } from '../selectors'; import * as i18n from '../../pages/translations'; -import type { PinnedEventResponse } from '../../../../common/api/timeline'; import { pinEvent, endTimelineSaving, @@ -65,17 +64,17 @@ export const addPinnedEventToTimelineMiddleware: (kibana: CoreStart) => Middlewa timelineId: timeline.savedObjectId, }); - const response: PinnedEventResponse = get('data.persistPinnedEventOnTimeline', result); - if (response && response.code === 403) { + const response = result.data.persistPinnedEventOnTimeline; + if (response && 'code' in response && response.code === 403) { store.dispatch(showCallOutUnauthorizedMsg()); } refreshTimelines(store.getState()); const currentTimeline = selectTimelineById(store.getState(), action.payload.id); - // The response is null in case we unpinned an event. + // The response is null or empty in case we unpinned an event. // In that case we want to remove the locally pinned event. - if (!response) { + if (!response || !('code' in response)) { return store.dispatch( updateTimeline({ id: action.payload.id, diff --git a/x-pack/plugins/security_solution/scripts/openapi/bundle_detections.js b/x-pack/plugins/security_solution/scripts/openapi/bundle_detections.js index 0d503403b5667..7ae72255217e4 100644 --- a/x-pack/plugins/security_solution/scripts/openapi/bundle_detections.js +++ b/x-pack/plugins/security_solution/scripts/openapi/bundle_detections.js @@ -22,13 +22,13 @@ const ROOT = resolve(__dirname, '../..'); includeLabels: ['serverless'], prototypeDocument: { info: { - title: 'Security Solution Detections API (Elastic Cloud Serverless)', + title: 'Security Detections API (Elastic Cloud Serverless)', description: 'You can create rules that automatically turn events and external alerts sent to Elastic Security into detection alerts. These alerts are displayed on the Detections page.', }, tags: [ { - name: 'Security Solution Detections API', + name: 'Security Detections API', description: 'You can create rules that automatically turn events and external alerts sent to Elastic Security into detection alerts. These alerts are displayed on the Detections page.', }, @@ -47,13 +47,13 @@ const ROOT = resolve(__dirname, '../..'); includeLabels: ['ess'], prototypeDocument: { info: { - title: 'Security Solution Detections API (Elastic Cloud and self-hosted)', + title: 'Security Detections API (Elastic Cloud and self-hosted)', description: 'You can create rules that automatically turn events and external alerts sent to Elastic Security into detection alerts. These alerts are displayed on the Detections page.', }, tags: [ { - name: 'Security Solution Detections API', + name: 'Security Detections API', description: 'You can create rules that automatically turn events and external alerts sent to Elastic Security into detection alerts. These alerts are displayed on the Detections page.', }, diff --git a/x-pack/plugins/security_solution/scripts/openapi/bundle_endpoint_management.js b/x-pack/plugins/security_solution/scripts/openapi/bundle_endpoint_management.js index 2a63affc932b7..6ff13e46b0ccd 100644 --- a/x-pack/plugins/security_solution/scripts/openapi/bundle_endpoint_management.js +++ b/x-pack/plugins/security_solution/scripts/openapi/bundle_endpoint_management.js @@ -22,12 +22,12 @@ const ROOT = resolve(__dirname, '../..'); includeLabels: ['serverless'], prototypeDocument: { info: { - title: 'Security Solution Endpoint Management API (Elastic Cloud Serverless)', + title: 'Security Endpoint Management API (Elastic Cloud Serverless)', description: 'Interact with and manage endpoints running the Elastic Defend integration.', }, tags: [ { - name: 'Security Solution Endpoint Management API', + name: 'Security Endpoint Management API', description: 'Interact with and manage endpoints running the Elastic Defend integration.', }, @@ -46,12 +46,12 @@ const ROOT = resolve(__dirname, '../..'); includeLabels: ['ess'], prototypeDocument: { info: { - title: 'Security Solution Endpoint Management API (Elastic Cloud and self-hosted)', + title: 'Security Endpoint Management API (Elastic Cloud and self-hosted)', description: 'Interact with and manage endpoints running the Elastic Defend integration.', }, tags: [ { - name: 'Security Solution Endpoint Management API', + name: 'Security Endpoint Management API', description: 'Interact with and manage endpoints running the Elastic Defend integration.', }, diff --git a/x-pack/plugins/security_solution/scripts/openapi/bundle_entity_analytics.js b/x-pack/plugins/security_solution/scripts/openapi/bundle_entity_analytics.js index 3975e57f1c012..f8464b7dad367 100644 --- a/x-pack/plugins/security_solution/scripts/openapi/bundle_entity_analytics.js +++ b/x-pack/plugins/security_solution/scripts/openapi/bundle_entity_analytics.js @@ -22,12 +22,12 @@ const ROOT = resolve(__dirname, '../..'); includeLabels: ['serverless'], prototypeDocument: { info: { - title: 'Security Solution Entity Analytics API (Elastic Cloud Serverless)', + title: 'Security Entity Analytics API (Elastic Cloud Serverless)', description: '', }, tags: [ { - name: 'Security Solution Entity Analytics API', + name: 'Security Entity Analytics API', description: '', }, ], @@ -45,12 +45,12 @@ const ROOT = resolve(__dirname, '../..'); includeLabels: ['ess'], prototypeDocument: { info: { - title: 'Security Solution Entity Analytics API (Elastic Cloud and self-hosted)', + title: 'Security Entity Analytics API (Elastic Cloud and self-hosted)', description: '', }, tags: [ { - name: 'Security Solution Entity Analytics API', + name: 'Security Entity Analytics API', description: '', }, ], diff --git a/x-pack/plugins/security_solution/scripts/openapi/bundle_timeline.js b/x-pack/plugins/security_solution/scripts/openapi/bundle_timeline.js index a6b4a17d6cae3..507ca29293faf 100644 --- a/x-pack/plugins/security_solution/scripts/openapi/bundle_timeline.js +++ b/x-pack/plugins/security_solution/scripts/openapi/bundle_timeline.js @@ -22,13 +22,13 @@ const ROOT = resolve(__dirname, '../..'); includeLabels: ['serverless'], prototypeDocument: { info: { - title: 'Security Solution Timeline API (Elastic Cloud Serverless)', + title: 'Security Timeline API (Elastic Cloud Serverless)', description: 'You can create Timelines and Timeline templates via the API, as well as import new Timelines from an ndjson file.', }, tags: [ { - name: 'Security Solution Timeline API', + name: 'Security Timeline API', description: 'You can create Timelines and Timeline templates via the API, as well as import new Timelines from an ndjson file.', }, @@ -47,13 +47,13 @@ const ROOT = resolve(__dirname, '../..'); includeLabels: ['ess'], prototypeDocument: { info: { - title: 'Security Solution Timeline API (Elastic Cloud and self-hosted)', + title: 'Security Timeline API (Elastic Cloud and self-hosted)', description: 'You can create Timelines and Timeline templates via the API, as well as import new Timelines from an ndjson file.', }, tags: [ { - name: 'Security Solution Timeline API', + name: 'Security Timeline API', description: 'You can create Timelines and Timeline templates via the API, as well as import new Timelines from an ndjson file.', }, diff --git a/x-pack/plugins/security_solution/server/endpoint/routes/resolver/tree/queries/descendants.ts b/x-pack/plugins/security_solution/server/endpoint/routes/resolver/tree/queries/descendants.ts index 5f19beba4e71d..dcce3bb64d298 100644 --- a/x-pack/plugins/security_solution/server/endpoint/routes/resolver/tree/queries/descendants.ts +++ b/x-pack/plugins/security_solution/server/endpoint/routes/resolver/tree/queries/descendants.ts @@ -90,7 +90,7 @@ export class DescendantsQuery extends BaseResolverQuery { private queryWithAncestryArray(nodes: NodeID[], ancestryField: string, size: number): JsonObject { return { _source: false, - fields: this.resolverFields, + fields: [...this.resolverFields, ancestryField], size, collapse: { field: this.schema.id, @@ -109,7 +109,10 @@ export class DescendantsQuery extends BaseResolverQuery { */ source: ` Map ancestryToIndex = [:]; - List sourceAncestryArray = params._source.${ancestryField}; + if (doc['${ancestryField}'].size() == 0) { + return -1; + } + List sourceAncestryArray = doc['${ancestryField}']; int length = sourceAncestryArray.length; for (int i = 0; i < length; i++) { ancestryToIndex[sourceAncestryArray[i]] = i; diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/asset_criticality/asset_criticality_data_client.test.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/asset_criticality/asset_criticality_data_client.test.ts index 63bcde79cbf9a..ecce17e8f4ee2 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/asset_criticality/asset_criticality_data_client.test.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/asset_criticality/asset_criticality_data_client.test.ts @@ -88,6 +88,7 @@ describe('AssetCriticalityDataClient', () => { ); }); + // QUESTION: This test seems useless? it('requires a query parameter', async () => { await subject.search({ query: { match_all: {} } }); diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/asset_criticality/asset_criticality_data_client.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/asset_criticality/asset_criticality_data_client.ts index 39473c69c5a2e..eb606302bb559 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/asset_criticality/asset_criticality_data_client.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/asset_criticality/asset_criticality_data_client.ts @@ -10,6 +10,7 @@ import type { Logger, ElasticsearchClient } from '@kbn/core/server'; import { mappingFromFieldMap } from '@kbn/alerting-plugin/common'; import type { AuditLogger } from '@kbn/security-plugin-types-server'; import { fromKueryExpression, toElasticsearchQuery } from '@kbn/es-query'; + import type { BulkUpsertAssetCriticalityRecordsResponse, AssetCriticalityUpsert, @@ -17,7 +18,8 @@ import type { import type { AssetCriticalityRecord } from '../../../../common/api/entity_analytics'; import { createOrUpdateIndex } from '../utils/create_or_update_index'; import { getAssetCriticalityIndex } from '../../../../common/entity_analytics/asset_criticality'; -import { assetCriticalityFieldMap } from './constants'; +import type { CriticalityValues } from './constants'; +import { CRITICALITY_VALUES, assetCriticalityFieldMap } from './constants'; import { AssetCriticalityAuditActions } from './audit'; import { AUDIT_CATEGORY, AUDIT_OUTCOME, AUDIT_TYPE } from '../audit'; @@ -34,6 +36,12 @@ type BulkUpsertFromStreamOptions = { recordsStream: NodeJS.ReadableStream; } & Pick[0], 'flushBytes' | 'retries'>; +type StoredAssetCriticalityRecord = { + [K in keyof AssetCriticalityRecord]: K extends 'criticality_level' + ? CriticalityValues + : AssetCriticalityRecord[K]; +}; + const MAX_CRITICALITY_RESPONSE_SIZE = 100_000; const DEFAULT_CRITICALITY_RESPONSE_SIZE = 1_000; @@ -91,6 +99,13 @@ export class AssetCriticalityDataClient { size: Math.min(size, MAX_CRITICALITY_RESPONSE_SIZE), from, sort, + post_filter: { + bool: { + must_not: { + term: { criticality_level: CRITICALITY_VALUES.DELETED }, + }, + }, + }, }); return response; } @@ -154,12 +169,16 @@ export class AssetCriticalityDataClient { const id = createId(idParts); try { - const body = await this.options.esClient.get({ + const { _source: doc } = await this.options.esClient.get({ id, index: this.getIndex(), }); - return body._source; + if (doc?.criticality_level === CRITICALITY_VALUES.DELETED) { + return undefined; + } + + return doc as AssetCriticalityRecord; } catch (err) { if (err.statusCode === 404) { return undefined; @@ -292,10 +311,13 @@ export class AssetCriticalityDataClient { } try { - await this.options.esClient.delete({ + await this.options.esClient.update({ id: createId(idParts), index: this.getIndex(), refresh: refresh ?? false, + doc: { + criticality_level: 'deleted', + }, }); } catch (err) { this.options.logger.error(`Failed to delete asset criticality record: ${err.message}`); diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/asset_criticality/constants.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/asset_criticality/constants.ts index bfc96b5f4b361..577f653a2d136 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/asset_criticality/constants.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/asset_criticality/constants.ts @@ -6,6 +6,9 @@ */ import type { FieldMap } from '@kbn/alerts-as-data-utils'; +import type { AssetCriticalityRecord } from '../../../../common/api/entity_analytics'; + +export type CriticalityValues = AssetCriticalityRecord['criticality_level'] | 'deleted'; export const assetCriticalityFieldMap: FieldMap = { '@timestamp': { @@ -34,3 +37,11 @@ export const assetCriticalityFieldMap: FieldMap = { required: false, }, } as const; + +export const CRITICALITY_VALUES: { readonly [K in CriticalityValues as Uppercase]: K } = { + LOW_IMPACT: 'low_impact', + MEDIUM_IMPACT: 'medium_impact', + HIGH_IMPACT: 'high_impact', + EXTREME_IMPACT: 'extreme_impact', + DELETED: 'deleted', +}; diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/entity_store/definition.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/entity_store/definition.ts index 17412ee7cf716..a72e00bf7aceb 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/entity_store/definition.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/entity_store/definition.ts @@ -39,6 +39,7 @@ export const buildUserEntityDefinition = (space: string): EntityDefinition => entityDefinitionSchema.parse({ id: buildEntityDefinitionId('user', space), name: 'EA User Store', + type: 'user', indexPatterns: ENTITY_STORE_DEFAULT_SOURCE_INDICES, identityFields: ['user.name'], displayNameTemplate: '{{user.name}}', diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/entity_store/entity_store_data_client.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/entity_store/entity_store_data_client.ts index f530706398a96..ac1a99b761ed8 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/entity_store/entity_store_data_client.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/entity_store/entity_store_data_client.ts @@ -12,8 +12,8 @@ import type { SortOrder } from '@elastic/elasticsearch/lib/api/types'; import type { Entity } from '../../../../common/api/entity_analytics/entity_store/entities/common.gen'; import { createQueryFilterClauses } from '../../../utils/build_query'; import type { - InitEntityStoreRequestBody, - InitEntityStoreResponse, + InitEntityEngineRequestBody, + InitEntityEngineResponse, } from '../../../../common/api/entity_analytics/entity_store/engine/init.gen'; import type { @@ -53,8 +53,8 @@ export class EntityStoreDataClient { public async init( entityType: EntityType, - { indexPattern = '', filter = '' }: InitEntityStoreRequestBody - ): Promise { + { indexPattern = '', filter = '' }: InitEntityEngineRequestBody + ): Promise { const definition = getEntityDefinition(entityType, this.options.namespace); this.options.logger.info(`Initializing entity store for ${entityType}`); diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/entity_store/routes/delete.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/entity_store/routes/delete.ts index 44352cfa47c57..b57aa5b992dff 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/entity_store/routes/delete.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/entity_store/routes/delete.ts @@ -10,10 +10,10 @@ import { buildSiemResponse } from '@kbn/lists-plugin/server/routes/utils'; import { transformError } from '@kbn/securitysolution-es-utils'; import { buildRouteValidationWithZod } from '@kbn/zod-helpers'; -import type { DeleteEntityStoreResponse } from '../../../../../common/api/entity_analytics/entity_store/engine/delete.gen'; +import type { DeleteEntityEngineResponse } from '../../../../../common/api/entity_analytics/entity_store/engine/delete.gen'; import { - DeleteEntityStoreRequestQuery, - DeleteEntityStoreRequestParams, + DeleteEntityEngineRequestQuery, + DeleteEntityEngineRequestParams, } from '../../../../../common/api/entity_analytics/entity_store/engine/delete.gen'; import { API_VERSIONS, APP_ID } from '../../../../../common/constants'; import type { EntityAnalyticsRoutesDeps } from '../../types'; @@ -35,13 +35,13 @@ export const deleteEntityEngineRoute = ( version: API_VERSIONS.public.v1, validate: { request: { - query: buildRouteValidationWithZod(DeleteEntityStoreRequestQuery), - params: buildRouteValidationWithZod(DeleteEntityStoreRequestParams), + query: buildRouteValidationWithZod(DeleteEntityEngineRequestQuery), + params: buildRouteValidationWithZod(DeleteEntityEngineRequestParams), }, }, }, - async (context, request, response): Promise> => { + async (context, request, response): Promise> => { const siemResponse = buildSiemResponse(response); try { @@ -52,7 +52,7 @@ export const deleteEntityEngineRoute = ( return response.ok({ body }); } catch (e) { - logger.error('Error in DeleteEntityStore:', e); + logger.error('Error in DeleteEntityEngine:', e); const error = transformError(e); return siemResponse.error({ statusCode: error.statusCode, diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/entity_store/routes/get.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/entity_store/routes/get.ts index 79a74303c49c2..23f013598b476 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/entity_store/routes/get.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/entity_store/routes/get.ts @@ -10,8 +10,8 @@ import { buildSiemResponse } from '@kbn/lists-plugin/server/routes/utils'; import { transformError } from '@kbn/securitysolution-es-utils'; import { buildRouteValidationWithZod } from '@kbn/zod-helpers'; -import type { GetEntityStoreEngineResponse } from '../../../../../common/api/entity_analytics/entity_store/engine/get.gen'; -import { GetEntityStoreEngineRequestParams } from '../../../../../common/api/entity_analytics/entity_store/engine/get.gen'; +import type { GetEntityEngineResponse } from '../../../../../common/api/entity_analytics/entity_store/engine/get.gen'; +import { GetEntityEngineRequestParams } from '../../../../../common/api/entity_analytics/entity_store/engine/get.gen'; import { API_VERSIONS, APP_ID } from '../../../../../common/constants'; import type { EntityAnalyticsRoutesDeps } from '../../types'; @@ -32,16 +32,12 @@ export const getEntityEngineRoute = ( version: API_VERSIONS.public.v1, validate: { request: { - params: buildRouteValidationWithZod(GetEntityStoreEngineRequestParams), + params: buildRouteValidationWithZod(GetEntityEngineRequestParams), }, }, }, - async ( - context, - request, - response - ): Promise> => { + async (context, request, response): Promise> => { const siemResponse = buildSiemResponse(response); try { @@ -50,7 +46,7 @@ export const getEntityEngineRoute = ( return response.ok({ body }); } catch (e) { - logger.error('Error in GetEntityStoreEngine:', e); + logger.error('Error in GetEntityEngine:', e); const error = transformError(e); return siemResponse.error({ statusCode: error.statusCode, diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/entity_store/routes/init.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/entity_store/routes/init.ts index 6159cd584b06d..58b33d9fdf25a 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/entity_store/routes/init.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/entity_store/routes/init.ts @@ -10,10 +10,10 @@ import { buildSiemResponse } from '@kbn/lists-plugin/server/routes/utils'; import { transformError } from '@kbn/securitysolution-es-utils'; import { buildRouteValidationWithZod } from '@kbn/zod-helpers'; -import type { InitEntityStoreResponse } from '../../../../../common/api/entity_analytics/entity_store/engine/init.gen'; +import type { InitEntityEngineResponse } from '../../../../../common/api/entity_analytics/entity_store/engine/init.gen'; import { - InitEntityStoreRequestBody, - InitEntityStoreRequestParams, + InitEntityEngineRequestBody, + InitEntityEngineRequestParams, } from '../../../../../common/api/entity_analytics/entity_store/engine/init.gen'; import { API_VERSIONS, APP_ID } from '../../../../../common/constants'; import type { EntityAnalyticsRoutesDeps } from '../../types'; @@ -35,25 +35,25 @@ export const initEntityEngineRoute = ( version: API_VERSIONS.public.v1, validate: { request: { - params: buildRouteValidationWithZod(InitEntityStoreRequestParams), - body: buildRouteValidationWithZod(InitEntityStoreRequestBody), + params: buildRouteValidationWithZod(InitEntityEngineRequestParams), + body: buildRouteValidationWithZod(InitEntityEngineRequestBody), }, }, }, - async (context, request, response): Promise> => { + async (context, request, response): Promise> => { const siemResponse = buildSiemResponse(response); try { const secSol = await context.securitySolution; - const body: InitEntityStoreResponse = await secSol + const body: InitEntityEngineResponse = await secSol .getEntityStoreDataClient() .init(request.params.entityType, request.body); return response.ok({ body }); } catch (e) { - logger.error('Error in InitEntityStore:', e); + logger.error('Error in InitEntityEngine:', e); const error = transformError(e); return siemResponse.error({ statusCode: error.statusCode, diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/entity_store/routes/list.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/entity_store/routes/list.ts index 53d9a8521ce00..7cec67bcdf5cd 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/entity_store/routes/list.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/entity_store/routes/list.ts @@ -9,7 +9,7 @@ import type { IKibanaResponse, Logger } from '@kbn/core/server'; import { buildSiemResponse } from '@kbn/lists-plugin/server/routes/utils'; import { transformError } from '@kbn/securitysolution-es-utils'; -import type { ListEntityStoreEnginesResponse } from '../../../../../common/api/entity_analytics/entity_store/engine/list.gen'; +import type { ListEntityEnginesResponse } from '../../../../../common/api/entity_analytics/entity_store/engine/list.gen'; import { API_VERSIONS, APP_ID } from '../../../../../common/constants'; import type { EntityAnalyticsRoutesDeps } from '../../types'; @@ -32,11 +32,7 @@ export const listEntityEnginesRoute = ( validate: {}, }, - async ( - context, - request, - response - ): Promise> => { + async (context, request, response): Promise> => { const siemResponse = buildSiemResponse(response); try { @@ -45,7 +41,7 @@ export const listEntityEnginesRoute = ( return response.ok({ body }); } catch (e) { - logger.error('Error in ListEntityStoreEngines:', e); + logger.error('Error in ListEntityEngines:', e); const error = transformError(e); return siemResponse.error({ statusCode: error.statusCode, diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/entity_store/routes/start.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/entity_store/routes/start.ts index 6ec6674a5473d..1872de211cb8f 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/entity_store/routes/start.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/entity_store/routes/start.ts @@ -10,8 +10,8 @@ import { buildSiemResponse } from '@kbn/lists-plugin/server/routes/utils'; import { transformError } from '@kbn/securitysolution-es-utils'; import { buildRouteValidationWithZod } from '@kbn/zod-helpers'; -import type { StartEntityStoreResponse } from '../../../../../common/api/entity_analytics/entity_store/engine/start.gen'; -import { StartEntityStoreRequestParams } from '../../../../../common/api/entity_analytics/entity_store/engine/start.gen'; +import type { StartEntityEngineResponse } from '../../../../../common/api/entity_analytics/entity_store/engine/start.gen'; +import { StartEntityEngineRequestParams } from '../../../../../common/api/entity_analytics/entity_store/engine/start.gen'; import { API_VERSIONS, APP_ID } from '../../../../../common/constants'; import type { EntityAnalyticsRoutesDeps } from '../../types'; import { ENGINE_STATUS } from '../constants'; @@ -33,12 +33,12 @@ export const startEntityEngineRoute = ( version: API_VERSIONS.public.v1, validate: { request: { - params: buildRouteValidationWithZod(StartEntityStoreRequestParams), + params: buildRouteValidationWithZod(StartEntityEngineRequestParams), }, }, }, - async (context, request, response): Promise> => { + async (context, request, response): Promise> => { const siemResponse = buildSiemResponse(response); try { @@ -47,7 +47,7 @@ export const startEntityEngineRoute = ( return response.ok({ body: { started: engine.status === ENGINE_STATUS.STARTED } }); } catch (e) { - logger.error('Error in StartEntityStore:', e); + logger.error('Error in StartEntityEngine:', e); const error = transformError(e); return siemResponse.error({ statusCode: error.statusCode, diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/entity_store/routes/stats.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/entity_store/routes/stats.ts index 1d7534c17f747..9ca3cd906f016 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/entity_store/routes/stats.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/entity_store/routes/stats.ts @@ -10,8 +10,8 @@ import { buildSiemResponse } from '@kbn/lists-plugin/server/routes/utils'; import { transformError } from '@kbn/securitysolution-es-utils'; import { buildRouteValidationWithZod } from '@kbn/zod-helpers'; -import type { GetEntityStoreStatsResponse } from '../../../../../common/api/entity_analytics/entity_store/engine/stats.gen'; -import { GetEntityStoreStatsRequestParams } from '../../../../../common/api/entity_analytics/entity_store/engine/stats.gen'; +import type { GetEntityEngineStatsResponse } from '../../../../../common/api/entity_analytics/entity_store/engine/stats.gen'; +import { GetEntityEngineStatsRequestParams } from '../../../../../common/api/entity_analytics/entity_store/engine/stats.gen'; import { API_VERSIONS, APP_ID } from '../../../../../common/constants'; import type { EntityAnalyticsRoutesDeps } from '../../types'; @@ -32,12 +32,16 @@ export const getEntityEngineStatsRoute = ( version: API_VERSIONS.public.v1, validate: { request: { - params: buildRouteValidationWithZod(GetEntityStoreStatsRequestParams), + params: buildRouteValidationWithZod(GetEntityEngineStatsRequestParams), }, }, }, - async (context, request, response): Promise> => { + async ( + context, + request, + response + ): Promise> => { const siemResponse = buildSiemResponse(response); try { @@ -46,7 +50,7 @@ export const getEntityEngineStatsRoute = ( // return response.ok({ body }); } catch (e) { - logger.error('Error in GetEntityStoreStats:', e); + logger.error('Error in GetEntityEngineStats:', e); const error = transformError(e); return siemResponse.error({ statusCode: error.statusCode, diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/entity_store/routes/stop.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/entity_store/routes/stop.ts index e1ddb464d1204..e1c28bc2cc073 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/entity_store/routes/stop.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/entity_store/routes/stop.ts @@ -10,8 +10,8 @@ import { buildSiemResponse } from '@kbn/lists-plugin/server/routes/utils'; import { transformError } from '@kbn/securitysolution-es-utils'; import { buildRouteValidationWithZod } from '@kbn/zod-helpers'; -import type { StopEntityStoreResponse } from '../../../../../common/api/entity_analytics/entity_store/engine/stop.gen'; -import { StopEntityStoreRequestParams } from '../../../../../common/api/entity_analytics/entity_store/engine/stop.gen'; +import type { StopEntityEngineResponse } from '../../../../../common/api/entity_analytics/entity_store/engine/stop.gen'; +import { StopEntityEngineRequestParams } from '../../../../../common/api/entity_analytics/entity_store/engine/stop.gen'; import { API_VERSIONS, APP_ID } from '../../../../../common/constants'; import type { EntityAnalyticsRoutesDeps } from '../../types'; import { ENGINE_STATUS } from '../constants'; @@ -33,12 +33,12 @@ export const stopEntityEngineRoute = ( version: API_VERSIONS.public.v1, validate: { request: { - params: buildRouteValidationWithZod(StopEntityStoreRequestParams), + params: buildRouteValidationWithZod(StopEntityEngineRequestParams), }, }, }, - async (context, request, response): Promise> => { + async (context, request, response): Promise> => { const siemResponse = buildSiemResponse(response); try { @@ -47,7 +47,7 @@ export const stopEntityEngineRoute = ( return response.ok({ body: { stopped: engine.status === ENGINE_STATUS.STOPPED } }); } catch (e) { - logger.error('Error in StopEntityStore:', e); + logger.error('Error in StopEntityEngine:', e); const error = transformError(e); return siemResponse.error({ statusCode: error.statusCode, diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/risk_engine_data_client.mock.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/risk_engine_data_client.mock.ts index a8d7b7a9c763b..e9819c5b290d3 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/risk_engine_data_client.mock.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/risk_engine_data_client.mock.ts @@ -15,6 +15,9 @@ const createRiskEngineDataClientMock = () => getConfiguration: jest.fn(), getStatus: jest.fn(), init: jest.fn(), + tearDown: jest.fn(), } as unknown as jest.Mocked); -export const riskEngineDataClientMock = { create: createRiskEngineDataClientMock }; +export const riskEngineDataClientMock = { + create: createRiskEngineDataClientMock, +}; diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/risk_engine_data_client.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/risk_engine_data_client.ts index c520e3fa07763..241523f62e12c 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/risk_engine_data_client.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/risk_engine_data_client.ts @@ -10,13 +10,12 @@ import type { TaskManagerStartContract } from '@kbn/task-manager-plugin/server'; import type { AuditLogger } from '@kbn/security-plugin-types-server'; import { RiskEngineStatusEnum } from '../../../../common/api/entity_analytics'; import type { InitRiskEngineResult } from '../../../../common/entity_analytics/risk_engine'; -import { MAX_SPACES_COUNT, RiskScoreEntity } from '../../../../common/entity_analytics/risk_engine'; +import { RiskScoreEntity } from '../../../../common/entity_analytics/risk_engine'; import { removeLegacyTransforms, getLegacyTransforms } from '../utils/transforms'; import { updateSavedObjectAttribute, getConfiguration, initSavedObjects, - getEnabledRiskEngineAmount, deleteSavedObjects, } from './utils/saved_object_configuration'; import { bulkDeleteSavedObjects } from '../../risk_score/prebuilt_saved_objects/helpers/bulk_delete_saved_objects'; @@ -119,7 +118,6 @@ export class RiskEngineDataClient { }) { const riskEngineStatus = await this.getCurrentStatus(); const legacyRiskEngineStatus = await this.getLegacyStatus({ namespace }); - const isMaxAmountOfRiskEnginesReached = await this.getIsMaxAmountOfRiskEnginesReached(); const taskStatus = riskEngineStatus === 'ENABLED' && taskManager @@ -139,7 +137,6 @@ export class RiskEngineDataClient { return { riskEngineStatus, legacyRiskEngineStatus, - isMaxAmountOfRiskEnginesReached, taskStatus, }; } @@ -303,29 +300,6 @@ export class RiskEngineDataClient { return RiskEngineStatusEnum.NOT_INSTALLED; } - private async getIsMaxAmountOfRiskEnginesReached() { - try { - const amountOfEnabledConfigurations = await getEnabledRiskEngineAmount({ - savedObjectsClient: this.options.soClient, - }); - - this.options.auditLogger?.log({ - message: 'System checked if the risk engine is enabled in each space', - event: { - action: RiskEngineAuditActions.RISK_ENGINE_STATUS_FOR_ALL_SPACES_GET, - category: AUDIT_CATEGORY.DATABASE, - type: AUDIT_TYPE.ACCESS, - outcome: AUDIT_OUTCOME.SUCCESS, - }, - }); - - return amountOfEnabledConfigurations >= MAX_SPACES_COUNT; - } catch (e) { - this.options.logger.error(`Error while getting amount of enabled risk engines: ${e.message}`); - return false; - } - } - private async getLegacyStatus({ namespace }: { namespace: string }) { const transforms = await getLegacyTransforms({ namespace, esClient: this.options.esClient }); diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/routes/delete.test.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/routes/delete.test.ts new file mode 100644 index 0000000000000..5c66b70c75c13 --- /dev/null +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/routes/delete.test.ts @@ -0,0 +1,186 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { taskManagerMock } from '@kbn/task-manager-plugin/server/mocks'; +import { RISK_ENGINE_CLEANUP_URL } from '../../../../../common/constants'; +import { + serverMock, + requestContextMock, + requestMock, +} from '../../../detection_engine/routes/__mocks__'; +import { riskEnginePrivilegesMock } from './risk_engine_privileges.mock'; +import { riskEngineDataClientMock } from '../risk_engine_data_client.mock'; +import { riskEngineCleanupRoute } from './delete'; + +describe('risk engine cleanup route', () => { + let server: ReturnType; + let context: ReturnType; + let mockTaskManagerStart: ReturnType; + let mockRiskEngineDataClient: ReturnType; + let getStartServicesMock: jest.Mock; + + beforeEach(() => { + jest.resetAllMocks(); + + server = serverMock.create(); + const { clients } = requestContextMock.createTools(); + mockRiskEngineDataClient = riskEngineDataClientMock.create(); + context = requestContextMock.convertContext( + requestContextMock.create({ + ...clients, + riskEngineDataClient: mockRiskEngineDataClient, + }) + ); + mockTaskManagerStart = taskManagerMock.createStart(); + }); + + const buildRequest = () => { + return requestMock.create({ + method: 'delete', + path: RISK_ENGINE_CLEANUP_URL, + body: {}, + }); + }; + describe('invokes the risk engine cleanup route', () => { + beforeEach(() => { + getStartServicesMock = jest.fn().mockResolvedValue([ + {}, + { + taskManager: mockTaskManagerStart, + security: riskEnginePrivilegesMock.createMockSecurityStartWithFullRiskEngineAccess(), + }, + ]); + riskEngineCleanupRoute(server.router, getStartServicesMock); + }); + + it('should call the router with the correct route and handler', async () => { + const request = buildRequest(); + await server.inject(request, context); + expect(mockRiskEngineDataClient.tearDown).toHaveBeenCalled(); + }); + + it('returns a 200 when cleanup is successful', async () => { + const request = buildRequest(); + const response = await server.inject(request, context); + expect(response.status).toBe(200); + expect(response.body).toEqual({ cleanup_successful: true }); + }); + + it('returns a 400 when cleanup endpoint is called multiple times', async () => { + mockRiskEngineDataClient.tearDown.mockImplementation(async () => { + return [Error('Risk engine is disabled or deleted already.')]; + }); + const request = buildRequest(); + const response = await server.inject(request, context); + expect(response.status).toBe(400); + expect(response.body).toEqual({ + cleanup_successful: false, + errors: [ + { + seq: 1, + error: 'Error: Risk engine is disabled or deleted already.', + }, + ], + status_code: 400, + }); + }); + + it('returns a 500 when cleanup is unsuccessful', async () => { + mockRiskEngineDataClient.tearDown.mockImplementation(() => { + throw new Error('Error tearing down'); + }); + const request = buildRequest(); + const response = await server.inject(request, context); + expect(response.status).toBe(500); + expect(response.body).toEqual({ + errors: { + error: '{}', + seq: 1, + }, + cleanup_successful: false, + status_code: 500, + }); + }); + + it('returns a 500 when cleanup is unsuccessful with multiple errors', async () => { + mockRiskEngineDataClient.tearDown.mockImplementation(async () => { + return [ + Error('Error while removing risk scoring task'), + Error('Error while deleting saved objects'), + Error('Error while removing risk score index'), + ]; + }); + const request = buildRequest(); + const response = await server.inject(request, context); + expect(response.status).toBe(500); + expect(response.body).toEqual({ + errors: [ + { + seq: 1, + error: 'Error: Error while removing risk scoring task', + }, + { + seq: 2, + error: 'Error: Error while deleting saved objects', + }, + { + seq: 3, + error: 'Error: Error while removing risk score index', + }, + ], + cleanup_successful: false, + status_code: 500, + }); + }); + }); + describe('when task manager is unavailable', () => { + beforeEach(() => { + getStartServicesMock = jest.fn().mockResolvedValue([ + {}, + { + security: riskEnginePrivilegesMock.createMockSecurityStartWithFullRiskEngineAccess(), + }, + ]); + riskEngineCleanupRoute(server.router, getStartServicesMock); + }); + + it('returns a 400 when task manager is unavailable', async () => { + const request = buildRequest(); + const response = await server.inject(request, context); + expect(response.status).toBe(400); + expect(response.body).toEqual({ + message: + 'Task Manager is unavailable, but is required by the risk engine. Please enable the taskManager plugin and try again.', + status_code: 400, + }); + }); + }); + + describe('when user does not have the required privileges', () => { + beforeEach(() => { + getStartServicesMock = jest.fn().mockResolvedValue([ + {}, + { + taskManager: mockTaskManagerStart, + security: riskEnginePrivilegesMock.createMockSecurityStartWithNoRiskEngineAccess(), + }, + ]); + riskEngineCleanupRoute(server.router, getStartServicesMock); + }); + + it('returns a 403 when user does not have the required privileges', async () => { + const request = buildRequest(); + const response = await server.inject(request, context); + expect(response.status).toBe(403); + expect(response.body).toEqual({ + message: + 'User is missing risk engine privileges. Missing cluster privileges: manage_index_templates, manage_transform.', + status_code: 403, + }); + }); + }); +}); diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/routes/delete.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/routes/delete.ts new file mode 100644 index 0000000000000..1776ddcca69b1 --- /dev/null +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/routes/delete.ts @@ -0,0 +1,103 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { buildSiemResponse } from '@kbn/lists-plugin/server/routes/utils'; +import type { IKibanaResponse } from '@kbn/core-http-server'; +import { withRiskEnginePrivilegeCheck } from '../risk_engine_privileges'; +import { RISK_ENGINE_CLEANUP_URL, APP_ID, API_VERSIONS } from '../../../../../common/constants'; +import type { EntityAnalyticsRoutesDeps } from '../../types'; +import { RiskEngineAuditActions } from '../audit'; +import { AUDIT_CATEGORY, AUDIT_OUTCOME, AUDIT_TYPE } from '../../audit'; +import { TASK_MANAGER_UNAVAILABLE_ERROR } from './translations'; +import type { CleanUpRiskEngineResponse } from '../../../../../common/api/entity_analytics'; + +export const riskEngineCleanupRoute = ( + router: EntityAnalyticsRoutesDeps['router'], + getStartServices: EntityAnalyticsRoutesDeps['getStartServices'] +) => { + router.versioned + .delete({ + access: 'public', + path: RISK_ENGINE_CLEANUP_URL, + options: { + tags: ['access:securitySolution', `access:${APP_ID}-entity-analytics`], + }, + }) + .addVersion( + { version: API_VERSIONS.public.v1, validate: {} }, + withRiskEnginePrivilegeCheck( + getStartServices, + async (context, request, response): Promise> => { + const siemResponse = buildSiemResponse(response); + const securitySolution = await context.securitySolution; + const [_, { taskManager }] = await getStartServices(); + const riskEngineClient = securitySolution.getRiskEngineDataClient(); + const riskScoreDataClient = securitySolution.getRiskScoreDataClient(); + + if (!taskManager) { + securitySolution.getAuditLogger()?.log({ + message: + 'User attempted to perform a cleanup of risk engine, but the Kibana Task Manager was unavailable', + event: { + action: RiskEngineAuditActions.RISK_ENGINE_REMOVE_TASK, + category: AUDIT_CATEGORY.DATABASE, + type: AUDIT_TYPE.DELETION, + outcome: AUDIT_OUTCOME.FAILURE, + }, + error: { + message: + 'User attempted to perform a cleanup of risk engine, but the Kibana Task Manager was unavailable', + }, + }); + + return siemResponse.error({ + statusCode: 400, + body: TASK_MANAGER_UNAVAILABLE_ERROR, + }); + } + + try { + const errors = await riskEngineClient.tearDown({ + taskManager, + riskScoreDataClient, + }); + if (errors && errors.length > 0) { + return siemResponse.error({ + statusCode: errors.some((error) => + error.message.includes('Risk engine is disabled or deleted already.') + ) + ? 400 + : 500, + body: { + cleanup_successful: false, + errors: errors.map((error, seq) => ({ + seq: seq + 1, + error: error.toString(), + })), + }, + bypassErrorFormat: true, + }); + } else { + return response.ok({ body: { cleanup_successful: true } }); + } + } catch (error) { + return siemResponse.error({ + statusCode: 500, + body: { + cleanup_successful: false, + errors: { + seq: 1, + error: JSON.stringify(error), + }, + }, + bypassErrorFormat: true, + }); + } + } + ) + ); +}; diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/routes/register_risk_engine_routes.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/routes/register_risk_engine_routes.ts index 99b0bbe5a5e87..f4edb7d798188 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/routes/register_risk_engine_routes.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/routes/register_risk_engine_routes.ts @@ -12,6 +12,7 @@ import { riskEnginePrivilegesRoute } from './privileges'; import { riskEngineSettingsRoute } from './settings'; import type { EntityAnalyticsRoutesDeps } from '../../types'; import { riskEngineScheduleNowRoute } from './schedule_now'; +import { riskEngineCleanupRoute } from './delete'; export const registerRiskEngineRoutes = ({ router, @@ -24,4 +25,5 @@ export const registerRiskEngineRoutes = ({ riskEngineScheduleNowRoute(router, getStartServices); riskEngineSettingsRoute(router); riskEnginePrivilegesRoute(router, getStartServices); + riskEngineCleanupRoute(router, getStartServices); }; diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/routes/risk_engine_privileges.mock.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/routes/risk_engine_privileges.mock.ts index 10c772cfcf05e..189e72624c15c 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/routes/risk_engine_privileges.mock.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/routes/risk_engine_privileges.mock.ts @@ -29,6 +29,27 @@ const createMockSecurityStartWithFullRiskEngineAccess = () => { return mockSecurityStart; }; +const createMockSecurityStartWithNoRiskEngineAccess = () => { + const mockSecurityStart = securityMock.createStart(); + + const mockCheckPrivileges = jest.fn().mockResolvedValue({ + hasAllRequested: false, + privileges: { + elasticsearch: { + cluster: [], + index: [], + }, + }, + }); + + mockSecurityStart.authz.checkPrivilegesDynamicallyWithRequest = jest + .fn() + .mockReturnValue(mockCheckPrivileges); + + return mockSecurityStart; +}; + export const riskEnginePrivilegesMock = { createMockSecurityStartWithFullRiskEngineAccess, + createMockSecurityStartWithNoRiskEngineAccess, }; diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/routes/status.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/routes/status.ts index eac63e8a04b6b..9b69ddec6b005 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/routes/status.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/routes/status.ts @@ -35,20 +35,15 @@ export const riskEngineStatusRoute = ( const [_, { taskManager }] = await getStartServices(); try { - const { - riskEngineStatus, - legacyRiskEngineStatus, - isMaxAmountOfRiskEnginesReached, - taskStatus, - } = await riskEngineClient.getStatus({ - namespace: spaceId, - taskManager, - }); + const { riskEngineStatus, legacyRiskEngineStatus, taskStatus } = + await riskEngineClient.getStatus({ + namespace: spaceId, + taskManager, + }); const body: RiskEngineStatusResponse = { risk_engine_status: riskEngineStatus, legacy_risk_engine_status: legacyRiskEngineStatus, - is_max_amount_of_risk_engines_reached: isMaxAmountOfRiskEnginesReached, risk_engine_task_status: taskStatus, }; diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/utils/saved_object_configuration.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/utils/saved_object_configuration.ts index c9ef818aa0d90..4282e0a793f47 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/utils/saved_object_configuration.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/utils/saved_object_configuration.ts @@ -37,18 +37,6 @@ const getConfigurationSavedObject = async ({ return savedObjectsResponse.saved_objects?.[0]; }; -export const getEnabledRiskEngineAmount = async ({ - savedObjectsClient, -}: SavedObjectsClientArg): Promise => { - const savedObjectsResponse = await savedObjectsClient.find({ - type: riskEngineConfigurationTypeName, - namespaces: ['*'], - }); - - return savedObjectsResponse.saved_objects?.filter((config) => config?.attributes?.enabled) - ?.length; -}; - export const updateSavedObjectAttribute = async ({ savedObjectsClient, attributes, diff --git a/x-pack/plugins/security_solution/server/lib/timeline/routes/draft_timelines/clean_draft_timelines/index.ts b/x-pack/plugins/security_solution/server/lib/timeline/routes/draft_timelines/clean_draft_timelines/index.ts index f8b9ad8392982..387720b4a3b4f 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/routes/draft_timelines/clean_draft_timelines/index.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/routes/draft_timelines/clean_draft_timelines/index.ts @@ -7,13 +7,13 @@ import { v4 as uuidv4 } from 'uuid'; import { transformError } from '@kbn/securitysolution-es-utils'; +import { buildRouteValidationWithZod } from '@kbn/zod-helpers'; import type { SecuritySolutionPluginRouter } from '../../../../../types'; import type { ConfigType } from '../../../../..'; import { buildSiemResponse } from '../../../../detection_engine/routes/utils'; import { TIMELINE_DRAFT_URL } from '../../../../../../common/constants'; import { buildFrameworkRequest } from '../../../utils/common'; -import { buildRouteValidationWithExcess } from '../../../../../utils/build_validation/route_validation'; import { getDraftTimeline, resetTimeline, @@ -21,7 +21,10 @@ import { persistTimeline, } from '../../../saved_object/timelines'; import { draftTimelineDefaults } from '../../../utils/default_timeline'; -import { cleanDraftTimelineSchema, TimelineTypeEnum } from '../../../../../../common/api/timeline'; +import { + CleanDraftTimelinesRequestBody, + TimelineTypeEnum, +} from '../../../../../../common/api/timeline'; export const cleanDraftTimelinesRoute = (router: SecuritySolutionPluginRouter, _: ConfigType) => { router.versioned @@ -35,7 +38,7 @@ export const cleanDraftTimelinesRoute = (router: SecuritySolutionPluginRouter, _ .addVersion( { validate: { - request: { body: buildRouteValidationWithExcess(cleanDraftTimelineSchema) }, + request: { body: buildRouteValidationWithZod(CleanDraftTimelinesRequestBody) }, }, version: '2023-10-31', }, diff --git a/x-pack/plugins/security_solution/server/lib/timeline/routes/notes/delete_note.ts b/x-pack/plugins/security_solution/server/lib/timeline/routes/notes/delete_note.ts index 318d8950bc619..92be926453403 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/routes/notes/delete_note.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/routes/notes/delete_note.ts @@ -6,17 +6,17 @@ */ import { transformError } from '@kbn/securitysolution-es-utils'; +import { buildRouteValidationWithZod } from '@kbn/zod-helpers'; import type { SecuritySolutionPluginRouter } from '../../../../types'; import { NOTE_URL } from '../../../../../common/constants'; -import { buildRouteValidationWithExcess } from '../../../../utils/build_validation/route_validation'; import type { ConfigType } from '../../../..'; import { buildSiemResponse } from '../../../detection_engine/routes/utils'; import { buildFrameworkRequest } from '../../utils/common'; -import { deleteNoteSchema } from '../../../../../common/api/timeline'; +import { DeleteNoteRequestBody, type DeleteNoteResponse } from '../../../../../common/api/timeline'; import { deleteNote } from '../../saved_object/notes'; export const deleteNoteRoute = (router: SecuritySolutionPluginRouter, config: ConfigType) => { @@ -31,7 +31,7 @@ export const deleteNoteRoute = (router: SecuritySolutionPluginRouter, config: Co .addVersion( { validate: { - request: { body: buildRouteValidationWithExcess(deleteNoteSchema) }, + request: { body: buildRouteValidationWithZod(DeleteNoteRequestBody) }, }, version: '2023-10-31', }, @@ -40,27 +40,25 @@ export const deleteNoteRoute = (router: SecuritySolutionPluginRouter, config: Co try { const frameworkRequest = await buildFrameworkRequest(context, request); - const noteId = request.body?.noteId ?? ''; - const noteIds = request.body?.noteIds ?? null; - if (noteIds != null) { - await deleteNote({ - request: frameworkRequest, - noteIds, - }); + if (!request.body) { + throw new Error('Missing request body'); + } + let noteIds: string[] = []; + if ('noteId' in request.body) { + noteIds = [request.body.noteId]; + } else if ('noteIds' in request.body && Array.isArray(request.body.noteIds)) { + noteIds = request.body.noteIds; + } - return response.ok({ - body: { data: {} }, - }); - } else { - await deleteNote({ - request: frameworkRequest, - noteIds: [noteId], - }); + await deleteNote({ + request: frameworkRequest, + noteIds, + }); - return response.ok({ - body: { data: {} }, - }); - } + const body: DeleteNoteResponse = { data: {} }; + return response.ok({ + body, + }); } catch (err) { const error = transformError(err); return siemResponse.error({ diff --git a/x-pack/plugins/security_solution/server/lib/timeline/routes/notes/get_notes.test.ts b/x-pack/plugins/security_solution/server/lib/timeline/routes/notes/get_notes.test.ts index db62235ea592f..30ae41c1da820 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/routes/notes/get_notes.test.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/routes/notes/get_notes.test.ts @@ -13,10 +13,10 @@ import { requestMock, } from '../../../detection_engine/routes/__mocks__'; import { NOTE_URL } from '../../../../../common/constants'; -import type { getNotesSchema } from '../../../../../common/api/timeline'; +import type { GetNotesRequestQuery } from '../../../../../common/api/timeline'; import { mockGetCurrentUser } from '../../__mocks__/import_timelines'; -const getAllNotesRequest = (query?: typeof getNotesSchema) => +const getAllNotesRequest = (query?: GetNotesRequestQuery) => requestMock.create({ method: 'get', path: NOTE_URL, diff --git a/x-pack/plugins/security_solution/server/lib/timeline/routes/notes/get_notes.ts b/x-pack/plugins/security_solution/server/lib/timeline/routes/notes/get_notes.ts index 8e8a88a4a6aa9..9cc8435d6aae0 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/routes/notes/get_notes.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/routes/notes/get_notes.ts @@ -7,6 +7,7 @@ import { transformError } from '@kbn/securitysolution-es-utils'; import type { SortOrder } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import { buildRouteValidationWithZod } from '@kbn/zod-helpers'; import type { SecuritySolutionPluginRouter } from '../../../../types'; import { NOTE_URL } from '../../../../../common/constants'; @@ -14,10 +15,9 @@ import type { ConfigType } from '../../../..'; import { buildSiemResponse } from '../../../detection_engine/routes/utils'; import { buildFrameworkRequest } from '../../utils/common'; -import { getNotesSchema } from '../../../../../common/api/timeline'; -import { buildRouteValidationWithExcess } from '../../../../utils/build_validation/route_validation'; import { getAllSavedNote, MAX_UNASSOCIATED_NOTES } from '../../saved_object/notes'; import { noteSavedObjectType } from '../../saved_object_mappings/notes'; +import { GetNotesRequestQuery, type GetNotesResponse } from '../../../../../common/api/timeline'; export const getNotesRoute = (router: SecuritySolutionPluginRouter, _: ConfigType) => { router.versioned @@ -31,7 +31,7 @@ export const getNotesRoute = (router: SecuritySolutionPluginRouter, _: ConfigTyp .addVersion( { validate: { - request: { query: buildRouteValidationWithExcess(getNotesSchema) }, + request: { query: buildRouteValidationWithZod(GetNotesRequestQuery) }, }, version: '2023-10-31', }, @@ -50,8 +50,8 @@ export const getNotesRoute = (router: SecuritySolutionPluginRouter, _: ConfigTyp perPage: MAX_UNASSOCIATED_NOTES, }; const res = await getAllSavedNote(frameworkRequest, options); - - return response.ok({ body: res ?? {} }); + const body: GetNotesResponse = res ?? {}; + return response.ok({ body }); } else { const options = { type: noteSavedObjectType, @@ -60,8 +60,8 @@ export const getNotesRoute = (router: SecuritySolutionPluginRouter, _: ConfigTyp perPage: MAX_UNASSOCIATED_NOTES, }; const res = await getAllSavedNote(frameworkRequest, options); - - return response.ok({ body: res ?? {} }); + const body: GetNotesResponse = res ?? {}; + return response.ok({ body }); } } else { const perPage = queryParams?.perPage ? parseInt(queryParams.perPage, 10) : 10; @@ -80,7 +80,8 @@ export const getNotesRoute = (router: SecuritySolutionPluginRouter, _: ConfigTyp filter, }; const res = await getAllSavedNote(frameworkRequest, options); - return response.ok({ body: res ?? {} }); + const body: GetNotesResponse = res ?? {}; + return response.ok({ body }); } } catch (err) { const error = transformError(err); diff --git a/x-pack/plugins/security_solution/server/lib/timeline/routes/notes/persist_note.ts b/x-pack/plugins/security_solution/server/lib/timeline/routes/notes/persist_note.ts index 1bd91306a7419..7ee0dc886a787 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/routes/notes/persist_note.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/routes/notes/persist_note.ts @@ -6,17 +6,20 @@ */ import { transformError } from '@kbn/securitysolution-es-utils'; +import { buildRouteValidationWithZod } from '@kbn/zod-helpers'; import type { SecuritySolutionPluginRouter } from '../../../../types'; import { NOTE_URL } from '../../../../../common/constants'; -import { buildRouteValidation } from '../../../../utils/build_validation/route_validation'; import type { ConfigType } from '../../../..'; import { buildSiemResponse } from '../../../detection_engine/routes/utils'; import { buildFrameworkRequest } from '../../utils/common'; -import { persistNoteWithoutRefSchema } from '../../../../../common/api/timeline'; +import { + PersistNoteRouteRequestBody, + type PersistNoteRouteResponse, +} from '../../../../../common/api/timeline'; import { persistNote } from '../../saved_object/notes'; export const persistNoteRoute = (router: SecuritySolutionPluginRouter, _: ConfigType) => { @@ -31,7 +34,7 @@ export const persistNoteRoute = (router: SecuritySolutionPluginRouter, _: Config .addVersion( { validate: { - request: { body: buildRouteValidation(persistNoteWithoutRefSchema) }, + request: { body: buildRouteValidationWithZod(PersistNoteRouteRequestBody) }, }, version: '2023-10-31', }, @@ -49,9 +52,10 @@ export const persistNoteRoute = (router: SecuritySolutionPluginRouter, _: Config note, overrideOwner: true, }); + const body: PersistNoteRouteResponse = { data: { persistNote: res } }; return response.ok({ - body: { data: { persistNote: res } }, + body, }); } catch (err) { const error = transformError(err); diff --git a/x-pack/plugins/security_solution/server/lib/timeline/routes/pinned_events/persist_pinned_event.ts b/x-pack/plugins/security_solution/server/lib/timeline/routes/pinned_events/persist_pinned_event.ts index a5739c49a34ea..c1e245cda40fb 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/routes/pinned_events/persist_pinned_event.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/routes/pinned_events/persist_pinned_event.ts @@ -6,17 +6,21 @@ */ import { transformError } from '@kbn/securitysolution-es-utils'; +import { buildRouteValidationWithZod } from '@kbn/zod-helpers'; + import type { SecuritySolutionPluginRouter } from '../../../../types'; import { PINNED_EVENT_URL } from '../../../../../common/constants'; -import { buildRouteValidationWithExcess } from '../../../../utils/build_validation/route_validation'; import type { ConfigType } from '../../../..'; import { buildSiemResponse } from '../../../detection_engine/routes/utils'; import { buildFrameworkRequest } from '../../utils/common'; -import { persistPinnedEventSchema } from '../../../../../common/api/timeline'; +import { + type PersistPinnedEventRouteResponse, + PersistPinnedEventRouteRequestBody, +} from '../../../../../common/api/timeline'; import { persistPinnedEventOnTimeline } from '../../saved_object/pinned_events'; export const persistPinnedEventRoute = ( @@ -34,7 +38,7 @@ export const persistPinnedEventRoute = ( .addVersion( { validate: { - request: { body: buildRouteValidationWithExcess(persistPinnedEventSchema) }, + request: { body: buildRouteValidationWithZod(PersistPinnedEventRouteRequestBody) }, }, version: '2023-10-31', }, @@ -54,8 +58,12 @@ export const persistPinnedEventRoute = ( timelineId ); + const body: PersistPinnedEventRouteResponse = { + data: { persistPinnedEventOnTimeline: res }, + }; + return response.ok({ - body: { data: { persistPinnedEventOnTimeline: res } }, + body, }); } catch (err) { const error = transformError(err); diff --git a/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/delete_timelines/index.ts b/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/delete_timelines/index.ts index 7f6339ee25929..a11b16c96fb1f 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/delete_timelines/index.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/delete_timelines/index.ts @@ -6,9 +6,12 @@ */ import { transformError } from '@kbn/securitysolution-es-utils'; -import { buildRouteValidationWithExcess } from '../../../../../utils/build_validation/route_validation'; +import { buildRouteValidationWithZod } from '@kbn/zod-helpers'; import type { ConfigType } from '../../../../..'; -import { deleteTimelinesSchema } from '../../../../../../common/api/timeline'; +import { + DeleteTimelinesRequestBody, + type DeleteTimelinesResponse, +} from '../../../../../../common/api/timeline'; import type { SecuritySolutionPluginRouter } from '../../../../../types'; import { TIMELINE_URL } from '../../../../../../common/constants'; import { buildSiemResponse } from '../../../../detection_engine/routes/utils'; @@ -29,7 +32,7 @@ export const deleteTimelinesRoute = (router: SecuritySolutionPluginRouter, confi { version: '2023-10-31', validate: { - request: { body: buildRouteValidationWithExcess(deleteTimelinesSchema) }, + request: { body: buildRouteValidationWithZod(DeleteTimelinesRequestBody) }, }, }, async (context, request, response) => { @@ -40,7 +43,8 @@ export const deleteTimelinesRoute = (router: SecuritySolutionPluginRouter, confi const { savedObjectIds, searchIds } = request.body; await deleteTimeline(frameworkRequest, savedObjectIds, searchIds); - return response.ok({ body: { data: { deleteTimeline: true } } }); + const body: DeleteTimelinesResponse = { data: { deleteTimeline: true } }; + return response.ok({ body }); } catch (err) { const error = transformError(err); return siemResponse.error({ diff --git a/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/export_timelines/index.test.ts b/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/export_timelines/index.test.ts index 13b6e0f68fefc..ade95ba75c837 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/export_timelines/index.test.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/export_timelines/index.test.ts @@ -93,9 +93,7 @@ describe('export timelines', () => { }); const result = server.validate(request); - expect(result.badRequest.mock.calls[0][0]).toEqual( - 'Invalid value {"id":"someId"}, excess properties: ["id"]' - ); + expect(result.badRequest.mock.calls[0][0]).toEqual('file_name: Required'); }); test('return validation error for request params', async () => { @@ -107,9 +105,7 @@ describe('export timelines', () => { }); const result = server.validate(request); - expect(result.badRequest.mock.calls[0][0]).toEqual( - 'Invalid value "someId" supplied to "ids"' - ); + expect(result.badRequest.mock.calls[0][0]).toEqual('ids: Expected array, received string'); }); }); }); diff --git a/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/export_timelines/index.ts b/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/export_timelines/index.ts index 7af6b7be0cdd0..163b212840423 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/export_timelines/index.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/export_timelines/index.ts @@ -6,16 +6,16 @@ */ import { transformError } from '@kbn/securitysolution-es-utils'; +import { buildRouteValidationWithZod } from '@kbn/zod-helpers'; import { TIMELINE_EXPORT_URL } from '../../../../../../common/constants'; import type { SecuritySolutionPluginRouter } from '../../../../../types'; import type { ConfigType } from '../../../../../config'; import { buildSiemResponse } from '../../../../detection_engine/routes/utils'; import { - exportTimelinesQuerySchema, - exportTimelinesRequestBodySchema, + ExportTimelinesRequestQuery, + ExportTimelinesRequestBody, } from '../../../../../../common/api/timeline'; -import { buildRouteValidationWithExcess } from '../../../../../utils/build_validation/route_validation'; import { buildFrameworkRequest } from '../../../utils/common'; import { getExportTimelineByObjectIds } from './helpers'; @@ -35,8 +35,8 @@ export const exportTimelinesRoute = (router: SecuritySolutionPluginRouter, confi { validate: { request: { - query: buildRouteValidationWithExcess(exportTimelinesQuerySchema), - body: buildRouteValidationWithExcess(exportTimelinesRequestBodySchema), + query: buildRouteValidationWithZod(ExportTimelinesRequestQuery), + body: buildRouteValidationWithZod(ExportTimelinesRequestBody), }, }, version: '2023-10-31', diff --git a/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/persist_favorite/index.ts b/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/persist_favorite/index.ts index f53acf25803a8..b8416b9ffe7bc 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/persist_favorite/index.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/routes/timelines/persist_favorite/index.ts @@ -6,18 +6,22 @@ */ import { transformError } from '@kbn/securitysolution-es-utils'; +import { buildRouteValidationWithZod } from '@kbn/zod-helpers'; import type { SecuritySolutionPluginRouter } from '../../../../../types'; import { TIMELINE_FAVORITE_URL } from '../../../../../../common/constants'; -import { buildRouteValidationWithExcess } from '../../../../../utils/build_validation/route_validation'; import type { ConfigType } from '../../../../..'; import { buildSiemResponse } from '../../../../detection_engine/routes/utils'; import { buildFrameworkRequest } from '../../../utils/common'; import { persistFavorite } from '../../../saved_object/timelines'; -import { TimelineTypeEnum, persistFavoriteSchema } from '../../../../../../common/api/timeline'; +import { + type PersistFavoriteRouteResponse, + PersistFavoriteRouteRequestBody, + TimelineTypeEnum, +} from '../../../../../../common/api/timeline'; export const persistFavoriteRoute = (router: SecuritySolutionPluginRouter, _: ConfigType) => { router.versioned @@ -32,7 +36,7 @@ export const persistFavoriteRoute = (router: SecuritySolutionPluginRouter, _: Co { version: '2023-10-31', validate: { - request: { body: buildRouteValidationWithExcess(persistFavoriteSchema) }, + request: { body: buildRouteValidationWithZod(PersistFavoriteRouteRequestBody) }, }, }, async (context, request, response) => { @@ -51,12 +55,14 @@ export const persistFavoriteRoute = (router: SecuritySolutionPluginRouter, _: Co timelineType || TimelineTypeEnum.default ); - return response.ok({ - body: { - data: { - persistFavorite: timeline, - }, + const body: PersistFavoriteRouteResponse = { + data: { + persistFavorite: timeline, }, + }; + + return response.ok({ + body, }); } catch (err) { const error = transformError(err); diff --git a/x-pack/plugins/security_solution/server/lib/timeline/saved_object/notes/saved_object.ts b/x-pack/plugins/security_solution/server/lib/timeline/saved_object/notes/saved_object.ts index ff277a4bea9e0..300903f8b22ee 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/saved_object/notes/saved_object.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/saved_object/notes/saved_object.ts @@ -22,6 +22,7 @@ import type { BareNote, BareNoteWithoutExternalRefs, ResponseNote, + GetNotesResult, } from '../../../../../common/api/timeline'; import { SavedObjectNoteRuntimeType } from '../../../../../common/types/timeline/note/saved_object'; import type { SavedObjectNoteWithoutExternalRefs } from '../../../../../common/types/timeline/note/saved_object'; @@ -133,7 +134,7 @@ export const createNote = async ({ noteId: string | null; note: BareNote | BareNoteWithoutExternalRefs; overrideOwner?: boolean; -}) => { +}): Promise => { const savedObjectsClient = (await request.context.core).savedObjects.client; const userInfo = request.user; @@ -201,7 +202,7 @@ export const updateNote = async ({ noteId: string; note: BareNote | BareNoteWithoutExternalRefs; overrideOwner?: boolean; -}) => { +}): Promise => { const savedObjectsClient = (await request.context.core).savedObjects.client; const userInfo = request.user; @@ -261,7 +262,7 @@ const getSavedNote = async (request: FrameworkRequest, NoteId: string) => { export const getAllSavedNote = async ( request: FrameworkRequest, options: SavedObjectsFindOptions -) => { +): Promise => { const savedObjectsClient = (await request.context.core).savedObjects.client; const savedObjects = await savedObjectsClient.find(options); diff --git a/x-pack/plugins/security_solution/server/lib/timeline/saved_object/pinned_events/index.ts b/x-pack/plugins/security_solution/server/lib/timeline/saved_object/pinned_events/index.ts index 4cb37fd6d6d89..5181a099ae7fb 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/saved_object/pinned_events/index.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/saved_object/pinned_events/index.ts @@ -17,8 +17,7 @@ import { UNAUTHENTICATED_USER } from '../../../../../common/constants'; import type { BarePinnedEvent, PinnedEvent, - PinnedEventResponse, - BarePinnedEventWithoutExternalRefs, + PersistPinnedEventResponse, } from '../../../../../common/api/timeline'; import { SavedObjectPinnedEventRuntimeType } from '../../../../../common/types/timeline/pinned_event/saved_object'; import type { SavedObjectPinnedEventWithoutExternalRefs } from '../../../../../common/types/timeline/pinned_event/saved_object'; @@ -77,7 +76,7 @@ export const persistPinnedEventOnTimeline = async ( pinnedEventId: string | null, // pinned event saved object id eventId: string, timelineId: string -): Promise => { +): Promise => { try { if (pinnedEventId != null) { // Delete Pinned Event on Timeline @@ -111,9 +110,6 @@ export const persistPinnedEventOnTimeline = async ( code: 403, message: err.message, pinnedEventId: eventId, - timelineId: '', - version: '', - eventId: '', } : null; } @@ -140,7 +136,7 @@ const createPinnedEvent = async ({ request: FrameworkRequest; eventId: string; timelineId: string; -}): Promise => { +}): Promise => { const savedObjectsClient = (await request.context.core).savedObjects.client; const savedPinnedEvent: BarePinnedEvent = { @@ -151,7 +147,7 @@ const createPinnedEvent = async ({ const pinnedEventWithCreator = pickSavedPinnedEvent(null, savedPinnedEvent, request.user); const { transformedFields: migratedAttributes, references } = - pinnedEventFieldsMigrator.extractFieldsToReferences({ + pinnedEventFieldsMigrator.extractFieldsToReferences>({ data: pinnedEventWithCreator, }); diff --git a/x-pack/plugins/security_solution/server/lib/timeline/saved_object/timelines/index.ts b/x-pack/plugins/security_solution/server/lib/timeline/saved_object/timelines/index.ts index 71d61c22ab33c..08eeda3d8ab56 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/saved_object/timelines/index.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/saved_object/timelines/index.ts @@ -23,7 +23,7 @@ import type { ExportTimelineNotFoundError, PageInfoTimeline, ResponseTimelines, - ResponseFavoriteTimeline, + FavoriteTimelineResponse, ResponseTimeline, SortTimeline, TimelineResult, @@ -312,7 +312,7 @@ export const persistFavorite = async ( templateTimelineId: string | null, templateTimelineVersion: number | null, timelineType: TimelineType -): Promise => { +): Promise => { const userName = request.user?.username ?? UNAUTHENTICATED_USER; const fullName = request.user?.full_name ?? ''; try { diff --git a/x-pack/plugins/security_solution_ess/public/navigation/index.ts b/x-pack/plugins/security_solution_ess/public/navigation/index.ts index b32adde0e211c..9b28bef8c403d 100644 --- a/x-pack/plugins/security_solution_ess/public/navigation/index.ts +++ b/x-pack/plugins/security_solution_ess/public/navigation/index.ts @@ -7,11 +7,9 @@ import type { Services } from '../common/services'; import { subscribeBreadcrumbs } from './breadcrumbs'; -import { enableManagementCardsLanding } from './management_cards'; import { initSideNavigation } from './side_navigation'; export const startNavigation = (services: Services) => { initSideNavigation(services); subscribeBreadcrumbs(services); - enableManagementCardsLanding(services); }; diff --git a/x-pack/plugins/security_solution_ess/public/navigation/management_cards.ts b/x-pack/plugins/security_solution_ess/public/navigation/management_cards.ts deleted file mode 100644 index c2b302956384a..0000000000000 --- a/x-pack/plugins/security_solution_ess/public/navigation/management_cards.ts +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ -import type { CardNavExtensionDefinition } from '@kbn/management-cards-navigation'; -import { - getNavigationPropsFromId, - SecurityPageName, - ExternalPageName, -} from '@kbn/security-solution-navigation'; -import { combineLatestWith } from 'rxjs'; -import type { Services } from '../common/services'; - -const SecurityManagementCards = new Map([ - [ExternalPageName.visualize, 'content'], - [ExternalPageName.maps, 'content'], - [SecurityPageName.entityAnalyticsManagement, 'alerts'], - [SecurityPageName.entityAnalyticsAssetClassification, 'alerts'], -]); -export const enableManagementCardsLanding = (services: Services) => { - const { securitySolution, management, application, navigation } = services; - - securitySolution - .getNavLinks$() - .pipe(combineLatestWith(navigation.isSolutionNavEnabled$)) - .subscribe(([navLinks, isSolutionNavEnabled]) => { - const cardNavDefinitions = navLinks.reduce>( - (acc, navLink) => { - if (SecurityManagementCards.has(navLink.id)) { - const { appId, deepLinkId, path } = getNavigationPropsFromId(navLink.id); - acc[navLink.id] = { - category: SecurityManagementCards.get(navLink.id) ?? 'other', - title: navLink.title, - description: navLink.description ?? '', - icon: navLink.landingIcon ?? '', - href: application.getUrlForApp(appId, { deepLinkId, path }), - skipValidation: true, - }; - } - return acc; - }, - {} - ); - - management.setupCardsNavigation({ - enabled: isSolutionNavEnabled, - extendCardNavDefinitions: cardNavDefinitions, - }); - }); -}; diff --git a/x-pack/plugins/security_solution_ess/tsconfig.json b/x-pack/plugins/security_solution_ess/tsconfig.json index f38811b701391..6409a15bd7d27 100644 --- a/x-pack/plugins/security_solution_ess/tsconfig.json +++ b/x-pack/plugins/security_solution_ess/tsconfig.json @@ -24,7 +24,6 @@ "@kbn/security-solution-upselling", "@kbn/i18n", "@kbn/navigation-plugin", - "@kbn/management-cards-navigation", "@kbn/management-plugin", "@kbn/core-chrome-browser", ] diff --git a/x-pack/plugins/spaces/common/constants.ts b/x-pack/plugins/spaces/common/constants.ts index d70c332fb62ab..bbbe38451fedf 100644 --- a/x-pack/plugins/spaces/common/constants.ts +++ b/x-pack/plugins/spaces/common/constants.ts @@ -31,3 +31,15 @@ export const MAX_SPACE_INITIALS = 2; * The path to enter a space. */ export const ENTER_SPACE_PATH = '/spaces/enter'; + +/** + * The 'classic' solution view is the default, non-project type of solution view + */ +export const SOLUTION_VIEW_CLASSIC = 'classic' as const; + +/** + * The feature privileges constants are used to identify the granularity of the configured feature visibility + */ +export const FEATURE_PRIVILEGES_ALL = 'all' as const; +export const FEATURE_PRIVILEGES_READ = 'read' as const; +export const FEATURE_PRIVILEGES_CUSTOM = 'custom' as const; diff --git a/x-pack/plugins/spaces/common/types/space/v1.ts b/x-pack/plugins/spaces/common/types/space/v1.ts index 9ba2deb09aaa2..ebd841e914e69 100644 --- a/x-pack/plugins/spaces/common/types/space/v1.ts +++ b/x-pack/plugins/spaces/common/types/space/v1.ts @@ -7,7 +7,9 @@ import type { OnBoardingDefaultSolution } from '@kbn/cloud-plugin/common'; -export type SolutionView = OnBoardingDefaultSolution | 'classic'; +import type { SOLUTION_VIEW_CLASSIC } from '../../constants'; + +export type SolutionView = OnBoardingDefaultSolution | typeof SOLUTION_VIEW_CLASSIC; /** * A Space. diff --git a/x-pack/plugins/spaces/public/constants.ts b/x-pack/plugins/spaces/public/constants.ts index 64781228d4f43..09bab1124f27d 100644 --- a/x-pack/plugins/spaces/public/constants.ts +++ b/x-pack/plugins/spaces/public/constants.ts @@ -13,7 +13,7 @@ export const getSpacesFeatureDescription = () => { if (!spacesFeatureDescription) { spacesFeatureDescription = i18n.translate('xpack.spaces.featureDescription', { defaultMessage: - 'Organize your dashboards and other saved objects into meaningful categories.', + 'Organize Kibana into spaces with dedicated navigation, privileges and objects.', }); } return spacesFeatureDescription; diff --git a/x-pack/plugins/spaces/public/management/components/customize_space/__snapshots__/customize_space.test.tsx.snap b/x-pack/plugins/spaces/public/management/components/customize_space/__snapshots__/customize_space.test.tsx.snap index 7eac1c7499919..d7527e300eece 100644 --- a/x-pack/plugins/spaces/public/management/components/customize_space/__snapshots__/customize_space.test.tsx.snap +++ b/x-pack/plugins/spaces/public/management/components/customize_space/__snapshots__/customize_space.test.tsx.snap @@ -5,7 +5,7 @@ exports[`renders correctly 1`] = ` dataTestSubj="generalPanel" > interface Props { validator: SpaceValidator; - space: FormValues; + space: CustomizeSpaceFormValues; editingExistingSpace: boolean; - onChange: (space: FormValues) => void; + onChange: (space: CustomizeSpaceFormValues) => void; title?: string; } @@ -71,7 +71,7 @@ export class CustomizeSpace extends Component { description={i18n.translate( 'xpack.spaces.management.manageSpacePage.describeSpaceDescription', { - defaultMessage: "Give your space a name that's memorable.", + defaultMessage: 'Give your space a meaningful name and description.', } )} fullWidth @@ -258,7 +258,7 @@ export class CustomizeSpace extends Component { }); }; - public onAvatarChange = (space: FormValues) => { + public onAvatarChange = (space: CustomizeSpaceFormValues) => { this.props.onChange(space); }; } diff --git a/x-pack/plugins/spaces/public/management/components/customize_space/customize_space_avatar.tsx b/x-pack/plugins/spaces/public/management/components/customize_space/customize_space_avatar.tsx index 4faa29d77e037..1a317a4fe9e9a 100644 --- a/x-pack/plugins/spaces/public/management/components/customize_space/customize_space_avatar.tsx +++ b/x-pack/plugins/spaces/public/management/components/customize_space/customize_space_avatar.tsx @@ -19,12 +19,12 @@ import { i18n } from '@kbn/i18n'; import { MAX_SPACE_INITIALS } from '../../../../common'; import { encode, imageTypes } from '../../../../common/lib/dataurl'; -import type { FormValues } from '../../edit_space/manage_space_page'; import type { SpaceValidator } from '../../lib'; +import type { CustomizeSpaceFormValues } from '../../types'; interface Props { - space: FormValues; - onChange: (space: FormValues) => void; + space: CustomizeSpaceFormValues; + onChange: (space: CustomizeSpaceFormValues) => void; validator: SpaceValidator; } @@ -127,7 +127,7 @@ export class CustomizeSpaceAvatar extends Component { onChange={(avatarType: string) => this.props.onChange({ ...space, - avatarType: avatarType as FormValues['avatarType'], + avatarType: avatarType as CustomizeSpaceFormValues['avatarType'], }) } buttonSize="m" diff --git a/x-pack/plugins/spaces/public/management/components/solution_view/solution_view.tsx b/x-pack/plugins/spaces/public/management/components/solution_view/solution_view.tsx index 9d7ca7140956c..c336791991df4 100644 --- a/x-pack/plugins/spaces/public/management/components/solution_view/solution_view.tsx +++ b/x-pack/plugins/spaces/public/management/components/solution_view/solution_view.tsx @@ -153,7 +153,7 @@ export const SolutionView: FunctionComponent = ({ placeholder={i18n.translate( 'xpack.spaces.management.navigation.solutionViewDefaultValue', { - defaultMessage: 'Classic (Default)', + defaultMessage: 'Select view', } )} isInvalid={validator.validateSolutionView(space, isEditing).isInvalid} diff --git a/x-pack/plugins/spaces/public/management/edit_space/manage_space_page.test.tsx b/x-pack/plugins/spaces/public/management/create_space/create_space_page.test.tsx similarity index 98% rename from x-pack/plugins/spaces/public/management/edit_space/manage_space_page.test.tsx rename to x-pack/plugins/spaces/public/management/create_space/create_space_page.test.tsx index 9fd90d739df41..4c8617ff007b8 100644 --- a/x-pack/plugins/spaces/public/management/edit_space/manage_space_page.test.tsx +++ b/x-pack/plugins/spaces/public/management/create_space/create_space_page.test.tsx @@ -18,7 +18,7 @@ import { KibanaFeature } from '@kbn/features-plugin/public'; import { featuresPluginMock } from '@kbn/features-plugin/public/mocks'; import { findTestSubject, mountWithIntl } from '@kbn/test-jest-helpers'; -import { ManageSpacePage } from './manage_space_page'; +import { CreateSpacePage } from './create_space_page'; import type { SolutionView, Space } from '../../../common/types/latest'; import { EventTracker } from '../../analytics'; import type { SpacesManager } from '../../spaces_manager'; @@ -70,7 +70,7 @@ describe('ManageSpacePage', () => { spacesManager.getActiveSpace = jest.fn().mockResolvedValue(space); const wrapper = mountWithIntl( - { spacesManager.getActiveSpace = jest.fn().mockResolvedValue(space); const wrapper = mountWithIntl( - { spacesManager.getActiveSpace = jest.fn().mockResolvedValue(space); const wrapper = mountWithIntl( - { spacesManager.getActiveSpace = jest.fn().mockResolvedValue(space); const wrapper = mountWithIntl( - { spacesManager.getActiveSpace = jest.fn().mockResolvedValue(space); const wrapper = mountWithIntl( - { spacesManager.getActiveSpace = jest.fn().mockResolvedValue(space); const wrapper = mountWithIntl( - { const spacesManager = spacesManagerMock.create(); const wrapper = mountWithIntl( - { const onLoadSpace = jest.fn(); const wrapper = mountWithIntl( - { const onLoadSpace = jest.fn(); const wrapper = mountWithIntl( - { const notifications = notificationServiceMock.createStartContract(); const wrapper = mountWithIntl( - Promise.reject(error)} notifications={notifications} @@ -542,7 +542,7 @@ describe('ManageSpacePage', () => { spacesManager.getActiveSpace = jest.fn().mockResolvedValue(space); const wrapper = mountWithIntl( - { spacesManager.getActiveSpace = jest.fn().mockResolvedValue(space); const wrapper = mountWithIntl( - { - customIdentifier?: boolean; - avatarType?: 'initials' | 'image'; - customAvatarInitials?: boolean; - customAvatarColor?: boolean; -} +import type { CustomizeSpaceFormValues } from '../types'; interface Props { getFeatures: FeaturesPluginStart['getFeatures']; @@ -62,7 +56,7 @@ interface Props { } interface State { - space: FormValues; + space: CustomizeSpaceFormValues; features: KibanaFeature[]; originalSpace?: Partial; showAlteringActiveSpaceDialog: boolean; @@ -77,7 +71,7 @@ interface State { }; } -export class ManageSpacePage extends Component { +export class CreateSpacePage extends Component { private readonly validator: SpaceValidator; constructor(props: Props) { @@ -189,7 +183,7 @@ export class ManageSpacePage extends Component { const { showAlteringActiveSpaceDialog } = this.state; return ( -
      +
      { this.onSpaceChange(space); }; - public onSpaceChange = (updatedSpace: FormValues) => { + public onSpaceChange = (updatedSpace: CustomizeSpaceFormValues) => { this.setState({ space: updatedSpace, }); diff --git a/x-pack/plugins/spaces/public/management/create_space/index.ts b/x-pack/plugins/spaces/public/management/create_space/index.ts new file mode 100644 index 0000000000000..df9774f722dd3 --- /dev/null +++ b/x-pack/plugins/spaces/public/management/create_space/index.ts @@ -0,0 +1,8 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export { CreateSpacePage } from './create_space_page'; diff --git a/x-pack/plugins/spaces/public/management/edit_space/constants.ts b/x-pack/plugins/spaces/public/management/edit_space/constants.ts new file mode 100644 index 0000000000000..21e10c547800f --- /dev/null +++ b/x-pack/plugins/spaces/public/management/edit_space/constants.ts @@ -0,0 +1,10 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export const TAB_ID_CONTENT = 'content'; +export const TAB_ID_ROLES = 'roles'; +export const TAB_ID_GENERAL = 'general'; diff --git a/x-pack/plugins/spaces/public/management/edit_space/edit_space.tsx b/x-pack/plugins/spaces/public/management/edit_space/edit_space.tsx new file mode 100644 index 0000000000000..cd2bd76a57928 --- /dev/null +++ b/x-pack/plugins/spaces/public/management/edit_space/edit_space.tsx @@ -0,0 +1,283 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { + EuiBadge, + EuiButton, + EuiFlexGroup, + EuiFlexItem, + EuiLoadingSpinner, + EuiSpacer, + EuiTab, + EuiTabs, + EuiText, + EuiTitle, +} from '@elastic/eui'; +import React, { lazy, Suspense, useEffect, useState } from 'react'; +import type { FC } from 'react'; + +import type { ScopedHistory } from '@kbn/core/public'; +import type { FeaturesPluginStart, KibanaFeature } from '@kbn/features-plugin/public'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { reactRouterNavigate } from '@kbn/kibana-react-plugin/public'; +import type { Role } from '@kbn/security-plugin-types-common'; + +import { TAB_ID_CONTENT, TAB_ID_GENERAL, TAB_ID_ROLES } from './constants'; +import { handleApiError } from './handle_api_error'; +import { useTabs } from './hooks/use_tabs'; +import { useEditSpaceServices, useEditSpaceStore } from './provider'; +import { addSpaceIdToPath, ENTER_SPACE_PATH, type Space } from '../../../common'; +import { SOLUTION_VIEW_CLASSIC } from '../../../common/constants'; +import { getSpaceAvatarComponent } from '../../space_avatar'; +import { SpaceSolutionBadge } from '../../space_solution_badge'; + +// No need to wrap LazySpaceAvatar in an error boundary, because it is one of the first chunks loaded when opening Kibana. +const LazySpaceAvatar = lazy(() => + getSpaceAvatarComponent().then((component) => ({ default: component })) +); + +const getSelectedTabId = (canUserViewRoles: boolean, selectedTabId?: string) => { + // Validation of the selectedTabId routing parameter, default to the Content tab + return selectedTabId && + [TAB_ID_CONTENT, canUserViewRoles ? TAB_ID_ROLES : null].filter(Boolean).includes(selectedTabId) + ? selectedTabId + : TAB_ID_GENERAL; +}; + +interface PageProps { + spaceId?: string; + history: ScopedHistory; + selectedTabId?: string; + getFeatures: FeaturesPluginStart['getFeatures']; + onLoadSpace: (space: Space) => void; + allowFeatureVisibility: boolean; + allowSolutionVisibility: boolean; +} + +export const EditSpace: FC = ({ + spaceId, + getFeatures, + history, + onLoadSpace, + selectedTabId: _selectedTabId, + ...props +}) => { + const { state, dispatch } = useEditSpaceStore(); + const { invokeClient } = useEditSpaceServices(); + const { spacesManager, capabilities, serverBasePath, logger, notifications } = + useEditSpaceServices(); + const [space, setSpace] = useState(null); + const [userActiveSpace, setUserActiveSpace] = useState(null); + const [features, setFeatures] = useState(null); + const [isLoadingSpace, setIsLoadingSpace] = useState(true); + const [isLoadingFeatures, setIsLoadingFeatures] = useState(true); + const [isLoadingRoles, setIsLoadingRoles] = useState(true); + const selectedTabId = getSelectedTabId(Boolean(capabilities?.roles?.view), _selectedTabId); + const [tabs, selectedTabContent] = useTabs({ + space, + features, + rolesCount: state.roles.size, + capabilities, + history, + currentSelectedTabId: selectedTabId, + ...props, + }); + + useEffect(() => { + if (!spaceId) { + return; + } + + const getSpaceInfo = async () => { + // active space: the space that is active in the user's session + // current space: the space being edited by the user + const [activeSpace, currentSpace] = await Promise.all([ + spacesManager.getActiveSpace(), + spacesManager.getSpace(spaceId), + ]); + + setSpace(currentSpace); + setUserActiveSpace(activeSpace); + setIsLoadingSpace(false); + }; + + getSpaceInfo().catch((error) => + handleApiError(error, { logger, toasts: notifications.toasts }) + ); + }, [spaceId, spacesManager, logger, notifications.toasts]); + + // Load roles to show the count of assigned roles as a badge in the "Assigned roles" tab title + useEffect(() => { + if (!spaceId) { + return; + } + + const getRoles = async () => { + await invokeClient(async (clients) => { + let result: Role[] = []; + try { + result = await clients.spacesManager.getRolesForSpace(spaceId); + } catch (error) { + const message = error?.body?.message ?? error.toString(); + const statusCode = error?.body?.statusCode ?? null; + if (statusCode === 403) { + logger.error('Insufficient permissions to get list of roles for the space'); + logger.error(message); + } else { + logger.error('Encountered error while getting list of roles for space!'); + logger.error(error); + } + dispatch({ type: 'fetch_roles_error', payload: true }); + } + dispatch({ type: 'update_roles', payload: result }); + }); + + setIsLoadingRoles(false); + }; + + if (!state.roles.size && !state.fetchRolesError) { + getRoles(); + } + }, [dispatch, invokeClient, spaceId, state.roles, state.fetchRolesError, logger]); + + useEffect(() => { + const _getFeatures = async () => { + const result = await getFeatures(); + setFeatures(result); + setIsLoadingFeatures(false); + }; + _getFeatures().catch((error) => + handleApiError(error, { logger, toasts: notifications.toasts }) + ); + }, [getFeatures, logger, notifications.toasts]); + + useEffect(() => { + if (space) { + onLoadSpace?.(space); + } + }, [onLoadSpace, space]); + + if (!space) { + return null; + } + + if (isLoadingSpace || isLoadingFeatures || isLoadingRoles) { + return ( + + + + + + ); + } + + const HeaderAvatar = () => { + return ( + }> + + + ); + }; + + const { id, solution: spaceSolution } = space; + const solution = spaceSolution ?? SOLUTION_VIEW_CLASSIC; + const shouldShowSolutionBadge = + props.allowSolutionVisibility || solution !== SOLUTION_VIEW_CLASSIC; + + return ( +
      + + + + + + + + + + + + +

      {space.name}

      +
      +
      + + + {userActiveSpace?.id !== id ? ( + + + + ) : null} + + +
      +
      + +
      + {shouldShowSolutionBadge ? ( + + ) : null} + {userActiveSpace?.id === id ? ( + + + + ) : null} +
      +
      +
      +
      +
      +
      + + +

      {space.description}

      +
      +
      +
      + + + + + {tabs.map((tab, index) => ( + + {tab.name} + + ))} + + + {selectedTabContent ?? null} + +
      + ); +}; diff --git a/x-pack/plugins/spaces/public/management/edit_space/edit_space_content_tab.test.tsx b/x-pack/plugins/spaces/public/management/edit_space/edit_space_content_tab.test.tsx new file mode 100644 index 0000000000000..209f65b9a6783 --- /dev/null +++ b/x-pack/plugins/spaces/public/management/edit_space/edit_space_content_tab.test.tsx @@ -0,0 +1,125 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { render, screen, waitFor } from '@testing-library/react'; +import React from 'react'; + +import { + httpServiceMock, + i18nServiceMock, + loggingSystemMock, + notificationServiceMock, + overlayServiceMock, + themeServiceMock, +} from '@kbn/core/public/mocks'; +import { __IntlProvider as IntlProvider } from '@kbn/i18n-react'; + +import { EditSpaceContentTab } from './edit_space_content_tab'; +import { EditSpaceProvider } from './provider'; +import type { Space } from '../../../common'; +import { spacesManagerMock } from '../../spaces_manager/spaces_manager.mock'; +import type { SpaceContentTypeSummaryItem } from '../../types'; +import { getPrivilegeAPIClientMock } from '../privilege_api_client.mock'; +import { getRolesAPIClientMock } from '../roles_api_client.mock'; + +const getUrlForApp = (appId: string) => appId; +const navigateToUrl = jest.fn(); +const spacesManager = spacesManagerMock.create(); +const getRolesAPIClient = getRolesAPIClientMock; +const getPrivilegeAPIClient = getPrivilegeAPIClientMock; + +const http = httpServiceMock.createStartContract(); +const notifications = notificationServiceMock.createStartContract(); +const overlays = overlayServiceMock.createStartContract(); +const theme = themeServiceMock.createStartContract(); +const i18n = i18nServiceMock.createStartContract(); +const logger = loggingSystemMock.createLogger(); + +const TestComponent: React.FC = ({ children }) => { + return ( + + + {children} + + + ); +}; + +describe('EditSpaceContentTab', () => { + const space: Space = { + id: '1', + name: 'space1', + disabledFeatures: [], + }; + + const getSpaceContentSpy = jest.spyOn(spacesManager, 'getContentForSpace'); + + afterEach(() => { + jest.clearAllMocks(); + }); + + it('should render with a loading indicator initially', () => { + render( + + + + ); + + expect(screen.getByTestId('editSpaceContentTabLoadingIndicator')).toBeInTheDocument(); + }); + + it('should render the space content on resolving the saved objects within the space', async () => { + const spaceContentSummary: SpaceContentTypeSummaryItem[] = [ + { + type: 'dashboard', + count: 1, + displayName: 'Dashboard', + }, + ]; + + getSpaceContentSpy.mockResolvedValue({ + summary: spaceContentSummary, + total: spaceContentSummary.length, + }); + + render( + + + + ); + + await waitFor(() => null); + + expect(getSpaceContentSpy).toHaveBeenCalledTimes(1); + expect(getSpaceContentSpy).toHaveBeenCalledWith(space.id); + + expect(screen.queryByTestId('editSpaceContentTabLoadingIndicator')).not.toBeInTheDocument(); + + spaceContentSummary.forEach((item) => { + expect(screen.getByTestId(`space-content-row-${item.type}`)).toBeInTheDocument(); + }); + }); +}); diff --git a/x-pack/plugins/spaces/public/management/edit_space/edit_space_content_tab.tsx b/x-pack/plugins/spaces/public/management/edit_space/edit_space_content_tab.tsx new file mode 100644 index 0000000000000..2c20e61800174 --- /dev/null +++ b/x-pack/plugins/spaces/public/management/edit_space/edit_space_content_tab.tsx @@ -0,0 +1,147 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { EuiBasicTableColumn, EuiTableFieldDataColumnType } from '@elastic/eui'; +import { + EuiBasicTable, + EuiFlexGroup, + EuiFlexItem, + EuiIcon, + EuiLink, + EuiLoadingSpinner, + EuiText, +} from '@elastic/eui'; +import { capitalize } from 'lodash'; +import type { FC } from 'react'; +import React, { useEffect, useState } from 'react'; + +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; + +import { handleApiError } from './handle_api_error'; +import { useEditSpaceServices } from './provider'; +import { addSpaceIdToPath, ENTER_SPACE_PATH, type Space } from '../../../common'; +import type { SpaceContentTypeSummaryItem } from '../../types'; + +export const EditSpaceContentTab: FC<{ space: Space }> = ({ space }) => { + const { id: spaceId } = space; + const { spacesManager, serverBasePath, logger, notifications } = useEditSpaceServices(); + const [isLoading, setIsLoading] = useState(true); + const [items, setItems] = useState(null); + + const columns: Array> = [ + { + field: 'type', + name: 'Type', + render: (_value: string, item: SpaceContentTypeSummaryItem) => { + const { icon, displayName } = item; + return ( + + + + + {capitalize(displayName)} + + ); + }, + }, + { + field: 'count', + name: 'Count', + render: (value: string, item: SpaceContentTypeSummaryItem) => { + const uriComponent = encodeURIComponent( + `/app/management/kibana/objects?initialQuery=type:(${item.type})` + ); + const href = addSpaceIdToPath( + serverBasePath, + space.id, + `${ENTER_SPACE_PATH}?next=${uriComponent}` + ); + return {value}; + }, + }, + ]; + + const getRowProps = (item: SpaceContentTypeSummaryItem) => { + const { type } = item; + return { + 'data-test-subj': `space-content-row-${type}`, + onClick: () => {}, + }; + }; + + const getCellProps = ( + item: SpaceContentTypeSummaryItem, + column: EuiTableFieldDataColumnType + ) => { + const { type } = item; + const { field } = column; + return { + 'data-test-subj': `space-content-cell-${type}-${String(field)}`, + textOnly: true, + }; + }; + + useEffect(() => { + const getItems = async () => { + const result = await spacesManager.getContentForSpace(spaceId); + const { summary } = result; + setItems(summary); + setIsLoading(false); + }; + + getItems().catch((error) => { + handleApiError(error, { logger, toasts: notifications.toasts }); + }); + }, [spaceId, spacesManager, logger, notifications.toasts]); + + if (isLoading) { + return ( + + + + + + ); + } + + if (!items) { + return null; + } + + return ( + + + + + + + + + + + ); +}; diff --git a/x-pack/plugins/spaces/public/management/edit_space/edit_space_features_tab.tsx b/x-pack/plugins/spaces/public/management/edit_space/edit_space_features_tab.tsx new file mode 100644 index 0000000000000..f5bfbe79ec2d4 --- /dev/null +++ b/x-pack/plugins/spaces/public/management/edit_space/edit_space_features_tab.tsx @@ -0,0 +1,77 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { EuiFlexGroup, EuiFlexItem, EuiLink, EuiSpacer, EuiText, EuiTitle } from '@elastic/eui'; +import type { FC } from 'react'; +import React from 'react'; + +import type { KibanaFeature } from '@kbn/features-plugin/common'; +import { FormattedMessage } from '@kbn/i18n-react'; + +import { useEditSpaceServices } from './provider'; +import type { Space } from '../../../common'; +import { FeatureTable } from '../components/enabled_features/feature_table'; +import { SectionPanel } from '../components/section_panel'; + +interface Props { + space: Partial; + features: KibanaFeature[]; + onChange: (updatedSpace: Partial) => void; +} + +export const EditSpaceEnabledFeatures: FC = ({ features, space, onChange }) => { + const { capabilities, getUrlForApp } = useEditSpaceServices(); + const canManageRoles = capabilities.roles?.save === true; + + if (!features) { + return null; + } + + return ( + + + + +

      + +

      +
      + + +

      + + + + ) : ( + + ), + }} + /> +

      +
      +
      + + + +
      +
      + ); +}; diff --git a/x-pack/plugins/spaces/public/management/edit_space/edit_space_general_tab.test.tsx b/x-pack/plugins/spaces/public/management/edit_space/edit_space_general_tab.test.tsx new file mode 100644 index 0000000000000..433362777f4d2 --- /dev/null +++ b/x-pack/plugins/spaces/public/management/edit_space/edit_space_general_tab.test.tsx @@ -0,0 +1,489 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { act, fireEvent, render, screen, waitFor } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +import React from 'react'; + +import { + httpServiceMock, + i18nServiceMock, + loggingSystemMock, + notificationServiceMock, + overlayServiceMock, + scopedHistoryMock, + themeServiceMock, +} from '@kbn/core/public/mocks'; +import { DEFAULT_APP_CATEGORIES } from '@kbn/core-application-common'; +import { KibanaFeature } from '@kbn/features-plugin/common'; +import { __IntlProvider as IntlProvider } from '@kbn/i18n-react'; + +import { EditSpaceSettingsTab } from './edit_space_general_tab'; +import { EditSpaceProvider } from './provider/edit_space_provider'; +import type { SolutionView } from '../../../common'; +import { SOLUTION_VIEW_CLASSIC } from '../../../common/constants'; +import { spacesManagerMock } from '../../spaces_manager/spaces_manager.mock'; +import { getPrivilegeAPIClientMock } from '../privilege_api_client.mock'; +import { getRolesAPIClientMock } from '../roles_api_client.mock'; + +const space = { id: 'default', name: 'Default', disabledFeatures: [], _reserved: true }; +const history = scopedHistoryMock.create(); +const getUrlForApp = (appId: string) => appId; +const navigateToUrl = jest.fn(); +const spacesManager = spacesManagerMock.create(); +const getRolesAPIClient = getRolesAPIClientMock; +const getPrivilegeAPIClient = getPrivilegeAPIClientMock; +const reloadWindow = jest.fn(); + +const http = httpServiceMock.createStartContract(); +const notifications = notificationServiceMock.createStartContract(); +const overlays = overlayServiceMock.createStartContract(); +const theme = themeServiceMock.createStartContract(); +const i18n = i18nServiceMock.createStartContract(); +const logger = loggingSystemMock.createLogger(); + +const navigateSpy = jest.spyOn(history, 'push').mockImplementation(() => {}); +const updateSpaceSpy = jest + .spyOn(spacesManager, 'updateSpace') + .mockImplementation(() => Promise.resolve()); +const deleteSpaceSpy = jest + .spyOn(spacesManager, 'deleteSpace') + .mockImplementation(() => Promise.resolve()); + +describe('EditSpaceSettings', () => { + beforeEach(() => { + navigateSpy.mockReset(); + updateSpaceSpy.mockReset(); + deleteSpaceSpy.mockReset(); + }); + + const TestComponent: React.FC = ({ children }) => { + return ( + + + {children} + + + ); + }; + + it('should render controls for initial state of editing a space', () => { + render( + + + + ); + + expect(screen.getByTestId('addSpaceName')).toBeInTheDocument(); + expect(screen.getByTestId('descriptionSpaceText')).toBeInTheDocument(); + expect(screen.getByTestId('spaceLetterInitial')).toBeInTheDocument(); + expect(screen.getByTestId('euiColorPickerAnchor')).toBeInTheDocument(); + + expect(screen.queryByTestId('solutionViewSelect')).not.toBeInTheDocument(); // hides solution view when not not set to visible + expect(screen.queryByTestId('enabled-features-panel')).not.toBeInTheDocument(); // hides navigation features table when not set to visible + }); + + it('shows solution view select when visible', async () => { + render( + + + + ); + + expect(screen.getByTestId('solutionViewSelect')).toBeInTheDocument(); + expect(screen.queryByTestId('enabled-features-panel')).not.toBeInTheDocument(); // hides navigation features table when not set to visible + }); + + it('shows feature visibility controls when allowed', async () => { + const features = [ + new KibanaFeature({ + id: 'feature-1', + name: 'feature 1', + app: [], + category: DEFAULT_APP_CATEGORIES.kibana, + privileges: null, + }), + ]; + + render( + + + + ); + + expect(screen.getByTestId('enabled-features-panel')).toBeInTheDocument(); + expect(screen.queryByTestId('solutionViewSelect')).not.toBeInTheDocument(); // hides solution view when not not set to visible + }); + + it('allows a space to be updated', async () => { + const spaceToUpdate = { + id: 'existing-space', + name: 'Existing Space', + description: 'hey an existing space', + color: '#aabbcc', + initials: 'AB', + disabledFeatures: [], + solution: 'es' as SolutionView, + }; + + render( + + + + ); + + await act(async () => { + // update the space name + const nameInput = screen.getByTestId('addSpaceName'); + fireEvent.change(nameInput, { target: { value: 'Updated Name Of Space' } }); + + expect(screen.queryByTestId('space-edit-page-user-impact-warning')).not.toBeInTheDocument(); + expect(screen.queryByTestId('confirmModalTitleText')).not.toBeInTheDocument(); + + const updateButton = await screen.findByTestId('save-space-button'); // appears via re-render + await userEvent.click(updateButton); + + expect(updateSpaceSpy).toHaveBeenCalledWith({ + ...spaceToUpdate, + name: 'Updated Name Of Space', + initials: 'UN', + imageUrl: '', + color: '#D6BF57', + }); + }); + + expect(navigateSpy).toHaveBeenCalledTimes(1); + }); + + it('allows space to be deleted', async () => { + const spaceToDelete = { + id: 'delete-me-space', + name: 'Delete Me Space', + description: 'This is a very nice space... for me to DELETE!', + color: '#aabbcc', + initials: 'XX', + disabledFeatures: [], + }; + + render( + + + + ); + + await act(async () => { + const deleteButton = screen.getByTestId('delete-space-button'); + await userEvent.click(deleteButton); + + const confirmButton = await screen.findByTestId('confirmModalConfirmButton'); // click delete confirm + await userEvent.click(confirmButton); + + expect(deleteSpaceSpy).toHaveBeenCalledWith(spaceToDelete); + }); + }); + + it('sets calculated fields for existing spaces', async () => { + // The Spaces plugin provides functions to calculate the initials and color of a space if they have not been customized. The new space + // management page explicitly sets these fields when a new space is created, but it should also handle existing "legacy" spaces that do + // not already have these fields set. + const spaceToUpdate = { + id: 'existing-space', + name: 'Existing Space', + description: 'hey an existing space', + color: undefined, + initials: undefined, + imageUrl: undefined, + disabledFeatures: [], + }; + + render( + + + + ); + + await act(async () => { + // update the space name + const nameInput = screen.getByTestId('addSpaceName'); + fireEvent.change(nameInput, { target: { value: 'Updated Existing Space' } }); + + const updateButton = await screen.findByTestId('save-space-button'); // appears via re-render + await userEvent.click(updateButton); + + expect(updateSpaceSpy).toHaveBeenCalledWith({ + ...spaceToUpdate, + name: 'Updated Existing Space', + color: '#D6BF57', + initials: 'UE', + imageUrl: '', + }); + }); + }); + + it('warns when updating solution view', async () => { + const spaceToUpdate = { + id: 'existing-space', + name: 'Existing Space', + description: 'hey an existing space', + color: '#aabbcc', + initials: 'AB', + disabledFeatures: [], + solution: undefined, + }; + + render( + + + + ); + + // update the space solution view + await act(async () => { + const solutionViewPicker = screen.getByTestId('solutionViewSelect'); + await userEvent.click(solutionViewPicker); + + const esSolutionOption = await screen.findByTestId('solutionViewEsOption'); // appears via re-render + await userEvent.click(esSolutionOption); + + expect(screen.getByTestId('space-edit-page-user-impact-warning')).toBeInTheDocument(); + expect(screen.queryByTestId('confirmModalTitleText')).not.toBeInTheDocument(); + + const updateButton = screen.getByTestId('save-space-button'); + await userEvent.click(updateButton); + + expect(screen.getByTestId('confirmModalTitleText')).toBeInTheDocument(); + + const confirmButton = screen.getByTestId('confirmModalConfirmButton'); + await userEvent.click(confirmButton); + + await waitFor(() => { + expect(updateSpaceSpy).toHaveBeenCalledWith({ + ...spaceToUpdate, + imageUrl: '', + solution: 'es', + }); + }); + }); + + expect(navigateSpy).toHaveBeenCalledTimes(1); + }); + + it('warns when updating features in the active space', async () => { + const features = [ + new KibanaFeature({ + id: 'feature-1', + name: 'feature 1', + app: [], + category: DEFAULT_APP_CATEGORIES.kibana, + privileges: null, + }), + ]; + + const spaceToUpdate = { + id: 'existing-space', + name: 'Existing Space', + description: 'hey an existing space', + color: '#aabbcc', + initials: 'AB', + disabledFeatures: [], + solution: SOLUTION_VIEW_CLASSIC, + }; + + render( + + + + ); + + // update the space visible features + await act(async () => { + const feature1Checkbox = screen.getByTestId('featureCheckbox_feature-1'); + expect(feature1Checkbox).toBeChecked(); + + await userEvent.click(feature1Checkbox); + await waitFor(() => { + expect(feature1Checkbox).not.toBeChecked(); + }); + + expect(screen.getByTestId('space-edit-page-user-impact-warning')).toBeInTheDocument(); + expect(screen.queryByTestId('confirmModalTitleText')).not.toBeInTheDocument(); + + const updateButton = screen.getByTestId('save-space-button'); + await userEvent.click(updateButton); + + expect(screen.getByTestId('confirmModalTitleText')).toBeInTheDocument(); + + const confirmButton = screen.getByTestId('confirmModalConfirmButton'); + await userEvent.click(confirmButton); + + await waitFor(() => { + expect(updateSpaceSpy).toHaveBeenCalledWith({ + ...spaceToUpdate, + imageUrl: '', + disabledFeatures: ['feature-1'], + }); + }); + }); + + expect(navigateSpy).toHaveBeenCalledTimes(1); + }); + + it('empties the disabled features list when the solution view non-classic', async () => { + const features = [ + new KibanaFeature({ + id: 'feature-1', + name: 'feature 1', + app: [], + category: DEFAULT_APP_CATEGORIES.kibana, + privileges: null, + }), + ]; + + const spaceToUpdate = { + id: 'existing-space', + name: 'Existing Space', + description: 'hey an existing space', + color: '#aabbcc', + initials: 'AB', + disabledFeatures: [], + solution: SOLUTION_VIEW_CLASSIC, + }; + + render( + + + + ); + + // customize the space visible features to disable feature-1 + await act(async () => { + const feature1Checkbox = screen.getByTestId('featureCheckbox_feature-1'); + expect(feature1Checkbox).toBeChecked(); + + await userEvent.click(feature1Checkbox); + await waitFor(() => { + expect(feature1Checkbox).not.toBeChecked(); + }); + + expect(screen.getByTestId('space-edit-page-user-impact-warning')).toBeInTheDocument(); + expect(screen.queryByTestId('confirmModalTitleText')).not.toBeInTheDocument(); + }); + + // change the selected solution view to es + await act(async () => { + const solutionViewPicker = screen.getByTestId('solutionViewSelect'); + await userEvent.click(solutionViewPicker); + + const esSolutionOption = await screen.findByTestId('solutionViewEsOption'); // appears via re-render + await userEvent.click(esSolutionOption); + }); + + // perform the save + await act(async () => { + const updateButton = screen.getByTestId('save-space-button'); + await userEvent.click(updateButton); + + expect(screen.getByTestId('confirmModalTitleText')).toBeInTheDocument(); + + const confirmButton = screen.getByTestId('confirmModalConfirmButton'); + await userEvent.click(confirmButton); + + await waitFor(() => { + expect(updateSpaceSpy).toHaveBeenCalledWith({ + ...spaceToUpdate, + imageUrl: '', + solution: 'es', + disabledFeatures: [], // "feature-1" became deselected + }); + }); + }); + + expect(navigateSpy).toHaveBeenCalledTimes(1); + }); +}); diff --git a/x-pack/plugins/spaces/public/management/edit_space/edit_space_general_tab.tsx b/x-pack/plugins/spaces/public/management/edit_space/edit_space_general_tab.tsx new file mode 100644 index 0000000000000..2b7f04e4d9417 --- /dev/null +++ b/x-pack/plugins/spaces/public/management/edit_space/edit_space_general_tab.tsx @@ -0,0 +1,297 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { EuiCallOut, EuiSpacer } from '@elastic/eui'; +import React, { useCallback, useState } from 'react'; + +import type { ScopedHistory } from '@kbn/core-application-browser'; +import type { KibanaFeature } from '@kbn/features-plugin/common'; +import { i18n } from '@kbn/i18n'; +import { useUnsavedChangesPrompt } from '@kbn/unsaved-changes-prompt'; + +import { EditSpaceEnabledFeatures } from './edit_space_features_tab'; +import { EditSpaceTabFooter } from './footer'; +import { useEditSpaceServices } from './provider'; +import type { Space } from '../../../common'; +import { SOLUTION_VIEW_CLASSIC } from '../../../common/constants'; +import { ConfirmDeleteModal } from '../components'; +import { ConfirmAlterActiveSpaceModal } from '../components/confirm_alter_active_space_modal'; +import { CustomizeSpace } from '../components/customize_space'; +import { SolutionView } from '../components/solution_view'; +import { SpaceValidator } from '../lib'; +import type { CustomizeSpaceFormValues } from '../types'; + +interface Props { + space: Space; + history: ScopedHistory; + features: KibanaFeature[]; + allowFeatureVisibility: boolean; + allowSolutionVisibility: boolean; + reloadWindow: () => void; +} + +export const EditSpaceSettingsTab: React.FC = ({ space, features, history, ...props }) => { + const imageAvatarSelected = Boolean(space.imageUrl); + const [formValues, setFormValues] = useState({ + ...space, + avatarType: imageAvatarSelected ? 'image' : 'initials', + imageUrl: imageAvatarSelected ? space.imageUrl : '', + }); + + const [isDirty, setIsDirty] = useState(false); // track if unsaved changes have been made + const [isLoading, setIsLoading] = useState(false); // track if user has just clicked the Update button + const [showUserImpactWarning, setShowUserImpactWarning] = useState(false); + const [showAlteringActiveSpaceDialog, setShowAlteringActiveSpaceDialog] = useState(false); + const [showConfirmDeleteModal, setShowConfirmDeleteModal] = useState(false); + const { http, overlays, logger, notifications, navigateToUrl, spacesManager } = + useEditSpaceServices(); + + const [solution, setSolution] = useState(space.solution); + + useUnsavedChangesPrompt({ + hasUnsavedChanges: isDirty, + http, + openConfirm: overlays.openConfirm, + navigateToUrl, + history, + titleText: i18n.translate('xpack.spaces.management.spaceDetails.unsavedChangesPromptTitle', { + defaultMessage: 'Leave without saving?', + }), + messageText: i18n.translate( + 'xpack.spaces.management.spaceDetails.unsavedChangesPromptMessage', + { + defaultMessage: "Unsaved changes won't be applied to the space and will be lost.", + } + ), + cancelButtonText: i18n.translate('xpack.spaces.management.spaceDetails.keepEditingButton', { + defaultMessage: 'Save before leaving', + }), + confirmButtonText: i18n.translate('xpack.spaces.management.spaceDetails.leavePageButton', { + defaultMessage: 'Leave', + }), + }); + + const onChangeSpaceSettings = useCallback( + (newFormValues: CustomizeSpaceFormValues) => { + setFormValues({ ...formValues, ...newFormValues }); + setIsDirty(true); + }, + [formValues] + ); + + const onChangeFeatures = useCallback( + (updatedSpace: Partial) => { + setFormValues({ ...formValues, ...updatedSpace }); + setIsDirty(true); + setShowUserImpactWarning(true); + }, + [formValues] + ); + + const onSolutionViewChange = useCallback( + (updatedSpace: Partial) => { + setSolution(updatedSpace.solution); + onChangeFeatures(updatedSpace); + }, + [onChangeFeatures] + ); + + const backToSpacesList = useCallback(() => { + history.push('/'); + }, [history]); + + const onClickCancel = useCallback(() => { + setShowAlteringActiveSpaceDialog(false); + setShowUserImpactWarning(false); + backToSpacesList(); + }, [backToSpacesList]); + + const onClickDeleteSpace = useCallback(() => { + setShowConfirmDeleteModal(true); + }, []); + + const performSave = useCallback( + async ({ requiresReload = false }) => { + const { + avatarType, + customIdentifier, + customAvatarColor, + customAvatarInitials, + ...partialSpace + } = formValues; + + const spaceClone = structuredClone(partialSpace as Partial); + const { id, name } = spaceClone; + + if (!id) { + throw new Error(`Can not update space without id field!`); + } + if (!name) { + throw new Error(`Can not update space without name field!`); + } + + setIsLoading(true); + + let disabledFeatures: string[] | undefined; + if (spaceClone.solution === SOLUTION_VIEW_CLASSIC) { + disabledFeatures = spaceClone.disabledFeatures; + } + + try { + await spacesManager.updateSpace({ + ...spaceClone, + id, + name, + disabledFeatures: disabledFeatures ?? [], + imageUrl: avatarType === 'image' ? spaceClone.imageUrl : '', + }); + + notifications.toasts.addSuccess( + i18n.translate( + 'xpack.spaces.management.spaceDetails.spaceSuccessfullySavedNotificationMessage', + { + defaultMessage: 'Space "{name}" was saved.', + values: { name }, + } + ) + ); + + setIsDirty(false); + backToSpacesList(); + if (requiresReload) { + props.reloadWindow(); + } + } catch (error) { + logger.error('Could not save changes to space!', error); + const message = error?.body?.message ?? error.toString(); + notifications.toasts.addError(error, { + title: i18n.translate('xpack.spaces.management.spaceDetails.errorSavingSpaceTitle', { + defaultMessage: 'Error saving space: {message}', + values: { message }, + }), + }); + } finally { + setIsLoading(false); + } + }, + [backToSpacesList, notifications.toasts, formValues, spacesManager, logger, props] + ); + + const onClickSubmit = useCallback(() => { + if (showUserImpactWarning) { + setShowAlteringActiveSpaceDialog(true); + } else { + performSave({ requiresReload: false }); + } + }, [performSave, showUserImpactWarning]); + + const doShowAlteringActiveSpaceDialog = () => { + return ( + showAlteringActiveSpaceDialog && ( + performSave({ requiresReload: true })} + onCancel={() => { + setShowAlteringActiveSpaceDialog(false); + }} + /> + ) + ); + }; + + const doShowConfirmDeleteSpaceDialog = () => { + return ( + showConfirmDeleteModal && ( + { + setShowConfirmDeleteModal(false); + }} + onSuccess={() => { + setShowConfirmDeleteModal(false); + backToSpacesList(); + }} + /> + ) + ); + }; + + // Show if user has changed disabled features + // Show if user has changed solution view + const doShowUserImpactWarning = () => { + return ( + showUserImpactWarning && ( + <> + + + {i18n.translate( + 'xpack.spaces.management.spaceDetails.spaceChangesWarning.impactAllUsersInSpace', + { + defaultMessage: 'The changes made will impact all users in the space.', + } + )} + + + ) + ); + }; + + const validator = new SpaceValidator(); + + return ( + <> + {doShowAlteringActiveSpaceDialog()} + {doShowConfirmDeleteSpaceDialog()} + + + + {props.allowSolutionVisibility && ( + <> + + + + )} + + {props.allowFeatureVisibility && (solution == null || solution === SOLUTION_VIEW_CLASSIC) && ( + <> + + + + )} + + {doShowUserImpactWarning()} + + + + + ); +}; diff --git a/x-pack/plugins/spaces/public/management/edit_space/edit_space_page.tsx b/x-pack/plugins/spaces/public/management/edit_space/edit_space_page.tsx new file mode 100644 index 0000000000000..882301d36459a --- /dev/null +++ b/x-pack/plugins/spaces/public/management/edit_space/edit_space_page.tsx @@ -0,0 +1,40 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import type { ComponentProps, PropsWithChildren } from 'react'; + +import { EditSpace } from './edit_space'; +import { EditSpaceProvider, type EditSpaceProviderProps } from './provider'; + +type EditSpacePageProps = ComponentProps & EditSpaceProviderProps; + +export function EditSpacePage({ + spaceId, + getFeatures, + history, + onLoadSpace, + selectedTabId, + allowFeatureVisibility, + allowSolutionVisibility, + children, + ...editSpaceServicesProps +}: PropsWithChildren) { + return ( + + + + ); +} diff --git a/x-pack/plugins/spaces/public/management/edit_space/edit_space_roles_tab.test.tsx b/x-pack/plugins/spaces/public/management/edit_space/edit_space_roles_tab.test.tsx new file mode 100644 index 0000000000000..ca6d8e1c0767d --- /dev/null +++ b/x-pack/plugins/spaces/public/management/edit_space/edit_space_roles_tab.test.tsx @@ -0,0 +1,119 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { act, render, waitFor } from '@testing-library/react'; +import React from 'react'; + +import { + httpServiceMock, + i18nServiceMock, + loggingSystemMock, + notificationServiceMock, + overlayServiceMock, + themeServiceMock, +} from '@kbn/core/public/mocks'; +import { __IntlProvider as IntlProvider } from '@kbn/i18n-react'; + +import { EditSpaceAssignedRolesTab } from './edit_space_roles_tab'; +import { EditSpaceProvider } from './provider'; +import { spacesManagerMock } from '../../spaces_manager/spaces_manager.mock'; +import { getPrivilegeAPIClientMock } from '../privilege_api_client.mock'; +import { getRolesAPIClientMock } from '../roles_api_client.mock'; + +const getUrlForApp = (appId: string) => appId; +const navigateToUrl = jest.fn(); +const spacesManager = spacesManagerMock.create(); +const getRolesAPIClient = getRolesAPIClientMock; +const getPrivilegeAPIClient = getPrivilegeAPIClientMock; + +const http = httpServiceMock.createStartContract(); +const notifications = notificationServiceMock.createStartContract(); +const overlays = overlayServiceMock.createStartContract(); +const theme = themeServiceMock.createStartContract(); +const i18n = i18nServiceMock.createStartContract(); +const logger = loggingSystemMock.createLogger(); + +const space = { + id: 'space-a', + name: 'Space A', + disabledFeatures: [], + _reserved: false, +}; + +describe('EditSpaceAssignedRolesTab', () => { + const loadRolesSpy = jest.spyOn(spacesManager, 'getRolesForSpace'); + const toastErrorSpy = jest.spyOn(notifications.toasts, 'addError'); + + const TestComponent: React.FC = ({ children }) => { + return ( + + + {children} + + + ); + }; + + beforeEach(() => { + loadRolesSpy.mockReset(); + toastErrorSpy.mockReset(); + }); + + it('loads the assigned roles', async () => { + act(() => { + render( + + + + ); + }); + + await waitFor(() => { + expect(loadRolesSpy).toHaveBeenCalledTimes(1); + }); + }); + + it('shows an error toast if there is an error loading the assigned roles', async () => { + loadRolesSpy.mockImplementation(() => { + throw new Error('test error'); + }); + + act(() => { + render( + + + + ); + }); + + await waitFor(() => { + expect(loadRolesSpy).toHaveBeenCalledTimes(1); + expect(toastErrorSpy).toHaveBeenCalledWith(new Error('test error'), { + title: 'Error: test error', + }); + }); + }); +}); diff --git a/x-pack/plugins/spaces/public/management/edit_space/edit_space_roles_tab.tsx b/x-pack/plugins/spaces/public/management/edit_space/edit_space_roles_tab.tsx new file mode 100644 index 0000000000000..2733790d8de8b --- /dev/null +++ b/x-pack/plugins/spaces/public/management/edit_space/edit_space_roles_tab.tsx @@ -0,0 +1,207 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { EuiFlexGroup, EuiFlexItem, EuiText } from '@elastic/eui'; +import type { FC } from 'react'; +import React, { useCallback, useEffect } from 'react'; + +import type { KibanaFeature } from '@kbn/features-plugin/common'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { toMountPoint } from '@kbn/react-kibana-mount'; +import type { Role } from '@kbn/security-plugin-types-common'; + +import { handleApiError } from './handle_api_error'; +import { EditSpaceProvider, useEditSpaceServices, useEditSpaceStore } from './provider'; +import { PrivilegesRolesForm } from './roles/component/space_assign_role_privilege_form'; +import { SpaceAssignedRolesTable } from './roles/component/space_assigned_roles_table'; +import type { Space } from '../../../common'; + +interface Props { + space: Space; + features: KibanaFeature[]; + isReadOnly: boolean; +} + +export const EditSpaceAssignedRolesTab: FC = ({ space, features, isReadOnly }) => { + const { dispatch, state } = useEditSpaceStore(); // no loading state because roles have already been loaded + const services = useEditSpaceServices(); + const { + getUrlForApp, + overlays, + theme, + i18n: i18nStart, + logger, + notifications, + invokeClient, + } = services; + + // Roles are already loaded in app state, refresh them when user navigates to this tab + useEffect(() => { + const getRoles = async () => { + await invokeClient(async (clients) => { + let result: Role[] = []; + try { + result = await clients.spacesManager.getRolesForSpace(space.id); + + dispatch({ type: 'update_roles', payload: result }); + } catch (error) { + handleApiError(error, { logger, toasts: notifications.toasts }); + } + }); + }; + + getRoles(); + }, [dispatch, invokeClient, space.id, logger, notifications.toasts]); + + const showRolesPrivilegeEditor = useCallback( + (defaultSelected?: Role[]) => { + const overlayRef = overlays.openFlyout( + toMountPoint( + + { + const { updated, errors } = response; + + if (updated) { + notifications.toasts.addSuccess( + i18n.translate( + 'xpack.spaces.management.spaceDetails.roles.assignmentSuccessMsg', + { + defaultMessage: `Selected roles have been assigned to the "{spaceName}" space`, + values: { spaceName: space.name }, + } + ) + ); + } + + for (const [roleName, error] of Object.entries(errors ?? {})) { + notifications.toasts.addError(new Error(JSON.stringify(error)), { + title: `Error updating ${roleName}`, + }); + } + overlayRef.close(); + }, + closeFlyout: () => overlayRef.close(), + defaultSelected, + storeDispatch: dispatch, + spacesClientsInvocator: invokeClient, + getUrlForApp, + }} + /> + , + { theme, i18n: i18nStart } + ), + { + size: 'm', + maxWidth: true, + maskProps: { headerZindexLocation: 'below' }, + } + ); + }, + [ + overlays, + services, + space, + features, + dispatch, + invokeClient, + getUrlForApp, + theme, + i18nStart, + notifications.toasts, + ] + ); + + const removeRole = useCallback( + async (payload: Role[]) => { + // To remove the role from the space in bulk-edit, we take the payload of roles to edit, loop over + // each role, and modify the kibana.spaces field of each role by stripping them of the space to + // disassociate + const updateDoc = structuredClone(payload).map((roleDef) => { + roleDef.kibana = roleDef.kibana.filter(({ spaces }) => { + let spaceIdIndex: number; + + if (spaces.length && (spaceIdIndex = spaces.indexOf(space.id)) > -1) { + if (spaces.length > 1) { + spaces.splice(spaceIdIndex, 1); + return true; + } else { + return false; + } + } + return true; + }); + + return roleDef; + }); + + await invokeClient((clients) => { + return clients.rolesClient.bulkUpdateRoles({ rolesUpdate: updateDoc }).then((response) => { + const { updated, errors } = response; + + if (updated) { + notifications.toasts.addSuccess( + i18n.translate('xpack.spaces.management.spaceDetails.roles.removalSuccessMsg', { + defaultMessage: + 'Removed {count, plural, one {role} other {{count} roles}} from "{spaceName}" space', + values: { + spaceName: space.name, + count: updateDoc.length, + }, + }) + ); + } + + for (const [roleName, error] of Object.entries(errors ?? {})) { + notifications.toasts.addError(new Error(JSON.stringify(error)), { + title: `Error updating ${roleName}`, + }); + } + }); + }); + + dispatch({ type: 'remove_roles', payload: updateDoc }); + }, + [dispatch, invokeClient, notifications.toasts, space.id, space.name] + ); + + return ( + + + + + + + + + showRolesPrivilegeEditor([rowRecord])} + onClickBulkRemove={async (selectedRoles) => { + await removeRole(selectedRoles); + }} + onClickRowRemoveAction={async (rowRecord) => { + await removeRole([rowRecord]); + }} + onClickAssignNewRole={async () => { + showRolesPrivilegeEditor(); + }} + /> + + + + ); +}; diff --git a/x-pack/plugins/spaces/public/management/edit_space/edit_space_tabs.tsx b/x-pack/plugins/spaces/public/management/edit_space/edit_space_tabs.tsx new file mode 100644 index 0000000000000..48731de7af98c --- /dev/null +++ b/x-pack/plugins/spaces/public/management/edit_space/edit_space_tabs.tsx @@ -0,0 +1,125 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { EuiNotificationBadge } from '@elastic/eui'; +import React from 'react'; + +import type { Capabilities, ScopedHistory } from '@kbn/core/public'; +import type { KibanaFeature } from '@kbn/features-plugin/common'; +import { i18n } from '@kbn/i18n'; +import { withSuspense } from '@kbn/shared-ux-utility'; + +import { TAB_ID_CONTENT, TAB_ID_GENERAL, TAB_ID_ROLES } from './constants'; +import type { Space } from '../../../common'; + +export interface EditSpaceTab { + id: string; + name: string; + content: JSX.Element; + append?: JSX.Element; + href?: string; +} + +export interface GetTabsProps { + space: Space; + rolesCount: number; + features: KibanaFeature[]; + history: ScopedHistory; + capabilities: Capabilities & { + roles?: { view: boolean; save: boolean }; + }; + allowFeatureVisibility: boolean; + allowSolutionVisibility: boolean; +} + +const SuspenseEditSpaceSettingsTab = withSuspense( + React.lazy(() => + import('./edit_space_general_tab').then(({ EditSpaceSettingsTab }) => ({ + default: EditSpaceSettingsTab, + })) + ) +); + +const SuspenseEditSpaceAssignedRolesTab = withSuspense( + React.lazy(() => + import('./edit_space_roles_tab').then(({ EditSpaceAssignedRolesTab }) => ({ + default: EditSpaceAssignedRolesTab, + })) + ) +); + +const SuspenseEditSpaceContentTab = withSuspense( + React.lazy(() => + import('./edit_space_content_tab').then(({ EditSpaceContentTab }) => ({ + default: EditSpaceContentTab, + })) + ) +); + +export const getTabs = ({ + space, + features, + history, + capabilities, + rolesCount, + ...props +}: GetTabsProps): EditSpaceTab[] => { + const canUserViewRoles = Boolean(capabilities?.roles?.view); + const canUserModifyRoles = Boolean(capabilities?.roles?.save); + const reloadWindow = () => { + window.location.reload(); + }; + + const tabsDefinition: EditSpaceTab[] = [ + { + id: TAB_ID_GENERAL, + name: i18n.translate('xpack.spaces.management.spaceDetails.contentTabs.general.heading', { + defaultMessage: 'General settings', + }), + content: ( + + ), + }, + ]; + + if (canUserViewRoles) { + tabsDefinition.push({ + id: TAB_ID_ROLES, + name: i18n.translate('xpack.spaces.management.spaceDetails.contentTabs.roles.heading', { + defaultMessage: 'Permissions', + }), + append: ( + + {rolesCount} + + ), + content: ( + + ), + }); + } + + tabsDefinition.push({ + id: TAB_ID_CONTENT, + name: i18n.translate('xpack.spaces.management.spaceDetails.contentTabs.content.heading', { + defaultMessage: 'Content', + }), + content: , + }); + + return tabsDefinition; +}; diff --git a/x-pack/plugins/spaces/public/management/edit_space/footer.tsx b/x-pack/plugins/spaces/public/management/edit_space/footer.tsx new file mode 100644 index 0000000000000..013a356f9b400 --- /dev/null +++ b/x-pack/plugins/spaces/public/management/edit_space/footer.tsx @@ -0,0 +1,87 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { + EuiButton, + EuiButtonEmpty, + EuiFlexGroup, + EuiFlexItem, + EuiLoadingSpinner, +} from '@elastic/eui'; +import React from 'react'; + +import { FormattedMessage } from '@kbn/i18n-react'; + +interface Props { + isDirty: boolean; + isLoading: boolean; + onClickCancel: () => void; + onClickSubmit: () => void; + onClickDeleteSpace: () => void; +} + +export const EditSpaceTabFooter: React.FC = ({ + isDirty, + isLoading, + onClickCancel, + onClickSubmit, + onClickDeleteSpace, +}) => { + return ( + <> + {isLoading && ( + + + + + + )} + {!isLoading && ( + + + + + + + + + + + + + + + {isDirty && ( + + + + + + )} + + )} + + ); +}; diff --git a/x-pack/plugins/spaces/public/management/edit_space/handle_api_error.ts b/x-pack/plugins/spaces/public/management/edit_space/handle_api_error.ts new file mode 100644 index 0000000000000..2d40a1c34b990 --- /dev/null +++ b/x-pack/plugins/spaces/public/management/edit_space/handle_api_error.ts @@ -0,0 +1,27 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { NotificationsStart } from '@kbn/core-notifications-browser'; +import type { Logger } from '@kbn/logging'; + +interface HandleErrorDeps { + toasts: NotificationsStart['toasts']; + logger: Logger; +} + +export const handleApiError = (error: any, deps: HandleErrorDeps) => { + const { logger, toasts } = deps; + + const message = error?.body?.message ?? error.toString(); + + logger.error(message); + logger.error(error); + + toasts.addError(error, { + title: message, + }); +}; diff --git a/x-pack/plugins/spaces/public/management/edit_space/hooks/use_tabs.ts b/x-pack/plugins/spaces/public/management/edit_space/hooks/use_tabs.ts new file mode 100644 index 0000000000000..fc583e54b0693 --- /dev/null +++ b/x-pack/plugins/spaces/public/management/edit_space/hooks/use_tabs.ts @@ -0,0 +1,41 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useMemo } from 'react'; + +import type { ScopedHistory } from '@kbn/core-application-browser'; +import type { KibanaFeature } from '@kbn/features-plugin/public'; + +import type { Space } from '../../../../common'; +import { type EditSpaceTab, getTabs, type GetTabsProps } from '../edit_space_tabs'; + +type UseTabsProps = Pick & { + space: Space | null; + features: KibanaFeature[] | null; + currentSelectedTabId: string; + history: ScopedHistory; + allowFeatureVisibility: boolean; + allowSolutionVisibility: boolean; +}; + +export const useTabs = ({ + space, + features, + currentSelectedTabId, + ...getTabsArgs +}: UseTabsProps): [EditSpaceTab[], JSX.Element | undefined] => { + const [tabs, selectedTabContent] = useMemo(() => { + if (space === null || features === null) { + return [[]]; + } + + const _tabs = space != null ? getTabs({ space, features, ...getTabsArgs }) : []; + return [_tabs, _tabs.find((obj) => obj.id === currentSelectedTabId)?.content]; + }, [space, features, getTabsArgs, currentSelectedTabId]); + + return [tabs, selectedTabContent]; +}; diff --git a/x-pack/plugins/spaces/public/management/edit_space/index.ts b/x-pack/plugins/spaces/public/management/edit_space/index.ts index 78c3b0fc42e04..c85e8f1c2e499 100644 --- a/x-pack/plugins/spaces/public/management/edit_space/index.ts +++ b/x-pack/plugins/spaces/public/management/edit_space/index.ts @@ -5,4 +5,4 @@ * 2.0. */ -export { ManageSpacePage } from './manage_space_page'; +export { EditSpacePage } from './edit_space_page'; diff --git a/x-pack/plugins/spaces/public/management/edit_space/provider/edit_space_provider.test.tsx b/x-pack/plugins/spaces/public/management/edit_space/provider/edit_space_provider.test.tsx new file mode 100644 index 0000000000000..bfd7d7b6059e8 --- /dev/null +++ b/x-pack/plugins/spaces/public/management/edit_space/provider/edit_space_provider.test.tsx @@ -0,0 +1,113 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { renderHook } from '@testing-library/react-hooks'; +import type { PropsWithChildren } from 'react'; +import React from 'react'; + +import { + httpServiceMock, + i18nServiceMock, + loggingSystemMock, + notificationServiceMock, + overlayServiceMock, + themeServiceMock, +} from '@kbn/core/public/mocks'; +import type { ApplicationStart } from '@kbn/core-application-browser'; +import { __IntlProvider as IntlProvider } from '@kbn/i18n-react'; + +import { EditSpaceProvider, useEditSpaceServices, useEditSpaceStore } from './edit_space_provider'; +import { spacesManagerMock } from '../../../spaces_manager/spaces_manager.mock'; +import { getPrivilegeAPIClientMock } from '../../privilege_api_client.mock'; +import { getRolesAPIClientMock } from '../../roles_api_client.mock'; + +const http = httpServiceMock.createStartContract(); +const notifications = notificationServiceMock.createStartContract(); +const overlays = overlayServiceMock.createStartContract(); +const theme = themeServiceMock.createStartContract(); +const i18n = i18nServiceMock.createStartContract(); +const logger = loggingSystemMock.createLogger(); + +const spacesManager = spacesManagerMock.create(); + +const SUTProvider = ({ + children, + capabilities = { + navLinks: {}, + management: {}, + catalogue: {}, + spaces: { manage: true }, + }, +}: PropsWithChildren>>) => { + return ( + + _, + getRolesAPIClient: getRolesAPIClientMock, + getPrivilegesAPIClient: getPrivilegeAPIClientMock, + navigateToUrl: jest.fn(), + capabilities, + }} + > + {children} + + + ); +}; + +describe('EditSpaceProvider', () => { + describe('useEditSpaceServices', () => { + it('returns an object of predefined properties', () => { + const { result } = renderHook(useEditSpaceServices, { wrapper: SUTProvider }); + + expect(result.current).toEqual( + expect.objectContaining({ + invokeClient: expect.any(Function), + }) + ); + }); + + it('throws when the hook is used within a tree that does not have the provider', () => { + const { result } = renderHook(useEditSpaceServices); + expect(result.error).toBeDefined(); + expect(result.error?.message).toEqual( + expect.stringMatching('EditSpaceService Context is missing.') + ); + }); + }); + + describe('useEditSpaceStore', () => { + it('returns an object of predefined properties', () => { + const { result } = renderHook(useEditSpaceStore, { wrapper: SUTProvider }); + + expect(result.current).toEqual( + expect.objectContaining({ + state: expect.objectContaining({ roles: expect.any(Map) }), + dispatch: expect.any(Function), + }) + ); + }); + + it('throws when the hook is used within a tree that does not have the provider', () => { + const { result } = renderHook(useEditSpaceStore); + + expect(result.error).toBeDefined(); + expect(result.error?.message).toEqual( + expect.stringMatching('EditSpaceStore Context is missing.') + ); + }); + }); +}); diff --git a/x-pack/plugins/spaces/public/management/edit_space/provider/edit_space_provider.tsx b/x-pack/plugins/spaces/public/management/edit_space/provider/edit_space_provider.tsx new file mode 100644 index 0000000000000..75af2beea2108 --- /dev/null +++ b/x-pack/plugins/spaces/public/management/edit_space/provider/edit_space_provider.tsx @@ -0,0 +1,149 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { once } from 'lodash'; +import React, { + createContext, + type Dispatch, + type PropsWithChildren, + useCallback, + useContext, + useEffect, + useReducer, + useRef, +} from 'react'; + +import type { ApplicationStart } from '@kbn/core-application-browser'; +import type { CoreStart } from '@kbn/core-lifecycle-browser'; +import type { Logger } from '@kbn/logging'; +import type { + PrivilegesAPIClientPublicContract, + RolesAPIClient, +} from '@kbn/security-plugin-types-public'; + +import { + createSpaceRolesReducer, + type IDispatchAction, + type IEditSpaceStoreState, +} from './reducers'; +import type { SpacesManager } from '../../../spaces_manager'; + +export interface EditSpaceProviderProps + extends Pick { + logger: Logger; + capabilities: ApplicationStart['capabilities']; + getUrlForApp: ApplicationStart['getUrlForApp']; + navigateToUrl: ApplicationStart['navigateToUrl']; + serverBasePath: string; + spacesManager: SpacesManager; + getRolesAPIClient: () => Promise; + getPrivilegesAPIClient: () => Promise; +} + +export interface EditSpaceServices extends EditSpaceProviderProps { + invokeClient(arg: (clients: EditSpaceClients) => Promise): Promise; +} + +interface EditSpaceClients { + spacesManager: SpacesManager; + rolesClient: RolesAPIClient; + privilegesClient: PrivilegesAPIClientPublicContract; +} + +export interface EditSpaceStore { + state: IEditSpaceStoreState; + dispatch: Dispatch; +} + +const createSpaceRolesContext = once(() => createContext(null)); + +const createEditSpaceServicesContext = once(() => createContext(null)); + +export const EditSpaceProvider = ({ + children, + ...services +}: PropsWithChildren) => { + const EditSpaceStoreContext = createSpaceRolesContext(); + const EditSpaceServicesContext = createEditSpaceServicesContext(); + + const clients = useRef( + Promise.all([services.getRolesAPIClient(), services.getPrivilegesAPIClient()]) + ); + const rolesAPIClientRef = useRef(); + const privilegesClientRef = useRef(); + + const initialStoreState = useRef({ + roles: new Map(), + fetchRolesError: false, + }); + + const { logger } = services; + const resolveAPIClients = useCallback(async () => { + try { + [rolesAPIClientRef.current, privilegesClientRef.current] = await clients.current; + } catch (err) { + logger.error('Could not resolve API Clients!', err); + } + }, [logger]); + + useEffect(() => { + resolveAPIClients(); + }, [resolveAPIClients]); + + const createInitialState = useCallback((state: IEditSpaceStoreState) => { + return state; + }, []); + + const [state, dispatch] = useReducer( + createSpaceRolesReducer, + initialStoreState.current, + createInitialState + ); + + const invokeClient: EditSpaceServices['invokeClient'] = useCallback( + async (...args) => { + await resolveAPIClients(); + + return args[0]({ + spacesManager: services.spacesManager, + rolesClient: rolesAPIClientRef.current!, + privilegesClient: privilegesClientRef.current!, + }); + }, + [resolveAPIClients, services.spacesManager] + ); + + return ( + + + {children} + + + ); +}; + +export const useEditSpaceServices = (): EditSpaceServices => { + const context = useContext(createEditSpaceServicesContext()); + if (!context) { + throw new Error( + 'EditSpaceService Context is missing. Ensure the component or React root is wrapped with EditSpaceProvider' + ); + } + + return context; +}; + +export const useEditSpaceStore = () => { + const context = useContext(createSpaceRolesContext()); + if (!context) { + throw new Error( + 'EditSpaceStore Context is missing. Ensure the component or React root is wrapped with EditSpaceProvider' + ); + } + + return context; +}; diff --git a/x-pack/plugins/spaces/public/management/edit_space/provider/index.ts b/x-pack/plugins/spaces/public/management/edit_space/provider/index.ts new file mode 100644 index 0000000000000..7ae7301cd2c60 --- /dev/null +++ b/x-pack/plugins/spaces/public/management/edit_space/provider/index.ts @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export { EditSpaceProvider, useEditSpaceServices, useEditSpaceStore } from './edit_space_provider'; +export type { + EditSpaceProviderProps, + EditSpaceServices, + EditSpaceStore, +} from './edit_space_provider'; diff --git a/x-pack/plugins/spaces/public/management/edit_space/provider/reducers/index.ts b/x-pack/plugins/spaces/public/management/edit_space/provider/reducers/index.ts new file mode 100644 index 0000000000000..66e66681fc759 --- /dev/null +++ b/x-pack/plugins/spaces/public/management/edit_space/provider/reducers/index.ts @@ -0,0 +1,66 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { type Reducer } from 'react'; + +import type { Role } from '@kbn/security-plugin-types-common'; + +export type IDispatchAction = + | { + /** @description updates the records of roles for a space */ + type: 'update_roles' | 'remove_roles'; + payload: Role[]; + } + | { + /** @description updates to true if user does not have privilege to view roles */ + type: 'fetch_roles_error'; + payload: boolean; + } + | { + type: 'string'; + payload: unknown; + }; + +export interface IEditSpaceStoreState { + /** roles assigned to current space */ + roles: Map; + /** track if there was an error on the attempt to fetch roles **/ + fetchRolesError: boolean; +} + +export const createSpaceRolesReducer: Reducer = ( + state, + action +) => { + const clonedState = structuredClone(state); + + switch (action.type) { + case 'update_roles': { + if (action.payload) { + action.payload.forEach((role) => { + clonedState.roles.set(role.name, role); + }); + } + + return clonedState; + } + case 'remove_roles': { + action.payload.forEach((role) => { + clonedState.roles.delete(role.name); + }); + + return clonedState; + } + case 'fetch_roles_error': { + clonedState.fetchRolesError = action.payload; + return clonedState; + } + default: { + return clonedState; + } + } +}; diff --git a/x-pack/plugins/spaces/public/management/edit_space/roles/component/space_assign_role_privilege_form.test.tsx b/x-pack/plugins/spaces/public/management/edit_space/roles/component/space_assign_role_privilege_form.test.tsx new file mode 100644 index 0000000000000..9150f0c211adb --- /dev/null +++ b/x-pack/plugins/spaces/public/management/edit_space/roles/component/space_assign_role_privilege_form.test.tsx @@ -0,0 +1,308 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { render, screen, waitFor } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +import crypto from 'crypto'; +import React from 'react'; + +import { + httpServiceMock, + i18nServiceMock, + loggingSystemMock, + notificationServiceMock, + overlayServiceMock, + themeServiceMock, +} from '@kbn/core/public/mocks'; +import { __IntlProvider as IntlProvider } from '@kbn/i18n-react'; +import type { Role } from '@kbn/security-plugin-types-common'; +import { + createRawKibanaPrivileges, + kibanaFeatures, +} from '@kbn/security-role-management-model/src/__fixtures__'; + +import { PrivilegesRolesForm } from './space_assign_role_privilege_form'; +import type { Space } from '../../../../../common'; +import { FEATURE_PRIVILEGES_ALL, FEATURE_PRIVILEGES_READ } from '../../../../../common/constants'; +import { spacesManagerMock } from '../../../../spaces_manager/spaces_manager.mock'; +import { + createPrivilegeAPIClientMock, + getPrivilegeAPIClientMock, +} from '../../../privilege_api_client.mock'; +import { createRolesAPIClientMock, getRolesAPIClientMock } from '../../../roles_api_client.mock'; +import { EditSpaceProvider } from '../../provider'; + +const rolesAPIClient = createRolesAPIClientMock(); +const privilegeAPIClient = createPrivilegeAPIClientMock(); +const http = httpServiceMock.createStartContract(); +const notifications = notificationServiceMock.createStartContract(); +const overlays = overlayServiceMock.createStartContract(); +const theme = themeServiceMock.createStartContract(); +const i18n = i18nServiceMock.createStartContract(); +const logger = loggingSystemMock.createLogger(); +const spacesManager = spacesManagerMock.create(); + +const createRole = (roleName: string, kibana: Role['kibana'] = []): Role => { + return { + name: roleName, + elasticsearch: { cluster: [], run_as: [], indices: [] }, + kibana, + }; +}; + +const space: Space = { + id: crypto.randomUUID(), + name: 'Odyssey', + description: 'Journey vs. Destination', + disabledFeatures: [], +}; + +const spacesClientsInvocatorMock = jest.fn((fn) => + fn({ + rolesClient: rolesAPIClient, + privilegesClient: privilegeAPIClient, + }) +); +const dispatchMock = jest.fn(); +const onSaveCompleted = jest.fn(); +const closeFlyout = jest.fn(); + +const renderPrivilegeRolesForm = ({ + preSelectedRoles, +}: { + preSelectedRoles?: Role[]; +} = {}) => { + return render( + + _), + getRolesAPIClient: getRolesAPIClientMock, + getPrivilegesAPIClient: getPrivilegeAPIClientMock, + navigateToUrl: jest.fn(), + capabilities: { + navLinks: {}, + management: {}, + catalogue: {}, + spaces: { manage: true }, + }, + }} + > + _), + }} + /> + + + ); +}; + +describe('PrivilegesRolesForm', () => { + let getRolesSpy: jest.SpiedFunction['getRoles']>; + let getAllKibanaPrivilegeSpy: jest.SpiedFunction< + ReturnType['getAll'] + >; + + beforeAll(() => { + getRolesSpy = jest.spyOn(rolesAPIClient, 'getRoles'); + getAllKibanaPrivilegeSpy = jest.spyOn(privilegeAPIClient, 'getAll'); + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + it('does not display the privilege selection buttons or customization form when no role is selected', async () => { + getRolesSpy.mockResolvedValue([]); + getAllKibanaPrivilegeSpy.mockResolvedValue(createRawKibanaPrivileges(kibanaFeatures)); + + renderPrivilegeRolesForm(); + + await waitFor(() => null); + + ['all', 'read', 'custom'].forEach((privilege) => { + expect(screen.queryByTestId(`${privilege}-privilege-button`)).not.toBeInTheDocument(); + }); + + expect( + screen.queryByTestId('space-assign-role-privilege-customization-form') + ).not.toBeInTheDocument(); + }); + + it('renders with the assign roles button disabled when no role is selected', async () => { + getRolesSpy.mockResolvedValue([]); + getAllKibanaPrivilegeSpy.mockResolvedValue(createRawKibanaPrivileges(kibanaFeatures)); + + renderPrivilegeRolesForm(); + + await waitFor(() => null); + + expect(screen.getByTestId('space-assign-role-create-roles-privilege-button')).toBeDisabled(); + }); + + it('preselects the privilege of the selected role when one is provided', async () => { + getRolesSpy.mockResolvedValue([]); + getAllKibanaPrivilegeSpy.mockResolvedValue(createRawKibanaPrivileges(kibanaFeatures)); + + renderPrivilegeRolesForm({ + preSelectedRoles: [ + createRole('test_role_1', [ + { base: [FEATURE_PRIVILEGES_ALL], feature: {}, spaces: [space.id] }, + ]), + ], + }); + + await waitFor(() => null); + + expect(screen.getByTestId(`${FEATURE_PRIVILEGES_ALL}-privilege-button`)).toHaveAttribute( + 'aria-pressed', + String(true) + ); + }); + + it('displays the privilege customization form, when there is a selected role', async () => { + getRolesSpy.mockResolvedValue([]); + getAllKibanaPrivilegeSpy.mockResolvedValue(createRawKibanaPrivileges(kibanaFeatures)); + + const roles: Role[] = [ + createRole('test_role_1', [ + { base: [FEATURE_PRIVILEGES_READ], feature: {}, spaces: [space.id] }, + ]), + ]; + + renderPrivilegeRolesForm({ + preSelectedRoles: roles, + }); + + await waitFor(() => null); + + expect(screen.getByTestId(`${FEATURE_PRIVILEGES_READ}-privilege-button`)).toHaveAttribute( + 'aria-pressed', + String(true) + ); + + expect( + screen.getByTestId('space-assign-role-privilege-customization-form') + ).toBeInTheDocument(); + + expect( + screen.getByTestId('space-update-role-create-roles-privilege-button') + ).not.toBeDisabled(); + }); + + describe('selecting multiple roles', () => { + it('displays a warning message when roles with different privilege levels are selected', async () => { + getRolesSpy.mockResolvedValue([]); + getAllKibanaPrivilegeSpy.mockResolvedValue(createRawKibanaPrivileges(kibanaFeatures)); + + const roles: Role[] = [ + createRole('test_role_1', [ + { base: [FEATURE_PRIVILEGES_ALL], feature: {}, spaces: [space.id] }, + ]), + createRole('test_role_2', [ + { base: [FEATURE_PRIVILEGES_READ], feature: {}, spaces: [space.id] }, + ]), + ]; + + renderPrivilegeRolesForm({ + preSelectedRoles: roles, + }); + + await waitFor(() => null); + + expect(screen.getByTestId('privilege-conflict-callout')).toBeInTheDocument(); + }); + + it('does not display the permission conflict message when roles with the same privilege levels are selected', async () => { + getRolesSpy.mockResolvedValue([]); + getAllKibanaPrivilegeSpy.mockResolvedValue(createRawKibanaPrivileges(kibanaFeatures)); + + const roles: Role[] = [ + createRole('test_role_1', [ + { base: [FEATURE_PRIVILEGES_READ], feature: {}, spaces: [space.id] }, + ]), + createRole('test_role_2', [ + { base: [FEATURE_PRIVILEGES_READ], feature: {}, spaces: [space.id] }, + ]), + ]; + + renderPrivilegeRolesForm({ + preSelectedRoles: roles, + }); + + await waitFor(() => null); + + expect(screen.queryByTestId('privilege-conflict-callout')).not.toBeInTheDocument(); + }); + }); + + describe('applying custom privileges', () => { + it('for a selection of roles pre-assigned to a space, the first encountered privilege with a custom privilege is used as the starting point', async () => { + getRolesSpy.mockResolvedValue([]); + getAllKibanaPrivilegeSpy.mockResolvedValue(createRawKibanaPrivileges(kibanaFeatures)); + + const featureIds: string[] = kibanaFeatures.map((kibanaFeature) => kibanaFeature.id); + + const roles: Role[] = [ + createRole('test_role_1', [ + { base: [FEATURE_PRIVILEGES_ALL], feature: {}, spaces: [space.id] }, + ]), + createRole('test_role_2', [ + { base: [], feature: { [featureIds[0]]: [FEATURE_PRIVILEGES_ALL] }, spaces: [space.id] }, + ]), + createRole('test_role_3', [ + { base: [FEATURE_PRIVILEGES_READ], feature: {}, spaces: [space.id] }, + ]), + createRole('test_role_4', [ + { base: [FEATURE_PRIVILEGES_READ], feature: {}, spaces: [space.id] }, + ]), + // empty base denotes role with custom privilege + createRole('test_role_5', [ + { base: [], feature: { [featureIds[0]]: [FEATURE_PRIVILEGES_READ] }, spaces: [space.id] }, + ]), + ]; + + renderPrivilegeRolesForm({ + preSelectedRoles: roles, + }); + + await waitFor(() => null); + + await userEvent.click(screen.getByTestId('custom-privilege-button')); + + expect( + screen.getByTestId('space-assign-role-privilege-customization-form') + ).toBeInTheDocument(); + + expect(screen.queryByTestId(`${featureIds[0]}_read`)).not.toHaveAttribute( + 'aria-pressed', + String(true) + ); + + expect(screen.getByTestId(`${featureIds[0]}_all`)).toHaveAttribute( + 'aria-pressed', + String(true) + ); + }); + }); +}); diff --git a/x-pack/plugins/spaces/public/management/edit_space/roles/component/space_assign_role_privilege_form.tsx b/x-pack/plugins/spaces/public/management/edit_space/roles/component/space_assign_role_privilege_form.tsx new file mode 100644 index 0000000000000..658730a848a33 --- /dev/null +++ b/x-pack/plugins/spaces/public/management/edit_space/roles/component/space_assign_role_privilege_form.tsx @@ -0,0 +1,610 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { + EuiButton, + EuiButtonEmpty, + EuiButtonGroup, + EuiCallOut, + EuiComboBox, + EuiFlexGroup, + EuiFlexItem, + EuiFlyoutBody, + EuiFlyoutFooter, + EuiFlyoutHeader, + EuiForm, + EuiFormRow, + EuiLink, + EuiLoadingSpinner, + EuiSpacer, + EuiText, + EuiTitle, +} from '@elastic/eui'; +import type { EuiComboBoxOptionOption } from '@elastic/eui'; +import type { FC } from 'react'; +import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'; + +import type { KibanaFeature, KibanaFeatureConfig } from '@kbn/features-plugin/common'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { type RawKibanaPrivileges } from '@kbn/security-authorization-core'; +import type { Role } from '@kbn/security-plugin-types-common'; +import type { BulkUpdateRoleResponse } from '@kbn/security-plugin-types-public/src/roles/roles_api_client'; +import { KibanaPrivileges } from '@kbn/security-role-management-model'; +import { KibanaPrivilegeTable, PrivilegeFormCalculator } from '@kbn/security-ui-components'; + +import type { Space } from '../../../../../common'; +import { + FEATURE_PRIVILEGES_ALL, + FEATURE_PRIVILEGES_CUSTOM, + FEATURE_PRIVILEGES_READ, +} from '../../../../../common/constants'; +import { type EditSpaceServices, type EditSpaceStore, useEditSpaceServices } from '../../provider'; + +type KibanaRolePrivilege = + | keyof NonNullable + | typeof FEATURE_PRIVILEGES_CUSTOM; + +interface PrivilegesRolesFormProps { + space: Space; + features: KibanaFeature[]; + closeFlyout: () => void; + onSaveCompleted: (response: BulkUpdateRoleResponse) => void; + /** + * @description default roles that should be selected when the form is opened, + * this is useful when the form is opened in edit mode + */ + defaultSelected?: Role[]; + storeDispatch: EditSpaceStore['dispatch']; + spacesClientsInvocator: EditSpaceServices['invokeClient']; + getUrlForApp: EditSpaceServices['getUrlForApp']; +} + +const createRolesComboBoxOptions = (roles: Role[]): Array> => + roles.map((role) => ({ + label: role.name, + value: role, + })); + +export const PrivilegesRolesForm: FC = (props) => { + const { + space, + onSaveCompleted, + closeFlyout, + features, + defaultSelected = [], + spacesClientsInvocator, + storeDispatch, + getUrlForApp, + } = props; + const { logger, notifications } = useEditSpaceServices(); + const [assigningToRole, setAssigningToRole] = useState(false); + const [fetchingDataDeps, setFetchingDataDeps] = useState(false); + const [kibanaPrivileges, setKibanaPrivileges] = useState(null); + const [spaceUnallocatedRoles, setSpaceUnallocatedRole] = useState([]); + const [selectedRoles, setSelectedRoles] = useState>( + createRolesComboBoxOptions(defaultSelected) + ); + const isEditOperation = useRef(Boolean(defaultSelected.length)); + + useEffect(() => { + async function fetchRequiredData(spaceId: string) { + setFetchingDataDeps(true); + + const [systemRoles, _kibanaPrivileges] = await spacesClientsInvocator((clients) => + Promise.all([ + clients.rolesClient.getRoles(), + clients.privilegesClient.getAll({ includeActions: true, respectLicenseLevel: false }), + ]) + ); + + // exclude roles that are already assigned to this space + setSpaceUnallocatedRole( + systemRoles.filter( + (role) => + !role.metadata?._reserved && + (!role.kibana.length || + role.kibana.every((rolePrivileges) => { + return !( + rolePrivileges.spaces.includes(spaceId) || rolePrivileges.spaces.includes('*') + ); + })) + ) + ); + + setKibanaPrivileges(_kibanaPrivileges); + } + + fetchRequiredData(space.id!).finally(() => setFetchingDataDeps(false)); + }, [space.id, spacesClientsInvocator]); + + const selectedRolesCombinedPrivileges = useMemo(() => { + const combinedPrivilege = new Set( + selectedRoles.reduce((result, selectedRole) => { + let match: KibanaRolePrivilege[] = []; + for (let i = 0; i < selectedRole.value!.kibana.length; i++) { + const { spaces, base } = selectedRole.value!.kibana[i]; + if (spaces.includes(space.id!)) { + match = (base.length ? base : [FEATURE_PRIVILEGES_CUSTOM]) as [KibanaRolePrivilege]; + break; + } + } + + return result.concat(match); + }, [] as KibanaRolePrivilege[]) + ); + + return Array.from(combinedPrivilege); + }, [selectedRoles, space.id]); + + const [roleSpacePrivilege, setRoleSpacePrivilege] = useState( + !selectedRoles.length || !selectedRolesCombinedPrivileges.length + ? FEATURE_PRIVILEGES_ALL + : selectedRolesCombinedPrivileges[0] + ); + + const [roleCustomizationAnchor, setRoleCustomizationAnchor] = useState<{ + value: Role; + privilegeIndex: number; + }>(() => { + if (!selectedRoles.length) { + // return a skeleton anchor on init when no roles are selected + return { + value: { + name: 'placeholder', + elasticsearch: { + cluster: [], + run_as: [], + indices: [], + }, + kibana: [ + { + spaces: [space.id], + base: [roleSpacePrivilege === FEATURE_PRIVILEGES_CUSTOM ? '' : roleSpacePrivilege], + feature: {}, + }, + ], + }, + privilegeIndex: 0, + }; + } + + // support instance where the form is opened with roles already preselected + const defaultAnchor = selectedRoles[0]?.value!; + const privilegeIndex = defaultAnchor.kibana.findIndex(({ spaces }) => + spaces.includes(space.id!) + ); + + return { + value: defaultAnchor, + privilegeIndex: (privilegeIndex || -1) >= 0 ? privilegeIndex : 0, + }; + }); + + /** + * @description computes the value anchor role that will be used as the starting point for granular customizations + * on the selected roles. + */ + const computeRoleCustomizationAnchor = useCallback( + (spaceId: string, _selectedRoles: ReturnType) => { + let anchor: typeof roleCustomizationAnchor | null = null; + + for (let i = 0; i < _selectedRoles.length; i++) { + let role; + + if ((role = _selectedRoles[i].value)) { + for (let j = 0; j < _selectedRoles[i].value!.kibana.length; j++) { + let privilegeIterationIndexValue; + + if ((privilegeIterationIndexValue = role.kibana[j])) { + const { spaces, base } = privilegeIterationIndexValue; + /* + * check to see if current role already has a custom privilege, if it does we use that as the starting point for all customizations + * that will happen to all the other selected roles and exit + */ + if (spaces.includes(spaceId) && !base.length) { + anchor = { + value: structuredClone(role), + privilegeIndex: j, + }; + + break; + } + } + } + } + + if (anchor) break; + + // provide a fallback anchor if no suitable anchor was discovered, and we have reached the end of selected roles iteration + if (!anchor && role && i === _selectedRoles.length - 1) { + const fallbackRole = structuredClone(role); + + const spacePrivilegeIndex = fallbackRole.kibana.findIndex(({ spaces }) => + spaces.includes(spaceId) + ); + + anchor = { + value: fallbackRole, + privilegeIndex: + (spacePrivilegeIndex || -1) >= 0 + ? spacePrivilegeIndex + : (fallbackRole?.kibana?.push?.({ + spaces: [spaceId], + base: [], + feature: {}, + }) || 0) - 1, + }; + } + } + + return anchor; + }, + [] + ); + + const onRoleSpacePrivilegeChange = useCallback( + (spacePrivilege: KibanaRolePrivilege) => { + if (spacePrivilege === FEATURE_PRIVILEGES_CUSTOM) { + const _roleCustomizationAnchor = computeRoleCustomizationAnchor(space.id, selectedRoles); + if (_roleCustomizationAnchor) setRoleCustomizationAnchor(_roleCustomizationAnchor); + } else { + // opt for simple updates for customization anchor when privilege is not a custom one, especially that it's used only for visual treatment + setRoleCustomizationAnchor(({ value, privilegeIndex }) => { + value.kibana[privilegeIndex!] = { + spaces: [space.id], + base: [spacePrivilege], + feature: {}, + }; + + return { value, privilegeIndex }; + }); + } + + // persist selected privilege for UI + setRoleSpacePrivilege(spacePrivilege); + }, + [computeRoleCustomizationAnchor, selectedRoles, space.id] + ); + + const assignRolesToSpace = useCallback(async () => { + try { + setAssigningToRole(true); + + const newPrivileges = { + base: roleSpacePrivilege === FEATURE_PRIVILEGES_CUSTOM ? [] : [roleSpacePrivilege], + feature: + roleSpacePrivilege === FEATURE_PRIVILEGES_CUSTOM + ? roleCustomizationAnchor.value?.kibana[roleCustomizationAnchor.privilegeIndex!] + .feature! + : {}, + }; + + const updatedRoles = structuredClone(selectedRoles).map((selectedRole) => { + let found = false; + + for (let i = 0; i < selectedRole.value!.kibana.length; i++) { + const { spaces } = selectedRole.value!.kibana[i]; + + if (spaces.includes(space.id!)) { + if (spaces.length > 1) { + // account for instance where current space belongs to a collection of other spaces that share the same privileges that are grouped together, + // since we intend to apply the new privilege exclusively to the current space + // we remove the space from the shared privilege. + spaces.splice(i, 1); + } else { + Object.assign(selectedRole.value!.kibana[i], newPrivileges); + found = true; + } + + break; + } + } + + if (!found) { + selectedRole.value?.kibana.push(Object.assign({ spaces: [space.id] }, newPrivileges)); + } + + return selectedRole.value!; + }); + + await spacesClientsInvocator((clients) => + clients.rolesClient.bulkUpdateRoles({ rolesUpdate: updatedRoles }).then((response) => { + setAssigningToRole(false); + onSaveCompleted(response); + }) + ); + + storeDispatch({ + type: 'update_roles', + payload: updatedRoles, + }); + } catch (error) { + logger.error('Could not assign role to space!', error); + const message = error?.body?.message ?? error.toString(); + + notifications.toasts.addError(error, { + title: i18n.translate('xpack.spaces.management.spaceDetails.errorAssigningRoleTitle', { + defaultMessage: 'Error assigning role to space: {message}', + values: { message }, + }), + }); + } + }, [ + selectedRoles, + spacesClientsInvocator, + storeDispatch, + onSaveCompleted, + space.id, + roleSpacePrivilege, + roleCustomizationAnchor, + logger, + notifications.toasts, + ]); + + const getForm = () => { + return ( + + + {!isEditOperation.current && ( + + {i18n.translate( + 'xpack.spaces.management.spaceDetails.roles.selectRolesFormRowLabelAnchor', + { defaultMessage: 'Manage roles' } + )} + + } + helpText={i18n.translate( + 'xpack.spaces.management.spaceDetails.roles.selectRolesHelp', + { + defaultMessage: 'Select Kibana spaces to which you wish to assign privileges.', + } + )} + > + setSelectedRoles(value)} + fullWidth + /> + + )} + + + {Boolean(selectedRoles.length) && ( + + + {selectedRolesCombinedPrivileges.length > 1 ? ( + + {i18n.translate( + 'xpack.spaces.management.spaceDetails.roles.assign.privilegeConflictMsg.description', + { + defaultMessage: + 'Updating the settings here in a bulk will override current individual settings.', + } + )} + + ) : ( + + )} + + + ({ + ...privilege, + 'data-test-subj': `${privilege.id}-privilege-button`, + }))} + color="primary" + idSelected={roleSpacePrivilege} + onChange={(id) => onRoleSpacePrivilegeChange(id as KibanaRolePrivilege)} + isFullWidth + /> + + {Boolean(selectedRoles.length) && ( + + + {!kibanaPrivileges ? ( + + ) : ( + { + // apply selected changes only to the designated customization anchor, this way we delay reconciling the intending privileges + // to all of the selected roles till we decide to commit the changes chosen + setRoleCustomizationAnchor(({ value, privilegeIndex }) => { + let privilege; + + if ((privilege = value!.kibana?.[privilegeIndex!])) { + privilege.feature[featureId] = selectedPrivileges; + } + + return { value, privilegeIndex }; + }); + }} + onChangeAll={(_privilege) => { + // apply selected changes only to the designated customization anchor, this way we delay reconciling the intending privileges + // to all of the selected roles till we decide to commit the changes chosen + setRoleCustomizationAnchor(({ value, privilegeIndex }) => { + let privilege; + + if ((privilege = value!.kibana?.[privilegeIndex!])) { + privilege.base = _privilege; + } + + return { value, privilegeIndex }; + }); + }} + kibanaPrivileges={new KibanaPrivileges(kibanaPrivileges, features)} + privilegeCalculator={ + new PrivilegeFormCalculator( + new KibanaPrivileges(kibanaPrivileges, features), + roleCustomizationAnchor.value! + ) + } + allSpacesSelected={false} + canCustomizeSubFeaturePrivileges={false} + /> + )} + + + )} + + )} + + + ); + }; + + const getSaveButton = useCallback(() => { + return ( + assignRolesToSpace()} + data-test-subj={`space-${ + isEditOperation.current ? 'update' : 'assign' + }-role-create-roles-privilege-button`} + > + {isEditOperation.current + ? i18n.translate('xpack.spaces.management.spaceDetails.roles.updateRoleButton', { + defaultMessage: 'Update', + }) + : i18n.translate('xpack.spaces.management.spaceDetails.roles.assignRoleButton', { + defaultMessage: 'Assign', + })} + + ); + }, [assignRolesToSpace, assigningToRole, selectedRoles.length]); + + return ( + + + +

      + {isEditOperation.current + ? i18n.translate('xpack.spaces.management.spaceDetails.roles.assignRoleButton', { + defaultMessage: 'Edit role privileges', + }) + : i18n.translate( + 'xpack.spaces.management.spaceDetails.roles.assign.privileges.custom', + { + defaultMessage: 'Assign roles to space', + } + )} +

      +
      + + +

      + +

      +
      +
      + {getForm()} + + + + + {i18n.translate('xpack.spaces.management.spaceDetails.roles.cancelRoleButton', { + defaultMessage: 'Cancel', + })} + + + {getSaveButton()} + + +
      + ); +}; diff --git a/x-pack/plugins/spaces/public/management/edit_space/roles/component/space_assigned_roles_table.test.tsx b/x-pack/plugins/spaces/public/management/edit_space/roles/component/space_assigned_roles_table.test.tsx new file mode 100644 index 0000000000000..f909dba415c41 --- /dev/null +++ b/x-pack/plugins/spaces/public/management/edit_space/roles/component/space_assigned_roles_table.test.tsx @@ -0,0 +1,146 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { render, screen, within } from '@testing-library/react'; +import React, { type ComponentProps } from 'react'; + +import { __IntlProvider as IntlProvider } from '@kbn/i18n-react'; +import type { Role } from '@kbn/security-plugin-types-common'; + +import { SpaceAssignedRolesTable } from './space_assigned_roles_table'; + +const defaultProps: Pick< + ComponentProps, + | 'onClickAssignNewRole' + | 'onClickBulkRemove' + | 'onClickRowEditAction' + | 'onClickRowRemoveAction' + | 'currentSpace' +> = { + currentSpace: { + id: 'odyssey', + name: 'Odyssey', + disabledFeatures: [], + }, + onClickBulkRemove: jest.fn(), + onClickRowEditAction: jest.fn(), + onClickAssignNewRole: jest.fn(), + onClickRowRemoveAction: jest.fn(), +}; + +const renderTestComponent = ( + props: Pick< + ComponentProps, + 'assignedRoles' | 'isReadOnly' | 'supportsBulkAction' + > +) => { + render( + + + + ); +}; + +describe('SpaceAssignedRolesTable', () => { + const spaceAssignedRoles = new Map( + [ + { + name: 'Odyssey', + description: 'Journey vs. Destination', + elasticsearch: { cluster: [], run_as: [], indices: [] }, + kibana: [ + { + spaces: [defaultProps.currentSpace.id], + base: ['all'], + feature: {}, + }, + ], + }, + { + name: 'Iliad', + description: '???', + elasticsearch: { cluster: [], run_as: [], indices: [] }, + kibana: [ + { + spaces: [defaultProps.currentSpace.id], + base: ['read'], + feature: {}, + }, + ], + }, + { + name: 'Trisolaris', + description: 'Dark Forest???', + elasticsearch: { cluster: [], run_as: [], indices: [] }, + kibana: [ + { + spaces: ['*'], + base: ['read'], + feature: {}, + }, + ], + metadata: { + _reserved: true, + }, + }, + ].map((role) => [role.name.toLocaleLowerCase(), role]) + ); + + it('renders the table', () => { + renderTestComponent({ + assignedRoles: spaceAssignedRoles, + }); + + expect(screen.getByTestId('spaceAssignedRolesTable')).toBeInTheDocument(); + }); + + it('does not render row selection and bulk actions context menu by default', () => { + renderTestComponent({ + assignedRoles: spaceAssignedRoles, + supportsBulkAction: false, + }); + + expect(screen.getByTestId('spaceAssignedRolesTable')).toBeInTheDocument(); + expect(screen.queryByTestId('bulkActionsContextMenuOpener')).toBeNull(); + expect(screen.queryByTestId('checkboxSelectAll')).toBeNull(); + }); + + it('renders with row selection and bulk actions context menu when bulk action are supported and table is not in readOnly mode', () => { + renderTestComponent({ + assignedRoles: spaceAssignedRoles, + supportsBulkAction: true, + }); + + expect(screen.getByTestId('spaceAssignedRolesTable')).toBeInTheDocument(); + expect(screen.getByTestId('bulkActionsContextMenuOpener')).toBeInTheDocument(); + expect(screen.getByTestId('checkboxSelectAll')).toBeInTheDocument(); + }); + + // it('will not render the bulk actions context menu when the table is in readOnly mode', () => {}) + + it('prevents modification of reserved roles', () => { + renderTestComponent({ + assignedRoles: spaceAssignedRoles, + supportsBulkAction: true, + }); + + expect(screen.getByTestId('spaceAssignedRolesTable')).toBeInTheDocument(); + + const trisolarisRow = screen.getByTestId('space-role-row-Trisolaris'); + + expect(trisolarisRow).toBeInTheDocument(); + + // We expect a length of 2 because EUI also adds a second node for screen readers + expect(within(trisolarisRow).getAllByText('Reserved')).toHaveLength(2); + expect(within(trisolarisRow).getByTestId('spaceRoleCellActionLocked')).toBeInTheDocument(); + expect(within(trisolarisRow).getByTestId('spaceRoleCellActionLocked')).toBeDisabled(); + expect( + within(trisolarisRow).queryByTestId('spaceRoleCellDeleteAction') + ).not.toBeInTheDocument(); + expect(within(trisolarisRow).queryByTestId('spaceRoleCellEditAction')).not.toBeInTheDocument(); + }); +}); diff --git a/x-pack/plugins/spaces/public/management/edit_space/roles/component/space_assigned_roles_table.tsx b/x-pack/plugins/spaces/public/management/edit_space/roles/component/space_assigned_roles_table.tsx new file mode 100644 index 0000000000000..6a1d9f24bc042 --- /dev/null +++ b/x-pack/plugins/spaces/public/management/edit_space/roles/component/space_assigned_roles_table.tsx @@ -0,0 +1,509 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { + EuiBadge, + EuiButton, + EuiButtonEmpty, + EuiContextMenu, + EuiFlexGroup, + EuiFlexItem, + EuiHorizontalRule, + EuiIcon, + EuiInMemoryTable, + EuiPopover, + EuiText, + EuiTextColor, +} from '@elastic/eui'; +import type { + CriteriaWithPagination, + EuiBasicTableColumn, + EuiInMemoryTableProps, + EuiSearchBarProps, + EuiTableFieldDataColumnType, + EuiTableSelectionType, +} from '@elastic/eui'; +import React, { useCallback, useEffect, useMemo, useState } from 'react'; + +import { i18n } from '@kbn/i18n'; +import type { Role } from '@kbn/security-plugin-types-common'; + +import type { Space } from '../../../../../common'; +import { sortRolesForListing } from '../../../lib'; + +interface ISpaceAssignedRolesTableProps { + isReadOnly?: boolean; + currentSpace: Space; + assignedRoles: Map; + onClickAssignNewRole: () => Promise; + onClickRowEditAction: (role: Role) => void; + onClickRowRemoveAction: (role: Role) => void; + supportsBulkAction?: boolean; + onClickBulkRemove?: (selectedRoles: Role[]) => void; +} + +const isRoleReserved = (role: Role) => { + return role.metadata?._reserved; +}; +const isRoleAssignedToAll = (role: Role) => { + return role.kibana.reduce((acc, cur) => { + return cur.spaces.includes('*') || acc; + }, false); +}; + +/** + * @description checks if the passed role qualifies as one that can + * be edited by a user with sufficient permissions + */ +export const isEditableRole = (role: Role) => { + return !(isRoleReserved(role) || isRoleAssignedToAll(role)); +}; + +const getTableColumns = ({ + isReadOnly, + currentSpace, + onClickRowEditAction, + onClickRowRemoveAction, +}: Pick< + ISpaceAssignedRolesTableProps, + 'isReadOnly' | 'onClickRowEditAction' | 'onClickRowRemoveAction' | 'currentSpace' +>) => { + const columns: Array> = [ + { + field: 'name', + name: i18n.translate('xpack.spaces.management.spaceDetails.rolesTable.column.name.title', { + defaultMessage: 'Role', + }), + }, + { + field: 'privileges', + name: i18n.translate( + 'xpack.spaces.management.spaceDetails.rolesTable.column.privileges.title', + { defaultMessage: 'Privileges' } + ), + render: (_, record) => { + const uniquePrivilege = new Set( + record.kibana.reduce((privilegeBaseTuple, kibanaPrivilege) => { + if ( + kibanaPrivilege.spaces.includes(currentSpace.id) || + kibanaPrivilege.spaces.includes('*') + ) { + if (!kibanaPrivilege.base.length) { + privilegeBaseTuple.push( + i18n.translate( + 'xpack.spaces.management.spaceDetails.rolesTable.column.privileges.customPrivilege', + { defaultMessage: 'custom' } + ) + ); + } else { + return privilegeBaseTuple.concat(kibanaPrivilege.base); + } + } + + return privilegeBaseTuple; + }, [] as string[]) + ); + + return Array.from(uniquePrivilege).join(','); + }, + }, + { + field: 'metadata', + name: i18n.translate( + 'xpack.spaces.management.spaceDetails.rolesTable.column.roleType.title', + { defaultMessage: 'Role type' } + ), + render: (_value: Role['metadata']) => { + return React.createElement(EuiBadge, { + children: _value?._reserved + ? i18n.translate( + 'xpack.spaces.management.spaceDetails.rolesTable.column.roleType.reserved', + { defaultMessage: 'Reserved' } + ) + : i18n.translate( + 'xpack.spaces.management.spaceDetails.rolesTable.column.roleType.custom', + { defaultMessage: 'Custom' } + ), + color: _value?._reserved ? undefined : 'success', + }); + }, + }, + ]; + + if (!isReadOnly) { + columns.push({ + name: 'Actions', + actions: [ + { + type: 'icon', + icon: 'lock', + href: '#', + target: '_self', + 'data-test-subj': 'spaceRoleCellActionLocked', + name: (role) => + isRoleReserved(role) + ? i18n.translate( + 'xpack.spaces.management.spaceDetails.rolesTable.column.actions.notEditableTitle.isReserved', + { defaultMessage: 'Reserved' } + ) + : i18n.translate( + 'xpack.spaces.management.spaceDetails.rolesTable.column.actions.notEditableTitle.isAssignedToAll', + { defaultMessage: 'Assigned to all spaces' } + ), + description: (role) => + isRoleReserved(role) + ? i18n.translate( + 'xpack.spaces.management.spaceDetails.rolesTable.column.actions.notEditableDescription.isReserved', + { defaultMessage: `You can’t edit the access of reserved roles to this space.` } + ) + : i18n.translate( + 'xpack.spaces.management.spaceDetails.rolesTable.column.actions.notEditableDescription.isAssignedToAll', + { + defaultMessage: `Can't perform actions on a role that is assigned to all spaces`, + } + ), + isPrimary: true, + enabled: () => false, + available: (rowRecord) => !isEditableRole(rowRecord), + }, + { + type: 'icon', + icon: 'pencil', + 'data-test-subj': 'spaceRoleCellEditAction', + name: i18n.translate( + 'xpack.spaces.management.spaceDetails.rolesTable.column.actions.edit.title', + { defaultMessage: 'Remove from space' } + ), + isPrimary: true, + description: i18n.translate( + 'xpack.spaces.management.spaceDetails.rolesTable.column.actions.edit.description', + { + defaultMessage: + 'Click this action to edit the role privileges of this user for this space.', + } + ), + showOnHover: true, + available: (rowRecord) => isEditableRole(rowRecord), + onClick: onClickRowEditAction, + }, + { + isPrimary: true, + type: 'icon', + icon: 'trash', + color: 'danger', + 'data-test-subj': 'spaceRoleCellDeleteAction', + name: i18n.translate( + 'xpack.spaces.management.spaceDetails.rolesTable.column.actions.remove.title', + { defaultMessage: 'Remove from space' } + ), + description: i18n.translate( + 'xpack.spaces.management.spaceDetails.rolesTable.column.actions.edit.description', + { defaultMessage: 'Click this action to remove the user from this space.' } + ), + showOnHover: true, + available: (rowRecord) => isEditableRole(rowRecord), + onClick: onClickRowRemoveAction, + }, + ], + }); + } + + return columns; +}; + +const getRowProps = (item: Role) => { + const { name } = item; + return { + 'data-test-subj': `space-role-row-${name}`, + onClick: () => {}, + }; +}; + +const getCellProps = (item: Role, column: EuiTableFieldDataColumnType) => { + const { name } = item; + const { field } = column; + return { + 'data-test-subj': `space-role-cell-${name}-${String(field)}`, + textOnly: true, + }; +}; + +export const SpaceAssignedRolesTable = ({ + assignedRoles, + currentSpace, + onClickAssignNewRole, + onClickBulkRemove, + onClickRowEditAction, + onClickRowRemoveAction, + isReadOnly = false, + supportsBulkAction = false, +}: ISpaceAssignedRolesTableProps) => { + const tableColumns = useMemo( + () => + getTableColumns({ isReadOnly, onClickRowEditAction, onClickRowRemoveAction, currentSpace }), + [currentSpace, isReadOnly, onClickRowEditAction, onClickRowRemoveAction] + ); + const [rolesInView, setRolesInView] = useState([]); + const [selectedRoles, setSelectedRoles] = useState([]); + const [isBulkActionContextOpen, setBulkActionContextOpen] = useState(false); + const [pagination, setPagination] = useState['page']>({ + index: 0, + size: 10, + }); + + useEffect(() => { + const valuesFromMap = Array.from(assignedRoles.values()); + const sortedRoles = valuesFromMap.sort(sortRolesForListing); + setRolesInView(sortedRoles); + }, [assignedRoles]); + + const onSearchQueryChange = useCallback>>( + ({ query }) => { + const _assignedRolesTransformed = Array.from(assignedRoles.values()); + + if (query?.text) { + setRolesInView( + _assignedRolesTransformed.filter((role) => role.name.includes(query.text.toLowerCase())) + ); + } else { + setRolesInView(_assignedRolesTransformed); + } + }, + [assignedRoles] + ); + + const searchElementDefinition = useMemo(() => { + return { + box: { + fullWidth: false, + incremental: true, + 'data-test-subj': 'spaceAssignedRolesSearchBox', + placeholder: i18n.translate( + 'xpack.spaces.management.spaceDetails.roles.searchField.placeholder', + { defaultMessage: 'Filter assigned roles...' } + ), + }, + onChange: onSearchQueryChange, + toolsRight: ( + <> + {!isReadOnly && ( + + + {i18n.translate('xpack.spaces.management.spaceDetails.roles.assign', { + defaultMessage: 'Assign new roles', + })} + + + )} + + ), + }; + }, [isReadOnly, onClickAssignNewRole, onSearchQueryChange]); + + const tableHeader = useMemo['childrenBetween']>(() => { + if (!supportsBulkAction) { + return null; + } + + const pageSize = pagination.size; + const pageIndex = pagination.index; + + const selectableRoles = rolesInView.filter((role) => isEditableRole(role) && !isReadOnly); + + return ( + + + + + + + + {i18n.translate( + 'xpack.spaces.management.spaceDetails.rolesTable.selectedStatusInfo', + { + defaultMessage: + 'Showing: {pageItemLength} of {rolesInViewCount} | Selected: {selectedCount, plural, one {one role} other {{selectedCount} roles}}', + values: { + pageItemLength: Math.floor( + rolesInView.length / (pageSize * (pageIndex + 1)) + ) + ? pageSize * (pageIndex + 1) + : rolesInView.length % pageSize, + rolesInViewCount: rolesInView.length, + selectedCount: selectedRoles.length, + }, + } + )} + + + + + + {!isReadOnly && ( + + + + {i18n.translate( + 'xpack.spaces.management.spaceDetails.rolesTable.bulkActions.contextMenuOpener', + { defaultMessage: 'Bulk actions' } + )} + + } + > + , + name: ( + + {i18n.translate( + 'xpack.spaces.management.spaceDetails.rolesTable.bulkActions.remove', + { defaultMessage: 'Remove from space' } + )} + + ), + onClick: async () => { + onClickBulkRemove?.(selectedRoles); + setBulkActionContextOpen(false); + }, + }, + ], + }, + ]} + /> + + + + {Boolean(selectableRoles.length) && + React.createElement(EuiButtonEmpty, { + size: 's', + ...(Boolean(selectedRoles.length) + ? { + iconType: 'crossInCircle', + onClick: setSelectedRoles.bind(null, []), + children: i18n.translate( + 'xpack.spaces.management.spaceDetails.rolesTable.clearRolesSelection', + { defaultMessage: 'Clear selection' } + ), + } + : { + iconType: 'pagesSelect', + onClick: setSelectedRoles.bind(null, selectableRoles), + children: i18n.translate( + 'xpack.spaces.management.spaceDetails.rolesTable.selectAllRoles', + { + defaultMessage: + 'Select {count, plural, one {role} other {all {count} roles}}', + values: { count: selectableRoles.length }, + } + ), + }), + })} + + + )} + + + + + + + + ); + }, [ + pagination.size, + pagination.index, + rolesInView, + selectedRoles, + isReadOnly, + supportsBulkAction, + isBulkActionContextOpen, + onClickBulkRemove, + ]); + + const onTableChange = ({ page }: CriteriaWithPagination) => { + setPagination(page); + }; + + const onSelectionChange = (selection: Role[]) => { + setSelectedRoles(selection); + }; + + const selection: EuiTableSelectionType | undefined = useMemo(() => { + if (!supportsBulkAction) { + return void 0; + } + + return { + selected: selectedRoles, + selectable: (role) => isEditableRole(role), + selectableMessage: (_selectable, role) => { + if (isRoleReserved(role)) { + return i18n.translate( + 'xpack.spaces.management.spaceDetails.rolesTable.selectableMessage.isReserved', + { defaultMessage: `You can't select a role that is reserved` } + ); + } + if (isRoleAssignedToAll(role)) { + return i18n.translate( + 'xpack.spaces.management.spaceDetails.rolesTable.selectableMessage.isRoleAssignedToAll', + { defaultMessage: `You can't select a role that is assigned to all spaces` } + ); + } + + return i18n.translate( + 'xpack.spaces.management.spaceDetails.rolesTable.selectableMessage.selectRole', + { defaultMessage: `Select {roleName}`, values: { roleName: role.name } } + ); + }, + onSelectionChange, + }; + }, [selectedRoles, supportsBulkAction]); + + return ( + + + + data-test-subj="spaceAssignedRolesTable" + search={searchElementDefinition} + childrenBetween={tableHeader} + itemId="name" + columns={tableColumns} + items={rolesInView} + rowProps={getRowProps} + cellProps={getCellProps} + selection={selection} + pagination={{ + pageSize: pagination.size, + pageIndex: pagination.index, + pageSizeOptions: [50, 25, 10], + }} + onChange={onTableChange} + /> + + + ); +}; diff --git a/x-pack/plugins/spaces/public/management/lib/index.ts b/x-pack/plugins/spaces/public/management/lib/index.ts index cbeb9036ec4ed..0507a79cb76a5 100644 --- a/x-pack/plugins/spaces/public/management/lib/index.ts +++ b/x-pack/plugins/spaces/public/management/lib/index.ts @@ -8,3 +8,5 @@ export { toSpaceIdentifier, isValidSpaceIdentifier } from './space_identifier_utils'; export { SpaceValidator } from './validate_space'; + +export { sortRolesForListing } from './sort_roles'; diff --git a/x-pack/plugins/spaces/public/management/lib/sort_roles.test.ts b/x-pack/plugins/spaces/public/management/lib/sort_roles.test.ts new file mode 100644 index 0000000000000..bba4e1e7430c9 --- /dev/null +++ b/x-pack/plugins/spaces/public/management/lib/sort_roles.test.ts @@ -0,0 +1,171 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { Role } from '@kbn/security-plugin-types-common'; + +import { sortRolesForListing } from './sort_roles'; + +const createCustom = (name: string): Role => { + return { + name, + metadata: { _reserved: false }, + } as unknown as Role; +}; + +const createReserved = (name: string): Role => { + return { + name, + metadata: { _reserved: true }, + } as unknown as Role; +}; + +const expected = [ + 'Apple', + 'Banana', + 'Cherry', + 'Date', + 'Elderberry', + 'Fig', + 'Grape', + 'Honeydew melon', + 'Indian fig', + 'Jackfruit', + 'Kiwi', + 'Lemon', + 'Mango', + 'Nectarine', + 'Orange', + 'Papaya', + 'Quince', + 'Raspberry', + 'Strawberry', + 'Tangerine', + 'Artichoke', + 'Broccoli', + 'Carrot', + 'Daikon', + 'Eggplant', + 'Fennel', + 'Garlic', + 'Horseradish', + 'Iceberg lettuce', + 'Jalapeño', + 'Kale', + 'Leek', + 'Mushroom', + 'Napa cabbage', + 'Okra', + 'Parsnip', + 'Quinoa greens', + 'Radish', + 'Spinach', + 'Turnip', +]; + +describe('sortRolesForListing: sorts the roles correctly', () => { + it('when they are originally sorted alphabetically', () => { + const roles = [ + createCustom('Apple'), + createReserved('Artichoke'), + createCustom('Banana'), + createReserved('Broccoli'), + createReserved('Carrot'), + createCustom('Cherry'), + createReserved('Daikon'), + createCustom('Date'), + createReserved('Eggplant'), + createCustom('Elderberry'), + createReserved('Fennel'), + createCustom('Fig'), + createReserved('Garlic'), + createCustom('Grape'), + createCustom('Honeydew melon'), + createReserved('Horseradish'), + createReserved('Iceberg lettuce'), + createCustom('Indian fig'), + createCustom('Jackfruit'), + createReserved('Jalapeño'), + createReserved('Kale'), + createCustom('Kiwi'), + createReserved('Leek'), + createCustom('Lemon'), + createCustom('Mango'), + createReserved('Mushroom'), + createReserved('Napa cabbage'), + createCustom('Nectarine'), + createReserved('Okra'), + createCustom('Orange'), + createCustom('Papaya'), + createReserved('Parsnip'), + createCustom('Quince'), + createReserved('Quinoa greens'), + createReserved('Radish'), + createCustom('Raspberry'), + createReserved('Spinach'), + createCustom('Strawberry'), + createCustom('Tangerine'), + createReserved('Turnip'), + ]; + + const sortResult = roles.sort(sortRolesForListing); + const names = sortResult.map(({ name }) => name); + + // expect fruits to be at the top, otherwise sorted alphabetically + expect(names).toEqual(expected); + }); + + it('when they are originally sorted randomly', () => { + const roles = [ + createReserved('Iceberg lettuce'), + createCustom('Nectarine'), + createCustom('Strawberry'), + createReserved('Jalapeño'), + createCustom('Papaya'), + createReserved('Fennel'), + createCustom('Lemon'), + createCustom('Grape'), + createReserved('Artichoke'), + createCustom('Apple'), + createReserved('Quinoa greens'), + createCustom('Quince'), + createCustom('Raspberry'), + createReserved('Leek'), + createReserved('Radish'), + createReserved('Daikon'), + createReserved('Turnip'), + createCustom('Elderberry'), + createCustom('Tangerine'), + createReserved('Broccoli'), + createReserved('Mushroom'), + createCustom('Honeydew melon'), + createCustom('Kiwi'), + createCustom('Fig'), + createCustom('Mango'), + createCustom('Banana'), + createCustom('Jackfruit'), + createReserved('Napa cabbage'), + createReserved('Spinach'), + createCustom('Orange'), + createReserved('Okra'), + createReserved('Eggplant'), + createReserved('Kale'), + createCustom('Cherry'), + createReserved('Horseradish'), + createReserved('Garlic'), + createReserved('Carrot'), + createCustom('Date'), + createReserved('Parsnip'), + createCustom('Indian fig'), + ]; + + const sortResult = roles.sort(sortRolesForListing); + const names = sortResult.map(({ name }) => name); + + // expect fruits to be at the top, otherwise sorted alphabetically + expect(names).toEqual(expected); + }); +}); diff --git a/x-pack/plugins/spaces/public/management/lib/sort_roles.ts b/x-pack/plugins/spaces/public/management/lib/sort_roles.ts new file mode 100644 index 0000000000000..952502fcc777b --- /dev/null +++ b/x-pack/plugins/spaces/public/management/lib/sort_roles.ts @@ -0,0 +1,28 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { Role } from '@kbn/security-plugin-types-common'; + +/** + * Roles in the listing must be sorted so that custom roles appear in the beginning + * and reserved roles appear at the end + */ +export function sortRolesForListing(aRole: Role, bRole: Role) { + const { name: aName, metadata: aMeta } = aRole; + const { name: bName, metadata: bMeta } = bRole; + const aReserved = aMeta?._reserved ?? false; + const bReserved = bMeta?._reserved ?? false; + + if (aReserved && !bReserved) { + return 1; + } + if (!aReserved && bReserved) { + return -1; + } + + return aName.localeCompare(bName); +} diff --git a/x-pack/plugins/spaces/public/management/lib/validate_space.ts b/x-pack/plugins/spaces/public/management/lib/validate_space.ts index 9a9ae0cbe98fd..7a7980028dad0 100644 --- a/x-pack/plugins/spaces/public/management/lib/validate_space.ts +++ b/x-pack/plugins/spaces/public/management/lib/validate_space.ts @@ -11,7 +11,7 @@ import { i18n } from '@kbn/i18n'; import { isValidSpaceIdentifier } from './space_identifier_utils'; import { isReservedSpace } from '../../../common/is_reserved_space'; -import type { FormValues } from '../edit_space/manage_space_page'; +import type { CustomizeSpaceFormValues } from '../types'; interface SpaceValidatorOptions { shouldValidate?: boolean; @@ -32,7 +32,7 @@ export class SpaceValidator { this.shouldValidate = false; } - public validateSpaceName(space: FormValues) { + public validateSpaceName(space: CustomizeSpaceFormValues) { if (!this.shouldValidate) { return valid(); } @@ -56,7 +56,7 @@ export class SpaceValidator { return valid(); } - public validateSpaceDescription(space: FormValues) { + public validateSpaceDescription(space: CustomizeSpaceFormValues) { if (!this.shouldValidate) { return valid(); } @@ -72,7 +72,7 @@ export class SpaceValidator { return valid(); } - public validateURLIdentifier(space: FormValues) { + public validateURLIdentifier(space: CustomizeSpaceFormValues) { if (!this.shouldValidate) { return valid(); } @@ -104,7 +104,7 @@ export class SpaceValidator { return valid(); } - public validateAvatarInitials(space: FormValues) { + public validateAvatarInitials(space: CustomizeSpaceFormValues) { if (!this.shouldValidate) { return valid(); } @@ -129,7 +129,7 @@ export class SpaceValidator { return valid(); } - public validateAvatarColor(space: FormValues) { + public validateAvatarColor(space: CustomizeSpaceFormValues) { if (!this.shouldValidate) { return valid(); } @@ -153,7 +153,7 @@ export class SpaceValidator { return valid(); } - public validateAvatarImage(space: FormValues) { + public validateAvatarImage(space: CustomizeSpaceFormValues) { if (!this.shouldValidate) { return valid(); } @@ -170,7 +170,7 @@ export class SpaceValidator { } public validateSolutionView( - space: FormValues, + space: CustomizeSpaceFormValues, isEditing: boolean, allowSolutionVisibility = true ) { @@ -189,11 +189,15 @@ export class SpaceValidator { return valid(); } - public validateEnabledFeatures(space: FormValues) { + public validateEnabledFeatures(space: CustomizeSpaceFormValues) { return valid(); } - public validateForSave(space: FormValues, isEditing: boolean, allowSolutionVisibility: boolean) { + public validateForSave( + space: CustomizeSpaceFormValues, + isEditing: boolean, + allowSolutionVisibility: boolean + ) { const { isInvalid: isNameInvalid } = this.validateSpaceName(space); const { isInvalid: isDescriptionInvalid } = this.validateSpaceDescription(space); const { isInvalid: isIdentifierInvalid } = this.validateURLIdentifier(space); diff --git a/x-pack/plugins/spaces/public/management/management_service.test.ts b/x-pack/plugins/spaces/public/management/management_service.test.ts index e5438c0cf5e9c..40a61397e286f 100644 --- a/x-pack/plugins/spaces/public/management/management_service.test.ts +++ b/x-pack/plugins/spaces/public/management/management_service.test.ts @@ -7,6 +7,7 @@ import type { CoreSetup } from '@kbn/core/public'; import { coreMock } from '@kbn/core/public/mocks'; +import { loggingSystemMock } from '@kbn/core-logging-browser-mocks'; import type { ManagementSection } from '@kbn/management-plugin/public'; import { managementPluginMock } from '@kbn/management-plugin/public/mocks'; @@ -18,6 +19,7 @@ import type { PluginsStart } from '../plugin'; import { spacesManagerMock } from '../spaces_manager/mocks'; const eventTracker = new EventTracker({ reportEvent: jest.fn() }); +const logger = loggingSystemMock.createLogger(); describe('ManagementService', () => { const config: ConfigType = { @@ -44,6 +46,7 @@ describe('ManagementService', () => { .getStartServices as CoreSetup['getStartServices'], spacesManager: spacesManagerMock.create(), config, + logger, getRolesAPIClient: getRolesAPIClientMock, getPrivilegesAPIClient: jest.fn(), eventTracker, @@ -66,6 +69,7 @@ describe('ManagementService', () => { .getStartServices as CoreSetup['getStartServices'], spacesManager: spacesManagerMock.create(), config, + logger, getRolesAPIClient: getRolesAPIClientMock, getPrivilegesAPIClient: jest.fn(), eventTracker, @@ -89,6 +93,7 @@ describe('ManagementService', () => { .getStartServices as CoreSetup['getStartServices'], spacesManager: spacesManagerMock.create(), config, + logger, getRolesAPIClient: jest.fn(), getPrivilegesAPIClient: jest.fn(), eventTracker, diff --git a/x-pack/plugins/spaces/public/management/management_service.tsx b/x-pack/plugins/spaces/public/management/management_service.tsx index b186135d88e05..0379189e192c3 100644 --- a/x-pack/plugins/spaces/public/management/management_service.tsx +++ b/x-pack/plugins/spaces/public/management/management_service.tsx @@ -6,6 +6,7 @@ */ import type { StartServicesAccessor } from '@kbn/core/public'; +import type { Logger } from '@kbn/logging'; import type { ManagementApp, ManagementSetup } from '@kbn/management-plugin/public'; import type { PrivilegesAPIClientPublicContract, @@ -26,6 +27,7 @@ interface SetupDeps { getRolesAPIClient: () => Promise; eventTracker: EventTracker; getPrivilegesAPIClient: () => Promise; + logger: Logger; } export class ManagementService { @@ -36,6 +38,7 @@ export class ManagementService { management, spacesManager, config, + logger, getRolesAPIClient, eventTracker, getPrivilegesAPIClient, @@ -45,6 +48,7 @@ export class ManagementService { getStartServices, spacesManager, config, + logger, getRolesAPIClient, eventTracker, getPrivilegesAPIClient, diff --git a/x-pack/plugins/spaces/public/management/privilege_api_client.mock.ts b/x-pack/plugins/spaces/public/management/privilege_api_client.mock.ts new file mode 100644 index 0000000000000..a8351e2d88ad5 --- /dev/null +++ b/x-pack/plugins/spaces/public/management/privilege_api_client.mock.ts @@ -0,0 +1,18 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { PrivilegesAPIClientPublicContract } from '@kbn/security-plugin-types-public'; + +export const createPrivilegeAPIClientMock = (): PrivilegesAPIClientPublicContract => { + return { + getAll: jest.fn(), + }; +}; + +export const getPrivilegeAPIClientMock = jest + .fn() + .mockResolvedValue(createPrivilegeAPIClientMock()); diff --git a/x-pack/plugins/spaces/public/management/roles_api_client.mock.ts b/x-pack/plugins/spaces/public/management/roles_api_client.mock.ts index dd996814f9e51..66a356b3fdb75 100644 --- a/x-pack/plugins/spaces/public/management/roles_api_client.mock.ts +++ b/x-pack/plugins/spaces/public/management/roles_api_client.mock.ts @@ -13,6 +13,7 @@ export const createRolesAPIClientMock = (): RolesAPIClient => { getRole: jest.fn(), saveRole: jest.fn(), deleteRole: jest.fn(), + bulkUpdateRoles: jest.fn(), }; }; diff --git a/x-pack/plugins/spaces/public/management/spaces_grid/spaces_grid_page.tsx b/x-pack/plugins/spaces/public/management/spaces_grid/spaces_grid_page.tsx index 2bbcc290a8a83..5ac3ecf0ca687 100644 --- a/x-pack/plugins/spaces/public/management/spaces_grid/spaces_grid_page.tsx +++ b/x-pack/plugins/spaces/public/management/spaces_grid/spaces_grid_page.tsx @@ -35,7 +35,11 @@ import { reactRouterNavigate } from '@kbn/kibana-react-plugin/public'; import { addSpaceIdToPath, type Space } from '../../../common'; import { isReservedSpace } from '../../../common'; -import { DEFAULT_SPACE_ID, ENTER_SPACE_PATH } from '../../../common/constants'; +import { + DEFAULT_SPACE_ID, + ENTER_SPACE_PATH, + SOLUTION_VIEW_CLASSIC, +} from '../../../common/constants'; import { getSpacesFeatureDescription } from '../../constants'; import { getSpaceAvatarComponent } from '../../space_avatar'; import { SpaceSolutionBadge } from '../../space_solution_badge'; @@ -251,6 +255,9 @@ export class SpacesGridPage extends Component { }; public getColumnConfig() { + const { activeSpace, features } = this.state; + const { solution: activeSolution } = activeSpace ?? {}; + const config: Array> = [ { field: 'initials', @@ -306,17 +313,21 @@ export class SpacesGridPage extends Component { truncateText: true, width: '30%', }, - { + ]; + + const shouldShowFeaturesColumn = !activeSolution || activeSolution === SOLUTION_VIEW_CLASSIC; + if (shouldShowFeaturesColumn) { + config.push({ field: 'disabledFeatures', name: i18n.translate('xpack.spaces.management.spacesGridPage.featuresColumnName', { defaultMessage: 'Features visible', }), sortable: (space: Space) => { - return getEnabledFeatures(this.state.features, space).length; + return getEnabledFeatures(features, space).length; }, render: (_disabledFeatures: string[], rowRecord: Space) => { - const enabledFeatureCount = getEnabledFeatures(this.state.features, rowRecord).length; - if (enabledFeatureCount === this.state.features.length) { + const enabledFeatureCount = getEnabledFeatures(features, rowRecord).length; + if (enabledFeatureCount === features.length) { return ( { } if (enabledFeatureCount === 0) { return ( - + { defaultMessage="{enabledFeatureCount} / {totalFeatureCount}" values={{ enabledFeatureCount, - totalFeatureCount: this.state.features.length, + totalFeatureCount: features.length, }} /> ); }, + }); + } + + config.push({ + field: 'id', + name: i18n.translate('xpack.spaces.management.spacesGridPage.identifierColumnName', { + defaultMessage: 'Identifier', + }), + sortable: true, + render(id: string) { + if (id === DEFAULT_SPACE_ID) { + return ''; + } + return id; }, - { - field: 'id', - name: i18n.translate('xpack.spaces.management.spacesGridPage.identifierColumnName', { - defaultMessage: 'Identifier', - }), - sortable: true, - render(id: string) { - if (id === DEFAULT_SPACE_ID) { - return ''; - } - return id; - }, - }, - ]; + }); if (this.props.allowSolutionVisibility) { config.push({ @@ -404,7 +416,7 @@ export class SpacesGridPage extends Component { defaultMessage: 'Switch', }), description: (rowRecord) => - this.state.activeSpace?.name !== rowRecord.name + activeSpace?.name !== rowRecord.name ? i18n.translate( 'xpack.spaces.management.spacesGridPage.switchSpaceActionDescription', { @@ -428,7 +440,7 @@ export class SpacesGridPage extends Component { rowRecord.id, `${ENTER_SPACE_PATH}?next=/app/management/kibana/spaces/` ), - enabled: (rowRecord) => this.state.activeSpace?.name !== rowRecord.name, + enabled: (rowRecord) => activeSpace?.name !== rowRecord.name, 'data-test-subj': (rowRecord) => `${rowRecord.name}-switchSpace`, }, { @@ -440,7 +452,7 @@ export class SpacesGridPage extends Component { ? i18n.translate( 'xpack.spaces.management.spacesGridPage.deleteActionDisabledDescription', { - defaultMessage: `{spaceName} is reserved`, + defaultMessage: `You can't delete the {spaceName} space`, values: { spaceName: rowRecord.name }, } ) diff --git a/x-pack/plugins/spaces/public/management/spaces_management_app.test.tsx b/x-pack/plugins/spaces/public/management/spaces_management_app.test.tsx index d9852a82f8259..a04335613e59b 100644 --- a/x-pack/plugins/spaces/public/management/spaces_management_app.test.tsx +++ b/x-pack/plugins/spaces/public/management/spaces_management_app.test.tsx @@ -9,8 +9,17 @@ jest.mock('./spaces_grid', () => ({ SpacesGridPage: (props: any) => `Spaces Page: ${JSON.stringify(props)}`, })); +jest.mock('./create_space', () => ({ + CreateSpacePage: (props: any) => { + if (props.spacesManager && props.onLoadSpace) { + props.spacesManager.getSpace().then((space: any) => props.onLoadSpace(space)); + } + return `Spaces Create Page: ${JSON.stringify(props)}`; + }, +})); + jest.mock('./edit_space', () => ({ - ManageSpacePage: (props: any) => { + EditSpacePage: (props: any) => { if (props.spacesManager && props.onLoadSpace) { props.spacesManager.getSpace().then((space: any) => props.onLoadSpace(space)); } @@ -18,7 +27,12 @@ jest.mock('./edit_space', () => ({ }, })); -import { coreMock, scopedHistoryMock, themeServiceMock } from '@kbn/core/public/mocks'; +import { + coreMock, + loggingSystemMock, + scopedHistoryMock, + themeServiceMock, +} from '@kbn/core/public/mocks'; import { featuresPluginMock } from '@kbn/features-plugin/public/mocks'; import { spacesManagementApp } from './spaces_management_app'; @@ -37,6 +51,7 @@ const config: ConfigType = { }; const eventTracker = new EventTracker({ reportEvent: jest.fn() }); +const logger = loggingSystemMock.createLogger(); async function mountApp(basePath: string, pathname: string, spaceId?: string) { const container = document.createElement('div'); @@ -59,6 +74,7 @@ async function mountApp(basePath: string, pathname: string, spaceId?: string) { spacesManager, getStartServices: async () => [coreStart, pluginsStart as PluginsStart, {}], config, + logger, getRolesAPIClient: jest.fn(), getPrivilegesAPIClient: jest.fn(), eventTracker, @@ -82,6 +98,7 @@ describe('spacesManagementApp', () => { spacesManager: spacesManagerMock.create(), getStartServices: coreMock.createSetup().getStartServices as any, config, + logger, getRolesAPIClient: jest.fn(), getPrivilegesAPIClient: jest.fn(), eventTracker, @@ -136,7 +153,7 @@ describe('spacesManagementApp', () => { css="You have tried to stringify object returned from \`css\` function. It isn't supposed to be used directly (e.g. as value of the \`className\` prop), but rather handed to emotion so it can handle it (e.g. as value of \`css\` prop)." data-test-subj="kbnRedirectAppLink" > - Spaces Edit Page: {"capabilities":{"catalogue":{},"management":{},"navLinks":{}},"notifications":{"toasts":{}},"spacesManager":{"onActiveSpaceChange$":{}},"history":{"action":"PUSH","length":1,"location":{"pathname":"/create","search":"","hash":""}},"allowFeatureVisibility":true,"allowSolutionVisibility":true,"eventTracker":{"analytics":{}}} + Spaces Create Page: {"capabilities":{"catalogue":{},"management":{},"navLinks":{}},"notifications":{"toasts":{}},"spacesManager":{"onActiveSpaceChange$":{}},"history":{"action":"PUSH","length":1,"location":{"pathname":"/create","search":"","hash":""}},"allowFeatureVisibility":true,"allowSolutionVisibility":true,"eventTracker":{"analytics":{}}}
      `); @@ -159,7 +176,7 @@ describe('spacesManagementApp', () => { expect(setBreadcrumbs).toHaveBeenCalledTimes(1); expect(setBreadcrumbs).toHaveBeenCalledWith([ { href: `/`, text: 'Spaces' }, - { text: `space with id some-space` }, + { text: `Edit "space with id some-space"` }, ]); expect(docTitle.change).toHaveBeenCalledWith('Spaces'); expect(docTitle.reset).not.toHaveBeenCalled(); @@ -169,7 +186,7 @@ describe('spacesManagementApp', () => { css="You have tried to stringify object returned from \`css\` function. It isn't supposed to be used directly (e.g. as value of the \`className\` prop), but rather handed to emotion so it can handle it (e.g. as value of \`css\` prop)." data-test-subj="kbnRedirectAppLink" > - Spaces Edit Page: {"capabilities":{"catalogue":{},"management":{},"navLinks":{}},"notifications":{"toasts":{}},"spacesManager":{"onActiveSpaceChange$":{}},"spaceId":"some-space","history":{"action":"PUSH","length":1,"location":{"pathname":"/edit/some-space","search":"","hash":""}},"allowFeatureVisibility":true,"allowSolutionVisibility":true,"eventTracker":{"analytics":{}}} + Spaces Edit Page: {"capabilities":{"catalogue":{},"management":{},"navLinks":{}},"serverBasePath":"","http":{"basePath":{"basePath":"","serverBasePath":"","assetsHrefBase":""},"anonymousPaths":{},"externalUrl":{},"staticAssets":{}},"overlays":{"banners":{}},"notifications":{"toasts":{}},"theme":{"theme$":{}},"i18n":{},"logger":{"context":[]},"spacesManager":{"onActiveSpaceChange$":{}},"spaceId":"some-space","history":{"action":"PUSH","length":1,"location":{"pathname":"/edit/some-space","search":"","hash":""}},"allowFeatureVisibility":true,"allowSolutionVisibility":true}
`); diff --git a/x-pack/plugins/spaces/public/management/spaces_management_app.tsx b/x-pack/plugins/spaces/public/management/spaces_management_app.tsx index 40532a7259521..fa74316779a7e 100644 --- a/x-pack/plugins/spaces/public/management/spaces_management_app.tsx +++ b/x-pack/plugins/spaces/public/management/spaces_management_app.tsx @@ -12,6 +12,7 @@ import { useParams } from 'react-router-dom'; import type { StartServicesAccessor } from '@kbn/core/public'; import { i18n } from '@kbn/i18n'; import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; +import type { Logger } from '@kbn/logging'; import type { RegisterManagementAppArgs } from '@kbn/management-plugin/public'; import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render'; import type { @@ -31,6 +32,7 @@ interface CreateParams { getStartServices: StartServicesAccessor; spacesManager: SpacesManager; config: ConfigType; + logger: Logger; getRolesAPIClient: () => Promise; eventTracker: EventTracker; getPrivilegesAPIClient: () => Promise; @@ -38,7 +40,15 @@ interface CreateParams { export const spacesManagementApp = Object.freeze({ id: 'spaces', - create({ getStartServices, spacesManager, config, eventTracker }: CreateParams) { + create({ + getStartServices, + spacesManager, + config, + logger, + eventTracker, + getRolesAPIClient, + getPrivilegesAPIClient, + }: CreateParams) { const title = i18n.translate('xpack.spaces.displayName', { defaultMessage: 'Spaces', }); @@ -49,14 +59,23 @@ export const spacesManagementApp = Object.freeze({ title, async mount({ element, setBreadcrumbs, history }) { - const [[coreStart, { features }], { SpacesGridPage }, { ManageSpacePage }] = - await Promise.all([getStartServices(), import('./spaces_grid'), import('./edit_space')]); + const [ + [coreStart, { features }], + { SpacesGridPage }, + { CreateSpacePage }, + { EditSpacePage }, + ] = await Promise.all([ + getStartServices(), + import('./spaces_grid'), + import('./create_space'), + import('./edit_space'), + ]); const spacesFirstBreadcrumb = { text: title, href: `/`, }; - const { notifications, application, chrome, http } = coreStart; + const { notifications, application, chrome, http, overlays, theme } = coreStart; chrome.docTitle.change(title); @@ -88,7 +107,7 @@ export const spacesManagementApp = Object.freeze({ ]); return ( - { - const { spaceId } = useParams<{ spaceId: string }>(); + const { spaceId, selectedTabId } = useParams<{ + spaceId: string; + selectedTabId?: string; + }>(); + + const breadcrumbText = (space: Space) => + i18n.translate('xpack.spaces.management.editSpaceBreadcrumb', { + defaultMessage: 'Edit "{space}"', + values: { space: space.name }, + }); const onLoadSpace = (space: Space) => { setBreadcrumbs([ spacesFirstBreadcrumb, { - text: space.name, + text: breadcrumbText(space), }, ]); }; return ( - ); }; @@ -141,7 +179,7 @@ export const spacesManagementApp = Object.freeze({ - + diff --git a/x-pack/plugins/spaces/public/management/types.ts b/x-pack/plugins/spaces/public/management/types.ts new file mode 100644 index 0000000000000..dbf839256e43e --- /dev/null +++ b/x-pack/plugins/spaces/public/management/types.ts @@ -0,0 +1,18 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { Space } from '../../common'; + +/** + * Values used in the "Customize Space" form + */ +export interface CustomizeSpaceFormValues extends Partial { + customIdentifier?: boolean; + avatarType?: 'initials' | 'image'; + customAvatarInitials?: boolean; + customAvatarColor?: boolean; +} diff --git a/x-pack/plugins/spaces/public/plugin.tsx b/x-pack/plugins/spaces/public/plugin.tsx index 6d545cdb70e61..86196333c0883 100644 --- a/x-pack/plugins/spaces/public/plugin.tsx +++ b/x-pack/plugins/spaces/public/plugin.tsx @@ -125,6 +125,7 @@ export class SpacesPlugin implements Plugin; } diff --git a/x-pack/plugins/spaces/public/spaces_manager/spaces_manager.test.ts b/x-pack/plugins/spaces/public/spaces_manager/spaces_manager.test.ts index bed49326efea5..021620b41dc55 100644 --- a/x-pack/plugins/spaces/public/spaces_manager/spaces_manager.test.ts +++ b/x-pack/plugins/spaces/public/spaces_manager/spaces_manager.test.ts @@ -183,4 +183,32 @@ describe('SpacesManager', () => { }); }); }); + + describe('#getRolesForSpace', () => { + it('retrieves roles for the specified space', async () => { + const coreStart = coreMock.createStart(); + const rolesForSpace = [Symbol()]; + coreStart.http.get.mockResolvedValue(rolesForSpace); + const spacesManager = new SpacesManager(coreStart.http); + + const result = await spacesManager.getRolesForSpace('foo'); + expect(coreStart.http.get).toHaveBeenCalledTimes(1); + expect(coreStart.http.get).toHaveBeenLastCalledWith('/internal/security/roles/foo'); + expect(result).toEqual(rolesForSpace); + }); + }); + + describe('#getContentForSpace', () => { + it('retrieves content for the specified space', async () => { + const coreStart = coreMock.createStart(); + const spaceContent = [Symbol()]; + coreStart.http.get.mockResolvedValue({ summary: spaceContent, total: spaceContent.length }); + const spacesManager = new SpacesManager(coreStart.http); + + const result = await spacesManager.getContentForSpace('foo'); + expect(coreStart.http.get).toHaveBeenCalledTimes(1); + expect(coreStart.http.get).toHaveBeenLastCalledWith('/internal/spaces/foo/content_summary'); + expect(result).toEqual({ summary: spaceContent, total: spaceContent.length }); + }); + }); }); diff --git a/x-pack/plugins/spaces/public/spaces_manager/spaces_manager.ts b/x-pack/plugins/spaces/public/spaces_manager/spaces_manager.ts index 7762158a4379b..962f02ca2bd79 100644 --- a/x-pack/plugins/spaces/public/spaces_manager/spaces_manager.ts +++ b/x-pack/plugins/spaces/public/spaces_manager/spaces_manager.ts @@ -11,9 +11,11 @@ import { BehaviorSubject, skipWhile } from 'rxjs'; import type { HttpSetup } from '@kbn/core/public'; import type { SavedObjectsCollectMultiNamespaceReferencesResponse } from '@kbn/core-saved-objects-api-server'; import type { LegacyUrlAliasTarget } from '@kbn/core-saved-objects-common'; +import type { Role } from '@kbn/security-plugin-types-common'; import type { GetAllSpacesOptions, GetSpaceResult, Space } from '../../common'; import type { CopySavedObjectsToSpaceResponse } from '../copy_saved_objects_to_space/types'; +import type { SpaceContentTypeSummaryItem } from '../types'; interface SavedObjectTarget { type: string; @@ -192,4 +194,14 @@ export class SpacesManager { private isAnonymousPath() { return this.http.anonymousPaths.isAnonymous(window.location.pathname); } + + public getContentForSpace( + id: string + ): Promise<{ summary: SpaceContentTypeSummaryItem[]; total: number }> { + return this.http.get(`/internal/spaces/${id}/content_summary`); + } + + public getRolesForSpace(id: string): Promise { + return this.http.get(`/internal/security/roles/${id}`); + } } diff --git a/x-pack/plugins/spaces/public/types.ts b/x-pack/plugins/spaces/public/types.ts index b5540df1fdd5a..874ed9e8fd7d3 100644 --- a/x-pack/plugins/spaces/public/types.ts +++ b/x-pack/plugins/spaces/public/types.ts @@ -66,3 +66,14 @@ export interface SpacesApi { */ isSolutionViewEnabled: boolean; } + +/** + * The API for retrieving content associated with a space returns an array of summary data for each type of + * saved object content. SpaceContentTypeSummaryItem is the format of the items included in this summary data. + */ +export interface SpaceContentTypeSummaryItem { + displayName: string; + icon?: string; + count: number; + type: string; // the type of saved object content (dashboard, search, config, etc) +} diff --git a/x-pack/plugins/spaces/tsconfig.json b/x-pack/plugins/spaces/tsconfig.json index ba13f984ef66d..20d3f7d3175d8 100644 --- a/x-pack/plugins/spaces/tsconfig.json +++ b/x-pack/plugins/spaces/tsconfig.json @@ -37,7 +37,21 @@ "@kbn/utility-types-jest", "@kbn/security-plugin-types-public", "@kbn/cloud-plugin", - "@kbn/core-analytics-browser" + "@kbn/core-analytics-browser", + "@kbn/core-analytics-browser", + "@kbn/security-plugin-types-common", + "@kbn/core-application-browser", + "@kbn/unsaved-changes-prompt", + "@kbn/core-lifecycle-browser", + "@kbn/security-role-management-model", + "@kbn/security-ui-components", + "@kbn/react-kibana-mount", + "@kbn/shared-ux-utility", + "@kbn/core-application-common", + "@kbn/security-authorization-core", + "@kbn/core-notifications-browser", + "@kbn/logging", + "@kbn/core-logging-browser-mocks", ], "exclude": [ "target/**/*", diff --git a/x-pack/plugins/task_manager/server/buffered_task_store.mock.ts b/x-pack/plugins/task_manager/server/buffered_task_store.mock.ts index efdea5a49bc38..c00a86abc5c2c 100644 --- a/x-pack/plugins/task_manager/server/buffered_task_store.mock.ts +++ b/x-pack/plugins/task_manager/server/buffered_task_store.mock.ts @@ -11,6 +11,7 @@ import { BufferedTaskStore } from './buffered_task_store'; const createBufferedTaskStoreMock = () => { const mocked: jest.Mocked> = { update: jest.fn(), + partialUpdate: jest.fn(), remove: jest.fn(), }; return mocked; diff --git a/x-pack/plugins/task_manager/server/buffered_task_store.test.ts b/x-pack/plugins/task_manager/server/buffered_task_store.test.ts index fa7a59478728d..d8734683985a6 100644 --- a/x-pack/plugins/task_manager/server/buffered_task_store.test.ts +++ b/x-pack/plugins/task_manager/server/buffered_task_store.test.ts @@ -9,6 +9,7 @@ import { taskStoreMock } from './task_store.mock'; import { BufferedTaskStore } from './buffered_task_store'; import { asErr, asOk } from './lib/result_type'; import { taskManagerMock } from './mocks'; +import { TaskStatus } from './task'; describe('Buffered Task Store', () => { describe('remove', () => { @@ -198,4 +199,181 @@ describe('Buffered Task Store', () => { expect(await results[3]).toMatchObject(tasks[3]); }); }); + + describe('partialUpdate', () => { + test("proxies the TaskStore's `bulkPartialUpdate`", async () => { + const taskStore = taskStoreMock.create(); + const bufferedStore = new BufferedTaskStore(taskStore, {}); + + const task = taskManagerMock.createTask(); + const partialTask = { + id: task.id, + version: task.version, + status: 'running' as TaskStatus, + }; + + taskStore.bulkPartialUpdate.mockResolvedValue([asOk(partialTask)]); + + expect( + await bufferedStore.partialUpdate(partialTask, { validate: true, doc: task }) + ).toMatchObject(partialTask); + expect(taskStore.bulkPartialUpdate).toHaveBeenCalledWith([partialTask]); + + expect(taskStore.taskValidator.getValidatedTaskInstanceForUpdating).toHaveBeenCalledTimes(1); + expect(taskStore.taskValidator.getValidatedTaskInstanceFromReading).toHaveBeenCalledTimes(1); + expect(taskStore.taskValidator.getValidatedTaskInstanceForUpdating).toHaveBeenCalledWith( + { ...task, ...partialTask }, + { validate: true } + ); + expect(taskStore.taskValidator.getValidatedTaskInstanceFromReading).toHaveBeenCalledWith( + { ...task, ...partialTask }, + { validate: true } + ); + }); + + test(`doesn't validate when specified`, async () => { + const taskStore = taskStoreMock.create(); + const bufferedStore = new BufferedTaskStore(taskStore, {}); + + const task = taskManagerMock.createTask(); + const partialTask = { + id: task.id, + version: task.version, + status: 'running' as TaskStatus, + }; + + taskStore.bulkPartialUpdate.mockResolvedValue([asOk(partialTask)]); + + expect( + await bufferedStore.partialUpdate(partialTask, { validate: false, doc: task }) + ).toMatchObject(partialTask); + expect(taskStore.bulkPartialUpdate).toHaveBeenCalledWith([partialTask]); + + expect(taskStore.taskValidator.getValidatedTaskInstanceForUpdating).toHaveBeenCalledTimes(1); + expect(taskStore.taskValidator.getValidatedTaskInstanceFromReading).toHaveBeenCalledTimes(1); + expect(taskStore.taskValidator.getValidatedTaskInstanceForUpdating).toHaveBeenCalledWith( + { ...task, ...partialTask }, + { validate: false } + ); + expect(taskStore.taskValidator.getValidatedTaskInstanceFromReading).toHaveBeenCalledWith( + { ...task, ...partialTask }, + { validate: false } + ); + }); + + test('handles partially successful bulkPartialUpdate, resolving each call appropriately', async () => { + const taskStore = taskStoreMock.create(); + const bufferedStore = new BufferedTaskStore(taskStore, {}); + + const tasks = [ + taskManagerMock.createTask(), + taskManagerMock.createTask({ id: 'task_7c149afd-6250-4ca5-a314-20af1348d5e9' }), + taskManagerMock.createTask(), + ]; + const partialTasks = tasks.map((task) => ({ + id: task.id, + version: task.version, + status: 'running' as TaskStatus, + })); + + taskStore.bulkPartialUpdate.mockResolvedValueOnce([ + asOk(partialTasks[0]), + asErr({ + type: 'task', + id: partialTasks[1].id, + status: 404, + error: { + type: 'document_missing_exception', + reason: '[5]: document missing', + index_uuid: 'aAsFqTI0Tc2W0LCWgPNrOA', + shard: '0', + index: '.kibana_task_manager_8.16.0_001', + }, + }), + asOk(partialTasks[2]), + ]); + + const results = [ + bufferedStore.partialUpdate(partialTasks[0], { validate: true, doc: tasks[0] }), + bufferedStore.partialUpdate(partialTasks[1], { validate: true, doc: tasks[1] }), + bufferedStore.partialUpdate(partialTasks[2], { validate: true, doc: tasks[2] }), + ]; + expect(await results[0]).toMatchObject(partialTasks[0]); + await expect(results[1]).rejects.toMatchInlineSnapshot(` + Object { + "error": Object { + "index": ".kibana_task_manager_8.16.0_001", + "index_uuid": "aAsFqTI0Tc2W0LCWgPNrOA", + "reason": "[5]: document missing", + "shard": "0", + "type": "document_missing_exception", + }, + "id": "task_7c149afd-6250-4ca5-a314-20af1348d5e9", + "status": 404, + "type": "task", + } + `); + expect(await results[2]).toMatchObject(partialTasks[2]); + }); + + test('handles multiple items with the same id', async () => { + const taskStore = taskStoreMock.create(); + const bufferedStore = new BufferedTaskStore(taskStore, {}); + + const duplicateIdTask = taskManagerMock.createTask(); + const tasks = [ + duplicateIdTask, + taskManagerMock.createTask({ id: 'task_16748083-bc28-4599-893b-c8ec16e55c10' }), + taskManagerMock.createTask(), + taskManagerMock.createTask({ id: duplicateIdTask.id }), + ]; + const partialTasks = tasks.map((task) => ({ + id: task.id, + version: task.version, + status: 'running' as TaskStatus, + })); + + taskStore.bulkPartialUpdate.mockResolvedValueOnce([ + asOk(partialTasks[0]), + asErr({ + type: 'task', + id: partialTasks[1].id, + status: 404, + error: { + type: 'document_missing_exception', + reason: '[5]: document missing', + index_uuid: 'aAsFqTI0Tc2W0LCWgPNrOA', + shard: '0', + index: '.kibana_task_manager_8.16.0_001', + }, + }), + asOk(partialTasks[2]), + asOk(partialTasks[3]), + ]); + + const results = [ + bufferedStore.partialUpdate(partialTasks[0], { validate: true, doc: tasks[0] }), + bufferedStore.partialUpdate(partialTasks[1], { validate: true, doc: tasks[1] }), + bufferedStore.partialUpdate(partialTasks[2], { validate: true, doc: tasks[2] }), + bufferedStore.partialUpdate(partialTasks[3], { validate: true, doc: tasks[3] }), + ]; + expect(await results[0]).toMatchObject(partialTasks[0]); + await expect(results[1]).rejects.toMatchInlineSnapshot(` + Object { + "error": Object { + "index": ".kibana_task_manager_8.16.0_001", + "index_uuid": "aAsFqTI0Tc2W0LCWgPNrOA", + "reason": "[5]: document missing", + "shard": "0", + "type": "document_missing_exception", + }, + "id": "task_16748083-bc28-4599-893b-c8ec16e55c10", + "status": 404, + "type": "task", + } + `); + expect(await results[2]).toMatchObject(partialTasks[2]); + expect(await results[3]).toMatchObject(partialTasks[3]); + }); + }); }); diff --git a/x-pack/plugins/task_manager/server/buffered_task_store.ts b/x-pack/plugins/task_manager/server/buffered_task_store.ts index 8009db4259263..d5b2dbd20a922 100644 --- a/x-pack/plugins/task_manager/server/buffered_task_store.ts +++ b/x-pack/plugins/task_manager/server/buffered_task_store.ts @@ -6,7 +6,7 @@ */ import { TaskStore } from './task_store'; -import { ConcreteTaskInstance } from './task'; +import { ConcreteTaskInstance, PartialConcreteTaskInstance } from './task'; import { Updatable } from './task_running'; import { createBuffer, Operation, BufferOptions, Entity } from './lib/bulk_operation_buffer'; import { unwrapPromise, asErr, asOk } from './lib/result_type'; @@ -15,6 +15,7 @@ import { unwrapPromise, asErr, asOk } from './lib/result_type'; const DEFAULT_BUFFER_MAX_DURATION = 50; export class BufferedTaskStore implements Updatable { + private bufferedPartialUpdate: Operation; private bufferedUpdate: Operation; private bufferedRemove: Operation; @@ -31,6 +32,13 @@ export class BufferedTaskStore implements Updatable { ...options, } ); + this.bufferedPartialUpdate = createBuffer( + (docs) => taskStore.bulkPartialUpdate(docs), + { + bufferMaxDuration: DEFAULT_BUFFER_MAX_DURATION, + ...options, + } + ); this.bufferedRemove = createBuffer( async (ids) => { const result = await taskStore.bulkRemove(ids.map(({ id }) => id)); @@ -60,6 +68,25 @@ export class BufferedTaskStore implements Updatable { }); } + public async partialUpdate( + partialDoc: PartialConcreteTaskInstance, + options: { validate: boolean; doc: ConcreteTaskInstance } + ): Promise { + // merge the partial updates with the doc and validate + this.taskStore.taskValidator.getValidatedTaskInstanceForUpdating( + { ...options.doc, ...partialDoc }, + { validate: options.validate } + ); + + const result = await unwrapPromise(this.bufferedPartialUpdate(partialDoc)); + + // merge the partial update result with the doc and validate + return this.taskStore.taskValidator.getValidatedTaskInstanceFromReading( + { ...options.doc, ...result }, + { validate: options.validate } + ); + } + public async remove(id: string): Promise { await unwrapPromise(this.bufferedRemove({ id })); } diff --git a/x-pack/plugins/task_manager/server/ephemeral_task_lifecycle.test.ts b/x-pack/plugins/task_manager/server/ephemeral_task_lifecycle.test.ts index 100555e9ead4c..31c873554ee77 100644 --- a/x-pack/plugins/task_manager/server/ephemeral_task_lifecycle.test.ts +++ b/x-pack/plugins/task_manager/server/ephemeral_task_lifecycle.test.ts @@ -84,7 +84,7 @@ describe('EphemeralTaskLifecycle', () => { }, worker_utilization_running_average_window: 5, metrics_reset_interval: 3000, - claim_strategy: 'default', + claim_strategy: 'update_by_query', request_timeouts: { update_by_query: 1000, }, diff --git a/x-pack/plugins/task_manager/server/integration_tests/managed_configuration.test.ts b/x-pack/plugins/task_manager/server/integration_tests/managed_configuration.test.ts index 7e626c5853820..92d97eea7c6b2 100644 --- a/x-pack/plugins/task_manager/server/integration_tests/managed_configuration.test.ts +++ b/x-pack/plugins/task_manager/server/integration_tests/managed_configuration.test.ts @@ -83,7 +83,7 @@ describe('managed configuration', () => { }, worker_utilization_running_average_window: 5, metrics_reset_interval: 3000, - claim_strategy: 'default', + claim_strategy: 'update_by_query', request_timeouts: { update_by_query: 1000, }, @@ -205,7 +205,7 @@ describe('managed configuration', () => { }, worker_utilization_running_average_window: 5, metrics_reset_interval: 3000, - claim_strategy: 'default', + claim_strategy: 'update_by_query', request_timeouts: { update_by_query: 1000, }, diff --git a/x-pack/plugins/task_manager/server/integration_tests/removed_types.test.ts b/x-pack/plugins/task_manager/server/integration_tests/removed_types.test.ts new file mode 100644 index 0000000000000..69bf717b95fc6 --- /dev/null +++ b/x-pack/plugins/task_manager/server/integration_tests/removed_types.test.ts @@ -0,0 +1,147 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { v4 as uuidV4 } from 'uuid'; +import { ElasticsearchClient } from '@kbn/core/server'; +import { TaskManagerPlugin, TaskManagerStartContract } from '../plugin'; +import { injectTask, retry, setupTestServers } from './lib'; +import { TestElasticsearchUtils, TestKibanaUtils } from '@kbn/core-test-helpers-kbn-server'; +import { ConcreteTaskInstance, TaskStatus } from '../task'; +import { CreateWorkloadAggregatorOpts } from '../monitoring/workload_statistics'; + +const taskManagerStartSpy = jest.spyOn(TaskManagerPlugin.prototype, 'start'); + +const { createWorkloadAggregator: createWorkloadAggregatorMock } = jest.requireMock( + '../monitoring/workload_statistics' +); +jest.mock('../monitoring/workload_statistics', () => { + const actual = jest.requireActual('../monitoring/workload_statistics'); + return { + ...actual, + createWorkloadAggregator: jest.fn().mockImplementation((opts) => { + return new actual.createWorkloadAggregator(opts); + }), + }; +}); + +describe('unrecognized task types', () => { + let esServer: TestElasticsearchUtils; + let kibanaServer: TestKibanaUtils; + let taskManagerPlugin: TaskManagerStartContract; + let createWorkloadAggregatorOpts: CreateWorkloadAggregatorOpts; + + const taskIdsToRemove: string[] = []; + + beforeAll(async () => { + const setupResult = await setupTestServers({ + xpack: { + task_manager: { + monitored_aggregated_stats_refresh_rate: 5000, + }, + }, + }); + esServer = setupResult.esServer; + kibanaServer = setupResult.kibanaServer; + + expect(taskManagerStartSpy).toHaveBeenCalledTimes(1); + taskManagerPlugin = taskManagerStartSpy.mock.results[0].value; + + expect(createWorkloadAggregatorMock).toHaveBeenCalledTimes(1); + createWorkloadAggregatorOpts = createWorkloadAggregatorMock.mock.calls[0][0]; + }); + + afterAll(async () => { + if (kibanaServer) { + await kibanaServer.stop(); + } + if (esServer) { + await esServer.stop(); + } + }); + + beforeEach(async () => { + jest.clearAllMocks(); + }); + + afterEach(async () => { + while (taskIdsToRemove.length > 0) { + const id = taskIdsToRemove.pop(); + await taskManagerPlugin.removeIfExists(id!); + } + }); + + test('should be no workload aggregator errors when there are removed task types', async () => { + const errorLogSpy = jest.spyOn(createWorkloadAggregatorOpts.logger, 'error'); + const removeTypeId = uuidV4(); + await injectTask(kibanaServer.coreStart.elasticsearch.client.asInternalUser, { + id: removeTypeId, + taskType: 'sampleTaskRemovedType', + params: {}, + state: { foo: 'test' }, + stateVersion: 1, + runAt: new Date(), + enabled: true, + scheduledAt: new Date(), + attempts: 0, + status: TaskStatus.Idle, + startedAt: null, + retryAt: null, + ownerId: null, + }); + const notRegisteredTypeId = uuidV4(); + await injectTask(kibanaServer.coreStart.elasticsearch.client.asInternalUser, { + id: notRegisteredTypeId, + taskType: 'sampleTaskNotRegisteredType', + params: {}, + state: { foo: 'test' }, + stateVersion: 1, + runAt: new Date(), + enabled: true, + scheduledAt: new Date(), + attempts: 0, + status: TaskStatus.Idle, + startedAt: null, + retryAt: null, + ownerId: null, + }); + + taskIdsToRemove.push(removeTypeId); + taskIdsToRemove.push(notRegisteredTypeId); + + await retry(async () => { + const task = await getTask(kibanaServer.coreStart.elasticsearch.client.asInternalUser); + expect(task?._source?.task?.status).toBe('unrecognized'); + }); + + // monitored_aggregated_stats_refresh_rate is set to the minimum of 5 seconds + // so we want to wait that long to let it refresh + await new Promise((r) => setTimeout(r, 5100)); + + expect(errorLogSpy).not.toHaveBeenCalled(); + }); +}); + +async function getTask(esClient: ElasticsearchClient) { + const response = await esClient.search<{ task: ConcreteTaskInstance }>({ + index: '.kibana_task_manager', + body: { + query: { + bool: { + filter: [ + { + term: { + 'task.taskType': 'sampleTaskRemovedType', + }, + }, + ], + }, + }, + }, + }); + + return response.hits.hits[0]; +} diff --git a/x-pack/plugins/task_manager/server/lib/bulk_operation_buffer.ts b/x-pack/plugins/task_manager/server/lib/bulk_operation_buffer.ts index 20ac17a0e57f6..76a7fe338a7e5 100644 --- a/x-pack/plugins/task_manager/server/lib/bulk_operation_buffer.ts +++ b/x-pack/plugins/task_manager/server/lib/bulk_operation_buffer.ts @@ -7,6 +7,7 @@ import { Logger } from '@kbn/core/server'; import { map } from 'lodash'; +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { Subject, race, from } from 'rxjs'; import { bufferWhen, filter, bufferCount, flatMap, mapTo, first } from 'rxjs'; import { SavedObjectError } from '@kbn/core-saved-objects-common'; @@ -25,7 +26,8 @@ export interface Entity { export interface ErrorOutput { type: string; id: string; - error: SavedObjectError; + status?: number; + error: SavedObjectError | estypes.ErrorCause; } export type OperationResult = Result; diff --git a/x-pack/plugins/task_manager/server/lib/calculate_health_status.test.ts b/x-pack/plugins/task_manager/server/lib/calculate_health_status.test.ts index 3943e94bdb8b3..24e2f510f949c 100644 --- a/x-pack/plugins/task_manager/server/lib/calculate_health_status.test.ts +++ b/x-pack/plugins/task_manager/server/lib/calculate_health_status.test.ts @@ -56,7 +56,7 @@ const config = { }, worker_utilization_running_average_window: 5, metrics_reset_interval: 3000, - claim_strategy: 'default', + claim_strategy: 'update_by_query', request_timeouts: { update_by_query: 1000, }, @@ -78,7 +78,7 @@ const getStatsWithTimestamp = ({ timestamp, value: { capacity: { config: 10, as_cost: 20, as_workers: 10 }, - claim_strategy: 'default', + claim_strategy: 'update_by_query', request_capacity: 1000, monitored_aggregated_stats_refresh_rate: 5000, monitored_stats_running_average_window: 50, diff --git a/x-pack/plugins/task_manager/server/lib/log_health_metrics.test.ts b/x-pack/plugins/task_manager/server/lib/log_health_metrics.test.ts index a39568df5fdd2..7df06865d30ed 100644 --- a/x-pack/plugins/task_manager/server/lib/log_health_metrics.test.ts +++ b/x-pack/plugins/task_manager/server/lib/log_health_metrics.test.ts @@ -436,7 +436,7 @@ function getMockMonitoredHealth(overrides = {}): MonitoredHealth { status: HealthStatus.OK, value: { capacity: { config: 10, as_cost: 20, as_workers: 10 }, - claim_strategy: 'default', + claim_strategy: 'update_by_query', poll_interval: 3000, request_capacity: 1000, monitored_aggregated_stats_refresh_rate: 5000, diff --git a/x-pack/plugins/task_manager/server/metrics/create_aggregator.test.ts b/x-pack/plugins/task_manager/server/metrics/create_aggregator.test.ts index b39e1b3168731..6b768a9f4d4e9 100644 --- a/x-pack/plugins/task_manager/server/metrics/create_aggregator.test.ts +++ b/x-pack/plugins/task_manager/server/metrics/create_aggregator.test.ts @@ -74,7 +74,7 @@ const config: TaskManagerConfig = { }, version_conflict_threshold: 80, worker_utilization_running_average_window: 5, - claim_strategy: 'default', + claim_strategy: 'update_by_query', request_timeouts: { update_by_query: 1000, }, diff --git a/x-pack/plugins/task_manager/server/monitoring/capacity_estimation.test.ts b/x-pack/plugins/task_manager/server/monitoring/capacity_estimation.test.ts index 9791ac805e500..94b11171f9e04 100644 --- a/x-pack/plugins/task_manager/server/monitoring/capacity_estimation.test.ts +++ b/x-pack/plugins/task_manager/server/monitoring/capacity_estimation.test.ts @@ -950,7 +950,7 @@ function mockStats( timestamp: new Date().toISOString(), value: { capacity: { config: 10, as_cost: 20, as_workers: 10 }, - claim_strategy: 'default', + claim_strategy: 'update_by_query', poll_interval: 0, request_capacity: 1000, monitored_aggregated_stats_refresh_rate: 5000, diff --git a/x-pack/plugins/task_manager/server/monitoring/configuration_statistics.test.ts b/x-pack/plugins/task_manager/server/monitoring/configuration_statistics.test.ts index a169c9dad8fe5..2be1930786fa8 100644 --- a/x-pack/plugins/task_manager/server/monitoring/configuration_statistics.test.ts +++ b/x-pack/plugins/task_manager/server/monitoring/configuration_statistics.test.ts @@ -52,7 +52,7 @@ describe('Configuration Statistics Aggregator', () => { }, worker_utilization_running_average_window: 5, metrics_reset_interval: 3000, - claim_strategy: 'default', + claim_strategy: 'update_by_query', request_timeouts: { update_by_query: 1000, }, @@ -75,7 +75,7 @@ describe('Configuration Statistics Aggregator', () => { as_workers: 10, as_cost: 20, }, - claim_strategy: 'default', + claim_strategy: 'update_by_query', poll_interval: 6000000, request_capacity: 1000, monitored_aggregated_stats_refresh_rate: 5000, @@ -94,7 +94,7 @@ describe('Configuration Statistics Aggregator', () => { as_workers: 8, as_cost: 16, }, - claim_strategy: 'default', + claim_strategy: 'update_by_query', poll_interval: 6000000, request_capacity: 1000, monitored_aggregated_stats_refresh_rate: 5000, @@ -113,7 +113,7 @@ describe('Configuration Statistics Aggregator', () => { as_workers: 8, as_cost: 16, }, - claim_strategy: 'default', + claim_strategy: 'update_by_query', poll_interval: 3000, request_capacity: 1000, monitored_aggregated_stats_refresh_rate: 5000, diff --git a/x-pack/plugins/task_manager/server/monitoring/workload_statistics.ts b/x-pack/plugins/task_manager/server/monitoring/workload_statistics.ts index b62ca8e8169e9..92cca0bf9a4f9 100644 --- a/x-pack/plugins/task_manager/server/monitoring/workload_statistics.ts +++ b/x-pack/plugins/task_manager/server/monitoring/workload_statistics.ts @@ -117,7 +117,7 @@ type ScheduledIntervals = ScheduleDensityResult['histogram']['buckets'][0]; // Set an upper bound just in case a customer sets a really high refresh rate const MAX_SCHEDULE_DENSITY_BUCKETS = 50; -interface CreateWorkloadAggregatorOpts { +export interface CreateWorkloadAggregatorOpts { taskStore: TaskStore; elasticsearchAndSOAvailability$: Observable; refreshInterval: number; diff --git a/x-pack/plugins/task_manager/server/plugin.test.ts b/x-pack/plugins/task_manager/server/plugin.test.ts index 96269f58158df..a7d452f76d6e2 100644 --- a/x-pack/plugins/task_manager/server/plugin.test.ts +++ b/x-pack/plugins/task_manager/server/plugin.test.ts @@ -83,7 +83,7 @@ const pluginInitializerContextParams = { }, worker_utilization_running_average_window: 5, metrics_reset_interval: 3000, - claim_strategy: 'default', + claim_strategy: 'update_by_query', request_timeouts: { update_by_query: 1000, }, diff --git a/x-pack/plugins/task_manager/server/polling_lifecycle.test.ts b/x-pack/plugins/task_manager/server/polling_lifecycle.test.ts index e0b23c3a4d95e..04c28dd11735d 100644 --- a/x-pack/plugins/task_manager/server/polling_lifecycle.test.ts +++ b/x-pack/plugins/task_manager/server/polling_lifecycle.test.ts @@ -87,7 +87,7 @@ describe('TaskPollingLifecycle', () => { }, worker_utilization_running_average_window: 5, metrics_reset_interval: 3000, - claim_strategy: 'default', + claim_strategy: 'update_by_query', request_timeouts: { update_by_query: 1000, }, diff --git a/x-pack/plugins/task_manager/server/routes/health.test.ts b/x-pack/plugins/task_manager/server/routes/health.test.ts index 9c08c5b5fb4c4..e76d218911dc1 100644 --- a/x-pack/plugins/task_manager/server/routes/health.test.ts +++ b/x-pack/plugins/task_manager/server/routes/health.test.ts @@ -824,7 +824,7 @@ function mockHealthStats(overrides = {}) { timestamp: new Date().toISOString(), value: { capacity: { config: 10, as_cost: 20, as_workers: 10 }, - claim_strategy: 'default', + claim_strategy: 'update_by_query', poll_interval: 3000, request_capacity: 1000, monitored_aggregated_stats_refresh_rate: 5000, diff --git a/x-pack/plugins/task_manager/server/task_running/task_runner.test.ts b/x-pack/plugins/task_manager/server/task_running/task_runner.test.ts index d9016395b6cc2..a7072416a062e 100644 --- a/x-pack/plugins/task_manager/server/task_running/task_runner.test.ts +++ b/x-pack/plugins/task_manager/server/task_running/task_runner.test.ts @@ -539,19 +539,25 @@ describe('TaskManagerRunner', () => { `[Error: type: Bad Request]` ); - expect(store.update).toHaveBeenCalledWith( + expect(store.update).toHaveBeenCalledTimes(1); + expect(store.partialUpdate).toHaveBeenCalledTimes(1); + expect(store.partialUpdate).toHaveBeenCalledWith( { - ...mockInstance({ - id, - attempts: initialAttempts + 1, - schedule: undefined, - }), + id, status: TaskStatus.Idle, startedAt: null, retryAt: null, ownerId: null, + attempts: initialAttempts + 1, }, - { validate: false } + { + validate: false, + doc: mockInstance({ + id, + attempts: initialAttempts, + schedule: undefined, + }), + } ); }); @@ -577,7 +583,7 @@ describe('TaskManagerRunner', () => { }); store.update.mockRejectedValueOnce(SavedObjectsErrorHelpers.createBadRequestError('type')); - store.update.mockRejectedValueOnce({ + store.partialUpdate.mockRejectedValueOnce({ type: 'type', id: 'id', error: { @@ -596,19 +602,23 @@ describe('TaskManagerRunner', () => { `"[Task Runner] Task ${id} failed to release claim after failure: Error: Saved object [type/id] conflict"` ); - expect(store.update).toHaveBeenCalledWith( + expect(store.partialUpdate).toHaveBeenCalledWith( { - ...mockInstance({ - id, - attempts: initialAttempts + 1, - schedule: undefined, - }), + id, status: TaskStatus.Idle, startedAt: null, retryAt: null, ownerId: null, + attempts: initialAttempts + 1, }, - { validate: false } + { + validate: false, + doc: mockInstance({ + id, + attempts: initialAttempts, + schedule: undefined, + }), + } ); }); @@ -634,7 +644,9 @@ describe('TaskManagerRunner', () => { }); store.update.mockRejectedValueOnce(SavedObjectsErrorHelpers.createBadRequestError('type')); - store.update.mockRejectedValueOnce(SavedObjectsErrorHelpers.createBadRequestError('type')); + store.partialUpdate.mockRejectedValueOnce( + SavedObjectsErrorHelpers.createBadRequestError('type') + ); await expect(runner.markTaskAsRunning()).rejects.toMatchInlineSnapshot( `[Error: type: Bad Request]` @@ -645,19 +657,23 @@ describe('TaskManagerRunner', () => { `"[Task Runner] Task ${id} failed to release claim after failure: Error: type: Bad Request"` ); - expect(store.update).toHaveBeenCalledWith( + expect(store.partialUpdate).toHaveBeenCalledWith( { - ...mockInstance({ - id, - attempts: initialAttempts + 1, - schedule: undefined, - }), + id, status: TaskStatus.Idle, startedAt: null, retryAt: null, ownerId: null, + attempts: initialAttempts + 1, }, - { validate: false } + { + validate: false, + doc: mockInstance({ + id, + attempts: initialAttempts, + schedule: undefined, + }), + } ); }); @@ -967,19 +983,19 @@ describe('TaskManagerRunner', () => { await runner.run(); - expect(store.update).toHaveBeenCalledTimes(1); - const instance = store.update.mock.calls[0][0]; + expect(store.partialUpdate).toHaveBeenCalledTimes(1); + const instance = store.partialUpdate.mock.calls[0][0]; expect(instance.id).toEqual(id); const minRunAt = Date.now(); const maxRunAt = minRunAt + baseDelay * Math.pow(2, initialAttempts - 2); - expect(instance.runAt.getTime()).toBeGreaterThanOrEqual(minRunAt); - expect(instance.runAt.getTime()).toBeLessThanOrEqual(maxRunAt); + expect(instance.runAt?.getTime()).toBeGreaterThanOrEqual(minRunAt); + expect(instance.runAt?.getTime()).toBeLessThanOrEqual(maxRunAt); - expect(instance.params).toEqual({ a: 'b' }); - expect(instance.state).toEqual({ hey: 'there' }); + expect(instance.params).not.toBeDefined(); expect(instance.enabled).not.toBeDefined(); + expect(instance.state).toEqual({ hey: 'there' }); expect(getNextRunAtSpy).not.toHaveBeenCalled(); }); @@ -1006,11 +1022,11 @@ describe('TaskManagerRunner', () => { await runner.run(); - expect(store.update).toHaveBeenCalledTimes(1); - const instance = store.update.mock.calls[0][0]; + expect(store.partialUpdate).toHaveBeenCalledTimes(1); + const instance = store.partialUpdate.mock.calls[0][0]; - expect(instance.runAt.getTime()).toBeGreaterThan(minutesFromNow(9).getTime()); - expect(instance.runAt.getTime()).toBeLessThanOrEqual(minutesFromNow(10).getTime()); + expect(instance.runAt?.getTime()).toBeGreaterThan(minutesFromNow(9).getTime()); + expect(instance.runAt?.getTime()).toBeLessThanOrEqual(minutesFromNow(10).getTime()); expect(instance.enabled).not.toBeDefined(); expect(getNextRunAtSpy).toHaveBeenCalled(); @@ -1072,7 +1088,7 @@ describe('TaskManagerRunner', () => { test('reschedules tasks that return a runAt', async () => { const runAt = minutesFromNow(_.random(1, 10)); - const { runner, store } = await readyToRunStageSetup({ + const { instance, runner, store } = await readyToRunStageSetup({ definitions: { bar: { title: 'Bar!', @@ -1087,9 +1103,10 @@ describe('TaskManagerRunner', () => { await runner.run(); - expect(store.update).toHaveBeenCalledTimes(1); - expect(store.update).toHaveBeenCalledWith(expect.objectContaining({ runAt }), { + expect(store.partialUpdate).toHaveBeenCalledTimes(1); + expect(store.partialUpdate).toHaveBeenCalledWith(expect.objectContaining({ runAt }), { validate: true, + doc: instance, }); expect(getNextRunAtSpy).not.toHaveBeenCalled(); @@ -1100,7 +1117,7 @@ describe('TaskManagerRunner', () => { const schedule = { interval: '1m', }; - const { runner, store } = await readyToRunStageSetup({ + const { instance, runner, store } = await readyToRunStageSetup({ instance: { status: TaskStatus.Running, startedAt: new Date(), @@ -1119,9 +1136,10 @@ describe('TaskManagerRunner', () => { await runner.run(); - expect(store.update).toHaveBeenCalledTimes(1); - expect(store.update).toHaveBeenCalledWith(expect.objectContaining({ runAt }), { + expect(store.partialUpdate).toHaveBeenCalledTimes(1); + expect(store.partialUpdate).toHaveBeenCalledWith(expect.objectContaining({ runAt }), { validate: true, + doc: instance, }); expect(getNextRunAtSpy).toHaveBeenCalledWith( @@ -1238,7 +1256,7 @@ describe('TaskManagerRunner', () => { test('tasks that return runAt override the schedule', async () => { const runAt = minutesFromNow(_.random(5)); - const { runner, store } = await readyToRunStageSetup({ + const { instance, runner, store } = await readyToRunStageSetup({ instance: { schedule: { interval: '20m' }, }, @@ -1256,9 +1274,10 @@ describe('TaskManagerRunner', () => { await runner.run(); - expect(store.update).toHaveBeenCalledTimes(1); - expect(store.update).toHaveBeenCalledWith(expect.objectContaining({ runAt }), { + expect(store.partialUpdate).toHaveBeenCalledTimes(1); + expect(store.partialUpdate).toHaveBeenCalledWith(expect.objectContaining({ runAt }), { validate: true, + doc: instance, }); }); @@ -1340,7 +1359,11 @@ describe('TaskManagerRunner', () => { const nextRetry = new Date(Date.now() + _.random(15, 100) * 1000); const id = Date.now().toString(); const error = new Error('Dangit!'); - const { runner, store } = await readyToRunStageSetup({ + const { + instance: taskInstance, + runner, + store, + } = await readyToRunStageSetup({ instance: { id, attempts: initialAttempts, @@ -1360,11 +1383,14 @@ describe('TaskManagerRunner', () => { await runner.run(); - expect(store.update).toHaveBeenCalledTimes(1); - expect(store.update).toHaveBeenCalledWith(expect.any(Object), { validate: true }); - const instance = store.update.mock.calls[0][0]; + expect(store.partialUpdate).toHaveBeenCalledTimes(1); + expect(store.partialUpdate).toHaveBeenCalledWith(expect.any(Object), { + validate: true, + doc: taskInstance, + }); + const instance = store.partialUpdate.mock.calls[0][0]; - expect(instance.runAt.getTime()).toEqual(nextRetry.getTime()); + expect(instance.runAt?.getTime()).toEqual(nextRetry.getTime()); expect(instance.enabled).not.toBeDefined(); }); @@ -1372,7 +1398,11 @@ describe('TaskManagerRunner', () => { const initialAttempts = _.random(1, 3); const id = Date.now().toString(); const error = new Error('Dangit!'); - const { runner, store } = await readyToRunStageSetup({ + const { + instance: taskInstance, + runner, + store, + } = await readyToRunStageSetup({ instance: { id, attempts: initialAttempts, @@ -1392,15 +1422,18 @@ describe('TaskManagerRunner', () => { await runner.run(); - expect(store.update).toHaveBeenCalledTimes(1); - expect(store.update).toHaveBeenCalledWith(expect.any(Object), { validate: true }); + expect(store.partialUpdate).toHaveBeenCalledTimes(1); + expect(store.partialUpdate).toHaveBeenCalledWith(expect.any(Object), { + validate: true, + doc: taskInstance, + }); - const instance = store.update.mock.calls[0][0]; + const instance = store.partialUpdate.mock.calls[0][0]; const minRunAt = Date.now(); const maxRunAt = minRunAt + baseDelay * Math.pow(2, initialAttempts - 2); - expect(instance.runAt.getTime()).toBeGreaterThanOrEqual(minRunAt); - expect(instance.runAt.getTime()).toBeLessThanOrEqual(maxRunAt); + expect(instance.runAt?.getTime()).toBeGreaterThanOrEqual(minRunAt); + expect(instance.runAt?.getTime()).toBeLessThanOrEqual(maxRunAt); expect(instance.enabled).not.toBeDefined(); }); @@ -1438,7 +1471,11 @@ describe('TaskManagerRunner', () => { const id = Date.now().toString(); const getRetryStub = sinon.stub().returns(false); const error = new Error('Dangit!'); - const { runner, store } = await readyToRunStageSetup({ + const { + instance: taskInstance, + runner, + store, + } = await readyToRunStageSetup({ instance: { id, attempts: initialAttempts, @@ -1460,15 +1497,18 @@ describe('TaskManagerRunner', () => { await runner.run(); - expect(store.update).toHaveBeenCalledTimes(1); - expect(store.update).toHaveBeenCalledWith(expect.any(Object), { validate: true }); + expect(store.partialUpdate).toHaveBeenCalledTimes(1); + expect(store.partialUpdate).toHaveBeenCalledWith(expect.any(Object), { + validate: true, + doc: taskInstance, + }); sinon.assert.notCalled(getRetryStub); - const instance = store.update.mock.calls[0][0]; + const instance = store.partialUpdate.mock.calls[0][0]; const nextIntervalDelay = 60000; // 1m const expectedRunAt = new Date(Date.now() + nextIntervalDelay); - expect(instance.runAt.getTime()).toEqual(expectedRunAt.getTime()); + expect(instance.runAt?.getTime()).toEqual(expectedRunAt.getTime()); expect(instance.enabled).not.toBeDefined(); }); @@ -1498,14 +1538,18 @@ describe('TaskManagerRunner', () => { await runner.run(); expect(store.remove).toHaveBeenCalled(); - expect(store.update).not.toHaveBeenCalled(); + expect(store.partialUpdate).not.toHaveBeenCalled(); }); test(`Doesn't fail recurring tasks when maxAttempts reached`, async () => { const id = _.random(1, 20).toString(); const initialAttempts = 3; const intervalSeconds = 10; - const { runner, store } = await readyToRunStageSetup({ + const { + instance: taskInstance, + runner, + store, + } = await readyToRunStageSetup({ instance: { id, attempts: initialAttempts, @@ -1528,15 +1572,18 @@ describe('TaskManagerRunner', () => { await runner.run(); - expect(store.update).toHaveBeenCalledTimes(1); - const instance = store.update.mock.calls[0][0]; + expect(store.partialUpdate).toHaveBeenCalledTimes(1); + const instance = store.partialUpdate.mock.calls[0][0]; expect(instance.attempts).toEqual(3); expect(instance.status).toEqual('idle'); - expect(instance.runAt.getTime()).toEqual( + expect(instance.runAt?.getTime()).toEqual( new Date(Date.now() + intervalSeconds * 1000).getTime() ); expect(instance.enabled).not.toBeDefined(); - expect(store.update).toHaveBeenCalledWith(expect.any(Object), { validate: true }); + expect(store.partialUpdate).toHaveBeenCalledWith(expect.any(Object), { + validate: true, + doc: taskInstance, + }); }); test('throws error when the task has invalid state', async () => { @@ -1551,7 +1598,12 @@ describe('TaskManagerRunner', () => { stateVersion: 4, }; - const { runner, logger, store } = await readyToRunStageSetup({ + const { + instance: taskInstance, + runner, + logger, + store, + } = await readyToRunStageSetup({ instance: mockTaskInstance, definitions: { bar: { @@ -1600,7 +1652,10 @@ describe('TaskManagerRunner', () => { expect(logger.warn).toHaveBeenCalledWith( 'Task (bar/foo) has a validation error: [foo]: expected value of type [string] but got [boolean]' ); - expect(store.update).toHaveBeenCalledWith(expect.any(Object), { validate: false }); + expect(store.partialUpdate).toHaveBeenCalledWith(expect.any(Object), { + validate: false, + doc: taskInstance, + }); }); test('does not throw error and runs when the task has invalid state and allowReadingInvalidState = true', async () => { @@ -1655,8 +1710,8 @@ describe('TaskManagerRunner', () => { const result = await runner.run(); - expect(store.update).toHaveBeenCalledTimes(1); - const instance = store.update.mock.calls[0][0]; + expect(store.partialUpdate).toHaveBeenCalledTimes(1); + const instance = store.partialUpdate.mock.calls[0][0]; expect(instance.state).toEqual({ foo: 'bar', }); @@ -2084,7 +2139,7 @@ describe('TaskManagerRunner', () => { await runner.run(); expect(store.remove).toHaveBeenCalled(); - expect(store.update).not.toHaveBeenCalled(); + expect(store.partialUpdate).not.toHaveBeenCalled(); expect(onTaskEvent).toHaveBeenCalledWith( withAnyTiming( @@ -2130,7 +2185,7 @@ describe('TaskManagerRunner', () => { const error = new Error('fail'); - store.update.mockImplementation(() => { + store.partialUpdate.mockImplementation(() => { throw error; }); @@ -2175,7 +2230,7 @@ describe('TaskManagerRunner', () => { const error = new Error('fail'); - store.update.mockImplementation(() => { + store.partialUpdate.mockImplementation(() => { throw error; }); @@ -2223,7 +2278,7 @@ describe('TaskManagerRunner', () => { await runner.run(); - expect(store.update).not.toHaveBeenCalled(); + expect(store.partialUpdate).not.toHaveBeenCalled(); expect(usageCounter.incrementCounter).toHaveBeenCalledWith({ counterName: 'taskManagerUpdateSkippedDueToTaskExpiration', counterType: 'taskManagerTaskRunner', @@ -2470,6 +2525,7 @@ describe('TaskManagerRunner', () => { const usageCounter = usageCountersServiceMock.createSetupContract().createUsageCounter('test'); store.update.mockResolvedValue(instance); + store.partialUpdate.mockResolvedValue(instance); const definitions = new TaskTypeDictionary(logger); definitions.registerTaskDefinitions({ diff --git a/x-pack/plugins/task_manager/server/task_running/task_runner.ts b/x-pack/plugins/task_manager/server/task_running/task_runner.ts index b68cbe1c85e53..10fac96fe7c0a 100644 --- a/x-pack/plugins/task_manager/server/task_running/task_runner.ts +++ b/x-pack/plugins/task_manager/server/task_running/task_runner.ts @@ -14,7 +14,7 @@ import apm from 'elastic-apm-node'; import { v4 as uuidv4 } from 'uuid'; import { withSpan } from '@kbn/apm-utils'; -import { defaults, flow, identity, omit } from 'lodash'; +import { flow, identity, omit } from 'lodash'; import { ExecutionContextStart, Logger, SavedObjectsErrorHelpers } from '@kbn/core/server'; import { UsageCounter } from '@kbn/usage-collection-plugin/server'; import { Middleware } from '../lib/middleware'; @@ -49,6 +49,7 @@ import { FailedRunResult, FailedTaskResult, isFailedRunResult, + PartialConcreteTaskInstance, SuccessfulRunResult, TaskDefinition, TaskStatus, @@ -97,6 +98,10 @@ export interface TaskRunning { export interface Updatable { update(doc: ConcreteTaskInstance, options: { validate: boolean }): Promise; + partialUpdate( + partialDoc: PartialConcreteTaskInstance, + options: { validate: boolean; doc: ConcreteTaskInstance } + ): Promise; remove(id: string): Promise; } @@ -556,18 +561,21 @@ export class TaskManagerRunner implements TaskRunner { }); } - private async releaseClaimAndIncrementAttempts(): Promise> { + private async releaseClaimAndIncrementAttempts(): Promise< + Result + > { return promiseResult( - this.bufferedTaskStore.update( + this.bufferedTaskStore.partialUpdate( { - ...taskWithoutEnabled(this.instance.task), + id: this.instance.task.id, + version: this.instance.task.version, status: TaskStatus.Idle, attempts: this.instance.task.attempts + 1, startedAt: null, retryAt: null, ownerId: null, }, - { validate: false } + { validate: false, doc: this.instance.task } ) ); } @@ -679,20 +687,22 @@ export class TaskManagerRunner implements TaskRunner { await this.removeTask(); } else { const { shouldValidate = true } = unwrap(result); + + const partialTask = { + ...fieldUpdates, + // reset fields that track the lifecycle of the concluded `task run` + startedAt: null, + retryAt: null, + ownerId: null, + id: this.instance.task.id, + version: this.instance.task.version, + }; + this.instance = asRan( - await this.bufferedTaskStore.update( - defaults( - { - ...fieldUpdates, - // reset fields that track the lifecycle of the concluded `task run` - startedAt: null, - retryAt: null, - ownerId: null, - }, - taskWithoutEnabled(this.instance.task) - ), - { validate: shouldValidate } - ) + await this.bufferedTaskStore.partialUpdate(partialTask, { + validate: shouldValidate, + doc: this.instance.task, + }) ); } diff --git a/x-pack/plugins/task_manager/server/task_scheduling.ts b/x-pack/plugins/task_manager/server/task_scheduling.ts index bc04b6da22125..1a66cddfa6373 100644 --- a/x-pack/plugins/task_manager/server/task_scheduling.ts +++ b/x-pack/plugins/task_manager/server/task_scheduling.ts @@ -7,7 +7,6 @@ import { filter, take } from 'rxjs'; import pMap from 'p-map'; -import { SavedObjectError } from '@kbn/core-saved-objects-common'; import { v4 as uuidv4 } from 'uuid'; import { chunk, flatten, pick } from 'lodash'; @@ -40,6 +39,7 @@ import { TaskLifecycleEvent } from './polling_lifecycle'; import { EphemeralTaskLifecycle } from './ephemeral_task_lifecycle'; import { EphemeralTaskRejectedDueToCapacityError } from './task_running'; import { retryableBulkUpdate } from './lib/retryable_bulk_update'; +import { ErrorOutput } from './lib/bulk_operation_buffer'; const VERSION_CONFLICT_STATUS = 409; const BULK_ACTION_SIZE = 100; @@ -63,7 +63,7 @@ export interface BulkUpdateTaskResult { /** * list of failed tasks and errors caused failure */ - errors: Array<{ type: string; id: string; error: SavedObjectError }>; + errors: ErrorOutput[]; } export interface RunSoonResult { id: ConcreteTaskInstance['id']; diff --git a/x-pack/plugins/task_manager/server/task_store.ts b/x-pack/plugins/task_manager/server/task_store.ts index 2550d37a7de31..83c69ebdb2d88 100644 --- a/x-pack/plugins/task_manager/server/task_store.ts +++ b/x-pack/plugins/task_manager/server/task_store.ts @@ -46,6 +46,7 @@ import { AdHocTaskCounter } from './lib/adhoc_task_counter'; import { TaskValidator } from './task_validator'; import { claimSort } from './queries/mark_available_tasks_as_claimed'; import { MAX_PARTITIONS } from './lib/task_partitioner'; +import { ErrorOutput } from './lib/bulk_operation_buffer'; export interface StoreOpts { esClient: ElasticsearchClient; @@ -92,15 +93,9 @@ export interface BulkUpdateOpts { validate: boolean; } -export type BulkUpdateResult = Result< - ConcreteTaskInstance, - { type: string; id: string; error: SavedObjectError } ->; +export type BulkUpdateResult = Result; -export type PartialBulkUpdateResult = Result< - PartialConcreteTaskInstance, - { type: string; id: string; status?: number; error: estypes.ErrorCause } ->; +export type PartialBulkUpdateResult = Result; export type BulkGetResult = Array< Result diff --git a/x-pack/plugins/task_manager/server/usage/task_manager_usage_collector.test.ts b/x-pack/plugins/task_manager/server/usage/task_manager_usage_collector.test.ts index 067a32c8a486d..db511677439ba 100644 --- a/x-pack/plugins/task_manager/server/usage/task_manager_usage_collector.test.ts +++ b/x-pack/plugins/task_manager/server/usage/task_manager_usage_collector.test.ts @@ -175,7 +175,7 @@ function getMockMonitoredHealth(overrides = {}): MonitoredHealth { status: HealthStatus.OK, value: { capacity: { config: 10, as_cost: 20, as_workers: 10 }, - claim_strategy: 'default', + claim_strategy: 'update_by_query', poll_interval: 3000, request_capacity: 1000, monitored_aggregated_stats_refresh_rate: 5000, diff --git a/x-pack/plugins/transform/kibana.jsonc b/x-pack/plugins/transform/kibana.jsonc index 499206b4db924..1f8ab0fe72f40 100644 --- a/x-pack/plugins/transform/kibana.jsonc +++ b/x-pack/plugins/transform/kibana.jsonc @@ -40,7 +40,6 @@ "discover", "kibanaUtils", "kibanaReact", - "ml" ], "extraPublicDirs": [ "common" diff --git a/x-pack/plugins/transform/public/app/__mocks__/app_dependencies.tsx b/x-pack/plugins/transform/public/app/__mocks__/app_dependencies.tsx index 6af01088b70db..e0536a3e1b4d6 100644 --- a/x-pack/plugins/transform/public/app/__mocks__/app_dependencies.tsx +++ b/x-pack/plugins/transform/public/app/__mocks__/app_dependencies.tsx @@ -5,7 +5,6 @@ * 2.0. */ -import { useContext } from 'react'; import { of } from 'rxjs'; import type { IKibanaSearchResponse, @@ -25,8 +24,6 @@ import { savedSearchPluginMock } from '@kbn/saved-search-plugin/public/mocks'; import { contentManagementMock } from '@kbn/content-management-plugin/public/mocks'; import type { AppDependencies } from '../app_dependencies'; -import { MlSharedContext } from './shared_context'; -import type { GetMlSharedImportsReturnType } from '../../shared_imports'; import type { SavedObjectsManagementPluginStart } from '@kbn/saved-objects-management-plugin/public'; import { settingsServiceMock } from '@kbn/core-ui-settings-browser-mocks'; import { unifiedSearchPluginMock } from '@kbn/unified-search-plugin/public/mocks'; @@ -88,7 +85,6 @@ const appDependencies: AppDependencies = { http: coreSetup.http, history: {} as ScopedHistory, share: { urlGenerators: { getUrlGenerator: jest.fn() } } as unknown as SharePluginStart, - ml: {} as GetMlSharedImportsReturnType, triggersActionsUi: {} as jest.Mocked, unifiedSearch: unifiedSearchPluginMock.createStartContract(), savedObjectsManagement: {} as jest.Mocked, @@ -98,8 +94,7 @@ const appDependencies: AppDependencies = { }; export const useAppDependencies = () => { - const ml = useContext(MlSharedContext); - return { ...appDependencies, ml }; + return appDependencies; }; export const useToastNotifications = () => { diff --git a/x-pack/plugins/transform/public/app/__mocks__/shared_context.ts b/x-pack/plugins/transform/public/app/__mocks__/shared_context.ts deleted file mode 100644 index 33e43ee54cee7..0000000000000 --- a/x-pack/plugins/transform/public/app/__mocks__/shared_context.ts +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { createContext } from 'react'; - -import type { GetMlSharedImportsReturnType } from '../../shared_imports'; - -// This code is a workaround to provide dependencies that are -// loaded dynamically during runtime. -export const MlSharedContext = createContext({} as GetMlSharedImportsReturnType); diff --git a/x-pack/plugins/transform/public/app/app_dependencies.tsx b/x-pack/plugins/transform/public/app/app_dependencies.tsx index 1f8b2373f0f7d..9033540ee0d4c 100644 --- a/x-pack/plugins/transform/public/app/app_dependencies.tsx +++ b/x-pack/plugins/transform/public/app/app_dependencies.tsx @@ -37,7 +37,6 @@ import type { FieldFormatsStart } from '@kbn/field-formats-plugin/public'; import type { SavedObjectsManagementPluginStart } from '@kbn/saved-objects-management-plugin/public'; import type { SettingsStart } from '@kbn/core-ui-settings-browser'; import type { DataViewEditorStart } from '@kbn/data-view-editor-plugin/public'; -import type { GetMlSharedImportsReturnType } from '../shared_imports'; export interface AppDependencies { analytics: AnalyticsServiceStart; @@ -60,7 +59,6 @@ export interface AppDependencies { theme: ThemeServiceStart; history: ScopedHistory; share: SharePluginStart; - ml: GetMlSharedImportsReturnType; spaces?: SpacesPluginStart; triggersActionsUi: TriggersAndActionsUIPublicPluginStart; unifiedSearch: UnifiedSearchPublicPluginStart; diff --git a/x-pack/plugins/transform/public/app/common/aggregations.ts b/x-pack/plugins/transform/public/app/common/aggregations.ts index 50582d2f278ea..3fd41f1dd4111 100644 --- a/x-pack/plugins/transform/public/app/common/aggregations.ts +++ b/x-pack/plugins/transform/public/app/common/aggregations.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { composeValidators, patternValidator } from '../../../common/shared_imports'; +import { composeValidators, patternValidator } from '@kbn/ml-validators'; import type { AggName } from '../../../common/types/aggregations'; diff --git a/x-pack/plugins/transform/public/app/components/toast_notification_text.test.tsx b/x-pack/plugins/transform/public/app/components/toast_notification_text.test.tsx index f3781bc97b4aa..c058bc521653e 100644 --- a/x-pack/plugins/transform/public/app/components/toast_notification_text.test.tsx +++ b/x-pack/plugins/transform/public/app/components/toast_notification_text.test.tsx @@ -13,7 +13,6 @@ import { themeServiceMock } from '@kbn/core/public/mocks'; import { ToastNotificationText } from './toast_notification_text'; -jest.mock('../../shared_imports'); jest.mock('../app_dependencies'); describe('ToastNotificationText', () => { diff --git a/x-pack/plugins/transform/public/app/hooks/use_index_data.test.tsx b/x-pack/plugins/transform/public/app/hooks/use_index_data.test.tsx index 52fc601db27fc..ee7e2ca1e7256 100644 --- a/x-pack/plugins/transform/public/app/hooks/use_index_data.test.tsx +++ b/x-pack/plugins/transform/public/app/hooks/use_index_data.test.tsx @@ -16,16 +16,11 @@ import { DataGrid, type UseIndexDataReturnType } from '@kbn/ml-data-grid'; import type { RuntimeMappings } from '@kbn/ml-runtime-field-utils'; import type { SimpleQuery } from '@kbn/ml-query-utils'; -import { getMlSharedImports } from '../../shared_imports'; - import type { SearchItems } from './use_search_items'; import { useIndexData } from './use_index_data'; -jest.mock('../../shared_imports'); jest.mock('../app_dependencies'); -import { MlSharedContext } from '../__mocks__/shared_context'; - const query: SimpleQuery = { query_string: { query: '*', @@ -46,12 +41,9 @@ const queryClient = new QueryClient(); describe('Transform: useIndexData()', () => { test('dataView set triggers loading', async () => { - const mlShared = await getMlSharedImports(); const wrapper: FC> = ({ children }) => ( - - {children} - + {children} ); @@ -87,8 +79,6 @@ describe('Transform: with useIndexData()', () => { fields: [] as any[], } as SearchItems['dataView']; - const mlSharedImports = await getMlSharedImports(); - const Wrapper = () => { const props = { ...useIndexData(dataView, { match_all: {} }, runtimeMappings), @@ -105,9 +95,7 @@ describe('Transform: with useIndexData()', () => { render( - - - + ); @@ -129,8 +117,6 @@ describe('Transform: with useIndexData()', () => { fields: [] as any[], } as SearchItems['dataView']; - const mlSharedImports = await getMlSharedImports(); - const Wrapper = () => { const props = { ...useIndexData(dataView, { match_all: {} }, runtimeMappings), @@ -147,9 +133,7 @@ describe('Transform: with useIndexData()', () => { render( - - - + ); diff --git a/x-pack/plugins/transform/public/app/mount_management_section.ts b/x-pack/plugins/transform/public/app/mount_management_section.ts index 8d59c9ce2d0f2..35ae95feb9a44 100644 --- a/x-pack/plugins/transform/public/app/mount_management_section.ts +++ b/x-pack/plugins/transform/public/app/mount_management_section.ts @@ -11,7 +11,6 @@ import { Storage } from '@kbn/kibana-utils-plugin/public'; import { type TransformEnabledFeatures } from './serverless_context'; import type { PluginsDependencies } from '../plugin'; -import { getMlSharedImports } from '../shared_imports'; import type { ExperimentalFeatures } from '../../server/config'; import type { AppDependencies } from './app_dependencies'; @@ -87,7 +86,6 @@ export async function mountManagementSection( history, share, spaces, - ml: await getMlSharedImports(), triggersActionsUi, unifiedSearch, charts, diff --git a/x-pack/plugins/transform/public/app/sections/create_transform/components/pivot_configuration/pivot_configuration.tsx b/x-pack/plugins/transform/public/app/sections/create_transform/components/pivot_configuration/pivot_configuration.tsx index ed63b8791be59..798837a1a693f 100644 --- a/x-pack/plugins/transform/public/app/sections/create_transform/components/pivot_configuration/pivot_configuration.tsx +++ b/x-pack/plugins/transform/public/app/sections/create_transform/components/pivot_configuration/pivot_configuration.tsx @@ -11,10 +11,10 @@ import React, { memo, createContext, useMemo } from 'react'; import { EuiFormRow, type EuiComboBoxOptionOption } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; +import { useFieldStatsTrigger, FieldStatsInfoButton } from '@kbn/ml-field-stats-flyout'; import { type DropDownOptionWithField } from '../step_define/common/get_pivot_dropdown_options'; import type { DropDownOption } from '../../../../common'; -import { useAppDependencies } from '../../../../app_dependencies'; import { AggListForm } from '../aggregation_list'; import { DropDown } from '../aggregation_dropdown'; import { GroupByListForm } from '../group_by_list'; @@ -26,9 +26,6 @@ export const PivotConfigurationContext = createContext< export const PivotConfiguration: FC = memo( ({ actions, state }) => { - const { - ml: { useFieldStatsTrigger, FieldStatsInfoButton }, - } = useAppDependencies(); const { handleFieldStatsButtonClick, closeFlyout, renderOption, populatedFields } = useFieldStatsTrigger(); @@ -64,7 +61,7 @@ export const PivotConfiguration: FC = memo( }; return aggOption; }), - [aggOptions, FieldStatsInfoButton, handleFieldStatsButtonClick, populatedFields] + [aggOptions, handleFieldStatsButtonClick, populatedFields] ); return ( diff --git a/x-pack/plugins/transform/public/app/sections/create_transform/components/step_create/step_create_form.test.tsx b/x-pack/plugins/transform/public/app/sections/create_transform/components/step_create/step_create_form.test.tsx index 6ce8984a8230c..f045d553abb6c 100644 --- a/x-pack/plugins/transform/public/app/sections/create_transform/components/step_create/step_create_form.test.tsx +++ b/x-pack/plugins/transform/public/app/sections/create_transform/components/step_create/step_create_form.test.tsx @@ -12,7 +12,6 @@ import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import type { StepCreateFormProps } from './step_create_form'; import { StepCreateForm } from './step_create_form'; -jest.mock('../../../../../shared_imports'); jest.mock('../../../../app_dependencies'); describe('Transform: ', () => { diff --git a/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/latest_function_form.tsx b/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/latest_function_form.tsx index f97b6cda583a5..9ded43a82c71a 100644 --- a/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/latest_function_form.tsx +++ b/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/latest_function_form.tsx @@ -10,7 +10,7 @@ import React, { type FC } from 'react'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import { EuiButtonIcon, EuiCallOut, EuiComboBox, EuiCopy, EuiFormRow } from '@elastic/eui'; -import { useAppDependencies } from '../../../../app_dependencies'; +import { useFieldStatsTrigger } from '@kbn/ml-field-stats-flyout'; import type { LatestFunctionService } from './hooks/use_latest_function_config'; interface LatestFunctionFormProps { @@ -24,9 +24,6 @@ export const LatestFunctionForm: FC = ({ copyToClipboardDescription, latestFunctionService, }) => { - const { - ml: { useFieldStatsTrigger }, - } = useAppDependencies(); const { renderOption, closeFlyout } = useFieldStatsTrigger(); return ( <> diff --git a/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/step_define_form.test.tsx b/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/step_define_form.test.tsx index fa1ce2f2c7e99..7490493bcfe56 100644 --- a/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/step_define_form.test.tsx +++ b/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/step_define_form.test.tsx @@ -25,11 +25,8 @@ import type { SearchItems } from '../../../../hooks/use_search_items'; import { getAggNameConflictToastMessages } from './common'; import { StepDefineForm } from './step_define_form'; -import { MlSharedContext } from '../../../../__mocks__/shared_context'; -import { getMlSharedImports } from '../../../../../shared_imports'; import { unifiedSearchPluginMock } from '@kbn/unified-search-plugin/public/mocks'; -jest.mock('../../../../../shared_imports'); jest.mock('../../../../app_dependencies'); const startMock = coreMock.createStart(); @@ -66,7 +63,6 @@ describe('Transform: ', () => { test('Minimal initialization', async () => { // Arrange const queryClient = new QueryClient(); - const mlSharedImports = await getMlSharedImports(); const searchItems = { dataView: { @@ -90,11 +86,9 @@ describe('Transform: ', () => { - - - - - + + + diff --git a/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/step_define_form.tsx b/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/step_define_form.tsx index ac8ccabc539cb..84ca627904a51 100644 --- a/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/step_define_form.tsx +++ b/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/step_define_form.tsx @@ -35,6 +35,7 @@ import { } from '@kbn/ml-date-picker'; import { useStorage } from '@kbn/ml-local-storage'; import { useUrlState } from '@kbn/ml-url-state'; +import { useFieldStatsFlyoutContext } from '@kbn/ml-field-stats-flyout'; import type { PivotAggDict } from '../../../../../../common/types/pivot_aggs'; import type { PivotGroupByDict } from '../../../../../../common/types/pivot_group_by'; @@ -59,7 +60,7 @@ import { getPreviewTransformRequestBody } from '../../../../common'; import { useDocumentationLinks } from '../../../../hooks/use_documentation_links'; import { useIndexData } from '../../../../hooks/use_index_data'; import { useTransformConfigData } from '../../../../hooks/use_transform_config_data'; -import { useAppDependencies, useToastNotifications } from '../../../../app_dependencies'; +import { useToastNotifications } from '../../../../app_dependencies'; import type { SearchItems } from '../../../../hooks/use_search_items'; import { getAggConfigFromEsAgg } from '../../../../common/pivot_aggs'; @@ -124,11 +125,6 @@ export const StepDefineForm: FC = React.memo((props) => { const { transformConfigQuery } = stepDefineForm.searchBar.state; const { runtimeMappings } = stepDefineForm.runtimeMappingsEditor.state; - const appDependencies = useAppDependencies(); - const { - ml: { useFieldStatsFlyoutContext }, - } = appDependencies; - const fieldStatsContext = useFieldStatsFlyoutContext(); const indexPreviewProps = { ...useIndexData( diff --git a/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/step_define_summary.test.tsx b/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/step_define_summary.test.tsx index 8fef5cf0b934d..28efd40ad03fd 100644 --- a/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/step_define_summary.test.tsx +++ b/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/step_define_summary.test.tsx @@ -18,18 +18,13 @@ import type { SearchItems } from '../../../../hooks/use_search_items'; import type { StepDefineExposedState } from './common'; import { StepDefineSummary } from './step_define_summary'; -jest.mock('../../../../../shared_imports'); jest.mock('../../../../app_dependencies'); -import { MlSharedContext } from '../../../../__mocks__/shared_context'; -import { getMlSharedImports } from '../../../../../shared_imports'; - describe('Transform: ', () => { // Using the async/await wait()/done() pattern to avoid act() errors. test('Minimal initialization', async () => { // Arrange const queryClient = new QueryClient(); - const mlSharedImports = await getMlSharedImports(); const searchItems = { dataView: { @@ -78,9 +73,7 @@ describe('Transform: ', () => { const { queryByText } = render( - - - + ); diff --git a/x-pack/plugins/transform/public/app/sections/create_transform/components/wizard/wizard.tsx b/x-pack/plugins/transform/public/app/sections/create_transform/components/wizard/wizard.tsx index 606a027f4542a..ab2865b85eb8a 100644 --- a/x-pack/plugins/transform/public/app/sections/create_transform/components/wizard/wizard.tsx +++ b/x-pack/plugins/transform/public/app/sections/create_transform/components/wizard/wizard.tsx @@ -20,6 +20,7 @@ import { UrlStateProvider } from '@kbn/ml-url-state'; import { UI_SETTINGS } from '@kbn/data-plugin/common'; import type { FieldStatsServices } from '@kbn/unified-field-list/src/components/field_stats'; import type { RuntimeMappings } from '@kbn/ml-runtime-field-utils'; +import { FieldStatsFlyoutProvider } from '@kbn/ml-field-stats-flyout'; import { useEnabledFeatures } from '../../../../serverless_context'; import type { TransformConfigUnion } from '../../../../../../common/types/transform'; @@ -110,13 +111,7 @@ export const CreateTransformWizardContext = createContext<{ export const Wizard: FC = React.memo(({ cloneConfig, searchItems }) => { const { showNodeInfo } = useEnabledFeatures(); const appDependencies = useAppDependencies(); - const { - ml: { FieldStatsFlyoutProvider }, - uiSettings, - data, - fieldFormats, - charts, - } = appDependencies; + const { uiSettings, data, fieldFormats, charts } = appDependencies; const { dataView } = searchItems; // The current WIZARD_STEP diff --git a/x-pack/plugins/transform/public/app/sections/transform_management/components/action_delete/delete_action_name.test.tsx b/x-pack/plugins/transform/public/app/sections/transform_management/components/action_delete/delete_action_name.test.tsx index cf4e6aef4e537..d5caa80792b0e 100644 --- a/x-pack/plugins/transform/public/app/sections/transform_management/components/action_delete/delete_action_name.test.tsx +++ b/x-pack/plugins/transform/public/app/sections/transform_management/components/action_delete/delete_action_name.test.tsx @@ -11,7 +11,6 @@ import { render } from '@testing-library/react'; import type { DeleteActionNameProps } from './delete_action_name'; import { DeleteActionName } from './delete_action_name'; -jest.mock('../../../../../shared_imports'); jest.mock('../../../../app_dependencies'); describe('Transform: Transform List Actions ', () => { diff --git a/x-pack/plugins/transform/public/app/sections/transform_management/components/action_discover/discover_action_name.test.tsx b/x-pack/plugins/transform/public/app/sections/transform_management/components/action_discover/discover_action_name.test.tsx index 0717dea8a4d0d..b4dbcad166583 100644 --- a/x-pack/plugins/transform/public/app/sections/transform_management/components/action_discover/discover_action_name.test.tsx +++ b/x-pack/plugins/transform/public/app/sections/transform_management/components/action_discover/discover_action_name.test.tsx @@ -16,7 +16,6 @@ import { isDiscoverActionDisabled, DiscoverActionName } from './discover_action_ import transformListRow from '../../../../common/__mocks__/transform_list_row.json'; import type { TransformListRowWithStats } from '../../../../common/transform_list'; -jest.mock('../../../../../shared_imports'); jest.mock('../../../../app_dependencies'); // @ts-expect-error mock data is too loosely typed diff --git a/x-pack/plugins/transform/public/app/sections/transform_management/components/action_start/start_action_name.test.tsx b/x-pack/plugins/transform/public/app/sections/transform_management/components/action_start/start_action_name.test.tsx index 9a1a7b2e77cb2..4f3bd2a87f919 100644 --- a/x-pack/plugins/transform/public/app/sections/transform_management/components/action_start/start_action_name.test.tsx +++ b/x-pack/plugins/transform/public/app/sections/transform_management/components/action_start/start_action_name.test.tsx @@ -15,7 +15,6 @@ import { StartActionName } from './start_action_name'; import transformListRow from '../../../../common/__mocks__/transform_list_row.json'; -jest.mock('../../../../../shared_imports'); jest.mock('../../../../app_dependencies'); const queryClient = new QueryClient(); diff --git a/x-pack/plugins/transform/public/app/sections/transform_management/components/action_stop/stop_action_name.test.tsx b/x-pack/plugins/transform/public/app/sections/transform_management/components/action_stop/stop_action_name.test.tsx index c7118b9d4150c..0ef47ae51debc 100644 --- a/x-pack/plugins/transform/public/app/sections/transform_management/components/action_stop/stop_action_name.test.tsx +++ b/x-pack/plugins/transform/public/app/sections/transform_management/components/action_stop/stop_action_name.test.tsx @@ -15,7 +15,6 @@ import { StopActionName } from './stop_action_name'; import transformListRow from '../../../../common/__mocks__/transform_list_row.json'; -jest.mock('../../../../../shared_imports'); jest.mock('../../../../app_dependencies'); const queryClient = new QueryClient(); diff --git a/x-pack/plugins/transform/public/app/sections/transform_management/components/create_transform_button/create_transform_button.test.tsx b/x-pack/plugins/transform/public/app/sections/transform_management/components/create_transform_button/create_transform_button.test.tsx index 644971bc32931..fceb52cb0cd4e 100644 --- a/x-pack/plugins/transform/public/app/sections/transform_management/components/create_transform_button/create_transform_button.test.tsx +++ b/x-pack/plugins/transform/public/app/sections/transform_management/components/create_transform_button/create_transform_button.test.tsx @@ -12,8 +12,6 @@ import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { CreateTransformButton } from './create_transform_button'; -jest.mock('../../../../../shared_imports'); - const queryClient = new QueryClient(); describe('Transform: Transform List ', () => { diff --git a/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/expanded_row.test.tsx b/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/expanded_row.test.tsx index 119ce5dd92dba..28c82d11a1c46 100644 --- a/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/expanded_row.test.tsx +++ b/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/expanded_row.test.tsx @@ -15,12 +15,8 @@ import { ExpandedRow } from './expanded_row'; import transformListRow from '../../../../common/__mocks__/transform_list_row.json'; -jest.mock('../../../../../shared_imports'); jest.mock('../../../../app_dependencies'); -import { MlSharedContext } from '../../../../__mocks__/shared_context'; -import { getMlSharedImports } from '../../../../../shared_imports'; - const queryClient = new QueryClient(); describe('Transform: Transform List ', () => { @@ -35,15 +31,12 @@ describe('Transform: Transform List ', () => { }); test('Minimal initialization', async () => { - const mlShared = await getMlSharedImports(); // @ts-expect-error mock data is too loosely typed const item: TransformListRow = transformListRow; renderReactTestingLibraryWithI18n( - - - + ); diff --git a/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/transform_list.test.tsx b/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/transform_list.test.tsx index ede0470d917f2..28e2cca179a19 100644 --- a/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/transform_list.test.tsx +++ b/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/transform_list.test.tsx @@ -25,7 +25,6 @@ const useQueryMock = jest.spyOn(ReactQuery, 'useQuery').mockImplementation((quer const queryClient = new QueryClient(); -jest.mock('../../../../../shared_imports'); jest.mock('../../../../app_dependencies'); describe('Transform: Transform List ', () => { diff --git a/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/use_actions.test.tsx b/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/use_actions.test.tsx index 02064c76c95ce..5007065113782 100644 --- a/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/use_actions.test.tsx +++ b/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/use_actions.test.tsx @@ -9,7 +9,6 @@ import React, { type FC, type PropsWithChildren } from 'react'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { renderHook } from '@testing-library/react-hooks'; -jest.mock('../../../../../shared_imports'); jest.mock('../../../../app_dependencies'); import { useActions } from './use_actions'; diff --git a/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/use_columns.test.tsx b/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/use_columns.test.tsx index b1d2b6dcb0d42..dcab70822ecd9 100644 --- a/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/use_columns.test.tsx +++ b/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/use_columns.test.tsx @@ -11,7 +11,6 @@ import { renderHook } from '@testing-library/react-hooks'; import { useColumns } from './use_columns'; -jest.mock('../../../../../shared_imports'); jest.mock('../../../../app_dependencies'); describe('Transform: Job List Columns', () => { diff --git a/x-pack/plugins/transform/public/app/sections/transform_management/transform_management_section.test.tsx b/x-pack/plugins/transform/public/app/sections/transform_management/transform_management_section.test.tsx index 20f5f4c27b19f..be4bd374eb673 100644 --- a/x-pack/plugins/transform/public/app/sections/transform_management/transform_management_section.test.tsx +++ b/x-pack/plugins/transform/public/app/sections/transform_management/transform_management_section.test.tsx @@ -11,7 +11,6 @@ import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { TransformManagementSection } from './transform_management_section'; -jest.mock('../../../shared_imports'); jest.mock('../../services/navigation'); const queryClient = new QueryClient(); diff --git a/x-pack/plugins/transform/public/shared_imports.ts b/x-pack/plugins/transform/public/shared_imports.ts deleted file mode 100644 index 63276cecc7a86..0000000000000 --- a/x-pack/plugins/transform/public/shared_imports.ts +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -export { XJsonMode } from '@kbn/ace'; - -export type { GetMlSharedImportsReturnType } from '@kbn/ml-plugin/public'; -export { getMlSharedImports } from '@kbn/ml-plugin/public'; - -import { XJson } from '@kbn/es-ui-shared-plugin/public'; -const { expandLiteralStrings, collapseLiteralStrings } = XJson; -export { expandLiteralStrings, collapseLiteralStrings }; diff --git a/x-pack/plugins/transform/tsconfig.json b/x-pack/plugins/transform/tsconfig.json index e3ccb0cc1d403..c04d45922aa40 100644 --- a/x-pack/plugins/transform/tsconfig.json +++ b/x-pack/plugins/transform/tsconfig.json @@ -15,7 +15,6 @@ "@kbn/core", "@kbn/features-plugin", "@kbn/licensing-plugin", - "@kbn/ml-plugin", "@kbn/unified-search-plugin", "@kbn/data-plugin", "@kbn/config-schema", @@ -78,7 +77,9 @@ "@kbn/core-elasticsearch-server-mocks", "@kbn/test-jest-helpers", "@kbn/monaco", - "@kbn/json-schemas" + "@kbn/json-schemas", + "@kbn/ml-field-stats-flyout", + "@kbn/ml-validators" ], "exclude": [ "target/**/*", diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index d2891900a2503..acf2acb2dbd47 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -626,7 +626,6 @@ "core.euiCodeBlockCopy.copy": "Copier", "core.euiCodeBlockFullScreen.fullscreenCollapse": "Réduire", "core.euiCodeBlockFullScreen.fullscreenExpand": "Développer", - "core.euiCollapsedItemActions.allActions": "Toutes les actions", "core.euiCollapsedItemActions.allActionsDisabled": "Les actions individuelles sont désactivées lorsque plusieurs lignes sont sélectionnées.", "core.euiCollapsedNavButton.ariaLabelButtonIcon": "{title}, menu de navigation rapide", "core.euiCollapsibleNavBeta.ariaLabel": "Menu du site", @@ -681,7 +680,7 @@ "core.euiDataGrid.screenReaderNotice": "Cette cellule contient du contenu interactif.", "core.euiDataGridCell.expansionEnterPrompt": "Appuyez sur Entrée pour développer cette cellule.", "core.euiDataGridCell.focusTrapEnterPrompt": "Appuyez sur Entrée pour interagir avec le contenu de cette cellule.", - "core.euiDataGridCell.position": "{columnId}, colonne {col}, ligne {row}", + "core.euiDataGridCell.position": "{columnName}, colonne {columnIndex}, ligne {rowIndex}", "core.euiDataGridCellActions.expandButtonTitle": "Cliquez ou appuyez sur Entrée pour interagir avec le contenu de la cellule.", "core.euiDataGridHeaderCell.actionsButtonAriaLabel": "{title}. Cliquez pour afficher les actions d'en-tête de colonne", "core.euiDataGridHeaderCell.actionsPopoverScreenReaderText": "Pour naviguer dans la liste des actions de la colonne, appuyez sur la touche Tab ou sur les flèches vers le haut et vers le bas.", @@ -14024,12 +14023,6 @@ "xpack.csp.cloudPosturePage.packageNotInstalledRenderer.addCspmIntegrationButtonTitle": "Ajouter une intégration CSPM", "xpack.csp.cloudPosturePage.packageNotInstalledRenderer.addKspmIntegrationButtonTitle": "Ajouter une intégration KSPM", "xpack.csp.cloudPosturePage.packageNotInstalledRenderer.learnMoreTitle": "En savoir plus sur le niveau de sécurité du cloud", - "xpack.csp.cloudPosturePage.packageNotInstalledRenderer.promptDescription": "Détectez et corrigez les risques de configuration potentiels dans votre infrastructure cloud, comme les compartiments S3 accessibles au public, avec nos solutions de gestion du niveau de sécurité Kubernetes et de gestion du niveau de sécurité du cloud. {learnMore}", - "xpack.csp.cloudPosturePage.packageNotInstalledRenderer.promptTitle": "Détectez les erreurs de configuration de sécurité dans votre infrastructure cloud.", - "xpack.csp.cloudPosturePage.vulnerabilitiesInstalledEmptyPrompt.addVulMngtIntegrationButtonTitle": "Installer la Gestion des vulnérabilités natives du cloud", - "xpack.csp.cloudPosturePage.vulnerabilitiesInstalledEmptyPrompt.learnMoreButtonTitle": "En savoir plus", - "xpack.csp.cloudPosturePage.vulnerabilitiesInstalledEmptyPrompt.promptDescription": "Ajoutez l'intégration de la Gestion des vulnérabilités natives du cloud pour commencer", - "xpack.csp.cloudPosturePage.vulnerabilitiesInstalledEmptyPrompt.promptTitle": "Détecter des vulnérabilités dans vos {lineBreak} ressources cloud", "xpack.csp.cnvmDashboard.statistics.cloudRegionTitle": "Comptes cloud", "xpack.csp.cnvmDashboard.statistics.criticalTitle": "Critique", "xpack.csp.cnvmDashboard.statistics.highTitle": "Élevé", @@ -39699,17 +39692,9 @@ "xpack.securitySolution.noPermissionsTitle": "Privilèges requis", "xpack.securitySolution.noPrivilegesDefaultMessage": "Pour afficher cette page, vous devez mettre à jour les privilèges. Pour en savoir plus, contactez votre administrateur Kibana.", "xpack.securitySolution.noPrivilegesPerPageMessage": "Pour afficher {pageName}, vous devez mettre à jour les privilèges. Pour en savoir plus, contactez votre administrateur Kibana.", - "xpack.securitySolution.notes.addedANoteLabel": "a ajouté une note", - "xpack.securitySolution.notes.addNoteBtnLabel": "Ajouter la note", "xpack.securitySolution.notes.addNoteButtonLabel": "Ajouter la note", - "xpack.securitySolution.notes.attachToTimelineCheckboxLabel": "Attacher à la chronologie active", - "xpack.securitySolution.notes.attachToTimelineInfoLabel": "La chronologie active doit être enregistrée avant qu'une note puisse lui être associée", "xpack.securitySolution.notes.cancelButtonLabel": "Annuler", "xpack.securitySolution.notes.createdByLabel": "Créé par", - "xpack.securitySolution.notes.createNoteErrorLabel": "Erreur lors de la création de la note", - "xpack.securitySolution.notes.deleteNoteErrorLabel": "Erreur lors de la suppression de la note", - "xpack.securitySolution.notes.deleteNoteLabel": "Supprimer la note", - "xpack.securitySolution.notes.fetchNotesErrorLabel": "Erreur lors de la récupération des notes", "xpack.securitySolution.notes.management.batchActionsTitle": "Actions groupées", "xpack.securitySolution.notes.management.createdByColumnTitle": "Créé par", "xpack.securitySolution.notes.management.createdColumnTitle": "Créé", @@ -39726,8 +39711,6 @@ "xpack.securitySolution.notes.management.tableError": "Impossible de charger les notes", "xpack.securitySolution.notes.management.timelineColumnTitle": "Chronologie", "xpack.securitySolution.notes.management.viewEventInTimeline": "Afficher l'événement dans la chronologie", - "xpack.securitySolution.notes.markdownAriaLabel": "Note", - "xpack.securitySolution.notes.noNotesLabel": "Aucune note n'a été créée pour ce document", "xpack.securitySolution.notes.noteLabel": "Note", "xpack.securitySolution.notes.notesTitle": "Notes", "xpack.securitySolution.notes.search.FilterByUserOrNotePlaceholder": "Filtre par utilisateur ou note", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 368ffa47cec39..9e721bdec506a 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -628,7 +628,6 @@ "core.euiCodeBlockCopy.copy": "コピー", "core.euiCodeBlockFullScreen.fullscreenCollapse": "縮小", "core.euiCodeBlockFullScreen.fullscreenExpand": "拡張", - "core.euiCollapsedItemActions.allActions": "すべてのアクション", "core.euiCollapsedItemActions.allActionsDisabled": "行が選択されているときには、個別の項目アクションは無効です。", "core.euiCollapsedNavButton.ariaLabelButtonIcon": "{title}、クイックナビゲーションメニュー", "core.euiCollapsibleNavBeta.ariaLabel": "サイトメニュー", @@ -683,7 +682,7 @@ "core.euiDataGrid.screenReaderNotice": "セルにはインタラクティブコンテンツが含まれます。", "core.euiDataGridCell.expansionEnterPrompt": "このセルを展開するには、Enterキーを押してください。", "core.euiDataGridCell.focusTrapEnterPrompt": "このセルの内容を操作するには、Enterキーを押してください。", - "core.euiDataGridCell.position": "{columnId}, 列{col}, 行{row}", + "core.euiDataGridCell.position": "{columnName}, 列{columnIndex}, 行{rowIndex}", "core.euiDataGridCellActions.expandButtonTitle": "クリックするか enter を押すと、セルのコンテンツとインタラクトできます。", "core.euiDataGridHeaderCell.actionsButtonAriaLabel": "{title}。クリックすると、列ヘッダーアクションが表示されます", "core.euiDataGridHeaderCell.actionsPopoverScreenReaderText": "列アクションのリストを移動するには、Tabまたは上下矢印キーを押します。", @@ -13773,12 +13772,6 @@ "xpack.csp.cloudPosturePage.packageNotInstalledRenderer.addCspmIntegrationButtonTitle": "CSPM統合の追加", "xpack.csp.cloudPosturePage.packageNotInstalledRenderer.addKspmIntegrationButtonTitle": "KSPM統合の追加", "xpack.csp.cloudPosturePage.packageNotInstalledRenderer.learnMoreTitle": "クラウドセキュリティ態勢の詳細をご覧ください", - "xpack.csp.cloudPosturePage.packageNotInstalledRenderer.promptDescription": "クラウドおよびKubernetesセキュリティ態勢管理ソリューションを利用して、クラウドインフラの構成リスク(誰でもアクセス可能なS3バケットなど)の可能性を検出し、修正します。{learnMore}", - "xpack.csp.cloudPosturePage.packageNotInstalledRenderer.promptTitle": "クラウドインフラでセキュリティの誤った構成を検出します。", - "xpack.csp.cloudPosturePage.vulnerabilitiesInstalledEmptyPrompt.addVulMngtIntegrationButtonTitle": "Cloud Native Vulnerability Managementをインストール", - "xpack.csp.cloudPosturePage.vulnerabilitiesInstalledEmptyPrompt.learnMoreButtonTitle": "詳細", - "xpack.csp.cloudPosturePage.vulnerabilitiesInstalledEmptyPrompt.promptDescription": "開始するには、Cloud Native Vulnerability Management統合を追加します", - "xpack.csp.cloudPosturePage.vulnerabilitiesInstalledEmptyPrompt.promptTitle": "{lineBreak}クラウドアセットの脆弱性を検出", "xpack.csp.cnvmDashboard.statistics.cloudRegionTitle": "クラウドアカウント", "xpack.csp.cnvmDashboard.statistics.criticalTitle": "重大", "xpack.csp.cnvmDashboard.statistics.highTitle": "高", @@ -39442,17 +39435,9 @@ "xpack.securitySolution.noPermissionsTitle": "権限が必要です", "xpack.securitySolution.noPrivilegesDefaultMessage": "このページを表示するには、権限を更新する必要があります。詳細については、Kibana管理者に連絡してください。", "xpack.securitySolution.noPrivilegesPerPageMessage": "{pageName}を表示するには、権限を更新する必要があります。詳細については、Kibana管理者に連絡してください。", - "xpack.securitySolution.notes.addedANoteLabel": "メモを追加しました", - "xpack.securitySolution.notes.addNoteBtnLabel": "メモを追加", "xpack.securitySolution.notes.addNoteButtonLabel": "メモを追加", - "xpack.securitySolution.notes.attachToTimelineCheckboxLabel": "アクティブなタイムラインに関連付ける", - "xpack.securitySolution.notes.attachToTimelineInfoLabel": "メモを関連付けるには、アクティブなタイムラインを保存する必要があります", "xpack.securitySolution.notes.cancelButtonLabel": "キャンセル", "xpack.securitySolution.notes.createdByLabel": "作成者", - "xpack.securitySolution.notes.createNoteErrorLabel": "作成エラー", - "xpack.securitySolution.notes.deleteNoteErrorLabel": "メモの削除エラー", - "xpack.securitySolution.notes.deleteNoteLabel": "メモを削除", - "xpack.securitySolution.notes.fetchNotesErrorLabel": "メモの取得エラー", "xpack.securitySolution.notes.management.batchActionsTitle": "一斉アクション", "xpack.securitySolution.notes.management.createdByColumnTitle": "作成者", "xpack.securitySolution.notes.management.createdColumnTitle": "作成済み", @@ -39469,8 +39454,6 @@ "xpack.securitySolution.notes.management.tableError": "メモを読み込めません", "xpack.securitySolution.notes.management.timelineColumnTitle": "Timeline", "xpack.securitySolution.notes.management.viewEventInTimeline": "タイムラインでイベントを表示", - "xpack.securitySolution.notes.markdownAriaLabel": "注", - "xpack.securitySolution.notes.noNotesLabel": "このドキュメントに作成されたメモはありません", "xpack.securitySolution.notes.noteLabel": "注", "xpack.securitySolution.notes.notesTitle": "メモ", "xpack.securitySolution.notes.search.FilterByUserOrNotePlaceholder": "ユーザーまたはメモでフィルター", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 8ddfd9427e738..9c6982f75c883 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -626,7 +626,6 @@ "core.euiCodeBlockCopy.copy": "复制", "core.euiCodeBlockFullScreen.fullscreenCollapse": "折叠", "core.euiCodeBlockFullScreen.fullscreenExpand": "展开", - "core.euiCollapsedItemActions.allActions": "所有操作", "core.euiCollapsedItemActions.allActionsDisabled": "正选择行时将禁用单个项目操作。", "core.euiCollapsedNavButton.ariaLabelButtonIcon": "{title},快速导航菜单", "core.euiCollapsibleNavBeta.ariaLabel": "站点菜单", @@ -681,7 +680,7 @@ "core.euiDataGrid.screenReaderNotice": "单元格包含交互内容。", "core.euiDataGridCell.expansionEnterPrompt": "按 Enter 键展开此单元格。", "core.euiDataGridCell.focusTrapEnterPrompt": "按 Enter 键与此单元格的内容进行交互。", - "core.euiDataGridCell.position": "{columnId},列 {col},行 {row}", + "core.euiDataGridCell.position": "{columnName},列 {columnIndex},行 {rowIndex}", "core.euiDataGridCellActions.expandButtonTitle": "单击或按 Enter 键以便与单元格内容进行交互", "core.euiDataGridHeaderCell.actionsButtonAriaLabel": "{title}。单击以查看列标题操作", "core.euiDataGridHeaderCell.actionsPopoverScreenReaderText": "要在列操作列表中导航,请按 Tab 键或向上和向下箭头键。", @@ -13798,12 +13797,6 @@ "xpack.csp.cloudPosturePage.packageNotInstalledRenderer.addCspmIntegrationButtonTitle": "添加 CSPM 集成", "xpack.csp.cloudPosturePage.packageNotInstalledRenderer.addKspmIntegrationButtonTitle": "添加 KSPM 集成", "xpack.csp.cloudPosturePage.packageNotInstalledRenderer.learnMoreTitle": "了解有关云安全态势的详情", - "xpack.csp.cloudPosturePage.packageNotInstalledRenderer.promptDescription": "使用我们的云和 Kubernetes 安全态势管理解决方案,在您的云基础设施中检测并缓解潜在的配置风险,如可公开访问的 S3 存储桶。{learnMore}", - "xpack.csp.cloudPosturePage.packageNotInstalledRenderer.promptTitle": "在云基础设施中检测安全配置错误!", - "xpack.csp.cloudPosturePage.vulnerabilitiesInstalledEmptyPrompt.addVulMngtIntegrationButtonTitle": "安装云原生漏洞管理", - "xpack.csp.cloudPosturePage.vulnerabilitiesInstalledEmptyPrompt.learnMoreButtonTitle": "了解详情", - "xpack.csp.cloudPosturePage.vulnerabilitiesInstalledEmptyPrompt.promptDescription": "添加云原生漏洞管理集成以开始", - "xpack.csp.cloudPosturePage.vulnerabilitiesInstalledEmptyPrompt.promptTitle": "在 {lineBreak} 云资产中检测漏洞", "xpack.csp.cnvmDashboard.statistics.cloudRegionTitle": "云帐户", "xpack.csp.cnvmDashboard.statistics.criticalTitle": "紧急", "xpack.csp.cnvmDashboard.statistics.highTitle": "高", @@ -39488,17 +39481,9 @@ "xpack.securitySolution.noPermissionsTitle": "需要权限", "xpack.securitySolution.noPrivilegesDefaultMessage": "要查看此页面,必须更新权限。有关详细信息,请联系您的 Kibana 管理员。", "xpack.securitySolution.noPrivilegesPerPageMessage": "要查看 {pageName},必须更新权限。有关详细信息,请联系您的 Kibana 管理员。", - "xpack.securitySolution.notes.addedANoteLabel": "已添加备注", - "xpack.securitySolution.notes.addNoteBtnLabel": "添加备注", "xpack.securitySolution.notes.addNoteButtonLabel": "添加备注", - "xpack.securitySolution.notes.attachToTimelineCheckboxLabel": "附加到活动时间线", - "xpack.securitySolution.notes.attachToTimelineInfoLabel": "必须先保存活动时间线,然后才能将备注与其关联起来", "xpack.securitySolution.notes.cancelButtonLabel": "取消", "xpack.securitySolution.notes.createdByLabel": "创建者", - "xpack.securitySolution.notes.createNoteErrorLabel": "创建备注时出错", - "xpack.securitySolution.notes.deleteNoteErrorLabel": "删除备注时出错", - "xpack.securitySolution.notes.deleteNoteLabel": "删除备注", - "xpack.securitySolution.notes.fetchNotesErrorLabel": "提取备注时出错", "xpack.securitySolution.notes.management.batchActionsTitle": "批处理操作", "xpack.securitySolution.notes.management.createdByColumnTitle": "创建者", "xpack.securitySolution.notes.management.createdColumnTitle": "创建时间", @@ -39515,8 +39500,6 @@ "xpack.securitySolution.notes.management.tableError": "无法加载备注", "xpack.securitySolution.notes.management.timelineColumnTitle": "时间线", "xpack.securitySolution.notes.management.viewEventInTimeline": "在时间线中查看事件", - "xpack.securitySolution.notes.markdownAriaLabel": "备注", - "xpack.securitySolution.notes.noNotesLabel": "尚未为此文档创建备注", "xpack.securitySolution.notes.noteLabel": "备注", "xpack.securitySolution.notes.notesTitle": "备注", "xpack.securitySolution.notes.search.FilterByUserOrNotePlaceholder": "按用户或备注筛选", diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table_state.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table_state.test.tsx index 2834d9f7665f4..13b9433ce4b9e 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table_state.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table_state.test.tsx @@ -907,8 +907,8 @@ describe('AlertsTableState', () => { await waitFor(() => { expect(queryByTestId(`dataGridHeaderCell-${AlertsField.uuid}`)).not.toBe(null); expect( - getByTestId('dataGridHeader') - .querySelectorAll('.euiDataGridHeaderCell__content')[2] + queryByTestId(`dataGridHeaderCell-${AlertsField.uuid}`)! + .querySelector('.euiDataGridHeaderCell__content')! .getAttribute('title') ).toBe(AlertsField.uuid); }); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/recurrence_scheduler/custom_recurrence_scheduler.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/recurrence_scheduler/custom_recurrence_scheduler.tsx index 2136525c028b6..1138463c713a3 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/recurrence_scheduler/custom_recurrence_scheduler.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/recurrence_scheduler/custom_recurrence_scheduler.tsx @@ -5,14 +5,7 @@ * 2.0. */ -import { - EuiButtonGroup, - EuiFormControlLayout, - EuiFormRow, - EuiSelect, - EuiFlexGroup, - EuiFlexItem, -} from '@elastic/eui'; +import { EuiButtonGroup, EuiFormRow, EuiSelect, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import deepEqual from 'fast-deep-equal'; import { Moment } from 'moment'; @@ -127,11 +120,11 @@ export const CustomRecurrenceScheduler: React.FC display="columnCompressed" data-test-subj="customRecurrenceScheduler" fullWidth - label=" " + hasEmptyLabelSpace > - defaultMessage: 'Every', } )} - > - setInterval(Number(value))} - /> - + data-test-subj="customRecurrenceSchedulerInterval" + min={intervalMin} + value={interval} + onChange={(value) => setInterval(Number(value))} + /> = ({ )} {recurrenceEnds === 'afterx' && ( - - + = ({ values: { occurrences }, } )} - > - setOccurrrences(Number(value))} - /> - + min={1} + value={occurrences} + onChange={(value) => setOccurrrences(Number(value))} + /> )} diff --git a/x-pack/test/alerting_api_integration/observability/metric_threshold_rule.ts b/x-pack/test/alerting_api_integration/observability/metric_threshold_rule.ts index bc36566f91f52..4a1459d350ea6 100644 --- a/x-pack/test/alerting_api_integration/observability/metric_threshold_rule.ts +++ b/x-pack/test/alerting_api_integration/observability/metric_threshold_rule.ts @@ -5,7 +5,6 @@ * 2.0. */ -import moment from 'moment'; import expect from '@kbn/expect'; import { cleanup, generate, Dataset, PartialConfig } from '@kbn/data-forge'; import { @@ -33,7 +32,6 @@ export default function ({ getService }: FtrProviderContext) { describe('Metric threshold rule >', () => { let ruleId: string; let alertId: string; - let startedAt: string; let actionId: string; let dataForgeConfig: PartialConfig; let dataForgeIndices: string[]; @@ -159,7 +157,6 @@ export default function ({ getService }: FtrProviderContext) { logger, }); alertId = (resp.hits.hits[0]._source as any)['kibana.alert.uuid']; - startedAt = (resp.hits.hits[0]._source as any)['kibana.alert.start']; expect(resp.hits.hits[0]._source).property( 'kibana.alert.rule.category', 'Metric threshold' @@ -210,7 +207,6 @@ export default function ({ getService }: FtrProviderContext) { }); it('should set correct action parameter: ruleType', async () => { - const rangeFrom = moment(startedAt).subtract('5', 'minute').toISOString(); const resp = await waitForDocumentInIndex<{ ruleType: string; alertDetailsUrl: string; @@ -224,7 +220,7 @@ export default function ({ getService }: FtrProviderContext) { expect(resp.hits.hits[0]._source?.ruleType).eql('metrics.alert.threshold'); expect(resp.hits.hits[0]._source?.alertDetailsUrl).eql( - `https://localhost:5601/app/observability/alerts?_a=(kuery:%27kibana.alert.uuid:%20%22${alertId}%22%27%2CrangeFrom:%27${rangeFrom}%27%2CrangeTo:now%2Cstatus:all)` + `https://localhost:5601/app/observability/alerts/${alertId}` ); expect(resp.hits.hits[0]._source?.reason).eql( `system.cpu.user.pct is 90% in the last 5 mins. Alert when above 50%.` diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group2/monitoring.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group2/monitoring.ts index a86db4a8c27e4..480150b9a97a6 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group2/monitoring.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group2/monitoring.ts @@ -13,18 +13,28 @@ import { FtrProviderContext } from '../../../../common/ftr_provider_context'; // eslint-disable-next-line import/no-default-export export default function monitoringAlertTests({ getService }: FtrProviderContext) { const supertest = getService('supertest'); + const retry = getService('retry'); - // Failing: See https://github.com/elastic/kibana/issues/193072 - describe.skip('monitoring', () => { + describe('monitoring', () => { const objectRemover = new ObjectRemover(supertest); + const run = async (id: string) => { + await retry.try(async () => { + // Sometimes the rule may already be running, which returns a 200. Try until it isn't + const response = await supertest + .post(`${getUrlPrefix(Spaces.space1.id)}/internal/alerting/rule/${id}/_run_soon`) + .set('kbn-xsrf', 'foo'); + expect(response.status).to.eql(204); + }); + }; + after(async () => await objectRemover.removeAll()); it('should return an accurate history for a single success', async () => { const createResponse = await supertest .post(`${getUrlPrefix(Spaces.space1.id)}/api/alerting/rule`) .set('kbn-xsrf', 'foo') - .send(getTestRuleData({ schedule: { interval: '3s' } })); + .send(getTestRuleData({ schedule: { interval: '1h' } })); expect(createResponse.status).to.eql(200); objectRemover.add(Spaces.space1.id, createResponse.body.id, 'rule', 'alerting'); @@ -45,15 +55,21 @@ export default function monitoringAlertTests({ getService }: FtrProviderContext) const createResponse = await supertest .post(`${getUrlPrefix(Spaces.space1.id)}/api/alerting/rule`) .set('kbn-xsrf', 'foo') - .send(getTestRuleData({ schedule: { interval: '3s' } })); + .send(getTestRuleData({ schedule: { interval: '1h' } })); expect(createResponse.status).to.eql(200); - objectRemover.add(Spaces.space1.id, createResponse.body.id, 'rule', 'alerting'); + const ruleId = createResponse.body.id; + objectRemover.add(Spaces.space1.id, ruleId, 'rule', 'alerting'); + + for (let i = 1; i < 3; i++) { + await waitForExecutionCount(i, ruleId); + await run(ruleId); + } // Allow at least three executions - await waitForExecutionCount(3, createResponse.body.id); + await waitForExecutionCount(3, ruleId); const getResponse = await supertest.get( - `${getUrlPrefix(Spaces.space1.id)}/internal/alerting/rule/${createResponse.body.id}` + `${getUrlPrefix(Spaces.space1.id)}/internal/alerting/rule/${ruleId}` ); expect(getResponse.status).to.eql(200); @@ -72,20 +88,26 @@ export default function monitoringAlertTests({ getService }: FtrProviderContext) .send( getTestRuleData({ rule_type_id: 'test.patternSuccessOrFailure', - schedule: { interval: '3s' }, + schedule: { interval: '1h' }, params: { pattern, }, }) ); expect(createResponse.status).to.eql(200); - objectRemover.add(Spaces.space1.id, createResponse.body.id, 'rule', 'alerting'); - // Allow at least three executions - await waitForExecutionCount(5, createResponse.body.id); + const ruleId = createResponse.body.id; + objectRemover.add(Spaces.space1.id, ruleId, 'rule', 'alerting'); + + for (let i = 1; i < 5; i++) { + await waitForExecutionCount(i, ruleId); + await run(ruleId); + } + // Allow at least five executions + await waitForExecutionCount(5, ruleId); const getResponse = await supertest.get( - `${getUrlPrefix(Spaces.space1.id)}/internal/alerting/rule/${createResponse.body.id}` + `${getUrlPrefix(Spaces.space1.id)}/internal/alerting/rule/${ruleId}` ); expect(getResponse.status).to.eql(200); diff --git a/x-pack/test/api_integration/apis/synthetics/add_monitor.ts b/x-pack/test/api_integration/apis/synthetics/add_monitor.ts index 311e8072c4aea..89fc77c034072 100644 --- a/x-pack/test/api_integration/apis/synthetics/add_monitor.ts +++ b/x-pack/test/api_integration/apis/synthetics/add_monitor.ts @@ -8,7 +8,7 @@ import expect from '@kbn/expect'; import epct from 'expect'; import moment from 'moment/moment'; import { v4 as uuidv4 } from 'uuid'; -import { omit, omitBy } from 'lodash'; +import { omit } from 'lodash'; import { ConfigKey, MonitorTypeEnum, @@ -23,10 +23,7 @@ import { format as formatUrl } from 'url'; import supertest from 'supertest'; import { getServiceApiKeyPrivileges } from '@kbn/synthetics-plugin/server/synthetics_service/get_api_key'; import { syntheticsMonitorType } from '@kbn/synthetics-plugin/common/types/saved_objects'; -import { - removeMonitorEmptyValues, - transformPublicKeys, -} from '@kbn/synthetics-plugin/server/routes/monitor_cruds/helper'; +import { transformPublicKeys } from '@kbn/synthetics-plugin/server/routes/monitor_cruds/formatters/saved_object_to_monitor'; import { FtrProviderContext } from '../../ftr_provider_context'; import { getFixtureJson } from './helper/get_fixture_json'; import { SyntheticsMonitorTestService } from './services/synthetics_monitor_test_service'; @@ -54,8 +51,10 @@ export const addMonitorAPIHelper = async (supertestAPI: any, monitor: any, statu return result.body; }; +export const keyToOmitList = ['created_at', 'updated_at', 'id', 'config_id', 'form_monitor_type']; + export const omitMonitorKeys = (monitor: any) => { - return omitBy(transformPublicKeys(monitor), removeMonitorEmptyValues); + return omit(transformPublicKeys(monitor), keyToOmitList); }; export default function ({ getService }: FtrProviderContext) { @@ -154,10 +153,10 @@ export default function ({ getService }: FtrProviderContext) { const { body: apiResponse } = await addMonitorAPI(newMonitor); - epct(apiResponse).toEqual(epct.objectContaining({ max_attempts: maxAttempts })); + epct(apiResponse).toEqual(epct.objectContaining({ retest_on_failure: false })); }); - it('can enable retries', async () => { + it('can enable retries with max attempts', async () => { const maxAttempts = 2; const newMonitor = { max_attempts: maxAttempts, @@ -169,7 +168,21 @@ export default function ({ getService }: FtrProviderContext) { const { body: apiResponse } = await addMonitorAPI(newMonitor); - epct(apiResponse).toEqual(epct.objectContaining({ max_attempts: maxAttempts })); + epct(apiResponse).toEqual(epct.objectContaining({ retest_on_failure: true })); + }); + + it('can enable retries', async () => { + const newMonitor = { + retest_on_failure: false, + urls: 'https://elastic.co', + name: `Sample name ${uuidv4()}`, + type: 'http', + locations: [localLoc], + }; + + const { body: apiResponse } = await addMonitorAPI(newMonitor); + + epct(apiResponse).toEqual(epct.objectContaining({ retest_on_failure: false })); }); it('cannot create a invalid monitor without a monitor type', async () => { diff --git a/x-pack/test/api_integration/apis/synthetics/add_monitor_private_location.ts b/x-pack/test/api_integration/apis/synthetics/add_monitor_private_location.ts index 3840d19fbc3a7..044e66fe239f7 100644 --- a/x-pack/test/api_integration/apis/synthetics/add_monitor_private_location.ts +++ b/x-pack/test/api_integration/apis/synthetics/add_monitor_private_location.ts @@ -26,7 +26,7 @@ import { INSTALLED_VERSION, PrivateLocationTestService, } from './services/private_location_test_service'; -import { addMonitorAPIHelper, omitMonitorKeys } from './add_monitor'; +import { addMonitorAPIHelper, keyToOmitList, omitMonitorKeys } from './add_monitor'; import { SyntheticsMonitorTestService } from './services/synthetics_monitor_test_service'; export default function ({ getService }: FtrProviderContext) { @@ -211,12 +211,10 @@ export default function ({ getService }: FtrProviderContext) { const { created_at: createdAt, updated_at: updatedAt } = apiResponse.body; expect([createdAt, updatedAt].map((d) => moment(d).isValid())).eql([true, true]); - expect(apiResponse.body).eql( + expect(omit(apiResponse.body, keyToOmitList)).eql( omitMonitorKeys({ ...omit(httpMonitorJson, ['urls']), url: httpMonitorJson.urls, - [ConfigKey.MONITOR_QUERY_ID]: apiResponse.body.id, - [ConfigKey.CONFIG_ID]: apiResponse.body.id, updated_at: updatedAt, revision: 2, }) @@ -269,7 +267,7 @@ export default function ({ getService }: FtrProviderContext) { ); await supertestAPI - .put(SYNTHETICS_API_URLS.SYNTHETICS_MONITORS + '/' + newMonitorId + '?ui=true') + .put(SYNTHETICS_API_URLS.SYNTHETICS_MONITORS + '/' + newMonitorId + '?internal=true') .set('kbn-xsrf', 'true') .send(httpMonitorJson) .expect(200); @@ -370,15 +368,11 @@ export default function ({ getService }: FtrProviderContext) { const { created_at: createdAt, updated_at: updatedAt } = apiResponse.body; expect([createdAt, updatedAt].map((d) => moment(d).isValid())).eql([true, true]); - expect(apiResponse.body).eql( + expect(omit(apiResponse.body, keyToOmitList)).eql( omitMonitorKeys({ ...monitor, - [ConfigKey.MONITOR_QUERY_ID]: apiResponse.body.id, - [ConfigKey.CONFIG_ID]: apiResponse.body.id, [ConfigKey.NAMESPACE]: formatKibanaNamespace(SPACE_ID), url: apiResponse.body.url, - created_at: createdAt, - updated_at: updatedAt, }) ); monitorId = apiResponse.body.id; diff --git a/x-pack/test/api_integration/apis/synthetics/add_monitor_project.ts b/x-pack/test/api_integration/apis/synthetics/add_monitor_project.ts index 074f318e77fcf..bd6f94a44f6c1 100644 --- a/x-pack/test/api_integration/apis/synthetics/add_monitor_project.ts +++ b/x-pack/test/api_integration/apis/synthetics/add_monitor_project.ts @@ -170,17 +170,20 @@ export default function ({ getService }: FtrProviderContext) { .expect(200); const decryptedCreatedMonitor = await monitorTestService.getMonitor( - createdMonitorsResponse.body.monitors[0].config_id + createdMonitorsResponse.body.monitors[0].config_id, + { + internal: true, + } ); - expect(decryptedCreatedMonitor.body).to.eql({ + expect(decryptedCreatedMonitor.rawBody).to.eql({ __ui: { script_source: { file_name: '', is_generated_script: false, }, }, - config_id: decryptedCreatedMonitor.body.config_id, + config_id: decryptedCreatedMonitor.rawBody.config_id, custom_heartbeat_id: `${journeyId}-${project}-default`, enabled: true, alert: { @@ -241,6 +244,8 @@ export default function ({ getService }: FtrProviderContext) { id: `${journeyId}-${project}-default`, hash: 'ekrjelkjrelkjre', max_attempts: 2, + updated_at: decryptedCreatedMonitor.rawBody.updated_at, + created_at: decryptedCreatedMonitor.rawBody.created_at, labels: {}, }); } @@ -341,17 +346,20 @@ export default function ({ getService }: FtrProviderContext) { .set('kbn-xsrf', 'true') .expect(200); - const decryptedCreatedMonitor = await monitorTestService.getMonitor( - createdMonitorsResponse.body.monitors[0].config_id + const { rawBody: decryptedCreatedMonitor } = await monitorTestService.getMonitor( + createdMonitorsResponse.body.monitors[0].config_id, + { + internal: true, + } ); - expect(decryptedCreatedMonitor.body).to.eql({ + expect(decryptedCreatedMonitor).to.eql({ __ui: { is_tls_enabled: isTLSEnabled, }, 'check.request.method': 'POST', 'check.response.status': ['200'], - config_id: decryptedCreatedMonitor.body.config_id, + config_id: decryptedCreatedMonitor.config_id, custom_heartbeat_id: `${journeyId}-${project}-default`, 'check.response.body.negative': [], 'check.response.body.positive': ['${testLocal1}', 'saved'], @@ -364,8 +372,10 @@ export default function ({ getService }: FtrProviderContext) { type: 'text', value: '', }, - params: - '{"testLocal1":"testLocalParamsValue","testGlobalParam2":"testGlobalParamOverwrite"}', + params: JSON.stringify({ + testLocal1: 'testLocalParamsValue', + testGlobalParam2: 'testGlobalParamOverwrite', + }), 'check.request.headers': { 'Content-Type': 'application/x-www-form-urlencoded', }, @@ -427,6 +437,8 @@ export default function ({ getService }: FtrProviderContext) { ipv4: true, max_attempts: 2, labels: {}, + updated_at: decryptedCreatedMonitor.updated_at, + created_at: decryptedCreatedMonitor.created_at, }); } } finally { @@ -478,15 +490,18 @@ export default function ({ getService }: FtrProviderContext) { .set('kbn-xsrf', 'true') .expect(200); - const decryptedCreatedMonitor = await monitorTestService.getMonitor( - createdMonitorsResponse.body.monitors[0].config_id + const { rawBody: decryptedCreatedMonitor } = await monitorTestService.getMonitor( + createdMonitorsResponse.body.monitors[0].config_id, + { + internal: true, + } ); - expect(decryptedCreatedMonitor.body).to.eql({ + expect(decryptedCreatedMonitor).to.eql({ __ui: { is_tls_enabled: isTLSEnabled, }, - config_id: decryptedCreatedMonitor.body.config_id, + config_id: decryptedCreatedMonitor.config_id, custom_heartbeat_id: `${journeyId}-${project}-default`, 'check.receive': '', 'check.send': '', @@ -545,6 +560,8 @@ export default function ({ getService }: FtrProviderContext) { params: '', max_attempts: 2, labels: {}, + updated_at: decryptedCreatedMonitor.updated_at, + created_at: decryptedCreatedMonitor.created_at, }); } } finally { @@ -594,12 +611,15 @@ export default function ({ getService }: FtrProviderContext) { .set('kbn-xsrf', 'true') .expect(200); - const decryptedCreatedMonitor = await monitorTestService.getMonitor( - createdMonitorsResponse.body.monitors[0].config_id + const { rawBody: decryptedCreatedMonitor } = await monitorTestService.getMonitor( + createdMonitorsResponse.body.monitors[0].config_id, + { + internal: true, + } ); - expect(decryptedCreatedMonitor.body).to.eql({ - config_id: decryptedCreatedMonitor.body.config_id, + expect(decryptedCreatedMonitor).to.eql({ + config_id: decryptedCreatedMonitor.config_id, custom_heartbeat_id: `${journeyId}-${project}-default`, enabled: true, alert: { @@ -659,6 +679,8 @@ export default function ({ getService }: FtrProviderContext) { ipv6: true, params: '', max_attempts: 2, + updated_at: decryptedCreatedMonitor.updated_at, + created_at: decryptedCreatedMonitor.created_at, labels: {}, }); } @@ -1106,8 +1128,7 @@ export default function ({ getService }: FtrProviderContext) { const decryptedCreatedMonitor = await monitorTestService.getMonitor( getResponse.body.monitors[0].config_id, - true, - SPACE_ID + { internal: true, space: SPACE_ID } ); const { monitors } = getResponse.body; expect(monitors.length).eql(1); @@ -1144,8 +1165,7 @@ export default function ({ getService }: FtrProviderContext) { const decryptedUpdatedMonitor = await monitorTestService.getMonitor( monitorsUpdated[0].config_id, - true, - SPACE_ID + { internal: true, space: SPACE_ID } ); expect(decryptedUpdatedMonitor.body[ConfigKey.SOURCE_PROJECT_CONTENT]).eql(updatedSource); } finally { diff --git a/x-pack/test/api_integration/apis/synthetics/add_monitor_public_api.ts b/x-pack/test/api_integration/apis/synthetics/add_monitor_public_api.ts index df6a0b0df9056..5da370d1c634f 100644 --- a/x-pack/test/api_integration/apis/synthetics/add_monitor_public_api.ts +++ b/x-pack/test/api_integration/apis/synthetics/add_monitor_public_api.ts @@ -6,13 +6,8 @@ */ import expect from '@kbn/expect'; import { v4 as uuidv4 } from 'uuid'; -import { omitBy } from 'lodash'; import { DEFAULT_FIELDS } from '@kbn/synthetics-plugin/common/constants/monitor_defaults'; -import { - removeMonitorEmptyValues, - transformPublicKeys, -} from '@kbn/synthetics-plugin/server/routes/monitor_cruds/helper'; import { LOCATION_REQUIRED_ERROR } from '@kbn/synthetics-plugin/server/routes/monitor_cruds/monitor_validation'; import { FtrProviderContext } from '../../ftr_provider_context'; import { addMonitorAPIHelper, omitMonitorKeys } from './add_monitor'; @@ -101,7 +96,7 @@ export default function ({ getService }: FtrProviderContext) { }); describe('HTTP Monitor', () => { - const defaultFields = omitBy(DEFAULT_FIELDS.http, removeMonitorEmptyValues); + const defaultFields = DEFAULT_FIELDS.http; it('return error empty http', async () => { const { message, attributes } = await addMonitorAPI( { @@ -154,8 +149,7 @@ export default function ({ getService }: FtrProviderContext) { ...monitor, locations: [localLoc], name, - max_attempts: 2, - retest_on_failure: undefined, // this key is not part of the SO and should not be defined + retest_on_failure: true, }) ); }); @@ -185,7 +179,7 @@ export default function ({ getService }: FtrProviderContext) { }); describe('TCP Monitor', () => { - const defaultFields = omitBy(DEFAULT_FIELDS.tcp, removeMonitorEmptyValues); + const defaultFields = DEFAULT_FIELDS.tcp; it('base tcp monitor', async () => { const monitor = { @@ -207,7 +201,7 @@ export default function ({ getService }: FtrProviderContext) { }); describe('ICMP Monitor', () => { - const defaultFields = omitBy(DEFAULT_FIELDS.icmp, removeMonitorEmptyValues); + const defaultFields = DEFAULT_FIELDS.icmp; it('base icmp monitor', async () => { const monitor = { @@ -229,7 +223,7 @@ export default function ({ getService }: FtrProviderContext) { }); describe('Browser Monitor', () => { - const defaultFields = omitBy(DEFAULT_FIELDS.browser, removeMonitorEmptyValues); + const defaultFields = DEFAULT_FIELDS.browser; it('empty browser monitor', async () => { const monitor = { @@ -259,7 +253,7 @@ export default function ({ getService }: FtrProviderContext) { }; const { body: result } = await addMonitorAPI(monitor); - expect(transformPublicKeys(result)).eql( + expect(result).eql( omitMonitorKeys({ ...defaultFields, ...monitor, diff --git a/x-pack/test/api_integration/apis/synthetics/edit_monitor.ts b/x-pack/test/api_integration/apis/synthetics/edit_monitor.ts index 1504384cef030..522a359c6d51b 100644 --- a/x-pack/test/api_integration/apis/synthetics/edit_monitor.ts +++ b/x-pack/test/api_integration/apis/synthetics/edit_monitor.ts @@ -6,7 +6,7 @@ */ import moment from 'moment'; import { v4 as uuidv4 } from 'uuid'; -import { omit, omitBy } from 'lodash'; +import { omit } from 'lodash'; import { ConfigKey, EncryptedSyntheticsSavedMonitor, @@ -15,7 +15,6 @@ import { } from '@kbn/synthetics-plugin/common/runtime_types'; import { SYNTHETICS_API_URLS } from '@kbn/synthetics-plugin/common/constants'; import expect from '@kbn/expect'; -import { removeMonitorEmptyValues } from '@kbn/synthetics-plugin/server/routes/monitor_cruds/helper'; import { FtrProviderContext } from '../../ftr_provider_context'; import { getFixtureJson } from './helper/get_fixture_json'; import { omitResponseTimestamps, omitEmptyValues } from './helper/monitor'; @@ -40,12 +39,11 @@ export default function ({ getService }: FtrProviderContext) { let testPolicyId = ''; const saveMonitor = async (monitor: MonitorFields, spaceId?: string) => { + const apiURL = spaceId + ? `/s/${spaceId}${SYNTHETICS_API_URLS.SYNTHETICS_MONITORS}` + : SYNTHETICS_API_URLS.SYNTHETICS_MONITORS; const res = await supertest - .post( - spaceId - ? `/s/${spaceId}${SYNTHETICS_API_URLS.SYNTHETICS_MONITORS}` - : SYNTHETICS_API_URLS.SYNTHETICS_MONITORS - ) + .post(apiURL + '?internal=true') .set('kbn-xsrf', 'true') .send(monitor); @@ -55,21 +53,21 @@ export default function ({ getService }: FtrProviderContext) { expect([createdAt, updatedAt].map((d) => moment(d).isValid())).eql([true, true]); - return { ...rest, urls: url } as EncryptedSyntheticsSavedMonitor; + return rest as EncryptedSyntheticsSavedMonitor; }; const editMonitor = async (modifiedMonitor: MonitorFields, monitorId: string) => { const res = await supertest - .put(SYNTHETICS_API_URLS.SYNTHETICS_MONITORS + '/' + monitorId) + .put(SYNTHETICS_API_URLS.SYNTHETICS_MONITORS + '/' + monitorId + '?internal=true') .set('kbn-xsrf', 'true') .send(modifiedMonitor); expect(res.status).eql(200, JSON.stringify(res.body)); - const { url, ...rest } = res.body; + const { created_at: createdAt, updated_at: updatedAt } = res.body; + expect([createdAt, updatedAt].map((d) => moment(d).isValid())).eql([true, true]); - const result = { ...rest, urls: url } as EncryptedSyntheticsSavedMonitor; - return omitBy(omit(result, ['created_at', 'updated_at']), removeMonitorEmptyValues); + return omit(res.body, ['created_at', 'updated_at']); }; before(async () => { @@ -101,9 +99,6 @@ export default function ({ getService }: FtrProviderContext) { const savedMonitor = await saveMonitor(newMonitor as MonitorFields); const monitorId = savedMonitor[ConfigKey.CONFIG_ID]; - const { created_at: createdAt, updated_at: updatedAt } = savedMonitor; - expect([createdAt, updatedAt].map((d) => moment(d).isValid())).eql([true, true]); - expect(omitResponseTimestamps(savedMonitor)).eql( omitEmptyValues({ ...newMonitor, @@ -269,6 +264,7 @@ export default function ({ getService }: FtrProviderContext) { [ConfigKey.CONFIG_ID]: monitorId, [ConfigKey.MONITOR_QUERY_ID]: monitorId, name: 'test monitor - 12', + hash: configHash, }) ); @@ -399,7 +395,10 @@ export default function ({ getService }: FtrProviderContext) { .send(toUpdate) .expect(200); - const updatedResponse = await monitorTestService.getMonitor(monitorId, true, SPACE_ID); + const updatedResponse = await monitorTestService.getMonitor(monitorId, { + space: SPACE_ID, + internal: true, + }); // ensure monitor was updated expect(updatedResponse.body.urls).eql(toUpdate.urls); @@ -416,7 +415,10 @@ export default function ({ getService }: FtrProviderContext) { .send(toUpdate2) .expect(200); - const updatedResponse2 = await monitorTestService.getMonitor(monitorId, true, SPACE_ID); + const updatedResponse2 = await monitorTestService.getMonitor(monitorId, { + space: SPACE_ID, + internal: true, + }); // ensure monitor was updated expect(updatedResponse2.body.urls).eql(toUpdate2.urls); diff --git a/x-pack/test/api_integration/apis/synthetics/edit_monitor_public_api.ts b/x-pack/test/api_integration/apis/synthetics/edit_monitor_public_api.ts index ffb44dd1b00d9..fa7c780a2d971 100644 --- a/x-pack/test/api_integration/apis/synthetics/edit_monitor_public_api.ts +++ b/x-pack/test/api_integration/apis/synthetics/edit_monitor_public_api.ts @@ -5,10 +5,9 @@ * 2.0. */ import expect from '@kbn/expect'; -import { omit, omitBy } from 'lodash'; +import { omit } from 'lodash'; import { DEFAULT_FIELDS } from '@kbn/synthetics-plugin/common/constants/monitor_defaults'; -import { removeMonitorEmptyValues } from '@kbn/synthetics-plugin/server/routes/monitor_cruds/helper'; import { SYNTHETICS_API_URLS } from '@kbn/synthetics-plugin/common/constants'; import moment from 'moment'; import { PrivateLocation } from '@kbn/synthetics-plugin/common/runtime_types'; @@ -70,7 +69,7 @@ export default function ({ getService }: FtrProviderContext) { }); let monitorId = 'test-id'; - const defaultFields = omitBy(DEFAULT_FIELDS.http, removeMonitorEmptyValues); + const defaultFields = DEFAULT_FIELDS.http; it('adds test monitor', async () => { const monitor = { type: 'http', diff --git a/x-pack/test/api_integration/apis/synthetics/fixtures/browser_monitor.json b/x-pack/test/api_integration/apis/synthetics/fixtures/browser_monitor.json index 991fded06e477..1cb2d39685bf2 100644 --- a/x-pack/test/api_integration/apis/synthetics/fixtures/browser_monitor.json +++ b/x-pack/test/api_integration/apis/synthetics/fixtures/browser_monitor.json @@ -55,5 +55,6 @@ "ssl.supported_protocols": ["TLSv1.1", "TLSv1.2", "TLSv1.3"], "ssl.verification_mode": "full", "revision": 1, - "max_attempts": 2 + "max_attempts": 2, + "labels": {} } diff --git a/x-pack/test/api_integration/apis/synthetics/get_monitor.ts b/x-pack/test/api_integration/apis/synthetics/get_monitor.ts index 114f7666e7965..9f266fa42fc31 100644 --- a/x-pack/test/api_integration/apis/synthetics/get_monitor.ts +++ b/x-pack/test/api_integration/apis/synthetics/get_monitor.ts @@ -15,6 +15,8 @@ import { import { SYNTHETICS_API_URLS } from '@kbn/synthetics-plugin/common/constants'; import expect from '@kbn/expect'; import { secretKeys } from '@kbn/synthetics-plugin/common/constants/monitor_management'; +import { SyntheticsMonitorTestService } from './services/synthetics_monitor_test_service'; +import { omitMonitorKeys } from './add_monitor'; import { FtrProviderContext } from '../../ftr_provider_context'; import { getFixtureJson } from './helper/get_fixture_json'; import { LOCAL_LOCATION } from './get_filters'; @@ -26,6 +28,7 @@ export default function ({ getService }: FtrProviderContext) { const supertest = getService('supertest'); const kibanaServer = getService('kibanaServer'); const retry = getService('retry'); + const monitorTestService = new SyntheticsMonitorTestService(getService); let _monitors: MonitorFields[]; let monitors: MonitorFields[]; @@ -189,22 +192,45 @@ export default function ({ getService }: FtrProviderContext) { monitors.map((mon) => ({ ...mon, name: mon.name + '4' })).map(saveMonitor) ); - const apiResponse = await supertest - .get( - SYNTHETICS_API_URLS.GET_SYNTHETICS_MONITOR.replace('{monitorId}', id1) + - '?decrypted=true' - ) - .expect(200); + const apiResponse = await monitorTestService.getMonitor(id1); + + expect(apiResponse.body).eql( + omitMonitorKeys({ + ...monitors[0], + [ConfigKey.MONITOR_QUERY_ID]: apiResponse.body.id, + [ConfigKey.CONFIG_ID]: apiResponse.body.id, + revision: 1, + locations: [LOCAL_LOCATION], + name: 'Test HTTP Monitor 044', + labels: {}, + }) + ); + }); - expect(apiResponse.body).eql({ - ...monitors[0], - [ConfigKey.MONITOR_QUERY_ID]: apiResponse.body.id, - [ConfigKey.CONFIG_ID]: apiResponse.body.id, - revision: 1, - locations: [LOCAL_LOCATION], - name: 'Test HTTP Monitor 044', - labels: {}, - }); + it('should get by id with ui query param', async () => { + const [{ id: id1 }] = await Promise.all( + monitors.map((mon) => ({ ...mon, name: mon.name + '5' })).map(saveMonitor) + ); + + const apiResponse = await monitorTestService.getMonitor(id1, { internal: true }); + + expect(apiResponse.body).eql( + omit( + { + ...monitors[0], + form_monitor_type: 'icmp', + revision: 1, + locations: [LOCAL_LOCATION], + name: 'Test HTTP Monitor 045', + hosts: '192.33.22.111:3333', + hash: '', + journey_id: '', + max_attempts: 2, + labels: {}, + }, + ['config_id', 'id', 'form_monitor_type'] + ) + ); }); it('returns 404 if monitor id is not found', async () => { diff --git a/x-pack/test/api_integration/apis/synthetics/helper/monitor.ts b/x-pack/test/api_integration/apis/synthetics/helper/monitor.ts index 25a5d4c438575..8c10fa78d9834 100644 --- a/x-pack/test/api_integration/apis/synthetics/helper/monitor.ts +++ b/x-pack/test/api_integration/apis/synthetics/helper/monitor.ts @@ -5,21 +5,17 @@ * 2.0. */ -import { omit, omitBy } from 'lodash'; -import { removeMonitorEmptyValues } from '@kbn/synthetics-plugin/server/routes/monitor_cruds/helper'; +import { omit } from 'lodash'; export function omitResponseTimestamps(monitor: object) { - return omitBy(omit(monitor, ['created_at', 'updated_at']), removeMonitorEmptyValues); + return omit(monitor, ['created_at', 'updated_at']); } export function omitEmptyValues(monitor: object) { - const { url, ...rest } = omit(monitor, ['created_at', 'updated_at', 'form_monitor_type']) as any; + const { url, ...rest } = omit(monitor, ['created_at', 'updated_at']) as any; - return omitBy( - { - ...rest, - ...(url ? { url } : {}), - }, - removeMonitorEmptyValues - ); + return { + ...rest, + ...(url ? { url } : {}), + }; } diff --git a/x-pack/test/api_integration/apis/synthetics/services/synthetics_monitor_test_service.ts b/x-pack/test/api_integration/apis/synthetics/services/synthetics_monitor_test_service.ts index 7bc246804f42c..e11a5523ed7b4 100644 --- a/x-pack/test/api_integration/apis/synthetics/services/synthetics_monitor_test_service.ts +++ b/x-pack/test/api_integration/apis/synthetics/services/synthetics_monitor_test_service.ts @@ -12,6 +12,8 @@ import { MonitorInspectResponse } from '@kbn/synthetics-plugin/public/apps/synth import { v4 as uuidv4 } from 'uuid'; import expect from '@kbn/expect'; import { ProjectAPIKeyResponse } from '@kbn/synthetics-plugin/server/routes/monitor_cruds/get_api_key'; +import moment from 'moment/moment'; +import { omit } from 'lodash'; import { KibanaSupertestProvider } from '@kbn/ftr-common-functional-services'; import { FtrProviderContext } from '../../../ftr_provider_context'; @@ -45,14 +47,53 @@ export class SyntheticsMonitorTestService { return apiKey; }; - async getMonitor(monitorId: string, decrypted: boolean = true, space?: string) { - let url = - SYNTHETICS_API_URLS.GET_SYNTHETICS_MONITOR.replace('{monitorId}', monitorId) + - (decrypted ? '?decrypted=true' : ''); + async getMonitor( + monitorId: string, + { + statusCode = 200, + space, + internal, + }: { + statusCode?: number; + space?: string; + internal?: boolean; + } = {} + ) { + let url = SYNTHETICS_API_URLS.GET_SYNTHETICS_MONITOR.replace('{monitorId}', monitorId); if (space) { url = '/s/' + space + url; } - return this.supertest.get(url).set('kbn-xsrf', 'true').expect(200); + if (internal) { + url += `?internal=${internal}`; + } + const apiResponse = await this.supertest.get(url).expect(200); + + expect(apiResponse.status).eql(statusCode, JSON.stringify(apiResponse.body)); + + if (statusCode === 200) { + const { + created_at: createdAt, + updated_at: updatedAt, + id, + config_id: configId, + } = apiResponse.body; + expect(id).not.empty(); + expect(configId).not.empty(); + expect([createdAt, updatedAt].map((d) => moment(d).isValid())).eql([true, true]); + return { + rawBody: apiResponse.body, + body: { + ...omit(apiResponse.body, [ + 'created_at', + 'updated_at', + 'id', + 'config_id', + 'form_monitor_type', + ]), + }, + }; + } + return apiResponse.body; } async addMonitor(monitor: any) { diff --git a/x-pack/test/api_integration/services/security_solution_api.gen.ts b/x-pack/test/api_integration/services/security_solution_api.gen.ts index 9c92a7a095dae..74f14c2c5f6ad 100644 --- a/x-pack/test/api_integration/services/security_solution_api.gen.ts +++ b/x-pack/test/api_integration/services/security_solution_api.gen.ts @@ -38,8 +38,8 @@ import { } from '@kbn/security-solution-plugin/common/api/endpoint/protection_updates_note/protection_updates_note.gen'; import { DeleteAssetCriticalityRecordRequestQueryInput } from '@kbn/security-solution-plugin/common/api/entity_analytics/asset_criticality/delete_asset_criticality.gen'; import { - DeleteEntityStoreRequestQueryInput, - DeleteEntityStoreRequestParamsInput, + DeleteEntityEngineRequestQueryInput, + DeleteEntityEngineRequestParamsInput, } from '@kbn/security-solution-plugin/common/api/entity_analytics/entity_store/engine/delete.gen'; import { DeleteNoteRequestBodyInput } from '@kbn/security-solution-plugin/common/api/timeline/delete_note/delete_note_route.gen'; import { DeleteRuleRequestQueryInput } from '@kbn/security-solution-plugin/common/api/detection_engine/rule_management/crud/delete_rule/delete_rule_route.gen'; @@ -80,8 +80,8 @@ import { GetEndpointSuggestionsRequestParamsInput, GetEndpointSuggestionsRequestBodyInput, } from '@kbn/security-solution-plugin/common/api/endpoint/suggestions/get_suggestions.gen'; -import { GetEntityStoreEngineRequestParamsInput } from '@kbn/security-solution-plugin/common/api/entity_analytics/entity_store/engine/get.gen'; -import { GetEntityStoreStatsRequestParamsInput } from '@kbn/security-solution-plugin/common/api/entity_analytics/entity_store/engine/stats.gen'; +import { GetEntityEngineRequestParamsInput } from '@kbn/security-solution-plugin/common/api/entity_analytics/entity_store/engine/get.gen'; +import { GetEntityEngineStatsRequestParamsInput } from '@kbn/security-solution-plugin/common/api/entity_analytics/entity_store/engine/stats.gen'; import { GetNotesRequestQueryInput } from '@kbn/security-solution-plugin/common/api/timeline/get_notes/get_notes_route.gen'; import { GetPolicyResponseRequestQueryInput } from '@kbn/security-solution-plugin/common/api/endpoint/policy/policy_response.gen'; import { GetProtectionUpdatesNoteRequestParamsInput } from '@kbn/security-solution-plugin/common/api/endpoint/protection_updates_note/protection_updates_note.gen'; @@ -98,8 +98,8 @@ import { GetTimelinesRequestQueryInput } from '@kbn/security-solution-plugin/com import { ImportRulesRequestQueryInput } from '@kbn/security-solution-plugin/common/api/detection_engine/rule_management/import_rules/import_rules_route.gen'; import { ImportTimelinesRequestBodyInput } from '@kbn/security-solution-plugin/common/api/timeline/import_timelines/import_timelines_route.gen'; import { - InitEntityStoreRequestParamsInput, - InitEntityStoreRequestBodyInput, + InitEntityEngineRequestParamsInput, + InitEntityEngineRequestBodyInput, } from '@kbn/security-solution-plugin/common/api/entity_analytics/entity_store/engine/init.gen'; import { InstallPrepackedTimelinesRequestBodyInput } from '@kbn/security-solution-plugin/common/api/timeline/install_prepackaged_timelines/install_prepackaged_timelines_route.gen'; import { ListEntitiesRequestQueryInput } from '@kbn/security-solution-plugin/common/api/entity_analytics/entity_store/entities/list_entities.gen'; @@ -124,8 +124,8 @@ import { SearchAlertsRequestBodyInput } from '@kbn/security-solution-plugin/comm import { SetAlertAssigneesRequestBodyInput } from '@kbn/security-solution-plugin/common/api/detection_engine/alert_assignees/set_alert_assignees_route.gen'; import { SetAlertsStatusRequestBodyInput } from '@kbn/security-solution-plugin/common/api/detection_engine/signals/set_signal_status/set_signals_status_route.gen'; import { SetAlertTagsRequestBodyInput } from '@kbn/security-solution-plugin/common/api/detection_engine/alert_tags/set_alert_tags/set_alert_tags.gen'; -import { StartEntityStoreRequestParamsInput } from '@kbn/security-solution-plugin/common/api/entity_analytics/entity_store/engine/start.gen'; -import { StopEntityStoreRequestParamsInput } from '@kbn/security-solution-plugin/common/api/entity_analytics/entity_store/engine/stop.gen'; +import { StartEntityEngineRequestParamsInput } from '@kbn/security-solution-plugin/common/api/entity_analytics/entity_store/engine/start.gen'; +import { StopEntityEngineRequestParamsInput } from '@kbn/security-solution-plugin/common/api/entity_analytics/entity_store/engine/stop.gen'; import { SuggestUserProfilesRequestQueryInput } from '@kbn/security-solution-plugin/common/api/detection_engine/users/suggest_user_profiles_route.gen'; import { TriggerRiskScoreCalculationRequestBodyInput } from '@kbn/security-solution-plugin/common/api/entity_analytics/risk_engine/entity_calculation_route.gen'; import { UpdateRuleRequestBodyInput } from '@kbn/security-solution-plugin/common/api/detection_engine/rule_management/crud/update_rule/update_rule_route.gen'; @@ -256,6 +256,16 @@ If asset criticality records already exist for the specified entities, those rec .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send(props.body as object); }, + /** + * Cleaning up the the Risk Engine by removing the indices, mapping and transforms + */ + cleanUpRiskEngine() { + return supertest + .delete('/api/risk_score/engine/dangerously_delete_data') + .set('kbn-xsrf', 'true') + .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); + }, createAlertsIndex() { return supertest .post('/api/detection_engine/index') @@ -340,7 +350,7 @@ If a record already exists for the specified entity, that record is overwritten .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query(props.query); }, - deleteEntityStore(props: DeleteEntityStoreProps) { + deleteEntityEngine(props: DeleteEntityEngineProps) { return supertest .delete(replaceParams('/api/entity_store/engines/{entityType}', props.params)) .set('kbn-xsrf', 'true') @@ -715,14 +725,14 @@ finalize it. .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send(props.body as object); }, - getEntityStoreEngine(props: GetEntityStoreEngineProps) { + getEntityEngine(props: GetEntityEngineProps) { return supertest .get(replaceParams('/api/entity_store/engines/{entityType}', props.params)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); }, - getEntityStoreStats(props: GetEntityStoreStatsProps) { + getEntityEngineStats(props: GetEntityEngineStatsProps) { return supertest .post(replaceParams('/api/entity_store/engines/{entityType}/stats', props.params)) .set('kbn-xsrf', 'true') @@ -834,7 +844,7 @@ finalize it. .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send(props.body as object); }, - initEntityStore(props: InitEntityStoreProps) { + initEntityEngine(props: InitEntityEngineProps) { return supertest .post(replaceParams('/api/entity_store/engines/{entityType}/init', props.params)) .set('kbn-xsrf', 'true') @@ -891,7 +901,7 @@ finalize it. .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query(props.query); }, - listEntityStoreEngines() { + listEntityEngines() { return supertest .get('/api/entity_store/engines') .set('kbn-xsrf', 'true') @@ -1130,14 +1140,14 @@ detection engine rules. .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send(props.body as object); }, - startEntityStore(props: StartEntityStoreProps) { + startEntityEngine(props: StartEntityEngineProps) { return supertest .post(replaceParams('/api/entity_store/engines/{entityType}/start', props.params)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); }, - stopEntityStore(props: StopEntityStoreProps) { + stopEntityEngine(props: StopEntityEngineProps) { return supertest .post(replaceParams('/api/entity_store/engines/{entityType}/stop', props.params)) .set('kbn-xsrf', 'true') @@ -1233,9 +1243,9 @@ export interface CreateUpdateProtectionUpdatesNoteProps { export interface DeleteAssetCriticalityRecordProps { query: DeleteAssetCriticalityRecordRequestQueryInput; } -export interface DeleteEntityStoreProps { - query: DeleteEntityStoreRequestQueryInput; - params: DeleteEntityStoreRequestParamsInput; +export interface DeleteEntityEngineProps { + query: DeleteEntityEngineRequestQueryInput; + params: DeleteEntityEngineRequestParamsInput; } export interface DeleteNoteProps { body: DeleteNoteRequestBodyInput; @@ -1330,11 +1340,11 @@ export interface GetEndpointSuggestionsProps { params: GetEndpointSuggestionsRequestParamsInput; body: GetEndpointSuggestionsRequestBodyInput; } -export interface GetEntityStoreEngineProps { - params: GetEntityStoreEngineRequestParamsInput; +export interface GetEntityEngineProps { + params: GetEntityEngineRequestParamsInput; } -export interface GetEntityStoreStatsProps { - params: GetEntityStoreStatsRequestParamsInput; +export interface GetEntityEngineStatsProps { + params: GetEntityEngineStatsRequestParamsInput; } export interface GetNotesProps { query: GetNotesRequestQueryInput; @@ -1365,9 +1375,9 @@ export interface ImportRulesProps { export interface ImportTimelinesProps { body: ImportTimelinesRequestBodyInput; } -export interface InitEntityStoreProps { - params: InitEntityStoreRequestParamsInput; - body: InitEntityStoreRequestBodyInput; +export interface InitEntityEngineProps { + params: InitEntityEngineRequestParamsInput; + body: InitEntityEngineRequestBodyInput; } export interface InstallPrepackedTimelinesProps { body: InstallPrepackedTimelinesRequestBodyInput; @@ -1422,11 +1432,11 @@ export interface SetAlertsStatusProps { export interface SetAlertTagsProps { body: SetAlertTagsRequestBodyInput; } -export interface StartEntityStoreProps { - params: StartEntityStoreRequestParamsInput; +export interface StartEntityEngineProps { + params: StartEntityEngineRequestParamsInput; } -export interface StopEntityStoreProps { - params: StopEntityStoreRequestParamsInput; +export interface StopEntityEngineProps { + params: StopEntityEngineRequestParamsInput; } export interface SuggestUserProfilesProps { query: SuggestUserProfilesRequestQueryInput; diff --git a/x-pack/test/cloud_security_posture_functional/page_objects/findings_page.ts b/x-pack/test/cloud_security_posture_functional/page_objects/findings_page.ts index 0504958005a73..8e9483ce97b33 100644 --- a/x-pack/test/cloud_security_posture_functional/page_objects/findings_page.ts +++ b/x-pack/test/cloud_security_posture_functional/page_objects/findings_page.ts @@ -113,6 +113,7 @@ export function FindingsPageProvider({ getService, getPageObjects }: FtrProvider return await retry.try(async () => { await testSubjects.click(actionTestSubject); await PageObjects.header.waitUntilLoadingHasFinished(); + const result = await testSubjects.exists('createPackagePolicy_pageTitle'); if (!result) { @@ -290,6 +291,12 @@ export function FindingsPageProvider({ getService, getPageObjects }: FtrProvider const notInstalledVulnerabilities = createNotInstalledObject('cnvm-integration-not-installed'); const notInstalledCSP = createNotInstalledObject('cloud_posture_page_package_not_installed'); + const thirdPartyIntegrationsNoVulnerabilitiesFindingsPrompt = createNotInstalledObject( + '3p-integrations-no-vulnerabilities-findings-prompt' + ); + const thirdPartyIntegrationsNoMisconfigurationsFindingsPrompt = createNotInstalledObject( + '3p-integrations-no-misconfigurations-findings-prompt' + ); const vulnerabilityDataGrid = { getVulnerabilityTable: async () => testSubjects.find('euiDataGrid'), @@ -375,6 +382,8 @@ export function FindingsPageProvider({ getService, getPageObjects }: FtrProvider latestVulnerabilitiesTable, notInstalledVulnerabilities, notInstalledCSP, + thirdPartyIntegrationsNoMisconfigurationsFindingsPrompt, + thirdPartyIntegrationsNoVulnerabilitiesFindingsPrompt, index, vulnerabilitiesIndex, waitForPluginInitialized, diff --git a/x-pack/test/cloud_security_posture_functional/pages/findings_onboarding.ts b/x-pack/test/cloud_security_posture_functional/pages/findings_onboarding.ts index c9285fdd7b775..cfd044eea9501 100644 --- a/x-pack/test/cloud_security_posture_functional/pages/findings_onboarding.ts +++ b/x-pack/test/cloud_security_posture_functional/pages/findings_onboarding.ts @@ -17,16 +17,22 @@ export default ({ getPageObjects }: FtrProviderContext) => { let findings: typeof PageObjects.findings; let notInstalledVulnerabilities: typeof findings.notInstalledVulnerabilities; let notInstalledCSP: typeof findings.notInstalledCSP; + let thirdPartyIntegrationsNoMisconfigurationsFindingsPrompt: typeof findings.thirdPartyIntegrationsNoMisconfigurationsFindingsPrompt; + let thirdPartyIntegrationsNoVulnerabilitiesFindingsPrompt: typeof findings.thirdPartyIntegrationsNoVulnerabilitiesFindingsPrompt; beforeEach(async () => { findings = PageObjects.findings; notInstalledVulnerabilities = findings.notInstalledVulnerabilities; notInstalledCSP = findings.notInstalledCSP; + thirdPartyIntegrationsNoMisconfigurationsFindingsPrompt = + findings.thirdPartyIntegrationsNoMisconfigurationsFindingsPrompt; + thirdPartyIntegrationsNoVulnerabilitiesFindingsPrompt = + findings.thirdPartyIntegrationsNoVulnerabilitiesFindingsPrompt; await findings.waitForPluginInitialized(); }); - it('clicking on the `No integrations installed` prompt action button - `install CNVM`: navigates to the CNVM integration installation page', async () => { + it('Vulnerabilities - clicking on the `No integrations installed` prompt action button - `install CNVM`: navigates to the CNVM integration installation page', async () => { await findings.navigateToLatestVulnerabilitiesPage(); await PageObjects.header.waitUntilLoadingHasFinished(); const element = await notInstalledVulnerabilities.getElement(); @@ -37,7 +43,20 @@ export default ({ getPageObjects }: FtrProviderContext) => { await PageObjects.common.waitUntilUrlIncludes('add-integration/vuln_mgmt'); }); - it('clicking on the `No integrations installed` prompt action button - `install cloud posture intergation`: navigates to the CSPM integration installation page', async () => { + it('Vulnerabilities - clicking on the `Third party integrations` prompt action button - `Wiz Integration`: navigates to the Wiz integration installation page', async () => { + await findings.navigateToLatestVulnerabilitiesPage(); + await PageObjects.header.waitUntilLoadingHasFinished(); + const element = await thirdPartyIntegrationsNoVulnerabilitiesFindingsPrompt.getElement(); + expect(element).to.not.be(null); + + await thirdPartyIntegrationsNoVulnerabilitiesFindingsPrompt.navigateToAction( + '3p-no-vulnerabilities-findings-prompt-wiz-integration-button' + ); + + await PageObjects.common.waitUntilUrlIncludes('fleet/integrations/wiz/add-integration'); + }); + + it('Misconfigurations - clicking on the `No integrations installed` prompt action button - `install cloud posture integration`: navigates to the CSPM integration installation page', async () => { await findings.navigateToMisconfigurations(); await PageObjects.header.waitUntilLoadingHasFinished(); const element = await notInstalledCSP.getElement(); @@ -48,14 +67,28 @@ export default ({ getPageObjects }: FtrProviderContext) => { await PageObjects.common.waitUntilUrlIncludes('add-integration/cspm'); }); - it('clicking on the `No integrations installed` prompt action button - `install kubernetes posture intergation`: navigates to the KSPM integration installation page', async () => { + it('Misconfigurations - clicking on the `No integrations installed` prompt action button - `install kubernetes posture integration`: navigates to the KSPM integration installation page', async () => { await findings.navigateToMisconfigurations(); await PageObjects.header.waitUntilLoadingHasFinished(); const element = await notInstalledCSP.getElement(); expect(element).to.not.be(null); await notInstalledCSP.navigateToAction('kspm-not-installed-action'); + await PageObjects.common.waitUntilUrlIncludes('add-integration/kspm'); }); + + it('Misconfigurations - clicking on the `Third party integrations` prompt action button - `Wiz Integration`: navigates to the Wiz integration installation page', async () => { + await findings.navigateToMisconfigurations(); + await PageObjects.header.waitUntilLoadingHasFinished(); + const element = await thirdPartyIntegrationsNoMisconfigurationsFindingsPrompt.getElement(); + expect(element).to.not.be(null); + + await thirdPartyIntegrationsNoMisconfigurationsFindingsPrompt.navigateToAction( + '3p-no-misconfigurations-findings-prompt-wiz-integration-button' + ); + + await PageObjects.common.waitUntilUrlIncludes('fleet/integrations/wiz/add-integration'); + }); }); }; diff --git a/x-pack/test/functional/apps/aiops/change_point_detection.ts b/x-pack/test/functional/apps/aiops/change_point_detection.ts index 22177a0a9166d..96628c143077c 100644 --- a/x-pack/test/functional/apps/aiops/change_point_detection.ts +++ b/x-pack/test/functional/apps/aiops/change_point_detection.ts @@ -16,7 +16,8 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { // aiops lives in the ML UI so we need some related services. const ml = getService('ml'); - describe('change point detection', function () { + // Failing: See https://github.com/elastic/kibana/issues/178258 + describe.skip('change point detection', function () { before(async () => { await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/ml/ecommerce'); await ml.testResources.createDataViewIfNeeded('ft_ecommerce', 'order_date'); diff --git a/x-pack/test/functional/apps/lens/group2/table.ts b/x-pack/test/functional/apps/lens/group2/table.ts index f98bb6328c3f9..7de5645b16b03 100644 --- a/x-pack/test/functional/apps/lens/group2/table.ts +++ b/x-pack/test/functional/apps/lens/group2/table.ts @@ -36,7 +36,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(await lens.getDatatableCellText(0, 0)).to.eql('169.228.188.120'); // Remove the sorting await retry.try(async () => { - await lens.changeTableSortingBy(0, 'none'); + await lens.changeTableSortingBy(0, 'descending'); await lens.waitForVisualization(); expect(await lens.isDatatableHeaderSorted(0)).to.eql(false); }); @@ -73,7 +73,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(await lens.getDatatableCellText(0, 0)).to.eql('169.228.188.120'); await retry.try(async () => { - await lens.changeTableSortingBy(4, 'none'); + await lens.changeTableSortingBy(4, 'descending'); await lens.waitForVisualization(); expect(await lens.isDatatableHeaderSorted(0)).to.eql(false); }); diff --git a/x-pack/test/functional/apps/lens/group2/table_dashboard.ts b/x-pack/test/functional/apps/lens/group2/table_dashboard.ts index ddbe8d4a1ff40..a877211030972 100644 --- a/x-pack/test/functional/apps/lens/group2/table_dashboard.ts +++ b/x-pack/test/functional/apps/lens/group2/table_dashboard.ts @@ -28,7 +28,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(await lens.getDatatableCellText(0, 0)).to.eql('169.228.188.120'); // Remove the sorting await retry.try(async () => { - await lens.changeTableSortingBy(0, 'none'); + await lens.changeTableSortingBy(0, 'ascending'); await lens.waitForVisualization(); expect(await lens.isDatatableHeaderSorted(0)).to.eql(false); }); diff --git a/x-pack/test/functional/apps/management/config.ts b/x-pack/test/functional/apps/management/config.ts index d0d07ff200281..e4a06d30f260d 100644 --- a/x-pack/test/functional/apps/management/config.ts +++ b/x-pack/test/functional/apps/management/config.ts @@ -13,5 +13,12 @@ export default async function ({ readConfigFile }: FtrConfigProviderContext) { return { ...functionalConfig.getAll(), testFiles: [require.resolve('.')], + kbnTestServer: { + ...functionalConfig.get('kbnTestServer'), + serverArgs: [ + ...functionalConfig.get('kbnTestServer.serverArgs'), + '--xpack.spaces.experimental.forceSolutionVisibility=true', + ], + }, }; } diff --git a/x-pack/test/functional/apps/management/index.ts b/x-pack/test/functional/apps/management/index.ts index 72da3e0fd739a..7f84137b81be8 100644 --- a/x-pack/test/functional/apps/management/index.ts +++ b/x-pack/test/functional/apps/management/index.ts @@ -11,5 +11,6 @@ export default function ({ loadTestFile }: FtrProviderContext) { describe('management', function () { loadTestFile(require.resolve('./create_index_pattern_wizard')); loadTestFile(require.resolve('./feature_controls')); + loadTestFile(require.resolve('./landing_page')); }); } diff --git a/x-pack/test/functional/apps/management/landing_page.ts b/x-pack/test/functional/apps/management/landing_page.ts new file mode 100644 index 0000000000000..54a360c2e674d --- /dev/null +++ b/x-pack/test/functional/apps/management/landing_page.ts @@ -0,0 +1,104 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import type { SolutionView } from '@kbn/spaces-plugin/common'; +import { FtrProviderContext } from '../../ftr_provider_context'; + +export default function ({ getService, getPageObjects }: FtrProviderContext) { + const browser = getService('browser'); + const testSubjects = getService('testSubjects'); + const spaces = getService('spaces'); + const PageObjects = getPageObjects(['settings', 'common', 'dashboard', 'timePicker', 'header']); + + describe('landing page', function describeIndexTests() { + let cleanUp: () => Promise = () => Promise.resolve(); + let spaceCreated: { id: string } = { id: '' }; + + it('should render the "classic" prompt', async function () { + await PageObjects.common.navigateToApp('management'); + await testSubjects.existOrFail('managementHome', { timeout: 3000 }); + }); + + describe('solution empty prompt', () => { + const createSpaceWithSolutionAndNavigateToManagement = async (solution: SolutionView) => { + ({ cleanUp, space: spaceCreated } = await spaces.create({ solution })); + + await PageObjects.common.navigateToApp('management', { basePath: `/s/${spaceCreated.id}` }); + + return async () => { + await cleanUp(); + cleanUp = () => Promise.resolve(); + }; + }; + + afterEach(async function afterEach() { + await cleanUp(); + }); + + /** Test that the empty prompt has a button to open the stack managment panel */ + const testStackManagmentPanel = async () => { + await testSubjects.missingOrFail('~sideNavPanel-id-stack_management', { timeout: 1000 }); + await testSubjects.click('~viewAllStackMngtPagesButton'); // open the side nav + await testSubjects.existOrFail('~sideNavPanel-id-stack_management', { timeout: 3000 }); + }; + + const testCorrectEmptyPrompt = async () => { + await testSubjects.missingOrFail('managementHome', { timeout: 3000 }); + await testSubjects.existOrFail('managementHomeSolution', { timeout: 3000 }); + }; + + it('should render the "solution" prompt when the space has a solution set', async function () { + { + const deleteSpace = await createSpaceWithSolutionAndNavigateToManagement('es'); + await testCorrectEmptyPrompt(); + await testStackManagmentPanel(); + await deleteSpace(); + } + + { + const deleteSpace = await createSpaceWithSolutionAndNavigateToManagement('oblt'); + await testCorrectEmptyPrompt(); + await testStackManagmentPanel(); + await deleteSpace(); + } + + { + const deleteSpace = await createSpaceWithSolutionAndNavigateToManagement('security'); + await testCorrectEmptyPrompt(); + await testStackManagmentPanel(); + await deleteSpace(); + } + }); + + it('should have links to pages in management', async function () { + await createSpaceWithSolutionAndNavigateToManagement('es'); + + await testSubjects.click('~managementLinkToIndices', 3000); + await testSubjects.existOrFail('~indexManagementHeaderContent', { timeout: 3000 }); + await browser.goBack(); + await testSubjects.existOrFail('managementHomeSolution', { timeout: 3000 }); + + await testSubjects.click('~managementLinkToDataViews', 3000); + await testSubjects.existOrFail('~indexPatternTable', { timeout: 3000 }); + await browser.goBack(); + await testSubjects.existOrFail('managementHomeSolution', { timeout: 3000 }); + + await testSubjects.click('~managementLinkToIngestPipelines', 3000); + const appTitle = await testSubjects.getVisibleText('appTitle'); + expect(appTitle).to.be('Ingest Pipelines'); + // Note: for some reason, browser.goBack() does not work from Ingest Pipelines + // so using navigateToApp instead; + await PageObjects.common.navigateToApp('management', { basePath: `/s/${spaceCreated.id}` }); + await testSubjects.existOrFail('managementHomeSolution', { timeout: 3000 }); + + await testSubjects.click('~managementLinkToUsers', 3000); + await testSubjects.existOrFail('~securityUsersPageHeader', { timeout: 3000 }); + }); + }); + }); +} diff --git a/x-pack/test/functional/apps/ml/data_visualizer/file_data_visualizer.ts b/x-pack/test/functional/apps/ml/data_visualizer/file_data_visualizer.ts index 3a859249fe234..9b4176d070c63 100644 --- a/x-pack/test/functional/apps/ml/data_visualizer/file_data_visualizer.ts +++ b/x-pack/test/functional/apps/ml/data_visualizer/file_data_visualizer.ts @@ -180,6 +180,42 @@ export default function ({ getService }: FtrProviderContext) { ingestedDocCount: 3, }, }, + { + suiteSuffix: 'with a file which does not generate a ingest pipeline', + filePath: require.resolve('./files_to_import/flights_small.json'), + indexName: 'user-import_4', + createIndexPattern: false, + fieldTypeFilters: [ML_JOB_FIELD_TYPES.KEYWORD], + fieldNameFilters: ['timestamp'], + expected: { + results: { + title: 'flights_small.json', + highlightedText: false, + }, + metricFields: [], + nonMetricFields: [ + { + fieldName: 'Carrier', + type: ML_JOB_FIELD_TYPES.KEYWORD, + docCountFormatted: '20 (100%)', + exampleCount: 4, + }, + { + fieldName: 'timestamp', + type: ML_JOB_FIELD_TYPES.KEYWORD, + docCountFormatted: '20 (100%)', + exampleCount: 11, + }, + ], + visibleMetricFieldsCount: 0, + totalMetricFieldsCount: 0, + populatedFieldsCount: 3, + totalFieldsCount: 25, + fieldTypeFiltersResultCount: 16, + fieldNameFiltersResultCount: 1, + ingestedDocCount: 20, + }, + }, ]; const testDataListNegative = [ diff --git a/x-pack/test/functional/apps/ml/data_visualizer/files_to_import/flights_small.json b/x-pack/test/functional/apps/ml/data_visualizer/files_to_import/flights_small.json new file mode 100644 index 0000000000000..32b5848f2d4ab --- /dev/null +++ b/x-pack/test/functional/apps/ml/data_visualizer/files_to_import/flights_small.json @@ -0,0 +1,20 @@ +{"FlightNum": "9HY9SWR", "DestCountry": "AU", "OriginWeather": "Sunny", "OriginCityName": "Frankfurt am Main", "AvgTicketPrice": 841.2656419677076, "DestWeather": "Rain", "Dest": "Sydney Kingsford Smith International Airport", "FlightDelayType": "No Delay", "OriginCountry": "DE", "dayOfWeek": 0, "DistanceKilometers": 16492.32665375846, "timestamp": "2018-01-01T00:00:00", "DestLocation": {"lat": "-33.94609833", "lon": "151.177002"}, "DestAirportID": "SYD", "Carrier": "Kibana Airlines", "Cancelled": false, "FlightTimeMin": 1030.7704158599038, "Origin": "Frankfurt am Main Airport", "OriginLocation": {"lat": "50.033333", "lon": "8.570556"}, "DestRegion": "SE-BD", "OriginAirportID": "FRA", "OriginRegion": "DE-HE", "DestCityName": "Sydney", "FlightTimeHour": 17.179506930998397, "FlightDelayMin": 0} +{"FlightNum": "X98CCZO", "DestCountry": "IT", "OriginWeather": "Clear", "OriginCityName": "Cape Town", "AvgTicketPrice": 882.9826615595518, "DestWeather": "Sunny", "Dest": "Venice Marco Polo Airport", "FlightDelayType": "No Delay", "OriginCountry": "ZA", "dayOfWeek": 0, "DistanceKilometers": 8823.40014044213, "timestamp": "2018-01-01T18:27:00", "DestLocation": {"lat": "45.505299", "lon": "12.3519"}, "DestAirportID": "VE05", "Carrier": "Logstash Airways", "Cancelled": false, "FlightTimeMin": 464.3894810759016, "Origin": "Cape Town International Airport", "OriginLocation": {"lat": "-33.96480179", "lon": "18.60169983"}, "DestRegion": "IT-34", "OriginAirportID": "CPT", "OriginRegion": "SE-BD", "DestCityName": "Venice", "FlightTimeHour": 7.73982468459836, "FlightDelayMin": 0} +{"FlightNum": "UFK2WIZ", "DestCountry": "IT", "OriginWeather": "Rain", "OriginCityName": "Venice", "AvgTicketPrice": 190.6369038508356, "DestWeather": "Cloudy", "Dest": "Venice Marco Polo Airport", "FlightDelayType": "No Delay", "OriginCountry": "IT", "dayOfWeek": 0, "DistanceKilometers": 0.0, "timestamp": "2018-01-01T17:11:14", "DestLocation": {"lat": "45.505299", "lon": "12.3519"}, "DestAirportID": "VE05", "Carrier": "Logstash Airways", "Cancelled": false, "FlightTimeMin": 0.0, "Origin": "Venice Marco Polo Airport", "OriginLocation": {"lat": "45.505299", "lon": "12.3519"}, "DestRegion": "IT-34", "OriginAirportID": "VE05", "OriginRegion": "IT-34", "DestCityName": "Venice", "FlightTimeHour": 0.0, "FlightDelayMin": 0} +{"FlightNum": "EAYQW69", "DestCountry": "IT", "OriginWeather": "Thunder & Lightning", "OriginCityName": "Naples", "AvgTicketPrice": 181.69421554118, "DestWeather": "Clear", "Dest": "Treviso-Sant'Angelo Airport", "FlightDelayType": "Weather Delay", "OriginCountry": "IT", "dayOfWeek": 0, "DistanceKilometers": 555.7377668725265, "timestamp": "2018-01-01", "DestLocation": {"lat": "45.648399", "lon": "12.1944"}, "DestAirportID": "TV01", "Carrier": "Kibana Airlines", "Cancelled": true, "FlightTimeMin": 222.74905899019436, "Origin": "Naples International Airport", "OriginLocation": {"lat": "40.886002", "lon": "14.2908"}, "DestRegion": "IT-34", "OriginAirportID": "NA01", "OriginRegion": "IT-72", "DestCityName": "Treviso", "FlightTimeHour": 3.712484316503239, "FlightDelayMin": 180} +{"FlightNum": "58U013N", "DestCountry": "CN", "OriginWeather": "Damaging Wind", "OriginCityName": "Mexico City", "AvgTicketPrice": 730.041778346198, "DestWeather": "Clear", "Dest": "Xi'an Xianyang International Airport", "FlightDelayType": "No Delay", "OriginCountry": "MX", "dayOfWeek": 0, "DistanceKilometers": 13358.24419986236, "timestamp": "2018-01-01T05:13:00", "DestLocation": {"lat": "34.447102", "lon": "108.751999"}, "DestAirportID": "XIY", "Carrier": "Kibana Airlines", "Cancelled": false, "FlightTimeMin": 785.7790705801389, "Origin": "Licenciado Benito Juarez International Airport", "OriginLocation": {"lat": "19.4363", "lon": "-99.072098"}, "DestRegion": "SE-BD", "OriginAirportID": "AICM", "OriginRegion": "MX-DIF", "DestCityName": "Xi'an", "FlightTimeHour": 13.096317843002314, "FlightDelayMin": 0} +{"FlightNum": "XEJ78I2", "DestCountry": "IT", "OriginWeather": "Rain", "OriginCityName": "Edmonton", "AvgTicketPrice": 418.1520890531832, "DestWeather": "Thunder & Lightning", "Dest": "Genoa Cristoforo Colombo Airport", "FlightDelayType": "No Delay", "OriginCountry": "CA", "dayOfWeek": 0, "DistanceKilometers": 7871.808813474433, "timestamp": "2018-01-01T01:43:03", "DestLocation": {"lat": "44.4133", "lon": "8.8375"}, "DestAirportID": "GE01", "Carrier": "JetBeats", "Cancelled": false, "FlightTimeMin": 393.5904406737217, "Origin": "Edmonton International Airport", "OriginLocation": {"lat": "53.30970001", "lon": "-113.5800018"}, "DestRegion": "IT-42", "OriginAirportID": "CYEG", "OriginRegion": "CA-AB", "DestCityName": "Genova", "FlightTimeHour": 6.5598406778953615, "FlightDelayMin": 0} +{"FlightNum": "EVARI8I", "DestCountry": "CH", "OriginWeather": "Clear", "OriginCityName": "Zurich", "AvgTicketPrice": 180.24681638061213, "DestWeather": "Hail", "Dest": "Zurich Airport", "FlightDelayType": "Security Delay", "OriginCountry": "CH", "dayOfWeek": 0, "DistanceKilometers": 0.0, "timestamp": "2018-01-01T13:49:53", "DestLocation": {"lat": "47.464699", "lon": "8.54917"}, "DestAirportID": "ZRH", "Carrier": "JetBeats", "Cancelled": false, "FlightTimeMin": 300.0, "Origin": "Zurich Airport", "OriginLocation": {"lat": "47.464699", "lon": "8.54917"}, "DestRegion": "CH-ZH", "OriginAirportID": "ZRH", "OriginRegion": "CH-ZH", "DestCityName": "Zurich", "FlightTimeHour": 5.0, "FlightDelayMin": 300} +{"FlightNum": "1IRBW25", "DestCountry": "CA", "OriginWeather": "Thunder & Lightning", "OriginCityName": "Rome", "AvgTicketPrice": 585.1843103083941, "DestWeather": "Clear", "Dest": "Ottawa Macdonald-Cartier International Airport", "FlightDelayType": "No Delay", "OriginCountry": "IT", "dayOfWeek": 0, "DistanceKilometers": 6764.367283910481, "timestamp": "2018-01-01T04:54:59", "DestLocation": {"lat": "45.32249832", "lon": "-75.66919708"}, "DestAirportID": "YOW", "Carrier": "Kibana Airlines", "Cancelled": false, "FlightTimeMin": 614.9424803554983, "Origin": "Ciampino___G. B. Pastine International Airport", "OriginLocation": {"lat": "41.7994", "lon": "12.5949"}, "DestRegion": "CA-ON", "OriginAirportID": "RM12", "OriginRegion": "IT-62", "DestCityName": "Ottawa", "FlightTimeHour": 10.249041339258305, "FlightDelayMin": 0} +{"FlightNum": "M05KE88", "DestCountry": "IN", "OriginWeather": "Heavy Fog", "OriginCityName": "Milan", "AvgTicketPrice": 960.8697358054351, "DestWeather": "Cloudy", "Dest": "Rajiv Gandhi International Airport", "FlightDelayType": "NAS Delay", "OriginCountry": "IT", "dayOfWeek": 0, "DistanceKilometers": 7044.367088850781, "timestamp": "2018-01-01T12:09:35", "DestLocation": {"lat": "17.23131752", "lon": "78.42985535"}, "DestAirportID": "HYD", "Carrier": "Kibana Airlines", "Cancelled": true, "FlightTimeMin": 602.0305907375651, "Origin": "Milano Linate Airport", "OriginLocation": {"lat": "45.445099", "lon": "9.27674"}, "DestRegion": "SE-BD", "OriginAirportID": "MI11", "OriginRegion": "IT-25", "DestCityName": "Hyderabad", "FlightTimeHour": 10.033843178959419, "FlightDelayMin": 15} +{"FlightNum": "SNI3M1Z", "DestCountry": "IT", "OriginWeather": "Cloudy", "OriginCityName": "Moscow", "AvgTicketPrice": 296.8777725965789, "DestWeather": "Rain", "Dest": "Treviso-Sant'Angelo Airport", "FlightDelayType": "No Delay", "OriginCountry": "RU", "dayOfWeek": 0, "DistanceKilometers": 2097.866595449369, "timestamp": "2018-01-01T12:09:35", "DestLocation": {"lat": "45.648399", "lon": "12.1944"}, "DestAirportID": "TV01", "Carrier": "Logstash Airways", "Cancelled": false, "FlightTimeMin": 174.82221628744742, "Origin": "Sheremetyevo International Airport", "OriginLocation": {"lat": "55.972599", "lon": "37.4146"}, "DestRegion": "IT-34", "OriginAirportID": "SVO", "OriginRegion": "RU-MOS", "DestCityName": "Treviso", "FlightTimeHour": 2.9137036047907903, "FlightDelayMin": 0} +{"FlightNum": "JQ2XXQ5", "DestCountry": "FI", "OriginWeather": "Rain", "OriginCityName": "Albuquerque", "AvgTicketPrice": 906.4379477399872, "DestWeather": "Rain", "Dest": "Helsinki Vantaa Airport", "FlightDelayType": "No Delay", "OriginCountry": "US", "dayOfWeek": 0, "DistanceKilometers": 8551.76789268935, "timestamp": "2018-01-01T22:06:14", "DestLocation": {"lat": "60.31719971", "lon": "24.9633007"}, "DestAirportID": "HEL", "Carrier": "JetBeats", "Cancelled": false, "FlightTimeMin": 503.04517015819704, "Origin": "Albuquerque International Sunport Airport", "OriginLocation": {"lat": "35.040199", "lon": "-106.609001"}, "DestRegion": "FI-ES", "OriginAirportID": "ABQ", "OriginRegion": "US-NM", "DestCityName": "Helsinki", "FlightTimeHour": 8.384086169303284, "FlightDelayMin": 0} +{"FlightNum": "V30ITD0", "DestCountry": "AT", "OriginWeather": "Rain", "OriginCityName": "Venice", "AvgTicketPrice": 704.4637710312036, "DestWeather": "Cloudy", "Dest": "Vienna International Airport", "FlightDelayType": "No Delay", "OriginCountry": "IT", "dayOfWeek": 0, "DistanceKilometers": 432.90022115088834, "timestamp": "2018-01-01T11:52:34", "DestLocation": {"lat": "48.11029816", "lon": "16.56970024"}, "DestAirportID": "VIE", "Carrier": "Logstash Airways", "Cancelled": false, "FlightTimeMin": 36.07501842924069, "Origin": "Venice Marco Polo Airport", "OriginLocation": {"lat": "45.505299", "lon": "12.3519"}, "DestRegion": "AT-9", "OriginAirportID": "VE05", "OriginRegion": "IT-34", "DestCityName": "Vienna", "FlightTimeHour": 0.6012503071540115, "FlightDelayMin": 0} +{"FlightNum": "P0WMFH7", "DestCountry": "CN", "OriginWeather": "Heavy Fog", "OriginCityName": "Mexico City", "AvgTicketPrice": 922.499077027416, "DestWeather": "Clear", "Dest": "Shanghai Pudong International Airport", "FlightDelayType": "No Delay", "OriginCountry": "MX", "dayOfWeek": 0, "DistanceKilometers": 12915.599427519877, "timestamp": "2018-01-01T02:13:46", "DestLocation": {"lat": "31.14340019", "lon": "121.8050003"}, "DestAirportID": "PVG", "Carrier": "Logstash Airways", "Cancelled": true, "FlightTimeMin": 679.7683909220988, "Origin": "Licenciado Benito Juarez International Airport", "OriginLocation": {"lat": "19.4363", "lon": "-99.072098"}, "DestRegion": "SE-BD", "OriginAirportID": "AICM", "OriginRegion": "MX-DIF", "DestCityName": "Shanghai", "FlightTimeHour": 11.32947318203498, "FlightDelayMin": 0} +{"FlightNum": "VT9O2KD", "DestCountry": "CA", "OriginWeather": "Rain", "OriginCityName": "Naples", "AvgTicketPrice": 374.9592762864519, "DestWeather": "Rain", "Dest": "Ottawa Macdonald-Cartier International Airport", "FlightDelayType": "No Delay", "OriginCountry": "IT", "dayOfWeek": 0, "DistanceKilometers": 6938.783925856956, "timestamp": "2018-01-01T14:21:13", "DestLocation": {"lat": "45.32249832", "lon": "-75.66919708"}, "DestAirportID": "YOW", "Carrier": "Logstash Airways", "Cancelled": false, "FlightTimeMin": 330.41828218366453, "Origin": "Naples International Airport", "OriginLocation": {"lat": "40.886002", "lon": "14.2908"}, "DestRegion": "CA-ON", "OriginAirportID": "NA01", "OriginRegion": "IT-72", "DestCityName": "Ottawa", "FlightTimeHour": 5.506971369727742, "FlightDelayMin": 0} +{"FlightNum": "NRHSVG8", "DestCountry": "PR", "OriginWeather": "Cloudy", "OriginCityName": "Rome", "AvgTicketPrice": 552.9173708459598, "DestWeather": "Clear", "Dest": "Luis Munoz Marin International Airport", "FlightDelayType": "No Delay", "OriginCountry": "IT", "dayOfWeek": 0, "DistanceKilometers": 7735.755582005642, "timestamp": "2018-01-01T17:42:53", "DestLocation": {"lat": "18.43939972", "lon": "-66.00180054"}, "DestAirportID": "SJU", "Carrier": "Logstash Airways", "Cancelled": false, "FlightTimeMin": 407.1450306318759, "Origin": "Ciampino___G. B. Pastine International Airport", "OriginLocation": {"lat": "41.7994", "lon": "12.5949"}, "DestRegion": "PR-U-A", "OriginAirportID": "RM12", "OriginRegion": "IT-62", "DestCityName": "San Juan", "FlightTimeHour": 6.7857505105312645, "FlightDelayMin": 0} +{"FlightNum": "YIPS2BZ", "DestCountry": "DE", "OriginWeather": "Thunder & Lightning", "OriginCityName": "Chengdu", "AvgTicketPrice": 566.4875569256166, "DestWeather": "Sunny", "Dest": "Cologne Bonn Airport", "FlightDelayType": "No Delay", "OriginCountry": "CN", "dayOfWeek": 0, "DistanceKilometers": 7880.551894165264, "timestamp": "2018-01-01T19:55:32", "DestLocation": {"lat": "50.86589813", "lon": "7.142739773"}, "DestAirportID": "CGN", "Carrier": "Kibana Airlines", "Cancelled": true, "FlightTimeMin": 656.7126578471053, "Origin": "Chengdu Shuangliu International Airport", "OriginLocation": {"lat": "30.57850075", "lon": "103.9469986"}, "DestRegion": "DE-NW", "OriginAirportID": "CTU", "OriginRegion": "SE-BD", "DestCityName": "Cologne", "FlightTimeHour": 10.945210964118422, "FlightDelayMin": 0} +{"FlightNum": "C7IBZ42", "DestCountry": "IT", "OriginWeather": "Thunder & Lightning", "OriginCityName": "Mexico City", "AvgTicketPrice": 989.9527866266118, "DestWeather": "Damaging Wind", "Dest": "Venice Marco Polo Airport", "FlightDelayType": "No Delay", "OriginCountry": "MX", "dayOfWeek": 0, "DistanceKilometers": 10049.394341914194, "timestamp": "2018-01-01T07:49:27", "DestLocation": {"lat": "45.505299", "lon": "12.3519"}, "DestAirportID": "VE05", "Carrier": "Logstash Airways", "Cancelled": true, "FlightTimeMin": 773.0303339933996, "Origin": "Licenciado Benito Juarez International Airport", "OriginLocation": {"lat": "19.4363", "lon": "-99.072098"}, "DestRegion": "IT-34", "OriginAirportID": "AICM", "OriginRegion": "MX-DIF", "DestCityName": "Venice", "FlightTimeHour": 12.883838899889993, "FlightDelayMin": 0} +{"FlightNum": "7TTZM4I", "DestCountry": "AR", "OriginWeather": "Rain", "OriginCityName": "Cleveland", "AvgTicketPrice": 569.6132552035547, "DestWeather": "Cloudy", "Dest": "Ministro Pistarini International Airport", "FlightDelayType": "NAS Delay", "OriginCountry": "US", "dayOfWeek": 0, "DistanceKilometers": 8771.31996172178, "timestamp": "2018-01-01T01:30:47", "DestLocation": {"lat": "-34.8222", "lon": "-58.5358"}, "DestAirportID": "EZE", "Carrier": "ES-Air", "Cancelled": false, "FlightTimeMin": 704.7169201324446, "Origin": "Cleveland Hopkins International Airport", "OriginLocation": {"lat": "41.4117012", "lon": "-81.84980011"}, "DestRegion": "SE-BD", "OriginAirportID": "CLE", "OriginRegion": "US-OH", "DestCityName": "Buenos Aires", "FlightTimeHour": 11.745282002207409, "FlightDelayMin": 30} +{"FlightNum": "CSW89S3", "DestCountry": "CN", "OriginWeather": "Hail", "OriginCityName": "Olenegorsk", "AvgTicketPrice": 277.4297073844173, "DestWeather": "Clear", "Dest": "Shanghai Pudong International Airport", "FlightDelayType": "No Delay", "OriginCountry": "RU", "dayOfWeek": 0, "DistanceKilometers": 6763.2019332738655, "timestamp": "2018-01-01T07:58:17", "DestLocation": {"lat": "31.14340019", "lon": "121.8050003"}, "DestAirportID": "PVG", "Carrier": "ES-Air", "Cancelled": false, "FlightTimeMin": 355.95799648809816, "Origin": "Olenya Air Base", "OriginLocation": {"lat": "68.15180206", "lon": "33.46390152"}, "DestRegion": "SE-BD", "OriginAirportID": "XLMO", "OriginRegion": "RU-MUR", "DestCityName": "Shanghai", "FlightTimeHour": 5.932633274801636, "FlightDelayMin": 0} +{"FlightNum": "RBFKZBX", "DestCountry": "IN", "OriginWeather": "Cloudy", "OriginCityName": "Casper", "AvgTicketPrice": 772.1008456460212, "DestWeather": "Clear", "Dest": "Indira Gandhi International Airport", "FlightDelayType": "Late Aircraft Delay", "OriginCountry": "US", "dayOfWeek": 0, "DistanceKilometers": 12081.834801603853, "timestamp": "2018-01-01T00:02:06", "DestLocation": {"lat": "28.5665", "lon": "77.103104"}, "DestAirportID": "DEL", "Carrier": "JetBeats", "Cancelled": false, "FlightTimeMin": 875.1146751002408, "Origin": "Casper-Natrona County International Airport", "OriginLocation": {"lat": "42.90800095", "lon": "-106.4639969"}, "DestRegion": "SE-BD", "OriginAirportID": "CPR", "OriginRegion": "US-WY", "DestCityName": "New Delhi", "FlightTimeHour": 14.585244585004013, "FlightDelayMin": 120} diff --git a/x-pack/test/functional/apps/spaces/create_edit_space.ts b/x-pack/test/functional/apps/spaces/create_edit_space.ts deleted file mode 100644 index cfffc752cca0c..0000000000000 --- a/x-pack/test/functional/apps/spaces/create_edit_space.ts +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { FtrProviderContext } from '../../ftr_provider_context'; - -export default function ({ getPageObjects, getService }: FtrProviderContext) { - const kibanaServer = getService('kibanaServer'); - const PageObjects = getPageObjects(['common', 'settings', 'security', 'spaceSelector']); - const testSubjects = getService('testSubjects'); - - describe('edit space', () => { - before(async () => { - await kibanaServer.savedObjects.cleanStandardList(); - }); - - after(async () => { - await kibanaServer.savedObjects.cleanStandardList(); - }); - - describe('solution view', () => { - it('does not show solution view panel', async () => { - await PageObjects.common.navigateToUrl('management', 'kibana/spaces/edit/default', { - shouldUseHashForSubUrl: false, - }); - - await testSubjects.existOrFail('spaces-edit-page'); - await testSubjects.existOrFail('spaces-edit-page > generalPanel'); - await testSubjects.missingOrFail('spaces-edit-page > navigationPanel'); - }); - }); - }); -} diff --git a/x-pack/test/functional/apps/spaces/create_edit_space/acme_logo.png b/x-pack/test/functional/apps/spaces/create_edit_space/acme_logo.png new file mode 100644 index 0000000000000..8e8ed078b8b61 Binary files /dev/null and b/x-pack/test/functional/apps/spaces/create_edit_space/acme_logo.png differ diff --git a/x-pack/test/functional/apps/spaces/create_edit_space/create_edit_space.ts b/x-pack/test/functional/apps/spaces/create_edit_space/create_edit_space.ts new file mode 100644 index 0000000000000..4b100595a38c6 --- /dev/null +++ b/x-pack/test/functional/apps/spaces/create_edit_space/create_edit_space.ts @@ -0,0 +1,117 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { faker } from '@faker-js/faker'; +import { FtrProviderContext } from '../../../ftr_provider_context'; + +export default function ({ getPageObjects, getService }: FtrProviderContext) { + const kibanaServer = getService('kibanaServer'); + const PageObjects = getPageObjects(['common', 'settings', 'security', 'spaceSelector']); + const testSubjects = getService('testSubjects'); + const spacesServices = getService('spaces'); + const log = getService('log'); + + describe('Spaces Management: Create and Edit', () => { + before(async () => { + await kibanaServer.savedObjects.cleanStandardList(); + }); + + after(async () => { + await kibanaServer.savedObjects.cleanStandardList(); + }); + + describe('create space', () => { + const spaceName = `${faker.word.adjective()} space`; + const spaceId = spaceName.replace(' ', '-'); + + before(async () => { + await PageObjects.common.navigateToApp('spacesManagement'); + await testSubjects.existOrFail('spaces-grid-page'); + + await PageObjects.spaceSelector.clickCreateSpace(); + await testSubjects.existOrFail('spaces-create-page'); + }); + + after(async () => { + await spacesServices.delete(spaceId); + }); + + it('create a space with a given name', async () => { + await PageObjects.spaceSelector.addSpaceName(spaceName); + await PageObjects.spaceSelector.clickSaveSpaceCreation(); + await testSubjects.existOrFail(`spacesListTableRow-${spaceId}`); + }); + }); + + describe('edit space', () => { + const spaceName = `${faker.word.adjective()} space`; + const spaceId = spaceName.replace(' ', '-'); + + before(async () => { + log.debug(`Creating space named "${spaceName}" with ID "${spaceId}"`); + + await spacesServices.create({ + id: spaceId, + name: spaceName, + disabledFeatures: [], + color: '#AABBCC', + }); + + await PageObjects.common.navigateToApp('spacesManagement'); + await testSubjects.existOrFail('spaces-grid-page'); + }); + + after(async () => { + await spacesServices.delete(spaceId); + }); + + it('allows changing space initials', async () => { + const spaceInitials = faker.string.alpha(2); + + await testSubjects.click(`${spaceId}-hyperlink`); + await testSubjects.existOrFail('spaces-view-page > generalPanel'); + + await testSubjects.setValue('spaceLetterInitial', spaceInitials); + await testSubjects.click('save-space-button'); + + await testSubjects.existOrFail('spaces-grid-page'); // wait for grid page to reload + await testSubjects.existOrFail(`space-avatar-${spaceId}`); + expect(await testSubjects.getVisibleText(`space-avatar-${spaceId}`)).to.be(spaceInitials); + }); + + it('allows changing space avatar', async () => { + await testSubjects.click(`${spaceId}-hyperlink`); + await testSubjects.existOrFail('spaces-view-page > generalPanel'); + + await testSubjects.click('image'); + + const avatarPath = require.resolve('./acme_logo.png'); + log.debug(`Importing file '${avatarPath}' ...`); + await PageObjects.common.setFileInputPath(avatarPath); + + await testSubjects.click('save-space-button'); + await testSubjects.existOrFail('spaces-grid-page'); // wait for grid page to reload + await testSubjects.existOrFail(`space-avatar-${spaceId}`); + const avatarEl = await testSubjects.find(`space-avatar-${spaceId}`); + expect(await avatarEl.getAttribute('role')).to.be('img'); // expect that the space uses image avatar + }); + }); + + describe('solution view', () => { + it('does not show solution view panel', async () => { + await PageObjects.common.navigateToUrl('management', 'kibana/spaces/edit/default', { + shouldUseHashForSubUrl: false, + }); + + await testSubjects.existOrFail('spaces-view-page'); + await testSubjects.existOrFail('spaces-view-page > generalPanel'); + await testSubjects.missingOrFail('spaces-view-page > navigationPanel'); // xpack.spaces.allowSolutionVisibility is not enabled, so the solution view picker should not appear + }); + }); + }); +} diff --git a/x-pack/test/functional/apps/spaces/create_edit_space/index.ts b/x-pack/test/functional/apps/spaces/create_edit_space/index.ts new file mode 100644 index 0000000000000..dc96179e1cb7c --- /dev/null +++ b/x-pack/test/functional/apps/spaces/create_edit_space/index.ts @@ -0,0 +1,14 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FtrProviderContext } from '../../../ftr_provider_context'; + +export default function spacesApp({ loadTestFile }: FtrProviderContext) { + describe('Spaces app', function spacesAppTestSuite() { + loadTestFile(require.resolve('./create_edit_space')); + }); +} diff --git a/x-pack/test/functional/apps/spaces/feature_controls/spaces_security.ts b/x-pack/test/functional/apps/spaces/feature_controls/spaces_security.ts index be03af7c896a0..66d5eb280d613 100644 --- a/x-pack/test/functional/apps/spaces/feature_controls/spaces_security.ts +++ b/x-pack/test/functional/apps/spaces/feature_controls/spaces_security.ts @@ -92,7 +92,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { shouldUseHashForSubUrl: false, }); - await testSubjects.existOrFail('spaces-edit-page'); + await testSubjects.existOrFail('spaces-create-page'); }); it(`can navigate to edit space page`, async () => { @@ -102,7 +102,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { shouldUseHashForSubUrl: false, }); - await testSubjects.existOrFail('spaces-edit-page'); + await testSubjects.existOrFail('spaces-view-page'); }); }); diff --git a/x-pack/test/functional/apps/spaces/solution_view_flag_enabled/create_edit_space.ts b/x-pack/test/functional/apps/spaces/solution_view_flag_enabled/create_edit_space.ts index 3f00dda32c878..f6f69ada3c0c1 100644 --- a/x-pack/test/functional/apps/spaces/solution_view_flag_enabled/create_edit_space.ts +++ b/x-pack/test/functional/apps/spaces/solution_view_flag_enabled/create_edit_space.ts @@ -28,9 +28,9 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { shouldUseHashForSubUrl: false, }); - await testSubjects.existOrFail('spaces-edit-page'); - await testSubjects.existOrFail('spaces-edit-page > generalPanel'); - await testSubjects.existOrFail('spaces-edit-page > navigationPanel'); + await testSubjects.existOrFail('spaces-view-page'); + await testSubjects.existOrFail('spaces-view-page > generalPanel'); + await testSubjects.existOrFail('spaces-view-page > navigationPanel'); }); it('changes the space solution and updates the side navigation', async () => { @@ -58,9 +58,9 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { shouldUseHashForSubUrl: false, }); - await testSubjects.missingOrFail('userImpactWarning'); + await testSubjects.missingOrFail('space-edit-page-user-impact-warning'); await PageObjects.spaceSelector.changeSolutionView('classic'); - await testSubjects.existOrFail('userImpactWarning'); // Warn that the change will impact other users + await testSubjects.existOrFail('space-edit-page-user-impact-warning'); // Warn that the change will impact other users await PageObjects.spaceSelector.clickSaveSpaceCreation(); await PageObjects.spaceSelector.confirmModal(); diff --git a/x-pack/test/functional/apps/spaces/spaces_grid.ts b/x-pack/test/functional/apps/spaces/spaces_grid.ts index 62363802db98a..bcb04f45b87cb 100644 --- a/x-pack/test/functional/apps/spaces/spaces_grid.ts +++ b/x-pack/test/functional/apps/spaces/spaces_grid.ts @@ -5,43 +5,120 @@ * 2.0. */ -import { FtrProviderContext } from '../../ftr_provider_context'; +import crypto from 'crypto'; +import expect from '@kbn/expect'; +import { type FtrProviderContext } from '../../ftr_provider_context'; -export default function enterSpaceFunctionalTests({ +export default function spaceDetailsViewFunctionalTests({ getService, getPageObjects, }: FtrProviderContext) { - const kibanaServer = getService('kibanaServer'); - const PageObjects = getPageObjects(['security', 'spaceSelector', 'common']); + const PageObjects = getPageObjects(['common', 'settings', 'spaceSelector']); const spacesService = getService('spaces'); const testSubjects = getService('testSubjects'); + const retry = getService('retry'); - const anotherSpace = { - id: 'space2', - name: 'space2', - disabledFeatures: [], - }; + const testSpacesIds = [ + 'odyssey', + // this number is chosen intentionally to not exceed the default 10 items displayed by spaces table + ...Array.from(new Array(5)).map((_) => `space-${crypto.randomUUID()}`), + ]; - describe('Spaces grid', function () { + describe('Spaces Management: List of Spaces', function () { before(async () => { - await spacesService.create(anotherSpace); + for (const testSpaceId of testSpacesIds) { + await spacesService.create({ id: testSpaceId, name: `${testSpaceId}-name` }); + } + + await PageObjects.settings.navigateTo(); + await testSubjects.existOrFail('spaces'); + }); + + beforeEach(async () => { + await PageObjects.common.navigateToUrl('management', 'kibana/spaces', { + ensureCurrentUrl: false, + shouldLoginIfPrompted: false, + shouldUseHashForSubUrl: false, + }); - await PageObjects.common.navigateToApp('spacesManagement'); await testSubjects.existOrFail('spaces-grid-page'); }); after(async () => { - await spacesService.delete('another-space'); - await kibanaServer.savedObjects.cleanStandardList(); + for (const testSpaceId of testSpacesIds) { + await spacesService.delete(testSpaceId); + } + }); + + it('should list all the spaces populated', async () => { + const renderedSpaceRow = await testSubjects.findAll('*spacesListTableRow-'); + + expect(renderedSpaceRow.length).to.equal(testSpacesIds.length + 1); }); - it('can switch to a space from the row in the grid', async () => { - // use the "current" badge confirm that Default is the current space - await testSubjects.existOrFail('spacesListCurrentBadge-default'); - // click the switch button of "another space" - await PageObjects.spaceSelector.clickSwitchSpaceButton('space2'); - // use the "current" badge confirm that "Another Space" is now the current space - await testSubjects.existOrFail('spacesListCurrentBadge-space2'); + it('does not display the space switcher button when viewing the details page for the current selected space', async () => { + const currentSpaceTitle = ( + await PageObjects.spaceSelector.currentSelectedSpaceTitle() + )?.toLowerCase(); + + expect(currentSpaceTitle).to.equal('default'); + + await testSubjects.click('default-hyperlink'); + await testSubjects.existOrFail('space-view-page-details-header'); + expect( + (await testSubjects.getVisibleText('space-view-page-details-header')) + .toLowerCase() + .includes('default') + ).to.be(true); + await testSubjects.missingOrFail('spaces-view-page-switcher-button'); + }); + + it("displays the space switcher button when viewing the details page of the space that's not the current selected one", async () => { + const testSpaceId = testSpacesIds[Math.floor(Math.random() * testSpacesIds.length)]; + + const currentSpaceTitle = ( + await PageObjects.spaceSelector.currentSelectedSpaceTitle() + )?.toLowerCase(); + + expect(currentSpaceTitle).to.equal('default'); + + await testSubjects.click(`${testSpaceId}-hyperlink`); + await testSubjects.existOrFail('space-view-page-details-header'); + expect( + (await testSubjects.getVisibleText('space-view-page-details-header')) + .toLowerCase() + .includes(`${testSpaceId}-name`) + ).to.be(true); + await testSubjects.existOrFail('spaces-view-page-switcher-button'); + }); + + it('switches to a new space using the space switcher button', async () => { + const currentSpaceTitle = ( + await PageObjects.spaceSelector.currentSelectedSpaceTitle() + )?.toLowerCase(); + + expect(currentSpaceTitle).to.equal('default'); + + const testSpaceId = testSpacesIds[Math.floor(Math.random() * testSpacesIds.length)]; + + await testSubjects.click(`${testSpaceId}-hyperlink`); + await testSubjects.click('spaces-view-page-switcher-button'); + + await retry.try(async () => { + const detailsTitle = ( + await testSubjects.getVisibleText('space-view-page-details-header') + ).toLowerCase(); + + const currentSwitchSpaceTitle = ( + await PageObjects.spaceSelector.currentSelectedSpaceTitle() + )?.toLocaleLowerCase(); + + return ( + currentSwitchSpaceTitle && + currentSwitchSpaceTitle === `${testSpaceId}-name` && + detailsTitle.includes(currentSwitchSpaceTitle) + ); + }); }); }); } diff --git a/x-pack/test/functional/page_objects/lens_page.ts b/x-pack/test/functional/page_objects/lens_page.ts index 4b2ece9a7ca92..310f52f7e651b 100644 --- a/x-pack/test/functional/page_objects/lens_page.ts +++ b/x-pack/test/functional/page_objects/lens_page.ts @@ -1255,21 +1255,14 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont ); }, - async changeTableSortingBy(colIndex = 0, direction: 'none' | 'ascending' | 'descending') { + async changeTableSortingBy(colIndex = 0, direction: 'ascending' | 'descending') { const el = await this.getDatatableHeader(colIndex); await el.moveMouseTo({ xOffset: 0, yOffset: -16 }); // Prevent the first data row's cell actions from overlapping/intercepting the header click const popoverToggle = await el.findByClassName('euiDataGridHeaderCell__button'); await popoverToggle.click(); - let buttonEl; - if (direction !== 'none') { - buttonEl = await find.byCssSelector( - `[data-test-subj^="dataGridHeaderCellActionGroup"] [title="Sort ${direction}"]` - ); - } else { - buttonEl = await find.byCssSelector( - `[data-test-subj^="dataGridHeaderCellActionGroup"] li[class*="selected"] [title^="Sort"]` - ); - } + const buttonEl = await find.byCssSelector( + `[data-test-subj^="dataGridHeaderCellActionGroup"] [title="Sort ${direction}"]` + ); return buttonEl.click(); }, diff --git a/x-pack/test/functional/page_objects/space_selector_page.ts b/x-pack/test/functional/page_objects/space_selector_page.ts index 5dce6ed2d7c94..e5afbd78fe767 100644 --- a/x-pack/test/functional/page_objects/space_selector_page.ts +++ b/x-pack/test/functional/page_objects/space_selector_page.ts @@ -288,4 +288,9 @@ export class SpaceSelectorPageObject extends FtrService { ); expect(await msgElem.getVisibleText()).to.be('no spaces found'); } + + async currentSelectedSpaceTitle() { + const spacesNavSelector = await this.testSubjects.find('spacesNavSelector'); + return spacesNavSelector.getAttribute('title'); + } } diff --git a/x-pack/test/functional/services/ml/common_data_grid.ts b/x-pack/test/functional/services/ml/common_data_grid.ts index 9950d6b8f7205..a920b427e9adc 100644 --- a/x-pack/test/functional/services/ml/common_data_grid.ts +++ b/x-pack/test/functional/services/ml/common_data_grid.ts @@ -37,16 +37,14 @@ export function MachineLearningCommonDataGridProvider({ getService }: FtrProvide // Get the content of each cell and divide them up into rows. // Virtualized cells outside the view area are not present in the DOM until they // are scroilled into view, so we're limiting the number of parsed columns. - // To determine row and column of a cell, we're utilizing the screen reader - // help text, which enumerates the rows and columns 1-based. + // To determine row and column of a cell, we're utilizing EUI's data attributes const cells = $.findTestSubjects('dataGridRowCell') .toArray() .map((cell) => { const cellText = $(cell).text(); - const pattern = /^(.*)-(?:.*), column (\d+), row (\d+)$/; - const matches = cellText.match(pattern); - expect(matches).to.not.eql(null, `Cell text should match pattern '${pattern}'`); - return { text: matches![1], column: Number(matches![2]), row: Number(matches![3]) }; + const columnData = $(cell).attr('data-gridcell-column-index'); + const rowData = $(cell).attr('data-gridcell-row-index'); + return { text: cellText, column: Number(columnData) + 1, row: Number(rowData) }; }) .filter((cell) => maxColumnsToParse !== undefined ? cell?.column <= maxColumnsToParse : false @@ -150,9 +148,9 @@ export function MachineLearningCommonDataGridProvider({ getService }: FtrProvide async assertColumnSelectorsSwitchState(expectedState: boolean) { await retry.tryForTime(5 * 1000, async () => { - const visibilityToggles = await ( - await find.byClassName('euiDataGrid__controlScroll') - ).findAllByCssSelector('[role="switch"]'); + const visibilityToggles = await find.allByCssSelector( + '.euiDataGridColumnSelector__item [role="switch"]' + ); await asyncForEachWithLimit(visibilityToggles, 1, async (toggle) => { const checked = (await toggle.getAttribute('aria-checked')) === 'true'; diff --git a/x-pack/test/security_solution_api_integration/test_suites/edr_workflows/resolver/trial_license_complete_tier/tree.ts b/x-pack/test/security_solution_api_integration/test_suites/edr_workflows/resolver/trial_license_complete_tier/tree.ts index 8d7aa70f679bd..8ecfab9335a79 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/edr_workflows/resolver/trial_license_complete_tier/tree.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/edr_workflows/resolver/trial_license_complete_tier/tree.ts @@ -467,11 +467,11 @@ export default function ({ getService }: FtrProviderContext) { .expect(200); verifyTree({ expectations: [ - { origin: tree.origin.id, nodeExpectations: { descendantLevels: 1, descendants: 1 } }, + { origin: tree.origin.id, nodeExpectations: { descendantLevels: 2, descendants: 2 } }, // the origin's grandparent should only have the origin's parent as a descendant { origin: originGrandparent, - nodeExpectations: { descendantLevels: 1, descendants: 1 }, + nodeExpectations: { descendantLevels: 0, descendants: 0 }, }, ], response: body, diff --git a/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/entity_store/trial_license_complete_tier/engine.ts b/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/entity_store/trial_license_complete_tier/engine.ts new file mode 100644 index 0000000000000..8d57ff428e507 --- /dev/null +++ b/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/entity_store/trial_license_complete_tier/engine.ts @@ -0,0 +1,242 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { EntityType } from '@kbn/security-solution-plugin/common/api/entity_analytics/entity_store/common.gen'; +import { FtrProviderContext } from '../../../../ftr_provider_context'; +import { cleanEngines } from '../../utils'; +export default ({ getService }: FtrProviderContext) => { + const api = getService('securitySolutionApi'); + const es = getService('es'); + + const initEntityEngineForEntityType = async (entityType: EntityType) => { + return api + .initEntityEngine({ + params: { entityType }, + body: {}, + }) + .expect(200); + }; + + const expectTransformExists = async (transformId: string) => { + return expectTransformStatus(transformId, true); + }; + + const expectTransformNotFound = async (transformId: string, attempts: number = 5) => { + return expectTransformStatus(transformId, false); + }; + + const expectTransformStatus = async ( + transformId: string, + exists: boolean, + attempts: number = 5, + delayMs: number = 2000 + ) => { + let currentAttempt = 1; + while (currentAttempt <= attempts) { + try { + await es.transform.getTransform({ transform_id: transformId }); + if (!exists) { + throw new Error(`Expected transform ${transformId} to not exist, but it does`); + } + return; // Transform exists, exit the loop + } catch (e) { + if (currentAttempt === attempts) { + if (exists) { + throw new Error(`Expected transform ${transformId} to exist, but it does not: ${e}`); + } else { + return; // Transform does not exist, exit the loop + } + } + await new Promise((resolve) => setTimeout(resolve, delayMs)); + currentAttempt++; + } + } + }; + + const expectTransformsExist = async (transformIds: string[]) => + Promise.all(transformIds.map((id) => expectTransformExists(id))); + + describe('@ess @serverless @skipInServerlessMKI Entity Store Engine APIs', () => { + before(async () => { + await cleanEngines({ getService }); + }); + + describe('init', () => { + afterEach(async () => { + await cleanEngines({ getService }); + }); + + it('should have installed the expected user resources', async () => { + await initEntityEngineForEntityType('user'); + + const expectedTransforms = [ + 'entities-v1-history-ea_default_user_entity_store', + 'entities-v1-latest-ea_default_user_entity_store', + ]; + + await expectTransformsExist(expectedTransforms); + }); + + it('should have installed the expected host resources', async () => { + await initEntityEngineForEntityType('host'); + + const expectedTransforms = [ + 'entities-v1-history-ea_default_host_entity_store', + 'entities-v1-latest-ea_default_host_entity_store', + ]; + + await expectTransformsExist(expectedTransforms); + }); + }); + + describe('get and list', () => { + before(async () => { + await Promise.all([ + initEntityEngineForEntityType('host'), + initEntityEngineForEntityType('user'), + ]); + }); + + after(async () => { + await cleanEngines({ getService }); + }); + + describe('get', () => { + it('should return the host entity engine', async () => { + const getResponse = await api + .getEntityEngine({ + params: { entityType: 'host' }, + }) + .expect(200); + + expect(getResponse.body).to.eql({ + status: 'started', + type: 'host', + indexPattern: + 'apm-*-transaction*,auditbeat-*,endgame-*,filebeat-*,logs-*,packetbeat-*,traces-apm*,winlogbeat-*,-*elastic-cloud-logs-*', + filter: '', + }); + }); + + it('should return the user entity engine', async () => { + const getResponse = await api + .getEntityEngine({ + params: { entityType: 'user' }, + }) + .expect(200); + + expect(getResponse.body).to.eql({ + status: 'started', + type: 'user', + indexPattern: + 'apm-*-transaction*,auditbeat-*,endgame-*,filebeat-*,logs-*,packetbeat-*,traces-apm*,winlogbeat-*,-*elastic-cloud-logs-*', + filter: '', + }); + }); + }); + + describe('list', () => { + it('should return the list of entity engines', async () => { + const { body } = await api.listEntityEngines().expect(200); + + // @ts-expect-error body is any + const sortedEngines = body.engines.sort((a, b) => a.type.localeCompare(b.type)); + + expect(sortedEngines).to.eql([ + { + status: 'started', + type: 'host', + indexPattern: + 'apm-*-transaction*,auditbeat-*,endgame-*,filebeat-*,logs-*,packetbeat-*,traces-apm*,winlogbeat-*,-*elastic-cloud-logs-*', + filter: '', + }, + { + status: 'started', + type: 'user', + indexPattern: + 'apm-*-transaction*,auditbeat-*,endgame-*,filebeat-*,logs-*,packetbeat-*,traces-apm*,winlogbeat-*,-*elastic-cloud-logs-*', + filter: '', + }, + ]); + }); + }); + }); + + describe('start and stop', () => { + before(async () => { + await initEntityEngineForEntityType('host'); + }); + + after(async () => { + await cleanEngines({ getService }); + }); + + it('should stop the entity engine', async () => { + await api + .stopEntityEngine({ + params: { entityType: 'host' }, + }) + .expect(200); + + const { body } = await api + .getEntityEngine({ + params: { entityType: 'host' }, + }) + .expect(200); + + expect(body.status).to.eql('stopped'); + }); + + it('should start the entity engine', async () => { + await api + .startEntityEngine({ + params: { entityType: 'host' }, + }) + .expect(200); + + const { body } = await api + .getEntityEngine({ + params: { entityType: 'host' }, + }) + .expect(200); + + expect(body.status).to.eql('started'); + }); + }); + + describe('delete', () => { + it('should delete the host entity engine', async () => { + await initEntityEngineForEntityType('host'); + + await api + .deleteEntityEngine({ + params: { entityType: 'host' }, + query: { data: true }, + }) + .expect(200); + + await expectTransformNotFound('entities-v1-history-ea_host_entity_store'); + await expectTransformNotFound('entities-v1-latest-ea_host_entity_store'); + }); + + it('should delete the user entity engine', async () => { + await initEntityEngineForEntityType('user'); + + await api + .deleteEntityEngine({ + params: { entityType: 'user' }, + query: { data: true }, + }) + .expect(200); + + await expectTransformNotFound('entities-v1-history-ea_user_entity_store'); + await expectTransformNotFound('entities-v1-latest-ea_user_entity_store'); + }); + }); + }); +}; diff --git a/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/entity_store/trial_license_complete_tier/index.ts b/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/entity_store/trial_license_complete_tier/index.ts index a043ea866d5eb..6e730b465350a 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/entity_store/trial_license_complete_tier/index.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/entity_store/trial_license_complete_tier/index.ts @@ -10,5 +10,6 @@ import { FtrProviderContext } from '../../../../ftr_provider_context'; export default function ({ loadTestFile }: FtrProviderContext) { describe('Entity Analytics - Entity Store', function () { loadTestFile(require.resolve('./entities_list')); + loadTestFile(require.resolve('./engine')); }); } diff --git a/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/asset_criticality.ts b/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/asset_criticality.ts index 0dede58b33feb..900dabeaf04aa 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/asset_criticality.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/asset_criticality.ts @@ -461,7 +461,9 @@ export default ({ getService }: FtrProviderContext) => { es, }); - expect(doc).to.eql(undefined); + const deletedDoc = { ...assetCriticality, criticality_level: 'deleted' }; + + expect(_.omit(doc, '@timestamp')).to.eql(deletedDoc); }); it('should not return 404 if the asset criticality does not exist', async () => { diff --git a/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/index.ts b/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/index.ts index 4879cce14f3a6..2aa04a898a449 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/index.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/index.ts @@ -10,6 +10,7 @@ import { FtrProviderContext } from '../../../../ftr_provider_context'; export default function ({ loadTestFile }: FtrProviderContext) { describe('Entity Analytics - Risk Engine', function () { loadTestFile(require.resolve('./init_and_status_apis')); + loadTestFile(require.resolve('./risk_engine_cleanup_api')); loadTestFile(require.resolve('./risk_score_preview')); loadTestFile(require.resolve('./risk_scoring_task/task_execution')); loadTestFile(require.resolve('./risk_scoring_task/task_execution_nondefault_spaces')); diff --git a/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/init_and_status_apis.ts b/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/init_and_status_apis.ts index 399a2fdb6de72..ef9785793324f 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/init_and_status_apis.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/init_and_status_apis.ts @@ -347,7 +347,6 @@ export default ({ getService }: FtrProviderContext) => { expect(status1.body).to.eql({ risk_engine_status: 'NOT_INSTALLED', legacy_risk_engine_status: 'NOT_INSTALLED', - is_max_amount_of_risk_engines_reached: false, }); await riskEngineRoutes.init(); @@ -356,7 +355,6 @@ export default ({ getService }: FtrProviderContext) => { expect(status2.body.risk_engine_status).to.be('ENABLED'); expect(status2.body.legacy_risk_engine_status).to.be('NOT_INSTALLED'); - expect(status2.body.is_max_amount_of_risk_engines_reached).to.be(true); expect(status2.body.risk_engine_task_status.runAt).to.be.a('string'); expect(status2.body.risk_engine_task_status.status).to.be('idle'); @@ -368,7 +366,6 @@ export default ({ getService }: FtrProviderContext) => { expect(status3.body).to.eql({ risk_engine_status: 'DISABLED', legacy_risk_engine_status: 'NOT_INSTALLED', - is_max_amount_of_risk_engines_reached: false, }); await riskEngineRoutes.enable(); @@ -376,7 +373,6 @@ export default ({ getService }: FtrProviderContext) => { expect(status4.body.risk_engine_status).to.be('ENABLED'); expect(status4.body.legacy_risk_engine_status).to.be('NOT_INSTALLED'); - expect(status4.body.is_max_amount_of_risk_engines_reached).to.be(true); expect(status4.body.risk_engine_task_status.runAt).to.be.a('string'); expect(status4.body.risk_engine_task_status.status).to.be('idle'); @@ -390,7 +386,6 @@ export default ({ getService }: FtrProviderContext) => { expect(status1.body).to.eql({ risk_engine_status: 'NOT_INSTALLED', legacy_risk_engine_status: 'ENABLED', - is_max_amount_of_risk_engines_reached: false, }); await riskEngineRoutes.init(); @@ -399,7 +394,6 @@ export default ({ getService }: FtrProviderContext) => { expect(status2.body.risk_engine_status).to.be('ENABLED'); expect(status2.body.legacy_risk_engine_status).to.be('NOT_INSTALLED'); - expect(status2.body.is_max_amount_of_risk_engines_reached).to.be(true); expect(status2.body.risk_engine_task_status.runAt).to.be.a('string'); expect(status2.body.risk_engine_task_status.status).to.be('idle'); diff --git a/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/risk_engine_cleanup_api.ts b/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/risk_engine_cleanup_api.ts new file mode 100644 index 0000000000000..48344403093b3 --- /dev/null +++ b/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/risk_engine_cleanup_api.ts @@ -0,0 +1,67 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { v4 as uuidv4 } from 'uuid'; +import expect from '@kbn/expect'; +import { FtrProviderContext } from '../../../../ftr_provider_context'; +import { + buildDocument, + riskEngineRouteHelpersFactory, + waitForRiskScoresToBePresent, + createAndSyncRuleAndAlertsFactory, +} from '../../utils'; +import { dataGeneratorFactory } from '../../../detections_response/utils'; + +export default ({ getService }: FtrProviderContext) => { + const supertest = getService('supertest'); + const riskEngineRoutes = riskEngineRouteHelpersFactory(supertest); + const es = getService('es'); + const log = getService('log'); + const esArchiver = getService('esArchiver'); + + describe('@ess @ serverless @serverless QA risk_engine_cleanup_api', () => { + const createAndSyncRuleAndAlerts = createAndSyncRuleAndAlertsFactory({ supertest, log }); + const { indexListOfDocuments } = dataGeneratorFactory({ + es, + index: 'ecs_compliant', + log, + }); + before(async () => { + await esArchiver.load('x-pack/test/functional/es_archives/security_solution/ecs_compliant'); + }); + + after(async () => { + await esArchiver.unload('x-pack/test/functional/es_archives/security_solution/ecs_compliant'); + }); + + it('should return response with success status', async () => { + const status1 = await riskEngineRoutes.getStatus(); + expect(status1.body.risk_engine_status).to.be('NOT_INSTALLED'); + expect(status1.body.legacy_risk_engine_status).to.be('NOT_INSTALLED'); + + const firstDocumentId = uuidv4(); + await indexListOfDocuments([buildDocument({ host: { name: 'host-1' } }, firstDocumentId)]); + await createAndSyncRuleAndAlerts({ query: `id: ${firstDocumentId}` }); + + await riskEngineRoutes.init(); + await waitForRiskScoresToBePresent({ es, log, scoreCount: 1 }); + + const status2 = await riskEngineRoutes.getStatus(); + expect(status2.body.risk_engine_status).to.be('ENABLED'); + expect(status2.body.legacy_risk_engine_status).to.be('NOT_INSTALLED'); + + const response = await riskEngineRoutes.delete(); + expect(response.body).to.eql({ + cleanup_successful: true, + }); + + const status3 = await riskEngineRoutes.getStatus(); + expect(status3.body.risk_engine_status).to.be('NOT_INSTALLED'); + expect(status3.body.legacy_risk_engine_status).to.be('NOT_INSTALLED'); + }); + }); +}; diff --git a/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/risk_score_entity_calculation.ts b/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/risk_score_entity_calculation.ts index 773a7de04b35a..ee03f1399dfd4 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/risk_score_entity_calculation.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/risk_score_entity_calculation.ts @@ -206,6 +206,49 @@ export default ({ getService }: FtrProviderContext): void => { persistedScoreByApi.calculated_score_norm! + 0.000000000000001 ); }); + + it('ignores deleted asset criticality when calculating and persisting risk scores with additional criticality metadata and modifiers', async () => { + const documentId = uuidv4(); + await assetCriticalityRoutes.delete('host.name', 'host-1'); + await indexListOfDocuments([buildDocument({ host: { name: 'host-1' } }, documentId)]); + await waitForAssetCriticalityToBePresent({ es, log }); + await createRuleAndWaitExecution(documentId); + await riskEngineRoutes.init(); + await waitForRiskScoresToBePresent({ es, log, scoreCount: 1 }); + + const results = await calculateEntityRiskScore('host-1'); + + const expectedScore = { + calculated_level: 'Unknown', + calculated_score: 21, + calculated_score_norm: 8.10060175898781, + category_1_score: 8.10060175898781, + category_1_count: 1, + id_field: 'host.name', + id_value: 'host-1', + }; + + const [score] = sanitizeScores([results.score]); + expect(results.success).to.be(true); + expect(score).to.eql(expectedScore); + + await waitForRiskScoresToBePresent({ es, log, scoreCount: 2 }); + const persistedScores = await readRiskScores(es); + + expect(persistedScores.length).to.greaterThan(1); // the risk score is calculated once by the risk engine and a second time by the API + const [persistedScoreByApi, persistedScoreByEngine] = normalizeScores(persistedScores); + expect(persistedScoreByApi).to.eql(expectedScore); + expect(persistedScoreByApi).to.eql(persistedScoreByEngine); + + const [rawScore] = persistedScores; + + expect( + rawScore.host?.risk.category_1_score! + rawScore.host?.risk.category_2_score! + ).to.be.within( + persistedScoreByApi.calculated_score_norm! - 0.000000000000001, + persistedScoreByApi.calculated_score_norm! + 0.000000000000001 + ); + }); }); }); }); diff --git a/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/risk_scoring_task/task_execution.ts b/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/risk_scoring_task/task_execution.ts index a097c170de51c..484a5b43b9400 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/risk_scoring_task/task_execution.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/risk_scoring_task/task_execution.ts @@ -105,6 +105,9 @@ export default ({ getService }: FtrProviderContext): void => { }); it('@skipInServerlessMKI @skipInServerless starts the latest transform', async () => { + // Transform states that indicate the transform is running happily + const TRANSFORM_STARTED_STATES = ['started', 'indexing']; + await waitForRiskScoresToBePresent({ es, log, scoreCount: 10 }); const transformStats = await es.transform.getTransformStats({ @@ -113,12 +116,12 @@ export default ({ getService }: FtrProviderContext): void => { expect(transformStats.transforms.length).to.eql(1); const latestTransform = transformStats.transforms[0]; - if (latestTransform.state !== 'started') { - log.error('Transform state is not started, logging the transform'); + if (!TRANSFORM_STARTED_STATES.includes(latestTransform.state)) { + log.error('Transform state is not in the started states, logging the transform'); log.info(`latestTransform: ${JSON.stringify(latestTransform)}`); } - expect(latestTransform.state).to.eql('started'); + expect(TRANSFORM_STARTED_STATES).to.contain(latestTransform.state); }); describe('@skipInServerlessMKI disabling and re-enabling the risk engine', () => { @@ -280,6 +283,33 @@ export default ({ getService }: FtrProviderContext): void => { }, ]); }); + + it('filters out deleted asset criticality data when calculating score', async () => { + await assetCriticalityRoutes.upsert({ + id_field: 'host.name', + id_value: 'host-2', + criticality_level: 'high_impact', + }); + await assetCriticalityRoutes.delete('host.name', 'host-2'); + await waitForAssetCriticalityToBePresent({ es, log }); + await riskEngineRoutes.init(); + await waitForRiskScoresToBePresent({ es, log, scoreCount: 20 }); + const riskScores = await readRiskScores(es); + + expect(riskScores.length).to.be.greaterThan(0); + const assetCriticalityLevels = riskScores.map( + (riskScore) => riskScore.host?.risk.criticality_level + ); + const assetCriticalityModifiers = riskScores.map( + (riskScore) => riskScore.host?.risk.criticality_modifier + ); + + expect(assetCriticalityLevels).to.not.contain('deleted'); + expect(assetCriticalityModifiers).to.contain(2); + + const scoreWithCriticality = riskScores.find((score) => score.host?.name === 'host-2'); + expect(normalizeScores([scoreWithCriticality!])[0].criticality_level).to.be(undefined); + }); }); }); }); diff --git a/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/utils/entity_store.ts b/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/utils/entity_store.ts new file mode 100644 index 0000000000000..3f0ba0698a494 --- /dev/null +++ b/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/utils/entity_store.ts @@ -0,0 +1,33 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FtrProviderContext } from '../../../../api_integration/ftr_provider_context'; + +export const cleanEngines = async ({ + getService, +}: { + getService: FtrProviderContext['getService']; +}) => { + const log = getService('log'); + const api = getService('securitySolutionApi'); + + const { body } = await api.listEntityEngines().expect(200); + + // @ts-expect-error body is any + const engineTypes = body.engines.map((engine) => engine.type); + + log.info(`Cleaning engines: ${engineTypes.join(', ')}`); + try { + await Promise.all( + engineTypes.map((entityType: 'user' | 'host') => + api.deleteEntityEngine({ params: { entityType }, query: { data: true } }) + ) + ); + } catch (e) { + log.warning(`Error deleting engines: ${e.message}`); + } +}; diff --git a/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/utils/index.ts b/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/utils/index.ts index 7ff049a997da1..8f6a368807241 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/utils/index.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/utils/index.ts @@ -8,3 +8,4 @@ export * from './risk_engine'; export * from './get_risk_engine_stats'; export * from './asset_criticality'; +export * from './entity_store'; diff --git a/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/utils/risk_engine.ts b/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/utils/risk_engine.ts index 3b96bc61cc7ba..977ab1b3675f9 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/utils/risk_engine.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/utils/risk_engine.ts @@ -22,6 +22,7 @@ import { RISK_ENGINE_ENABLE_URL, RISK_ENGINE_STATUS_URL, RISK_ENGINE_PRIVILEGES_URL, + RISK_ENGINE_CLEANUP_URL, RISK_ENGINE_SCHEDULE_NOW_URL, } from '@kbn/security-solution-plugin/common/constants'; import { MappingTypeMapping } from '@elastic/elasticsearch/lib/api/types'; @@ -574,6 +575,14 @@ export const riskEngineRouteHelpersFactory = (supertest: SuperTest.Agent, namesp .send() .expect(expectStatusCode), + delete: async (expectStatusCode: number = 200) => + await supertest + .delete(routeWithNamespace(RISK_ENGINE_CLEANUP_URL, namespace)) + .set('kbn-xsrf', 'true') + .set('elastic-api-version', '2023-10-31') + .send() + .expect(expectStatusCode), + scheduleNow: async (expectStatusCode: number = 200) => await supertest .post(routeWithNamespace(RISK_ENGINE_SCHEDULE_NOW_URL, namespace)) diff --git a/x-pack/test/security_solution_api_integration/test_suites/investigation/saved_objects/trial_license_complete_tier/pinned_events.ts b/x-pack/test/security_solution_api_integration/test_suites/investigation/saved_objects/trial_license_complete_tier/pinned_events.ts index 9273a5d6c6a5e..9506e7345a00e 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/investigation/saved_objects/trial_license_complete_tier/pinned_events.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/investigation/saved_objects/trial_license_complete_tier/pinned_events.ts @@ -39,7 +39,7 @@ export default function ({ getService }: FtrProviderContext) { }); describe('Unpinned an event', () => { - it('return null', async () => { + it('returns null', async () => { const response = await supertest .patch('/api/pinned_event') .set('elastic-api-version', '2023-10-31') diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/explore/cases/attach_alert_to_case.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/explore/cases/attach_alert_to_case.cy.ts index a4370e9073509..b1b2764f4ea8c 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/explore/cases/attach_alert_to_case.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/explore/cases/attach_alert_to_case.cy.ts @@ -25,7 +25,8 @@ const loadDetectionsPage = (role: SecurityRoleName) => { waitForAlertsToPopulate(); }; -describe('Alerts timeline', { tags: ['@ess'] }, () => { +// Failing: See https://github.com/elastic/kibana/issues/191819 +describe.skip('Alerts timeline', { tags: ['@ess'] }, () => { beforeEach(() => { // First we login as a privileged user to create alerts. deleteAlertsAndRules(); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/threat_intelligence/query_bar.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/threat_intelligence/query_bar.cy.ts index a7cefa41bc678..3dd0dd765fcc5 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/threat_intelligence/query_bar.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/threat_intelligence/query_bar.cy.ts @@ -32,7 +32,8 @@ import { login } from '../../../tasks/login'; const URL = '/app/security/threat_intelligence/indicators'; -describe('Indicators query bar interaction', { tags: ['@ess'] }, () => { +// Failing: See https://github.com/elastic/kibana/issues/193804 +describe.skip('Indicators query bar interaction', { tags: ['@ess'] }, () => { before(() => cy.task('esArchiverLoad', { archiveName: 'ti_indicators_data_multiple' })); after(() => cy.task('esArchiverUnload', { archiveName: 'ti_indicators_data_multiple' })); diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/entity_analytics.ts b/x-pack/test/security_solution_cypress/cypress/tasks/entity_analytics.ts index 33599c47ccb5d..2265f228c2ce7 100644 --- a/x-pack/test/security_solution_cypress/cypress/tasks/entity_analytics.ts +++ b/x-pack/test/security_solution_cypress/cypress/tasks/entity_analytics.ts @@ -65,7 +65,6 @@ export const mockRiskEngineEnabled = () => { body: { risk_engine_status: 'ENABLED', legacy_risk_engine_status: 'INSTALLED', - is_max_amount_of_risk_engines_reached: false, }, }).as('riskEngineStatus'); diff --git a/x-pack/test/security_solution_cypress/runner.ts b/x-pack/test/security_solution_cypress/runner.ts index fb58d22a40cdc..0b815e2a14033 100644 --- a/x-pack/test/security_solution_cypress/runner.ts +++ b/x-pack/test/security_solution_cypress/runner.ts @@ -7,6 +7,7 @@ import Url from 'url'; +import { createEsClientForFtrConfig } from '@kbn/test'; import { TransportResult } from '@elastic/elasticsearch'; import { FtrProviderContext } from '../common/ftr_provider_context'; import { tiAbusechMalware } from './pipelines/ti_abusech_malware'; @@ -20,7 +21,7 @@ export async function SecuritySolutionConfigurableCypressTestRunner({ }: FtrProviderContext) { const log = getService('log'); const config = getService('config'); - const es = getService('es'); + const es = createEsClientForFtrConfig(config); const pipelines = [tiAbusechMalware, tiAbusechMalwareBazaar, tiAbusechUrl]; diff --git a/x-pack/test_serverless/functional/page_objects/svl_search_index_detail_page.ts b/x-pack/test_serverless/functional/page_objects/svl_search_index_detail_page.ts index 8ffbfd2bcb8c1..fe54f75dbdba9 100644 --- a/x-pack/test_serverless/functional/page_objects/svl_search_index_detail_page.ts +++ b/x-pack/test_serverless/functional/page_objects/svl_search_index_detail_page.ts @@ -115,11 +115,41 @@ export function SvlSearchIndexDetailPageProvider({ getService }: FtrProviderCont async expectShouldDefaultToDataTab() { expect(await browser.getCurrentUrl()).contain('/data'); }, - async withDataChangeTabs(tab: 'dataTab' | 'mappingsTab') { + async withDataChangeTabs(tab: 'dataTab' | 'mappingsTab' | 'settingsTab') { await testSubjects.click(tab); }, - async expectUrlShouldChangeTo(tab: 'data' | 'mappings') { + async expectUrlShouldChangeTo(tab: 'data' | 'mappings' | 'settings') { expect(await browser.getCurrentUrl()).contain(`/${tab}`); }, + async expectMappingsComponentIsVisible() { + await testSubjects.existOrFail('indexDetailsMappingsToggleViewButton', { timeout: 2000 }); + }, + async expectSettingsComponentIsVisible() { + await testSubjects.existOrFail('indexDetailsSettingsEditModeSwitch', { timeout: 2000 }); + }, + async expectSelectedLanguage(language: string) { + await testSubjects.existOrFail('codeExampleLanguageSelect'); + expect( + (await testSubjects.getVisibleText('codeExampleLanguageSelect')).toLowerCase() + ).contain(language); + }, + async selectCodingLanguage(language: string) { + await testSubjects.existOrFail('codeExampleLanguageSelect'); + await testSubjects.click('codeExampleLanguageSelect'); + await testSubjects.existOrFail(`lang-option-${language}`); + await testSubjects.click(`lang-option-${language}`); + expect( + (await testSubjects.getVisibleText('codeExampleLanguageSelect')).toLowerCase() + ).contain(language); + }, + async codeSampleContainsValue(subject: string, value: string) { + const tstSubjId = `${subject}-code-block`; + await testSubjects.existOrFail(tstSubjId); + expect(await testSubjects.getVisibleText(tstSubjId)).contain(value); + }, + async openConsoleCodeExample() { + await testSubjects.existOrFail('tryInConsoleButton'); + await testSubjects.click('tryInConsoleButton'); + }, }; } diff --git a/x-pack/test_serverless/functional/test_suites/common/discover/esql/_esql_view.ts b/x-pack/test_serverless/functional/test_suites/common/discover/esql/_esql_view.ts index 1bedd0acd0cc4..7881f5545388f 100644 --- a/x-pack/test_serverless/functional/test_suites/common/discover/esql/_esql_view.ts +++ b/x-pack/test_serverless/functional/test_suites/common/discover/esql/_esql_view.ts @@ -202,7 +202,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const cell = await dataGrid.getCellElementExcludingControlColumns(0, 1); expect(await cell.getVisibleText()).to.be(' - '); expect(await dataGrid.getHeaders()).to.eql([ - 'Select column', + "Select columnPress the Enter key to interact with this cell's contents.", // contains screen reader help text 'Control column', 'Access to degraded docs', 'Access to available stacktraces', diff --git a/x-pack/test_serverless/functional/test_suites/observability/onboarding/firehose.ts b/x-pack/test_serverless/functional/test_suites/observability/onboarding/firehose.ts index 91b536c79c5e8..22c700d16be2d 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/onboarding/firehose.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/onboarding/firehose.ts @@ -20,8 +20,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { const testSubjects = getService('testSubjects'); const synthtrace = getService('svlLogsSynthtraceClient'); - // Failing: See https://github.com/elastic/kibana/issues/193294 - describe.skip('Onboarding Firehose Quickstart Flow', () => { + describe('Onboarding Firehose Quickstart Flow', () => { before(async () => { await PageObjects.svlCommonPage.loginAsAdmin(); // Onboarding requires admin role await PageObjects.common.navigateToUrlWithBrowserHistory( @@ -39,7 +38,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); beforeEach(async () => { - await (await testSubjects.find('createCloudFormationOptionAWSCLI')).click(); + await (await testSubjects.find('createCloudFormationOptionAWSCLI', 20000)).click(); await testSubjects.existOrFail('observabilityOnboardingFirehoseCreateStackCommand'); }); diff --git a/x-pack/test_serverless/functional/test_suites/search/search_index_detail.ts b/x-pack/test_serverless/functional/test_suites/search/search_index_detail.ts index 7f40ec9127c6c..8ba8e8d0300d0 100644 --- a/x-pack/test_serverless/functional/test_suites/search/search_index_detail.ts +++ b/x-pack/test_serverless/functional/test_suites/search/search_index_detail.ts @@ -66,6 +66,20 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { it('should show code examples for adding documents', async () => { await pageObjects.svlSearchIndexDetailPage.expectAddDocumentCodeExamples(); + await pageObjects.svlSearchIndexDetailPage.expectSelectedLanguage('python'); + await pageObjects.svlSearchIndexDetailPage.codeSampleContainsValue( + 'installCodeExample', + 'pip install' + ); + await pageObjects.svlSearchIndexDetailPage.selectCodingLanguage('javascript'); + await pageObjects.svlSearchIndexDetailPage.codeSampleContainsValue( + 'installCodeExample', + 'npm install' + ); + await pageObjects.svlSearchIndexDetailPage.selectCodingLanguage('curl'); + await pageObjects.svlSearchIndexDetailPage.openConsoleCodeExample(); + await pageObjects.embeddedConsole.expectEmbeddedConsoleToBeOpen(); + await pageObjects.embeddedConsole.clickEmbeddedConsoleControlBar(); }); it('back to indices button should redirect to list page', async () => { @@ -91,9 +105,15 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await pageObjects.svlSearchIndexDetailPage.expectWithDataTabsExists(); await pageObjects.svlSearchIndexDetailPage.expectShouldDefaultToDataTab(); }); - it('should be able to change tabs', async () => { + it('should be able to change tabs to mappings and mappings is shown', async () => { await pageObjects.svlSearchIndexDetailPage.withDataChangeTabs('mappingsTab'); await pageObjects.svlSearchIndexDetailPage.expectUrlShouldChangeTo('mappings'); + await pageObjects.svlSearchIndexDetailPage.expectMappingsComponentIsVisible(); + }); + it('should be able to change tabs to settings and settings is shown', async () => { + await pageObjects.svlSearchIndexDetailPage.withDataChangeTabs('settingsTab'); + await pageObjects.svlSearchIndexDetailPage.expectUrlShouldChangeTo('settings'); + await pageObjects.svlSearchIndexDetailPage.expectSettingsComponentIsVisible(); }); }); diff --git a/yarn.lock b/yarn.lock index 11bae58bb6cfc..56b433384c0f9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1741,10 +1741,10 @@ resolved "https://registry.yarnpkg.com/@elastic/eslint-plugin-eui/-/eslint-plugin-eui-0.0.2.tgz#56b9ef03984a05cc213772ae3713ea8ef47b0314" integrity sha512-IoxURM5zraoQ7C8f+mJb9HYSENiZGgRVcG4tLQxE61yHNNRDXtGDWTZh8N1KIHcsqN1CEPETjuzBXkJYF/fDiQ== -"@elastic/eui@95.10.1": - version "95.10.1" - resolved "https://registry.yarnpkg.com/@elastic/eui/-/eui-95.10.1.tgz#f3fb356ad49ba45e42981e39748693ba392567fe" - integrity sha512-1kqyx/NfiQE/bKMf1E3uJEpYZnQnPBrI5zO0l2FB+fs7Naf7wT7zq1VFRzNLn/r1x6mnou8wJ+VlouHCI+prLw== +"@elastic/eui@95.11.0": + version "95.11.0" + resolved "https://registry.yarnpkg.com/@elastic/eui/-/eui-95.11.0.tgz#40e8124ac54c625ba7160cb84a378507abdeaf40" + integrity sha512-O688EbhrgSrV9j54mnK4xLyhv+imkBv5ti7isqLxJtd0L7Fe2A1d6EaA11Qv5plOwwC+cGsrkrDnlSqi1MtNoQ== dependencies: "@hello-pangea/dnd" "^16.6.0" "@types/lodash" "^4.14.202" @@ -5699,6 +5699,10 @@ version "0.0.0" uid "" +"@kbn/ml-field-stats-flyout@link:x-pack/packages/ml/field_stats_flyout": + version "0.0.0" + uid "" + "@kbn/ml-in-memory-table@link:x-pack/packages/ml/in_memory_table": version "0.0.0" uid "" @@ -5727,6 +5731,10 @@ version "0.0.0" uid "" +"@kbn/ml-parse-interval@link:x-pack/packages/ml/parse_interval": + version "0.0.0" + uid "" + "@kbn/ml-plugin@link:x-pack/plugins/ml": version "0.0.0" uid "" @@ -5771,6 +5779,10 @@ version "0.0.0" uid "" +"@kbn/ml-validators@link:x-pack/packages/ml/validators": + version "0.0.0" + uid "" + "@kbn/mock-idp-plugin@link:packages/kbn-mock-idp-plugin": version "0.0.0" uid "" @@ -7698,10 +7710,10 @@ express "^4.18.2" strict-event-emitter "^0.5.1" -"@mswjs/interceptors@^0.35.6": - version "0.35.6" - resolved "https://registry.yarnpkg.com/@mswjs/interceptors/-/interceptors-0.35.6.tgz#66c522036bc01fa6be87b46b49cc378b837bf510" - integrity sha512-PpD687w7qLxVMK176bpQjbzU9O0VC75QnBK5U1lKd29s4hIuxfTItUD6raNKyQ6BN8b64/8HE34RuYTkwH9uPQ== +"@mswjs/interceptors@^0.35.8": + version "0.35.8" + resolved "https://registry.yarnpkg.com/@mswjs/interceptors/-/interceptors-0.35.8.tgz#f36e5907e05593e33037ef4519aac7815fa3509f" + integrity sha512-PFfqpHplKa7KMdoQdj5td03uG05VK2Ng1dG0sP4pT9h0dGSX2v9txYt/AnrzPb/vAmfyBBC0NQV7VaBEX+efgQ== dependencies: "@open-draft/deferred-promise" "^2.2.0" "@open-draft/logger" "^0.3.0" @@ -12405,10 +12417,10 @@ ansi-regex@^5.0.0, ansi-regex@^5.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -ansi-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== +ansi-regex@^6.0.1, ansi-regex@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654" + integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== ansi-styles@^2.2.1: version "2.2.1" @@ -23822,16 +23834,16 @@ msgpackr@^1.9.9: optionalDependencies: msgpackr-extract "^3.0.2" -msw@^2.4.5: - version "2.4.8" - resolved "https://registry.yarnpkg.com/msw/-/msw-2.4.8.tgz#306b6ba1ae09d0d09bac08009a83eeb622578d73" - integrity sha512-a+FUW1m5yT8cV9GBy0L/cbNg0EA4//SKEzgu3qFrpITrWYeZmqfo7dqtM74T2lAl69jjUjjCaEhZKaxG2Ns8DA== +msw@^2.4.8: + version "2.4.9" + resolved "https://registry.yarnpkg.com/msw/-/msw-2.4.9.tgz#350a84cedb90b578a32c7764431e3750900f8407" + integrity sha512-1m8xccT6ipN4PTqLinPwmzhxQREuxaEJYdx4nIbggxP8aM7r1e71vE7RtOUSQoAm1LydjGfZKy7370XD/tsuYg== dependencies: "@bundled-es-modules/cookie" "^2.0.0" "@bundled-es-modules/statuses" "^1.0.1" "@bundled-es-modules/tough-cookie" "^0.1.6" "@inquirer/confirm" "^3.0.0" - "@mswjs/interceptors" "^0.35.6" + "@mswjs/interceptors" "^0.35.8" "@open-draft/until" "^2.1.0" "@types/cookie" "^0.6.0" "@types/statuses" "^2.0.4" @@ -30292,10 +30304,10 @@ terser@^4.1.2, terser@^4.6.3: source-map "~0.6.1" source-map-support "~0.5.12" -terser@^5.26.0, terser@^5.3.4, terser@^5.32.0, terser@^5.9.0: - version "5.32.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.32.0.tgz#ee811c0d2d6b741c1cc34a2bc5bcbfc1b5b1f96c" - integrity sha512-v3Gtw3IzpBJ0ugkxEX8U0W6+TnPKRRCWGh1jC/iM/e3Ki5+qvO1L1EAZ56bZasc64aXHwRHNIQEzm6//i5cemQ== +terser@^5.26.0, terser@^5.3.4, terser@^5.33.0, terser@^5.9.0: + version "5.33.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.33.0.tgz#8f9149538c7468ffcb1246cfec603c16720d2db1" + integrity sha512-JuPVaB7s1gdFKPKTelwUyRq5Sid2A3Gko2S0PncwdBq7kN9Ti9HPWDQ06MPsEDGsZeVESjKEnyGy68quBk1w6g== dependencies: "@jridgewell/source-map" "^0.3.3" acorn "^8.8.2"