diff --git a/.buildkite/ftr_configs.yml b/.buildkite/ftr_configs.yml index f3ad03a4e7598..cb88c5b89fc91 100644 --- a/.buildkite/ftr_configs.yml +++ b/.buildkite/ftr_configs.yml @@ -453,6 +453,7 @@ enabled: - x-pack/test_serverless/functional/test_suites/security/config.examples.ts - x-pack/test_serverless/functional/test_suites/security/config.cloud_security_posture.basic.ts - x-pack/test_serverless/functional/test_suites/security/config.cloud_security_posture.essentials.ts + - x-pack/test_serverless/functional/test_suites/security/config.cloud_security_posture.agentless.ts - x-pack/test_serverless/functional/test_suites/security/config.saved_objects_management.ts - x-pack/test_serverless/functional/test_suites/security/config.context_awareness.ts - x-pack/test_serverless/functional/test_suites/security/common_configs/config.group1.ts diff --git a/.buildkite/pipelines/artifacts.yml b/.buildkite/pipelines/artifacts.yml index cce4ae9cfc525..3f8a671a2d88a 100644 --- a/.buildkite/pipelines/artifacts.yml +++ b/.buildkite/pipelines/artifacts.yml @@ -92,7 +92,7 @@ steps: - exit_status: '*' limit: 1 - - command: KIBANA_DOCKER_CONTEXT=chainguard .buildkite/scripts/steps/artifacts/docker_context.sh + - command: KIBANA_DOCKER_CONTEXT=wolfi .buildkite/scripts/steps/artifacts/docker_context.sh label: 'Docker Context Verification' agents: image: family/kibana-ubuntu-2004 diff --git a/.buildkite/scripts/build_kibana.sh b/.buildkite/scripts/build_kibana.sh index bb86b0abf8d45..f586f1cbe3b1e 100755 --- a/.buildkite/scripts/build_kibana.sh +++ b/.buildkite/scripts/build_kibana.sh @@ -32,7 +32,7 @@ if is_pr_with_label "ci:build-cloud-image"; then --skip-docker-ubi \ --skip-docker-fips \ --skip-docker-ubuntu \ - --skip-docker-chainguard \ + --skip-docker-wolfi \ --skip-docker-serverless \ --skip-docker-contexts diff --git a/.buildkite/scripts/pipelines/security_solution_quality_gate/create_periodic_test_docker_image.sh b/.buildkite/scripts/pipelines/security_solution_quality_gate/create_periodic_test_docker_image.sh index 5a47026f7cced..1491c25d079d0 100644 --- a/.buildkite/scripts/pipelines/security_solution_quality_gate/create_periodic_test_docker_image.sh +++ b/.buildkite/scripts/pipelines/security_solution_quality_gate/create_periodic_test_docker_image.sh @@ -34,7 +34,7 @@ node scripts/build \ --docker-namespace="kibana-ci" \ --docker-tag="$KIBANA_IMAGE_TAG" \ --skip-docker-ubuntu \ - --skip-docker-chainguard \ + --skip-docker-wolfi \ --skip-docker-ubi \ --skip-docker-cloud \ --skip-docker-contexts \ diff --git a/.buildkite/scripts/steps/artifacts/docker_context.sh b/.buildkite/scripts/steps/artifacts/docker_context.sh index 8ee1c0ba2a438..43a3481bb159a 100755 --- a/.buildkite/scripts/steps/artifacts/docker_context.sh +++ b/.buildkite/scripts/steps/artifacts/docker_context.sh @@ -20,8 +20,8 @@ case $KIBANA_DOCKER_CONTEXT in default) DOCKER_CONTEXT_FILE="kibana-$FULL_VERSION-docker-build-context.tar.gz" ;; - chainguard) - DOCKER_CONTEXT_FILE="kibana-chainguard-$FULL_VERSION-docker-build-context.tar.gz" + wolfi) + DOCKER_CONTEXT_FILE="kibana-wolfi-$FULL_VERSION-docker-build-context.tar.gz" ;; cloud) DOCKER_CONTEXT_FILE="kibana-cloud-$FULL_VERSION-docker-build-context.tar.gz" diff --git a/.buildkite/scripts/steps/cloud/build_and_deploy.sh b/.buildkite/scripts/steps/cloud/build_and_deploy.sh index 10d18030c8811..6615d0ec4cdd4 100755 --- a/.buildkite/scripts/steps/cloud/build_and_deploy.sh +++ b/.buildkite/scripts/steps/cloud/build_and_deploy.sh @@ -43,7 +43,7 @@ else --skip-docker-ubi \ --skip-docker-fips \ --skip-docker-ubuntu \ - --skip-docker-chainguard \ + --skip-docker-wolfi \ --skip-docker-serverless \ --skip-docker-contexts fi diff --git a/.buildkite/scripts/steps/fips/build.sh b/.buildkite/scripts/steps/fips/build.sh index 0dfebdf2a6de1..e08d56758a45c 100755 --- a/.buildkite/scripts/steps/fips/build.sh +++ b/.buildkite/scripts/steps/fips/build.sh @@ -23,7 +23,7 @@ node scripts/build \ --docker-push \ --skip-docker-ubi \ --skip-docker-ubuntu \ - --skip-docker-chainguard \ + --skip-docker-wolfi \ --skip-docker-cloud \ --skip-docker-serverless \ --skip-docker-contexts diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index 94aa9d8c2910b..a8ce305d0f13d 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-06-27 +date: 2024-06-29 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 baabdd1cf4bad..039e89c0d32dd 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-06-27 +date: 2024-06-29 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 0e41a8d0f3e77..f11992d488a32 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-06-27 +date: 2024-06-29 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 e79131097f8cf..1aad1e8e6bbfd 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-06-27 +date: 2024-06-29 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 870312c561bff..b14ecc6e651ee 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'alerting'] --- import alertingObj from './alerting.devdocs.json'; diff --git a/api_docs/apm.mdx b/api_docs/apm.mdx index 3a9e6a2f743a4..7fbb41a2c94d1 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apm'] --- import apmObj from './apm.devdocs.json'; diff --git a/api_docs/apm_data_access.mdx b/api_docs/apm_data_access.mdx index f82e6d1ebb83a..6410a8ab709d9 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apmDataAccess'] --- import apmDataAccessObj from './apm_data_access.devdocs.json'; diff --git a/api_docs/assets_data_access.mdx b/api_docs/assets_data_access.mdx index 544db5d9e6b5e..477f922f93aef 100644 --- a/api_docs/assets_data_access.mdx +++ b/api_docs/assets_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/assetsDataAccess title: "assetsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the assetsDataAccess plugin -date: 2024-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'assetsDataAccess'] --- import assetsDataAccessObj from './assets_data_access.devdocs.json'; diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index d0113c00c5beb..8c69e714ed63a 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-06-27 +date: 2024-06-29 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 faab13ec1686a..b185eca40819c 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-06-27 +date: 2024-06-29 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 dbaee092a69ff..6f8996a3b807d 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-06-27 +date: 2024-06-29 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 fe85630efe016..75cf18f601de4 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-06-27 +date: 2024-06-29 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 961009ee52d19..bbb87a9bed96d 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-06-27 +date: 2024-06-29 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 74a1f886bfe2e..9f8dccee05c00 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-06-27 +date: 2024-06-29 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 15fc14cfd7052..c5e81bfdfdf87 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-06-27 +date: 2024-06-29 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 c881aa164ce9c..c43c38b6a8448 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudDefend'] --- import cloudDefendObj from './cloud_defend.devdocs.json'; diff --git a/api_docs/cloud_experiments.mdx b/api_docs/cloud_experiments.mdx index edcec43b19573..3b4f57bb05b47 100644 --- a/api_docs/cloud_experiments.mdx +++ b/api_docs/cloud_experiments.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudExperiments title: "cloudExperiments" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudExperiments plugin -date: 2024-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudExperiments'] --- import cloudExperimentsObj from './cloud_experiments.devdocs.json'; diff --git a/api_docs/cloud_security_posture.mdx b/api_docs/cloud_security_posture.mdx index 645c246aea777..7d5f74fa7ed64 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-06-27 +date: 2024-06-29 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 590e6156569b8..35b6fa65c27f7 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-06-27 +date: 2024-06-29 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 e274518fae88a..04749d864863e 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-06-27 +date: 2024-06-29 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 54a6c04ae1905..b25711e251b6c 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-06-27 +date: 2024-06-29 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 e8f2c826af759..a89b490d02082 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'customIntegrations'] --- import customIntegrationsObj from './custom_integrations.devdocs.json'; diff --git a/api_docs/dashboard.mdx b/api_docs/dashboard.mdx index bcf167380d6b6..037301f34a6d7 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboard'] --- import dashboardObj from './dashboard.devdocs.json'; diff --git a/api_docs/dashboard_enhanced.mdx b/api_docs/dashboard_enhanced.mdx index 0081e5f4b048d..b2b9a89dd96f6 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboardEnhanced'] --- import dashboardEnhancedObj from './dashboard_enhanced.devdocs.json'; diff --git a/api_docs/data.devdocs.json b/api_docs/data.devdocs.json index 324899d1a151e..296fbccb6cc31 100644 --- a/api_docs/data.devdocs.json +++ b/api_docs/data.devdocs.json @@ -12018,7 +12018,7 @@ "section": "def-server.DataPluginStart", "text": "DataPluginStart" }, - ">, { bfetch, expressions, usageCollection, fieldFormats, security }: ", + ">, { bfetch, expressions, usageCollection, fieldFormats }: ", "DataPluginSetupDependencies", ") => { search: ", "ISearchSetup", @@ -12075,7 +12075,7 @@ "id": "def-server.DataServerPlugin.setup.$2", "type": "Object", "tags": [], - "label": "{ bfetch, expressions, usageCollection, fieldFormats, security }", + "label": "{ bfetch, expressions, usageCollection, fieldFormats }", "description": [], "signature": [ "DataPluginSetupDependencies" diff --git a/api_docs/data.mdx b/api_docs/data.mdx index cd28bc6067afa..8f7ddf0d03f18 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-06-27 +date: 2024-06-29 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 8387ace532b46..dbdf4acca0c3a 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-06-27 +date: 2024-06-29 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 189ada182ea05..3eaa517d10aea 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.query'] --- import dataQueryObj from './data_query.devdocs.json'; diff --git a/api_docs/data_search.devdocs.json b/api_docs/data_search.devdocs.json index 3e3047831b93f..7f73ada1e2d7d 100644 --- a/api_docs/data_search.devdocs.json +++ b/api_docs/data_search.devdocs.json @@ -2414,7 +2414,7 @@ "label": "asScopedProvider", "description": [], "signature": [ - "({ savedObjects, elasticsearch }: ", + "({ security, savedObjects, elasticsearch }: ", { "pluginId": "@kbn/core-lifecycle-server", "scope": "common", @@ -2593,7 +2593,7 @@ "id": "def-server.SearchSessionService.asScopedProvider.$1", "type": "Object", "tags": [], - "label": "{ savedObjects, elasticsearch }", + "label": "{ security, savedObjects, elasticsearch }", "description": [], "signature": [ { diff --git a/api_docs/data_search.mdx b/api_docs/data_search.mdx index 45be31fd5c9df..ab920dfecade5 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.search'] --- import dataSearchObj from './data_search.devdocs.json'; diff --git a/api_docs/data_view_editor.mdx b/api_docs/data_view_editor.mdx index 57a8c348a9ba4..a934cb1b42944 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-06-27 +date: 2024-06-29 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 1aee3d2994966..1895bfd548179 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-06-27 +date: 2024-06-29 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 0f59f3eb1a6db..3b333d0ad6cb4 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewManagement'] --- import dataViewManagementObj from './data_view_management.devdocs.json'; diff --git a/api_docs/data_views.devdocs.json b/api_docs/data_views.devdocs.json index 8dad9a0ac323d..d456103f28f6c 100644 --- a/api_docs/data_views.devdocs.json +++ b/api_docs/data_views.devdocs.json @@ -6882,23 +6882,6 @@ "deprecated": false, "trackAdoption": false, "initialIsOpen": false - }, - { - "parentPluginId": "dataViews", - "id": "def-public.UserIdGetter", - "type": "Type", - "tags": [], - "label": "UserIdGetter", - "description": [], - "signature": [ - "() => Promise" - ], - "path": "src/plugins/data_views/public/types.ts", - "deprecated": false, - "trackAdoption": false, - "returnComment": [], - "children": [], - "initialIsOpen": false } ], "objects": [], diff --git a/api_docs/data_views.mdx b/api_docs/data_views.mdx index e308b8c3c30a3..937eddbcf232c 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViews'] --- import dataViewsObj from './data_views.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 1159 | 0 | 402 | 3 | +| 1158 | 0 | 401 | 3 | ## Client diff --git a/api_docs/data_visualizer.mdx b/api_docs/data_visualizer.mdx index 058c40b461a5f..04ee03717f546 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-06-27 +date: 2024-06-29 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 1a04bc039e320..4d936c0381e80 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-06-27 +date: 2024-06-29 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 4e5dfd9a88edf..fecc2a93965c0 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -18,7 +18,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | ---------------|-----------|-----------| | | ml, stackAlerts | - | | | data, @kbn/search-errors, savedObjectsManagement, unifiedSearch, @kbn/unified-field-list, lens, controls, triggersActionsUi, dataVisualizer, canvas, presentationUtil, logsShared, fleet, ml, @kbn/lens-embeddable-utils, @kbn/ml-data-view-utils, enterpriseSearch, graph, visTypeTimeseries, exploratoryView, stackAlerts, infra, securitySolution, timelines, transform, upgradeAssistant, uptime, ux, maps, dataViewManagement, eventAnnotationListing, inputControlVis, visDefaultEditor, visTypeTimelion, visTypeVega | - | -| | encryptedSavedObjects, actions, data, ml, logstash, securitySolution, cloudChat | - | +| | encryptedSavedObjects, actions, ml, logstash, securitySolution, cloudChat | - | | | actions, savedObjectsTagging, ml, enterpriseSearch | - | | | @kbn/core-saved-objects-browser-internal, @kbn/core, savedObjects, visualizations, aiops, dataVisualizer, ml, dashboardEnhanced, graph, lens, securitySolution, eventAnnotation, @kbn/core-saved-objects-browser-mocks | - | | | @kbn/core, savedObjects, embeddable, visualizations, canvas, graph, ml, @kbn/core-saved-objects-common, @kbn/core-saved-objects-server, actions, @kbn/alerting-types, alerting, savedSearch, enterpriseSearch, securitySolution, taskManager, @kbn/core-saved-objects-server-internal, @kbn/core-saved-objects-api-server | - | @@ -39,7 +39,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | securitySolution | - | | | cloudDefend, osquery, securitySolution, synthetics | - | | | cloudDefend, osquery, securitySolution, synthetics | - | -| | actions, alerting, cases, observabilityAIAssistant, fleet, cloudDefend, cloudSecurityPosture, elasticAssistant, enterpriseSearch, lists, osquery, securitySolution, reporting, serverlessSearch, transform, upgradeAssistant, apm, entityManager, observabilityOnboarding, synthetics, security | - | +| | actions, alerting, cases, observabilityAIAssistant, fleet, cloudDefend, cloudSecurityPosture, enterpriseSearch, lists, securitySolution, serverlessSearch, transform, upgradeAssistant, apm, entityManager, observabilityOnboarding, synthetics, security | - | | | cases, securitySolution, security | - | | | @kbn/securitysolution-data-table, securitySolution | - | | | @kbn/securitysolution-data-table, securitySolution | - | @@ -50,7 +50,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | securitySolution | - | | | @kbn/core-saved-objects-api-browser, @kbn/core-saved-objects-browser-internal, @kbn/core-saved-objects-api-server, @kbn/core, home, savedObjectsTagging, canvas, savedObjects, @kbn/core-saved-objects-browser-mocks, @kbn/core-saved-objects-import-export-server-internal, savedObjectsTaggingOss, lists, securitySolution, upgradeAssistant, savedObjectsManagement, @kbn/core-ui-settings-server-internal | - | | | @kbn/core-saved-objects-migration-server-internal, actions, dataViews, data, alerting, lens, cases, savedSearch, canvas, savedObjectsTagging, graph, lists, maps, visualizations, securitySolution, dashboard, @kbn/core-test-helpers-so-type-serializer | - | -| | dataViews, security, securitySolution, serverlessSearch, cloudLinks, observabilityAIAssistantApp, cases, apm | - | +| | security, securitySolution, serverlessSearch, cloudLinks, observabilityAIAssistantApp, cases, apm | - | | | security, cases, searchPlayground, securitySolution | - | | | lists, securitySolution, @kbn/securitysolution-io-ts-list-types | - | | | lists, securitySolution, @kbn/securitysolution-io-ts-list-types | - | @@ -154,18 +154,18 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | observabilityShared | - | | | @kbn/react-kibana-context-styled, kibanaReact | - | | | encryptedSavedObjects | - | -| | reporting | - | -| | @kbn/reporting-export-types-csv, reporting | - | -| | @kbn/reporting-export-types-csv, reporting | - | -| | reporting | - | -| | reporting | - | -| | @kbn/reporting-export-types-pdf, reporting | - | | | @kbn/content-management-table-list-view, filesManagement | - | | | @kbn/core | - | | | @kbn/core | - | | | @kbn/core-lifecycle-browser-mocks, @kbn/core, @kbn/core-plugins-browser-internal | - | | | @kbn/core | - | | | @kbn/core-plugins-server-internal | - | +| | reporting | - | +| | @kbn/reporting-export-types-csv, reporting | - | +| | @kbn/reporting-export-types-csv, reporting | - | +| | reporting | - | +| | reporting | - | +| | @kbn/reporting-export-types-pdf, reporting | - | | | @kbn/reporting-csv-share-panel | - | | | security, aiops, licenseManagement, ml, crossClusterReplication, logstash, painlessLab, searchprofiler, watcher, profiling, apm, slo | 8.8.0 | | | spaces, security, actions, alerting, aiops, remoteClusters, ml, graph, indexLifecycleManagement, mapsEms, osquery, securitySolution, painlessLab, rollup, searchprofiler, snapshotRestore, transform, upgradeAssistant | 8.8.0 | diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index 5288e5a2fbf02..a9a2dc7afbd8f 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -655,7 +655,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| | | [inspector_stats.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/search_source/inspect/inspector_stats.ts#:~:text=title), [response_writer.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/tabify/response_writer.ts#:~:text=title), [field.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/aggs/param_types/field.ts#:~:text=title), [get_display_value.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/public/query/filter_manager/lib/get_display_value.ts#:~:text=title), [agg_config.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/aggs/agg_config.test.ts#:~:text=title), [_terms_other_bucket_helper.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/aggs/buckets/_terms_other_bucket_helper.test.ts#:~:text=title), [multi_terms.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/aggs/buckets/multi_terms.test.ts#:~:text=title), [multi_terms.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/aggs/buckets/multi_terms.test.ts#:~:text=title), [rare_terms.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/aggs/buckets/rare_terms.test.ts#:~:text=title), [terms.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/aggs/buckets/terms.test.ts#:~:text=title)+ 2 more | - | -| | [session_service.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/server/search/session/session_service.ts#:~:text=authc) | - | | | [data_table.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data/public/utils/table_inspector_view/components/data_table.tsx#:~:text=executeTriggerActions), [data_table.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data/public/utils/table_inspector_view/components/data_table.tsx#:~:text=executeTriggerActions) | - | | | [persistable_state.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/query/filters/persistable_state.ts#:~:text=SavedObjectReference), [persistable_state.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/query/filters/persistable_state.ts#:~:text=SavedObjectReference), [persistable_state.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/query/filters/persistable_state.ts#:~:text=SavedObjectReference), [persistable_state.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/query/persistable_state.ts#:~:text=SavedObjectReference), [persistable_state.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/query/persistable_state.ts#:~:text=SavedObjectReference), [persistable_state.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/query/persistable_state.ts#:~:text=SavedObjectReference) | - | | | [query.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/server/saved_objects/query.ts#:~:text=migrations), [search_telemetry.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/server/saved_objects/search_telemetry.ts#:~:text=migrations), [search_session.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/server/search/saved_objects/search_session.ts#:~:text=migrations) | - | @@ -695,7 +694,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [data_view.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_views/common/data_views/data_view.ts#:~:text=getScriptedFields), [data_view.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_views/common/data_views/data_view.ts#:~:text=getScriptedFields), [data_view.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_views/common/data_views/data_view.ts#:~:text=getScriptedFields), [data_views.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_views/common/data_views/data_views.ts#:~:text=getScriptedFields), [data_view.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_views/common/data_views/data_view.test.ts#:~:text=getScriptedFields), [data_view.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_views/common/data_views/data_view.test.ts#:~:text=getScriptedFields), [data_view.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_views/common/data_views/data_view.test.ts#:~:text=getScriptedFields), [data_view.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_views/common/data_views/data_view.test.ts#:~:text=getScriptedFields), [data_view.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_views/common/data_views/data_view.test.ts#:~:text=getScriptedFields) | - | | | [data_views.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_views/server/saved_objects/data_views.ts#:~:text=migrations) | - | | | [data_views.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_views/server/saved_objects/data_views.ts#:~:text=convertToMultiNamespaceTypeVersion) | - | -| | [plugin.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_views/public/plugin.ts#:~:text=authc) | - | @@ -726,14 +724,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] -## elasticAssistant - -| Deprecated API | Reference location(s) | Remove By | -| ---------------|-----------|-----------| -| | [request_context_factory.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/elastic_assistant/server/routes/request_context_factory.ts#:~:text=authc), [request_context_factory.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/elastic_assistant/server/routes/request_context_factory.ts#:~:text=authc) | - | - - - ## embeddable | Deprecated API | Reference location(s) | Remove By | @@ -863,7 +853,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [use_get_logs_discover_link.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/multi_page_layout/hooks/use_get_logs_discover_link.tsx#:~:text=indexPatternId) | - | | | [agent_policy_config.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/common/services/agent_policy_config.test.ts#:~:text=mode), [agent_policy_config.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/common/services/agent_policy_config.test.ts#:~:text=mode), [agent_policy_watch.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/server/services/agent_policy_watch.test.ts#:~:text=mode), [agent_policy_watch.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/server/services/agent_policy_watch.test.ts#:~:text=mode) | 8.8.0 | | | [agent_policy_config.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/common/services/agent_policy_config.test.ts#:~:text=mode), [agent_policy_config.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/common/services/agent_policy_config.test.ts#:~:text=mode), [agent_policy_watch.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/server/services/agent_policy_watch.test.ts#:~:text=mode), [agent_policy_watch.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/server/services/agent_policy_watch.test.ts#:~:text=mode) | 8.8.0 | -| | [security.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/server/services/api_keys/security.ts#:~:text=authc), [security.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/server/services/security/security.ts#:~:text=authc), [transform_api_keys.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/server/services/api_keys/transform_api_keys.ts#:~:text=authc), [handlers.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/server/routes/epm/handlers.ts#:~:text=authc), [handlers.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/server/routes/epm/handlers.ts#:~:text=authc), [handlers.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/server/routes/epm/handlers.ts#:~:text=authc), [handlers.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/server/routes/epm/handlers.ts#:~:text=authc), [handlers.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/server/routes/epm/handlers.ts#:~:text=authc), [handlers.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/server/routes/agent_policy/handlers.ts#:~:text=authc), [handlers.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/server/routes/agent_policy/handlers.ts#:~:text=authc)+ 36 more | - | +| | [security.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/server/services/api_keys/security.ts#:~:text=authc), [transform_api_keys.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/server/services/api_keys/transform_api_keys.ts#:~:text=authc), [fleet_server_policies_enrollment_keys.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/server/services/setup/fleet_server_policies_enrollment_keys.ts#:~:text=authc), [handlers.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/server/routes/setup/handlers.ts#:~:text=authc), [handlers.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/server/routes/setup/handlers.test.ts#:~:text=authc), [handlers.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/server/routes/setup/handlers.test.ts#:~:text=authc), [handlers.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/server/routes/setup/handlers.test.ts#:~:text=authc), [security.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/server/services/api_keys/security.ts#:~:text=authc), [transform_api_keys.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/server/services/api_keys/transform_api_keys.ts#:~:text=authc), [fleet_server_policies_enrollment_keys.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/server/services/setup/fleet_server_policies_enrollment_keys.ts#:~:text=authc)+ 4 more | - | | | [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/integrations/index.tsx#:~:text=appBasePath) | 8.8.0 | | | [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/server/saved_objects/index.ts#:~:text=migrations), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/server/saved_objects/index.ts#:~:text=migrations), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/server/saved_objects/index.ts#:~:text=migrations), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/server/saved_objects/index.ts#:~:text=migrations), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/server/saved_objects/index.ts#:~:text=migrations) | - | | | [audit_logging.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/server/services/audit_logging.ts#:~:text=audit), [audit_logging.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/server/services/audit_logging.ts#:~:text=audit) | - | @@ -1154,7 +1144,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [osquery_managed_policy_create_import_extension.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/osquery/public/fleet_integration/osquery_managed_policy_create_import_extension.tsx#:~:text=policy_id), [osquery_managed_policy_create_import_extension.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/osquery/public/fleet_integration/osquery_managed_policy_create_import_extension.tsx#:~:text=policy_id), [osquery_managed_policy_create_import_extension.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/osquery/public/fleet_integration/osquery_managed_policy_create_import_extension.tsx#:~:text=policy_id), [osquery_managed_policy_create_import_extension.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/osquery/public/fleet_integration/osquery_managed_policy_create_import_extension.tsx#:~:text=policy_id), [osquery_managed_policy_create_import_extension.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/osquery/public/fleet_integration/osquery_managed_policy_create_import_extension.tsx#:~:text=policy_id), [osquery_managed_policy_create_import_extension.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/osquery/public/fleet_integration/osquery_managed_policy_create_import_extension.tsx#:~:text=policy_id), [osquery_managed_policy_create_import_extension.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/osquery/public/fleet_integration/osquery_managed_policy_create_import_extension.tsx#:~:text=policy_id), [osquery_managed_policy_create_import_extension.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/osquery/public/fleet_integration/osquery_managed_policy_create_import_extension.tsx#:~:text=policy_id), [osquery_managed_policy_create_import_extension.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/osquery/public/fleet_integration/osquery_managed_policy_create_import_extension.tsx#:~:text=policy_id) | - | | | [osquery_managed_policy_create_import_extension.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/osquery/public/fleet_integration/osquery_managed_policy_create_import_extension.tsx#:~:text=policy_id), [osquery_managed_policy_create_import_extension.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/osquery/public/fleet_integration/osquery_managed_policy_create_import_extension.tsx#:~:text=policy_id), [osquery_managed_policy_create_import_extension.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/osquery/public/fleet_integration/osquery_managed_policy_create_import_extension.tsx#:~:text=policy_id), [osquery_managed_policy_create_import_extension.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/osquery/public/fleet_integration/osquery_managed_policy_create_import_extension.tsx#:~:text=policy_id), [osquery_managed_policy_create_import_extension.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/osquery/public/fleet_integration/osquery_managed_policy_create_import_extension.tsx#:~:text=policy_id), [osquery_managed_policy_create_import_extension.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/osquery/public/fleet_integration/osquery_managed_policy_create_import_extension.tsx#:~:text=policy_id), [osquery_managed_policy_create_import_extension.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/osquery/public/fleet_integration/osquery_managed_policy_create_import_extension.tsx#:~:text=policy_id), [osquery_managed_policy_create_import_extension.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/osquery/public/fleet_integration/osquery_managed_policy_create_import_extension.tsx#:~:text=policy_id), [osquery_managed_policy_create_import_extension.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/osquery/public/fleet_integration/osquery_managed_policy_create_import_extension.tsx#:~:text=policy_id) | - | | | [create_action_service.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/osquery/server/handlers/action/create_action_service.ts#:~:text=license%24) | 8.8.0 | -| | [create_live_query_route.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/osquery/server/routes/live_query/create_live_query_route.ts#:~:text=authc), [create_saved_query_route.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/osquery/server/routes/saved_query/create_saved_query_route.ts#:~:text=authc), [update_saved_query_route.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/osquery/server/routes/saved_query/update_saved_query_route.ts#:~:text=authc), [create_pack_route.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/osquery/server/routes/pack/create_pack_route.ts#:~:text=authc), [update_pack_route.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/osquery/server/routes/pack/update_pack_route.ts#:~:text=authc), [update_assets_route.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/osquery/server/routes/asset/update_assets_route.ts#:~:text=authc), [create_live_query_route.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/osquery/server/routes/live_query/create_live_query_route.ts#:~:text=authc), [create_saved_query_route.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/osquery/server/routes/saved_query/create_saved_query_route.ts#:~:text=authc), [update_saved_query_route.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/osquery/server/routes/saved_query/update_saved_query_route.ts#:~:text=authc), [create_pack_route.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/osquery/server/routes/pack/create_pack_route.ts#:~:text=authc)+ 2 more | - | | | [add_to_timeline_button.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/osquery/public/timelines/add_to_timeline_button.tsx#:~:text=getHoverActions) | - | @@ -1197,7 +1186,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| -| | [get_user.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/reporting/server/routes/common/get_user.ts#:~:text=authc), [get_user.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/reporting/server/routes/common/get_user.ts#:~:text=authc) | - | | | [core.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/reporting/server/core.ts#:~:text=CsvSearchSourceImmediateExportType), [core.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/reporting/server/core.ts#:~:text=CsvSearchSourceImmediateExportType) | - | | | [csv_searchsource_immediate.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/reporting/server/routes/internal/generate/csv_searchsource_immediate.ts#:~:text=JobParamsDownloadCSV), [csv_searchsource_immediate.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/reporting/server/routes/internal/generate/csv_searchsource_immediate.ts#:~:text=JobParamsDownloadCSV) | - | | | [csv_searchsource_immediate.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/reporting/server/routes/internal/generate/csv_searchsource_immediate.ts#:~:text=CSV_SEARCHSOURCE_IMMEDIATE_TYPE), [csv_searchsource_immediate.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/reporting/server/routes/internal/generate/csv_searchsource_immediate.ts#:~:text=CSV_SEARCHSOURCE_IMMEDIATE_TYPE), [csv_searchsource_immediate.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/reporting/server/routes/internal/generate/csv_searchsource_immediate.ts#:~:text=CSV_SEARCHSOURCE_IMMEDIATE_TYPE) | - | diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index dabdf41be221b..262ba3cdad4b1 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index 1ef3cf24bdccb..634925f6c4cdb 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-06-27 +date: 2024-06-29 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 0d8cbc70a4775..4db0306b7ff9e 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-06-27 +date: 2024-06-29 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 c6952e00544b8..ca06ec77a80c8 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-06-27 +date: 2024-06-29 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 308ae984ea93c..ea4997dad852f 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-06-27 +date: 2024-06-29 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 e6fd4d6be3cd5..35f72a116d98c 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ecsDataQualityDashboard'] --- import ecsDataQualityDashboardObj from './ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/elastic_assistant.devdocs.json b/api_docs/elastic_assistant.devdocs.json index 595bd103d2f58..a792d44c94558 100644 --- a/api_docs/elastic_assistant.devdocs.json +++ b/api_docs/elastic_assistant.devdocs.json @@ -1816,11 +1816,11 @@ "description": [], "signature": [ { - "pluginId": "@kbn/security-plugin-types-server", - "scope": "server", - "docId": "kibKbnSecurityPluginTypesServerPluginApi", - "section": "def-server.SecurityPluginStart", - "text": "SecurityPluginStart" + "pluginId": "@kbn/core-security-server", + "scope": "common", + "docId": "kibKbnCoreSecurityServerPluginApi", + "section": "def-common.SecurityServiceStart", + "text": "SecurityServiceStart" } ], "path": "x-pack/plugins/elastic_assistant/server/types.ts", diff --git a/api_docs/elastic_assistant.mdx b/api_docs/elastic_assistant.mdx index e716b48cba4fd..dda65919d84e2 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'elasticAssistant'] --- import elasticAssistantObj from './elastic_assistant.devdocs.json'; diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx index 147996e6c925b..8eafcadc8a559 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-06-27 +date: 2024-06-29 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 37268cd6229b9..e66f58378f558 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-06-27 +date: 2024-06-29 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 9c7ed9bf26be7..0ed1b3aca84c9 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-06-27 +date: 2024-06-29 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 caae50998fc8f..feab7d374a581 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'enterpriseSearch'] --- import enterpriseSearchObj from './enterprise_search.devdocs.json'; diff --git a/api_docs/entity_manager.mdx b/api_docs/entity_manager.mdx index d8eb57aaf72b6..a790ade29a99e 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-06-27 +date: 2024-06-29 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 10f725aa3acb2..6c7f94839d6aa 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared'] --- import esUiSharedObj from './es_ui_shared.devdocs.json'; diff --git a/api_docs/esql_data_grid.mdx b/api_docs/esql_data_grid.mdx index 035fac0f319af..28efc8b720044 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-06-27 +date: 2024-06-29 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 205df0fcc5305..65b449bdb767d 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-06-27 +date: 2024-06-29 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 2f7322b55f1b2..414f209ba6f5e 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-06-27 +date: 2024-06-29 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 f793dffed2ac2..4894ce086df58 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-06-27 +date: 2024-06-29 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 536adaf9273ce..fa8179ad726fb 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-06-27 +date: 2024-06-29 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 32c57475399d9..56d5db1464e50 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-06-27 +date: 2024-06-29 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 5bbd4d6e1ecf6..052de0e008e63 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-06-27 +date: 2024-06-29 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 899a07e8ab348..897a2a11e950d 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-06-27 +date: 2024-06-29 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 8ba143891d3d9..3ad2a8ae8451b 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-06-27 +date: 2024-06-29 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 cd225efefd743..7a0c9b682c053 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-06-27 +date: 2024-06-29 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 d37d280043e95..164c987b26cc4 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-06-27 +date: 2024-06-29 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 f3ac55cf74d30..049f560a73d0d 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-06-27 +date: 2024-06-29 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 24521e766817e..093efc63455a2 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-06-27 +date: 2024-06-29 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 05e36aa6a31ab..ac624eed1d931 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-06-27 +date: 2024-06-29 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 d7c8619e0239d..a51d9b88d62ab 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-06-27 +date: 2024-06-29 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 fc053252dc05c..8e0403a10bb83 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-06-27 +date: 2024-06-29 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 bfa8013ae1480..55b8815e1004c 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-06-27 +date: 2024-06-29 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 68dbe5eaf199e..c86f4f8724173 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-06-27 +date: 2024-06-29 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 d5ae939161bc6..514809c08f3e3 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-06-27 +date: 2024-06-29 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 f5fe66a117d2a..70bf4fb43fc37 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-06-27 +date: 2024-06-29 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 4e5edb9454123..59c254f6616dc 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-06-27 +date: 2024-06-29 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 34296a316a589..e28e443d2afea 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-06-27 +date: 2024-06-29 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 0068ee88bead0..99f3196ca281e 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-06-27 +date: 2024-06-29 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 5a9cfa59f0864..b0650d780281a 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'files'] --- import filesObj from './files.devdocs.json'; diff --git a/api_docs/files_management.devdocs.json b/api_docs/files_management.devdocs.json index 5568b8b1261fa..54ee62046a588 100644 --- a/api_docs/files_management.devdocs.json +++ b/api_docs/files_management.devdocs.json @@ -22,6 +22,21 @@ "interfaces": [], "enums": [], "misc": [ + { + "parentPluginId": "filesManagement", + "id": "def-common.LIST_BREADCRUMB", + "type": "Array", + "tags": [], + "label": "LIST_BREADCRUMB", + "description": [], + "signature": [ + "{ text: string; href: string; }[]" + ], + "path": "src/plugins/files_management/common/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "filesManagement", "id": "def-common.PLUGIN_ID", diff --git a/api_docs/files_management.mdx b/api_docs/files_management.mdx index 4606f16deb838..6e9bedec2a5d3 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'filesManagement'] --- import filesManagementObj from './files_management.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 | |-------------------|-----------|------------------------|-----------------| -| 2 | 0 | 2 | 0 | +| 3 | 0 | 3 | 0 | ## Common diff --git a/api_docs/fleet.mdx b/api_docs/fleet.mdx index 5236dda7c8ac3..ee18e4394bb9b 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fleet'] --- import fleetObj from './fleet.devdocs.json'; diff --git a/api_docs/global_search.mdx b/api_docs/global_search.mdx index 889b0128f8d95..2e1c3588a0e34 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-06-27 +date: 2024-06-29 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 dce0b82766d09..73b731b5fd860 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-06-27 +date: 2024-06-29 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 6b33a11afcb11..3c61ca3ebccc0 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-06-27 +date: 2024-06-29 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 186e014ff5948..6e814b153948c 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-06-27 +date: 2024-06-29 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 e894d94d70ec5..0216a4b684667 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexLifecycleManagement'] --- import indexLifecycleManagementObj from './index_lifecycle_management.devdocs.json'; diff --git a/api_docs/index_management.mdx b/api_docs/index_management.mdx index e0bbe031e3208..9c54a7acdea2a 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexManagement'] --- import indexManagementObj from './index_management.devdocs.json'; diff --git a/api_docs/infra.mdx b/api_docs/infra.mdx index 7813b51666117..3c804fc032bba 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-06-27 +date: 2024-06-29 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 c06511a91b596..349a375fb3e86 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-06-27 +date: 2024-06-29 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 f70b25e8cbdc4..d4d820de4be23 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inspector'] --- import inspectorObj from './inspector.devdocs.json'; diff --git a/api_docs/integration_assistant.devdocs.json b/api_docs/integration_assistant.devdocs.json index b4bb9d3b359c9..6611c8b640018 100644 --- a/api_docs/integration_assistant.devdocs.json +++ b/api_docs/integration_assistant.devdocs.json @@ -119,7 +119,7 @@ "label": "BuildIntegrationRequestBody", "description": [], "signature": [ - "{ integration: { name: string; title: string; description: string; dataStreams: { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws_cloudwatch\" | \"aws_s3\" | \"azure_blob_storage\" | \"azure_eventhub\" | \"cloudfoundry\" | \"filestream\" | \"gcp_pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", + "{ integration: { name: string; title: string; description: string; dataStreams: { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws_cloudwatch\" | \"aws_s3\" | \"azure_blob_storage\" | \"azure_eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp_pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -267,7 +267,7 @@ "label": "CheckPipelineResponse", "description": [], "signature": [ - "{ pipelineResults: {}[]; errors?: {}[] | undefined; }" + "{ results: { docs: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; }; }" ], "path": "x-pack/plugins/integration_assistant/common/api/check_pipeline/check_pipeline.ts", "deprecated": false, @@ -284,7 +284,7 @@ "\nThe dataStream object." ], "signature": [ - "{ name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws_cloudwatch\" | \"aws_s3\" | \"azure_blob_storage\" | \"azure_eventhub\" | \"cloudfoundry\" | \"filestream\" | \"gcp_pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", + "{ name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws_cloudwatch\" | \"aws_s3\" | \"azure_blob_storage\" | \"azure_eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp_pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -411,7 +411,7 @@ "\nThe input type for the dataStream to pull logs from." ], "signature": [ - "\"kafka\" | \"aws_cloudwatch\" | \"aws_s3\" | \"azure_blob_storage\" | \"azure_eventhub\" | \"cloudfoundry\" | \"filestream\" | \"gcp_pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\"" + "\"kafka\" | \"aws_cloudwatch\" | \"aws_s3\" | \"azure_blob_storage\" | \"azure_eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp_pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\"" ], "path": "x-pack/plugins/integration_assistant/common/api/model/common_attributes.ts", "deprecated": false, @@ -428,7 +428,7 @@ "\nThe integration object." ], "signature": [ - "{ name: string; title: string; description: string; dataStreams: { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws_cloudwatch\" | \"aws_s3\" | \"azure_blob_storage\" | \"azure_eventhub\" | \"cloudfoundry\" | \"filestream\" | \"gcp_pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", + "{ name: string; title: string; description: string; dataStreams: { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws_cloudwatch\" | \"aws_s3\" | \"azure_blob_storage\" | \"azure_eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp_pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -625,7 +625,7 @@ "label": "BuildIntegrationRequestBody", "description": [], "signature": [ - "Zod.ZodObject<{ integration: Zod.ZodObject<{ name: Zod.ZodString; title: Zod.ZodString; description: Zod.ZodString; dataStreams: Zod.ZodArray, \"many\">; rawSamples: Zod.ZodArray; pipeline: Zod.ZodObject<{ name: Zod.ZodOptional; description: Zod.ZodOptional; version: Zod.ZodOptional; processors: Zod.ZodArray, \"many\">; rawSamples: Zod.ZodArray; pipeline: Zod.ZodObject<{ name: Zod.ZodOptional; description: Zod.ZodOptional; version: Zod.ZodOptional; processors: Zod.ZodArray; docs: Zod.ZodArray, Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws_cloudwatch\" | \"aws_s3\" | \"azure_blob_storage\" | \"azure_eventhub\" | \"cloudfoundry\" | \"filestream\" | \"gcp_pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", + "[] | undefined; }>; docs: Zod.ZodArray, Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws_cloudwatch\" | \"aws_s3\" | \"azure_blob_storage\" | \"azure_eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp_pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -705,7 +705,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; }, { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws_cloudwatch\" | \"aws_s3\" | \"azure_blob_storage\" | \"azure_eventhub\" | \"cloudfoundry\" | \"filestream\" | \"gcp_pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", + "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; }, { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws_cloudwatch\" | \"aws_s3\" | \"azure_blob_storage\" | \"azure_eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp_pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -721,7 +721,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }; docs: Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; }>, \"many\">; logo: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { name: string; title: string; description: string; dataStreams: { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws_cloudwatch\" | \"aws_s3\" | \"azure_blob_storage\" | \"azure_eventhub\" | \"cloudfoundry\" | \"filestream\" | \"gcp_pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", + "[] | undefined; }; docs: Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; }>, \"many\">; logo: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { name: string; title: string; description: string; dataStreams: { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws_cloudwatch\" | \"aws_s3\" | \"azure_blob_storage\" | \"azure_eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp_pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -737,7 +737,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; }[]; logo?: string | undefined; }, { name: string; title: string; description: string; dataStreams: { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws_cloudwatch\" | \"aws_s3\" | \"azure_blob_storage\" | \"azure_eventhub\" | \"cloudfoundry\" | \"filestream\" | \"gcp_pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", + "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; }[]; logo?: string | undefined; }, { name: string; title: string; description: string; dataStreams: { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws_cloudwatch\" | \"aws_s3\" | \"azure_blob_storage\" | \"azure_eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp_pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -753,7 +753,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }; docs: Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; }[]; logo?: string | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { integration: { name: string; title: string; description: string; dataStreams: { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws_cloudwatch\" | \"aws_s3\" | \"azure_blob_storage\" | \"azure_eventhub\" | \"cloudfoundry\" | \"filestream\" | \"gcp_pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", + "[] | undefined; }; docs: Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; }[]; logo?: string | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { integration: { name: string; title: string; description: string; dataStreams: { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws_cloudwatch\" | \"aws_s3\" | \"azure_blob_storage\" | \"azure_eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp_pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -769,7 +769,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; }[]; logo?: string | undefined; }; }, { integration: { name: string; title: string; description: string; dataStreams: { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws_cloudwatch\" | \"aws_s3\" | \"azure_blob_storage\" | \"azure_eventhub\" | \"cloudfoundry\" | \"filestream\" | \"gcp_pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", + "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; }[]; logo?: string | undefined; }; }, { integration: { name: string; title: string; description: string; dataStreams: { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws_cloudwatch\" | \"aws_s3\" | \"azure_blob_storage\" | \"azure_eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp_pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -1165,7 +1165,7 @@ "label": "CheckPipelineResponse", "description": [], "signature": [ - "Zod.ZodObject<{ pipelineResults: Zod.ZodArray, \"many\">; errors: Zod.ZodOptional, \"many\">>; }, \"strip\", Zod.ZodTypeAny, { pipelineResults: {}[]; errors?: {}[] | undefined; }, { pipelineResults: {}[]; errors?: {}[] | undefined; }>" + "Zod.ZodObject<{ results: Zod.ZodObject<{ docs: Zod.ZodArray, Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { docs: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; }, { docs: Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; }>; }, \"strip\", Zod.ZodTypeAny, { results: { docs: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; }; }, { results: { docs: Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; }; }>" ], "path": "x-pack/plugins/integration_assistant/common/api/check_pipeline/check_pipeline.ts", "deprecated": false, @@ -1180,7 +1180,7 @@ "label": "DataStream", "description": [], "signature": [ - "Zod.ZodObject<{ name: Zod.ZodString; title: Zod.ZodString; description: Zod.ZodString; inputTypes: Zod.ZodArray, \"many\">; rawSamples: Zod.ZodArray; pipeline: Zod.ZodObject<{ name: Zod.ZodOptional; description: Zod.ZodOptional; version: Zod.ZodOptional; processors: Zod.ZodArray, \"many\">; rawSamples: Zod.ZodArray; pipeline: Zod.ZodObject<{ name: Zod.ZodOptional; description: Zod.ZodOptional; version: Zod.ZodOptional; processors: Zod.ZodArray; docs: Zod.ZodArray, Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws_cloudwatch\" | \"aws_s3\" | \"azure_blob_storage\" | \"azure_eventhub\" | \"cloudfoundry\" | \"filestream\" | \"gcp_pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", + "[] | undefined; }>; docs: Zod.ZodArray, Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws_cloudwatch\" | \"aws_s3\" | \"azure_blob_storage\" | \"azure_eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp_pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -1260,7 +1260,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; }, { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws_cloudwatch\" | \"aws_s3\" | \"azure_blob_storage\" | \"azure_eventhub\" | \"cloudfoundry\" | \"filestream\" | \"gcp_pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", + "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; }, { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws_cloudwatch\" | \"aws_s3\" | \"azure_blob_storage\" | \"azure_eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp_pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -1495,7 +1495,7 @@ "label": "InputType", "description": [], "signature": [ - "Zod.ZodEnum<[\"aws_cloudwatch\", \"aws_s3\", \"azure_blob_storage\", \"azure_eventhub\", \"cloudfoundry\", \"filestream\", \"gcp_pubsub\", \"gcs\", \"http_endpoint\", \"journald\", \"kafka\", \"tcp\", \"udp\"]>" + "Zod.ZodEnum<[\"aws_cloudwatch\", \"aws_s3\", \"azure_blob_storage\", \"azure_eventhub\", \"cel\", \"cloudfoundry\", \"filestream\", \"gcp_pubsub\", \"gcs\", \"http_endpoint\", \"journald\", \"kafka\", \"tcp\", \"udp\"]>" ], "path": "x-pack/plugins/integration_assistant/common/api/model/common_attributes.ts", "deprecated": false, @@ -1510,7 +1510,7 @@ "label": "Integration", "description": [], "signature": [ - "Zod.ZodObject<{ name: Zod.ZodString; title: Zod.ZodString; description: Zod.ZodString; dataStreams: Zod.ZodArray, \"many\">; rawSamples: Zod.ZodArray; pipeline: Zod.ZodObject<{ name: Zod.ZodOptional; description: Zod.ZodOptional; version: Zod.ZodOptional; processors: Zod.ZodArray, \"many\">; rawSamples: Zod.ZodArray; pipeline: Zod.ZodObject<{ name: Zod.ZodOptional; description: Zod.ZodOptional; version: Zod.ZodOptional; processors: Zod.ZodArray; docs: Zod.ZodArray, Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws_cloudwatch\" | \"aws_s3\" | \"azure_blob_storage\" | \"azure_eventhub\" | \"cloudfoundry\" | \"filestream\" | \"gcp_pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", + "[] | undefined; }>; docs: Zod.ZodArray, Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws_cloudwatch\" | \"aws_s3\" | \"azure_blob_storage\" | \"azure_eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp_pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -1590,7 +1590,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; }, { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws_cloudwatch\" | \"aws_s3\" | \"azure_blob_storage\" | \"azure_eventhub\" | \"cloudfoundry\" | \"filestream\" | \"gcp_pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", + "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; }, { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws_cloudwatch\" | \"aws_s3\" | \"azure_blob_storage\" | \"azure_eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp_pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -1606,7 +1606,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }; docs: Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; }>, \"many\">; logo: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { name: string; title: string; description: string; dataStreams: { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws_cloudwatch\" | \"aws_s3\" | \"azure_blob_storage\" | \"azure_eventhub\" | \"cloudfoundry\" | \"filestream\" | \"gcp_pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", + "[] | undefined; }; docs: Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; }>, \"many\">; logo: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { name: string; title: string; description: string; dataStreams: { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws_cloudwatch\" | \"aws_s3\" | \"azure_blob_storage\" | \"azure_eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp_pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -1622,7 +1622,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; }[]; logo?: string | undefined; }, { name: string; title: string; description: string; dataStreams: { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws_cloudwatch\" | \"aws_s3\" | \"azure_blob_storage\" | \"azure_eventhub\" | \"cloudfoundry\" | \"filestream\" | \"gcp_pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", + "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; }[]; logo?: string | undefined; }, { name: string; title: string; description: string; dataStreams: { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws_cloudwatch\" | \"aws_s3\" | \"azure_blob_storage\" | \"azure_eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp_pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", diff --git a/api_docs/integration_assistant.mdx b/api_docs/integration_assistant.mdx index 37de8c8d9adaa..20347bdcc388f 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-06-27 +date: 2024-06-29 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 3690167b55961..b8cbbd3d78ac5 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'interactiveSetup'] --- import interactiveSetupObj from './interactive_setup.devdocs.json'; diff --git a/api_docs/investigate.mdx b/api_docs/investigate.mdx index 9efa40480cb39..0b16f5cdb9688 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'investigate'] --- import investigateObj from './investigate.devdocs.json'; diff --git a/api_docs/kbn_ace.mdx b/api_docs/kbn_ace.mdx index ba097c91cb44f..9a093415123c1 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-06-27 +date: 2024-06-29 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 c8ea311c51026..c7ac1d4316a4c 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-06-27 +date: 2024-06-29 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 b0195e8e8ab01..225abcce73957 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-06-27 +date: 2024-06-29 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 5ae4be250983c..4a27280f5b670 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-06-27 +date: 2024-06-29 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 bf4fc03851dfa..e64ef42308889 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-06-27 +date: 2024-06-29 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 f1b06ea211d20..48efda58caf84 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-06-27 +date: 2024-06-29 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 46f968f337c53..b5406dd3f2604 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-06-27 +date: 2024-06-29 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 06bfae59c2764..65c24075b8a05 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-06-27 +date: 2024-06-29 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 8ea5a593ca06e..1767708808e4a 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-06-27 +date: 2024-06-29 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.devdocs.json b/api_docs/kbn_alerts_as_data_utils.devdocs.json index 286db5a809802..32e9d70a1a275 100644 --- a/api_docs/kbn_alerts_as_data_utils.devdocs.json +++ b/api_docs/kbn_alerts_as_data_utils.devdocs.json @@ -196,7 +196,7 @@ "label": "AADAlert", "description": [], "signature": [ - "({ '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; }) | ({} & {} & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; }) | ({} & { 'agent.name'?: string | undefined; 'container.id'?: string | undefined; 'error.grouping_key'?: string | undefined; 'error.grouping_name'?: string | undefined; 'host.name'?: string | undefined; 'kibana.alert.context'?: unknown; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | number | undefined; 'kibana.alert.evaluation.values'?: (string | number)[] | undefined; 'kibana.alert.group'?: { field?: string[] | undefined; value?: string[] | undefined; }[] | undefined; labels?: unknown; 'processor.event'?: string | undefined; 'service.environment'?: string | undefined; 'service.language.name'?: string | undefined; 'service.name'?: string | undefined; 'transaction.name'?: string | undefined; 'transaction.type'?: string | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }) | ({} & { 'kibana.alert.context'?: unknown; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | number | undefined; 'kibana.alert.evaluation.values'?: (string | number)[] | undefined; 'kibana.alert.group'?: { field?: string[] | undefined; value?: string[] | undefined; }[] | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & { '@timestamp': string | number; 'ecs.version': string; } & { 'agent.build.original'?: string | undefined; 'agent.ephemeral_id'?: string | undefined; 'agent.id'?: string | undefined; 'agent.name'?: string | undefined; 'agent.type'?: string | undefined; 'agent.version'?: string | undefined; 'client.address'?: string | undefined; 'client.as.number'?: string | number | undefined; 'client.as.organization.name'?: string | undefined; 'client.bytes'?: string | number | undefined; 'client.domain'?: string | undefined; 'client.geo.city_name'?: string | undefined; 'client.geo.continent_code'?: string | undefined; 'client.geo.continent_name'?: string | undefined; 'client.geo.country_iso_code'?: string | undefined; 'client.geo.country_name'?: string | undefined; 'client.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'client.geo.name'?: string | undefined; 'client.geo.postal_code'?: string | undefined; 'client.geo.region_iso_code'?: string | undefined; 'client.geo.region_name'?: string | undefined; 'client.geo.timezone'?: string | undefined; 'client.ip'?: string | undefined; 'client.mac'?: string | undefined; 'client.nat.ip'?: string | undefined; 'client.nat.port'?: string | number | undefined; 'client.packets'?: string | number | undefined; 'client.port'?: string | number | undefined; 'client.registered_domain'?: string | undefined; 'client.subdomain'?: string | undefined; 'client.top_level_domain'?: string | undefined; 'client.user.domain'?: string | undefined; 'client.user.email'?: string | undefined; 'client.user.full_name'?: string | undefined; 'client.user.group.domain'?: string | undefined; 'client.user.group.id'?: string | undefined; 'client.user.group.name'?: string | undefined; 'client.user.hash'?: string | undefined; 'client.user.id'?: string | undefined; 'client.user.name'?: string | undefined; 'client.user.roles'?: string[] | undefined; 'cloud.account.id'?: string | undefined; 'cloud.account.name'?: string | undefined; 'cloud.availability_zone'?: string | undefined; 'cloud.instance.id'?: string | undefined; 'cloud.instance.name'?: string | undefined; 'cloud.machine.type'?: string | undefined; 'cloud.origin.account.id'?: string | undefined; 'cloud.origin.account.name'?: string | undefined; 'cloud.origin.availability_zone'?: string | undefined; 'cloud.origin.instance.id'?: string | undefined; 'cloud.origin.instance.name'?: string | undefined; 'cloud.origin.machine.type'?: string | undefined; 'cloud.origin.project.id'?: string | undefined; 'cloud.origin.project.name'?: string | undefined; 'cloud.origin.provider'?: string | undefined; 'cloud.origin.region'?: string | undefined; 'cloud.origin.service.name'?: string | undefined; 'cloud.project.id'?: string | undefined; 'cloud.project.name'?: string | undefined; 'cloud.provider'?: string | undefined; 'cloud.region'?: string | undefined; 'cloud.service.name'?: string | undefined; 'cloud.target.account.id'?: string | undefined; 'cloud.target.account.name'?: string | undefined; 'cloud.target.availability_zone'?: string | undefined; 'cloud.target.instance.id'?: string | undefined; 'cloud.target.instance.name'?: string | undefined; 'cloud.target.machine.type'?: string | undefined; 'cloud.target.project.id'?: string | undefined; 'cloud.target.project.name'?: string | undefined; 'cloud.target.provider'?: string | undefined; 'cloud.target.region'?: string | undefined; 'cloud.target.service.name'?: string | undefined; 'container.cpu.usage'?: string | number | undefined; 'container.disk.read.bytes'?: string | number | undefined; 'container.disk.write.bytes'?: string | number | undefined; 'container.id'?: string | undefined; 'container.image.hash.all'?: string[] | undefined; 'container.image.name'?: string | undefined; 'container.image.tag'?: string[] | undefined; 'container.labels'?: unknown; 'container.memory.usage'?: string | number | undefined; 'container.name'?: string | undefined; 'container.network.egress.bytes'?: string | number | undefined; 'container.network.ingress.bytes'?: string | number | undefined; 'container.runtime'?: string | undefined; 'container.security_context.privileged'?: boolean | undefined; 'destination.address'?: string | undefined; 'destination.as.number'?: string | number | undefined; 'destination.as.organization.name'?: string | undefined; 'destination.bytes'?: string | number | undefined; 'destination.domain'?: string | undefined; 'destination.geo.city_name'?: string | undefined; 'destination.geo.continent_code'?: string | undefined; 'destination.geo.continent_name'?: string | undefined; 'destination.geo.country_iso_code'?: string | undefined; 'destination.geo.country_name'?: string | undefined; 'destination.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'destination.geo.name'?: string | undefined; 'destination.geo.postal_code'?: string | undefined; 'destination.geo.region_iso_code'?: string | undefined; 'destination.geo.region_name'?: string | undefined; 'destination.geo.timezone'?: string | undefined; 'destination.ip'?: string | undefined; 'destination.mac'?: string | undefined; 'destination.nat.ip'?: string | undefined; 'destination.nat.port'?: string | number | undefined; 'destination.packets'?: string | number | undefined; 'destination.port'?: string | number | undefined; 'destination.registered_domain'?: string | undefined; 'destination.subdomain'?: string | undefined; 'destination.top_level_domain'?: string | undefined; 'destination.user.domain'?: string | undefined; 'destination.user.email'?: string | undefined; 'destination.user.full_name'?: string | undefined; 'destination.user.group.domain'?: string | undefined; 'destination.user.group.id'?: string | undefined; 'destination.user.group.name'?: string | undefined; 'destination.user.hash'?: string | undefined; 'destination.user.id'?: string | undefined; 'destination.user.name'?: string | undefined; 'destination.user.roles'?: string[] | undefined; 'device.id'?: string | undefined; 'device.manufacturer'?: string | undefined; 'device.model.identifier'?: string | undefined; 'device.model.name'?: string | undefined; 'dll.code_signature.digest_algorithm'?: string | undefined; 'dll.code_signature.exists'?: boolean | undefined; 'dll.code_signature.signing_id'?: string | undefined; 'dll.code_signature.status'?: string | undefined; 'dll.code_signature.subject_name'?: string | undefined; 'dll.code_signature.team_id'?: string | undefined; 'dll.code_signature.timestamp'?: string | number | undefined; 'dll.code_signature.trusted'?: boolean | undefined; 'dll.code_signature.valid'?: boolean | undefined; 'dll.hash.md5'?: string | undefined; 'dll.hash.sha1'?: string | undefined; 'dll.hash.sha256'?: string | undefined; 'dll.hash.sha384'?: string | undefined; 'dll.hash.sha512'?: string | undefined; 'dll.hash.ssdeep'?: string | undefined; 'dll.hash.tlsh'?: string | undefined; 'dll.name'?: string | undefined; 'dll.path'?: string | undefined; 'dll.pe.architecture'?: string | undefined; 'dll.pe.company'?: string | undefined; 'dll.pe.description'?: string | undefined; 'dll.pe.file_version'?: string | undefined; 'dll.pe.go_import_hash'?: string | undefined; 'dll.pe.go_imports'?: unknown; 'dll.pe.go_imports_names_entropy'?: string | number | undefined; 'dll.pe.go_imports_names_var_entropy'?: string | number | undefined; 'dll.pe.go_stripped'?: boolean | undefined; 'dll.pe.imphash'?: string | undefined; 'dll.pe.import_hash'?: string | undefined; 'dll.pe.imports'?: unknown[] | undefined; 'dll.pe.imports_names_entropy'?: string | number | undefined; 'dll.pe.imports_names_var_entropy'?: string | number | undefined; 'dll.pe.original_file_name'?: string | undefined; 'dll.pe.pehash'?: string | undefined; 'dll.pe.product'?: string | undefined; 'dll.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'dns.answers'?: { class?: string | undefined; data?: string | undefined; name?: string | undefined; ttl?: string | number | undefined; type?: string | undefined; }[] | undefined; 'dns.header_flags'?: string[] | undefined; 'dns.id'?: string | undefined; 'dns.op_code'?: string | undefined; 'dns.question.class'?: string | undefined; 'dns.question.name'?: string | undefined; 'dns.question.registered_domain'?: string | undefined; 'dns.question.subdomain'?: string | undefined; 'dns.question.top_level_domain'?: string | undefined; 'dns.question.type'?: string | undefined; 'dns.resolved_ip'?: string[] | undefined; 'dns.response_code'?: string | undefined; 'dns.type'?: string | undefined; 'email.attachments'?: { 'file.extension'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.name'?: string | undefined; 'file.size'?: string | number | undefined; }[] | undefined; 'email.bcc.address'?: string[] | undefined; 'email.cc.address'?: string[] | undefined; 'email.content_type'?: string | undefined; 'email.delivery_timestamp'?: string | number | undefined; 'email.direction'?: string | undefined; 'email.from.address'?: string[] | undefined; 'email.local_id'?: string | undefined; 'email.message_id'?: string | undefined; 'email.origination_timestamp'?: string | number | undefined; 'email.reply_to.address'?: string[] | undefined; 'email.sender.address'?: string | undefined; 'email.subject'?: string | undefined; 'email.to.address'?: string[] | undefined; 'email.x_mailer'?: string | undefined; 'error.code'?: string | undefined; 'error.id'?: string | undefined; 'error.message'?: string | undefined; 'error.stack_trace'?: string | undefined; 'error.type'?: string | undefined; 'event.action'?: string | undefined; 'event.agent_id_status'?: string | undefined; 'event.category'?: string[] | undefined; 'event.code'?: string | undefined; 'event.created'?: string | number | undefined; 'event.dataset'?: string | undefined; 'event.duration'?: string | number | undefined; 'event.end'?: string | number | undefined; 'event.hash'?: string | undefined; 'event.id'?: string | undefined; 'event.ingested'?: string | number | undefined; 'event.kind'?: string | undefined; 'event.module'?: string | undefined; 'event.original'?: string | undefined; 'event.outcome'?: string | undefined; 'event.provider'?: string | undefined; 'event.reason'?: string | undefined; 'event.reference'?: string | undefined; 'event.risk_score'?: number | undefined; 'event.risk_score_norm'?: number | undefined; 'event.sequence'?: string | number | undefined; 'event.severity'?: string | number | undefined; 'event.start'?: string | number | undefined; 'event.timezone'?: string | undefined; 'event.type'?: string[] | undefined; 'event.url'?: string | undefined; 'faas.coldstart'?: boolean | undefined; 'faas.execution'?: string | undefined; 'faas.id'?: string | undefined; 'faas.name'?: string | undefined; 'faas.version'?: string | undefined; 'file.accessed'?: string | number | undefined; 'file.attributes'?: string[] | undefined; 'file.code_signature.digest_algorithm'?: string | undefined; 'file.code_signature.exists'?: boolean | undefined; 'file.code_signature.signing_id'?: string | undefined; 'file.code_signature.status'?: string | undefined; 'file.code_signature.subject_name'?: string | undefined; 'file.code_signature.team_id'?: string | undefined; 'file.code_signature.timestamp'?: string | number | undefined; 'file.code_signature.trusted'?: boolean | undefined; 'file.code_signature.valid'?: boolean | undefined; 'file.created'?: string | number | undefined; 'file.ctime'?: string | number | undefined; 'file.device'?: string | undefined; 'file.directory'?: string | undefined; 'file.drive_letter'?: string | undefined; 'file.elf.architecture'?: string | undefined; 'file.elf.byte_order'?: string | undefined; 'file.elf.cpu_type'?: string | undefined; 'file.elf.creation_date'?: string | number | undefined; 'file.elf.exports'?: unknown[] | undefined; 'file.elf.go_import_hash'?: string | undefined; 'file.elf.go_imports'?: unknown; 'file.elf.go_imports_names_entropy'?: string | number | undefined; 'file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'file.elf.go_stripped'?: boolean | undefined; 'file.elf.header.abi_version'?: string | undefined; 'file.elf.header.class'?: string | undefined; 'file.elf.header.data'?: string | undefined; 'file.elf.header.entrypoint'?: string | number | undefined; 'file.elf.header.object_version'?: string | undefined; 'file.elf.header.os_abi'?: string | undefined; 'file.elf.header.type'?: string | undefined; 'file.elf.header.version'?: string | undefined; 'file.elf.import_hash'?: string | undefined; 'file.elf.imports'?: unknown[] | undefined; 'file.elf.imports_names_entropy'?: string | number | undefined; 'file.elf.imports_names_var_entropy'?: string | number | undefined; 'file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'file.elf.shared_libraries'?: string[] | undefined; 'file.elf.telfhash'?: string | undefined; 'file.extension'?: string | undefined; 'file.fork_name'?: string | undefined; 'file.gid'?: string | undefined; 'file.group'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.inode'?: string | undefined; 'file.macho.go_import_hash'?: string | undefined; 'file.macho.go_imports'?: unknown; 'file.macho.go_imports_names_entropy'?: string | number | undefined; 'file.macho.go_imports_names_var_entropy'?: string | number | undefined; 'file.macho.go_stripped'?: boolean | undefined; 'file.macho.import_hash'?: string | undefined; 'file.macho.imports'?: unknown[] | undefined; 'file.macho.imports_names_entropy'?: string | number | undefined; 'file.macho.imports_names_var_entropy'?: string | number | undefined; 'file.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.macho.symhash'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.mode'?: string | undefined; 'file.mtime'?: string | number | undefined; 'file.name'?: string | undefined; 'file.owner'?: string | undefined; 'file.path'?: string | undefined; 'file.pe.architecture'?: string | undefined; 'file.pe.company'?: string | undefined; 'file.pe.description'?: string | undefined; 'file.pe.file_version'?: string | undefined; 'file.pe.go_import_hash'?: string | undefined; 'file.pe.go_imports'?: unknown; 'file.pe.go_imports_names_entropy'?: string | number | undefined; 'file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'file.pe.go_stripped'?: boolean | undefined; 'file.pe.imphash'?: string | undefined; 'file.pe.import_hash'?: string | undefined; 'file.pe.imports'?: unknown[] | undefined; 'file.pe.imports_names_entropy'?: string | number | undefined; 'file.pe.imports_names_var_entropy'?: string | number | undefined; 'file.pe.original_file_name'?: string | undefined; 'file.pe.pehash'?: string | undefined; 'file.pe.product'?: string | undefined; 'file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.size'?: string | number | undefined; 'file.target_path'?: string | undefined; 'file.type'?: string | undefined; 'file.uid'?: string | undefined; 'file.x509.alternative_names'?: string[] | undefined; 'file.x509.issuer.common_name'?: string[] | undefined; 'file.x509.issuer.country'?: string[] | undefined; 'file.x509.issuer.distinguished_name'?: string | undefined; 'file.x509.issuer.locality'?: string[] | undefined; 'file.x509.issuer.organization'?: string[] | undefined; 'file.x509.issuer.organizational_unit'?: string[] | undefined; 'file.x509.issuer.state_or_province'?: string[] | undefined; 'file.x509.not_after'?: string | number | undefined; 'file.x509.not_before'?: string | number | undefined; 'file.x509.public_key_algorithm'?: string | undefined; 'file.x509.public_key_curve'?: string | undefined; 'file.x509.public_key_exponent'?: string | number | undefined; 'file.x509.public_key_size'?: string | number | undefined; 'file.x509.serial_number'?: string | undefined; 'file.x509.signature_algorithm'?: string | undefined; 'file.x509.subject.common_name'?: string[] | undefined; 'file.x509.subject.country'?: string[] | undefined; 'file.x509.subject.distinguished_name'?: string | undefined; 'file.x509.subject.locality'?: string[] | undefined; 'file.x509.subject.organization'?: string[] | undefined; 'file.x509.subject.organizational_unit'?: string[] | undefined; 'file.x509.subject.state_or_province'?: string[] | undefined; 'file.x509.version_number'?: string | undefined; 'group.domain'?: string | undefined; 'group.id'?: string | undefined; 'group.name'?: string | undefined; 'host.architecture'?: string | undefined; 'host.boot.id'?: string | undefined; 'host.cpu.usage'?: string | number | undefined; 'host.disk.read.bytes'?: string | number | undefined; 'host.disk.write.bytes'?: string | number | undefined; 'host.domain'?: string | undefined; 'host.geo.city_name'?: string | undefined; 'host.geo.continent_code'?: string | undefined; 'host.geo.continent_name'?: string | undefined; 'host.geo.country_iso_code'?: string | undefined; 'host.geo.country_name'?: string | undefined; 'host.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'host.geo.name'?: string | undefined; 'host.geo.postal_code'?: string | undefined; 'host.geo.region_iso_code'?: string | undefined; 'host.geo.region_name'?: string | undefined; 'host.geo.timezone'?: string | undefined; 'host.hostname'?: string | undefined; 'host.id'?: string | undefined; 'host.ip'?: string[] | undefined; 'host.mac'?: string[] | undefined; 'host.name'?: string | undefined; 'host.network.egress.bytes'?: string | number | undefined; 'host.network.egress.packets'?: string | number | undefined; 'host.network.ingress.bytes'?: string | number | undefined; 'host.network.ingress.packets'?: string | number | undefined; 'host.os.family'?: string | undefined; 'host.os.full'?: string | undefined; 'host.os.kernel'?: string | undefined; 'host.os.name'?: string | undefined; 'host.os.platform'?: string | undefined; 'host.os.type'?: string | undefined; 'host.os.version'?: string | undefined; 'host.pid_ns_ino'?: string | undefined; 'host.risk.calculated_level'?: string | undefined; 'host.risk.calculated_score'?: number | undefined; 'host.risk.calculated_score_norm'?: number | undefined; 'host.risk.static_level'?: string | undefined; 'host.risk.static_score'?: number | undefined; 'host.risk.static_score_norm'?: number | undefined; 'host.type'?: string | undefined; 'host.uptime'?: string | number | undefined; 'http.request.body.bytes'?: string | number | undefined; 'http.request.body.content'?: string | undefined; 'http.request.bytes'?: string | number | undefined; 'http.request.id'?: string | undefined; 'http.request.method'?: string | undefined; 'http.request.mime_type'?: string | undefined; 'http.request.referrer'?: string | undefined; 'http.response.body.bytes'?: string | number | undefined; 'http.response.body.content'?: string | undefined; 'http.response.bytes'?: string | number | undefined; 'http.response.mime_type'?: string | undefined; 'http.response.status_code'?: string | number | undefined; 'http.version'?: string | undefined; labels?: unknown; 'log.file.path'?: string | undefined; 'log.level'?: string | undefined; 'log.logger'?: string | undefined; 'log.origin.file.line'?: string | number | undefined; 'log.origin.file.name'?: string | undefined; 'log.origin.function'?: string | undefined; 'log.syslog'?: unknown; message?: string | undefined; 'network.application'?: string | undefined; 'network.bytes'?: string | number | undefined; 'network.community_id'?: string | undefined; 'network.direction'?: string | undefined; 'network.forwarded_ip'?: string | undefined; 'network.iana_number'?: string | undefined; 'network.inner'?: unknown; 'network.name'?: string | undefined; 'network.packets'?: string | number | undefined; 'network.protocol'?: string | undefined; 'network.transport'?: string | undefined; 'network.type'?: string | undefined; 'network.vlan.id'?: string | undefined; 'network.vlan.name'?: string | undefined; 'observer.egress'?: unknown; 'observer.geo.city_name'?: string | undefined; 'observer.geo.continent_code'?: string | undefined; 'observer.geo.continent_name'?: string | undefined; 'observer.geo.country_iso_code'?: string | undefined; 'observer.geo.country_name'?: string | undefined; 'observer.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'observer.geo.name'?: string | undefined; 'observer.geo.postal_code'?: string | undefined; 'observer.geo.region_iso_code'?: string | undefined; 'observer.geo.region_name'?: string | undefined; 'observer.geo.timezone'?: string | undefined; 'observer.hostname'?: string | undefined; 'observer.ingress'?: unknown; 'observer.ip'?: string[] | undefined; 'observer.mac'?: string[] | undefined; 'observer.name'?: string | undefined; 'observer.os.family'?: string | undefined; 'observer.os.full'?: string | undefined; 'observer.os.kernel'?: string | undefined; 'observer.os.name'?: string | undefined; 'observer.os.platform'?: string | undefined; 'observer.os.type'?: string | undefined; 'observer.os.version'?: string | undefined; 'observer.product'?: string | undefined; 'observer.serial_number'?: string | undefined; 'observer.type'?: string | undefined; 'observer.vendor'?: string | undefined; 'observer.version'?: string | undefined; 'orchestrator.api_version'?: string | undefined; 'orchestrator.cluster.id'?: string | undefined; 'orchestrator.cluster.name'?: string | undefined; 'orchestrator.cluster.url'?: string | undefined; 'orchestrator.cluster.version'?: string | undefined; 'orchestrator.namespace'?: string | undefined; 'orchestrator.organization'?: string | undefined; 'orchestrator.resource.annotation'?: string[] | undefined; 'orchestrator.resource.id'?: string | undefined; 'orchestrator.resource.ip'?: string[] | undefined; 'orchestrator.resource.label'?: string[] | undefined; 'orchestrator.resource.name'?: string | undefined; 'orchestrator.resource.parent.type'?: string | undefined; 'orchestrator.resource.type'?: string | undefined; 'orchestrator.type'?: string | undefined; 'organization.id'?: string | undefined; 'organization.name'?: string | undefined; 'package.architecture'?: string | undefined; 'package.build_version'?: string | undefined; 'package.checksum'?: string | undefined; 'package.description'?: string | undefined; 'package.install_scope'?: string | undefined; 'package.installed'?: string | number | undefined; 'package.license'?: string | undefined; 'package.name'?: string | undefined; 'package.path'?: string | undefined; 'package.reference'?: string | undefined; 'package.size'?: string | number | undefined; 'package.type'?: string | undefined; 'package.version'?: string | undefined; 'process.args'?: string[] | undefined; 'process.args_count'?: string | number | undefined; 'process.code_signature.digest_algorithm'?: string | undefined; 'process.code_signature.exists'?: boolean | undefined; 'process.code_signature.signing_id'?: string | undefined; 'process.code_signature.status'?: string | undefined; 'process.code_signature.subject_name'?: string | undefined; 'process.code_signature.team_id'?: string | undefined; 'process.code_signature.timestamp'?: string | number | undefined; 'process.code_signature.trusted'?: boolean | undefined; 'process.code_signature.valid'?: boolean | undefined; 'process.command_line'?: string | undefined; 'process.elf.architecture'?: string | undefined; 'process.elf.byte_order'?: string | undefined; 'process.elf.cpu_type'?: string | undefined; 'process.elf.creation_date'?: string | number | undefined; 'process.elf.exports'?: unknown[] | undefined; 'process.elf.go_import_hash'?: string | undefined; 'process.elf.go_imports'?: unknown; 'process.elf.go_imports_names_entropy'?: string | number | undefined; 'process.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.elf.go_stripped'?: boolean | undefined; 'process.elf.header.abi_version'?: string | undefined; 'process.elf.header.class'?: string | undefined; 'process.elf.header.data'?: string | undefined; 'process.elf.header.entrypoint'?: string | number | undefined; 'process.elf.header.object_version'?: string | undefined; 'process.elf.header.os_abi'?: string | undefined; 'process.elf.header.type'?: string | undefined; 'process.elf.header.version'?: string | undefined; 'process.elf.import_hash'?: string | undefined; 'process.elf.imports'?: unknown[] | undefined; 'process.elf.imports_names_entropy'?: string | number | undefined; 'process.elf.imports_names_var_entropy'?: string | number | undefined; 'process.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.elf.shared_libraries'?: string[] | undefined; 'process.elf.telfhash'?: string | undefined; 'process.end'?: string | number | undefined; 'process.entity_id'?: string | undefined; 'process.entry_leader.args'?: string[] | undefined; 'process.entry_leader.args_count'?: string | number | undefined; 'process.entry_leader.attested_groups.name'?: string | undefined; 'process.entry_leader.attested_user.id'?: string | undefined; 'process.entry_leader.attested_user.name'?: string | undefined; 'process.entry_leader.command_line'?: string | undefined; 'process.entry_leader.entity_id'?: string | undefined; 'process.entry_leader.entry_meta.source.ip'?: string | undefined; 'process.entry_leader.entry_meta.type'?: string | undefined; 'process.entry_leader.executable'?: string | undefined; 'process.entry_leader.group.id'?: string | undefined; 'process.entry_leader.group.name'?: string | undefined; 'process.entry_leader.interactive'?: boolean | undefined; 'process.entry_leader.name'?: string | undefined; 'process.entry_leader.parent.entity_id'?: string | undefined; 'process.entry_leader.parent.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.entity_id'?: string | undefined; 'process.entry_leader.parent.session_leader.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.start'?: string | number | undefined; 'process.entry_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.entry_leader.parent.start'?: string | number | undefined; 'process.entry_leader.parent.vpid'?: string | number | undefined; 'process.entry_leader.pid'?: string | number | undefined; 'process.entry_leader.real_group.id'?: string | undefined; 'process.entry_leader.real_group.name'?: string | undefined; 'process.entry_leader.real_user.id'?: string | undefined; 'process.entry_leader.real_user.name'?: string | undefined; 'process.entry_leader.same_as_process'?: boolean | undefined; 'process.entry_leader.saved_group.id'?: string | undefined; 'process.entry_leader.saved_group.name'?: string | undefined; 'process.entry_leader.saved_user.id'?: string | undefined; 'process.entry_leader.saved_user.name'?: string | undefined; 'process.entry_leader.start'?: string | number | undefined; 'process.entry_leader.supplemental_groups.id'?: string | undefined; 'process.entry_leader.supplemental_groups.name'?: string | undefined; 'process.entry_leader.tty'?: unknown; 'process.entry_leader.user.id'?: string | undefined; 'process.entry_leader.user.name'?: string | undefined; 'process.entry_leader.vpid'?: string | number | undefined; 'process.entry_leader.working_directory'?: string | undefined; 'process.env_vars'?: string[] | undefined; 'process.executable'?: string | undefined; 'process.exit_code'?: string | number | undefined; 'process.group_leader.args'?: string[] | undefined; 'process.group_leader.args_count'?: string | number | undefined; 'process.group_leader.command_line'?: string | undefined; 'process.group_leader.entity_id'?: string | undefined; 'process.group_leader.executable'?: string | undefined; 'process.group_leader.group.id'?: string | undefined; 'process.group_leader.group.name'?: string | undefined; 'process.group_leader.interactive'?: boolean | undefined; 'process.group_leader.name'?: string | undefined; 'process.group_leader.pid'?: string | number | undefined; 'process.group_leader.real_group.id'?: string | undefined; 'process.group_leader.real_group.name'?: string | undefined; 'process.group_leader.real_user.id'?: string | undefined; 'process.group_leader.real_user.name'?: string | undefined; 'process.group_leader.same_as_process'?: boolean | undefined; 'process.group_leader.saved_group.id'?: string | undefined; 'process.group_leader.saved_group.name'?: string | undefined; 'process.group_leader.saved_user.id'?: string | undefined; 'process.group_leader.saved_user.name'?: string | undefined; 'process.group_leader.start'?: string | number | undefined; 'process.group_leader.supplemental_groups.id'?: string | undefined; 'process.group_leader.supplemental_groups.name'?: string | undefined; 'process.group_leader.tty'?: unknown; 'process.group_leader.user.id'?: string | undefined; 'process.group_leader.user.name'?: string | undefined; 'process.group_leader.vpid'?: string | number | undefined; 'process.group_leader.working_directory'?: string | undefined; 'process.hash.md5'?: string | undefined; 'process.hash.sha1'?: string | undefined; 'process.hash.sha256'?: string | undefined; 'process.hash.sha384'?: string | undefined; 'process.hash.sha512'?: string | undefined; 'process.hash.ssdeep'?: string | undefined; 'process.hash.tlsh'?: string | undefined; 'process.interactive'?: boolean | undefined; 'process.io'?: unknown; 'process.macho.go_import_hash'?: string | undefined; 'process.macho.go_imports'?: unknown; 'process.macho.go_imports_names_entropy'?: string | number | undefined; 'process.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.macho.go_stripped'?: boolean | undefined; 'process.macho.import_hash'?: string | undefined; 'process.macho.imports'?: unknown[] | undefined; 'process.macho.imports_names_entropy'?: string | number | undefined; 'process.macho.imports_names_var_entropy'?: string | number | undefined; 'process.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.macho.symhash'?: string | undefined; 'process.name'?: string | undefined; 'process.parent.args'?: string[] | undefined; 'process.parent.args_count'?: string | number | undefined; 'process.parent.code_signature.digest_algorithm'?: string | undefined; 'process.parent.code_signature.exists'?: boolean | undefined; 'process.parent.code_signature.signing_id'?: string | undefined; 'process.parent.code_signature.status'?: string | undefined; 'process.parent.code_signature.subject_name'?: string | undefined; 'process.parent.code_signature.team_id'?: string | undefined; 'process.parent.code_signature.timestamp'?: string | number | undefined; 'process.parent.code_signature.trusted'?: boolean | undefined; 'process.parent.code_signature.valid'?: boolean | undefined; 'process.parent.command_line'?: string | undefined; 'process.parent.elf.architecture'?: string | undefined; 'process.parent.elf.byte_order'?: string | undefined; 'process.parent.elf.cpu_type'?: string | undefined; 'process.parent.elf.creation_date'?: string | number | undefined; 'process.parent.elf.exports'?: unknown[] | undefined; 'process.parent.elf.go_import_hash'?: string | undefined; 'process.parent.elf.go_imports'?: unknown; 'process.parent.elf.go_imports_names_entropy'?: string | number | undefined; 'process.parent.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.go_stripped'?: boolean | undefined; 'process.parent.elf.header.abi_version'?: string | undefined; 'process.parent.elf.header.class'?: string | undefined; 'process.parent.elf.header.data'?: string | undefined; 'process.parent.elf.header.entrypoint'?: string | number | undefined; 'process.parent.elf.header.object_version'?: string | undefined; 'process.parent.elf.header.os_abi'?: string | undefined; 'process.parent.elf.header.type'?: string | undefined; 'process.parent.elf.header.version'?: string | undefined; 'process.parent.elf.import_hash'?: string | undefined; 'process.parent.elf.imports'?: unknown[] | undefined; 'process.parent.elf.imports_names_entropy'?: string | number | undefined; 'process.parent.elf.imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.parent.elf.shared_libraries'?: string[] | undefined; 'process.parent.elf.telfhash'?: string | undefined; 'process.parent.end'?: string | number | undefined; 'process.parent.entity_id'?: string | undefined; 'process.parent.executable'?: string | undefined; 'process.parent.exit_code'?: string | number | undefined; 'process.parent.group.id'?: string | undefined; 'process.parent.group.name'?: string | undefined; 'process.parent.group_leader.entity_id'?: string | undefined; 'process.parent.group_leader.pid'?: string | number | undefined; 'process.parent.group_leader.start'?: string | number | undefined; 'process.parent.group_leader.vpid'?: string | number | undefined; 'process.parent.hash.md5'?: string | undefined; 'process.parent.hash.sha1'?: string | undefined; 'process.parent.hash.sha256'?: string | undefined; 'process.parent.hash.sha384'?: string | undefined; 'process.parent.hash.sha512'?: string | undefined; 'process.parent.hash.ssdeep'?: string | undefined; 'process.parent.hash.tlsh'?: string | undefined; 'process.parent.interactive'?: boolean | undefined; 'process.parent.macho.go_import_hash'?: string | undefined; 'process.parent.macho.go_imports'?: unknown; 'process.parent.macho.go_imports_names_entropy'?: string | number | undefined; 'process.parent.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.go_stripped'?: boolean | undefined; 'process.parent.macho.import_hash'?: string | undefined; 'process.parent.macho.imports'?: unknown[] | undefined; 'process.parent.macho.imports_names_entropy'?: string | number | undefined; 'process.parent.macho.imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.macho.symhash'?: string | undefined; 'process.parent.name'?: string | undefined; 'process.parent.pe.architecture'?: string | undefined; 'process.parent.pe.company'?: string | undefined; 'process.parent.pe.description'?: string | undefined; 'process.parent.pe.file_version'?: string | undefined; 'process.parent.pe.go_import_hash'?: string | undefined; 'process.parent.pe.go_imports'?: unknown; 'process.parent.pe.go_imports_names_entropy'?: string | number | undefined; 'process.parent.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.go_stripped'?: boolean | undefined; 'process.parent.pe.imphash'?: string | undefined; 'process.parent.pe.import_hash'?: string | undefined; 'process.parent.pe.imports'?: unknown[] | undefined; 'process.parent.pe.imports_names_entropy'?: string | number | undefined; 'process.parent.pe.imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.original_file_name'?: string | undefined; 'process.parent.pe.pehash'?: string | undefined; 'process.parent.pe.product'?: string | undefined; 'process.parent.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.pgid'?: string | number | undefined; 'process.parent.pid'?: string | number | undefined; 'process.parent.real_group.id'?: string | undefined; 'process.parent.real_group.name'?: string | undefined; 'process.parent.real_user.id'?: string | undefined; 'process.parent.real_user.name'?: string | undefined; 'process.parent.saved_group.id'?: string | undefined; 'process.parent.saved_group.name'?: string | undefined; 'process.parent.saved_user.id'?: string | undefined; 'process.parent.saved_user.name'?: string | undefined; 'process.parent.start'?: string | number | undefined; 'process.parent.supplemental_groups.id'?: string | undefined; 'process.parent.supplemental_groups.name'?: string | undefined; 'process.parent.thread.capabilities.effective'?: string[] | undefined; 'process.parent.thread.capabilities.permitted'?: string[] | undefined; 'process.parent.thread.id'?: string | number | undefined; 'process.parent.thread.name'?: string | undefined; 'process.parent.title'?: string | undefined; 'process.parent.tty'?: unknown; 'process.parent.uptime'?: string | number | undefined; 'process.parent.user.id'?: string | undefined; 'process.parent.user.name'?: string | undefined; 'process.parent.vpid'?: string | number | undefined; 'process.parent.working_directory'?: string | undefined; 'process.pe.architecture'?: string | undefined; 'process.pe.company'?: string | undefined; 'process.pe.description'?: string | undefined; 'process.pe.file_version'?: string | undefined; 'process.pe.go_import_hash'?: string | undefined; 'process.pe.go_imports'?: unknown; 'process.pe.go_imports_names_entropy'?: string | number | undefined; 'process.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.pe.go_stripped'?: boolean | undefined; 'process.pe.imphash'?: string | undefined; 'process.pe.import_hash'?: string | undefined; 'process.pe.imports'?: unknown[] | undefined; 'process.pe.imports_names_entropy'?: string | number | undefined; 'process.pe.imports_names_var_entropy'?: string | number | undefined; 'process.pe.original_file_name'?: string | undefined; 'process.pe.pehash'?: string | undefined; 'process.pe.product'?: string | undefined; 'process.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.pgid'?: string | number | undefined; 'process.pid'?: string | number | undefined; 'process.previous.args'?: string[] | undefined; 'process.previous.args_count'?: string | number | undefined; 'process.previous.executable'?: string | undefined; 'process.real_group.id'?: string | undefined; 'process.real_group.name'?: string | undefined; 'process.real_user.id'?: string | undefined; 'process.real_user.name'?: string | undefined; 'process.saved_group.id'?: string | undefined; 'process.saved_group.name'?: string | undefined; 'process.saved_user.id'?: string | undefined; 'process.saved_user.name'?: string | undefined; 'process.session_leader.args'?: string[] | undefined; 'process.session_leader.args_count'?: string | number | undefined; 'process.session_leader.command_line'?: string | undefined; 'process.session_leader.entity_id'?: string | undefined; 'process.session_leader.executable'?: string | undefined; 'process.session_leader.group.id'?: string | undefined; 'process.session_leader.group.name'?: string | undefined; 'process.session_leader.interactive'?: boolean | undefined; 'process.session_leader.name'?: string | undefined; 'process.session_leader.parent.entity_id'?: string | undefined; 'process.session_leader.parent.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.entity_id'?: string | undefined; 'process.session_leader.parent.session_leader.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.start'?: string | number | undefined; 'process.session_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.session_leader.parent.start'?: string | number | undefined; 'process.session_leader.parent.vpid'?: string | number | undefined; 'process.session_leader.pid'?: string | number | undefined; 'process.session_leader.real_group.id'?: string | undefined; 'process.session_leader.real_group.name'?: string | undefined; 'process.session_leader.real_user.id'?: string | undefined; 'process.session_leader.real_user.name'?: string | undefined; 'process.session_leader.same_as_process'?: boolean | undefined; 'process.session_leader.saved_group.id'?: string | undefined; 'process.session_leader.saved_group.name'?: string | undefined; 'process.session_leader.saved_user.id'?: string | undefined; 'process.session_leader.saved_user.name'?: string | undefined; 'process.session_leader.start'?: string | number | undefined; 'process.session_leader.supplemental_groups.id'?: string | undefined; 'process.session_leader.supplemental_groups.name'?: string | undefined; 'process.session_leader.tty'?: unknown; 'process.session_leader.user.id'?: string | undefined; 'process.session_leader.user.name'?: string | undefined; 'process.session_leader.vpid'?: string | number | undefined; 'process.session_leader.working_directory'?: string | undefined; 'process.start'?: string | number | undefined; 'process.supplemental_groups.id'?: string | undefined; 'process.supplemental_groups.name'?: string | undefined; 'process.thread.capabilities.effective'?: string[] | undefined; 'process.thread.capabilities.permitted'?: string[] | undefined; 'process.thread.id'?: string | number | undefined; 'process.thread.name'?: string | undefined; 'process.title'?: string | undefined; 'process.tty'?: unknown; 'process.uptime'?: string | number | undefined; 'process.user.id'?: string | undefined; 'process.user.name'?: string | undefined; 'process.vpid'?: string | number | undefined; 'process.working_directory'?: string | undefined; 'registry.data.bytes'?: string | undefined; 'registry.data.strings'?: string[] | undefined; 'registry.data.type'?: string | undefined; 'registry.hive'?: string | undefined; 'registry.key'?: string | undefined; 'registry.path'?: string | undefined; 'registry.value'?: string | undefined; 'related.hash'?: string[] | undefined; 'related.hosts'?: string[] | undefined; 'related.ip'?: string[] | undefined; 'related.user'?: string[] | undefined; 'rule.author'?: string[] | undefined; 'rule.category'?: string | undefined; 'rule.description'?: string | undefined; 'rule.id'?: string | undefined; 'rule.license'?: string | undefined; 'rule.name'?: string | undefined; 'rule.reference'?: string | undefined; 'rule.ruleset'?: string | undefined; 'rule.uuid'?: string | undefined; 'rule.version'?: string | undefined; 'server.address'?: string | undefined; 'server.as.number'?: string | number | undefined; 'server.as.organization.name'?: string | undefined; 'server.bytes'?: string | number | undefined; 'server.domain'?: string | undefined; 'server.geo.city_name'?: string | undefined; 'server.geo.continent_code'?: string | undefined; 'server.geo.continent_name'?: string | undefined; 'server.geo.country_iso_code'?: string | undefined; 'server.geo.country_name'?: string | undefined; 'server.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'server.geo.name'?: string | undefined; 'server.geo.postal_code'?: string | undefined; 'server.geo.region_iso_code'?: string | undefined; 'server.geo.region_name'?: string | undefined; 'server.geo.timezone'?: string | undefined; 'server.ip'?: string | undefined; 'server.mac'?: string | undefined; 'server.nat.ip'?: string | undefined; 'server.nat.port'?: string | number | undefined; 'server.packets'?: string | number | undefined; 'server.port'?: string | number | undefined; 'server.registered_domain'?: string | undefined; 'server.subdomain'?: string | undefined; 'server.top_level_domain'?: string | undefined; 'server.user.domain'?: string | undefined; 'server.user.email'?: string | undefined; 'server.user.full_name'?: string | undefined; 'server.user.group.domain'?: string | undefined; 'server.user.group.id'?: string | undefined; 'server.user.group.name'?: string | undefined; 'server.user.hash'?: string | undefined; 'server.user.id'?: string | undefined; 'server.user.name'?: string | undefined; 'server.user.roles'?: string[] | undefined; 'service.address'?: string | undefined; 'service.environment'?: string | undefined; 'service.ephemeral_id'?: string | undefined; 'service.id'?: string | undefined; 'service.name'?: string | undefined; 'service.node.name'?: string | undefined; 'service.node.role'?: string | undefined; 'service.node.roles'?: string[] | undefined; 'service.origin.address'?: string | undefined; 'service.origin.environment'?: string | undefined; 'service.origin.ephemeral_id'?: string | undefined; 'service.origin.id'?: string | undefined; 'service.origin.name'?: string | undefined; 'service.origin.node.name'?: string | undefined; 'service.origin.node.role'?: string | undefined; 'service.origin.node.roles'?: string[] | undefined; 'service.origin.state'?: string | undefined; 'service.origin.type'?: string | undefined; 'service.origin.version'?: string | undefined; 'service.state'?: string | undefined; 'service.target.address'?: string | undefined; 'service.target.environment'?: string | undefined; 'service.target.ephemeral_id'?: string | undefined; 'service.target.id'?: string | undefined; 'service.target.name'?: string | undefined; 'service.target.node.name'?: string | undefined; 'service.target.node.role'?: string | undefined; 'service.target.node.roles'?: string[] | undefined; 'service.target.state'?: string | undefined; 'service.target.type'?: string | undefined; 'service.target.version'?: string | undefined; 'service.type'?: string | undefined; 'service.version'?: string | undefined; 'source.address'?: string | undefined; 'source.as.number'?: string | number | undefined; 'source.as.organization.name'?: string | undefined; 'source.bytes'?: string | number | undefined; 'source.domain'?: string | undefined; 'source.geo.city_name'?: string | undefined; 'source.geo.continent_code'?: string | undefined; 'source.geo.continent_name'?: string | undefined; 'source.geo.country_iso_code'?: string | undefined; 'source.geo.country_name'?: string | undefined; 'source.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'source.geo.name'?: string | undefined; 'source.geo.postal_code'?: string | undefined; 'source.geo.region_iso_code'?: string | undefined; 'source.geo.region_name'?: string | undefined; 'source.geo.timezone'?: string | undefined; 'source.ip'?: string | undefined; 'source.mac'?: string | undefined; 'source.nat.ip'?: string | undefined; 'source.nat.port'?: string | number | undefined; 'source.packets'?: string | number | undefined; 'source.port'?: string | number | undefined; 'source.registered_domain'?: string | undefined; 'source.subdomain'?: string | undefined; 'source.top_level_domain'?: string | undefined; 'source.user.domain'?: string | undefined; 'source.user.email'?: string | undefined; 'source.user.full_name'?: string | undefined; 'source.user.group.domain'?: string | undefined; 'source.user.group.id'?: string | undefined; 'source.user.group.name'?: string | undefined; 'source.user.hash'?: string | undefined; 'source.user.id'?: string | undefined; 'source.user.name'?: string | undefined; 'source.user.roles'?: string[] | undefined; 'span.id'?: string | undefined; tags?: string[] | undefined; 'threat.enrichments'?: { indicator?: unknown; 'matched.atomic'?: string | undefined; 'matched.field'?: string | undefined; 'matched.id'?: string | undefined; 'matched.index'?: string | undefined; 'matched.occurred'?: string | number | undefined; 'matched.type'?: string | undefined; }[] | undefined; 'threat.feed.dashboard_id'?: string | undefined; 'threat.feed.description'?: string | undefined; 'threat.feed.name'?: string | undefined; 'threat.feed.reference'?: string | undefined; 'threat.framework'?: string | undefined; 'threat.group.alias'?: string[] | undefined; 'threat.group.id'?: string | undefined; 'threat.group.name'?: string | undefined; 'threat.group.reference'?: string | undefined; 'threat.indicator.as.number'?: string | number | undefined; 'threat.indicator.as.organization.name'?: string | undefined; 'threat.indicator.confidence'?: string | undefined; 'threat.indicator.description'?: string | undefined; 'threat.indicator.email.address'?: string | undefined; 'threat.indicator.file.accessed'?: string | number | undefined; 'threat.indicator.file.attributes'?: string[] | undefined; 'threat.indicator.file.code_signature.digest_algorithm'?: string | undefined; 'threat.indicator.file.code_signature.exists'?: boolean | undefined; 'threat.indicator.file.code_signature.signing_id'?: string | undefined; 'threat.indicator.file.code_signature.status'?: string | undefined; 'threat.indicator.file.code_signature.subject_name'?: string | undefined; 'threat.indicator.file.code_signature.team_id'?: string | undefined; 'threat.indicator.file.code_signature.timestamp'?: string | number | undefined; 'threat.indicator.file.code_signature.trusted'?: boolean | undefined; 'threat.indicator.file.code_signature.valid'?: boolean | undefined; 'threat.indicator.file.created'?: string | number | undefined; 'threat.indicator.file.ctime'?: string | number | undefined; 'threat.indicator.file.device'?: string | undefined; 'threat.indicator.file.directory'?: string | undefined; 'threat.indicator.file.drive_letter'?: string | undefined; 'threat.indicator.file.elf.architecture'?: string | undefined; 'threat.indicator.file.elf.byte_order'?: string | undefined; 'threat.indicator.file.elf.cpu_type'?: string | undefined; 'threat.indicator.file.elf.creation_date'?: string | number | undefined; 'threat.indicator.file.elf.exports'?: unknown[] | undefined; 'threat.indicator.file.elf.go_import_hash'?: string | undefined; 'threat.indicator.file.elf.go_imports'?: unknown; 'threat.indicator.file.elf.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_stripped'?: boolean | undefined; 'threat.indicator.file.elf.header.abi_version'?: string | undefined; 'threat.indicator.file.elf.header.class'?: string | undefined; 'threat.indicator.file.elf.header.data'?: string | undefined; 'threat.indicator.file.elf.header.entrypoint'?: string | number | undefined; 'threat.indicator.file.elf.header.object_version'?: string | undefined; 'threat.indicator.file.elf.header.os_abi'?: string | undefined; 'threat.indicator.file.elf.header.type'?: string | undefined; 'threat.indicator.file.elf.header.version'?: string | undefined; 'threat.indicator.file.elf.import_hash'?: string | undefined; 'threat.indicator.file.elf.imports'?: unknown[] | undefined; 'threat.indicator.file.elf.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'threat.indicator.file.elf.shared_libraries'?: string[] | undefined; 'threat.indicator.file.elf.telfhash'?: string | undefined; 'threat.indicator.file.extension'?: string | undefined; 'threat.indicator.file.fork_name'?: string | undefined; 'threat.indicator.file.gid'?: string | undefined; 'threat.indicator.file.group'?: string | undefined; 'threat.indicator.file.hash.md5'?: string | undefined; 'threat.indicator.file.hash.sha1'?: string | undefined; 'threat.indicator.file.hash.sha256'?: string | undefined; 'threat.indicator.file.hash.sha384'?: string | undefined; 'threat.indicator.file.hash.sha512'?: string | undefined; 'threat.indicator.file.hash.ssdeep'?: string | undefined; 'threat.indicator.file.hash.tlsh'?: string | undefined; 'threat.indicator.file.inode'?: string | undefined; 'threat.indicator.file.mime_type'?: string | undefined; 'threat.indicator.file.mode'?: string | undefined; 'threat.indicator.file.mtime'?: string | number | undefined; 'threat.indicator.file.name'?: string | undefined; 'threat.indicator.file.owner'?: string | undefined; 'threat.indicator.file.path'?: string | undefined; 'threat.indicator.file.pe.architecture'?: string | undefined; 'threat.indicator.file.pe.company'?: string | undefined; 'threat.indicator.file.pe.description'?: string | undefined; 'threat.indicator.file.pe.file_version'?: string | undefined; 'threat.indicator.file.pe.go_import_hash'?: string | undefined; 'threat.indicator.file.pe.go_imports'?: unknown; 'threat.indicator.file.pe.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_stripped'?: boolean | undefined; 'threat.indicator.file.pe.imphash'?: string | undefined; 'threat.indicator.file.pe.import_hash'?: string | undefined; 'threat.indicator.file.pe.imports'?: unknown[] | undefined; 'threat.indicator.file.pe.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.original_file_name'?: string | undefined; 'threat.indicator.file.pe.pehash'?: string | undefined; 'threat.indicator.file.pe.product'?: string | undefined; 'threat.indicator.file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.size'?: string | number | undefined; 'threat.indicator.file.target_path'?: string | undefined; 'threat.indicator.file.type'?: string | undefined; 'threat.indicator.file.uid'?: string | undefined; 'threat.indicator.file.x509.alternative_names'?: string[] | undefined; 'threat.indicator.file.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.file.x509.issuer.country'?: string[] | undefined; 'threat.indicator.file.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.not_after'?: string | number | undefined; 'threat.indicator.file.x509.not_before'?: string | number | undefined; 'threat.indicator.file.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.file.x509.public_key_curve'?: string | undefined; 'threat.indicator.file.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.file.x509.public_key_size'?: string | number | undefined; 'threat.indicator.file.x509.serial_number'?: string | undefined; 'threat.indicator.file.x509.signature_algorithm'?: string | undefined; 'threat.indicator.file.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.file.x509.subject.country'?: string[] | undefined; 'threat.indicator.file.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.subject.locality'?: string[] | undefined; 'threat.indicator.file.x509.subject.organization'?: string[] | undefined; 'threat.indicator.file.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.version_number'?: string | undefined; 'threat.indicator.first_seen'?: string | number | undefined; 'threat.indicator.geo.city_name'?: string | undefined; 'threat.indicator.geo.continent_code'?: string | undefined; 'threat.indicator.geo.continent_name'?: string | undefined; 'threat.indicator.geo.country_iso_code'?: string | undefined; 'threat.indicator.geo.country_name'?: string | undefined; 'threat.indicator.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'threat.indicator.geo.name'?: string | undefined; 'threat.indicator.geo.postal_code'?: string | undefined; 'threat.indicator.geo.region_iso_code'?: string | undefined; 'threat.indicator.geo.region_name'?: string | undefined; 'threat.indicator.geo.timezone'?: string | undefined; 'threat.indicator.ip'?: string | undefined; 'threat.indicator.last_seen'?: string | number | undefined; 'threat.indicator.marking.tlp'?: string | undefined; 'threat.indicator.marking.tlp_version'?: string | undefined; 'threat.indicator.modified_at'?: string | number | undefined; 'threat.indicator.name'?: string | undefined; 'threat.indicator.port'?: string | number | undefined; 'threat.indicator.provider'?: string | undefined; 'threat.indicator.reference'?: string | undefined; 'threat.indicator.registry.data.bytes'?: string | undefined; 'threat.indicator.registry.data.strings'?: string[] | undefined; 'threat.indicator.registry.data.type'?: string | undefined; 'threat.indicator.registry.hive'?: string | undefined; 'threat.indicator.registry.key'?: string | undefined; 'threat.indicator.registry.path'?: string | undefined; 'threat.indicator.registry.value'?: string | undefined; 'threat.indicator.scanner_stats'?: string | number | undefined; 'threat.indicator.sightings'?: string | number | undefined; 'threat.indicator.type'?: string | undefined; 'threat.indicator.url.domain'?: string | undefined; 'threat.indicator.url.extension'?: string | undefined; 'threat.indicator.url.fragment'?: string | undefined; 'threat.indicator.url.full'?: string | undefined; 'threat.indicator.url.original'?: string | undefined; 'threat.indicator.url.password'?: string | undefined; 'threat.indicator.url.path'?: string | undefined; 'threat.indicator.url.port'?: string | number | undefined; 'threat.indicator.url.query'?: string | undefined; 'threat.indicator.url.registered_domain'?: string | undefined; 'threat.indicator.url.scheme'?: string | undefined; 'threat.indicator.url.subdomain'?: string | undefined; 'threat.indicator.url.top_level_domain'?: string | undefined; 'threat.indicator.url.username'?: string | undefined; 'threat.indicator.x509.alternative_names'?: string[] | undefined; 'threat.indicator.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.x509.issuer.country'?: string[] | undefined; 'threat.indicator.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.x509.not_after'?: string | number | undefined; 'threat.indicator.x509.not_before'?: string | number | undefined; 'threat.indicator.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.x509.public_key_curve'?: string | undefined; 'threat.indicator.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.x509.public_key_size'?: string | number | undefined; 'threat.indicator.x509.serial_number'?: string | undefined; 'threat.indicator.x509.signature_algorithm'?: string | undefined; 'threat.indicator.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.x509.subject.country'?: string[] | undefined; 'threat.indicator.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.x509.subject.locality'?: string[] | undefined; 'threat.indicator.x509.subject.organization'?: string[] | undefined; 'threat.indicator.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.x509.version_number'?: string | undefined; 'threat.software.alias'?: string[] | undefined; 'threat.software.id'?: string | undefined; 'threat.software.name'?: string | undefined; 'threat.software.platforms'?: string[] | undefined; 'threat.software.reference'?: string | undefined; 'threat.software.type'?: string | undefined; 'threat.tactic.id'?: string[] | undefined; 'threat.tactic.name'?: string[] | undefined; 'threat.tactic.reference'?: string[] | undefined; 'threat.technique.id'?: string[] | undefined; 'threat.technique.name'?: string[] | undefined; 'threat.technique.reference'?: string[] | undefined; 'threat.technique.subtechnique.id'?: string[] | undefined; 'threat.technique.subtechnique.name'?: string[] | undefined; 'threat.technique.subtechnique.reference'?: string[] | undefined; 'tls.cipher'?: string | undefined; 'tls.client.certificate'?: string | undefined; 'tls.client.certificate_chain'?: string[] | undefined; 'tls.client.hash.md5'?: string | undefined; 'tls.client.hash.sha1'?: string | undefined; 'tls.client.hash.sha256'?: string | undefined; 'tls.client.issuer'?: string | undefined; 'tls.client.ja3'?: string | undefined; 'tls.client.not_after'?: string | number | undefined; 'tls.client.not_before'?: string | number | undefined; 'tls.client.server_name'?: string | undefined; 'tls.client.subject'?: string | undefined; 'tls.client.supported_ciphers'?: string[] | undefined; 'tls.client.x509.alternative_names'?: string[] | undefined; 'tls.client.x509.issuer.common_name'?: string[] | undefined; 'tls.client.x509.issuer.country'?: string[] | undefined; 'tls.client.x509.issuer.distinguished_name'?: string | undefined; 'tls.client.x509.issuer.locality'?: string[] | undefined; 'tls.client.x509.issuer.organization'?: string[] | undefined; 'tls.client.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.client.x509.issuer.state_or_province'?: string[] | undefined; 'tls.client.x509.not_after'?: string | number | undefined; 'tls.client.x509.not_before'?: string | number | undefined; 'tls.client.x509.public_key_algorithm'?: string | undefined; 'tls.client.x509.public_key_curve'?: string | undefined; 'tls.client.x509.public_key_exponent'?: string | number | undefined; 'tls.client.x509.public_key_size'?: string | number | undefined; 'tls.client.x509.serial_number'?: string | undefined; 'tls.client.x509.signature_algorithm'?: string | undefined; 'tls.client.x509.subject.common_name'?: string[] | undefined; 'tls.client.x509.subject.country'?: string[] | undefined; 'tls.client.x509.subject.distinguished_name'?: string | undefined; 'tls.client.x509.subject.locality'?: string[] | undefined; 'tls.client.x509.subject.organization'?: string[] | undefined; 'tls.client.x509.subject.organizational_unit'?: string[] | undefined; 'tls.client.x509.subject.state_or_province'?: string[] | undefined; 'tls.client.x509.version_number'?: string | undefined; 'tls.curve'?: string | undefined; 'tls.established'?: boolean | undefined; 'tls.next_protocol'?: string | undefined; 'tls.resumed'?: boolean | undefined; 'tls.server.certificate'?: string | undefined; 'tls.server.certificate_chain'?: string[] | undefined; 'tls.server.hash.md5'?: string | undefined; 'tls.server.hash.sha1'?: string | undefined; 'tls.server.hash.sha256'?: string | undefined; 'tls.server.issuer'?: string | undefined; 'tls.server.ja3s'?: string | undefined; 'tls.server.not_after'?: string | number | undefined; 'tls.server.not_before'?: string | number | undefined; 'tls.server.subject'?: string | undefined; 'tls.server.x509.alternative_names'?: string[] | undefined; 'tls.server.x509.issuer.common_name'?: string[] | undefined; 'tls.server.x509.issuer.country'?: string[] | undefined; 'tls.server.x509.issuer.distinguished_name'?: string | undefined; 'tls.server.x509.issuer.locality'?: string[] | undefined; 'tls.server.x509.issuer.organization'?: string[] | undefined; 'tls.server.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.server.x509.issuer.state_or_province'?: string[] | undefined; 'tls.server.x509.not_after'?: string | number | undefined; 'tls.server.x509.not_before'?: string | number | undefined; 'tls.server.x509.public_key_algorithm'?: string | undefined; 'tls.server.x509.public_key_curve'?: string | undefined; 'tls.server.x509.public_key_exponent'?: string | number | undefined; 'tls.server.x509.public_key_size'?: string | number | undefined; 'tls.server.x509.serial_number'?: string | undefined; 'tls.server.x509.signature_algorithm'?: string | undefined; 'tls.server.x509.subject.common_name'?: string[] | undefined; 'tls.server.x509.subject.country'?: string[] | undefined; 'tls.server.x509.subject.distinguished_name'?: string | undefined; 'tls.server.x509.subject.locality'?: string[] | undefined; 'tls.server.x509.subject.organization'?: string[] | undefined; 'tls.server.x509.subject.organizational_unit'?: string[] | undefined; 'tls.server.x509.subject.state_or_province'?: string[] | undefined; 'tls.server.x509.version_number'?: string | undefined; 'tls.version'?: string | undefined; 'tls.version_protocol'?: string | undefined; 'trace.id'?: string | undefined; 'transaction.id'?: string | undefined; 'url.domain'?: string | undefined; 'url.extension'?: string | undefined; 'url.fragment'?: string | undefined; 'url.full'?: string | undefined; 'url.original'?: string | undefined; 'url.password'?: string | undefined; 'url.path'?: string | undefined; 'url.port'?: string | number | undefined; 'url.query'?: string | undefined; 'url.registered_domain'?: string | undefined; 'url.scheme'?: string | undefined; 'url.subdomain'?: string | undefined; 'url.top_level_domain'?: string | undefined; 'url.username'?: string | undefined; 'user.changes.domain'?: string | undefined; 'user.changes.email'?: string | undefined; 'user.changes.full_name'?: string | undefined; 'user.changes.group.domain'?: string | undefined; 'user.changes.group.id'?: string | undefined; 'user.changes.group.name'?: string | undefined; 'user.changes.hash'?: string | undefined; 'user.changes.id'?: string | undefined; 'user.changes.name'?: string | undefined; 'user.changes.roles'?: string[] | undefined; 'user.domain'?: string | undefined; 'user.effective.domain'?: string | undefined; 'user.effective.email'?: string | undefined; 'user.effective.full_name'?: string | undefined; 'user.effective.group.domain'?: string | undefined; 'user.effective.group.id'?: string | undefined; 'user.effective.group.name'?: string | undefined; 'user.effective.hash'?: string | undefined; 'user.effective.id'?: string | undefined; 'user.effective.name'?: string | undefined; 'user.effective.roles'?: string[] | undefined; 'user.email'?: string | undefined; 'user.full_name'?: string | undefined; 'user.group.domain'?: string | undefined; 'user.group.id'?: string | undefined; 'user.group.name'?: string | undefined; 'user.hash'?: string | undefined; 'user.id'?: string | undefined; 'user.name'?: string | undefined; 'user.risk.calculated_level'?: string | undefined; 'user.risk.calculated_score'?: number | undefined; 'user.risk.calculated_score_norm'?: number | undefined; 'user.risk.static_level'?: string | undefined; 'user.risk.static_score'?: number | undefined; 'user.risk.static_score_norm'?: number | undefined; 'user.roles'?: string[] | undefined; 'user.target.domain'?: string | undefined; 'user.target.email'?: string | undefined; 'user.target.full_name'?: string | undefined; 'user.target.group.domain'?: string | undefined; 'user.target.group.id'?: string | undefined; 'user.target.group.name'?: string | undefined; 'user.target.hash'?: string | undefined; 'user.target.id'?: string | undefined; 'user.target.name'?: string | undefined; 'user.target.roles'?: string[] | undefined; 'user_agent.device.name'?: string | undefined; 'user_agent.name'?: string | undefined; 'user_agent.original'?: string | undefined; 'user_agent.os.family'?: string | undefined; 'user_agent.os.full'?: string | undefined; 'user_agent.os.kernel'?: string | undefined; 'user_agent.os.name'?: string | undefined; 'user_agent.os.platform'?: string | undefined; 'user_agent.os.type'?: string | undefined; 'user_agent.os.version'?: string | undefined; 'user_agent.version'?: string | undefined; 'vulnerability.category'?: string[] | undefined; 'vulnerability.classification'?: string | undefined; 'vulnerability.description'?: string | undefined; 'vulnerability.enumeration'?: string | undefined; 'vulnerability.id'?: string | undefined; 'vulnerability.reference'?: string | undefined; 'vulnerability.report_id'?: string | undefined; 'vulnerability.scanner.vendor'?: string | undefined; 'vulnerability.score.base'?: number | undefined; 'vulnerability.score.environmental'?: number | undefined; 'vulnerability.score.temporal'?: number | undefined; 'vulnerability.score.version'?: string | undefined; 'vulnerability.severity'?: string | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }) | ({} & { 'kibana.alert.context'?: unknown; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | number | undefined; 'kibana.alert.evaluation.values'?: (string | number)[] | undefined; 'kibana.alert.group'?: { field?: string[] | undefined; value?: string[] | undefined; }[] | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & { '@timestamp': string | number; 'ecs.version': string; } & { 'agent.build.original'?: string | undefined; 'agent.ephemeral_id'?: string | undefined; 'agent.id'?: string | undefined; 'agent.name'?: string | undefined; 'agent.type'?: string | undefined; 'agent.version'?: string | undefined; 'client.address'?: string | undefined; 'client.as.number'?: string | number | undefined; 'client.as.organization.name'?: string | undefined; 'client.bytes'?: string | number | undefined; 'client.domain'?: string | undefined; 'client.geo.city_name'?: string | undefined; 'client.geo.continent_code'?: string | undefined; 'client.geo.continent_name'?: string | undefined; 'client.geo.country_iso_code'?: string | undefined; 'client.geo.country_name'?: string | undefined; 'client.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'client.geo.name'?: string | undefined; 'client.geo.postal_code'?: string | undefined; 'client.geo.region_iso_code'?: string | undefined; 'client.geo.region_name'?: string | undefined; 'client.geo.timezone'?: string | undefined; 'client.ip'?: string | undefined; 'client.mac'?: string | undefined; 'client.nat.ip'?: string | undefined; 'client.nat.port'?: string | number | undefined; 'client.packets'?: string | number | undefined; 'client.port'?: string | number | undefined; 'client.registered_domain'?: string | undefined; 'client.subdomain'?: string | undefined; 'client.top_level_domain'?: string | undefined; 'client.user.domain'?: string | undefined; 'client.user.email'?: string | undefined; 'client.user.full_name'?: string | undefined; 'client.user.group.domain'?: string | undefined; 'client.user.group.id'?: string | undefined; 'client.user.group.name'?: string | undefined; 'client.user.hash'?: string | undefined; 'client.user.id'?: string | undefined; 'client.user.name'?: string | undefined; 'client.user.roles'?: string[] | undefined; 'cloud.account.id'?: string | undefined; 'cloud.account.name'?: string | undefined; 'cloud.availability_zone'?: string | undefined; 'cloud.instance.id'?: string | undefined; 'cloud.instance.name'?: string | undefined; 'cloud.machine.type'?: string | undefined; 'cloud.origin.account.id'?: string | undefined; 'cloud.origin.account.name'?: string | undefined; 'cloud.origin.availability_zone'?: string | undefined; 'cloud.origin.instance.id'?: string | undefined; 'cloud.origin.instance.name'?: string | undefined; 'cloud.origin.machine.type'?: string | undefined; 'cloud.origin.project.id'?: string | undefined; 'cloud.origin.project.name'?: string | undefined; 'cloud.origin.provider'?: string | undefined; 'cloud.origin.region'?: string | undefined; 'cloud.origin.service.name'?: string | undefined; 'cloud.project.id'?: string | undefined; 'cloud.project.name'?: string | undefined; 'cloud.provider'?: string | undefined; 'cloud.region'?: string | undefined; 'cloud.service.name'?: string | undefined; 'cloud.target.account.id'?: string | undefined; 'cloud.target.account.name'?: string | undefined; 'cloud.target.availability_zone'?: string | undefined; 'cloud.target.instance.id'?: string | undefined; 'cloud.target.instance.name'?: string | undefined; 'cloud.target.machine.type'?: string | undefined; 'cloud.target.project.id'?: string | undefined; 'cloud.target.project.name'?: string | undefined; 'cloud.target.provider'?: string | undefined; 'cloud.target.region'?: string | undefined; 'cloud.target.service.name'?: string | undefined; 'container.cpu.usage'?: string | number | undefined; 'container.disk.read.bytes'?: string | number | undefined; 'container.disk.write.bytes'?: string | number | undefined; 'container.id'?: string | undefined; 'container.image.hash.all'?: string[] | undefined; 'container.image.name'?: string | undefined; 'container.image.tag'?: string[] | undefined; 'container.labels'?: unknown; 'container.memory.usage'?: string | number | undefined; 'container.name'?: string | undefined; 'container.network.egress.bytes'?: string | number | undefined; 'container.network.ingress.bytes'?: string | number | undefined; 'container.runtime'?: string | undefined; 'container.security_context.privileged'?: boolean | undefined; 'destination.address'?: string | undefined; 'destination.as.number'?: string | number | undefined; 'destination.as.organization.name'?: string | undefined; 'destination.bytes'?: string | number | undefined; 'destination.domain'?: string | undefined; 'destination.geo.city_name'?: string | undefined; 'destination.geo.continent_code'?: string | undefined; 'destination.geo.continent_name'?: string | undefined; 'destination.geo.country_iso_code'?: string | undefined; 'destination.geo.country_name'?: string | undefined; 'destination.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'destination.geo.name'?: string | undefined; 'destination.geo.postal_code'?: string | undefined; 'destination.geo.region_iso_code'?: string | undefined; 'destination.geo.region_name'?: string | undefined; 'destination.geo.timezone'?: string | undefined; 'destination.ip'?: string | undefined; 'destination.mac'?: string | undefined; 'destination.nat.ip'?: string | undefined; 'destination.nat.port'?: string | number | undefined; 'destination.packets'?: string | number | undefined; 'destination.port'?: string | number | undefined; 'destination.registered_domain'?: string | undefined; 'destination.subdomain'?: string | undefined; 'destination.top_level_domain'?: string | undefined; 'destination.user.domain'?: string | undefined; 'destination.user.email'?: string | undefined; 'destination.user.full_name'?: string | undefined; 'destination.user.group.domain'?: string | undefined; 'destination.user.group.id'?: string | undefined; 'destination.user.group.name'?: string | undefined; 'destination.user.hash'?: string | undefined; 'destination.user.id'?: string | undefined; 'destination.user.name'?: string | undefined; 'destination.user.roles'?: string[] | undefined; 'device.id'?: string | undefined; 'device.manufacturer'?: string | undefined; 'device.model.identifier'?: string | undefined; 'device.model.name'?: string | undefined; 'dll.code_signature.digest_algorithm'?: string | undefined; 'dll.code_signature.exists'?: boolean | undefined; 'dll.code_signature.signing_id'?: string | undefined; 'dll.code_signature.status'?: string | undefined; 'dll.code_signature.subject_name'?: string | undefined; 'dll.code_signature.team_id'?: string | undefined; 'dll.code_signature.timestamp'?: string | number | undefined; 'dll.code_signature.trusted'?: boolean | undefined; 'dll.code_signature.valid'?: boolean | undefined; 'dll.hash.md5'?: string | undefined; 'dll.hash.sha1'?: string | undefined; 'dll.hash.sha256'?: string | undefined; 'dll.hash.sha384'?: string | undefined; 'dll.hash.sha512'?: string | undefined; 'dll.hash.ssdeep'?: string | undefined; 'dll.hash.tlsh'?: string | undefined; 'dll.name'?: string | undefined; 'dll.path'?: string | undefined; 'dll.pe.architecture'?: string | undefined; 'dll.pe.company'?: string | undefined; 'dll.pe.description'?: string | undefined; 'dll.pe.file_version'?: string | undefined; 'dll.pe.go_import_hash'?: string | undefined; 'dll.pe.go_imports'?: unknown; 'dll.pe.go_imports_names_entropy'?: string | number | undefined; 'dll.pe.go_imports_names_var_entropy'?: string | number | undefined; 'dll.pe.go_stripped'?: boolean | undefined; 'dll.pe.imphash'?: string | undefined; 'dll.pe.import_hash'?: string | undefined; 'dll.pe.imports'?: unknown[] | undefined; 'dll.pe.imports_names_entropy'?: string | number | undefined; 'dll.pe.imports_names_var_entropy'?: string | number | undefined; 'dll.pe.original_file_name'?: string | undefined; 'dll.pe.pehash'?: string | undefined; 'dll.pe.product'?: string | undefined; 'dll.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'dns.answers'?: { class?: string | undefined; data?: string | undefined; name?: string | undefined; ttl?: string | number | undefined; type?: string | undefined; }[] | undefined; 'dns.header_flags'?: string[] | undefined; 'dns.id'?: string | undefined; 'dns.op_code'?: string | undefined; 'dns.question.class'?: string | undefined; 'dns.question.name'?: string | undefined; 'dns.question.registered_domain'?: string | undefined; 'dns.question.subdomain'?: string | undefined; 'dns.question.top_level_domain'?: string | undefined; 'dns.question.type'?: string | undefined; 'dns.resolved_ip'?: string[] | undefined; 'dns.response_code'?: string | undefined; 'dns.type'?: string | undefined; 'email.attachments'?: { 'file.extension'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.name'?: string | undefined; 'file.size'?: string | number | undefined; }[] | undefined; 'email.bcc.address'?: string[] | undefined; 'email.cc.address'?: string[] | undefined; 'email.content_type'?: string | undefined; 'email.delivery_timestamp'?: string | number | undefined; 'email.direction'?: string | undefined; 'email.from.address'?: string[] | undefined; 'email.local_id'?: string | undefined; 'email.message_id'?: string | undefined; 'email.origination_timestamp'?: string | number | undefined; 'email.reply_to.address'?: string[] | undefined; 'email.sender.address'?: string | undefined; 'email.subject'?: string | undefined; 'email.to.address'?: string[] | undefined; 'email.x_mailer'?: string | undefined; 'error.code'?: string | undefined; 'error.id'?: string | undefined; 'error.message'?: string | undefined; 'error.stack_trace'?: string | undefined; 'error.type'?: string | undefined; 'event.action'?: string | undefined; 'event.agent_id_status'?: string | undefined; 'event.category'?: string[] | undefined; 'event.code'?: string | undefined; 'event.created'?: string | number | undefined; 'event.dataset'?: string | undefined; 'event.duration'?: string | number | undefined; 'event.end'?: string | number | undefined; 'event.hash'?: string | undefined; 'event.id'?: string | undefined; 'event.ingested'?: string | number | undefined; 'event.kind'?: string | undefined; 'event.module'?: string | undefined; 'event.original'?: string | undefined; 'event.outcome'?: string | undefined; 'event.provider'?: string | undefined; 'event.reason'?: string | undefined; 'event.reference'?: string | undefined; 'event.risk_score'?: number | undefined; 'event.risk_score_norm'?: number | undefined; 'event.sequence'?: string | number | undefined; 'event.severity'?: string | number | undefined; 'event.start'?: string | number | undefined; 'event.timezone'?: string | undefined; 'event.type'?: string[] | undefined; 'event.url'?: string | undefined; 'faas.coldstart'?: boolean | undefined; 'faas.execution'?: string | undefined; 'faas.id'?: string | undefined; 'faas.name'?: string | undefined; 'faas.version'?: string | undefined; 'file.accessed'?: string | number | undefined; 'file.attributes'?: string[] | undefined; 'file.code_signature.digest_algorithm'?: string | undefined; 'file.code_signature.exists'?: boolean | undefined; 'file.code_signature.signing_id'?: string | undefined; 'file.code_signature.status'?: string | undefined; 'file.code_signature.subject_name'?: string | undefined; 'file.code_signature.team_id'?: string | undefined; 'file.code_signature.timestamp'?: string | number | undefined; 'file.code_signature.trusted'?: boolean | undefined; 'file.code_signature.valid'?: boolean | undefined; 'file.created'?: string | number | undefined; 'file.ctime'?: string | number | undefined; 'file.device'?: string | undefined; 'file.directory'?: string | undefined; 'file.drive_letter'?: string | undefined; 'file.elf.architecture'?: string | undefined; 'file.elf.byte_order'?: string | undefined; 'file.elf.cpu_type'?: string | undefined; 'file.elf.creation_date'?: string | number | undefined; 'file.elf.exports'?: unknown[] | undefined; 'file.elf.go_import_hash'?: string | undefined; 'file.elf.go_imports'?: unknown; 'file.elf.go_imports_names_entropy'?: string | number | undefined; 'file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'file.elf.go_stripped'?: boolean | undefined; 'file.elf.header.abi_version'?: string | undefined; 'file.elf.header.class'?: string | undefined; 'file.elf.header.data'?: string | undefined; 'file.elf.header.entrypoint'?: string | number | undefined; 'file.elf.header.object_version'?: string | undefined; 'file.elf.header.os_abi'?: string | undefined; 'file.elf.header.type'?: string | undefined; 'file.elf.header.version'?: string | undefined; 'file.elf.import_hash'?: string | undefined; 'file.elf.imports'?: unknown[] | undefined; 'file.elf.imports_names_entropy'?: string | number | undefined; 'file.elf.imports_names_var_entropy'?: string | number | undefined; 'file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'file.elf.shared_libraries'?: string[] | undefined; 'file.elf.telfhash'?: string | undefined; 'file.extension'?: string | undefined; 'file.fork_name'?: string | undefined; 'file.gid'?: string | undefined; 'file.group'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.inode'?: string | undefined; 'file.macho.go_import_hash'?: string | undefined; 'file.macho.go_imports'?: unknown; 'file.macho.go_imports_names_entropy'?: string | number | undefined; 'file.macho.go_imports_names_var_entropy'?: string | number | undefined; 'file.macho.go_stripped'?: boolean | undefined; 'file.macho.import_hash'?: string | undefined; 'file.macho.imports'?: unknown[] | undefined; 'file.macho.imports_names_entropy'?: string | number | undefined; 'file.macho.imports_names_var_entropy'?: string | number | undefined; 'file.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.macho.symhash'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.mode'?: string | undefined; 'file.mtime'?: string | number | undefined; 'file.name'?: string | undefined; 'file.owner'?: string | undefined; 'file.path'?: string | undefined; 'file.pe.architecture'?: string | undefined; 'file.pe.company'?: string | undefined; 'file.pe.description'?: string | undefined; 'file.pe.file_version'?: string | undefined; 'file.pe.go_import_hash'?: string | undefined; 'file.pe.go_imports'?: unknown; 'file.pe.go_imports_names_entropy'?: string | number | undefined; 'file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'file.pe.go_stripped'?: boolean | undefined; 'file.pe.imphash'?: string | undefined; 'file.pe.import_hash'?: string | undefined; 'file.pe.imports'?: unknown[] | undefined; 'file.pe.imports_names_entropy'?: string | number | undefined; 'file.pe.imports_names_var_entropy'?: string | number | undefined; 'file.pe.original_file_name'?: string | undefined; 'file.pe.pehash'?: string | undefined; 'file.pe.product'?: string | undefined; 'file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.size'?: string | number | undefined; 'file.target_path'?: string | undefined; 'file.type'?: string | undefined; 'file.uid'?: string | undefined; 'file.x509.alternative_names'?: string[] | undefined; 'file.x509.issuer.common_name'?: string[] | undefined; 'file.x509.issuer.country'?: string[] | undefined; 'file.x509.issuer.distinguished_name'?: string | undefined; 'file.x509.issuer.locality'?: string[] | undefined; 'file.x509.issuer.organization'?: string[] | undefined; 'file.x509.issuer.organizational_unit'?: string[] | undefined; 'file.x509.issuer.state_or_province'?: string[] | undefined; 'file.x509.not_after'?: string | number | undefined; 'file.x509.not_before'?: string | number | undefined; 'file.x509.public_key_algorithm'?: string | undefined; 'file.x509.public_key_curve'?: string | undefined; 'file.x509.public_key_exponent'?: string | number | undefined; 'file.x509.public_key_size'?: string | number | undefined; 'file.x509.serial_number'?: string | undefined; 'file.x509.signature_algorithm'?: string | undefined; 'file.x509.subject.common_name'?: string[] | undefined; 'file.x509.subject.country'?: string[] | undefined; 'file.x509.subject.distinguished_name'?: string | undefined; 'file.x509.subject.locality'?: string[] | undefined; 'file.x509.subject.organization'?: string[] | undefined; 'file.x509.subject.organizational_unit'?: string[] | undefined; 'file.x509.subject.state_or_province'?: string[] | undefined; 'file.x509.version_number'?: string | undefined; 'group.domain'?: string | undefined; 'group.id'?: string | undefined; 'group.name'?: string | undefined; 'host.architecture'?: string | undefined; 'host.boot.id'?: string | undefined; 'host.cpu.usage'?: string | number | undefined; 'host.disk.read.bytes'?: string | number | undefined; 'host.disk.write.bytes'?: string | number | undefined; 'host.domain'?: string | undefined; 'host.geo.city_name'?: string | undefined; 'host.geo.continent_code'?: string | undefined; 'host.geo.continent_name'?: string | undefined; 'host.geo.country_iso_code'?: string | undefined; 'host.geo.country_name'?: string | undefined; 'host.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'host.geo.name'?: string | undefined; 'host.geo.postal_code'?: string | undefined; 'host.geo.region_iso_code'?: string | undefined; 'host.geo.region_name'?: string | undefined; 'host.geo.timezone'?: string | undefined; 'host.hostname'?: string | undefined; 'host.id'?: string | undefined; 'host.ip'?: string[] | undefined; 'host.mac'?: string[] | undefined; 'host.name'?: string | undefined; 'host.network.egress.bytes'?: string | number | undefined; 'host.network.egress.packets'?: string | number | undefined; 'host.network.ingress.bytes'?: string | number | undefined; 'host.network.ingress.packets'?: string | number | undefined; 'host.os.family'?: string | undefined; 'host.os.full'?: string | undefined; 'host.os.kernel'?: string | undefined; 'host.os.name'?: string | undefined; 'host.os.platform'?: string | undefined; 'host.os.type'?: string | undefined; 'host.os.version'?: string | undefined; 'host.pid_ns_ino'?: string | undefined; 'host.risk.calculated_level'?: string | undefined; 'host.risk.calculated_score'?: number | undefined; 'host.risk.calculated_score_norm'?: number | undefined; 'host.risk.static_level'?: string | undefined; 'host.risk.static_score'?: number | undefined; 'host.risk.static_score_norm'?: number | undefined; 'host.type'?: string | undefined; 'host.uptime'?: string | number | undefined; 'http.request.body.bytes'?: string | number | undefined; 'http.request.body.content'?: string | undefined; 'http.request.bytes'?: string | number | undefined; 'http.request.id'?: string | undefined; 'http.request.method'?: string | undefined; 'http.request.mime_type'?: string | undefined; 'http.request.referrer'?: string | undefined; 'http.response.body.bytes'?: string | number | undefined; 'http.response.body.content'?: string | undefined; 'http.response.bytes'?: string | number | undefined; 'http.response.mime_type'?: string | undefined; 'http.response.status_code'?: string | number | undefined; 'http.version'?: string | undefined; labels?: unknown; 'log.file.path'?: string | undefined; 'log.level'?: string | undefined; 'log.logger'?: string | undefined; 'log.origin.file.line'?: string | number | undefined; 'log.origin.file.name'?: string | undefined; 'log.origin.function'?: string | undefined; 'log.syslog'?: unknown; message?: string | undefined; 'network.application'?: string | undefined; 'network.bytes'?: string | number | undefined; 'network.community_id'?: string | undefined; 'network.direction'?: string | undefined; 'network.forwarded_ip'?: string | undefined; 'network.iana_number'?: string | undefined; 'network.inner'?: unknown; 'network.name'?: string | undefined; 'network.packets'?: string | number | undefined; 'network.protocol'?: string | undefined; 'network.transport'?: string | undefined; 'network.type'?: string | undefined; 'network.vlan.id'?: string | undefined; 'network.vlan.name'?: string | undefined; 'observer.egress'?: unknown; 'observer.geo.city_name'?: string | undefined; 'observer.geo.continent_code'?: string | undefined; 'observer.geo.continent_name'?: string | undefined; 'observer.geo.country_iso_code'?: string | undefined; 'observer.geo.country_name'?: string | undefined; 'observer.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'observer.geo.name'?: string | undefined; 'observer.geo.postal_code'?: string | undefined; 'observer.geo.region_iso_code'?: string | undefined; 'observer.geo.region_name'?: string | undefined; 'observer.geo.timezone'?: string | undefined; 'observer.hostname'?: string | undefined; 'observer.ingress'?: unknown; 'observer.ip'?: string[] | undefined; 'observer.mac'?: string[] | undefined; 'observer.name'?: string | undefined; 'observer.os.family'?: string | undefined; 'observer.os.full'?: string | undefined; 'observer.os.kernel'?: string | undefined; 'observer.os.name'?: string | undefined; 'observer.os.platform'?: string | undefined; 'observer.os.type'?: string | undefined; 'observer.os.version'?: string | undefined; 'observer.product'?: string | undefined; 'observer.serial_number'?: string | undefined; 'observer.type'?: string | undefined; 'observer.vendor'?: string | undefined; 'observer.version'?: string | undefined; 'orchestrator.api_version'?: string | undefined; 'orchestrator.cluster.id'?: string | undefined; 'orchestrator.cluster.name'?: string | undefined; 'orchestrator.cluster.url'?: string | undefined; 'orchestrator.cluster.version'?: string | undefined; 'orchestrator.namespace'?: string | undefined; 'orchestrator.organization'?: string | undefined; 'orchestrator.resource.annotation'?: string[] | undefined; 'orchestrator.resource.id'?: string | undefined; 'orchestrator.resource.ip'?: string[] | undefined; 'orchestrator.resource.label'?: string[] | undefined; 'orchestrator.resource.name'?: string | undefined; 'orchestrator.resource.parent.type'?: string | undefined; 'orchestrator.resource.type'?: string | undefined; 'orchestrator.type'?: string | undefined; 'organization.id'?: string | undefined; 'organization.name'?: string | undefined; 'package.architecture'?: string | undefined; 'package.build_version'?: string | undefined; 'package.checksum'?: string | undefined; 'package.description'?: string | undefined; 'package.install_scope'?: string | undefined; 'package.installed'?: string | number | undefined; 'package.license'?: string | undefined; 'package.name'?: string | undefined; 'package.path'?: string | undefined; 'package.reference'?: string | undefined; 'package.size'?: string | number | undefined; 'package.type'?: string | undefined; 'package.version'?: string | undefined; 'process.args'?: string[] | undefined; 'process.args_count'?: string | number | undefined; 'process.code_signature.digest_algorithm'?: string | undefined; 'process.code_signature.exists'?: boolean | undefined; 'process.code_signature.signing_id'?: string | undefined; 'process.code_signature.status'?: string | undefined; 'process.code_signature.subject_name'?: string | undefined; 'process.code_signature.team_id'?: string | undefined; 'process.code_signature.timestamp'?: string | number | undefined; 'process.code_signature.trusted'?: boolean | undefined; 'process.code_signature.valid'?: boolean | undefined; 'process.command_line'?: string | undefined; 'process.elf.architecture'?: string | undefined; 'process.elf.byte_order'?: string | undefined; 'process.elf.cpu_type'?: string | undefined; 'process.elf.creation_date'?: string | number | undefined; 'process.elf.exports'?: unknown[] | undefined; 'process.elf.go_import_hash'?: string | undefined; 'process.elf.go_imports'?: unknown; 'process.elf.go_imports_names_entropy'?: string | number | undefined; 'process.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.elf.go_stripped'?: boolean | undefined; 'process.elf.header.abi_version'?: string | undefined; 'process.elf.header.class'?: string | undefined; 'process.elf.header.data'?: string | undefined; 'process.elf.header.entrypoint'?: string | number | undefined; 'process.elf.header.object_version'?: string | undefined; 'process.elf.header.os_abi'?: string | undefined; 'process.elf.header.type'?: string | undefined; 'process.elf.header.version'?: string | undefined; 'process.elf.import_hash'?: string | undefined; 'process.elf.imports'?: unknown[] | undefined; 'process.elf.imports_names_entropy'?: string | number | undefined; 'process.elf.imports_names_var_entropy'?: string | number | undefined; 'process.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.elf.shared_libraries'?: string[] | undefined; 'process.elf.telfhash'?: string | undefined; 'process.end'?: string | number | undefined; 'process.entity_id'?: string | undefined; 'process.entry_leader.args'?: string[] | undefined; 'process.entry_leader.args_count'?: string | number | undefined; 'process.entry_leader.attested_groups.name'?: string | undefined; 'process.entry_leader.attested_user.id'?: string | undefined; 'process.entry_leader.attested_user.name'?: string | undefined; 'process.entry_leader.command_line'?: string | undefined; 'process.entry_leader.entity_id'?: string | undefined; 'process.entry_leader.entry_meta.source.ip'?: string | undefined; 'process.entry_leader.entry_meta.type'?: string | undefined; 'process.entry_leader.executable'?: string | undefined; 'process.entry_leader.group.id'?: string | undefined; 'process.entry_leader.group.name'?: string | undefined; 'process.entry_leader.interactive'?: boolean | undefined; 'process.entry_leader.name'?: string | undefined; 'process.entry_leader.parent.entity_id'?: string | undefined; 'process.entry_leader.parent.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.entity_id'?: string | undefined; 'process.entry_leader.parent.session_leader.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.start'?: string | number | undefined; 'process.entry_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.entry_leader.parent.start'?: string | number | undefined; 'process.entry_leader.parent.vpid'?: string | number | undefined; 'process.entry_leader.pid'?: string | number | undefined; 'process.entry_leader.real_group.id'?: string | undefined; 'process.entry_leader.real_group.name'?: string | undefined; 'process.entry_leader.real_user.id'?: string | undefined; 'process.entry_leader.real_user.name'?: string | undefined; 'process.entry_leader.same_as_process'?: boolean | undefined; 'process.entry_leader.saved_group.id'?: string | undefined; 'process.entry_leader.saved_group.name'?: string | undefined; 'process.entry_leader.saved_user.id'?: string | undefined; 'process.entry_leader.saved_user.name'?: string | undefined; 'process.entry_leader.start'?: string | number | undefined; 'process.entry_leader.supplemental_groups.id'?: string | undefined; 'process.entry_leader.supplemental_groups.name'?: string | undefined; 'process.entry_leader.tty'?: unknown; 'process.entry_leader.user.id'?: string | undefined; 'process.entry_leader.user.name'?: string | undefined; 'process.entry_leader.vpid'?: string | number | undefined; 'process.entry_leader.working_directory'?: string | undefined; 'process.env_vars'?: string[] | undefined; 'process.executable'?: string | undefined; 'process.exit_code'?: string | number | undefined; 'process.group_leader.args'?: string[] | undefined; 'process.group_leader.args_count'?: string | number | undefined; 'process.group_leader.command_line'?: string | undefined; 'process.group_leader.entity_id'?: string | undefined; 'process.group_leader.executable'?: string | undefined; 'process.group_leader.group.id'?: string | undefined; 'process.group_leader.group.name'?: string | undefined; 'process.group_leader.interactive'?: boolean | undefined; 'process.group_leader.name'?: string | undefined; 'process.group_leader.pid'?: string | number | undefined; 'process.group_leader.real_group.id'?: string | undefined; 'process.group_leader.real_group.name'?: string | undefined; 'process.group_leader.real_user.id'?: string | undefined; 'process.group_leader.real_user.name'?: string | undefined; 'process.group_leader.same_as_process'?: boolean | undefined; 'process.group_leader.saved_group.id'?: string | undefined; 'process.group_leader.saved_group.name'?: string | undefined; 'process.group_leader.saved_user.id'?: string | undefined; 'process.group_leader.saved_user.name'?: string | undefined; 'process.group_leader.start'?: string | number | undefined; 'process.group_leader.supplemental_groups.id'?: string | undefined; 'process.group_leader.supplemental_groups.name'?: string | undefined; 'process.group_leader.tty'?: unknown; 'process.group_leader.user.id'?: string | undefined; 'process.group_leader.user.name'?: string | undefined; 'process.group_leader.vpid'?: string | number | undefined; 'process.group_leader.working_directory'?: string | undefined; 'process.hash.md5'?: string | undefined; 'process.hash.sha1'?: string | undefined; 'process.hash.sha256'?: string | undefined; 'process.hash.sha384'?: string | undefined; 'process.hash.sha512'?: string | undefined; 'process.hash.ssdeep'?: string | undefined; 'process.hash.tlsh'?: string | undefined; 'process.interactive'?: boolean | undefined; 'process.io'?: unknown; 'process.macho.go_import_hash'?: string | undefined; 'process.macho.go_imports'?: unknown; 'process.macho.go_imports_names_entropy'?: string | number | undefined; 'process.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.macho.go_stripped'?: boolean | undefined; 'process.macho.import_hash'?: string | undefined; 'process.macho.imports'?: unknown[] | undefined; 'process.macho.imports_names_entropy'?: string | number | undefined; 'process.macho.imports_names_var_entropy'?: string | number | undefined; 'process.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.macho.symhash'?: string | undefined; 'process.name'?: string | undefined; 'process.parent.args'?: string[] | undefined; 'process.parent.args_count'?: string | number | undefined; 'process.parent.code_signature.digest_algorithm'?: string | undefined; 'process.parent.code_signature.exists'?: boolean | undefined; 'process.parent.code_signature.signing_id'?: string | undefined; 'process.parent.code_signature.status'?: string | undefined; 'process.parent.code_signature.subject_name'?: string | undefined; 'process.parent.code_signature.team_id'?: string | undefined; 'process.parent.code_signature.timestamp'?: string | number | undefined; 'process.parent.code_signature.trusted'?: boolean | undefined; 'process.parent.code_signature.valid'?: boolean | undefined; 'process.parent.command_line'?: string | undefined; 'process.parent.elf.architecture'?: string | undefined; 'process.parent.elf.byte_order'?: string | undefined; 'process.parent.elf.cpu_type'?: string | undefined; 'process.parent.elf.creation_date'?: string | number | undefined; 'process.parent.elf.exports'?: unknown[] | undefined; 'process.parent.elf.go_import_hash'?: string | undefined; 'process.parent.elf.go_imports'?: unknown; 'process.parent.elf.go_imports_names_entropy'?: string | number | undefined; 'process.parent.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.go_stripped'?: boolean | undefined; 'process.parent.elf.header.abi_version'?: string | undefined; 'process.parent.elf.header.class'?: string | undefined; 'process.parent.elf.header.data'?: string | undefined; 'process.parent.elf.header.entrypoint'?: string | number | undefined; 'process.parent.elf.header.object_version'?: string | undefined; 'process.parent.elf.header.os_abi'?: string | undefined; 'process.parent.elf.header.type'?: string | undefined; 'process.parent.elf.header.version'?: string | undefined; 'process.parent.elf.import_hash'?: string | undefined; 'process.parent.elf.imports'?: unknown[] | undefined; 'process.parent.elf.imports_names_entropy'?: string | number | undefined; 'process.parent.elf.imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.parent.elf.shared_libraries'?: string[] | undefined; 'process.parent.elf.telfhash'?: string | undefined; 'process.parent.end'?: string | number | undefined; 'process.parent.entity_id'?: string | undefined; 'process.parent.executable'?: string | undefined; 'process.parent.exit_code'?: string | number | undefined; 'process.parent.group.id'?: string | undefined; 'process.parent.group.name'?: string | undefined; 'process.parent.group_leader.entity_id'?: string | undefined; 'process.parent.group_leader.pid'?: string | number | undefined; 'process.parent.group_leader.start'?: string | number | undefined; 'process.parent.group_leader.vpid'?: string | number | undefined; 'process.parent.hash.md5'?: string | undefined; 'process.parent.hash.sha1'?: string | undefined; 'process.parent.hash.sha256'?: string | undefined; 'process.parent.hash.sha384'?: string | undefined; 'process.parent.hash.sha512'?: string | undefined; 'process.parent.hash.ssdeep'?: string | undefined; 'process.parent.hash.tlsh'?: string | undefined; 'process.parent.interactive'?: boolean | undefined; 'process.parent.macho.go_import_hash'?: string | undefined; 'process.parent.macho.go_imports'?: unknown; 'process.parent.macho.go_imports_names_entropy'?: string | number | undefined; 'process.parent.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.go_stripped'?: boolean | undefined; 'process.parent.macho.import_hash'?: string | undefined; 'process.parent.macho.imports'?: unknown[] | undefined; 'process.parent.macho.imports_names_entropy'?: string | number | undefined; 'process.parent.macho.imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.macho.symhash'?: string | undefined; 'process.parent.name'?: string | undefined; 'process.parent.pe.architecture'?: string | undefined; 'process.parent.pe.company'?: string | undefined; 'process.parent.pe.description'?: string | undefined; 'process.parent.pe.file_version'?: string | undefined; 'process.parent.pe.go_import_hash'?: string | undefined; 'process.parent.pe.go_imports'?: unknown; 'process.parent.pe.go_imports_names_entropy'?: string | number | undefined; 'process.parent.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.go_stripped'?: boolean | undefined; 'process.parent.pe.imphash'?: string | undefined; 'process.parent.pe.import_hash'?: string | undefined; 'process.parent.pe.imports'?: unknown[] | undefined; 'process.parent.pe.imports_names_entropy'?: string | number | undefined; 'process.parent.pe.imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.original_file_name'?: string | undefined; 'process.parent.pe.pehash'?: string | undefined; 'process.parent.pe.product'?: string | undefined; 'process.parent.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.pgid'?: string | number | undefined; 'process.parent.pid'?: string | number | undefined; 'process.parent.real_group.id'?: string | undefined; 'process.parent.real_group.name'?: string | undefined; 'process.parent.real_user.id'?: string | undefined; 'process.parent.real_user.name'?: string | undefined; 'process.parent.saved_group.id'?: string | undefined; 'process.parent.saved_group.name'?: string | undefined; 'process.parent.saved_user.id'?: string | undefined; 'process.parent.saved_user.name'?: string | undefined; 'process.parent.start'?: string | number | undefined; 'process.parent.supplemental_groups.id'?: string | undefined; 'process.parent.supplemental_groups.name'?: string | undefined; 'process.parent.thread.capabilities.effective'?: string[] | undefined; 'process.parent.thread.capabilities.permitted'?: string[] | undefined; 'process.parent.thread.id'?: string | number | undefined; 'process.parent.thread.name'?: string | undefined; 'process.parent.title'?: string | undefined; 'process.parent.tty'?: unknown; 'process.parent.uptime'?: string | number | undefined; 'process.parent.user.id'?: string | undefined; 'process.parent.user.name'?: string | undefined; 'process.parent.vpid'?: string | number | undefined; 'process.parent.working_directory'?: string | undefined; 'process.pe.architecture'?: string | undefined; 'process.pe.company'?: string | undefined; 'process.pe.description'?: string | undefined; 'process.pe.file_version'?: string | undefined; 'process.pe.go_import_hash'?: string | undefined; 'process.pe.go_imports'?: unknown; 'process.pe.go_imports_names_entropy'?: string | number | undefined; 'process.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.pe.go_stripped'?: boolean | undefined; 'process.pe.imphash'?: string | undefined; 'process.pe.import_hash'?: string | undefined; 'process.pe.imports'?: unknown[] | undefined; 'process.pe.imports_names_entropy'?: string | number | undefined; 'process.pe.imports_names_var_entropy'?: string | number | undefined; 'process.pe.original_file_name'?: string | undefined; 'process.pe.pehash'?: string | undefined; 'process.pe.product'?: string | undefined; 'process.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.pgid'?: string | number | undefined; 'process.pid'?: string | number | undefined; 'process.previous.args'?: string[] | undefined; 'process.previous.args_count'?: string | number | undefined; 'process.previous.executable'?: string | undefined; 'process.real_group.id'?: string | undefined; 'process.real_group.name'?: string | undefined; 'process.real_user.id'?: string | undefined; 'process.real_user.name'?: string | undefined; 'process.saved_group.id'?: string | undefined; 'process.saved_group.name'?: string | undefined; 'process.saved_user.id'?: string | undefined; 'process.saved_user.name'?: string | undefined; 'process.session_leader.args'?: string[] | undefined; 'process.session_leader.args_count'?: string | number | undefined; 'process.session_leader.command_line'?: string | undefined; 'process.session_leader.entity_id'?: string | undefined; 'process.session_leader.executable'?: string | undefined; 'process.session_leader.group.id'?: string | undefined; 'process.session_leader.group.name'?: string | undefined; 'process.session_leader.interactive'?: boolean | undefined; 'process.session_leader.name'?: string | undefined; 'process.session_leader.parent.entity_id'?: string | undefined; 'process.session_leader.parent.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.entity_id'?: string | undefined; 'process.session_leader.parent.session_leader.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.start'?: string | number | undefined; 'process.session_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.session_leader.parent.start'?: string | number | undefined; 'process.session_leader.parent.vpid'?: string | number | undefined; 'process.session_leader.pid'?: string | number | undefined; 'process.session_leader.real_group.id'?: string | undefined; 'process.session_leader.real_group.name'?: string | undefined; 'process.session_leader.real_user.id'?: string | undefined; 'process.session_leader.real_user.name'?: string | undefined; 'process.session_leader.same_as_process'?: boolean | undefined; 'process.session_leader.saved_group.id'?: string | undefined; 'process.session_leader.saved_group.name'?: string | undefined; 'process.session_leader.saved_user.id'?: string | undefined; 'process.session_leader.saved_user.name'?: string | undefined; 'process.session_leader.start'?: string | number | undefined; 'process.session_leader.supplemental_groups.id'?: string | undefined; 'process.session_leader.supplemental_groups.name'?: string | undefined; 'process.session_leader.tty'?: unknown; 'process.session_leader.user.id'?: string | undefined; 'process.session_leader.user.name'?: string | undefined; 'process.session_leader.vpid'?: string | number | undefined; 'process.session_leader.working_directory'?: string | undefined; 'process.start'?: string | number | undefined; 'process.supplemental_groups.id'?: string | undefined; 'process.supplemental_groups.name'?: string | undefined; 'process.thread.capabilities.effective'?: string[] | undefined; 'process.thread.capabilities.permitted'?: string[] | undefined; 'process.thread.id'?: string | number | undefined; 'process.thread.name'?: string | undefined; 'process.title'?: string | undefined; 'process.tty'?: unknown; 'process.uptime'?: string | number | undefined; 'process.user.id'?: string | undefined; 'process.user.name'?: string | undefined; 'process.vpid'?: string | number | undefined; 'process.working_directory'?: string | undefined; 'registry.data.bytes'?: string | undefined; 'registry.data.strings'?: string[] | undefined; 'registry.data.type'?: string | undefined; 'registry.hive'?: string | undefined; 'registry.key'?: string | undefined; 'registry.path'?: string | undefined; 'registry.value'?: string | undefined; 'related.hash'?: string[] | undefined; 'related.hosts'?: string[] | undefined; 'related.ip'?: string[] | undefined; 'related.user'?: string[] | undefined; 'rule.author'?: string[] | undefined; 'rule.category'?: string | undefined; 'rule.description'?: string | undefined; 'rule.id'?: string | undefined; 'rule.license'?: string | undefined; 'rule.name'?: string | undefined; 'rule.reference'?: string | undefined; 'rule.ruleset'?: string | undefined; 'rule.uuid'?: string | undefined; 'rule.version'?: string | undefined; 'server.address'?: string | undefined; 'server.as.number'?: string | number | undefined; 'server.as.organization.name'?: string | undefined; 'server.bytes'?: string | number | undefined; 'server.domain'?: string | undefined; 'server.geo.city_name'?: string | undefined; 'server.geo.continent_code'?: string | undefined; 'server.geo.continent_name'?: string | undefined; 'server.geo.country_iso_code'?: string | undefined; 'server.geo.country_name'?: string | undefined; 'server.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'server.geo.name'?: string | undefined; 'server.geo.postal_code'?: string | undefined; 'server.geo.region_iso_code'?: string | undefined; 'server.geo.region_name'?: string | undefined; 'server.geo.timezone'?: string | undefined; 'server.ip'?: string | undefined; 'server.mac'?: string | undefined; 'server.nat.ip'?: string | undefined; 'server.nat.port'?: string | number | undefined; 'server.packets'?: string | number | undefined; 'server.port'?: string | number | undefined; 'server.registered_domain'?: string | undefined; 'server.subdomain'?: string | undefined; 'server.top_level_domain'?: string | undefined; 'server.user.domain'?: string | undefined; 'server.user.email'?: string | undefined; 'server.user.full_name'?: string | undefined; 'server.user.group.domain'?: string | undefined; 'server.user.group.id'?: string | undefined; 'server.user.group.name'?: string | undefined; 'server.user.hash'?: string | undefined; 'server.user.id'?: string | undefined; 'server.user.name'?: string | undefined; 'server.user.roles'?: string[] | undefined; 'service.address'?: string | undefined; 'service.environment'?: string | undefined; 'service.ephemeral_id'?: string | undefined; 'service.id'?: string | undefined; 'service.name'?: string | undefined; 'service.node.name'?: string | undefined; 'service.node.role'?: string | undefined; 'service.node.roles'?: string[] | undefined; 'service.origin.address'?: string | undefined; 'service.origin.environment'?: string | undefined; 'service.origin.ephemeral_id'?: string | undefined; 'service.origin.id'?: string | undefined; 'service.origin.name'?: string | undefined; 'service.origin.node.name'?: string | undefined; 'service.origin.node.role'?: string | undefined; 'service.origin.node.roles'?: string[] | undefined; 'service.origin.state'?: string | undefined; 'service.origin.type'?: string | undefined; 'service.origin.version'?: string | undefined; 'service.state'?: string | undefined; 'service.target.address'?: string | undefined; 'service.target.environment'?: string | undefined; 'service.target.ephemeral_id'?: string | undefined; 'service.target.id'?: string | undefined; 'service.target.name'?: string | undefined; 'service.target.node.name'?: string | undefined; 'service.target.node.role'?: string | undefined; 'service.target.node.roles'?: string[] | undefined; 'service.target.state'?: string | undefined; 'service.target.type'?: string | undefined; 'service.target.version'?: string | undefined; 'service.type'?: string | undefined; 'service.version'?: string | undefined; 'source.address'?: string | undefined; 'source.as.number'?: string | number | undefined; 'source.as.organization.name'?: string | undefined; 'source.bytes'?: string | number | undefined; 'source.domain'?: string | undefined; 'source.geo.city_name'?: string | undefined; 'source.geo.continent_code'?: string | undefined; 'source.geo.continent_name'?: string | undefined; 'source.geo.country_iso_code'?: string | undefined; 'source.geo.country_name'?: string | undefined; 'source.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'source.geo.name'?: string | undefined; 'source.geo.postal_code'?: string | undefined; 'source.geo.region_iso_code'?: string | undefined; 'source.geo.region_name'?: string | undefined; 'source.geo.timezone'?: string | undefined; 'source.ip'?: string | undefined; 'source.mac'?: string | undefined; 'source.nat.ip'?: string | undefined; 'source.nat.port'?: string | number | undefined; 'source.packets'?: string | number | undefined; 'source.port'?: string | number | undefined; 'source.registered_domain'?: string | undefined; 'source.subdomain'?: string | undefined; 'source.top_level_domain'?: string | undefined; 'source.user.domain'?: string | undefined; 'source.user.email'?: string | undefined; 'source.user.full_name'?: string | undefined; 'source.user.group.domain'?: string | undefined; 'source.user.group.id'?: string | undefined; 'source.user.group.name'?: string | undefined; 'source.user.hash'?: string | undefined; 'source.user.id'?: string | undefined; 'source.user.name'?: string | undefined; 'source.user.roles'?: string[] | undefined; 'span.id'?: string | undefined; tags?: string[] | undefined; 'threat.enrichments'?: { indicator?: unknown; 'matched.atomic'?: string | undefined; 'matched.field'?: string | undefined; 'matched.id'?: string | undefined; 'matched.index'?: string | undefined; 'matched.occurred'?: string | number | undefined; 'matched.type'?: string | undefined; }[] | undefined; 'threat.feed.dashboard_id'?: string | undefined; 'threat.feed.description'?: string | undefined; 'threat.feed.name'?: string | undefined; 'threat.feed.reference'?: string | undefined; 'threat.framework'?: string | undefined; 'threat.group.alias'?: string[] | undefined; 'threat.group.id'?: string | undefined; 'threat.group.name'?: string | undefined; 'threat.group.reference'?: string | undefined; 'threat.indicator.as.number'?: string | number | undefined; 'threat.indicator.as.organization.name'?: string | undefined; 'threat.indicator.confidence'?: string | undefined; 'threat.indicator.description'?: string | undefined; 'threat.indicator.email.address'?: string | undefined; 'threat.indicator.file.accessed'?: string | number | undefined; 'threat.indicator.file.attributes'?: string[] | undefined; 'threat.indicator.file.code_signature.digest_algorithm'?: string | undefined; 'threat.indicator.file.code_signature.exists'?: boolean | undefined; 'threat.indicator.file.code_signature.signing_id'?: string | undefined; 'threat.indicator.file.code_signature.status'?: string | undefined; 'threat.indicator.file.code_signature.subject_name'?: string | undefined; 'threat.indicator.file.code_signature.team_id'?: string | undefined; 'threat.indicator.file.code_signature.timestamp'?: string | number | undefined; 'threat.indicator.file.code_signature.trusted'?: boolean | undefined; 'threat.indicator.file.code_signature.valid'?: boolean | undefined; 'threat.indicator.file.created'?: string | number | undefined; 'threat.indicator.file.ctime'?: string | number | undefined; 'threat.indicator.file.device'?: string | undefined; 'threat.indicator.file.directory'?: string | undefined; 'threat.indicator.file.drive_letter'?: string | undefined; 'threat.indicator.file.elf.architecture'?: string | undefined; 'threat.indicator.file.elf.byte_order'?: string | undefined; 'threat.indicator.file.elf.cpu_type'?: string | undefined; 'threat.indicator.file.elf.creation_date'?: string | number | undefined; 'threat.indicator.file.elf.exports'?: unknown[] | undefined; 'threat.indicator.file.elf.go_import_hash'?: string | undefined; 'threat.indicator.file.elf.go_imports'?: unknown; 'threat.indicator.file.elf.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_stripped'?: boolean | undefined; 'threat.indicator.file.elf.header.abi_version'?: string | undefined; 'threat.indicator.file.elf.header.class'?: string | undefined; 'threat.indicator.file.elf.header.data'?: string | undefined; 'threat.indicator.file.elf.header.entrypoint'?: string | number | undefined; 'threat.indicator.file.elf.header.object_version'?: string | undefined; 'threat.indicator.file.elf.header.os_abi'?: string | undefined; 'threat.indicator.file.elf.header.type'?: string | undefined; 'threat.indicator.file.elf.header.version'?: string | undefined; 'threat.indicator.file.elf.import_hash'?: string | undefined; 'threat.indicator.file.elf.imports'?: unknown[] | undefined; 'threat.indicator.file.elf.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'threat.indicator.file.elf.shared_libraries'?: string[] | undefined; 'threat.indicator.file.elf.telfhash'?: string | undefined; 'threat.indicator.file.extension'?: string | undefined; 'threat.indicator.file.fork_name'?: string | undefined; 'threat.indicator.file.gid'?: string | undefined; 'threat.indicator.file.group'?: string | undefined; 'threat.indicator.file.hash.md5'?: string | undefined; 'threat.indicator.file.hash.sha1'?: string | undefined; 'threat.indicator.file.hash.sha256'?: string | undefined; 'threat.indicator.file.hash.sha384'?: string | undefined; 'threat.indicator.file.hash.sha512'?: string | undefined; 'threat.indicator.file.hash.ssdeep'?: string | undefined; 'threat.indicator.file.hash.tlsh'?: string | undefined; 'threat.indicator.file.inode'?: string | undefined; 'threat.indicator.file.mime_type'?: string | undefined; 'threat.indicator.file.mode'?: string | undefined; 'threat.indicator.file.mtime'?: string | number | undefined; 'threat.indicator.file.name'?: string | undefined; 'threat.indicator.file.owner'?: string | undefined; 'threat.indicator.file.path'?: string | undefined; 'threat.indicator.file.pe.architecture'?: string | undefined; 'threat.indicator.file.pe.company'?: string | undefined; 'threat.indicator.file.pe.description'?: string | undefined; 'threat.indicator.file.pe.file_version'?: string | undefined; 'threat.indicator.file.pe.go_import_hash'?: string | undefined; 'threat.indicator.file.pe.go_imports'?: unknown; 'threat.indicator.file.pe.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_stripped'?: boolean | undefined; 'threat.indicator.file.pe.imphash'?: string | undefined; 'threat.indicator.file.pe.import_hash'?: string | undefined; 'threat.indicator.file.pe.imports'?: unknown[] | undefined; 'threat.indicator.file.pe.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.original_file_name'?: string | undefined; 'threat.indicator.file.pe.pehash'?: string | undefined; 'threat.indicator.file.pe.product'?: string | undefined; 'threat.indicator.file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.size'?: string | number | undefined; 'threat.indicator.file.target_path'?: string | undefined; 'threat.indicator.file.type'?: string | undefined; 'threat.indicator.file.uid'?: string | undefined; 'threat.indicator.file.x509.alternative_names'?: string[] | undefined; 'threat.indicator.file.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.file.x509.issuer.country'?: string[] | undefined; 'threat.indicator.file.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.not_after'?: string | number | undefined; 'threat.indicator.file.x509.not_before'?: string | number | undefined; 'threat.indicator.file.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.file.x509.public_key_curve'?: string | undefined; 'threat.indicator.file.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.file.x509.public_key_size'?: string | number | undefined; 'threat.indicator.file.x509.serial_number'?: string | undefined; 'threat.indicator.file.x509.signature_algorithm'?: string | undefined; 'threat.indicator.file.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.file.x509.subject.country'?: string[] | undefined; 'threat.indicator.file.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.subject.locality'?: string[] | undefined; 'threat.indicator.file.x509.subject.organization'?: string[] | undefined; 'threat.indicator.file.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.version_number'?: string | undefined; 'threat.indicator.first_seen'?: string | number | undefined; 'threat.indicator.geo.city_name'?: string | undefined; 'threat.indicator.geo.continent_code'?: string | undefined; 'threat.indicator.geo.continent_name'?: string | undefined; 'threat.indicator.geo.country_iso_code'?: string | undefined; 'threat.indicator.geo.country_name'?: string | undefined; 'threat.indicator.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'threat.indicator.geo.name'?: string | undefined; 'threat.indicator.geo.postal_code'?: string | undefined; 'threat.indicator.geo.region_iso_code'?: string | undefined; 'threat.indicator.geo.region_name'?: string | undefined; 'threat.indicator.geo.timezone'?: string | undefined; 'threat.indicator.ip'?: string | undefined; 'threat.indicator.last_seen'?: string | number | undefined; 'threat.indicator.marking.tlp'?: string | undefined; 'threat.indicator.marking.tlp_version'?: string | undefined; 'threat.indicator.modified_at'?: string | number | undefined; 'threat.indicator.name'?: string | undefined; 'threat.indicator.port'?: string | number | undefined; 'threat.indicator.provider'?: string | undefined; 'threat.indicator.reference'?: string | undefined; 'threat.indicator.registry.data.bytes'?: string | undefined; 'threat.indicator.registry.data.strings'?: string[] | undefined; 'threat.indicator.registry.data.type'?: string | undefined; 'threat.indicator.registry.hive'?: string | undefined; 'threat.indicator.registry.key'?: string | undefined; 'threat.indicator.registry.path'?: string | undefined; 'threat.indicator.registry.value'?: string | undefined; 'threat.indicator.scanner_stats'?: string | number | undefined; 'threat.indicator.sightings'?: string | number | undefined; 'threat.indicator.type'?: string | undefined; 'threat.indicator.url.domain'?: string | undefined; 'threat.indicator.url.extension'?: string | undefined; 'threat.indicator.url.fragment'?: string | undefined; 'threat.indicator.url.full'?: string | undefined; 'threat.indicator.url.original'?: string | undefined; 'threat.indicator.url.password'?: string | undefined; 'threat.indicator.url.path'?: string | undefined; 'threat.indicator.url.port'?: string | number | undefined; 'threat.indicator.url.query'?: string | undefined; 'threat.indicator.url.registered_domain'?: string | undefined; 'threat.indicator.url.scheme'?: string | undefined; 'threat.indicator.url.subdomain'?: string | undefined; 'threat.indicator.url.top_level_domain'?: string | undefined; 'threat.indicator.url.username'?: string | undefined; 'threat.indicator.x509.alternative_names'?: string[] | undefined; 'threat.indicator.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.x509.issuer.country'?: string[] | undefined; 'threat.indicator.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.x509.not_after'?: string | number | undefined; 'threat.indicator.x509.not_before'?: string | number | undefined; 'threat.indicator.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.x509.public_key_curve'?: string | undefined; 'threat.indicator.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.x509.public_key_size'?: string | number | undefined; 'threat.indicator.x509.serial_number'?: string | undefined; 'threat.indicator.x509.signature_algorithm'?: string | undefined; 'threat.indicator.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.x509.subject.country'?: string[] | undefined; 'threat.indicator.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.x509.subject.locality'?: string[] | undefined; 'threat.indicator.x509.subject.organization'?: string[] | undefined; 'threat.indicator.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.x509.version_number'?: string | undefined; 'threat.software.alias'?: string[] | undefined; 'threat.software.id'?: string | undefined; 'threat.software.name'?: string | undefined; 'threat.software.platforms'?: string[] | undefined; 'threat.software.reference'?: string | undefined; 'threat.software.type'?: string | undefined; 'threat.tactic.id'?: string[] | undefined; 'threat.tactic.name'?: string[] | undefined; 'threat.tactic.reference'?: string[] | undefined; 'threat.technique.id'?: string[] | undefined; 'threat.technique.name'?: string[] | undefined; 'threat.technique.reference'?: string[] | undefined; 'threat.technique.subtechnique.id'?: string[] | undefined; 'threat.technique.subtechnique.name'?: string[] | undefined; 'threat.technique.subtechnique.reference'?: string[] | undefined; 'tls.cipher'?: string | undefined; 'tls.client.certificate'?: string | undefined; 'tls.client.certificate_chain'?: string[] | undefined; 'tls.client.hash.md5'?: string | undefined; 'tls.client.hash.sha1'?: string | undefined; 'tls.client.hash.sha256'?: string | undefined; 'tls.client.issuer'?: string | undefined; 'tls.client.ja3'?: string | undefined; 'tls.client.not_after'?: string | number | undefined; 'tls.client.not_before'?: string | number | undefined; 'tls.client.server_name'?: string | undefined; 'tls.client.subject'?: string | undefined; 'tls.client.supported_ciphers'?: string[] | undefined; 'tls.client.x509.alternative_names'?: string[] | undefined; 'tls.client.x509.issuer.common_name'?: string[] | undefined; 'tls.client.x509.issuer.country'?: string[] | undefined; 'tls.client.x509.issuer.distinguished_name'?: string | undefined; 'tls.client.x509.issuer.locality'?: string[] | undefined; 'tls.client.x509.issuer.organization'?: string[] | undefined; 'tls.client.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.client.x509.issuer.state_or_province'?: string[] | undefined; 'tls.client.x509.not_after'?: string | number | undefined; 'tls.client.x509.not_before'?: string | number | undefined; 'tls.client.x509.public_key_algorithm'?: string | undefined; 'tls.client.x509.public_key_curve'?: string | undefined; 'tls.client.x509.public_key_exponent'?: string | number | undefined; 'tls.client.x509.public_key_size'?: string | number | undefined; 'tls.client.x509.serial_number'?: string | undefined; 'tls.client.x509.signature_algorithm'?: string | undefined; 'tls.client.x509.subject.common_name'?: string[] | undefined; 'tls.client.x509.subject.country'?: string[] | undefined; 'tls.client.x509.subject.distinguished_name'?: string | undefined; 'tls.client.x509.subject.locality'?: string[] | undefined; 'tls.client.x509.subject.organization'?: string[] | undefined; 'tls.client.x509.subject.organizational_unit'?: string[] | undefined; 'tls.client.x509.subject.state_or_province'?: string[] | undefined; 'tls.client.x509.version_number'?: string | undefined; 'tls.curve'?: string | undefined; 'tls.established'?: boolean | undefined; 'tls.next_protocol'?: string | undefined; 'tls.resumed'?: boolean | undefined; 'tls.server.certificate'?: string | undefined; 'tls.server.certificate_chain'?: string[] | undefined; 'tls.server.hash.md5'?: string | undefined; 'tls.server.hash.sha1'?: string | undefined; 'tls.server.hash.sha256'?: string | undefined; 'tls.server.issuer'?: string | undefined; 'tls.server.ja3s'?: string | undefined; 'tls.server.not_after'?: string | number | undefined; 'tls.server.not_before'?: string | number | undefined; 'tls.server.subject'?: string | undefined; 'tls.server.x509.alternative_names'?: string[] | undefined; 'tls.server.x509.issuer.common_name'?: string[] | undefined; 'tls.server.x509.issuer.country'?: string[] | undefined; 'tls.server.x509.issuer.distinguished_name'?: string | undefined; 'tls.server.x509.issuer.locality'?: string[] | undefined; 'tls.server.x509.issuer.organization'?: string[] | undefined; 'tls.server.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.server.x509.issuer.state_or_province'?: string[] | undefined; 'tls.server.x509.not_after'?: string | number | undefined; 'tls.server.x509.not_before'?: string | number | undefined; 'tls.server.x509.public_key_algorithm'?: string | undefined; 'tls.server.x509.public_key_curve'?: string | undefined; 'tls.server.x509.public_key_exponent'?: string | number | undefined; 'tls.server.x509.public_key_size'?: string | number | undefined; 'tls.server.x509.serial_number'?: string | undefined; 'tls.server.x509.signature_algorithm'?: string | undefined; 'tls.server.x509.subject.common_name'?: string[] | undefined; 'tls.server.x509.subject.country'?: string[] | undefined; 'tls.server.x509.subject.distinguished_name'?: string | undefined; 'tls.server.x509.subject.locality'?: string[] | undefined; 'tls.server.x509.subject.organization'?: string[] | undefined; 'tls.server.x509.subject.organizational_unit'?: string[] | undefined; 'tls.server.x509.subject.state_or_province'?: string[] | undefined; 'tls.server.x509.version_number'?: string | undefined; 'tls.version'?: string | undefined; 'tls.version_protocol'?: string | undefined; 'trace.id'?: string | undefined; 'transaction.id'?: string | undefined; 'url.domain'?: string | undefined; 'url.extension'?: string | undefined; 'url.fragment'?: string | undefined; 'url.full'?: string | undefined; 'url.original'?: string | undefined; 'url.password'?: string | undefined; 'url.path'?: string | undefined; 'url.port'?: string | number | undefined; 'url.query'?: string | undefined; 'url.registered_domain'?: string | undefined; 'url.scheme'?: string | undefined; 'url.subdomain'?: string | undefined; 'url.top_level_domain'?: string | undefined; 'url.username'?: string | undefined; 'user.changes.domain'?: string | undefined; 'user.changes.email'?: string | undefined; 'user.changes.full_name'?: string | undefined; 'user.changes.group.domain'?: string | undefined; 'user.changes.group.id'?: string | undefined; 'user.changes.group.name'?: string | undefined; 'user.changes.hash'?: string | undefined; 'user.changes.id'?: string | undefined; 'user.changes.name'?: string | undefined; 'user.changes.roles'?: string[] | undefined; 'user.domain'?: string | undefined; 'user.effective.domain'?: string | undefined; 'user.effective.email'?: string | undefined; 'user.effective.full_name'?: string | undefined; 'user.effective.group.domain'?: string | undefined; 'user.effective.group.id'?: string | undefined; 'user.effective.group.name'?: string | undefined; 'user.effective.hash'?: string | undefined; 'user.effective.id'?: string | undefined; 'user.effective.name'?: string | undefined; 'user.effective.roles'?: string[] | undefined; 'user.email'?: string | undefined; 'user.full_name'?: string | undefined; 'user.group.domain'?: string | undefined; 'user.group.id'?: string | undefined; 'user.group.name'?: string | undefined; 'user.hash'?: string | undefined; 'user.id'?: string | undefined; 'user.name'?: string | undefined; 'user.risk.calculated_level'?: string | undefined; 'user.risk.calculated_score'?: number | undefined; 'user.risk.calculated_score_norm'?: number | undefined; 'user.risk.static_level'?: string | undefined; 'user.risk.static_score'?: number | undefined; 'user.risk.static_score_norm'?: number | undefined; 'user.roles'?: string[] | undefined; 'user.target.domain'?: string | undefined; 'user.target.email'?: string | undefined; 'user.target.full_name'?: string | undefined; 'user.target.group.domain'?: string | undefined; 'user.target.group.id'?: string | undefined; 'user.target.group.name'?: string | undefined; 'user.target.hash'?: string | undefined; 'user.target.id'?: string | undefined; 'user.target.name'?: string | undefined; 'user.target.roles'?: string[] | undefined; 'user_agent.device.name'?: string | undefined; 'user_agent.name'?: string | undefined; 'user_agent.original'?: string | undefined; 'user_agent.os.family'?: string | undefined; 'user_agent.os.full'?: string | undefined; 'user_agent.os.kernel'?: string | undefined; 'user_agent.os.name'?: string | undefined; 'user_agent.os.platform'?: string | undefined; 'user_agent.os.type'?: string | undefined; 'user_agent.os.version'?: string | undefined; 'user_agent.version'?: string | undefined; 'vulnerability.category'?: string[] | undefined; 'vulnerability.classification'?: string | undefined; 'vulnerability.description'?: string | undefined; 'vulnerability.enumeration'?: string | undefined; 'vulnerability.id'?: string | undefined; 'vulnerability.reference'?: string | undefined; 'vulnerability.report_id'?: string | undefined; 'vulnerability.scanner.vendor'?: string | undefined; 'vulnerability.score.base'?: number | undefined; 'vulnerability.score.environmental'?: number | undefined; 'vulnerability.score.temporal'?: number | undefined; 'vulnerability.score.version'?: string | undefined; 'vulnerability.severity'?: string | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }) | ({} & { 'kibana.alert.context'?: unknown; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | number | undefined; 'kibana.alert.evaluation.values'?: (string | number)[] | undefined; 'kibana.alert.group'?: { field?: string[] | undefined; value?: string[] | undefined; }[] | undefined; 'slo.id'?: string | undefined; 'slo.instanceId'?: string | undefined; 'slo.revision'?: string | number | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }) | ({} & { 'agent.name'?: string | undefined; 'anomaly.bucket_span.minutes'?: string | undefined; 'anomaly.start'?: string | number | undefined; 'error.message'?: string | undefined; 'kibana.alert.context'?: unknown; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | number | undefined; 'kibana.alert.evaluation.values'?: (string | number)[] | undefined; 'kibana.alert.group'?: { field?: string[] | undefined; value?: string[] | undefined; }[] | undefined; 'monitor.id'?: string | undefined; 'monitor.name'?: string | undefined; 'monitor.type'?: string | undefined; 'observer.geo.name'?: string | undefined; 'tls.server.hash.sha256'?: string | undefined; 'tls.server.x509.issuer.common_name'?: string | undefined; 'tls.server.x509.not_after'?: string | number | undefined; 'tls.server.x509.not_before'?: string | number | undefined; 'tls.server.x509.subject.common_name'?: string | undefined; 'url.full'?: string | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }) | ({ '@timestamp': string | number; 'kibana.alert.ancestors': { depth: string | number; id: string; index: string; type: string; }[]; 'kibana.alert.depth': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.original_event.action': string; 'kibana.alert.original_event.category': string[]; 'kibana.alert.original_event.created': string | number; 'kibana.alert.original_event.dataset': string; 'kibana.alert.original_event.id': string; 'kibana.alert.original_event.ingested': string | number; 'kibana.alert.original_event.kind': string; 'kibana.alert.original_event.module': string; 'kibana.alert.original_event.original': string; 'kibana.alert.original_event.outcome': string; 'kibana.alert.original_event.provider': string; 'kibana.alert.original_event.sequence': string | number; 'kibana.alert.original_event.type': string[]; 'kibana.alert.original_time': string | number; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.false_positives': string[]; 'kibana.alert.rule.max_signals': (string | number)[]; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.threat.framework': string; 'kibana.alert.rule.threat.tactic.id': string; 'kibana.alert.rule.threat.tactic.name': string; 'kibana.alert.rule.threat.tactic.reference': string; 'kibana.alert.rule.threat.technique.id': string; 'kibana.alert.rule.threat.technique.name': string; 'kibana.alert.rule.threat.technique.reference': string; 'kibana.alert.rule.threat.technique.subtechnique.id': string; 'kibana.alert.rule.threat.technique.subtechnique.name': string; 'kibana.alert.rule.threat.technique.subtechnique.reference': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'ecs.version'?: string | undefined; 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'host.asset.criticality'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.ancestors.rule'?: string | undefined; 'kibana.alert.building_block_type'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.group.id'?: string | undefined; 'kibana.alert.group.index'?: number | undefined; 'kibana.alert.host.criticality_level'?: string | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.new_terms'?: string[] | undefined; 'kibana.alert.original_event.agent_id_status'?: string | undefined; 'kibana.alert.original_event.code'?: string | undefined; 'kibana.alert.original_event.duration'?: string | undefined; 'kibana.alert.original_event.end'?: string | number | undefined; 'kibana.alert.original_event.hash'?: string | undefined; 'kibana.alert.original_event.reason'?: string | undefined; 'kibana.alert.original_event.reference'?: string | undefined; 'kibana.alert.original_event.risk_score'?: number | undefined; 'kibana.alert.original_event.risk_score_norm'?: number | undefined; 'kibana.alert.original_event.severity'?: string | number | undefined; 'kibana.alert.original_event.start'?: string | number | undefined; 'kibana.alert.original_event.timezone'?: string | undefined; 'kibana.alert.original_event.url'?: string | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.building_block_type'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.immutable'?: string[] | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.rule.timeline_id'?: string[] | undefined; 'kibana.alert.rule.timeline_title'?: string[] | undefined; 'kibana.alert.rule.timestamp_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.threshold_result.cardinality'?: unknown; 'kibana.alert.threshold_result.count'?: string | number | undefined; 'kibana.alert.threshold_result.from'?: string | number | undefined; 'kibana.alert.threshold_result.terms'?: { field?: string | undefined; value?: string | undefined; }[] | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.user.criticality_level'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.alert.workflow_user'?: string | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; 'user.asset.criticality'?: string | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & { '@timestamp': string | number; 'ecs.version': string; } & { 'agent.build.original'?: string | undefined; 'agent.ephemeral_id'?: string | undefined; 'agent.id'?: string | undefined; 'agent.name'?: string | undefined; 'agent.type'?: string | undefined; 'agent.version'?: string | undefined; 'client.address'?: string | undefined; 'client.as.number'?: string | number | undefined; 'client.as.organization.name'?: string | undefined; 'client.bytes'?: string | number | undefined; 'client.domain'?: string | undefined; 'client.geo.city_name'?: string | undefined; 'client.geo.continent_code'?: string | undefined; 'client.geo.continent_name'?: string | undefined; 'client.geo.country_iso_code'?: string | undefined; 'client.geo.country_name'?: string | undefined; 'client.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'client.geo.name'?: string | undefined; 'client.geo.postal_code'?: string | undefined; 'client.geo.region_iso_code'?: string | undefined; 'client.geo.region_name'?: string | undefined; 'client.geo.timezone'?: string | undefined; 'client.ip'?: string | undefined; 'client.mac'?: string | undefined; 'client.nat.ip'?: string | undefined; 'client.nat.port'?: string | number | undefined; 'client.packets'?: string | number | undefined; 'client.port'?: string | number | undefined; 'client.registered_domain'?: string | undefined; 'client.subdomain'?: string | undefined; 'client.top_level_domain'?: string | undefined; 'client.user.domain'?: string | undefined; 'client.user.email'?: string | undefined; 'client.user.full_name'?: string | undefined; 'client.user.group.domain'?: string | undefined; 'client.user.group.id'?: string | undefined; 'client.user.group.name'?: string | undefined; 'client.user.hash'?: string | undefined; 'client.user.id'?: string | undefined; 'client.user.name'?: string | undefined; 'client.user.roles'?: string[] | undefined; 'cloud.account.id'?: string | undefined; 'cloud.account.name'?: string | undefined; 'cloud.availability_zone'?: string | undefined; 'cloud.instance.id'?: string | undefined; 'cloud.instance.name'?: string | undefined; 'cloud.machine.type'?: string | undefined; 'cloud.origin.account.id'?: string | undefined; 'cloud.origin.account.name'?: string | undefined; 'cloud.origin.availability_zone'?: string | undefined; 'cloud.origin.instance.id'?: string | undefined; 'cloud.origin.instance.name'?: string | undefined; 'cloud.origin.machine.type'?: string | undefined; 'cloud.origin.project.id'?: string | undefined; 'cloud.origin.project.name'?: string | undefined; 'cloud.origin.provider'?: string | undefined; 'cloud.origin.region'?: string | undefined; 'cloud.origin.service.name'?: string | undefined; 'cloud.project.id'?: string | undefined; 'cloud.project.name'?: string | undefined; 'cloud.provider'?: string | undefined; 'cloud.region'?: string | undefined; 'cloud.service.name'?: string | undefined; 'cloud.target.account.id'?: string | undefined; 'cloud.target.account.name'?: string | undefined; 'cloud.target.availability_zone'?: string | undefined; 'cloud.target.instance.id'?: string | undefined; 'cloud.target.instance.name'?: string | undefined; 'cloud.target.machine.type'?: string | undefined; 'cloud.target.project.id'?: string | undefined; 'cloud.target.project.name'?: string | undefined; 'cloud.target.provider'?: string | undefined; 'cloud.target.region'?: string | undefined; 'cloud.target.service.name'?: string | undefined; 'container.cpu.usage'?: string | number | undefined; 'container.disk.read.bytes'?: string | number | undefined; 'container.disk.write.bytes'?: string | number | undefined; 'container.id'?: string | undefined; 'container.image.hash.all'?: string[] | undefined; 'container.image.name'?: string | undefined; 'container.image.tag'?: string[] | undefined; 'container.labels'?: unknown; 'container.memory.usage'?: string | number | undefined; 'container.name'?: string | undefined; 'container.network.egress.bytes'?: string | number | undefined; 'container.network.ingress.bytes'?: string | number | undefined; 'container.runtime'?: string | undefined; 'container.security_context.privileged'?: boolean | undefined; 'destination.address'?: string | undefined; 'destination.as.number'?: string | number | undefined; 'destination.as.organization.name'?: string | undefined; 'destination.bytes'?: string | number | undefined; 'destination.domain'?: string | undefined; 'destination.geo.city_name'?: string | undefined; 'destination.geo.continent_code'?: string | undefined; 'destination.geo.continent_name'?: string | undefined; 'destination.geo.country_iso_code'?: string | undefined; 'destination.geo.country_name'?: string | undefined; 'destination.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'destination.geo.name'?: string | undefined; 'destination.geo.postal_code'?: string | undefined; 'destination.geo.region_iso_code'?: string | undefined; 'destination.geo.region_name'?: string | undefined; 'destination.geo.timezone'?: string | undefined; 'destination.ip'?: string | undefined; 'destination.mac'?: string | undefined; 'destination.nat.ip'?: string | undefined; 'destination.nat.port'?: string | number | undefined; 'destination.packets'?: string | number | undefined; 'destination.port'?: string | number | undefined; 'destination.registered_domain'?: string | undefined; 'destination.subdomain'?: string | undefined; 'destination.top_level_domain'?: string | undefined; 'destination.user.domain'?: string | undefined; 'destination.user.email'?: string | undefined; 'destination.user.full_name'?: string | undefined; 'destination.user.group.domain'?: string | undefined; 'destination.user.group.id'?: string | undefined; 'destination.user.group.name'?: string | undefined; 'destination.user.hash'?: string | undefined; 'destination.user.id'?: string | undefined; 'destination.user.name'?: string | undefined; 'destination.user.roles'?: string[] | undefined; 'device.id'?: string | undefined; 'device.manufacturer'?: string | undefined; 'device.model.identifier'?: string | undefined; 'device.model.name'?: string | undefined; 'dll.code_signature.digest_algorithm'?: string | undefined; 'dll.code_signature.exists'?: boolean | undefined; 'dll.code_signature.signing_id'?: string | undefined; 'dll.code_signature.status'?: string | undefined; 'dll.code_signature.subject_name'?: string | undefined; 'dll.code_signature.team_id'?: string | undefined; 'dll.code_signature.timestamp'?: string | number | undefined; 'dll.code_signature.trusted'?: boolean | undefined; 'dll.code_signature.valid'?: boolean | undefined; 'dll.hash.md5'?: string | undefined; 'dll.hash.sha1'?: string | undefined; 'dll.hash.sha256'?: string | undefined; 'dll.hash.sha384'?: string | undefined; 'dll.hash.sha512'?: string | undefined; 'dll.hash.ssdeep'?: string | undefined; 'dll.hash.tlsh'?: string | undefined; 'dll.name'?: string | undefined; 'dll.path'?: string | undefined; 'dll.pe.architecture'?: string | undefined; 'dll.pe.company'?: string | undefined; 'dll.pe.description'?: string | undefined; 'dll.pe.file_version'?: string | undefined; 'dll.pe.go_import_hash'?: string | undefined; 'dll.pe.go_imports'?: unknown; 'dll.pe.go_imports_names_entropy'?: string | number | undefined; 'dll.pe.go_imports_names_var_entropy'?: string | number | undefined; 'dll.pe.go_stripped'?: boolean | undefined; 'dll.pe.imphash'?: string | undefined; 'dll.pe.import_hash'?: string | undefined; 'dll.pe.imports'?: unknown[] | undefined; 'dll.pe.imports_names_entropy'?: string | number | undefined; 'dll.pe.imports_names_var_entropy'?: string | number | undefined; 'dll.pe.original_file_name'?: string | undefined; 'dll.pe.pehash'?: string | undefined; 'dll.pe.product'?: string | undefined; 'dll.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'dns.answers'?: { class?: string | undefined; data?: string | undefined; name?: string | undefined; ttl?: string | number | undefined; type?: string | undefined; }[] | undefined; 'dns.header_flags'?: string[] | undefined; 'dns.id'?: string | undefined; 'dns.op_code'?: string | undefined; 'dns.question.class'?: string | undefined; 'dns.question.name'?: string | undefined; 'dns.question.registered_domain'?: string | undefined; 'dns.question.subdomain'?: string | undefined; 'dns.question.top_level_domain'?: string | undefined; 'dns.question.type'?: string | undefined; 'dns.resolved_ip'?: string[] | undefined; 'dns.response_code'?: string | undefined; 'dns.type'?: string | undefined; 'email.attachments'?: { 'file.extension'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.name'?: string | undefined; 'file.size'?: string | number | undefined; }[] | undefined; 'email.bcc.address'?: string[] | undefined; 'email.cc.address'?: string[] | undefined; 'email.content_type'?: string | undefined; 'email.delivery_timestamp'?: string | number | undefined; 'email.direction'?: string | undefined; 'email.from.address'?: string[] | undefined; 'email.local_id'?: string | undefined; 'email.message_id'?: string | undefined; 'email.origination_timestamp'?: string | number | undefined; 'email.reply_to.address'?: string[] | undefined; 'email.sender.address'?: string | undefined; 'email.subject'?: string | undefined; 'email.to.address'?: string[] | undefined; 'email.x_mailer'?: string | undefined; 'error.code'?: string | undefined; 'error.id'?: string | undefined; 'error.message'?: string | undefined; 'error.stack_trace'?: string | undefined; 'error.type'?: string | undefined; 'event.action'?: string | undefined; 'event.agent_id_status'?: string | undefined; 'event.category'?: string[] | undefined; 'event.code'?: string | undefined; 'event.created'?: string | number | undefined; 'event.dataset'?: string | undefined; 'event.duration'?: string | number | undefined; 'event.end'?: string | number | undefined; 'event.hash'?: string | undefined; 'event.id'?: string | undefined; 'event.ingested'?: string | number | undefined; 'event.kind'?: string | undefined; 'event.module'?: string | undefined; 'event.original'?: string | undefined; 'event.outcome'?: string | undefined; 'event.provider'?: string | undefined; 'event.reason'?: string | undefined; 'event.reference'?: string | undefined; 'event.risk_score'?: number | undefined; 'event.risk_score_norm'?: number | undefined; 'event.sequence'?: string | number | undefined; 'event.severity'?: string | number | undefined; 'event.start'?: string | number | undefined; 'event.timezone'?: string | undefined; 'event.type'?: string[] | undefined; 'event.url'?: string | undefined; 'faas.coldstart'?: boolean | undefined; 'faas.execution'?: string | undefined; 'faas.id'?: string | undefined; 'faas.name'?: string | undefined; 'faas.version'?: string | undefined; 'file.accessed'?: string | number | undefined; 'file.attributes'?: string[] | undefined; 'file.code_signature.digest_algorithm'?: string | undefined; 'file.code_signature.exists'?: boolean | undefined; 'file.code_signature.signing_id'?: string | undefined; 'file.code_signature.status'?: string | undefined; 'file.code_signature.subject_name'?: string | undefined; 'file.code_signature.team_id'?: string | undefined; 'file.code_signature.timestamp'?: string | number | undefined; 'file.code_signature.trusted'?: boolean | undefined; 'file.code_signature.valid'?: boolean | undefined; 'file.created'?: string | number | undefined; 'file.ctime'?: string | number | undefined; 'file.device'?: string | undefined; 'file.directory'?: string | undefined; 'file.drive_letter'?: string | undefined; 'file.elf.architecture'?: string | undefined; 'file.elf.byte_order'?: string | undefined; 'file.elf.cpu_type'?: string | undefined; 'file.elf.creation_date'?: string | number | undefined; 'file.elf.exports'?: unknown[] | undefined; 'file.elf.go_import_hash'?: string | undefined; 'file.elf.go_imports'?: unknown; 'file.elf.go_imports_names_entropy'?: string | number | undefined; 'file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'file.elf.go_stripped'?: boolean | undefined; 'file.elf.header.abi_version'?: string | undefined; 'file.elf.header.class'?: string | undefined; 'file.elf.header.data'?: string | undefined; 'file.elf.header.entrypoint'?: string | number | undefined; 'file.elf.header.object_version'?: string | undefined; 'file.elf.header.os_abi'?: string | undefined; 'file.elf.header.type'?: string | undefined; 'file.elf.header.version'?: string | undefined; 'file.elf.import_hash'?: string | undefined; 'file.elf.imports'?: unknown[] | undefined; 'file.elf.imports_names_entropy'?: string | number | undefined; 'file.elf.imports_names_var_entropy'?: string | number | undefined; 'file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'file.elf.shared_libraries'?: string[] | undefined; 'file.elf.telfhash'?: string | undefined; 'file.extension'?: string | undefined; 'file.fork_name'?: string | undefined; 'file.gid'?: string | undefined; 'file.group'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.inode'?: string | undefined; 'file.macho.go_import_hash'?: string | undefined; 'file.macho.go_imports'?: unknown; 'file.macho.go_imports_names_entropy'?: string | number | undefined; 'file.macho.go_imports_names_var_entropy'?: string | number | undefined; 'file.macho.go_stripped'?: boolean | undefined; 'file.macho.import_hash'?: string | undefined; 'file.macho.imports'?: unknown[] | undefined; 'file.macho.imports_names_entropy'?: string | number | undefined; 'file.macho.imports_names_var_entropy'?: string | number | undefined; 'file.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.macho.symhash'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.mode'?: string | undefined; 'file.mtime'?: string | number | undefined; 'file.name'?: string | undefined; 'file.owner'?: string | undefined; 'file.path'?: string | undefined; 'file.pe.architecture'?: string | undefined; 'file.pe.company'?: string | undefined; 'file.pe.description'?: string | undefined; 'file.pe.file_version'?: string | undefined; 'file.pe.go_import_hash'?: string | undefined; 'file.pe.go_imports'?: unknown; 'file.pe.go_imports_names_entropy'?: string | number | undefined; 'file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'file.pe.go_stripped'?: boolean | undefined; 'file.pe.imphash'?: string | undefined; 'file.pe.import_hash'?: string | undefined; 'file.pe.imports'?: unknown[] | undefined; 'file.pe.imports_names_entropy'?: string | number | undefined; 'file.pe.imports_names_var_entropy'?: string | number | undefined; 'file.pe.original_file_name'?: string | undefined; 'file.pe.pehash'?: string | undefined; 'file.pe.product'?: string | undefined; 'file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.size'?: string | number | undefined; 'file.target_path'?: string | undefined; 'file.type'?: string | undefined; 'file.uid'?: string | undefined; 'file.x509.alternative_names'?: string[] | undefined; 'file.x509.issuer.common_name'?: string[] | undefined; 'file.x509.issuer.country'?: string[] | undefined; 'file.x509.issuer.distinguished_name'?: string | undefined; 'file.x509.issuer.locality'?: string[] | undefined; 'file.x509.issuer.organization'?: string[] | undefined; 'file.x509.issuer.organizational_unit'?: string[] | undefined; 'file.x509.issuer.state_or_province'?: string[] | undefined; 'file.x509.not_after'?: string | number | undefined; 'file.x509.not_before'?: string | number | undefined; 'file.x509.public_key_algorithm'?: string | undefined; 'file.x509.public_key_curve'?: string | undefined; 'file.x509.public_key_exponent'?: string | number | undefined; 'file.x509.public_key_size'?: string | number | undefined; 'file.x509.serial_number'?: string | undefined; 'file.x509.signature_algorithm'?: string | undefined; 'file.x509.subject.common_name'?: string[] | undefined; 'file.x509.subject.country'?: string[] | undefined; 'file.x509.subject.distinguished_name'?: string | undefined; 'file.x509.subject.locality'?: string[] | undefined; 'file.x509.subject.organization'?: string[] | undefined; 'file.x509.subject.organizational_unit'?: string[] | undefined; 'file.x509.subject.state_or_province'?: string[] | undefined; 'file.x509.version_number'?: string | undefined; 'group.domain'?: string | undefined; 'group.id'?: string | undefined; 'group.name'?: string | undefined; 'host.architecture'?: string | undefined; 'host.boot.id'?: string | undefined; 'host.cpu.usage'?: string | number | undefined; 'host.disk.read.bytes'?: string | number | undefined; 'host.disk.write.bytes'?: string | number | undefined; 'host.domain'?: string | undefined; 'host.geo.city_name'?: string | undefined; 'host.geo.continent_code'?: string | undefined; 'host.geo.continent_name'?: string | undefined; 'host.geo.country_iso_code'?: string | undefined; 'host.geo.country_name'?: string | undefined; 'host.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'host.geo.name'?: string | undefined; 'host.geo.postal_code'?: string | undefined; 'host.geo.region_iso_code'?: string | undefined; 'host.geo.region_name'?: string | undefined; 'host.geo.timezone'?: string | undefined; 'host.hostname'?: string | undefined; 'host.id'?: string | undefined; 'host.ip'?: string[] | undefined; 'host.mac'?: string[] | undefined; 'host.name'?: string | undefined; 'host.network.egress.bytes'?: string | number | undefined; 'host.network.egress.packets'?: string | number | undefined; 'host.network.ingress.bytes'?: string | number | undefined; 'host.network.ingress.packets'?: string | number | undefined; 'host.os.family'?: string | undefined; 'host.os.full'?: string | undefined; 'host.os.kernel'?: string | undefined; 'host.os.name'?: string | undefined; 'host.os.platform'?: string | undefined; 'host.os.type'?: string | undefined; 'host.os.version'?: string | undefined; 'host.pid_ns_ino'?: string | undefined; 'host.risk.calculated_level'?: string | undefined; 'host.risk.calculated_score'?: number | undefined; 'host.risk.calculated_score_norm'?: number | undefined; 'host.risk.static_level'?: string | undefined; 'host.risk.static_score'?: number | undefined; 'host.risk.static_score_norm'?: number | undefined; 'host.type'?: string | undefined; 'host.uptime'?: string | number | undefined; 'http.request.body.bytes'?: string | number | undefined; 'http.request.body.content'?: string | undefined; 'http.request.bytes'?: string | number | undefined; 'http.request.id'?: string | undefined; 'http.request.method'?: string | undefined; 'http.request.mime_type'?: string | undefined; 'http.request.referrer'?: string | undefined; 'http.response.body.bytes'?: string | number | undefined; 'http.response.body.content'?: string | undefined; 'http.response.bytes'?: string | number | undefined; 'http.response.mime_type'?: string | undefined; 'http.response.status_code'?: string | number | undefined; 'http.version'?: string | undefined; labels?: unknown; 'log.file.path'?: string | undefined; 'log.level'?: string | undefined; 'log.logger'?: string | undefined; 'log.origin.file.line'?: string | number | undefined; 'log.origin.file.name'?: string | undefined; 'log.origin.function'?: string | undefined; 'log.syslog'?: unknown; message?: string | undefined; 'network.application'?: string | undefined; 'network.bytes'?: string | number | undefined; 'network.community_id'?: string | undefined; 'network.direction'?: string | undefined; 'network.forwarded_ip'?: string | undefined; 'network.iana_number'?: string | undefined; 'network.inner'?: unknown; 'network.name'?: string | undefined; 'network.packets'?: string | number | undefined; 'network.protocol'?: string | undefined; 'network.transport'?: string | undefined; 'network.type'?: string | undefined; 'network.vlan.id'?: string | undefined; 'network.vlan.name'?: string | undefined; 'observer.egress'?: unknown; 'observer.geo.city_name'?: string | undefined; 'observer.geo.continent_code'?: string | undefined; 'observer.geo.continent_name'?: string | undefined; 'observer.geo.country_iso_code'?: string | undefined; 'observer.geo.country_name'?: string | undefined; 'observer.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'observer.geo.name'?: string | undefined; 'observer.geo.postal_code'?: string | undefined; 'observer.geo.region_iso_code'?: string | undefined; 'observer.geo.region_name'?: string | undefined; 'observer.geo.timezone'?: string | undefined; 'observer.hostname'?: string | undefined; 'observer.ingress'?: unknown; 'observer.ip'?: string[] | undefined; 'observer.mac'?: string[] | undefined; 'observer.name'?: string | undefined; 'observer.os.family'?: string | undefined; 'observer.os.full'?: string | undefined; 'observer.os.kernel'?: string | undefined; 'observer.os.name'?: string | undefined; 'observer.os.platform'?: string | undefined; 'observer.os.type'?: string | undefined; 'observer.os.version'?: string | undefined; 'observer.product'?: string | undefined; 'observer.serial_number'?: string | undefined; 'observer.type'?: string | undefined; 'observer.vendor'?: string | undefined; 'observer.version'?: string | undefined; 'orchestrator.api_version'?: string | undefined; 'orchestrator.cluster.id'?: string | undefined; 'orchestrator.cluster.name'?: string | undefined; 'orchestrator.cluster.url'?: string | undefined; 'orchestrator.cluster.version'?: string | undefined; 'orchestrator.namespace'?: string | undefined; 'orchestrator.organization'?: string | undefined; 'orchestrator.resource.annotation'?: string[] | undefined; 'orchestrator.resource.id'?: string | undefined; 'orchestrator.resource.ip'?: string[] | undefined; 'orchestrator.resource.label'?: string[] | undefined; 'orchestrator.resource.name'?: string | undefined; 'orchestrator.resource.parent.type'?: string | undefined; 'orchestrator.resource.type'?: string | undefined; 'orchestrator.type'?: string | undefined; 'organization.id'?: string | undefined; 'organization.name'?: string | undefined; 'package.architecture'?: string | undefined; 'package.build_version'?: string | undefined; 'package.checksum'?: string | undefined; 'package.description'?: string | undefined; 'package.install_scope'?: string | undefined; 'package.installed'?: string | number | undefined; 'package.license'?: string | undefined; 'package.name'?: string | undefined; 'package.path'?: string | undefined; 'package.reference'?: string | undefined; 'package.size'?: string | number | undefined; 'package.type'?: string | undefined; 'package.version'?: string | undefined; 'process.args'?: string[] | undefined; 'process.args_count'?: string | number | undefined; 'process.code_signature.digest_algorithm'?: string | undefined; 'process.code_signature.exists'?: boolean | undefined; 'process.code_signature.signing_id'?: string | undefined; 'process.code_signature.status'?: string | undefined; 'process.code_signature.subject_name'?: string | undefined; 'process.code_signature.team_id'?: string | undefined; 'process.code_signature.timestamp'?: string | number | undefined; 'process.code_signature.trusted'?: boolean | undefined; 'process.code_signature.valid'?: boolean | undefined; 'process.command_line'?: string | undefined; 'process.elf.architecture'?: string | undefined; 'process.elf.byte_order'?: string | undefined; 'process.elf.cpu_type'?: string | undefined; 'process.elf.creation_date'?: string | number | undefined; 'process.elf.exports'?: unknown[] | undefined; 'process.elf.go_import_hash'?: string | undefined; 'process.elf.go_imports'?: unknown; 'process.elf.go_imports_names_entropy'?: string | number | undefined; 'process.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.elf.go_stripped'?: boolean | undefined; 'process.elf.header.abi_version'?: string | undefined; 'process.elf.header.class'?: string | undefined; 'process.elf.header.data'?: string | undefined; 'process.elf.header.entrypoint'?: string | number | undefined; 'process.elf.header.object_version'?: string | undefined; 'process.elf.header.os_abi'?: string | undefined; 'process.elf.header.type'?: string | undefined; 'process.elf.header.version'?: string | undefined; 'process.elf.import_hash'?: string | undefined; 'process.elf.imports'?: unknown[] | undefined; 'process.elf.imports_names_entropy'?: string | number | undefined; 'process.elf.imports_names_var_entropy'?: string | number | undefined; 'process.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.elf.shared_libraries'?: string[] | undefined; 'process.elf.telfhash'?: string | undefined; 'process.end'?: string | number | undefined; 'process.entity_id'?: string | undefined; 'process.entry_leader.args'?: string[] | undefined; 'process.entry_leader.args_count'?: string | number | undefined; 'process.entry_leader.attested_groups.name'?: string | undefined; 'process.entry_leader.attested_user.id'?: string | undefined; 'process.entry_leader.attested_user.name'?: string | undefined; 'process.entry_leader.command_line'?: string | undefined; 'process.entry_leader.entity_id'?: string | undefined; 'process.entry_leader.entry_meta.source.ip'?: string | undefined; 'process.entry_leader.entry_meta.type'?: string | undefined; 'process.entry_leader.executable'?: string | undefined; 'process.entry_leader.group.id'?: string | undefined; 'process.entry_leader.group.name'?: string | undefined; 'process.entry_leader.interactive'?: boolean | undefined; 'process.entry_leader.name'?: string | undefined; 'process.entry_leader.parent.entity_id'?: string | undefined; 'process.entry_leader.parent.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.entity_id'?: string | undefined; 'process.entry_leader.parent.session_leader.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.start'?: string | number | undefined; 'process.entry_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.entry_leader.parent.start'?: string | number | undefined; 'process.entry_leader.parent.vpid'?: string | number | undefined; 'process.entry_leader.pid'?: string | number | undefined; 'process.entry_leader.real_group.id'?: string | undefined; 'process.entry_leader.real_group.name'?: string | undefined; 'process.entry_leader.real_user.id'?: string | undefined; 'process.entry_leader.real_user.name'?: string | undefined; 'process.entry_leader.same_as_process'?: boolean | undefined; 'process.entry_leader.saved_group.id'?: string | undefined; 'process.entry_leader.saved_group.name'?: string | undefined; 'process.entry_leader.saved_user.id'?: string | undefined; 'process.entry_leader.saved_user.name'?: string | undefined; 'process.entry_leader.start'?: string | number | undefined; 'process.entry_leader.supplemental_groups.id'?: string | undefined; 'process.entry_leader.supplemental_groups.name'?: string | undefined; 'process.entry_leader.tty'?: unknown; 'process.entry_leader.user.id'?: string | undefined; 'process.entry_leader.user.name'?: string | undefined; 'process.entry_leader.vpid'?: string | number | undefined; 'process.entry_leader.working_directory'?: string | undefined; 'process.env_vars'?: string[] | undefined; 'process.executable'?: string | undefined; 'process.exit_code'?: string | number | undefined; 'process.group_leader.args'?: string[] | undefined; 'process.group_leader.args_count'?: string | number | undefined; 'process.group_leader.command_line'?: string | undefined; 'process.group_leader.entity_id'?: string | undefined; 'process.group_leader.executable'?: string | undefined; 'process.group_leader.group.id'?: string | undefined; 'process.group_leader.group.name'?: string | undefined; 'process.group_leader.interactive'?: boolean | undefined; 'process.group_leader.name'?: string | undefined; 'process.group_leader.pid'?: string | number | undefined; 'process.group_leader.real_group.id'?: string | undefined; 'process.group_leader.real_group.name'?: string | undefined; 'process.group_leader.real_user.id'?: string | undefined; 'process.group_leader.real_user.name'?: string | undefined; 'process.group_leader.same_as_process'?: boolean | undefined; 'process.group_leader.saved_group.id'?: string | undefined; 'process.group_leader.saved_group.name'?: string | undefined; 'process.group_leader.saved_user.id'?: string | undefined; 'process.group_leader.saved_user.name'?: string | undefined; 'process.group_leader.start'?: string | number | undefined; 'process.group_leader.supplemental_groups.id'?: string | undefined; 'process.group_leader.supplemental_groups.name'?: string | undefined; 'process.group_leader.tty'?: unknown; 'process.group_leader.user.id'?: string | undefined; 'process.group_leader.user.name'?: string | undefined; 'process.group_leader.vpid'?: string | number | undefined; 'process.group_leader.working_directory'?: string | undefined; 'process.hash.md5'?: string | undefined; 'process.hash.sha1'?: string | undefined; 'process.hash.sha256'?: string | undefined; 'process.hash.sha384'?: string | undefined; 'process.hash.sha512'?: string | undefined; 'process.hash.ssdeep'?: string | undefined; 'process.hash.tlsh'?: string | undefined; 'process.interactive'?: boolean | undefined; 'process.io'?: unknown; 'process.macho.go_import_hash'?: string | undefined; 'process.macho.go_imports'?: unknown; 'process.macho.go_imports_names_entropy'?: string | number | undefined; 'process.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.macho.go_stripped'?: boolean | undefined; 'process.macho.import_hash'?: string | undefined; 'process.macho.imports'?: unknown[] | undefined; 'process.macho.imports_names_entropy'?: string | number | undefined; 'process.macho.imports_names_var_entropy'?: string | number | undefined; 'process.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.macho.symhash'?: string | undefined; 'process.name'?: string | undefined; 'process.parent.args'?: string[] | undefined; 'process.parent.args_count'?: string | number | undefined; 'process.parent.code_signature.digest_algorithm'?: string | undefined; 'process.parent.code_signature.exists'?: boolean | undefined; 'process.parent.code_signature.signing_id'?: string | undefined; 'process.parent.code_signature.status'?: string | undefined; 'process.parent.code_signature.subject_name'?: string | undefined; 'process.parent.code_signature.team_id'?: string | undefined; 'process.parent.code_signature.timestamp'?: string | number | undefined; 'process.parent.code_signature.trusted'?: boolean | undefined; 'process.parent.code_signature.valid'?: boolean | undefined; 'process.parent.command_line'?: string | undefined; 'process.parent.elf.architecture'?: string | undefined; 'process.parent.elf.byte_order'?: string | undefined; 'process.parent.elf.cpu_type'?: string | undefined; 'process.parent.elf.creation_date'?: string | number | undefined; 'process.parent.elf.exports'?: unknown[] | undefined; 'process.parent.elf.go_import_hash'?: string | undefined; 'process.parent.elf.go_imports'?: unknown; 'process.parent.elf.go_imports_names_entropy'?: string | number | undefined; 'process.parent.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.go_stripped'?: boolean | undefined; 'process.parent.elf.header.abi_version'?: string | undefined; 'process.parent.elf.header.class'?: string | undefined; 'process.parent.elf.header.data'?: string | undefined; 'process.parent.elf.header.entrypoint'?: string | number | undefined; 'process.parent.elf.header.object_version'?: string | undefined; 'process.parent.elf.header.os_abi'?: string | undefined; 'process.parent.elf.header.type'?: string | undefined; 'process.parent.elf.header.version'?: string | undefined; 'process.parent.elf.import_hash'?: string | undefined; 'process.parent.elf.imports'?: unknown[] | undefined; 'process.parent.elf.imports_names_entropy'?: string | number | undefined; 'process.parent.elf.imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.parent.elf.shared_libraries'?: string[] | undefined; 'process.parent.elf.telfhash'?: string | undefined; 'process.parent.end'?: string | number | undefined; 'process.parent.entity_id'?: string | undefined; 'process.parent.executable'?: string | undefined; 'process.parent.exit_code'?: string | number | undefined; 'process.parent.group.id'?: string | undefined; 'process.parent.group.name'?: string | undefined; 'process.parent.group_leader.entity_id'?: string | undefined; 'process.parent.group_leader.pid'?: string | number | undefined; 'process.parent.group_leader.start'?: string | number | undefined; 'process.parent.group_leader.vpid'?: string | number | undefined; 'process.parent.hash.md5'?: string | undefined; 'process.parent.hash.sha1'?: string | undefined; 'process.parent.hash.sha256'?: string | undefined; 'process.parent.hash.sha384'?: string | undefined; 'process.parent.hash.sha512'?: string | undefined; 'process.parent.hash.ssdeep'?: string | undefined; 'process.parent.hash.tlsh'?: string | undefined; 'process.parent.interactive'?: boolean | undefined; 'process.parent.macho.go_import_hash'?: string | undefined; 'process.parent.macho.go_imports'?: unknown; 'process.parent.macho.go_imports_names_entropy'?: string | number | undefined; 'process.parent.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.go_stripped'?: boolean | undefined; 'process.parent.macho.import_hash'?: string | undefined; 'process.parent.macho.imports'?: unknown[] | undefined; 'process.parent.macho.imports_names_entropy'?: string | number | undefined; 'process.parent.macho.imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.macho.symhash'?: string | undefined; 'process.parent.name'?: string | undefined; 'process.parent.pe.architecture'?: string | undefined; 'process.parent.pe.company'?: string | undefined; 'process.parent.pe.description'?: string | undefined; 'process.parent.pe.file_version'?: string | undefined; 'process.parent.pe.go_import_hash'?: string | undefined; 'process.parent.pe.go_imports'?: unknown; 'process.parent.pe.go_imports_names_entropy'?: string | number | undefined; 'process.parent.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.go_stripped'?: boolean | undefined; 'process.parent.pe.imphash'?: string | undefined; 'process.parent.pe.import_hash'?: string | undefined; 'process.parent.pe.imports'?: unknown[] | undefined; 'process.parent.pe.imports_names_entropy'?: string | number | undefined; 'process.parent.pe.imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.original_file_name'?: string | undefined; 'process.parent.pe.pehash'?: string | undefined; 'process.parent.pe.product'?: string | undefined; 'process.parent.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.pgid'?: string | number | undefined; 'process.parent.pid'?: string | number | undefined; 'process.parent.real_group.id'?: string | undefined; 'process.parent.real_group.name'?: string | undefined; 'process.parent.real_user.id'?: string | undefined; 'process.parent.real_user.name'?: string | undefined; 'process.parent.saved_group.id'?: string | undefined; 'process.parent.saved_group.name'?: string | undefined; 'process.parent.saved_user.id'?: string | undefined; 'process.parent.saved_user.name'?: string | undefined; 'process.parent.start'?: string | number | undefined; 'process.parent.supplemental_groups.id'?: string | undefined; 'process.parent.supplemental_groups.name'?: string | undefined; 'process.parent.thread.capabilities.effective'?: string[] | undefined; 'process.parent.thread.capabilities.permitted'?: string[] | undefined; 'process.parent.thread.id'?: string | number | undefined; 'process.parent.thread.name'?: string | undefined; 'process.parent.title'?: string | undefined; 'process.parent.tty'?: unknown; 'process.parent.uptime'?: string | number | undefined; 'process.parent.user.id'?: string | undefined; 'process.parent.user.name'?: string | undefined; 'process.parent.vpid'?: string | number | undefined; 'process.parent.working_directory'?: string | undefined; 'process.pe.architecture'?: string | undefined; 'process.pe.company'?: string | undefined; 'process.pe.description'?: string | undefined; 'process.pe.file_version'?: string | undefined; 'process.pe.go_import_hash'?: string | undefined; 'process.pe.go_imports'?: unknown; 'process.pe.go_imports_names_entropy'?: string | number | undefined; 'process.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.pe.go_stripped'?: boolean | undefined; 'process.pe.imphash'?: string | undefined; 'process.pe.import_hash'?: string | undefined; 'process.pe.imports'?: unknown[] | undefined; 'process.pe.imports_names_entropy'?: string | number | undefined; 'process.pe.imports_names_var_entropy'?: string | number | undefined; 'process.pe.original_file_name'?: string | undefined; 'process.pe.pehash'?: string | undefined; 'process.pe.product'?: string | undefined; 'process.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.pgid'?: string | number | undefined; 'process.pid'?: string | number | undefined; 'process.previous.args'?: string[] | undefined; 'process.previous.args_count'?: string | number | undefined; 'process.previous.executable'?: string | undefined; 'process.real_group.id'?: string | undefined; 'process.real_group.name'?: string | undefined; 'process.real_user.id'?: string | undefined; 'process.real_user.name'?: string | undefined; 'process.saved_group.id'?: string | undefined; 'process.saved_group.name'?: string | undefined; 'process.saved_user.id'?: string | undefined; 'process.saved_user.name'?: string | undefined; 'process.session_leader.args'?: string[] | undefined; 'process.session_leader.args_count'?: string | number | undefined; 'process.session_leader.command_line'?: string | undefined; 'process.session_leader.entity_id'?: string | undefined; 'process.session_leader.executable'?: string | undefined; 'process.session_leader.group.id'?: string | undefined; 'process.session_leader.group.name'?: string | undefined; 'process.session_leader.interactive'?: boolean | undefined; 'process.session_leader.name'?: string | undefined; 'process.session_leader.parent.entity_id'?: string | undefined; 'process.session_leader.parent.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.entity_id'?: string | undefined; 'process.session_leader.parent.session_leader.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.start'?: string | number | undefined; 'process.session_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.session_leader.parent.start'?: string | number | undefined; 'process.session_leader.parent.vpid'?: string | number | undefined; 'process.session_leader.pid'?: string | number | undefined; 'process.session_leader.real_group.id'?: string | undefined; 'process.session_leader.real_group.name'?: string | undefined; 'process.session_leader.real_user.id'?: string | undefined; 'process.session_leader.real_user.name'?: string | undefined; 'process.session_leader.same_as_process'?: boolean | undefined; 'process.session_leader.saved_group.id'?: string | undefined; 'process.session_leader.saved_group.name'?: string | undefined; 'process.session_leader.saved_user.id'?: string | undefined; 'process.session_leader.saved_user.name'?: string | undefined; 'process.session_leader.start'?: string | number | undefined; 'process.session_leader.supplemental_groups.id'?: string | undefined; 'process.session_leader.supplemental_groups.name'?: string | undefined; 'process.session_leader.tty'?: unknown; 'process.session_leader.user.id'?: string | undefined; 'process.session_leader.user.name'?: string | undefined; 'process.session_leader.vpid'?: string | number | undefined; 'process.session_leader.working_directory'?: string | undefined; 'process.start'?: string | number | undefined; 'process.supplemental_groups.id'?: string | undefined; 'process.supplemental_groups.name'?: string | undefined; 'process.thread.capabilities.effective'?: string[] | undefined; 'process.thread.capabilities.permitted'?: string[] | undefined; 'process.thread.id'?: string | number | undefined; 'process.thread.name'?: string | undefined; 'process.title'?: string | undefined; 'process.tty'?: unknown; 'process.uptime'?: string | number | undefined; 'process.user.id'?: string | undefined; 'process.user.name'?: string | undefined; 'process.vpid'?: string | number | undefined; 'process.working_directory'?: string | undefined; 'registry.data.bytes'?: string | undefined; 'registry.data.strings'?: string[] | undefined; 'registry.data.type'?: string | undefined; 'registry.hive'?: string | undefined; 'registry.key'?: string | undefined; 'registry.path'?: string | undefined; 'registry.value'?: string | undefined; 'related.hash'?: string[] | undefined; 'related.hosts'?: string[] | undefined; 'related.ip'?: string[] | undefined; 'related.user'?: string[] | undefined; 'rule.author'?: string[] | undefined; 'rule.category'?: string | undefined; 'rule.description'?: string | undefined; 'rule.id'?: string | undefined; 'rule.license'?: string | undefined; 'rule.name'?: string | undefined; 'rule.reference'?: string | undefined; 'rule.ruleset'?: string | undefined; 'rule.uuid'?: string | undefined; 'rule.version'?: string | undefined; 'server.address'?: string | undefined; 'server.as.number'?: string | number | undefined; 'server.as.organization.name'?: string | undefined; 'server.bytes'?: string | number | undefined; 'server.domain'?: string | undefined; 'server.geo.city_name'?: string | undefined; 'server.geo.continent_code'?: string | undefined; 'server.geo.continent_name'?: string | undefined; 'server.geo.country_iso_code'?: string | undefined; 'server.geo.country_name'?: string | undefined; 'server.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'server.geo.name'?: string | undefined; 'server.geo.postal_code'?: string | undefined; 'server.geo.region_iso_code'?: string | undefined; 'server.geo.region_name'?: string | undefined; 'server.geo.timezone'?: string | undefined; 'server.ip'?: string | undefined; 'server.mac'?: string | undefined; 'server.nat.ip'?: string | undefined; 'server.nat.port'?: string | number | undefined; 'server.packets'?: string | number | undefined; 'server.port'?: string | number | undefined; 'server.registered_domain'?: string | undefined; 'server.subdomain'?: string | undefined; 'server.top_level_domain'?: string | undefined; 'server.user.domain'?: string | undefined; 'server.user.email'?: string | undefined; 'server.user.full_name'?: string | undefined; 'server.user.group.domain'?: string | undefined; 'server.user.group.id'?: string | undefined; 'server.user.group.name'?: string | undefined; 'server.user.hash'?: string | undefined; 'server.user.id'?: string | undefined; 'server.user.name'?: string | undefined; 'server.user.roles'?: string[] | undefined; 'service.address'?: string | undefined; 'service.environment'?: string | undefined; 'service.ephemeral_id'?: string | undefined; 'service.id'?: string | undefined; 'service.name'?: string | undefined; 'service.node.name'?: string | undefined; 'service.node.role'?: string | undefined; 'service.node.roles'?: string[] | undefined; 'service.origin.address'?: string | undefined; 'service.origin.environment'?: string | undefined; 'service.origin.ephemeral_id'?: string | undefined; 'service.origin.id'?: string | undefined; 'service.origin.name'?: string | undefined; 'service.origin.node.name'?: string | undefined; 'service.origin.node.role'?: string | undefined; 'service.origin.node.roles'?: string[] | undefined; 'service.origin.state'?: string | undefined; 'service.origin.type'?: string | undefined; 'service.origin.version'?: string | undefined; 'service.state'?: string | undefined; 'service.target.address'?: string | undefined; 'service.target.environment'?: string | undefined; 'service.target.ephemeral_id'?: string | undefined; 'service.target.id'?: string | undefined; 'service.target.name'?: string | undefined; 'service.target.node.name'?: string | undefined; 'service.target.node.role'?: string | undefined; 'service.target.node.roles'?: string[] | undefined; 'service.target.state'?: string | undefined; 'service.target.type'?: string | undefined; 'service.target.version'?: string | undefined; 'service.type'?: string | undefined; 'service.version'?: string | undefined; 'source.address'?: string | undefined; 'source.as.number'?: string | number | undefined; 'source.as.organization.name'?: string | undefined; 'source.bytes'?: string | number | undefined; 'source.domain'?: string | undefined; 'source.geo.city_name'?: string | undefined; 'source.geo.continent_code'?: string | undefined; 'source.geo.continent_name'?: string | undefined; 'source.geo.country_iso_code'?: string | undefined; 'source.geo.country_name'?: string | undefined; 'source.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'source.geo.name'?: string | undefined; 'source.geo.postal_code'?: string | undefined; 'source.geo.region_iso_code'?: string | undefined; 'source.geo.region_name'?: string | undefined; 'source.geo.timezone'?: string | undefined; 'source.ip'?: string | undefined; 'source.mac'?: string | undefined; 'source.nat.ip'?: string | undefined; 'source.nat.port'?: string | number | undefined; 'source.packets'?: string | number | undefined; 'source.port'?: string | number | undefined; 'source.registered_domain'?: string | undefined; 'source.subdomain'?: string | undefined; 'source.top_level_domain'?: string | undefined; 'source.user.domain'?: string | undefined; 'source.user.email'?: string | undefined; 'source.user.full_name'?: string | undefined; 'source.user.group.domain'?: string | undefined; 'source.user.group.id'?: string | undefined; 'source.user.group.name'?: string | undefined; 'source.user.hash'?: string | undefined; 'source.user.id'?: string | undefined; 'source.user.name'?: string | undefined; 'source.user.roles'?: string[] | undefined; 'span.id'?: string | undefined; tags?: string[] | undefined; 'threat.enrichments'?: { indicator?: unknown; 'matched.atomic'?: string | undefined; 'matched.field'?: string | undefined; 'matched.id'?: string | undefined; 'matched.index'?: string | undefined; 'matched.occurred'?: string | number | undefined; 'matched.type'?: string | undefined; }[] | undefined; 'threat.feed.dashboard_id'?: string | undefined; 'threat.feed.description'?: string | undefined; 'threat.feed.name'?: string | undefined; 'threat.feed.reference'?: string | undefined; 'threat.framework'?: string | undefined; 'threat.group.alias'?: string[] | undefined; 'threat.group.id'?: string | undefined; 'threat.group.name'?: string | undefined; 'threat.group.reference'?: string | undefined; 'threat.indicator.as.number'?: string | number | undefined; 'threat.indicator.as.organization.name'?: string | undefined; 'threat.indicator.confidence'?: string | undefined; 'threat.indicator.description'?: string | undefined; 'threat.indicator.email.address'?: string | undefined; 'threat.indicator.file.accessed'?: string | number | undefined; 'threat.indicator.file.attributes'?: string[] | undefined; 'threat.indicator.file.code_signature.digest_algorithm'?: string | undefined; 'threat.indicator.file.code_signature.exists'?: boolean | undefined; 'threat.indicator.file.code_signature.signing_id'?: string | undefined; 'threat.indicator.file.code_signature.status'?: string | undefined; 'threat.indicator.file.code_signature.subject_name'?: string | undefined; 'threat.indicator.file.code_signature.team_id'?: string | undefined; 'threat.indicator.file.code_signature.timestamp'?: string | number | undefined; 'threat.indicator.file.code_signature.trusted'?: boolean | undefined; 'threat.indicator.file.code_signature.valid'?: boolean | undefined; 'threat.indicator.file.created'?: string | number | undefined; 'threat.indicator.file.ctime'?: string | number | undefined; 'threat.indicator.file.device'?: string | undefined; 'threat.indicator.file.directory'?: string | undefined; 'threat.indicator.file.drive_letter'?: string | undefined; 'threat.indicator.file.elf.architecture'?: string | undefined; 'threat.indicator.file.elf.byte_order'?: string | undefined; 'threat.indicator.file.elf.cpu_type'?: string | undefined; 'threat.indicator.file.elf.creation_date'?: string | number | undefined; 'threat.indicator.file.elf.exports'?: unknown[] | undefined; 'threat.indicator.file.elf.go_import_hash'?: string | undefined; 'threat.indicator.file.elf.go_imports'?: unknown; 'threat.indicator.file.elf.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_stripped'?: boolean | undefined; 'threat.indicator.file.elf.header.abi_version'?: string | undefined; 'threat.indicator.file.elf.header.class'?: string | undefined; 'threat.indicator.file.elf.header.data'?: string | undefined; 'threat.indicator.file.elf.header.entrypoint'?: string | number | undefined; 'threat.indicator.file.elf.header.object_version'?: string | undefined; 'threat.indicator.file.elf.header.os_abi'?: string | undefined; 'threat.indicator.file.elf.header.type'?: string | undefined; 'threat.indicator.file.elf.header.version'?: string | undefined; 'threat.indicator.file.elf.import_hash'?: string | undefined; 'threat.indicator.file.elf.imports'?: unknown[] | undefined; 'threat.indicator.file.elf.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'threat.indicator.file.elf.shared_libraries'?: string[] | undefined; 'threat.indicator.file.elf.telfhash'?: string | undefined; 'threat.indicator.file.extension'?: string | undefined; 'threat.indicator.file.fork_name'?: string | undefined; 'threat.indicator.file.gid'?: string | undefined; 'threat.indicator.file.group'?: string | undefined; 'threat.indicator.file.hash.md5'?: string | undefined; 'threat.indicator.file.hash.sha1'?: string | undefined; 'threat.indicator.file.hash.sha256'?: string | undefined; 'threat.indicator.file.hash.sha384'?: string | undefined; 'threat.indicator.file.hash.sha512'?: string | undefined; 'threat.indicator.file.hash.ssdeep'?: string | undefined; 'threat.indicator.file.hash.tlsh'?: string | undefined; 'threat.indicator.file.inode'?: string | undefined; 'threat.indicator.file.mime_type'?: string | undefined; 'threat.indicator.file.mode'?: string | undefined; 'threat.indicator.file.mtime'?: string | number | undefined; 'threat.indicator.file.name'?: string | undefined; 'threat.indicator.file.owner'?: string | undefined; 'threat.indicator.file.path'?: string | undefined; 'threat.indicator.file.pe.architecture'?: string | undefined; 'threat.indicator.file.pe.company'?: string | undefined; 'threat.indicator.file.pe.description'?: string | undefined; 'threat.indicator.file.pe.file_version'?: string | undefined; 'threat.indicator.file.pe.go_import_hash'?: string | undefined; 'threat.indicator.file.pe.go_imports'?: unknown; 'threat.indicator.file.pe.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_stripped'?: boolean | undefined; 'threat.indicator.file.pe.imphash'?: string | undefined; 'threat.indicator.file.pe.import_hash'?: string | undefined; 'threat.indicator.file.pe.imports'?: unknown[] | undefined; 'threat.indicator.file.pe.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.original_file_name'?: string | undefined; 'threat.indicator.file.pe.pehash'?: string | undefined; 'threat.indicator.file.pe.product'?: string | undefined; 'threat.indicator.file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.size'?: string | number | undefined; 'threat.indicator.file.target_path'?: string | undefined; 'threat.indicator.file.type'?: string | undefined; 'threat.indicator.file.uid'?: string | undefined; 'threat.indicator.file.x509.alternative_names'?: string[] | undefined; 'threat.indicator.file.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.file.x509.issuer.country'?: string[] | undefined; 'threat.indicator.file.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.not_after'?: string | number | undefined; 'threat.indicator.file.x509.not_before'?: string | number | undefined; 'threat.indicator.file.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.file.x509.public_key_curve'?: string | undefined; 'threat.indicator.file.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.file.x509.public_key_size'?: string | number | undefined; 'threat.indicator.file.x509.serial_number'?: string | undefined; 'threat.indicator.file.x509.signature_algorithm'?: string | undefined; 'threat.indicator.file.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.file.x509.subject.country'?: string[] | undefined; 'threat.indicator.file.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.subject.locality'?: string[] | undefined; 'threat.indicator.file.x509.subject.organization'?: string[] | undefined; 'threat.indicator.file.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.version_number'?: string | undefined; 'threat.indicator.first_seen'?: string | number | undefined; 'threat.indicator.geo.city_name'?: string | undefined; 'threat.indicator.geo.continent_code'?: string | undefined; 'threat.indicator.geo.continent_name'?: string | undefined; 'threat.indicator.geo.country_iso_code'?: string | undefined; 'threat.indicator.geo.country_name'?: string | undefined; 'threat.indicator.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'threat.indicator.geo.name'?: string | undefined; 'threat.indicator.geo.postal_code'?: string | undefined; 'threat.indicator.geo.region_iso_code'?: string | undefined; 'threat.indicator.geo.region_name'?: string | undefined; 'threat.indicator.geo.timezone'?: string | undefined; 'threat.indicator.ip'?: string | undefined; 'threat.indicator.last_seen'?: string | number | undefined; 'threat.indicator.marking.tlp'?: string | undefined; 'threat.indicator.marking.tlp_version'?: string | undefined; 'threat.indicator.modified_at'?: string | number | undefined; 'threat.indicator.name'?: string | undefined; 'threat.indicator.port'?: string | number | undefined; 'threat.indicator.provider'?: string | undefined; 'threat.indicator.reference'?: string | undefined; 'threat.indicator.registry.data.bytes'?: string | undefined; 'threat.indicator.registry.data.strings'?: string[] | undefined; 'threat.indicator.registry.data.type'?: string | undefined; 'threat.indicator.registry.hive'?: string | undefined; 'threat.indicator.registry.key'?: string | undefined; 'threat.indicator.registry.path'?: string | undefined; 'threat.indicator.registry.value'?: string | undefined; 'threat.indicator.scanner_stats'?: string | number | undefined; 'threat.indicator.sightings'?: string | number | undefined; 'threat.indicator.type'?: string | undefined; 'threat.indicator.url.domain'?: string | undefined; 'threat.indicator.url.extension'?: string | undefined; 'threat.indicator.url.fragment'?: string | undefined; 'threat.indicator.url.full'?: string | undefined; 'threat.indicator.url.original'?: string | undefined; 'threat.indicator.url.password'?: string | undefined; 'threat.indicator.url.path'?: string | undefined; 'threat.indicator.url.port'?: string | number | undefined; 'threat.indicator.url.query'?: string | undefined; 'threat.indicator.url.registered_domain'?: string | undefined; 'threat.indicator.url.scheme'?: string | undefined; 'threat.indicator.url.subdomain'?: string | undefined; 'threat.indicator.url.top_level_domain'?: string | undefined; 'threat.indicator.url.username'?: string | undefined; 'threat.indicator.x509.alternative_names'?: string[] | undefined; 'threat.indicator.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.x509.issuer.country'?: string[] | undefined; 'threat.indicator.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.x509.not_after'?: string | number | undefined; 'threat.indicator.x509.not_before'?: string | number | undefined; 'threat.indicator.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.x509.public_key_curve'?: string | undefined; 'threat.indicator.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.x509.public_key_size'?: string | number | undefined; 'threat.indicator.x509.serial_number'?: string | undefined; 'threat.indicator.x509.signature_algorithm'?: string | undefined; 'threat.indicator.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.x509.subject.country'?: string[] | undefined; 'threat.indicator.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.x509.subject.locality'?: string[] | undefined; 'threat.indicator.x509.subject.organization'?: string[] | undefined; 'threat.indicator.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.x509.version_number'?: string | undefined; 'threat.software.alias'?: string[] | undefined; 'threat.software.id'?: string | undefined; 'threat.software.name'?: string | undefined; 'threat.software.platforms'?: string[] | undefined; 'threat.software.reference'?: string | undefined; 'threat.software.type'?: string | undefined; 'threat.tactic.id'?: string[] | undefined; 'threat.tactic.name'?: string[] | undefined; 'threat.tactic.reference'?: string[] | undefined; 'threat.technique.id'?: string[] | undefined; 'threat.technique.name'?: string[] | undefined; 'threat.technique.reference'?: string[] | undefined; 'threat.technique.subtechnique.id'?: string[] | undefined; 'threat.technique.subtechnique.name'?: string[] | undefined; 'threat.technique.subtechnique.reference'?: string[] | undefined; 'tls.cipher'?: string | undefined; 'tls.client.certificate'?: string | undefined; 'tls.client.certificate_chain'?: string[] | undefined; 'tls.client.hash.md5'?: string | undefined; 'tls.client.hash.sha1'?: string | undefined; 'tls.client.hash.sha256'?: string | undefined; 'tls.client.issuer'?: string | undefined; 'tls.client.ja3'?: string | undefined; 'tls.client.not_after'?: string | number | undefined; 'tls.client.not_before'?: string | number | undefined; 'tls.client.server_name'?: string | undefined; 'tls.client.subject'?: string | undefined; 'tls.client.supported_ciphers'?: string[] | undefined; 'tls.client.x509.alternative_names'?: string[] | undefined; 'tls.client.x509.issuer.common_name'?: string[] | undefined; 'tls.client.x509.issuer.country'?: string[] | undefined; 'tls.client.x509.issuer.distinguished_name'?: string | undefined; 'tls.client.x509.issuer.locality'?: string[] | undefined; 'tls.client.x509.issuer.organization'?: string[] | undefined; 'tls.client.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.client.x509.issuer.state_or_province'?: string[] | undefined; 'tls.client.x509.not_after'?: string | number | undefined; 'tls.client.x509.not_before'?: string | number | undefined; 'tls.client.x509.public_key_algorithm'?: string | undefined; 'tls.client.x509.public_key_curve'?: string | undefined; 'tls.client.x509.public_key_exponent'?: string | number | undefined; 'tls.client.x509.public_key_size'?: string | number | undefined; 'tls.client.x509.serial_number'?: string | undefined; 'tls.client.x509.signature_algorithm'?: string | undefined; 'tls.client.x509.subject.common_name'?: string[] | undefined; 'tls.client.x509.subject.country'?: string[] | undefined; 'tls.client.x509.subject.distinguished_name'?: string | undefined; 'tls.client.x509.subject.locality'?: string[] | undefined; 'tls.client.x509.subject.organization'?: string[] | undefined; 'tls.client.x509.subject.organizational_unit'?: string[] | undefined; 'tls.client.x509.subject.state_or_province'?: string[] | undefined; 'tls.client.x509.version_number'?: string | undefined; 'tls.curve'?: string | undefined; 'tls.established'?: boolean | undefined; 'tls.next_protocol'?: string | undefined; 'tls.resumed'?: boolean | undefined; 'tls.server.certificate'?: string | undefined; 'tls.server.certificate_chain'?: string[] | undefined; 'tls.server.hash.md5'?: string | undefined; 'tls.server.hash.sha1'?: string | undefined; 'tls.server.hash.sha256'?: string | undefined; 'tls.server.issuer'?: string | undefined; 'tls.server.ja3s'?: string | undefined; 'tls.server.not_after'?: string | number | undefined; 'tls.server.not_before'?: string | number | undefined; 'tls.server.subject'?: string | undefined; 'tls.server.x509.alternative_names'?: string[] | undefined; 'tls.server.x509.issuer.common_name'?: string[] | undefined; 'tls.server.x509.issuer.country'?: string[] | undefined; 'tls.server.x509.issuer.distinguished_name'?: string | undefined; 'tls.server.x509.issuer.locality'?: string[] | undefined; 'tls.server.x509.issuer.organization'?: string[] | undefined; 'tls.server.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.server.x509.issuer.state_or_province'?: string[] | undefined; 'tls.server.x509.not_after'?: string | number | undefined; 'tls.server.x509.not_before'?: string | number | undefined; 'tls.server.x509.public_key_algorithm'?: string | undefined; 'tls.server.x509.public_key_curve'?: string | undefined; 'tls.server.x509.public_key_exponent'?: string | number | undefined; 'tls.server.x509.public_key_size'?: string | number | undefined; 'tls.server.x509.serial_number'?: string | undefined; 'tls.server.x509.signature_algorithm'?: string | undefined; 'tls.server.x509.subject.common_name'?: string[] | undefined; 'tls.server.x509.subject.country'?: string[] | undefined; 'tls.server.x509.subject.distinguished_name'?: string | undefined; 'tls.server.x509.subject.locality'?: string[] | undefined; 'tls.server.x509.subject.organization'?: string[] | undefined; 'tls.server.x509.subject.organizational_unit'?: string[] | undefined; 'tls.server.x509.subject.state_or_province'?: string[] | undefined; 'tls.server.x509.version_number'?: string | undefined; 'tls.version'?: string | undefined; 'tls.version_protocol'?: string | undefined; 'trace.id'?: string | undefined; 'transaction.id'?: string | undefined; 'url.domain'?: string | undefined; 'url.extension'?: string | undefined; 'url.fragment'?: string | undefined; 'url.full'?: string | undefined; 'url.original'?: string | undefined; 'url.password'?: string | undefined; 'url.path'?: string | undefined; 'url.port'?: string | number | undefined; 'url.query'?: string | undefined; 'url.registered_domain'?: string | undefined; 'url.scheme'?: string | undefined; 'url.subdomain'?: string | undefined; 'url.top_level_domain'?: string | undefined; 'url.username'?: string | undefined; 'user.changes.domain'?: string | undefined; 'user.changes.email'?: string | undefined; 'user.changes.full_name'?: string | undefined; 'user.changes.group.domain'?: string | undefined; 'user.changes.group.id'?: string | undefined; 'user.changes.group.name'?: string | undefined; 'user.changes.hash'?: string | undefined; 'user.changes.id'?: string | undefined; 'user.changes.name'?: string | undefined; 'user.changes.roles'?: string[] | undefined; 'user.domain'?: string | undefined; 'user.effective.domain'?: string | undefined; 'user.effective.email'?: string | undefined; 'user.effective.full_name'?: string | undefined; 'user.effective.group.domain'?: string | undefined; 'user.effective.group.id'?: string | undefined; 'user.effective.group.name'?: string | undefined; 'user.effective.hash'?: string | undefined; 'user.effective.id'?: string | undefined; 'user.effective.name'?: string | undefined; 'user.effective.roles'?: string[] | undefined; 'user.email'?: string | undefined; 'user.full_name'?: string | undefined; 'user.group.domain'?: string | undefined; 'user.group.id'?: string | undefined; 'user.group.name'?: string | undefined; 'user.hash'?: string | undefined; 'user.id'?: string | undefined; 'user.name'?: string | undefined; 'user.risk.calculated_level'?: string | undefined; 'user.risk.calculated_score'?: number | undefined; 'user.risk.calculated_score_norm'?: number | undefined; 'user.risk.static_level'?: string | undefined; 'user.risk.static_score'?: number | undefined; 'user.risk.static_score_norm'?: number | undefined; 'user.roles'?: string[] | undefined; 'user.target.domain'?: string | undefined; 'user.target.email'?: string | undefined; 'user.target.full_name'?: string | undefined; 'user.target.group.domain'?: string | undefined; 'user.target.group.id'?: string | undefined; 'user.target.group.name'?: string | undefined; 'user.target.hash'?: string | undefined; 'user.target.id'?: string | undefined; 'user.target.name'?: string | undefined; 'user.target.roles'?: string[] | undefined; 'user_agent.device.name'?: string | undefined; 'user_agent.name'?: string | undefined; 'user_agent.original'?: string | undefined; 'user_agent.os.family'?: string | undefined; 'user_agent.os.full'?: string | undefined; 'user_agent.os.kernel'?: string | undefined; 'user_agent.os.name'?: string | undefined; 'user_agent.os.platform'?: string | undefined; 'user_agent.os.type'?: string | undefined; 'user_agent.os.version'?: string | undefined; 'user_agent.version'?: string | undefined; 'vulnerability.category'?: string[] | undefined; 'vulnerability.classification'?: string | undefined; 'vulnerability.description'?: string | undefined; 'vulnerability.enumeration'?: string | undefined; 'vulnerability.id'?: string | undefined; 'vulnerability.reference'?: string | undefined; 'vulnerability.report_id'?: string | undefined; 'vulnerability.scanner.vendor'?: string | undefined; 'vulnerability.score.base'?: number | undefined; 'vulnerability.score.environmental'?: number | undefined; 'vulnerability.score.temporal'?: number | undefined; 'vulnerability.score.version'?: string | undefined; 'vulnerability.severity'?: string | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }) | ({ 'kibana.alert.job_id': string; } & { 'kibana.alert.anomaly_score'?: number[] | undefined; 'kibana.alert.anomaly_timestamp'?: string | number | undefined; 'kibana.alert.is_interim'?: boolean | undefined; 'kibana.alert.top_influencers'?: { influencer_field_name?: string | undefined; influencer_field_value?: string | undefined; influencer_score?: number | undefined; initial_influencer_score?: number | undefined; is_interim?: boolean | undefined; job_id?: string | undefined; timestamp?: string | number | undefined; }[] | undefined; 'kibana.alert.top_records'?: { actual?: number | undefined; by_field_name?: string | undefined; by_field_value?: string | undefined; detector_index?: number | undefined; field_name?: string | undefined; function?: string | undefined; initial_record_score?: number | undefined; is_interim?: boolean | undefined; job_id?: string | undefined; over_field_name?: string | undefined; over_field_value?: string | undefined; partition_field_name?: string | undefined; partition_field_value?: string | undefined; record_score?: number | undefined; timestamp?: string | number | undefined; typical?: number | undefined; }[] | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; }) | ({} & { 'kibana.alert.datafeed_results'?: { datafeed_id?: string | undefined; datafeed_state?: string | undefined; job_id?: string | undefined; job_state?: string | undefined; }[] | undefined; 'kibana.alert.delayed_data_results'?: { annotation?: string | undefined; end_timestamp?: string | number | undefined; job_id?: string | undefined; missed_docs_count?: string | number | undefined; }[] | undefined; 'kibana.alert.job_errors_results'?: { errors?: unknown; job_id?: string | undefined; }[] | undefined; 'kibana.alert.mml_results'?: { job_id?: string | undefined; log_time?: string | number | undefined; memory_status?: string | undefined; model_bytes?: string | number | undefined; model_bytes_exceeded?: string | number | undefined; model_bytes_memory_limit?: string | number | undefined; peak_model_bytes?: string | number | undefined; }[] | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; }) | ({} & { 'kibana.alert.results'?: { description?: string | undefined; health_status?: string | undefined; issues?: unknown; node_name?: string | undefined; transform_id?: string | undefined; transform_state?: string | undefined; }[] | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; })" + "({ '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; }) | ({} & {} & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; }) | ({} & { 'agent.name'?: string | undefined; 'container.id'?: string | undefined; 'error.grouping_key'?: string | undefined; 'error.grouping_name'?: string | undefined; 'host.name'?: string | undefined; 'kibana.alert.context'?: unknown; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | number | undefined; 'kibana.alert.evaluation.values'?: (string | number)[] | undefined; 'kibana.alert.group'?: { field?: string[] | undefined; value?: string[] | undefined; }[] | undefined; labels?: unknown; 'processor.event'?: string | undefined; 'service.environment'?: string | undefined; 'service.language.name'?: string | undefined; 'service.name'?: string | undefined; 'transaction.name'?: string | undefined; 'transaction.type'?: string | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }) | ({} & { 'kibana.alert.context'?: unknown; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | number | undefined; 'kibana.alert.evaluation.values'?: (string | number)[] | undefined; 'kibana.alert.group'?: { field?: string[] | undefined; value?: string[] | undefined; }[] | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & { '@timestamp': string | number; 'ecs.version': string; } & { 'agent.build.original'?: string | undefined; 'agent.ephemeral_id'?: string | undefined; 'agent.id'?: string | undefined; 'agent.name'?: string | undefined; 'agent.type'?: string | undefined; 'agent.version'?: string | undefined; 'client.address'?: string | undefined; 'client.as.number'?: string | number | undefined; 'client.as.organization.name'?: string | undefined; 'client.bytes'?: string | number | undefined; 'client.domain'?: string | undefined; 'client.geo.city_name'?: string | undefined; 'client.geo.continent_code'?: string | undefined; 'client.geo.continent_name'?: string | undefined; 'client.geo.country_iso_code'?: string | undefined; 'client.geo.country_name'?: string | undefined; 'client.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'client.geo.name'?: string | undefined; 'client.geo.postal_code'?: string | undefined; 'client.geo.region_iso_code'?: string | undefined; 'client.geo.region_name'?: string | undefined; 'client.geo.timezone'?: string | undefined; 'client.ip'?: string | undefined; 'client.mac'?: string | undefined; 'client.nat.ip'?: string | undefined; 'client.nat.port'?: string | number | undefined; 'client.packets'?: string | number | undefined; 'client.port'?: string | number | undefined; 'client.registered_domain'?: string | undefined; 'client.subdomain'?: string | undefined; 'client.top_level_domain'?: string | undefined; 'client.user.domain'?: string | undefined; 'client.user.email'?: string | undefined; 'client.user.full_name'?: string | undefined; 'client.user.group.domain'?: string | undefined; 'client.user.group.id'?: string | undefined; 'client.user.group.name'?: string | undefined; 'client.user.hash'?: string | undefined; 'client.user.id'?: string | undefined; 'client.user.name'?: string | undefined; 'client.user.roles'?: string[] | undefined; 'cloud.account.id'?: string | undefined; 'cloud.account.name'?: string | undefined; 'cloud.availability_zone'?: string | undefined; 'cloud.instance.id'?: string | undefined; 'cloud.instance.name'?: string | undefined; 'cloud.machine.type'?: string | undefined; 'cloud.origin.account.id'?: string | undefined; 'cloud.origin.account.name'?: string | undefined; 'cloud.origin.availability_zone'?: string | undefined; 'cloud.origin.instance.id'?: string | undefined; 'cloud.origin.instance.name'?: string | undefined; 'cloud.origin.machine.type'?: string | undefined; 'cloud.origin.project.id'?: string | undefined; 'cloud.origin.project.name'?: string | undefined; 'cloud.origin.provider'?: string | undefined; 'cloud.origin.region'?: string | undefined; 'cloud.origin.service.name'?: string | undefined; 'cloud.project.id'?: string | undefined; 'cloud.project.name'?: string | undefined; 'cloud.provider'?: string | undefined; 'cloud.region'?: string | undefined; 'cloud.service.name'?: string | undefined; 'cloud.target.account.id'?: string | undefined; 'cloud.target.account.name'?: string | undefined; 'cloud.target.availability_zone'?: string | undefined; 'cloud.target.instance.id'?: string | undefined; 'cloud.target.instance.name'?: string | undefined; 'cloud.target.machine.type'?: string | undefined; 'cloud.target.project.id'?: string | undefined; 'cloud.target.project.name'?: string | undefined; 'cloud.target.provider'?: string | undefined; 'cloud.target.region'?: string | undefined; 'cloud.target.service.name'?: string | undefined; 'container.cpu.usage'?: string | number | undefined; 'container.disk.read.bytes'?: string | number | undefined; 'container.disk.write.bytes'?: string | number | undefined; 'container.id'?: string | undefined; 'container.image.hash.all'?: string[] | undefined; 'container.image.name'?: string | undefined; 'container.image.tag'?: string[] | undefined; 'container.labels'?: unknown; 'container.memory.usage'?: string | number | undefined; 'container.name'?: string | undefined; 'container.network.egress.bytes'?: string | number | undefined; 'container.network.ingress.bytes'?: string | number | undefined; 'container.runtime'?: string | undefined; 'container.security_context.privileged'?: boolean | undefined; 'destination.address'?: string | undefined; 'destination.as.number'?: string | number | undefined; 'destination.as.organization.name'?: string | undefined; 'destination.bytes'?: string | number | undefined; 'destination.domain'?: string | undefined; 'destination.geo.city_name'?: string | undefined; 'destination.geo.continent_code'?: string | undefined; 'destination.geo.continent_name'?: string | undefined; 'destination.geo.country_iso_code'?: string | undefined; 'destination.geo.country_name'?: string | undefined; 'destination.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'destination.geo.name'?: string | undefined; 'destination.geo.postal_code'?: string | undefined; 'destination.geo.region_iso_code'?: string | undefined; 'destination.geo.region_name'?: string | undefined; 'destination.geo.timezone'?: string | undefined; 'destination.ip'?: string | undefined; 'destination.mac'?: string | undefined; 'destination.nat.ip'?: string | undefined; 'destination.nat.port'?: string | number | undefined; 'destination.packets'?: string | number | undefined; 'destination.port'?: string | number | undefined; 'destination.registered_domain'?: string | undefined; 'destination.subdomain'?: string | undefined; 'destination.top_level_domain'?: string | undefined; 'destination.user.domain'?: string | undefined; 'destination.user.email'?: string | undefined; 'destination.user.full_name'?: string | undefined; 'destination.user.group.domain'?: string | undefined; 'destination.user.group.id'?: string | undefined; 'destination.user.group.name'?: string | undefined; 'destination.user.hash'?: string | undefined; 'destination.user.id'?: string | undefined; 'destination.user.name'?: string | undefined; 'destination.user.roles'?: string[] | undefined; 'device.id'?: string | undefined; 'device.manufacturer'?: string | undefined; 'device.model.identifier'?: string | undefined; 'device.model.name'?: string | undefined; 'dll.code_signature.digest_algorithm'?: string | undefined; 'dll.code_signature.exists'?: boolean | undefined; 'dll.code_signature.signing_id'?: string | undefined; 'dll.code_signature.status'?: string | undefined; 'dll.code_signature.subject_name'?: string | undefined; 'dll.code_signature.team_id'?: string | undefined; 'dll.code_signature.timestamp'?: string | number | undefined; 'dll.code_signature.trusted'?: boolean | undefined; 'dll.code_signature.valid'?: boolean | undefined; 'dll.hash.md5'?: string | undefined; 'dll.hash.sha1'?: string | undefined; 'dll.hash.sha256'?: string | undefined; 'dll.hash.sha384'?: string | undefined; 'dll.hash.sha512'?: string | undefined; 'dll.hash.ssdeep'?: string | undefined; 'dll.hash.tlsh'?: string | undefined; 'dll.name'?: string | undefined; 'dll.path'?: string | undefined; 'dll.pe.architecture'?: string | undefined; 'dll.pe.company'?: string | undefined; 'dll.pe.description'?: string | undefined; 'dll.pe.file_version'?: string | undefined; 'dll.pe.go_import_hash'?: string | undefined; 'dll.pe.go_imports'?: unknown; 'dll.pe.go_imports_names_entropy'?: string | number | undefined; 'dll.pe.go_imports_names_var_entropy'?: string | number | undefined; 'dll.pe.go_stripped'?: boolean | undefined; 'dll.pe.imphash'?: string | undefined; 'dll.pe.import_hash'?: string | undefined; 'dll.pe.imports'?: unknown[] | undefined; 'dll.pe.imports_names_entropy'?: string | number | undefined; 'dll.pe.imports_names_var_entropy'?: string | number | undefined; 'dll.pe.original_file_name'?: string | undefined; 'dll.pe.pehash'?: string | undefined; 'dll.pe.product'?: string | undefined; 'dll.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'dns.answers'?: { class?: string | undefined; data?: string | undefined; name?: string | undefined; ttl?: string | number | undefined; type?: string | undefined; }[] | undefined; 'dns.header_flags'?: string[] | undefined; 'dns.id'?: string | undefined; 'dns.op_code'?: string | undefined; 'dns.question.class'?: string | undefined; 'dns.question.name'?: string | undefined; 'dns.question.registered_domain'?: string | undefined; 'dns.question.subdomain'?: string | undefined; 'dns.question.top_level_domain'?: string | undefined; 'dns.question.type'?: string | undefined; 'dns.resolved_ip'?: string[] | undefined; 'dns.response_code'?: string | undefined; 'dns.type'?: string | undefined; 'email.attachments'?: { 'file.extension'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.name'?: string | undefined; 'file.size'?: string | number | undefined; }[] | undefined; 'email.bcc.address'?: string[] | undefined; 'email.cc.address'?: string[] | undefined; 'email.content_type'?: string | undefined; 'email.delivery_timestamp'?: string | number | undefined; 'email.direction'?: string | undefined; 'email.from.address'?: string[] | undefined; 'email.local_id'?: string | undefined; 'email.message_id'?: string | undefined; 'email.origination_timestamp'?: string | number | undefined; 'email.reply_to.address'?: string[] | undefined; 'email.sender.address'?: string | undefined; 'email.subject'?: string | undefined; 'email.to.address'?: string[] | undefined; 'email.x_mailer'?: string | undefined; 'error.code'?: string | undefined; 'error.id'?: string | undefined; 'error.message'?: string | undefined; 'error.stack_trace'?: string | undefined; 'error.type'?: string | undefined; 'event.action'?: string | undefined; 'event.agent_id_status'?: string | undefined; 'event.category'?: string[] | undefined; 'event.code'?: string | undefined; 'event.created'?: string | number | undefined; 'event.dataset'?: string | undefined; 'event.duration'?: string | number | undefined; 'event.end'?: string | number | undefined; 'event.hash'?: string | undefined; 'event.id'?: string | undefined; 'event.ingested'?: string | number | undefined; 'event.kind'?: string | undefined; 'event.module'?: string | undefined; 'event.original'?: string | undefined; 'event.outcome'?: string | undefined; 'event.provider'?: string | undefined; 'event.reason'?: string | undefined; 'event.reference'?: string | undefined; 'event.risk_score'?: number | undefined; 'event.risk_score_norm'?: number | undefined; 'event.sequence'?: string | number | undefined; 'event.severity'?: string | number | undefined; 'event.start'?: string | number | undefined; 'event.timezone'?: string | undefined; 'event.type'?: string[] | undefined; 'event.url'?: string | undefined; 'faas.coldstart'?: boolean | undefined; 'faas.execution'?: string | undefined; 'faas.id'?: string | undefined; 'faas.name'?: string | undefined; 'faas.version'?: string | undefined; 'file.accessed'?: string | number | undefined; 'file.attributes'?: string[] | undefined; 'file.code_signature.digest_algorithm'?: string | undefined; 'file.code_signature.exists'?: boolean | undefined; 'file.code_signature.signing_id'?: string | undefined; 'file.code_signature.status'?: string | undefined; 'file.code_signature.subject_name'?: string | undefined; 'file.code_signature.team_id'?: string | undefined; 'file.code_signature.timestamp'?: string | number | undefined; 'file.code_signature.trusted'?: boolean | undefined; 'file.code_signature.valid'?: boolean | undefined; 'file.created'?: string | number | undefined; 'file.ctime'?: string | number | undefined; 'file.device'?: string | undefined; 'file.directory'?: string | undefined; 'file.drive_letter'?: string | undefined; 'file.elf.architecture'?: string | undefined; 'file.elf.byte_order'?: string | undefined; 'file.elf.cpu_type'?: string | undefined; 'file.elf.creation_date'?: string | number | undefined; 'file.elf.exports'?: unknown[] | undefined; 'file.elf.go_import_hash'?: string | undefined; 'file.elf.go_imports'?: unknown; 'file.elf.go_imports_names_entropy'?: string | number | undefined; 'file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'file.elf.go_stripped'?: boolean | undefined; 'file.elf.header.abi_version'?: string | undefined; 'file.elf.header.class'?: string | undefined; 'file.elf.header.data'?: string | undefined; 'file.elf.header.entrypoint'?: string | number | undefined; 'file.elf.header.object_version'?: string | undefined; 'file.elf.header.os_abi'?: string | undefined; 'file.elf.header.type'?: string | undefined; 'file.elf.header.version'?: string | undefined; 'file.elf.import_hash'?: string | undefined; 'file.elf.imports'?: unknown[] | undefined; 'file.elf.imports_names_entropy'?: string | number | undefined; 'file.elf.imports_names_var_entropy'?: string | number | undefined; 'file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'file.elf.shared_libraries'?: string[] | undefined; 'file.elf.telfhash'?: string | undefined; 'file.extension'?: string | undefined; 'file.fork_name'?: string | undefined; 'file.gid'?: string | undefined; 'file.group'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.inode'?: string | undefined; 'file.macho.go_import_hash'?: string | undefined; 'file.macho.go_imports'?: unknown; 'file.macho.go_imports_names_entropy'?: string | number | undefined; 'file.macho.go_imports_names_var_entropy'?: string | number | undefined; 'file.macho.go_stripped'?: boolean | undefined; 'file.macho.import_hash'?: string | undefined; 'file.macho.imports'?: unknown[] | undefined; 'file.macho.imports_names_entropy'?: string | number | undefined; 'file.macho.imports_names_var_entropy'?: string | number | undefined; 'file.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.macho.symhash'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.mode'?: string | undefined; 'file.mtime'?: string | number | undefined; 'file.name'?: string | undefined; 'file.owner'?: string | undefined; 'file.path'?: string | undefined; 'file.pe.architecture'?: string | undefined; 'file.pe.company'?: string | undefined; 'file.pe.description'?: string | undefined; 'file.pe.file_version'?: string | undefined; 'file.pe.go_import_hash'?: string | undefined; 'file.pe.go_imports'?: unknown; 'file.pe.go_imports_names_entropy'?: string | number | undefined; 'file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'file.pe.go_stripped'?: boolean | undefined; 'file.pe.imphash'?: string | undefined; 'file.pe.import_hash'?: string | undefined; 'file.pe.imports'?: unknown[] | undefined; 'file.pe.imports_names_entropy'?: string | number | undefined; 'file.pe.imports_names_var_entropy'?: string | number | undefined; 'file.pe.original_file_name'?: string | undefined; 'file.pe.pehash'?: string | undefined; 'file.pe.product'?: string | undefined; 'file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.size'?: string | number | undefined; 'file.target_path'?: string | undefined; 'file.type'?: string | undefined; 'file.uid'?: string | undefined; 'file.x509.alternative_names'?: string[] | undefined; 'file.x509.issuer.common_name'?: string[] | undefined; 'file.x509.issuer.country'?: string[] | undefined; 'file.x509.issuer.distinguished_name'?: string | undefined; 'file.x509.issuer.locality'?: string[] | undefined; 'file.x509.issuer.organization'?: string[] | undefined; 'file.x509.issuer.organizational_unit'?: string[] | undefined; 'file.x509.issuer.state_or_province'?: string[] | undefined; 'file.x509.not_after'?: string | number | undefined; 'file.x509.not_before'?: string | number | undefined; 'file.x509.public_key_algorithm'?: string | undefined; 'file.x509.public_key_curve'?: string | undefined; 'file.x509.public_key_exponent'?: string | number | undefined; 'file.x509.public_key_size'?: string | number | undefined; 'file.x509.serial_number'?: string | undefined; 'file.x509.signature_algorithm'?: string | undefined; 'file.x509.subject.common_name'?: string[] | undefined; 'file.x509.subject.country'?: string[] | undefined; 'file.x509.subject.distinguished_name'?: string | undefined; 'file.x509.subject.locality'?: string[] | undefined; 'file.x509.subject.organization'?: string[] | undefined; 'file.x509.subject.organizational_unit'?: string[] | undefined; 'file.x509.subject.state_or_province'?: string[] | undefined; 'file.x509.version_number'?: string | undefined; 'group.domain'?: string | undefined; 'group.id'?: string | undefined; 'group.name'?: string | undefined; 'host.architecture'?: string | undefined; 'host.boot.id'?: string | undefined; 'host.cpu.usage'?: string | number | undefined; 'host.disk.read.bytes'?: string | number | undefined; 'host.disk.write.bytes'?: string | number | undefined; 'host.domain'?: string | undefined; 'host.geo.city_name'?: string | undefined; 'host.geo.continent_code'?: string | undefined; 'host.geo.continent_name'?: string | undefined; 'host.geo.country_iso_code'?: string | undefined; 'host.geo.country_name'?: string | undefined; 'host.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'host.geo.name'?: string | undefined; 'host.geo.postal_code'?: string | undefined; 'host.geo.region_iso_code'?: string | undefined; 'host.geo.region_name'?: string | undefined; 'host.geo.timezone'?: string | undefined; 'host.hostname'?: string | undefined; 'host.id'?: string | undefined; 'host.ip'?: string[] | undefined; 'host.mac'?: string[] | undefined; 'host.name'?: string | undefined; 'host.network.egress.bytes'?: string | number | undefined; 'host.network.egress.packets'?: string | number | undefined; 'host.network.ingress.bytes'?: string | number | undefined; 'host.network.ingress.packets'?: string | number | undefined; 'host.os.family'?: string | undefined; 'host.os.full'?: string | undefined; 'host.os.kernel'?: string | undefined; 'host.os.name'?: string | undefined; 'host.os.platform'?: string | undefined; 'host.os.type'?: string | undefined; 'host.os.version'?: string | undefined; 'host.pid_ns_ino'?: string | undefined; 'host.risk.calculated_level'?: string | undefined; 'host.risk.calculated_score'?: number | undefined; 'host.risk.calculated_score_norm'?: number | undefined; 'host.risk.static_level'?: string | undefined; 'host.risk.static_score'?: number | undefined; 'host.risk.static_score_norm'?: number | undefined; 'host.type'?: string | undefined; 'host.uptime'?: string | number | undefined; 'http.request.body.bytes'?: string | number | undefined; 'http.request.body.content'?: string | undefined; 'http.request.bytes'?: string | number | undefined; 'http.request.id'?: string | undefined; 'http.request.method'?: string | undefined; 'http.request.mime_type'?: string | undefined; 'http.request.referrer'?: string | undefined; 'http.response.body.bytes'?: string | number | undefined; 'http.response.body.content'?: string | undefined; 'http.response.bytes'?: string | number | undefined; 'http.response.mime_type'?: string | undefined; 'http.response.status_code'?: string | number | undefined; 'http.version'?: string | undefined; labels?: unknown; 'log.file.path'?: string | undefined; 'log.level'?: string | undefined; 'log.logger'?: string | undefined; 'log.origin.file.line'?: string | number | undefined; 'log.origin.file.name'?: string | undefined; 'log.origin.function'?: string | undefined; 'log.syslog'?: unknown; message?: string | undefined; 'network.application'?: string | undefined; 'network.bytes'?: string | number | undefined; 'network.community_id'?: string | undefined; 'network.direction'?: string | undefined; 'network.forwarded_ip'?: string | undefined; 'network.iana_number'?: string | undefined; 'network.inner'?: unknown; 'network.name'?: string | undefined; 'network.packets'?: string | number | undefined; 'network.protocol'?: string | undefined; 'network.transport'?: string | undefined; 'network.type'?: string | undefined; 'network.vlan.id'?: string | undefined; 'network.vlan.name'?: string | undefined; 'observer.egress'?: unknown; 'observer.geo.city_name'?: string | undefined; 'observer.geo.continent_code'?: string | undefined; 'observer.geo.continent_name'?: string | undefined; 'observer.geo.country_iso_code'?: string | undefined; 'observer.geo.country_name'?: string | undefined; 'observer.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'observer.geo.name'?: string | undefined; 'observer.geo.postal_code'?: string | undefined; 'observer.geo.region_iso_code'?: string | undefined; 'observer.geo.region_name'?: string | undefined; 'observer.geo.timezone'?: string | undefined; 'observer.hostname'?: string | undefined; 'observer.ingress'?: unknown; 'observer.ip'?: string[] | undefined; 'observer.mac'?: string[] | undefined; 'observer.name'?: string | undefined; 'observer.os.family'?: string | undefined; 'observer.os.full'?: string | undefined; 'observer.os.kernel'?: string | undefined; 'observer.os.name'?: string | undefined; 'observer.os.platform'?: string | undefined; 'observer.os.type'?: string | undefined; 'observer.os.version'?: string | undefined; 'observer.product'?: string | undefined; 'observer.serial_number'?: string | undefined; 'observer.type'?: string | undefined; 'observer.vendor'?: string | undefined; 'observer.version'?: string | undefined; 'orchestrator.api_version'?: string | undefined; 'orchestrator.cluster.id'?: string | undefined; 'orchestrator.cluster.name'?: string | undefined; 'orchestrator.cluster.url'?: string | undefined; 'orchestrator.cluster.version'?: string | undefined; 'orchestrator.namespace'?: string | undefined; 'orchestrator.organization'?: string | undefined; 'orchestrator.resource.annotation'?: string[] | undefined; 'orchestrator.resource.id'?: string | undefined; 'orchestrator.resource.ip'?: string[] | undefined; 'orchestrator.resource.label'?: string[] | undefined; 'orchestrator.resource.name'?: string | undefined; 'orchestrator.resource.parent.type'?: string | undefined; 'orchestrator.resource.type'?: string | undefined; 'orchestrator.type'?: string | undefined; 'organization.id'?: string | undefined; 'organization.name'?: string | undefined; 'package.architecture'?: string | undefined; 'package.build_version'?: string | undefined; 'package.checksum'?: string | undefined; 'package.description'?: string | undefined; 'package.install_scope'?: string | undefined; 'package.installed'?: string | number | undefined; 'package.license'?: string | undefined; 'package.name'?: string | undefined; 'package.path'?: string | undefined; 'package.reference'?: string | undefined; 'package.size'?: string | number | undefined; 'package.type'?: string | undefined; 'package.version'?: string | undefined; 'process.args'?: string[] | undefined; 'process.args_count'?: string | number | undefined; 'process.code_signature.digest_algorithm'?: string | undefined; 'process.code_signature.exists'?: boolean | undefined; 'process.code_signature.signing_id'?: string | undefined; 'process.code_signature.status'?: string | undefined; 'process.code_signature.subject_name'?: string | undefined; 'process.code_signature.team_id'?: string | undefined; 'process.code_signature.timestamp'?: string | number | undefined; 'process.code_signature.trusted'?: boolean | undefined; 'process.code_signature.valid'?: boolean | undefined; 'process.command_line'?: string | undefined; 'process.elf.architecture'?: string | undefined; 'process.elf.byte_order'?: string | undefined; 'process.elf.cpu_type'?: string | undefined; 'process.elf.creation_date'?: string | number | undefined; 'process.elf.exports'?: unknown[] | undefined; 'process.elf.go_import_hash'?: string | undefined; 'process.elf.go_imports'?: unknown; 'process.elf.go_imports_names_entropy'?: string | number | undefined; 'process.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.elf.go_stripped'?: boolean | undefined; 'process.elf.header.abi_version'?: string | undefined; 'process.elf.header.class'?: string | undefined; 'process.elf.header.data'?: string | undefined; 'process.elf.header.entrypoint'?: string | number | undefined; 'process.elf.header.object_version'?: string | undefined; 'process.elf.header.os_abi'?: string | undefined; 'process.elf.header.type'?: string | undefined; 'process.elf.header.version'?: string | undefined; 'process.elf.import_hash'?: string | undefined; 'process.elf.imports'?: unknown[] | undefined; 'process.elf.imports_names_entropy'?: string | number | undefined; 'process.elf.imports_names_var_entropy'?: string | number | undefined; 'process.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.elf.shared_libraries'?: string[] | undefined; 'process.elf.telfhash'?: string | undefined; 'process.end'?: string | number | undefined; 'process.entity_id'?: string | undefined; 'process.entry_leader.args'?: string[] | undefined; 'process.entry_leader.args_count'?: string | number | undefined; 'process.entry_leader.attested_groups.name'?: string | undefined; 'process.entry_leader.attested_user.id'?: string | undefined; 'process.entry_leader.attested_user.name'?: string | undefined; 'process.entry_leader.command_line'?: string | undefined; 'process.entry_leader.entity_id'?: string | undefined; 'process.entry_leader.entry_meta.source.ip'?: string | undefined; 'process.entry_leader.entry_meta.type'?: string | undefined; 'process.entry_leader.executable'?: string | undefined; 'process.entry_leader.group.id'?: string | undefined; 'process.entry_leader.group.name'?: string | undefined; 'process.entry_leader.interactive'?: boolean | undefined; 'process.entry_leader.name'?: string | undefined; 'process.entry_leader.parent.entity_id'?: string | undefined; 'process.entry_leader.parent.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.entity_id'?: string | undefined; 'process.entry_leader.parent.session_leader.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.start'?: string | number | undefined; 'process.entry_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.entry_leader.parent.start'?: string | number | undefined; 'process.entry_leader.parent.vpid'?: string | number | undefined; 'process.entry_leader.pid'?: string | number | undefined; 'process.entry_leader.real_group.id'?: string | undefined; 'process.entry_leader.real_group.name'?: string | undefined; 'process.entry_leader.real_user.id'?: string | undefined; 'process.entry_leader.real_user.name'?: string | undefined; 'process.entry_leader.same_as_process'?: boolean | undefined; 'process.entry_leader.saved_group.id'?: string | undefined; 'process.entry_leader.saved_group.name'?: string | undefined; 'process.entry_leader.saved_user.id'?: string | undefined; 'process.entry_leader.saved_user.name'?: string | undefined; 'process.entry_leader.start'?: string | number | undefined; 'process.entry_leader.supplemental_groups.id'?: string | undefined; 'process.entry_leader.supplemental_groups.name'?: string | undefined; 'process.entry_leader.tty'?: unknown; 'process.entry_leader.user.id'?: string | undefined; 'process.entry_leader.user.name'?: string | undefined; 'process.entry_leader.vpid'?: string | number | undefined; 'process.entry_leader.working_directory'?: string | undefined; 'process.env_vars'?: string[] | undefined; 'process.executable'?: string | undefined; 'process.exit_code'?: string | number | undefined; 'process.group_leader.args'?: string[] | undefined; 'process.group_leader.args_count'?: string | number | undefined; 'process.group_leader.command_line'?: string | undefined; 'process.group_leader.entity_id'?: string | undefined; 'process.group_leader.executable'?: string | undefined; 'process.group_leader.group.id'?: string | undefined; 'process.group_leader.group.name'?: string | undefined; 'process.group_leader.interactive'?: boolean | undefined; 'process.group_leader.name'?: string | undefined; 'process.group_leader.pid'?: string | number | undefined; 'process.group_leader.real_group.id'?: string | undefined; 'process.group_leader.real_group.name'?: string | undefined; 'process.group_leader.real_user.id'?: string | undefined; 'process.group_leader.real_user.name'?: string | undefined; 'process.group_leader.same_as_process'?: boolean | undefined; 'process.group_leader.saved_group.id'?: string | undefined; 'process.group_leader.saved_group.name'?: string | undefined; 'process.group_leader.saved_user.id'?: string | undefined; 'process.group_leader.saved_user.name'?: string | undefined; 'process.group_leader.start'?: string | number | undefined; 'process.group_leader.supplemental_groups.id'?: string | undefined; 'process.group_leader.supplemental_groups.name'?: string | undefined; 'process.group_leader.tty'?: unknown; 'process.group_leader.user.id'?: string | undefined; 'process.group_leader.user.name'?: string | undefined; 'process.group_leader.vpid'?: string | number | undefined; 'process.group_leader.working_directory'?: string | undefined; 'process.hash.md5'?: string | undefined; 'process.hash.sha1'?: string | undefined; 'process.hash.sha256'?: string | undefined; 'process.hash.sha384'?: string | undefined; 'process.hash.sha512'?: string | undefined; 'process.hash.ssdeep'?: string | undefined; 'process.hash.tlsh'?: string | undefined; 'process.interactive'?: boolean | undefined; 'process.io'?: unknown; 'process.macho.go_import_hash'?: string | undefined; 'process.macho.go_imports'?: unknown; 'process.macho.go_imports_names_entropy'?: string | number | undefined; 'process.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.macho.go_stripped'?: boolean | undefined; 'process.macho.import_hash'?: string | undefined; 'process.macho.imports'?: unknown[] | undefined; 'process.macho.imports_names_entropy'?: string | number | undefined; 'process.macho.imports_names_var_entropy'?: string | number | undefined; 'process.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.macho.symhash'?: string | undefined; 'process.name'?: string | undefined; 'process.parent.args'?: string[] | undefined; 'process.parent.args_count'?: string | number | undefined; 'process.parent.code_signature.digest_algorithm'?: string | undefined; 'process.parent.code_signature.exists'?: boolean | undefined; 'process.parent.code_signature.signing_id'?: string | undefined; 'process.parent.code_signature.status'?: string | undefined; 'process.parent.code_signature.subject_name'?: string | undefined; 'process.parent.code_signature.team_id'?: string | undefined; 'process.parent.code_signature.timestamp'?: string | number | undefined; 'process.parent.code_signature.trusted'?: boolean | undefined; 'process.parent.code_signature.valid'?: boolean | undefined; 'process.parent.command_line'?: string | undefined; 'process.parent.elf.architecture'?: string | undefined; 'process.parent.elf.byte_order'?: string | undefined; 'process.parent.elf.cpu_type'?: string | undefined; 'process.parent.elf.creation_date'?: string | number | undefined; 'process.parent.elf.exports'?: unknown[] | undefined; 'process.parent.elf.go_import_hash'?: string | undefined; 'process.parent.elf.go_imports'?: unknown; 'process.parent.elf.go_imports_names_entropy'?: string | number | undefined; 'process.parent.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.go_stripped'?: boolean | undefined; 'process.parent.elf.header.abi_version'?: string | undefined; 'process.parent.elf.header.class'?: string | undefined; 'process.parent.elf.header.data'?: string | undefined; 'process.parent.elf.header.entrypoint'?: string | number | undefined; 'process.parent.elf.header.object_version'?: string | undefined; 'process.parent.elf.header.os_abi'?: string | undefined; 'process.parent.elf.header.type'?: string | undefined; 'process.parent.elf.header.version'?: string | undefined; 'process.parent.elf.import_hash'?: string | undefined; 'process.parent.elf.imports'?: unknown[] | undefined; 'process.parent.elf.imports_names_entropy'?: string | number | undefined; 'process.parent.elf.imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.parent.elf.shared_libraries'?: string[] | undefined; 'process.parent.elf.telfhash'?: string | undefined; 'process.parent.end'?: string | number | undefined; 'process.parent.entity_id'?: string | undefined; 'process.parent.executable'?: string | undefined; 'process.parent.exit_code'?: string | number | undefined; 'process.parent.group.id'?: string | undefined; 'process.parent.group.name'?: string | undefined; 'process.parent.group_leader.entity_id'?: string | undefined; 'process.parent.group_leader.pid'?: string | number | undefined; 'process.parent.group_leader.start'?: string | number | undefined; 'process.parent.group_leader.vpid'?: string | number | undefined; 'process.parent.hash.md5'?: string | undefined; 'process.parent.hash.sha1'?: string | undefined; 'process.parent.hash.sha256'?: string | undefined; 'process.parent.hash.sha384'?: string | undefined; 'process.parent.hash.sha512'?: string | undefined; 'process.parent.hash.ssdeep'?: string | undefined; 'process.parent.hash.tlsh'?: string | undefined; 'process.parent.interactive'?: boolean | undefined; 'process.parent.macho.go_import_hash'?: string | undefined; 'process.parent.macho.go_imports'?: unknown; 'process.parent.macho.go_imports_names_entropy'?: string | number | undefined; 'process.parent.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.go_stripped'?: boolean | undefined; 'process.parent.macho.import_hash'?: string | undefined; 'process.parent.macho.imports'?: unknown[] | undefined; 'process.parent.macho.imports_names_entropy'?: string | number | undefined; 'process.parent.macho.imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.macho.symhash'?: string | undefined; 'process.parent.name'?: string | undefined; 'process.parent.pe.architecture'?: string | undefined; 'process.parent.pe.company'?: string | undefined; 'process.parent.pe.description'?: string | undefined; 'process.parent.pe.file_version'?: string | undefined; 'process.parent.pe.go_import_hash'?: string | undefined; 'process.parent.pe.go_imports'?: unknown; 'process.parent.pe.go_imports_names_entropy'?: string | number | undefined; 'process.parent.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.go_stripped'?: boolean | undefined; 'process.parent.pe.imphash'?: string | undefined; 'process.parent.pe.import_hash'?: string | undefined; 'process.parent.pe.imports'?: unknown[] | undefined; 'process.parent.pe.imports_names_entropy'?: string | number | undefined; 'process.parent.pe.imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.original_file_name'?: string | undefined; 'process.parent.pe.pehash'?: string | undefined; 'process.parent.pe.product'?: string | undefined; 'process.parent.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.pgid'?: string | number | undefined; 'process.parent.pid'?: string | number | undefined; 'process.parent.real_group.id'?: string | undefined; 'process.parent.real_group.name'?: string | undefined; 'process.parent.real_user.id'?: string | undefined; 'process.parent.real_user.name'?: string | undefined; 'process.parent.saved_group.id'?: string | undefined; 'process.parent.saved_group.name'?: string | undefined; 'process.parent.saved_user.id'?: string | undefined; 'process.parent.saved_user.name'?: string | undefined; 'process.parent.start'?: string | number | undefined; 'process.parent.supplemental_groups.id'?: string | undefined; 'process.parent.supplemental_groups.name'?: string | undefined; 'process.parent.thread.capabilities.effective'?: string[] | undefined; 'process.parent.thread.capabilities.permitted'?: string[] | undefined; 'process.parent.thread.id'?: string | number | undefined; 'process.parent.thread.name'?: string | undefined; 'process.parent.title'?: string | undefined; 'process.parent.tty'?: unknown; 'process.parent.uptime'?: string | number | undefined; 'process.parent.user.id'?: string | undefined; 'process.parent.user.name'?: string | undefined; 'process.parent.vpid'?: string | number | undefined; 'process.parent.working_directory'?: string | undefined; 'process.pe.architecture'?: string | undefined; 'process.pe.company'?: string | undefined; 'process.pe.description'?: string | undefined; 'process.pe.file_version'?: string | undefined; 'process.pe.go_import_hash'?: string | undefined; 'process.pe.go_imports'?: unknown; 'process.pe.go_imports_names_entropy'?: string | number | undefined; 'process.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.pe.go_stripped'?: boolean | undefined; 'process.pe.imphash'?: string | undefined; 'process.pe.import_hash'?: string | undefined; 'process.pe.imports'?: unknown[] | undefined; 'process.pe.imports_names_entropy'?: string | number | undefined; 'process.pe.imports_names_var_entropy'?: string | number | undefined; 'process.pe.original_file_name'?: string | undefined; 'process.pe.pehash'?: string | undefined; 'process.pe.product'?: string | undefined; 'process.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.pgid'?: string | number | undefined; 'process.pid'?: string | number | undefined; 'process.previous.args'?: string[] | undefined; 'process.previous.args_count'?: string | number | undefined; 'process.previous.executable'?: string | undefined; 'process.real_group.id'?: string | undefined; 'process.real_group.name'?: string | undefined; 'process.real_user.id'?: string | undefined; 'process.real_user.name'?: string | undefined; 'process.saved_group.id'?: string | undefined; 'process.saved_group.name'?: string | undefined; 'process.saved_user.id'?: string | undefined; 'process.saved_user.name'?: string | undefined; 'process.session_leader.args'?: string[] | undefined; 'process.session_leader.args_count'?: string | number | undefined; 'process.session_leader.command_line'?: string | undefined; 'process.session_leader.entity_id'?: string | undefined; 'process.session_leader.executable'?: string | undefined; 'process.session_leader.group.id'?: string | undefined; 'process.session_leader.group.name'?: string | undefined; 'process.session_leader.interactive'?: boolean | undefined; 'process.session_leader.name'?: string | undefined; 'process.session_leader.parent.entity_id'?: string | undefined; 'process.session_leader.parent.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.entity_id'?: string | undefined; 'process.session_leader.parent.session_leader.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.start'?: string | number | undefined; 'process.session_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.session_leader.parent.start'?: string | number | undefined; 'process.session_leader.parent.vpid'?: string | number | undefined; 'process.session_leader.pid'?: string | number | undefined; 'process.session_leader.real_group.id'?: string | undefined; 'process.session_leader.real_group.name'?: string | undefined; 'process.session_leader.real_user.id'?: string | undefined; 'process.session_leader.real_user.name'?: string | undefined; 'process.session_leader.same_as_process'?: boolean | undefined; 'process.session_leader.saved_group.id'?: string | undefined; 'process.session_leader.saved_group.name'?: string | undefined; 'process.session_leader.saved_user.id'?: string | undefined; 'process.session_leader.saved_user.name'?: string | undefined; 'process.session_leader.start'?: string | number | undefined; 'process.session_leader.supplemental_groups.id'?: string | undefined; 'process.session_leader.supplemental_groups.name'?: string | undefined; 'process.session_leader.tty'?: unknown; 'process.session_leader.user.id'?: string | undefined; 'process.session_leader.user.name'?: string | undefined; 'process.session_leader.vpid'?: string | number | undefined; 'process.session_leader.working_directory'?: string | undefined; 'process.start'?: string | number | undefined; 'process.supplemental_groups.id'?: string | undefined; 'process.supplemental_groups.name'?: string | undefined; 'process.thread.capabilities.effective'?: string[] | undefined; 'process.thread.capabilities.permitted'?: string[] | undefined; 'process.thread.id'?: string | number | undefined; 'process.thread.name'?: string | undefined; 'process.title'?: string | undefined; 'process.tty'?: unknown; 'process.uptime'?: string | number | undefined; 'process.user.id'?: string | undefined; 'process.user.name'?: string | undefined; 'process.vpid'?: string | number | undefined; 'process.working_directory'?: string | undefined; 'registry.data.bytes'?: string | undefined; 'registry.data.strings'?: string[] | undefined; 'registry.data.type'?: string | undefined; 'registry.hive'?: string | undefined; 'registry.key'?: string | undefined; 'registry.path'?: string | undefined; 'registry.value'?: string | undefined; 'related.hash'?: string[] | undefined; 'related.hosts'?: string[] | undefined; 'related.ip'?: string[] | undefined; 'related.user'?: string[] | undefined; 'rule.author'?: string[] | undefined; 'rule.category'?: string | undefined; 'rule.description'?: string | undefined; 'rule.id'?: string | undefined; 'rule.license'?: string | undefined; 'rule.name'?: string | undefined; 'rule.reference'?: string | undefined; 'rule.ruleset'?: string | undefined; 'rule.uuid'?: string | undefined; 'rule.version'?: string | undefined; 'server.address'?: string | undefined; 'server.as.number'?: string | number | undefined; 'server.as.organization.name'?: string | undefined; 'server.bytes'?: string | number | undefined; 'server.domain'?: string | undefined; 'server.geo.city_name'?: string | undefined; 'server.geo.continent_code'?: string | undefined; 'server.geo.continent_name'?: string | undefined; 'server.geo.country_iso_code'?: string | undefined; 'server.geo.country_name'?: string | undefined; 'server.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'server.geo.name'?: string | undefined; 'server.geo.postal_code'?: string | undefined; 'server.geo.region_iso_code'?: string | undefined; 'server.geo.region_name'?: string | undefined; 'server.geo.timezone'?: string | undefined; 'server.ip'?: string | undefined; 'server.mac'?: string | undefined; 'server.nat.ip'?: string | undefined; 'server.nat.port'?: string | number | undefined; 'server.packets'?: string | number | undefined; 'server.port'?: string | number | undefined; 'server.registered_domain'?: string | undefined; 'server.subdomain'?: string | undefined; 'server.top_level_domain'?: string | undefined; 'server.user.domain'?: string | undefined; 'server.user.email'?: string | undefined; 'server.user.full_name'?: string | undefined; 'server.user.group.domain'?: string | undefined; 'server.user.group.id'?: string | undefined; 'server.user.group.name'?: string | undefined; 'server.user.hash'?: string | undefined; 'server.user.id'?: string | undefined; 'server.user.name'?: string | undefined; 'server.user.roles'?: string[] | undefined; 'service.address'?: string | undefined; 'service.environment'?: string | undefined; 'service.ephemeral_id'?: string | undefined; 'service.id'?: string | undefined; 'service.name'?: string | undefined; 'service.node.name'?: string | undefined; 'service.node.role'?: string | undefined; 'service.node.roles'?: string[] | undefined; 'service.origin.address'?: string | undefined; 'service.origin.environment'?: string | undefined; 'service.origin.ephemeral_id'?: string | undefined; 'service.origin.id'?: string | undefined; 'service.origin.name'?: string | undefined; 'service.origin.node.name'?: string | undefined; 'service.origin.node.role'?: string | undefined; 'service.origin.node.roles'?: string[] | undefined; 'service.origin.state'?: string | undefined; 'service.origin.type'?: string | undefined; 'service.origin.version'?: string | undefined; 'service.state'?: string | undefined; 'service.target.address'?: string | undefined; 'service.target.environment'?: string | undefined; 'service.target.ephemeral_id'?: string | undefined; 'service.target.id'?: string | undefined; 'service.target.name'?: string | undefined; 'service.target.node.name'?: string | undefined; 'service.target.node.role'?: string | undefined; 'service.target.node.roles'?: string[] | undefined; 'service.target.state'?: string | undefined; 'service.target.type'?: string | undefined; 'service.target.version'?: string | undefined; 'service.type'?: string | undefined; 'service.version'?: string | undefined; 'source.address'?: string | undefined; 'source.as.number'?: string | number | undefined; 'source.as.organization.name'?: string | undefined; 'source.bytes'?: string | number | undefined; 'source.domain'?: string | undefined; 'source.geo.city_name'?: string | undefined; 'source.geo.continent_code'?: string | undefined; 'source.geo.continent_name'?: string | undefined; 'source.geo.country_iso_code'?: string | undefined; 'source.geo.country_name'?: string | undefined; 'source.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'source.geo.name'?: string | undefined; 'source.geo.postal_code'?: string | undefined; 'source.geo.region_iso_code'?: string | undefined; 'source.geo.region_name'?: string | undefined; 'source.geo.timezone'?: string | undefined; 'source.ip'?: string | undefined; 'source.mac'?: string | undefined; 'source.nat.ip'?: string | undefined; 'source.nat.port'?: string | number | undefined; 'source.packets'?: string | number | undefined; 'source.port'?: string | number | undefined; 'source.registered_domain'?: string | undefined; 'source.subdomain'?: string | undefined; 'source.top_level_domain'?: string | undefined; 'source.user.domain'?: string | undefined; 'source.user.email'?: string | undefined; 'source.user.full_name'?: string | undefined; 'source.user.group.domain'?: string | undefined; 'source.user.group.id'?: string | undefined; 'source.user.group.name'?: string | undefined; 'source.user.hash'?: string | undefined; 'source.user.id'?: string | undefined; 'source.user.name'?: string | undefined; 'source.user.roles'?: string[] | undefined; 'span.id'?: string | undefined; tags?: string[] | undefined; 'threat.enrichments'?: { indicator?: unknown; 'matched.atomic'?: string | undefined; 'matched.field'?: string | undefined; 'matched.id'?: string | undefined; 'matched.index'?: string | undefined; 'matched.occurred'?: string | number | undefined; 'matched.type'?: string | undefined; }[] | undefined; 'threat.feed.dashboard_id'?: string | undefined; 'threat.feed.description'?: string | undefined; 'threat.feed.name'?: string | undefined; 'threat.feed.reference'?: string | undefined; 'threat.framework'?: string | undefined; 'threat.group.alias'?: string[] | undefined; 'threat.group.id'?: string | undefined; 'threat.group.name'?: string | undefined; 'threat.group.reference'?: string | undefined; 'threat.indicator.as.number'?: string | number | undefined; 'threat.indicator.as.organization.name'?: string | undefined; 'threat.indicator.confidence'?: string | undefined; 'threat.indicator.description'?: string | undefined; 'threat.indicator.email.address'?: string | undefined; 'threat.indicator.file.accessed'?: string | number | undefined; 'threat.indicator.file.attributes'?: string[] | undefined; 'threat.indicator.file.code_signature.digest_algorithm'?: string | undefined; 'threat.indicator.file.code_signature.exists'?: boolean | undefined; 'threat.indicator.file.code_signature.signing_id'?: string | undefined; 'threat.indicator.file.code_signature.status'?: string | undefined; 'threat.indicator.file.code_signature.subject_name'?: string | undefined; 'threat.indicator.file.code_signature.team_id'?: string | undefined; 'threat.indicator.file.code_signature.timestamp'?: string | number | undefined; 'threat.indicator.file.code_signature.trusted'?: boolean | undefined; 'threat.indicator.file.code_signature.valid'?: boolean | undefined; 'threat.indicator.file.created'?: string | number | undefined; 'threat.indicator.file.ctime'?: string | number | undefined; 'threat.indicator.file.device'?: string | undefined; 'threat.indicator.file.directory'?: string | undefined; 'threat.indicator.file.drive_letter'?: string | undefined; 'threat.indicator.file.elf.architecture'?: string | undefined; 'threat.indicator.file.elf.byte_order'?: string | undefined; 'threat.indicator.file.elf.cpu_type'?: string | undefined; 'threat.indicator.file.elf.creation_date'?: string | number | undefined; 'threat.indicator.file.elf.exports'?: unknown[] | undefined; 'threat.indicator.file.elf.go_import_hash'?: string | undefined; 'threat.indicator.file.elf.go_imports'?: unknown; 'threat.indicator.file.elf.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_stripped'?: boolean | undefined; 'threat.indicator.file.elf.header.abi_version'?: string | undefined; 'threat.indicator.file.elf.header.class'?: string | undefined; 'threat.indicator.file.elf.header.data'?: string | undefined; 'threat.indicator.file.elf.header.entrypoint'?: string | number | undefined; 'threat.indicator.file.elf.header.object_version'?: string | undefined; 'threat.indicator.file.elf.header.os_abi'?: string | undefined; 'threat.indicator.file.elf.header.type'?: string | undefined; 'threat.indicator.file.elf.header.version'?: string | undefined; 'threat.indicator.file.elf.import_hash'?: string | undefined; 'threat.indicator.file.elf.imports'?: unknown[] | undefined; 'threat.indicator.file.elf.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'threat.indicator.file.elf.shared_libraries'?: string[] | undefined; 'threat.indicator.file.elf.telfhash'?: string | undefined; 'threat.indicator.file.extension'?: string | undefined; 'threat.indicator.file.fork_name'?: string | undefined; 'threat.indicator.file.gid'?: string | undefined; 'threat.indicator.file.group'?: string | undefined; 'threat.indicator.file.hash.md5'?: string | undefined; 'threat.indicator.file.hash.sha1'?: string | undefined; 'threat.indicator.file.hash.sha256'?: string | undefined; 'threat.indicator.file.hash.sha384'?: string | undefined; 'threat.indicator.file.hash.sha512'?: string | undefined; 'threat.indicator.file.hash.ssdeep'?: string | undefined; 'threat.indicator.file.hash.tlsh'?: string | undefined; 'threat.indicator.file.inode'?: string | undefined; 'threat.indicator.file.mime_type'?: string | undefined; 'threat.indicator.file.mode'?: string | undefined; 'threat.indicator.file.mtime'?: string | number | undefined; 'threat.indicator.file.name'?: string | undefined; 'threat.indicator.file.owner'?: string | undefined; 'threat.indicator.file.path'?: string | undefined; 'threat.indicator.file.pe.architecture'?: string | undefined; 'threat.indicator.file.pe.company'?: string | undefined; 'threat.indicator.file.pe.description'?: string | undefined; 'threat.indicator.file.pe.file_version'?: string | undefined; 'threat.indicator.file.pe.go_import_hash'?: string | undefined; 'threat.indicator.file.pe.go_imports'?: unknown; 'threat.indicator.file.pe.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_stripped'?: boolean | undefined; 'threat.indicator.file.pe.imphash'?: string | undefined; 'threat.indicator.file.pe.import_hash'?: string | undefined; 'threat.indicator.file.pe.imports'?: unknown[] | undefined; 'threat.indicator.file.pe.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.original_file_name'?: string | undefined; 'threat.indicator.file.pe.pehash'?: string | undefined; 'threat.indicator.file.pe.product'?: string | undefined; 'threat.indicator.file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.size'?: string | number | undefined; 'threat.indicator.file.target_path'?: string | undefined; 'threat.indicator.file.type'?: string | undefined; 'threat.indicator.file.uid'?: string | undefined; 'threat.indicator.file.x509.alternative_names'?: string[] | undefined; 'threat.indicator.file.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.file.x509.issuer.country'?: string[] | undefined; 'threat.indicator.file.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.not_after'?: string | number | undefined; 'threat.indicator.file.x509.not_before'?: string | number | undefined; 'threat.indicator.file.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.file.x509.public_key_curve'?: string | undefined; 'threat.indicator.file.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.file.x509.public_key_size'?: string | number | undefined; 'threat.indicator.file.x509.serial_number'?: string | undefined; 'threat.indicator.file.x509.signature_algorithm'?: string | undefined; 'threat.indicator.file.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.file.x509.subject.country'?: string[] | undefined; 'threat.indicator.file.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.subject.locality'?: string[] | undefined; 'threat.indicator.file.x509.subject.organization'?: string[] | undefined; 'threat.indicator.file.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.version_number'?: string | undefined; 'threat.indicator.first_seen'?: string | number | undefined; 'threat.indicator.geo.city_name'?: string | undefined; 'threat.indicator.geo.continent_code'?: string | undefined; 'threat.indicator.geo.continent_name'?: string | undefined; 'threat.indicator.geo.country_iso_code'?: string | undefined; 'threat.indicator.geo.country_name'?: string | undefined; 'threat.indicator.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'threat.indicator.geo.name'?: string | undefined; 'threat.indicator.geo.postal_code'?: string | undefined; 'threat.indicator.geo.region_iso_code'?: string | undefined; 'threat.indicator.geo.region_name'?: string | undefined; 'threat.indicator.geo.timezone'?: string | undefined; 'threat.indicator.ip'?: string | undefined; 'threat.indicator.last_seen'?: string | number | undefined; 'threat.indicator.marking.tlp'?: string | undefined; 'threat.indicator.marking.tlp_version'?: string | undefined; 'threat.indicator.modified_at'?: string | number | undefined; 'threat.indicator.name'?: string | undefined; 'threat.indicator.port'?: string | number | undefined; 'threat.indicator.provider'?: string | undefined; 'threat.indicator.reference'?: string | undefined; 'threat.indicator.registry.data.bytes'?: string | undefined; 'threat.indicator.registry.data.strings'?: string[] | undefined; 'threat.indicator.registry.data.type'?: string | undefined; 'threat.indicator.registry.hive'?: string | undefined; 'threat.indicator.registry.key'?: string | undefined; 'threat.indicator.registry.path'?: string | undefined; 'threat.indicator.registry.value'?: string | undefined; 'threat.indicator.scanner_stats'?: string | number | undefined; 'threat.indicator.sightings'?: string | number | undefined; 'threat.indicator.type'?: string | undefined; 'threat.indicator.url.domain'?: string | undefined; 'threat.indicator.url.extension'?: string | undefined; 'threat.indicator.url.fragment'?: string | undefined; 'threat.indicator.url.full'?: string | undefined; 'threat.indicator.url.original'?: string | undefined; 'threat.indicator.url.password'?: string | undefined; 'threat.indicator.url.path'?: string | undefined; 'threat.indicator.url.port'?: string | number | undefined; 'threat.indicator.url.query'?: string | undefined; 'threat.indicator.url.registered_domain'?: string | undefined; 'threat.indicator.url.scheme'?: string | undefined; 'threat.indicator.url.subdomain'?: string | undefined; 'threat.indicator.url.top_level_domain'?: string | undefined; 'threat.indicator.url.username'?: string | undefined; 'threat.indicator.x509.alternative_names'?: string[] | undefined; 'threat.indicator.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.x509.issuer.country'?: string[] | undefined; 'threat.indicator.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.x509.not_after'?: string | number | undefined; 'threat.indicator.x509.not_before'?: string | number | undefined; 'threat.indicator.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.x509.public_key_curve'?: string | undefined; 'threat.indicator.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.x509.public_key_size'?: string | number | undefined; 'threat.indicator.x509.serial_number'?: string | undefined; 'threat.indicator.x509.signature_algorithm'?: string | undefined; 'threat.indicator.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.x509.subject.country'?: string[] | undefined; 'threat.indicator.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.x509.subject.locality'?: string[] | undefined; 'threat.indicator.x509.subject.organization'?: string[] | undefined; 'threat.indicator.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.x509.version_number'?: string | undefined; 'threat.software.alias'?: string[] | undefined; 'threat.software.id'?: string | undefined; 'threat.software.name'?: string | undefined; 'threat.software.platforms'?: string[] | undefined; 'threat.software.reference'?: string | undefined; 'threat.software.type'?: string | undefined; 'threat.tactic.id'?: string[] | undefined; 'threat.tactic.name'?: string[] | undefined; 'threat.tactic.reference'?: string[] | undefined; 'threat.technique.id'?: string[] | undefined; 'threat.technique.name'?: string[] | undefined; 'threat.technique.reference'?: string[] | undefined; 'threat.technique.subtechnique.id'?: string[] | undefined; 'threat.technique.subtechnique.name'?: string[] | undefined; 'threat.technique.subtechnique.reference'?: string[] | undefined; 'tls.cipher'?: string | undefined; 'tls.client.certificate'?: string | undefined; 'tls.client.certificate_chain'?: string[] | undefined; 'tls.client.hash.md5'?: string | undefined; 'tls.client.hash.sha1'?: string | undefined; 'tls.client.hash.sha256'?: string | undefined; 'tls.client.issuer'?: string | undefined; 'tls.client.ja3'?: string | undefined; 'tls.client.not_after'?: string | number | undefined; 'tls.client.not_before'?: string | number | undefined; 'tls.client.server_name'?: string | undefined; 'tls.client.subject'?: string | undefined; 'tls.client.supported_ciphers'?: string[] | undefined; 'tls.client.x509.alternative_names'?: string[] | undefined; 'tls.client.x509.issuer.common_name'?: string[] | undefined; 'tls.client.x509.issuer.country'?: string[] | undefined; 'tls.client.x509.issuer.distinguished_name'?: string | undefined; 'tls.client.x509.issuer.locality'?: string[] | undefined; 'tls.client.x509.issuer.organization'?: string[] | undefined; 'tls.client.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.client.x509.issuer.state_or_province'?: string[] | undefined; 'tls.client.x509.not_after'?: string | number | undefined; 'tls.client.x509.not_before'?: string | number | undefined; 'tls.client.x509.public_key_algorithm'?: string | undefined; 'tls.client.x509.public_key_curve'?: string | undefined; 'tls.client.x509.public_key_exponent'?: string | number | undefined; 'tls.client.x509.public_key_size'?: string | number | undefined; 'tls.client.x509.serial_number'?: string | undefined; 'tls.client.x509.signature_algorithm'?: string | undefined; 'tls.client.x509.subject.common_name'?: string[] | undefined; 'tls.client.x509.subject.country'?: string[] | undefined; 'tls.client.x509.subject.distinguished_name'?: string | undefined; 'tls.client.x509.subject.locality'?: string[] | undefined; 'tls.client.x509.subject.organization'?: string[] | undefined; 'tls.client.x509.subject.organizational_unit'?: string[] | undefined; 'tls.client.x509.subject.state_or_province'?: string[] | undefined; 'tls.client.x509.version_number'?: string | undefined; 'tls.curve'?: string | undefined; 'tls.established'?: boolean | undefined; 'tls.next_protocol'?: string | undefined; 'tls.resumed'?: boolean | undefined; 'tls.server.certificate'?: string | undefined; 'tls.server.certificate_chain'?: string[] | undefined; 'tls.server.hash.md5'?: string | undefined; 'tls.server.hash.sha1'?: string | undefined; 'tls.server.hash.sha256'?: string | undefined; 'tls.server.issuer'?: string | undefined; 'tls.server.ja3s'?: string | undefined; 'tls.server.not_after'?: string | number | undefined; 'tls.server.not_before'?: string | number | undefined; 'tls.server.subject'?: string | undefined; 'tls.server.x509.alternative_names'?: string[] | undefined; 'tls.server.x509.issuer.common_name'?: string[] | undefined; 'tls.server.x509.issuer.country'?: string[] | undefined; 'tls.server.x509.issuer.distinguished_name'?: string | undefined; 'tls.server.x509.issuer.locality'?: string[] | undefined; 'tls.server.x509.issuer.organization'?: string[] | undefined; 'tls.server.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.server.x509.issuer.state_or_province'?: string[] | undefined; 'tls.server.x509.not_after'?: string | number | undefined; 'tls.server.x509.not_before'?: string | number | undefined; 'tls.server.x509.public_key_algorithm'?: string | undefined; 'tls.server.x509.public_key_curve'?: string | undefined; 'tls.server.x509.public_key_exponent'?: string | number | undefined; 'tls.server.x509.public_key_size'?: string | number | undefined; 'tls.server.x509.serial_number'?: string | undefined; 'tls.server.x509.signature_algorithm'?: string | undefined; 'tls.server.x509.subject.common_name'?: string[] | undefined; 'tls.server.x509.subject.country'?: string[] | undefined; 'tls.server.x509.subject.distinguished_name'?: string | undefined; 'tls.server.x509.subject.locality'?: string[] | undefined; 'tls.server.x509.subject.organization'?: string[] | undefined; 'tls.server.x509.subject.organizational_unit'?: string[] | undefined; 'tls.server.x509.subject.state_or_province'?: string[] | undefined; 'tls.server.x509.version_number'?: string | undefined; 'tls.version'?: string | undefined; 'tls.version_protocol'?: string | undefined; 'trace.id'?: string | undefined; 'transaction.id'?: string | undefined; 'url.domain'?: string | undefined; 'url.extension'?: string | undefined; 'url.fragment'?: string | undefined; 'url.full'?: string | undefined; 'url.original'?: string | undefined; 'url.password'?: string | undefined; 'url.path'?: string | undefined; 'url.port'?: string | number | undefined; 'url.query'?: string | undefined; 'url.registered_domain'?: string | undefined; 'url.scheme'?: string | undefined; 'url.subdomain'?: string | undefined; 'url.top_level_domain'?: string | undefined; 'url.username'?: string | undefined; 'user.changes.domain'?: string | undefined; 'user.changes.email'?: string | undefined; 'user.changes.full_name'?: string | undefined; 'user.changes.group.domain'?: string | undefined; 'user.changes.group.id'?: string | undefined; 'user.changes.group.name'?: string | undefined; 'user.changes.hash'?: string | undefined; 'user.changes.id'?: string | undefined; 'user.changes.name'?: string | undefined; 'user.changes.roles'?: string[] | undefined; 'user.domain'?: string | undefined; 'user.effective.domain'?: string | undefined; 'user.effective.email'?: string | undefined; 'user.effective.full_name'?: string | undefined; 'user.effective.group.domain'?: string | undefined; 'user.effective.group.id'?: string | undefined; 'user.effective.group.name'?: string | undefined; 'user.effective.hash'?: string | undefined; 'user.effective.id'?: string | undefined; 'user.effective.name'?: string | undefined; 'user.effective.roles'?: string[] | undefined; 'user.email'?: string | undefined; 'user.full_name'?: string | undefined; 'user.group.domain'?: string | undefined; 'user.group.id'?: string | undefined; 'user.group.name'?: string | undefined; 'user.hash'?: string | undefined; 'user.id'?: string | undefined; 'user.name'?: string | undefined; 'user.risk.calculated_level'?: string | undefined; 'user.risk.calculated_score'?: number | undefined; 'user.risk.calculated_score_norm'?: number | undefined; 'user.risk.static_level'?: string | undefined; 'user.risk.static_score'?: number | undefined; 'user.risk.static_score_norm'?: number | undefined; 'user.roles'?: string[] | undefined; 'user.target.domain'?: string | undefined; 'user.target.email'?: string | undefined; 'user.target.full_name'?: string | undefined; 'user.target.group.domain'?: string | undefined; 'user.target.group.id'?: string | undefined; 'user.target.group.name'?: string | undefined; 'user.target.hash'?: string | undefined; 'user.target.id'?: string | undefined; 'user.target.name'?: string | undefined; 'user.target.roles'?: string[] | undefined; 'user_agent.device.name'?: string | undefined; 'user_agent.name'?: string | undefined; 'user_agent.original'?: string | undefined; 'user_agent.os.family'?: string | undefined; 'user_agent.os.full'?: string | undefined; 'user_agent.os.kernel'?: string | undefined; 'user_agent.os.name'?: string | undefined; 'user_agent.os.platform'?: string | undefined; 'user_agent.os.type'?: string | undefined; 'user_agent.os.version'?: string | undefined; 'user_agent.version'?: string | undefined; 'vulnerability.category'?: string[] | undefined; 'vulnerability.classification'?: string | undefined; 'vulnerability.description'?: string | undefined; 'vulnerability.enumeration'?: string | undefined; 'vulnerability.id'?: string | undefined; 'vulnerability.reference'?: string | undefined; 'vulnerability.report_id'?: string | undefined; 'vulnerability.scanner.vendor'?: string | undefined; 'vulnerability.score.base'?: number | undefined; 'vulnerability.score.environmental'?: number | undefined; 'vulnerability.score.temporal'?: number | undefined; 'vulnerability.score.version'?: string | undefined; 'vulnerability.severity'?: string | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }) | ({} & { 'kibana.alert.context'?: unknown; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | number | undefined; 'kibana.alert.evaluation.values'?: (string | number)[] | undefined; 'kibana.alert.group'?: { field?: string[] | undefined; value?: string[] | undefined; }[] | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & { '@timestamp': string | number; 'ecs.version': string; } & { 'agent.build.original'?: string | undefined; 'agent.ephemeral_id'?: string | undefined; 'agent.id'?: string | undefined; 'agent.name'?: string | undefined; 'agent.type'?: string | undefined; 'agent.version'?: string | undefined; 'client.address'?: string | undefined; 'client.as.number'?: string | number | undefined; 'client.as.organization.name'?: string | undefined; 'client.bytes'?: string | number | undefined; 'client.domain'?: string | undefined; 'client.geo.city_name'?: string | undefined; 'client.geo.continent_code'?: string | undefined; 'client.geo.continent_name'?: string | undefined; 'client.geo.country_iso_code'?: string | undefined; 'client.geo.country_name'?: string | undefined; 'client.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'client.geo.name'?: string | undefined; 'client.geo.postal_code'?: string | undefined; 'client.geo.region_iso_code'?: string | undefined; 'client.geo.region_name'?: string | undefined; 'client.geo.timezone'?: string | undefined; 'client.ip'?: string | undefined; 'client.mac'?: string | undefined; 'client.nat.ip'?: string | undefined; 'client.nat.port'?: string | number | undefined; 'client.packets'?: string | number | undefined; 'client.port'?: string | number | undefined; 'client.registered_domain'?: string | undefined; 'client.subdomain'?: string | undefined; 'client.top_level_domain'?: string | undefined; 'client.user.domain'?: string | undefined; 'client.user.email'?: string | undefined; 'client.user.full_name'?: string | undefined; 'client.user.group.domain'?: string | undefined; 'client.user.group.id'?: string | undefined; 'client.user.group.name'?: string | undefined; 'client.user.hash'?: string | undefined; 'client.user.id'?: string | undefined; 'client.user.name'?: string | undefined; 'client.user.roles'?: string[] | undefined; 'cloud.account.id'?: string | undefined; 'cloud.account.name'?: string | undefined; 'cloud.availability_zone'?: string | undefined; 'cloud.instance.id'?: string | undefined; 'cloud.instance.name'?: string | undefined; 'cloud.machine.type'?: string | undefined; 'cloud.origin.account.id'?: string | undefined; 'cloud.origin.account.name'?: string | undefined; 'cloud.origin.availability_zone'?: string | undefined; 'cloud.origin.instance.id'?: string | undefined; 'cloud.origin.instance.name'?: string | undefined; 'cloud.origin.machine.type'?: string | undefined; 'cloud.origin.project.id'?: string | undefined; 'cloud.origin.project.name'?: string | undefined; 'cloud.origin.provider'?: string | undefined; 'cloud.origin.region'?: string | undefined; 'cloud.origin.service.name'?: string | undefined; 'cloud.project.id'?: string | undefined; 'cloud.project.name'?: string | undefined; 'cloud.provider'?: string | undefined; 'cloud.region'?: string | undefined; 'cloud.service.name'?: string | undefined; 'cloud.target.account.id'?: string | undefined; 'cloud.target.account.name'?: string | undefined; 'cloud.target.availability_zone'?: string | undefined; 'cloud.target.instance.id'?: string | undefined; 'cloud.target.instance.name'?: string | undefined; 'cloud.target.machine.type'?: string | undefined; 'cloud.target.project.id'?: string | undefined; 'cloud.target.project.name'?: string | undefined; 'cloud.target.provider'?: string | undefined; 'cloud.target.region'?: string | undefined; 'cloud.target.service.name'?: string | undefined; 'container.cpu.usage'?: string | number | undefined; 'container.disk.read.bytes'?: string | number | undefined; 'container.disk.write.bytes'?: string | number | undefined; 'container.id'?: string | undefined; 'container.image.hash.all'?: string[] | undefined; 'container.image.name'?: string | undefined; 'container.image.tag'?: string[] | undefined; 'container.labels'?: unknown; 'container.memory.usage'?: string | number | undefined; 'container.name'?: string | undefined; 'container.network.egress.bytes'?: string | number | undefined; 'container.network.ingress.bytes'?: string | number | undefined; 'container.runtime'?: string | undefined; 'container.security_context.privileged'?: boolean | undefined; 'destination.address'?: string | undefined; 'destination.as.number'?: string | number | undefined; 'destination.as.organization.name'?: string | undefined; 'destination.bytes'?: string | number | undefined; 'destination.domain'?: string | undefined; 'destination.geo.city_name'?: string | undefined; 'destination.geo.continent_code'?: string | undefined; 'destination.geo.continent_name'?: string | undefined; 'destination.geo.country_iso_code'?: string | undefined; 'destination.geo.country_name'?: string | undefined; 'destination.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'destination.geo.name'?: string | undefined; 'destination.geo.postal_code'?: string | undefined; 'destination.geo.region_iso_code'?: string | undefined; 'destination.geo.region_name'?: string | undefined; 'destination.geo.timezone'?: string | undefined; 'destination.ip'?: string | undefined; 'destination.mac'?: string | undefined; 'destination.nat.ip'?: string | undefined; 'destination.nat.port'?: string | number | undefined; 'destination.packets'?: string | number | undefined; 'destination.port'?: string | number | undefined; 'destination.registered_domain'?: string | undefined; 'destination.subdomain'?: string | undefined; 'destination.top_level_domain'?: string | undefined; 'destination.user.domain'?: string | undefined; 'destination.user.email'?: string | undefined; 'destination.user.full_name'?: string | undefined; 'destination.user.group.domain'?: string | undefined; 'destination.user.group.id'?: string | undefined; 'destination.user.group.name'?: string | undefined; 'destination.user.hash'?: string | undefined; 'destination.user.id'?: string | undefined; 'destination.user.name'?: string | undefined; 'destination.user.roles'?: string[] | undefined; 'device.id'?: string | undefined; 'device.manufacturer'?: string | undefined; 'device.model.identifier'?: string | undefined; 'device.model.name'?: string | undefined; 'dll.code_signature.digest_algorithm'?: string | undefined; 'dll.code_signature.exists'?: boolean | undefined; 'dll.code_signature.signing_id'?: string | undefined; 'dll.code_signature.status'?: string | undefined; 'dll.code_signature.subject_name'?: string | undefined; 'dll.code_signature.team_id'?: string | undefined; 'dll.code_signature.timestamp'?: string | number | undefined; 'dll.code_signature.trusted'?: boolean | undefined; 'dll.code_signature.valid'?: boolean | undefined; 'dll.hash.md5'?: string | undefined; 'dll.hash.sha1'?: string | undefined; 'dll.hash.sha256'?: string | undefined; 'dll.hash.sha384'?: string | undefined; 'dll.hash.sha512'?: string | undefined; 'dll.hash.ssdeep'?: string | undefined; 'dll.hash.tlsh'?: string | undefined; 'dll.name'?: string | undefined; 'dll.path'?: string | undefined; 'dll.pe.architecture'?: string | undefined; 'dll.pe.company'?: string | undefined; 'dll.pe.description'?: string | undefined; 'dll.pe.file_version'?: string | undefined; 'dll.pe.go_import_hash'?: string | undefined; 'dll.pe.go_imports'?: unknown; 'dll.pe.go_imports_names_entropy'?: string | number | undefined; 'dll.pe.go_imports_names_var_entropy'?: string | number | undefined; 'dll.pe.go_stripped'?: boolean | undefined; 'dll.pe.imphash'?: string | undefined; 'dll.pe.import_hash'?: string | undefined; 'dll.pe.imports'?: unknown[] | undefined; 'dll.pe.imports_names_entropy'?: string | number | undefined; 'dll.pe.imports_names_var_entropy'?: string | number | undefined; 'dll.pe.original_file_name'?: string | undefined; 'dll.pe.pehash'?: string | undefined; 'dll.pe.product'?: string | undefined; 'dll.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'dns.answers'?: { class?: string | undefined; data?: string | undefined; name?: string | undefined; ttl?: string | number | undefined; type?: string | undefined; }[] | undefined; 'dns.header_flags'?: string[] | undefined; 'dns.id'?: string | undefined; 'dns.op_code'?: string | undefined; 'dns.question.class'?: string | undefined; 'dns.question.name'?: string | undefined; 'dns.question.registered_domain'?: string | undefined; 'dns.question.subdomain'?: string | undefined; 'dns.question.top_level_domain'?: string | undefined; 'dns.question.type'?: string | undefined; 'dns.resolved_ip'?: string[] | undefined; 'dns.response_code'?: string | undefined; 'dns.type'?: string | undefined; 'email.attachments'?: { 'file.extension'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.name'?: string | undefined; 'file.size'?: string | number | undefined; }[] | undefined; 'email.bcc.address'?: string[] | undefined; 'email.cc.address'?: string[] | undefined; 'email.content_type'?: string | undefined; 'email.delivery_timestamp'?: string | number | undefined; 'email.direction'?: string | undefined; 'email.from.address'?: string[] | undefined; 'email.local_id'?: string | undefined; 'email.message_id'?: string | undefined; 'email.origination_timestamp'?: string | number | undefined; 'email.reply_to.address'?: string[] | undefined; 'email.sender.address'?: string | undefined; 'email.subject'?: string | undefined; 'email.to.address'?: string[] | undefined; 'email.x_mailer'?: string | undefined; 'error.code'?: string | undefined; 'error.id'?: string | undefined; 'error.message'?: string | undefined; 'error.stack_trace'?: string | undefined; 'error.type'?: string | undefined; 'event.action'?: string | undefined; 'event.agent_id_status'?: string | undefined; 'event.category'?: string[] | undefined; 'event.code'?: string | undefined; 'event.created'?: string | number | undefined; 'event.dataset'?: string | undefined; 'event.duration'?: string | number | undefined; 'event.end'?: string | number | undefined; 'event.hash'?: string | undefined; 'event.id'?: string | undefined; 'event.ingested'?: string | number | undefined; 'event.kind'?: string | undefined; 'event.module'?: string | undefined; 'event.original'?: string | undefined; 'event.outcome'?: string | undefined; 'event.provider'?: string | undefined; 'event.reason'?: string | undefined; 'event.reference'?: string | undefined; 'event.risk_score'?: number | undefined; 'event.risk_score_norm'?: number | undefined; 'event.sequence'?: string | number | undefined; 'event.severity'?: string | number | undefined; 'event.start'?: string | number | undefined; 'event.timezone'?: string | undefined; 'event.type'?: string[] | undefined; 'event.url'?: string | undefined; 'faas.coldstart'?: boolean | undefined; 'faas.execution'?: string | undefined; 'faas.id'?: string | undefined; 'faas.name'?: string | undefined; 'faas.version'?: string | undefined; 'file.accessed'?: string | number | undefined; 'file.attributes'?: string[] | undefined; 'file.code_signature.digest_algorithm'?: string | undefined; 'file.code_signature.exists'?: boolean | undefined; 'file.code_signature.signing_id'?: string | undefined; 'file.code_signature.status'?: string | undefined; 'file.code_signature.subject_name'?: string | undefined; 'file.code_signature.team_id'?: string | undefined; 'file.code_signature.timestamp'?: string | number | undefined; 'file.code_signature.trusted'?: boolean | undefined; 'file.code_signature.valid'?: boolean | undefined; 'file.created'?: string | number | undefined; 'file.ctime'?: string | number | undefined; 'file.device'?: string | undefined; 'file.directory'?: string | undefined; 'file.drive_letter'?: string | undefined; 'file.elf.architecture'?: string | undefined; 'file.elf.byte_order'?: string | undefined; 'file.elf.cpu_type'?: string | undefined; 'file.elf.creation_date'?: string | number | undefined; 'file.elf.exports'?: unknown[] | undefined; 'file.elf.go_import_hash'?: string | undefined; 'file.elf.go_imports'?: unknown; 'file.elf.go_imports_names_entropy'?: string | number | undefined; 'file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'file.elf.go_stripped'?: boolean | undefined; 'file.elf.header.abi_version'?: string | undefined; 'file.elf.header.class'?: string | undefined; 'file.elf.header.data'?: string | undefined; 'file.elf.header.entrypoint'?: string | number | undefined; 'file.elf.header.object_version'?: string | undefined; 'file.elf.header.os_abi'?: string | undefined; 'file.elf.header.type'?: string | undefined; 'file.elf.header.version'?: string | undefined; 'file.elf.import_hash'?: string | undefined; 'file.elf.imports'?: unknown[] | undefined; 'file.elf.imports_names_entropy'?: string | number | undefined; 'file.elf.imports_names_var_entropy'?: string | number | undefined; 'file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'file.elf.shared_libraries'?: string[] | undefined; 'file.elf.telfhash'?: string | undefined; 'file.extension'?: string | undefined; 'file.fork_name'?: string | undefined; 'file.gid'?: string | undefined; 'file.group'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.inode'?: string | undefined; 'file.macho.go_import_hash'?: string | undefined; 'file.macho.go_imports'?: unknown; 'file.macho.go_imports_names_entropy'?: string | number | undefined; 'file.macho.go_imports_names_var_entropy'?: string | number | undefined; 'file.macho.go_stripped'?: boolean | undefined; 'file.macho.import_hash'?: string | undefined; 'file.macho.imports'?: unknown[] | undefined; 'file.macho.imports_names_entropy'?: string | number | undefined; 'file.macho.imports_names_var_entropy'?: string | number | undefined; 'file.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.macho.symhash'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.mode'?: string | undefined; 'file.mtime'?: string | number | undefined; 'file.name'?: string | undefined; 'file.owner'?: string | undefined; 'file.path'?: string | undefined; 'file.pe.architecture'?: string | undefined; 'file.pe.company'?: string | undefined; 'file.pe.description'?: string | undefined; 'file.pe.file_version'?: string | undefined; 'file.pe.go_import_hash'?: string | undefined; 'file.pe.go_imports'?: unknown; 'file.pe.go_imports_names_entropy'?: string | number | undefined; 'file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'file.pe.go_stripped'?: boolean | undefined; 'file.pe.imphash'?: string | undefined; 'file.pe.import_hash'?: string | undefined; 'file.pe.imports'?: unknown[] | undefined; 'file.pe.imports_names_entropy'?: string | number | undefined; 'file.pe.imports_names_var_entropy'?: string | number | undefined; 'file.pe.original_file_name'?: string | undefined; 'file.pe.pehash'?: string | undefined; 'file.pe.product'?: string | undefined; 'file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.size'?: string | number | undefined; 'file.target_path'?: string | undefined; 'file.type'?: string | undefined; 'file.uid'?: string | undefined; 'file.x509.alternative_names'?: string[] | undefined; 'file.x509.issuer.common_name'?: string[] | undefined; 'file.x509.issuer.country'?: string[] | undefined; 'file.x509.issuer.distinguished_name'?: string | undefined; 'file.x509.issuer.locality'?: string[] | undefined; 'file.x509.issuer.organization'?: string[] | undefined; 'file.x509.issuer.organizational_unit'?: string[] | undefined; 'file.x509.issuer.state_or_province'?: string[] | undefined; 'file.x509.not_after'?: string | number | undefined; 'file.x509.not_before'?: string | number | undefined; 'file.x509.public_key_algorithm'?: string | undefined; 'file.x509.public_key_curve'?: string | undefined; 'file.x509.public_key_exponent'?: string | number | undefined; 'file.x509.public_key_size'?: string | number | undefined; 'file.x509.serial_number'?: string | undefined; 'file.x509.signature_algorithm'?: string | undefined; 'file.x509.subject.common_name'?: string[] | undefined; 'file.x509.subject.country'?: string[] | undefined; 'file.x509.subject.distinguished_name'?: string | undefined; 'file.x509.subject.locality'?: string[] | undefined; 'file.x509.subject.organization'?: string[] | undefined; 'file.x509.subject.organizational_unit'?: string[] | undefined; 'file.x509.subject.state_or_province'?: string[] | undefined; 'file.x509.version_number'?: string | undefined; 'group.domain'?: string | undefined; 'group.id'?: string | undefined; 'group.name'?: string | undefined; 'host.architecture'?: string | undefined; 'host.boot.id'?: string | undefined; 'host.cpu.usage'?: string | number | undefined; 'host.disk.read.bytes'?: string | number | undefined; 'host.disk.write.bytes'?: string | number | undefined; 'host.domain'?: string | undefined; 'host.geo.city_name'?: string | undefined; 'host.geo.continent_code'?: string | undefined; 'host.geo.continent_name'?: string | undefined; 'host.geo.country_iso_code'?: string | undefined; 'host.geo.country_name'?: string | undefined; 'host.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'host.geo.name'?: string | undefined; 'host.geo.postal_code'?: string | undefined; 'host.geo.region_iso_code'?: string | undefined; 'host.geo.region_name'?: string | undefined; 'host.geo.timezone'?: string | undefined; 'host.hostname'?: string | undefined; 'host.id'?: string | undefined; 'host.ip'?: string[] | undefined; 'host.mac'?: string[] | undefined; 'host.name'?: string | undefined; 'host.network.egress.bytes'?: string | number | undefined; 'host.network.egress.packets'?: string | number | undefined; 'host.network.ingress.bytes'?: string | number | undefined; 'host.network.ingress.packets'?: string | number | undefined; 'host.os.family'?: string | undefined; 'host.os.full'?: string | undefined; 'host.os.kernel'?: string | undefined; 'host.os.name'?: string | undefined; 'host.os.platform'?: string | undefined; 'host.os.type'?: string | undefined; 'host.os.version'?: string | undefined; 'host.pid_ns_ino'?: string | undefined; 'host.risk.calculated_level'?: string | undefined; 'host.risk.calculated_score'?: number | undefined; 'host.risk.calculated_score_norm'?: number | undefined; 'host.risk.static_level'?: string | undefined; 'host.risk.static_score'?: number | undefined; 'host.risk.static_score_norm'?: number | undefined; 'host.type'?: string | undefined; 'host.uptime'?: string | number | undefined; 'http.request.body.bytes'?: string | number | undefined; 'http.request.body.content'?: string | undefined; 'http.request.bytes'?: string | number | undefined; 'http.request.id'?: string | undefined; 'http.request.method'?: string | undefined; 'http.request.mime_type'?: string | undefined; 'http.request.referrer'?: string | undefined; 'http.response.body.bytes'?: string | number | undefined; 'http.response.body.content'?: string | undefined; 'http.response.bytes'?: string | number | undefined; 'http.response.mime_type'?: string | undefined; 'http.response.status_code'?: string | number | undefined; 'http.version'?: string | undefined; labels?: unknown; 'log.file.path'?: string | undefined; 'log.level'?: string | undefined; 'log.logger'?: string | undefined; 'log.origin.file.line'?: string | number | undefined; 'log.origin.file.name'?: string | undefined; 'log.origin.function'?: string | undefined; 'log.syslog'?: unknown; message?: string | undefined; 'network.application'?: string | undefined; 'network.bytes'?: string | number | undefined; 'network.community_id'?: string | undefined; 'network.direction'?: string | undefined; 'network.forwarded_ip'?: string | undefined; 'network.iana_number'?: string | undefined; 'network.inner'?: unknown; 'network.name'?: string | undefined; 'network.packets'?: string | number | undefined; 'network.protocol'?: string | undefined; 'network.transport'?: string | undefined; 'network.type'?: string | undefined; 'network.vlan.id'?: string | undefined; 'network.vlan.name'?: string | undefined; 'observer.egress'?: unknown; 'observer.geo.city_name'?: string | undefined; 'observer.geo.continent_code'?: string | undefined; 'observer.geo.continent_name'?: string | undefined; 'observer.geo.country_iso_code'?: string | undefined; 'observer.geo.country_name'?: string | undefined; 'observer.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'observer.geo.name'?: string | undefined; 'observer.geo.postal_code'?: string | undefined; 'observer.geo.region_iso_code'?: string | undefined; 'observer.geo.region_name'?: string | undefined; 'observer.geo.timezone'?: string | undefined; 'observer.hostname'?: string | undefined; 'observer.ingress'?: unknown; 'observer.ip'?: string[] | undefined; 'observer.mac'?: string[] | undefined; 'observer.name'?: string | undefined; 'observer.os.family'?: string | undefined; 'observer.os.full'?: string | undefined; 'observer.os.kernel'?: string | undefined; 'observer.os.name'?: string | undefined; 'observer.os.platform'?: string | undefined; 'observer.os.type'?: string | undefined; 'observer.os.version'?: string | undefined; 'observer.product'?: string | undefined; 'observer.serial_number'?: string | undefined; 'observer.type'?: string | undefined; 'observer.vendor'?: string | undefined; 'observer.version'?: string | undefined; 'orchestrator.api_version'?: string | undefined; 'orchestrator.cluster.id'?: string | undefined; 'orchestrator.cluster.name'?: string | undefined; 'orchestrator.cluster.url'?: string | undefined; 'orchestrator.cluster.version'?: string | undefined; 'orchestrator.namespace'?: string | undefined; 'orchestrator.organization'?: string | undefined; 'orchestrator.resource.annotation'?: string[] | undefined; 'orchestrator.resource.id'?: string | undefined; 'orchestrator.resource.ip'?: string[] | undefined; 'orchestrator.resource.label'?: string[] | undefined; 'orchestrator.resource.name'?: string | undefined; 'orchestrator.resource.parent.type'?: string | undefined; 'orchestrator.resource.type'?: string | undefined; 'orchestrator.type'?: string | undefined; 'organization.id'?: string | undefined; 'organization.name'?: string | undefined; 'package.architecture'?: string | undefined; 'package.build_version'?: string | undefined; 'package.checksum'?: string | undefined; 'package.description'?: string | undefined; 'package.install_scope'?: string | undefined; 'package.installed'?: string | number | undefined; 'package.license'?: string | undefined; 'package.name'?: string | undefined; 'package.path'?: string | undefined; 'package.reference'?: string | undefined; 'package.size'?: string | number | undefined; 'package.type'?: string | undefined; 'package.version'?: string | undefined; 'process.args'?: string[] | undefined; 'process.args_count'?: string | number | undefined; 'process.code_signature.digest_algorithm'?: string | undefined; 'process.code_signature.exists'?: boolean | undefined; 'process.code_signature.signing_id'?: string | undefined; 'process.code_signature.status'?: string | undefined; 'process.code_signature.subject_name'?: string | undefined; 'process.code_signature.team_id'?: string | undefined; 'process.code_signature.timestamp'?: string | number | undefined; 'process.code_signature.trusted'?: boolean | undefined; 'process.code_signature.valid'?: boolean | undefined; 'process.command_line'?: string | undefined; 'process.elf.architecture'?: string | undefined; 'process.elf.byte_order'?: string | undefined; 'process.elf.cpu_type'?: string | undefined; 'process.elf.creation_date'?: string | number | undefined; 'process.elf.exports'?: unknown[] | undefined; 'process.elf.go_import_hash'?: string | undefined; 'process.elf.go_imports'?: unknown; 'process.elf.go_imports_names_entropy'?: string | number | undefined; 'process.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.elf.go_stripped'?: boolean | undefined; 'process.elf.header.abi_version'?: string | undefined; 'process.elf.header.class'?: string | undefined; 'process.elf.header.data'?: string | undefined; 'process.elf.header.entrypoint'?: string | number | undefined; 'process.elf.header.object_version'?: string | undefined; 'process.elf.header.os_abi'?: string | undefined; 'process.elf.header.type'?: string | undefined; 'process.elf.header.version'?: string | undefined; 'process.elf.import_hash'?: string | undefined; 'process.elf.imports'?: unknown[] | undefined; 'process.elf.imports_names_entropy'?: string | number | undefined; 'process.elf.imports_names_var_entropy'?: string | number | undefined; 'process.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.elf.shared_libraries'?: string[] | undefined; 'process.elf.telfhash'?: string | undefined; 'process.end'?: string | number | undefined; 'process.entity_id'?: string | undefined; 'process.entry_leader.args'?: string[] | undefined; 'process.entry_leader.args_count'?: string | number | undefined; 'process.entry_leader.attested_groups.name'?: string | undefined; 'process.entry_leader.attested_user.id'?: string | undefined; 'process.entry_leader.attested_user.name'?: string | undefined; 'process.entry_leader.command_line'?: string | undefined; 'process.entry_leader.entity_id'?: string | undefined; 'process.entry_leader.entry_meta.source.ip'?: string | undefined; 'process.entry_leader.entry_meta.type'?: string | undefined; 'process.entry_leader.executable'?: string | undefined; 'process.entry_leader.group.id'?: string | undefined; 'process.entry_leader.group.name'?: string | undefined; 'process.entry_leader.interactive'?: boolean | undefined; 'process.entry_leader.name'?: string | undefined; 'process.entry_leader.parent.entity_id'?: string | undefined; 'process.entry_leader.parent.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.entity_id'?: string | undefined; 'process.entry_leader.parent.session_leader.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.start'?: string | number | undefined; 'process.entry_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.entry_leader.parent.start'?: string | number | undefined; 'process.entry_leader.parent.vpid'?: string | number | undefined; 'process.entry_leader.pid'?: string | number | undefined; 'process.entry_leader.real_group.id'?: string | undefined; 'process.entry_leader.real_group.name'?: string | undefined; 'process.entry_leader.real_user.id'?: string | undefined; 'process.entry_leader.real_user.name'?: string | undefined; 'process.entry_leader.same_as_process'?: boolean | undefined; 'process.entry_leader.saved_group.id'?: string | undefined; 'process.entry_leader.saved_group.name'?: string | undefined; 'process.entry_leader.saved_user.id'?: string | undefined; 'process.entry_leader.saved_user.name'?: string | undefined; 'process.entry_leader.start'?: string | number | undefined; 'process.entry_leader.supplemental_groups.id'?: string | undefined; 'process.entry_leader.supplemental_groups.name'?: string | undefined; 'process.entry_leader.tty'?: unknown; 'process.entry_leader.user.id'?: string | undefined; 'process.entry_leader.user.name'?: string | undefined; 'process.entry_leader.vpid'?: string | number | undefined; 'process.entry_leader.working_directory'?: string | undefined; 'process.env_vars'?: string[] | undefined; 'process.executable'?: string | undefined; 'process.exit_code'?: string | number | undefined; 'process.group_leader.args'?: string[] | undefined; 'process.group_leader.args_count'?: string | number | undefined; 'process.group_leader.command_line'?: string | undefined; 'process.group_leader.entity_id'?: string | undefined; 'process.group_leader.executable'?: string | undefined; 'process.group_leader.group.id'?: string | undefined; 'process.group_leader.group.name'?: string | undefined; 'process.group_leader.interactive'?: boolean | undefined; 'process.group_leader.name'?: string | undefined; 'process.group_leader.pid'?: string | number | undefined; 'process.group_leader.real_group.id'?: string | undefined; 'process.group_leader.real_group.name'?: string | undefined; 'process.group_leader.real_user.id'?: string | undefined; 'process.group_leader.real_user.name'?: string | undefined; 'process.group_leader.same_as_process'?: boolean | undefined; 'process.group_leader.saved_group.id'?: string | undefined; 'process.group_leader.saved_group.name'?: string | undefined; 'process.group_leader.saved_user.id'?: string | undefined; 'process.group_leader.saved_user.name'?: string | undefined; 'process.group_leader.start'?: string | number | undefined; 'process.group_leader.supplemental_groups.id'?: string | undefined; 'process.group_leader.supplemental_groups.name'?: string | undefined; 'process.group_leader.tty'?: unknown; 'process.group_leader.user.id'?: string | undefined; 'process.group_leader.user.name'?: string | undefined; 'process.group_leader.vpid'?: string | number | undefined; 'process.group_leader.working_directory'?: string | undefined; 'process.hash.md5'?: string | undefined; 'process.hash.sha1'?: string | undefined; 'process.hash.sha256'?: string | undefined; 'process.hash.sha384'?: string | undefined; 'process.hash.sha512'?: string | undefined; 'process.hash.ssdeep'?: string | undefined; 'process.hash.tlsh'?: string | undefined; 'process.interactive'?: boolean | undefined; 'process.io'?: unknown; 'process.macho.go_import_hash'?: string | undefined; 'process.macho.go_imports'?: unknown; 'process.macho.go_imports_names_entropy'?: string | number | undefined; 'process.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.macho.go_stripped'?: boolean | undefined; 'process.macho.import_hash'?: string | undefined; 'process.macho.imports'?: unknown[] | undefined; 'process.macho.imports_names_entropy'?: string | number | undefined; 'process.macho.imports_names_var_entropy'?: string | number | undefined; 'process.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.macho.symhash'?: string | undefined; 'process.name'?: string | undefined; 'process.parent.args'?: string[] | undefined; 'process.parent.args_count'?: string | number | undefined; 'process.parent.code_signature.digest_algorithm'?: string | undefined; 'process.parent.code_signature.exists'?: boolean | undefined; 'process.parent.code_signature.signing_id'?: string | undefined; 'process.parent.code_signature.status'?: string | undefined; 'process.parent.code_signature.subject_name'?: string | undefined; 'process.parent.code_signature.team_id'?: string | undefined; 'process.parent.code_signature.timestamp'?: string | number | undefined; 'process.parent.code_signature.trusted'?: boolean | undefined; 'process.parent.code_signature.valid'?: boolean | undefined; 'process.parent.command_line'?: string | undefined; 'process.parent.elf.architecture'?: string | undefined; 'process.parent.elf.byte_order'?: string | undefined; 'process.parent.elf.cpu_type'?: string | undefined; 'process.parent.elf.creation_date'?: string | number | undefined; 'process.parent.elf.exports'?: unknown[] | undefined; 'process.parent.elf.go_import_hash'?: string | undefined; 'process.parent.elf.go_imports'?: unknown; 'process.parent.elf.go_imports_names_entropy'?: string | number | undefined; 'process.parent.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.go_stripped'?: boolean | undefined; 'process.parent.elf.header.abi_version'?: string | undefined; 'process.parent.elf.header.class'?: string | undefined; 'process.parent.elf.header.data'?: string | undefined; 'process.parent.elf.header.entrypoint'?: string | number | undefined; 'process.parent.elf.header.object_version'?: string | undefined; 'process.parent.elf.header.os_abi'?: string | undefined; 'process.parent.elf.header.type'?: string | undefined; 'process.parent.elf.header.version'?: string | undefined; 'process.parent.elf.import_hash'?: string | undefined; 'process.parent.elf.imports'?: unknown[] | undefined; 'process.parent.elf.imports_names_entropy'?: string | number | undefined; 'process.parent.elf.imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.parent.elf.shared_libraries'?: string[] | undefined; 'process.parent.elf.telfhash'?: string | undefined; 'process.parent.end'?: string | number | undefined; 'process.parent.entity_id'?: string | undefined; 'process.parent.executable'?: string | undefined; 'process.parent.exit_code'?: string | number | undefined; 'process.parent.group.id'?: string | undefined; 'process.parent.group.name'?: string | undefined; 'process.parent.group_leader.entity_id'?: string | undefined; 'process.parent.group_leader.pid'?: string | number | undefined; 'process.parent.group_leader.start'?: string | number | undefined; 'process.parent.group_leader.vpid'?: string | number | undefined; 'process.parent.hash.md5'?: string | undefined; 'process.parent.hash.sha1'?: string | undefined; 'process.parent.hash.sha256'?: string | undefined; 'process.parent.hash.sha384'?: string | undefined; 'process.parent.hash.sha512'?: string | undefined; 'process.parent.hash.ssdeep'?: string | undefined; 'process.parent.hash.tlsh'?: string | undefined; 'process.parent.interactive'?: boolean | undefined; 'process.parent.macho.go_import_hash'?: string | undefined; 'process.parent.macho.go_imports'?: unknown; 'process.parent.macho.go_imports_names_entropy'?: string | number | undefined; 'process.parent.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.go_stripped'?: boolean | undefined; 'process.parent.macho.import_hash'?: string | undefined; 'process.parent.macho.imports'?: unknown[] | undefined; 'process.parent.macho.imports_names_entropy'?: string | number | undefined; 'process.parent.macho.imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.macho.symhash'?: string | undefined; 'process.parent.name'?: string | undefined; 'process.parent.pe.architecture'?: string | undefined; 'process.parent.pe.company'?: string | undefined; 'process.parent.pe.description'?: string | undefined; 'process.parent.pe.file_version'?: string | undefined; 'process.parent.pe.go_import_hash'?: string | undefined; 'process.parent.pe.go_imports'?: unknown; 'process.parent.pe.go_imports_names_entropy'?: string | number | undefined; 'process.parent.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.go_stripped'?: boolean | undefined; 'process.parent.pe.imphash'?: string | undefined; 'process.parent.pe.import_hash'?: string | undefined; 'process.parent.pe.imports'?: unknown[] | undefined; 'process.parent.pe.imports_names_entropy'?: string | number | undefined; 'process.parent.pe.imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.original_file_name'?: string | undefined; 'process.parent.pe.pehash'?: string | undefined; 'process.parent.pe.product'?: string | undefined; 'process.parent.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.pgid'?: string | number | undefined; 'process.parent.pid'?: string | number | undefined; 'process.parent.real_group.id'?: string | undefined; 'process.parent.real_group.name'?: string | undefined; 'process.parent.real_user.id'?: string | undefined; 'process.parent.real_user.name'?: string | undefined; 'process.parent.saved_group.id'?: string | undefined; 'process.parent.saved_group.name'?: string | undefined; 'process.parent.saved_user.id'?: string | undefined; 'process.parent.saved_user.name'?: string | undefined; 'process.parent.start'?: string | number | undefined; 'process.parent.supplemental_groups.id'?: string | undefined; 'process.parent.supplemental_groups.name'?: string | undefined; 'process.parent.thread.capabilities.effective'?: string[] | undefined; 'process.parent.thread.capabilities.permitted'?: string[] | undefined; 'process.parent.thread.id'?: string | number | undefined; 'process.parent.thread.name'?: string | undefined; 'process.parent.title'?: string | undefined; 'process.parent.tty'?: unknown; 'process.parent.uptime'?: string | number | undefined; 'process.parent.user.id'?: string | undefined; 'process.parent.user.name'?: string | undefined; 'process.parent.vpid'?: string | number | undefined; 'process.parent.working_directory'?: string | undefined; 'process.pe.architecture'?: string | undefined; 'process.pe.company'?: string | undefined; 'process.pe.description'?: string | undefined; 'process.pe.file_version'?: string | undefined; 'process.pe.go_import_hash'?: string | undefined; 'process.pe.go_imports'?: unknown; 'process.pe.go_imports_names_entropy'?: string | number | undefined; 'process.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.pe.go_stripped'?: boolean | undefined; 'process.pe.imphash'?: string | undefined; 'process.pe.import_hash'?: string | undefined; 'process.pe.imports'?: unknown[] | undefined; 'process.pe.imports_names_entropy'?: string | number | undefined; 'process.pe.imports_names_var_entropy'?: string | number | undefined; 'process.pe.original_file_name'?: string | undefined; 'process.pe.pehash'?: string | undefined; 'process.pe.product'?: string | undefined; 'process.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.pgid'?: string | number | undefined; 'process.pid'?: string | number | undefined; 'process.previous.args'?: string[] | undefined; 'process.previous.args_count'?: string | number | undefined; 'process.previous.executable'?: string | undefined; 'process.real_group.id'?: string | undefined; 'process.real_group.name'?: string | undefined; 'process.real_user.id'?: string | undefined; 'process.real_user.name'?: string | undefined; 'process.saved_group.id'?: string | undefined; 'process.saved_group.name'?: string | undefined; 'process.saved_user.id'?: string | undefined; 'process.saved_user.name'?: string | undefined; 'process.session_leader.args'?: string[] | undefined; 'process.session_leader.args_count'?: string | number | undefined; 'process.session_leader.command_line'?: string | undefined; 'process.session_leader.entity_id'?: string | undefined; 'process.session_leader.executable'?: string | undefined; 'process.session_leader.group.id'?: string | undefined; 'process.session_leader.group.name'?: string | undefined; 'process.session_leader.interactive'?: boolean | undefined; 'process.session_leader.name'?: string | undefined; 'process.session_leader.parent.entity_id'?: string | undefined; 'process.session_leader.parent.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.entity_id'?: string | undefined; 'process.session_leader.parent.session_leader.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.start'?: string | number | undefined; 'process.session_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.session_leader.parent.start'?: string | number | undefined; 'process.session_leader.parent.vpid'?: string | number | undefined; 'process.session_leader.pid'?: string | number | undefined; 'process.session_leader.real_group.id'?: string | undefined; 'process.session_leader.real_group.name'?: string | undefined; 'process.session_leader.real_user.id'?: string | undefined; 'process.session_leader.real_user.name'?: string | undefined; 'process.session_leader.same_as_process'?: boolean | undefined; 'process.session_leader.saved_group.id'?: string | undefined; 'process.session_leader.saved_group.name'?: string | undefined; 'process.session_leader.saved_user.id'?: string | undefined; 'process.session_leader.saved_user.name'?: string | undefined; 'process.session_leader.start'?: string | number | undefined; 'process.session_leader.supplemental_groups.id'?: string | undefined; 'process.session_leader.supplemental_groups.name'?: string | undefined; 'process.session_leader.tty'?: unknown; 'process.session_leader.user.id'?: string | undefined; 'process.session_leader.user.name'?: string | undefined; 'process.session_leader.vpid'?: string | number | undefined; 'process.session_leader.working_directory'?: string | undefined; 'process.start'?: string | number | undefined; 'process.supplemental_groups.id'?: string | undefined; 'process.supplemental_groups.name'?: string | undefined; 'process.thread.capabilities.effective'?: string[] | undefined; 'process.thread.capabilities.permitted'?: string[] | undefined; 'process.thread.id'?: string | number | undefined; 'process.thread.name'?: string | undefined; 'process.title'?: string | undefined; 'process.tty'?: unknown; 'process.uptime'?: string | number | undefined; 'process.user.id'?: string | undefined; 'process.user.name'?: string | undefined; 'process.vpid'?: string | number | undefined; 'process.working_directory'?: string | undefined; 'registry.data.bytes'?: string | undefined; 'registry.data.strings'?: string[] | undefined; 'registry.data.type'?: string | undefined; 'registry.hive'?: string | undefined; 'registry.key'?: string | undefined; 'registry.path'?: string | undefined; 'registry.value'?: string | undefined; 'related.hash'?: string[] | undefined; 'related.hosts'?: string[] | undefined; 'related.ip'?: string[] | undefined; 'related.user'?: string[] | undefined; 'rule.author'?: string[] | undefined; 'rule.category'?: string | undefined; 'rule.description'?: string | undefined; 'rule.id'?: string | undefined; 'rule.license'?: string | undefined; 'rule.name'?: string | undefined; 'rule.reference'?: string | undefined; 'rule.ruleset'?: string | undefined; 'rule.uuid'?: string | undefined; 'rule.version'?: string | undefined; 'server.address'?: string | undefined; 'server.as.number'?: string | number | undefined; 'server.as.organization.name'?: string | undefined; 'server.bytes'?: string | number | undefined; 'server.domain'?: string | undefined; 'server.geo.city_name'?: string | undefined; 'server.geo.continent_code'?: string | undefined; 'server.geo.continent_name'?: string | undefined; 'server.geo.country_iso_code'?: string | undefined; 'server.geo.country_name'?: string | undefined; 'server.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'server.geo.name'?: string | undefined; 'server.geo.postal_code'?: string | undefined; 'server.geo.region_iso_code'?: string | undefined; 'server.geo.region_name'?: string | undefined; 'server.geo.timezone'?: string | undefined; 'server.ip'?: string | undefined; 'server.mac'?: string | undefined; 'server.nat.ip'?: string | undefined; 'server.nat.port'?: string | number | undefined; 'server.packets'?: string | number | undefined; 'server.port'?: string | number | undefined; 'server.registered_domain'?: string | undefined; 'server.subdomain'?: string | undefined; 'server.top_level_domain'?: string | undefined; 'server.user.domain'?: string | undefined; 'server.user.email'?: string | undefined; 'server.user.full_name'?: string | undefined; 'server.user.group.domain'?: string | undefined; 'server.user.group.id'?: string | undefined; 'server.user.group.name'?: string | undefined; 'server.user.hash'?: string | undefined; 'server.user.id'?: string | undefined; 'server.user.name'?: string | undefined; 'server.user.roles'?: string[] | undefined; 'service.address'?: string | undefined; 'service.environment'?: string | undefined; 'service.ephemeral_id'?: string | undefined; 'service.id'?: string | undefined; 'service.name'?: string | undefined; 'service.node.name'?: string | undefined; 'service.node.role'?: string | undefined; 'service.node.roles'?: string[] | undefined; 'service.origin.address'?: string | undefined; 'service.origin.environment'?: string | undefined; 'service.origin.ephemeral_id'?: string | undefined; 'service.origin.id'?: string | undefined; 'service.origin.name'?: string | undefined; 'service.origin.node.name'?: string | undefined; 'service.origin.node.role'?: string | undefined; 'service.origin.node.roles'?: string[] | undefined; 'service.origin.state'?: string | undefined; 'service.origin.type'?: string | undefined; 'service.origin.version'?: string | undefined; 'service.state'?: string | undefined; 'service.target.address'?: string | undefined; 'service.target.environment'?: string | undefined; 'service.target.ephemeral_id'?: string | undefined; 'service.target.id'?: string | undefined; 'service.target.name'?: string | undefined; 'service.target.node.name'?: string | undefined; 'service.target.node.role'?: string | undefined; 'service.target.node.roles'?: string[] | undefined; 'service.target.state'?: string | undefined; 'service.target.type'?: string | undefined; 'service.target.version'?: string | undefined; 'service.type'?: string | undefined; 'service.version'?: string | undefined; 'source.address'?: string | undefined; 'source.as.number'?: string | number | undefined; 'source.as.organization.name'?: string | undefined; 'source.bytes'?: string | number | undefined; 'source.domain'?: string | undefined; 'source.geo.city_name'?: string | undefined; 'source.geo.continent_code'?: string | undefined; 'source.geo.continent_name'?: string | undefined; 'source.geo.country_iso_code'?: string | undefined; 'source.geo.country_name'?: string | undefined; 'source.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'source.geo.name'?: string | undefined; 'source.geo.postal_code'?: string | undefined; 'source.geo.region_iso_code'?: string | undefined; 'source.geo.region_name'?: string | undefined; 'source.geo.timezone'?: string | undefined; 'source.ip'?: string | undefined; 'source.mac'?: string | undefined; 'source.nat.ip'?: string | undefined; 'source.nat.port'?: string | number | undefined; 'source.packets'?: string | number | undefined; 'source.port'?: string | number | undefined; 'source.registered_domain'?: string | undefined; 'source.subdomain'?: string | undefined; 'source.top_level_domain'?: string | undefined; 'source.user.domain'?: string | undefined; 'source.user.email'?: string | undefined; 'source.user.full_name'?: string | undefined; 'source.user.group.domain'?: string | undefined; 'source.user.group.id'?: string | undefined; 'source.user.group.name'?: string | undefined; 'source.user.hash'?: string | undefined; 'source.user.id'?: string | undefined; 'source.user.name'?: string | undefined; 'source.user.roles'?: string[] | undefined; 'span.id'?: string | undefined; tags?: string[] | undefined; 'threat.enrichments'?: { indicator?: unknown; 'matched.atomic'?: string | undefined; 'matched.field'?: string | undefined; 'matched.id'?: string | undefined; 'matched.index'?: string | undefined; 'matched.occurred'?: string | number | undefined; 'matched.type'?: string | undefined; }[] | undefined; 'threat.feed.dashboard_id'?: string | undefined; 'threat.feed.description'?: string | undefined; 'threat.feed.name'?: string | undefined; 'threat.feed.reference'?: string | undefined; 'threat.framework'?: string | undefined; 'threat.group.alias'?: string[] | undefined; 'threat.group.id'?: string | undefined; 'threat.group.name'?: string | undefined; 'threat.group.reference'?: string | undefined; 'threat.indicator.as.number'?: string | number | undefined; 'threat.indicator.as.organization.name'?: string | undefined; 'threat.indicator.confidence'?: string | undefined; 'threat.indicator.description'?: string | undefined; 'threat.indicator.email.address'?: string | undefined; 'threat.indicator.file.accessed'?: string | number | undefined; 'threat.indicator.file.attributes'?: string[] | undefined; 'threat.indicator.file.code_signature.digest_algorithm'?: string | undefined; 'threat.indicator.file.code_signature.exists'?: boolean | undefined; 'threat.indicator.file.code_signature.signing_id'?: string | undefined; 'threat.indicator.file.code_signature.status'?: string | undefined; 'threat.indicator.file.code_signature.subject_name'?: string | undefined; 'threat.indicator.file.code_signature.team_id'?: string | undefined; 'threat.indicator.file.code_signature.timestamp'?: string | number | undefined; 'threat.indicator.file.code_signature.trusted'?: boolean | undefined; 'threat.indicator.file.code_signature.valid'?: boolean | undefined; 'threat.indicator.file.created'?: string | number | undefined; 'threat.indicator.file.ctime'?: string | number | undefined; 'threat.indicator.file.device'?: string | undefined; 'threat.indicator.file.directory'?: string | undefined; 'threat.indicator.file.drive_letter'?: string | undefined; 'threat.indicator.file.elf.architecture'?: string | undefined; 'threat.indicator.file.elf.byte_order'?: string | undefined; 'threat.indicator.file.elf.cpu_type'?: string | undefined; 'threat.indicator.file.elf.creation_date'?: string | number | undefined; 'threat.indicator.file.elf.exports'?: unknown[] | undefined; 'threat.indicator.file.elf.go_import_hash'?: string | undefined; 'threat.indicator.file.elf.go_imports'?: unknown; 'threat.indicator.file.elf.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_stripped'?: boolean | undefined; 'threat.indicator.file.elf.header.abi_version'?: string | undefined; 'threat.indicator.file.elf.header.class'?: string | undefined; 'threat.indicator.file.elf.header.data'?: string | undefined; 'threat.indicator.file.elf.header.entrypoint'?: string | number | undefined; 'threat.indicator.file.elf.header.object_version'?: string | undefined; 'threat.indicator.file.elf.header.os_abi'?: string | undefined; 'threat.indicator.file.elf.header.type'?: string | undefined; 'threat.indicator.file.elf.header.version'?: string | undefined; 'threat.indicator.file.elf.import_hash'?: string | undefined; 'threat.indicator.file.elf.imports'?: unknown[] | undefined; 'threat.indicator.file.elf.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'threat.indicator.file.elf.shared_libraries'?: string[] | undefined; 'threat.indicator.file.elf.telfhash'?: string | undefined; 'threat.indicator.file.extension'?: string | undefined; 'threat.indicator.file.fork_name'?: string | undefined; 'threat.indicator.file.gid'?: string | undefined; 'threat.indicator.file.group'?: string | undefined; 'threat.indicator.file.hash.md5'?: string | undefined; 'threat.indicator.file.hash.sha1'?: string | undefined; 'threat.indicator.file.hash.sha256'?: string | undefined; 'threat.indicator.file.hash.sha384'?: string | undefined; 'threat.indicator.file.hash.sha512'?: string | undefined; 'threat.indicator.file.hash.ssdeep'?: string | undefined; 'threat.indicator.file.hash.tlsh'?: string | undefined; 'threat.indicator.file.inode'?: string | undefined; 'threat.indicator.file.mime_type'?: string | undefined; 'threat.indicator.file.mode'?: string | undefined; 'threat.indicator.file.mtime'?: string | number | undefined; 'threat.indicator.file.name'?: string | undefined; 'threat.indicator.file.owner'?: string | undefined; 'threat.indicator.file.path'?: string | undefined; 'threat.indicator.file.pe.architecture'?: string | undefined; 'threat.indicator.file.pe.company'?: string | undefined; 'threat.indicator.file.pe.description'?: string | undefined; 'threat.indicator.file.pe.file_version'?: string | undefined; 'threat.indicator.file.pe.go_import_hash'?: string | undefined; 'threat.indicator.file.pe.go_imports'?: unknown; 'threat.indicator.file.pe.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_stripped'?: boolean | undefined; 'threat.indicator.file.pe.imphash'?: string | undefined; 'threat.indicator.file.pe.import_hash'?: string | undefined; 'threat.indicator.file.pe.imports'?: unknown[] | undefined; 'threat.indicator.file.pe.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.original_file_name'?: string | undefined; 'threat.indicator.file.pe.pehash'?: string | undefined; 'threat.indicator.file.pe.product'?: string | undefined; 'threat.indicator.file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.size'?: string | number | undefined; 'threat.indicator.file.target_path'?: string | undefined; 'threat.indicator.file.type'?: string | undefined; 'threat.indicator.file.uid'?: string | undefined; 'threat.indicator.file.x509.alternative_names'?: string[] | undefined; 'threat.indicator.file.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.file.x509.issuer.country'?: string[] | undefined; 'threat.indicator.file.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.not_after'?: string | number | undefined; 'threat.indicator.file.x509.not_before'?: string | number | undefined; 'threat.indicator.file.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.file.x509.public_key_curve'?: string | undefined; 'threat.indicator.file.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.file.x509.public_key_size'?: string | number | undefined; 'threat.indicator.file.x509.serial_number'?: string | undefined; 'threat.indicator.file.x509.signature_algorithm'?: string | undefined; 'threat.indicator.file.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.file.x509.subject.country'?: string[] | undefined; 'threat.indicator.file.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.subject.locality'?: string[] | undefined; 'threat.indicator.file.x509.subject.organization'?: string[] | undefined; 'threat.indicator.file.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.version_number'?: string | undefined; 'threat.indicator.first_seen'?: string | number | undefined; 'threat.indicator.geo.city_name'?: string | undefined; 'threat.indicator.geo.continent_code'?: string | undefined; 'threat.indicator.geo.continent_name'?: string | undefined; 'threat.indicator.geo.country_iso_code'?: string | undefined; 'threat.indicator.geo.country_name'?: string | undefined; 'threat.indicator.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'threat.indicator.geo.name'?: string | undefined; 'threat.indicator.geo.postal_code'?: string | undefined; 'threat.indicator.geo.region_iso_code'?: string | undefined; 'threat.indicator.geo.region_name'?: string | undefined; 'threat.indicator.geo.timezone'?: string | undefined; 'threat.indicator.ip'?: string | undefined; 'threat.indicator.last_seen'?: string | number | undefined; 'threat.indicator.marking.tlp'?: string | undefined; 'threat.indicator.marking.tlp_version'?: string | undefined; 'threat.indicator.modified_at'?: string | number | undefined; 'threat.indicator.name'?: string | undefined; 'threat.indicator.port'?: string | number | undefined; 'threat.indicator.provider'?: string | undefined; 'threat.indicator.reference'?: string | undefined; 'threat.indicator.registry.data.bytes'?: string | undefined; 'threat.indicator.registry.data.strings'?: string[] | undefined; 'threat.indicator.registry.data.type'?: string | undefined; 'threat.indicator.registry.hive'?: string | undefined; 'threat.indicator.registry.key'?: string | undefined; 'threat.indicator.registry.path'?: string | undefined; 'threat.indicator.registry.value'?: string | undefined; 'threat.indicator.scanner_stats'?: string | number | undefined; 'threat.indicator.sightings'?: string | number | undefined; 'threat.indicator.type'?: string | undefined; 'threat.indicator.url.domain'?: string | undefined; 'threat.indicator.url.extension'?: string | undefined; 'threat.indicator.url.fragment'?: string | undefined; 'threat.indicator.url.full'?: string | undefined; 'threat.indicator.url.original'?: string | undefined; 'threat.indicator.url.password'?: string | undefined; 'threat.indicator.url.path'?: string | undefined; 'threat.indicator.url.port'?: string | number | undefined; 'threat.indicator.url.query'?: string | undefined; 'threat.indicator.url.registered_domain'?: string | undefined; 'threat.indicator.url.scheme'?: string | undefined; 'threat.indicator.url.subdomain'?: string | undefined; 'threat.indicator.url.top_level_domain'?: string | undefined; 'threat.indicator.url.username'?: string | undefined; 'threat.indicator.x509.alternative_names'?: string[] | undefined; 'threat.indicator.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.x509.issuer.country'?: string[] | undefined; 'threat.indicator.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.x509.not_after'?: string | number | undefined; 'threat.indicator.x509.not_before'?: string | number | undefined; 'threat.indicator.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.x509.public_key_curve'?: string | undefined; 'threat.indicator.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.x509.public_key_size'?: string | number | undefined; 'threat.indicator.x509.serial_number'?: string | undefined; 'threat.indicator.x509.signature_algorithm'?: string | undefined; 'threat.indicator.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.x509.subject.country'?: string[] | undefined; 'threat.indicator.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.x509.subject.locality'?: string[] | undefined; 'threat.indicator.x509.subject.organization'?: string[] | undefined; 'threat.indicator.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.x509.version_number'?: string | undefined; 'threat.software.alias'?: string[] | undefined; 'threat.software.id'?: string | undefined; 'threat.software.name'?: string | undefined; 'threat.software.platforms'?: string[] | undefined; 'threat.software.reference'?: string | undefined; 'threat.software.type'?: string | undefined; 'threat.tactic.id'?: string[] | undefined; 'threat.tactic.name'?: string[] | undefined; 'threat.tactic.reference'?: string[] | undefined; 'threat.technique.id'?: string[] | undefined; 'threat.technique.name'?: string[] | undefined; 'threat.technique.reference'?: string[] | undefined; 'threat.technique.subtechnique.id'?: string[] | undefined; 'threat.technique.subtechnique.name'?: string[] | undefined; 'threat.technique.subtechnique.reference'?: string[] | undefined; 'tls.cipher'?: string | undefined; 'tls.client.certificate'?: string | undefined; 'tls.client.certificate_chain'?: string[] | undefined; 'tls.client.hash.md5'?: string | undefined; 'tls.client.hash.sha1'?: string | undefined; 'tls.client.hash.sha256'?: string | undefined; 'tls.client.issuer'?: string | undefined; 'tls.client.ja3'?: string | undefined; 'tls.client.not_after'?: string | number | undefined; 'tls.client.not_before'?: string | number | undefined; 'tls.client.server_name'?: string | undefined; 'tls.client.subject'?: string | undefined; 'tls.client.supported_ciphers'?: string[] | undefined; 'tls.client.x509.alternative_names'?: string[] | undefined; 'tls.client.x509.issuer.common_name'?: string[] | undefined; 'tls.client.x509.issuer.country'?: string[] | undefined; 'tls.client.x509.issuer.distinguished_name'?: string | undefined; 'tls.client.x509.issuer.locality'?: string[] | undefined; 'tls.client.x509.issuer.organization'?: string[] | undefined; 'tls.client.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.client.x509.issuer.state_or_province'?: string[] | undefined; 'tls.client.x509.not_after'?: string | number | undefined; 'tls.client.x509.not_before'?: string | number | undefined; 'tls.client.x509.public_key_algorithm'?: string | undefined; 'tls.client.x509.public_key_curve'?: string | undefined; 'tls.client.x509.public_key_exponent'?: string | number | undefined; 'tls.client.x509.public_key_size'?: string | number | undefined; 'tls.client.x509.serial_number'?: string | undefined; 'tls.client.x509.signature_algorithm'?: string | undefined; 'tls.client.x509.subject.common_name'?: string[] | undefined; 'tls.client.x509.subject.country'?: string[] | undefined; 'tls.client.x509.subject.distinguished_name'?: string | undefined; 'tls.client.x509.subject.locality'?: string[] | undefined; 'tls.client.x509.subject.organization'?: string[] | undefined; 'tls.client.x509.subject.organizational_unit'?: string[] | undefined; 'tls.client.x509.subject.state_or_province'?: string[] | undefined; 'tls.client.x509.version_number'?: string | undefined; 'tls.curve'?: string | undefined; 'tls.established'?: boolean | undefined; 'tls.next_protocol'?: string | undefined; 'tls.resumed'?: boolean | undefined; 'tls.server.certificate'?: string | undefined; 'tls.server.certificate_chain'?: string[] | undefined; 'tls.server.hash.md5'?: string | undefined; 'tls.server.hash.sha1'?: string | undefined; 'tls.server.hash.sha256'?: string | undefined; 'tls.server.issuer'?: string | undefined; 'tls.server.ja3s'?: string | undefined; 'tls.server.not_after'?: string | number | undefined; 'tls.server.not_before'?: string | number | undefined; 'tls.server.subject'?: string | undefined; 'tls.server.x509.alternative_names'?: string[] | undefined; 'tls.server.x509.issuer.common_name'?: string[] | undefined; 'tls.server.x509.issuer.country'?: string[] | undefined; 'tls.server.x509.issuer.distinguished_name'?: string | undefined; 'tls.server.x509.issuer.locality'?: string[] | undefined; 'tls.server.x509.issuer.organization'?: string[] | undefined; 'tls.server.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.server.x509.issuer.state_or_province'?: string[] | undefined; 'tls.server.x509.not_after'?: string | number | undefined; 'tls.server.x509.not_before'?: string | number | undefined; 'tls.server.x509.public_key_algorithm'?: string | undefined; 'tls.server.x509.public_key_curve'?: string | undefined; 'tls.server.x509.public_key_exponent'?: string | number | undefined; 'tls.server.x509.public_key_size'?: string | number | undefined; 'tls.server.x509.serial_number'?: string | undefined; 'tls.server.x509.signature_algorithm'?: string | undefined; 'tls.server.x509.subject.common_name'?: string[] | undefined; 'tls.server.x509.subject.country'?: string[] | undefined; 'tls.server.x509.subject.distinguished_name'?: string | undefined; 'tls.server.x509.subject.locality'?: string[] | undefined; 'tls.server.x509.subject.organization'?: string[] | undefined; 'tls.server.x509.subject.organizational_unit'?: string[] | undefined; 'tls.server.x509.subject.state_or_province'?: string[] | undefined; 'tls.server.x509.version_number'?: string | undefined; 'tls.version'?: string | undefined; 'tls.version_protocol'?: string | undefined; 'trace.id'?: string | undefined; 'transaction.id'?: string | undefined; 'url.domain'?: string | undefined; 'url.extension'?: string | undefined; 'url.fragment'?: string | undefined; 'url.full'?: string | undefined; 'url.original'?: string | undefined; 'url.password'?: string | undefined; 'url.path'?: string | undefined; 'url.port'?: string | number | undefined; 'url.query'?: string | undefined; 'url.registered_domain'?: string | undefined; 'url.scheme'?: string | undefined; 'url.subdomain'?: string | undefined; 'url.top_level_domain'?: string | undefined; 'url.username'?: string | undefined; 'user.changes.domain'?: string | undefined; 'user.changes.email'?: string | undefined; 'user.changes.full_name'?: string | undefined; 'user.changes.group.domain'?: string | undefined; 'user.changes.group.id'?: string | undefined; 'user.changes.group.name'?: string | undefined; 'user.changes.hash'?: string | undefined; 'user.changes.id'?: string | undefined; 'user.changes.name'?: string | undefined; 'user.changes.roles'?: string[] | undefined; 'user.domain'?: string | undefined; 'user.effective.domain'?: string | undefined; 'user.effective.email'?: string | undefined; 'user.effective.full_name'?: string | undefined; 'user.effective.group.domain'?: string | undefined; 'user.effective.group.id'?: string | undefined; 'user.effective.group.name'?: string | undefined; 'user.effective.hash'?: string | undefined; 'user.effective.id'?: string | undefined; 'user.effective.name'?: string | undefined; 'user.effective.roles'?: string[] | undefined; 'user.email'?: string | undefined; 'user.full_name'?: string | undefined; 'user.group.domain'?: string | undefined; 'user.group.id'?: string | undefined; 'user.group.name'?: string | undefined; 'user.hash'?: string | undefined; 'user.id'?: string | undefined; 'user.name'?: string | undefined; 'user.risk.calculated_level'?: string | undefined; 'user.risk.calculated_score'?: number | undefined; 'user.risk.calculated_score_norm'?: number | undefined; 'user.risk.static_level'?: string | undefined; 'user.risk.static_score'?: number | undefined; 'user.risk.static_score_norm'?: number | undefined; 'user.roles'?: string[] | undefined; 'user.target.domain'?: string | undefined; 'user.target.email'?: string | undefined; 'user.target.full_name'?: string | undefined; 'user.target.group.domain'?: string | undefined; 'user.target.group.id'?: string | undefined; 'user.target.group.name'?: string | undefined; 'user.target.hash'?: string | undefined; 'user.target.id'?: string | undefined; 'user.target.name'?: string | undefined; 'user.target.roles'?: string[] | undefined; 'user_agent.device.name'?: string | undefined; 'user_agent.name'?: string | undefined; 'user_agent.original'?: string | undefined; 'user_agent.os.family'?: string | undefined; 'user_agent.os.full'?: string | undefined; 'user_agent.os.kernel'?: string | undefined; 'user_agent.os.name'?: string | undefined; 'user_agent.os.platform'?: string | undefined; 'user_agent.os.type'?: string | undefined; 'user_agent.os.version'?: string | undefined; 'user_agent.version'?: string | undefined; 'vulnerability.category'?: string[] | undefined; 'vulnerability.classification'?: string | undefined; 'vulnerability.description'?: string | undefined; 'vulnerability.enumeration'?: string | undefined; 'vulnerability.id'?: string | undefined; 'vulnerability.reference'?: string | undefined; 'vulnerability.report_id'?: string | undefined; 'vulnerability.scanner.vendor'?: string | undefined; 'vulnerability.score.base'?: number | undefined; 'vulnerability.score.environmental'?: number | undefined; 'vulnerability.score.temporal'?: number | undefined; 'vulnerability.score.version'?: string | undefined; 'vulnerability.severity'?: string | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }) | ({} & { 'kibana.alert.context'?: unknown; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | number | undefined; 'kibana.alert.evaluation.values'?: (string | number)[] | undefined; 'kibana.alert.group'?: { field?: string[] | undefined; value?: string[] | undefined; }[] | undefined; 'slo.id'?: string | undefined; 'slo.instanceId'?: string | undefined; 'slo.revision'?: string | number | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }) | ({} & { 'agent.name'?: string | undefined; 'anomaly.bucket_span.minutes'?: string | undefined; 'anomaly.start'?: string | number | undefined; configId?: string | undefined; 'error.message'?: string | undefined; 'host.name'?: string | undefined; 'kibana.alert.context'?: unknown; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | number | undefined; 'kibana.alert.evaluation.values'?: (string | number)[] | undefined; 'kibana.alert.group'?: { field?: string[] | undefined; value?: string[] | undefined; }[] | undefined; 'location.id'?: string | undefined; 'location.name'?: string | undefined; 'monitor.id'?: string | undefined; 'monitor.name'?: string | undefined; 'monitor.tags'?: string[] | undefined; 'monitor.type'?: string | undefined; 'observer.geo.name'?: string | undefined; 'tls.server.hash.sha256'?: string | undefined; 'tls.server.x509.issuer.common_name'?: string | undefined; 'tls.server.x509.not_after'?: string | number | undefined; 'tls.server.x509.not_before'?: string | number | undefined; 'tls.server.x509.subject.common_name'?: string | undefined; 'url.full'?: string | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }) | ({ '@timestamp': string | number; 'kibana.alert.ancestors': { depth: string | number; id: string; index: string; type: string; }[]; 'kibana.alert.depth': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.original_event.action': string; 'kibana.alert.original_event.category': string[]; 'kibana.alert.original_event.created': string | number; 'kibana.alert.original_event.dataset': string; 'kibana.alert.original_event.id': string; 'kibana.alert.original_event.ingested': string | number; 'kibana.alert.original_event.kind': string; 'kibana.alert.original_event.module': string; 'kibana.alert.original_event.original': string; 'kibana.alert.original_event.outcome': string; 'kibana.alert.original_event.provider': string; 'kibana.alert.original_event.sequence': string | number; 'kibana.alert.original_event.type': string[]; 'kibana.alert.original_time': string | number; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.false_positives': string[]; 'kibana.alert.rule.max_signals': (string | number)[]; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.threat.framework': string; 'kibana.alert.rule.threat.tactic.id': string; 'kibana.alert.rule.threat.tactic.name': string; 'kibana.alert.rule.threat.tactic.reference': string; 'kibana.alert.rule.threat.technique.id': string; 'kibana.alert.rule.threat.technique.name': string; 'kibana.alert.rule.threat.technique.reference': string; 'kibana.alert.rule.threat.technique.subtechnique.id': string; 'kibana.alert.rule.threat.technique.subtechnique.name': string; 'kibana.alert.rule.threat.technique.subtechnique.reference': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'ecs.version'?: string | undefined; 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'host.asset.criticality'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.ancestors.rule'?: string | undefined; 'kibana.alert.building_block_type'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.group.id'?: string | undefined; 'kibana.alert.group.index'?: number | undefined; 'kibana.alert.host.criticality_level'?: string | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.new_terms'?: string[] | undefined; 'kibana.alert.original_event.agent_id_status'?: string | undefined; 'kibana.alert.original_event.code'?: string | undefined; 'kibana.alert.original_event.duration'?: string | undefined; 'kibana.alert.original_event.end'?: string | number | undefined; 'kibana.alert.original_event.hash'?: string | undefined; 'kibana.alert.original_event.reason'?: string | undefined; 'kibana.alert.original_event.reference'?: string | undefined; 'kibana.alert.original_event.risk_score'?: number | undefined; 'kibana.alert.original_event.risk_score_norm'?: number | undefined; 'kibana.alert.original_event.severity'?: string | number | undefined; 'kibana.alert.original_event.start'?: string | number | undefined; 'kibana.alert.original_event.timezone'?: string | undefined; 'kibana.alert.original_event.url'?: string | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.building_block_type'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.immutable'?: string[] | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.rule.timeline_id'?: string[] | undefined; 'kibana.alert.rule.timeline_title'?: string[] | undefined; 'kibana.alert.rule.timestamp_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.threshold_result.cardinality'?: unknown; 'kibana.alert.threshold_result.count'?: string | number | undefined; 'kibana.alert.threshold_result.from'?: string | number | undefined; 'kibana.alert.threshold_result.terms'?: { field?: string | undefined; value?: string | undefined; }[] | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.user.criticality_level'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.alert.workflow_user'?: string | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; 'user.asset.criticality'?: string | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & { '@timestamp': string | number; 'ecs.version': string; } & { 'agent.build.original'?: string | undefined; 'agent.ephemeral_id'?: string | undefined; 'agent.id'?: string | undefined; 'agent.name'?: string | undefined; 'agent.type'?: string | undefined; 'agent.version'?: string | undefined; 'client.address'?: string | undefined; 'client.as.number'?: string | number | undefined; 'client.as.organization.name'?: string | undefined; 'client.bytes'?: string | number | undefined; 'client.domain'?: string | undefined; 'client.geo.city_name'?: string | undefined; 'client.geo.continent_code'?: string | undefined; 'client.geo.continent_name'?: string | undefined; 'client.geo.country_iso_code'?: string | undefined; 'client.geo.country_name'?: string | undefined; 'client.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'client.geo.name'?: string | undefined; 'client.geo.postal_code'?: string | undefined; 'client.geo.region_iso_code'?: string | undefined; 'client.geo.region_name'?: string | undefined; 'client.geo.timezone'?: string | undefined; 'client.ip'?: string | undefined; 'client.mac'?: string | undefined; 'client.nat.ip'?: string | undefined; 'client.nat.port'?: string | number | undefined; 'client.packets'?: string | number | undefined; 'client.port'?: string | number | undefined; 'client.registered_domain'?: string | undefined; 'client.subdomain'?: string | undefined; 'client.top_level_domain'?: string | undefined; 'client.user.domain'?: string | undefined; 'client.user.email'?: string | undefined; 'client.user.full_name'?: string | undefined; 'client.user.group.domain'?: string | undefined; 'client.user.group.id'?: string | undefined; 'client.user.group.name'?: string | undefined; 'client.user.hash'?: string | undefined; 'client.user.id'?: string | undefined; 'client.user.name'?: string | undefined; 'client.user.roles'?: string[] | undefined; 'cloud.account.id'?: string | undefined; 'cloud.account.name'?: string | undefined; 'cloud.availability_zone'?: string | undefined; 'cloud.instance.id'?: string | undefined; 'cloud.instance.name'?: string | undefined; 'cloud.machine.type'?: string | undefined; 'cloud.origin.account.id'?: string | undefined; 'cloud.origin.account.name'?: string | undefined; 'cloud.origin.availability_zone'?: string | undefined; 'cloud.origin.instance.id'?: string | undefined; 'cloud.origin.instance.name'?: string | undefined; 'cloud.origin.machine.type'?: string | undefined; 'cloud.origin.project.id'?: string | undefined; 'cloud.origin.project.name'?: string | undefined; 'cloud.origin.provider'?: string | undefined; 'cloud.origin.region'?: string | undefined; 'cloud.origin.service.name'?: string | undefined; 'cloud.project.id'?: string | undefined; 'cloud.project.name'?: string | undefined; 'cloud.provider'?: string | undefined; 'cloud.region'?: string | undefined; 'cloud.service.name'?: string | undefined; 'cloud.target.account.id'?: string | undefined; 'cloud.target.account.name'?: string | undefined; 'cloud.target.availability_zone'?: string | undefined; 'cloud.target.instance.id'?: string | undefined; 'cloud.target.instance.name'?: string | undefined; 'cloud.target.machine.type'?: string | undefined; 'cloud.target.project.id'?: string | undefined; 'cloud.target.project.name'?: string | undefined; 'cloud.target.provider'?: string | undefined; 'cloud.target.region'?: string | undefined; 'cloud.target.service.name'?: string | undefined; 'container.cpu.usage'?: string | number | undefined; 'container.disk.read.bytes'?: string | number | undefined; 'container.disk.write.bytes'?: string | number | undefined; 'container.id'?: string | undefined; 'container.image.hash.all'?: string[] | undefined; 'container.image.name'?: string | undefined; 'container.image.tag'?: string[] | undefined; 'container.labels'?: unknown; 'container.memory.usage'?: string | number | undefined; 'container.name'?: string | undefined; 'container.network.egress.bytes'?: string | number | undefined; 'container.network.ingress.bytes'?: string | number | undefined; 'container.runtime'?: string | undefined; 'container.security_context.privileged'?: boolean | undefined; 'destination.address'?: string | undefined; 'destination.as.number'?: string | number | undefined; 'destination.as.organization.name'?: string | undefined; 'destination.bytes'?: string | number | undefined; 'destination.domain'?: string | undefined; 'destination.geo.city_name'?: string | undefined; 'destination.geo.continent_code'?: string | undefined; 'destination.geo.continent_name'?: string | undefined; 'destination.geo.country_iso_code'?: string | undefined; 'destination.geo.country_name'?: string | undefined; 'destination.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'destination.geo.name'?: string | undefined; 'destination.geo.postal_code'?: string | undefined; 'destination.geo.region_iso_code'?: string | undefined; 'destination.geo.region_name'?: string | undefined; 'destination.geo.timezone'?: string | undefined; 'destination.ip'?: string | undefined; 'destination.mac'?: string | undefined; 'destination.nat.ip'?: string | undefined; 'destination.nat.port'?: string | number | undefined; 'destination.packets'?: string | number | undefined; 'destination.port'?: string | number | undefined; 'destination.registered_domain'?: string | undefined; 'destination.subdomain'?: string | undefined; 'destination.top_level_domain'?: string | undefined; 'destination.user.domain'?: string | undefined; 'destination.user.email'?: string | undefined; 'destination.user.full_name'?: string | undefined; 'destination.user.group.domain'?: string | undefined; 'destination.user.group.id'?: string | undefined; 'destination.user.group.name'?: string | undefined; 'destination.user.hash'?: string | undefined; 'destination.user.id'?: string | undefined; 'destination.user.name'?: string | undefined; 'destination.user.roles'?: string[] | undefined; 'device.id'?: string | undefined; 'device.manufacturer'?: string | undefined; 'device.model.identifier'?: string | undefined; 'device.model.name'?: string | undefined; 'dll.code_signature.digest_algorithm'?: string | undefined; 'dll.code_signature.exists'?: boolean | undefined; 'dll.code_signature.signing_id'?: string | undefined; 'dll.code_signature.status'?: string | undefined; 'dll.code_signature.subject_name'?: string | undefined; 'dll.code_signature.team_id'?: string | undefined; 'dll.code_signature.timestamp'?: string | number | undefined; 'dll.code_signature.trusted'?: boolean | undefined; 'dll.code_signature.valid'?: boolean | undefined; 'dll.hash.md5'?: string | undefined; 'dll.hash.sha1'?: string | undefined; 'dll.hash.sha256'?: string | undefined; 'dll.hash.sha384'?: string | undefined; 'dll.hash.sha512'?: string | undefined; 'dll.hash.ssdeep'?: string | undefined; 'dll.hash.tlsh'?: string | undefined; 'dll.name'?: string | undefined; 'dll.path'?: string | undefined; 'dll.pe.architecture'?: string | undefined; 'dll.pe.company'?: string | undefined; 'dll.pe.description'?: string | undefined; 'dll.pe.file_version'?: string | undefined; 'dll.pe.go_import_hash'?: string | undefined; 'dll.pe.go_imports'?: unknown; 'dll.pe.go_imports_names_entropy'?: string | number | undefined; 'dll.pe.go_imports_names_var_entropy'?: string | number | undefined; 'dll.pe.go_stripped'?: boolean | undefined; 'dll.pe.imphash'?: string | undefined; 'dll.pe.import_hash'?: string | undefined; 'dll.pe.imports'?: unknown[] | undefined; 'dll.pe.imports_names_entropy'?: string | number | undefined; 'dll.pe.imports_names_var_entropy'?: string | number | undefined; 'dll.pe.original_file_name'?: string | undefined; 'dll.pe.pehash'?: string | undefined; 'dll.pe.product'?: string | undefined; 'dll.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'dns.answers'?: { class?: string | undefined; data?: string | undefined; name?: string | undefined; ttl?: string | number | undefined; type?: string | undefined; }[] | undefined; 'dns.header_flags'?: string[] | undefined; 'dns.id'?: string | undefined; 'dns.op_code'?: string | undefined; 'dns.question.class'?: string | undefined; 'dns.question.name'?: string | undefined; 'dns.question.registered_domain'?: string | undefined; 'dns.question.subdomain'?: string | undefined; 'dns.question.top_level_domain'?: string | undefined; 'dns.question.type'?: string | undefined; 'dns.resolved_ip'?: string[] | undefined; 'dns.response_code'?: string | undefined; 'dns.type'?: string | undefined; 'email.attachments'?: { 'file.extension'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.name'?: string | undefined; 'file.size'?: string | number | undefined; }[] | undefined; 'email.bcc.address'?: string[] | undefined; 'email.cc.address'?: string[] | undefined; 'email.content_type'?: string | undefined; 'email.delivery_timestamp'?: string | number | undefined; 'email.direction'?: string | undefined; 'email.from.address'?: string[] | undefined; 'email.local_id'?: string | undefined; 'email.message_id'?: string | undefined; 'email.origination_timestamp'?: string | number | undefined; 'email.reply_to.address'?: string[] | undefined; 'email.sender.address'?: string | undefined; 'email.subject'?: string | undefined; 'email.to.address'?: string[] | undefined; 'email.x_mailer'?: string | undefined; 'error.code'?: string | undefined; 'error.id'?: string | undefined; 'error.message'?: string | undefined; 'error.stack_trace'?: string | undefined; 'error.type'?: string | undefined; 'event.action'?: string | undefined; 'event.agent_id_status'?: string | undefined; 'event.category'?: string[] | undefined; 'event.code'?: string | undefined; 'event.created'?: string | number | undefined; 'event.dataset'?: string | undefined; 'event.duration'?: string | number | undefined; 'event.end'?: string | number | undefined; 'event.hash'?: string | undefined; 'event.id'?: string | undefined; 'event.ingested'?: string | number | undefined; 'event.kind'?: string | undefined; 'event.module'?: string | undefined; 'event.original'?: string | undefined; 'event.outcome'?: string | undefined; 'event.provider'?: string | undefined; 'event.reason'?: string | undefined; 'event.reference'?: string | undefined; 'event.risk_score'?: number | undefined; 'event.risk_score_norm'?: number | undefined; 'event.sequence'?: string | number | undefined; 'event.severity'?: string | number | undefined; 'event.start'?: string | number | undefined; 'event.timezone'?: string | undefined; 'event.type'?: string[] | undefined; 'event.url'?: string | undefined; 'faas.coldstart'?: boolean | undefined; 'faas.execution'?: string | undefined; 'faas.id'?: string | undefined; 'faas.name'?: string | undefined; 'faas.version'?: string | undefined; 'file.accessed'?: string | number | undefined; 'file.attributes'?: string[] | undefined; 'file.code_signature.digest_algorithm'?: string | undefined; 'file.code_signature.exists'?: boolean | undefined; 'file.code_signature.signing_id'?: string | undefined; 'file.code_signature.status'?: string | undefined; 'file.code_signature.subject_name'?: string | undefined; 'file.code_signature.team_id'?: string | undefined; 'file.code_signature.timestamp'?: string | number | undefined; 'file.code_signature.trusted'?: boolean | undefined; 'file.code_signature.valid'?: boolean | undefined; 'file.created'?: string | number | undefined; 'file.ctime'?: string | number | undefined; 'file.device'?: string | undefined; 'file.directory'?: string | undefined; 'file.drive_letter'?: string | undefined; 'file.elf.architecture'?: string | undefined; 'file.elf.byte_order'?: string | undefined; 'file.elf.cpu_type'?: string | undefined; 'file.elf.creation_date'?: string | number | undefined; 'file.elf.exports'?: unknown[] | undefined; 'file.elf.go_import_hash'?: string | undefined; 'file.elf.go_imports'?: unknown; 'file.elf.go_imports_names_entropy'?: string | number | undefined; 'file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'file.elf.go_stripped'?: boolean | undefined; 'file.elf.header.abi_version'?: string | undefined; 'file.elf.header.class'?: string | undefined; 'file.elf.header.data'?: string | undefined; 'file.elf.header.entrypoint'?: string | number | undefined; 'file.elf.header.object_version'?: string | undefined; 'file.elf.header.os_abi'?: string | undefined; 'file.elf.header.type'?: string | undefined; 'file.elf.header.version'?: string | undefined; 'file.elf.import_hash'?: string | undefined; 'file.elf.imports'?: unknown[] | undefined; 'file.elf.imports_names_entropy'?: string | number | undefined; 'file.elf.imports_names_var_entropy'?: string | number | undefined; 'file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'file.elf.shared_libraries'?: string[] | undefined; 'file.elf.telfhash'?: string | undefined; 'file.extension'?: string | undefined; 'file.fork_name'?: string | undefined; 'file.gid'?: string | undefined; 'file.group'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.inode'?: string | undefined; 'file.macho.go_import_hash'?: string | undefined; 'file.macho.go_imports'?: unknown; 'file.macho.go_imports_names_entropy'?: string | number | undefined; 'file.macho.go_imports_names_var_entropy'?: string | number | undefined; 'file.macho.go_stripped'?: boolean | undefined; 'file.macho.import_hash'?: string | undefined; 'file.macho.imports'?: unknown[] | undefined; 'file.macho.imports_names_entropy'?: string | number | undefined; 'file.macho.imports_names_var_entropy'?: string | number | undefined; 'file.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.macho.symhash'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.mode'?: string | undefined; 'file.mtime'?: string | number | undefined; 'file.name'?: string | undefined; 'file.owner'?: string | undefined; 'file.path'?: string | undefined; 'file.pe.architecture'?: string | undefined; 'file.pe.company'?: string | undefined; 'file.pe.description'?: string | undefined; 'file.pe.file_version'?: string | undefined; 'file.pe.go_import_hash'?: string | undefined; 'file.pe.go_imports'?: unknown; 'file.pe.go_imports_names_entropy'?: string | number | undefined; 'file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'file.pe.go_stripped'?: boolean | undefined; 'file.pe.imphash'?: string | undefined; 'file.pe.import_hash'?: string | undefined; 'file.pe.imports'?: unknown[] | undefined; 'file.pe.imports_names_entropy'?: string | number | undefined; 'file.pe.imports_names_var_entropy'?: string | number | undefined; 'file.pe.original_file_name'?: string | undefined; 'file.pe.pehash'?: string | undefined; 'file.pe.product'?: string | undefined; 'file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.size'?: string | number | undefined; 'file.target_path'?: string | undefined; 'file.type'?: string | undefined; 'file.uid'?: string | undefined; 'file.x509.alternative_names'?: string[] | undefined; 'file.x509.issuer.common_name'?: string[] | undefined; 'file.x509.issuer.country'?: string[] | undefined; 'file.x509.issuer.distinguished_name'?: string | undefined; 'file.x509.issuer.locality'?: string[] | undefined; 'file.x509.issuer.organization'?: string[] | undefined; 'file.x509.issuer.organizational_unit'?: string[] | undefined; 'file.x509.issuer.state_or_province'?: string[] | undefined; 'file.x509.not_after'?: string | number | undefined; 'file.x509.not_before'?: string | number | undefined; 'file.x509.public_key_algorithm'?: string | undefined; 'file.x509.public_key_curve'?: string | undefined; 'file.x509.public_key_exponent'?: string | number | undefined; 'file.x509.public_key_size'?: string | number | undefined; 'file.x509.serial_number'?: string | undefined; 'file.x509.signature_algorithm'?: string | undefined; 'file.x509.subject.common_name'?: string[] | undefined; 'file.x509.subject.country'?: string[] | undefined; 'file.x509.subject.distinguished_name'?: string | undefined; 'file.x509.subject.locality'?: string[] | undefined; 'file.x509.subject.organization'?: string[] | undefined; 'file.x509.subject.organizational_unit'?: string[] | undefined; 'file.x509.subject.state_or_province'?: string[] | undefined; 'file.x509.version_number'?: string | undefined; 'group.domain'?: string | undefined; 'group.id'?: string | undefined; 'group.name'?: string | undefined; 'host.architecture'?: string | undefined; 'host.boot.id'?: string | undefined; 'host.cpu.usage'?: string | number | undefined; 'host.disk.read.bytes'?: string | number | undefined; 'host.disk.write.bytes'?: string | number | undefined; 'host.domain'?: string | undefined; 'host.geo.city_name'?: string | undefined; 'host.geo.continent_code'?: string | undefined; 'host.geo.continent_name'?: string | undefined; 'host.geo.country_iso_code'?: string | undefined; 'host.geo.country_name'?: string | undefined; 'host.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'host.geo.name'?: string | undefined; 'host.geo.postal_code'?: string | undefined; 'host.geo.region_iso_code'?: string | undefined; 'host.geo.region_name'?: string | undefined; 'host.geo.timezone'?: string | undefined; 'host.hostname'?: string | undefined; 'host.id'?: string | undefined; 'host.ip'?: string[] | undefined; 'host.mac'?: string[] | undefined; 'host.name'?: string | undefined; 'host.network.egress.bytes'?: string | number | undefined; 'host.network.egress.packets'?: string | number | undefined; 'host.network.ingress.bytes'?: string | number | undefined; 'host.network.ingress.packets'?: string | number | undefined; 'host.os.family'?: string | undefined; 'host.os.full'?: string | undefined; 'host.os.kernel'?: string | undefined; 'host.os.name'?: string | undefined; 'host.os.platform'?: string | undefined; 'host.os.type'?: string | undefined; 'host.os.version'?: string | undefined; 'host.pid_ns_ino'?: string | undefined; 'host.risk.calculated_level'?: string | undefined; 'host.risk.calculated_score'?: number | undefined; 'host.risk.calculated_score_norm'?: number | undefined; 'host.risk.static_level'?: string | undefined; 'host.risk.static_score'?: number | undefined; 'host.risk.static_score_norm'?: number | undefined; 'host.type'?: string | undefined; 'host.uptime'?: string | number | undefined; 'http.request.body.bytes'?: string | number | undefined; 'http.request.body.content'?: string | undefined; 'http.request.bytes'?: string | number | undefined; 'http.request.id'?: string | undefined; 'http.request.method'?: string | undefined; 'http.request.mime_type'?: string | undefined; 'http.request.referrer'?: string | undefined; 'http.response.body.bytes'?: string | number | undefined; 'http.response.body.content'?: string | undefined; 'http.response.bytes'?: string | number | undefined; 'http.response.mime_type'?: string | undefined; 'http.response.status_code'?: string | number | undefined; 'http.version'?: string | undefined; labels?: unknown; 'log.file.path'?: string | undefined; 'log.level'?: string | undefined; 'log.logger'?: string | undefined; 'log.origin.file.line'?: string | number | undefined; 'log.origin.file.name'?: string | undefined; 'log.origin.function'?: string | undefined; 'log.syslog'?: unknown; message?: string | undefined; 'network.application'?: string | undefined; 'network.bytes'?: string | number | undefined; 'network.community_id'?: string | undefined; 'network.direction'?: string | undefined; 'network.forwarded_ip'?: string | undefined; 'network.iana_number'?: string | undefined; 'network.inner'?: unknown; 'network.name'?: string | undefined; 'network.packets'?: string | number | undefined; 'network.protocol'?: string | undefined; 'network.transport'?: string | undefined; 'network.type'?: string | undefined; 'network.vlan.id'?: string | undefined; 'network.vlan.name'?: string | undefined; 'observer.egress'?: unknown; 'observer.geo.city_name'?: string | undefined; 'observer.geo.continent_code'?: string | undefined; 'observer.geo.continent_name'?: string | undefined; 'observer.geo.country_iso_code'?: string | undefined; 'observer.geo.country_name'?: string | undefined; 'observer.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'observer.geo.name'?: string | undefined; 'observer.geo.postal_code'?: string | undefined; 'observer.geo.region_iso_code'?: string | undefined; 'observer.geo.region_name'?: string | undefined; 'observer.geo.timezone'?: string | undefined; 'observer.hostname'?: string | undefined; 'observer.ingress'?: unknown; 'observer.ip'?: string[] | undefined; 'observer.mac'?: string[] | undefined; 'observer.name'?: string | undefined; 'observer.os.family'?: string | undefined; 'observer.os.full'?: string | undefined; 'observer.os.kernel'?: string | undefined; 'observer.os.name'?: string | undefined; 'observer.os.platform'?: string | undefined; 'observer.os.type'?: string | undefined; 'observer.os.version'?: string | undefined; 'observer.product'?: string | undefined; 'observer.serial_number'?: string | undefined; 'observer.type'?: string | undefined; 'observer.vendor'?: string | undefined; 'observer.version'?: string | undefined; 'orchestrator.api_version'?: string | undefined; 'orchestrator.cluster.id'?: string | undefined; 'orchestrator.cluster.name'?: string | undefined; 'orchestrator.cluster.url'?: string | undefined; 'orchestrator.cluster.version'?: string | undefined; 'orchestrator.namespace'?: string | undefined; 'orchestrator.organization'?: string | undefined; 'orchestrator.resource.annotation'?: string[] | undefined; 'orchestrator.resource.id'?: string | undefined; 'orchestrator.resource.ip'?: string[] | undefined; 'orchestrator.resource.label'?: string[] | undefined; 'orchestrator.resource.name'?: string | undefined; 'orchestrator.resource.parent.type'?: string | undefined; 'orchestrator.resource.type'?: string | undefined; 'orchestrator.type'?: string | undefined; 'organization.id'?: string | undefined; 'organization.name'?: string | undefined; 'package.architecture'?: string | undefined; 'package.build_version'?: string | undefined; 'package.checksum'?: string | undefined; 'package.description'?: string | undefined; 'package.install_scope'?: string | undefined; 'package.installed'?: string | number | undefined; 'package.license'?: string | undefined; 'package.name'?: string | undefined; 'package.path'?: string | undefined; 'package.reference'?: string | undefined; 'package.size'?: string | number | undefined; 'package.type'?: string | undefined; 'package.version'?: string | undefined; 'process.args'?: string[] | undefined; 'process.args_count'?: string | number | undefined; 'process.code_signature.digest_algorithm'?: string | undefined; 'process.code_signature.exists'?: boolean | undefined; 'process.code_signature.signing_id'?: string | undefined; 'process.code_signature.status'?: string | undefined; 'process.code_signature.subject_name'?: string | undefined; 'process.code_signature.team_id'?: string | undefined; 'process.code_signature.timestamp'?: string | number | undefined; 'process.code_signature.trusted'?: boolean | undefined; 'process.code_signature.valid'?: boolean | undefined; 'process.command_line'?: string | undefined; 'process.elf.architecture'?: string | undefined; 'process.elf.byte_order'?: string | undefined; 'process.elf.cpu_type'?: string | undefined; 'process.elf.creation_date'?: string | number | undefined; 'process.elf.exports'?: unknown[] | undefined; 'process.elf.go_import_hash'?: string | undefined; 'process.elf.go_imports'?: unknown; 'process.elf.go_imports_names_entropy'?: string | number | undefined; 'process.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.elf.go_stripped'?: boolean | undefined; 'process.elf.header.abi_version'?: string | undefined; 'process.elf.header.class'?: string | undefined; 'process.elf.header.data'?: string | undefined; 'process.elf.header.entrypoint'?: string | number | undefined; 'process.elf.header.object_version'?: string | undefined; 'process.elf.header.os_abi'?: string | undefined; 'process.elf.header.type'?: string | undefined; 'process.elf.header.version'?: string | undefined; 'process.elf.import_hash'?: string | undefined; 'process.elf.imports'?: unknown[] | undefined; 'process.elf.imports_names_entropy'?: string | number | undefined; 'process.elf.imports_names_var_entropy'?: string | number | undefined; 'process.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.elf.shared_libraries'?: string[] | undefined; 'process.elf.telfhash'?: string | undefined; 'process.end'?: string | number | undefined; 'process.entity_id'?: string | undefined; 'process.entry_leader.args'?: string[] | undefined; 'process.entry_leader.args_count'?: string | number | undefined; 'process.entry_leader.attested_groups.name'?: string | undefined; 'process.entry_leader.attested_user.id'?: string | undefined; 'process.entry_leader.attested_user.name'?: string | undefined; 'process.entry_leader.command_line'?: string | undefined; 'process.entry_leader.entity_id'?: string | undefined; 'process.entry_leader.entry_meta.source.ip'?: string | undefined; 'process.entry_leader.entry_meta.type'?: string | undefined; 'process.entry_leader.executable'?: string | undefined; 'process.entry_leader.group.id'?: string | undefined; 'process.entry_leader.group.name'?: string | undefined; 'process.entry_leader.interactive'?: boolean | undefined; 'process.entry_leader.name'?: string | undefined; 'process.entry_leader.parent.entity_id'?: string | undefined; 'process.entry_leader.parent.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.entity_id'?: string | undefined; 'process.entry_leader.parent.session_leader.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.start'?: string | number | undefined; 'process.entry_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.entry_leader.parent.start'?: string | number | undefined; 'process.entry_leader.parent.vpid'?: string | number | undefined; 'process.entry_leader.pid'?: string | number | undefined; 'process.entry_leader.real_group.id'?: string | undefined; 'process.entry_leader.real_group.name'?: string | undefined; 'process.entry_leader.real_user.id'?: string | undefined; 'process.entry_leader.real_user.name'?: string | undefined; 'process.entry_leader.same_as_process'?: boolean | undefined; 'process.entry_leader.saved_group.id'?: string | undefined; 'process.entry_leader.saved_group.name'?: string | undefined; 'process.entry_leader.saved_user.id'?: string | undefined; 'process.entry_leader.saved_user.name'?: string | undefined; 'process.entry_leader.start'?: string | number | undefined; 'process.entry_leader.supplemental_groups.id'?: string | undefined; 'process.entry_leader.supplemental_groups.name'?: string | undefined; 'process.entry_leader.tty'?: unknown; 'process.entry_leader.user.id'?: string | undefined; 'process.entry_leader.user.name'?: string | undefined; 'process.entry_leader.vpid'?: string | number | undefined; 'process.entry_leader.working_directory'?: string | undefined; 'process.env_vars'?: string[] | undefined; 'process.executable'?: string | undefined; 'process.exit_code'?: string | number | undefined; 'process.group_leader.args'?: string[] | undefined; 'process.group_leader.args_count'?: string | number | undefined; 'process.group_leader.command_line'?: string | undefined; 'process.group_leader.entity_id'?: string | undefined; 'process.group_leader.executable'?: string | undefined; 'process.group_leader.group.id'?: string | undefined; 'process.group_leader.group.name'?: string | undefined; 'process.group_leader.interactive'?: boolean | undefined; 'process.group_leader.name'?: string | undefined; 'process.group_leader.pid'?: string | number | undefined; 'process.group_leader.real_group.id'?: string | undefined; 'process.group_leader.real_group.name'?: string | undefined; 'process.group_leader.real_user.id'?: string | undefined; 'process.group_leader.real_user.name'?: string | undefined; 'process.group_leader.same_as_process'?: boolean | undefined; 'process.group_leader.saved_group.id'?: string | undefined; 'process.group_leader.saved_group.name'?: string | undefined; 'process.group_leader.saved_user.id'?: string | undefined; 'process.group_leader.saved_user.name'?: string | undefined; 'process.group_leader.start'?: string | number | undefined; 'process.group_leader.supplemental_groups.id'?: string | undefined; 'process.group_leader.supplemental_groups.name'?: string | undefined; 'process.group_leader.tty'?: unknown; 'process.group_leader.user.id'?: string | undefined; 'process.group_leader.user.name'?: string | undefined; 'process.group_leader.vpid'?: string | number | undefined; 'process.group_leader.working_directory'?: string | undefined; 'process.hash.md5'?: string | undefined; 'process.hash.sha1'?: string | undefined; 'process.hash.sha256'?: string | undefined; 'process.hash.sha384'?: string | undefined; 'process.hash.sha512'?: string | undefined; 'process.hash.ssdeep'?: string | undefined; 'process.hash.tlsh'?: string | undefined; 'process.interactive'?: boolean | undefined; 'process.io'?: unknown; 'process.macho.go_import_hash'?: string | undefined; 'process.macho.go_imports'?: unknown; 'process.macho.go_imports_names_entropy'?: string | number | undefined; 'process.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.macho.go_stripped'?: boolean | undefined; 'process.macho.import_hash'?: string | undefined; 'process.macho.imports'?: unknown[] | undefined; 'process.macho.imports_names_entropy'?: string | number | undefined; 'process.macho.imports_names_var_entropy'?: string | number | undefined; 'process.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.macho.symhash'?: string | undefined; 'process.name'?: string | undefined; 'process.parent.args'?: string[] | undefined; 'process.parent.args_count'?: string | number | undefined; 'process.parent.code_signature.digest_algorithm'?: string | undefined; 'process.parent.code_signature.exists'?: boolean | undefined; 'process.parent.code_signature.signing_id'?: string | undefined; 'process.parent.code_signature.status'?: string | undefined; 'process.parent.code_signature.subject_name'?: string | undefined; 'process.parent.code_signature.team_id'?: string | undefined; 'process.parent.code_signature.timestamp'?: string | number | undefined; 'process.parent.code_signature.trusted'?: boolean | undefined; 'process.parent.code_signature.valid'?: boolean | undefined; 'process.parent.command_line'?: string | undefined; 'process.parent.elf.architecture'?: string | undefined; 'process.parent.elf.byte_order'?: string | undefined; 'process.parent.elf.cpu_type'?: string | undefined; 'process.parent.elf.creation_date'?: string | number | undefined; 'process.parent.elf.exports'?: unknown[] | undefined; 'process.parent.elf.go_import_hash'?: string | undefined; 'process.parent.elf.go_imports'?: unknown; 'process.parent.elf.go_imports_names_entropy'?: string | number | undefined; 'process.parent.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.go_stripped'?: boolean | undefined; 'process.parent.elf.header.abi_version'?: string | undefined; 'process.parent.elf.header.class'?: string | undefined; 'process.parent.elf.header.data'?: string | undefined; 'process.parent.elf.header.entrypoint'?: string | number | undefined; 'process.parent.elf.header.object_version'?: string | undefined; 'process.parent.elf.header.os_abi'?: string | undefined; 'process.parent.elf.header.type'?: string | undefined; 'process.parent.elf.header.version'?: string | undefined; 'process.parent.elf.import_hash'?: string | undefined; 'process.parent.elf.imports'?: unknown[] | undefined; 'process.parent.elf.imports_names_entropy'?: string | number | undefined; 'process.parent.elf.imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.parent.elf.shared_libraries'?: string[] | undefined; 'process.parent.elf.telfhash'?: string | undefined; 'process.parent.end'?: string | number | undefined; 'process.parent.entity_id'?: string | undefined; 'process.parent.executable'?: string | undefined; 'process.parent.exit_code'?: string | number | undefined; 'process.parent.group.id'?: string | undefined; 'process.parent.group.name'?: string | undefined; 'process.parent.group_leader.entity_id'?: string | undefined; 'process.parent.group_leader.pid'?: string | number | undefined; 'process.parent.group_leader.start'?: string | number | undefined; 'process.parent.group_leader.vpid'?: string | number | undefined; 'process.parent.hash.md5'?: string | undefined; 'process.parent.hash.sha1'?: string | undefined; 'process.parent.hash.sha256'?: string | undefined; 'process.parent.hash.sha384'?: string | undefined; 'process.parent.hash.sha512'?: string | undefined; 'process.parent.hash.ssdeep'?: string | undefined; 'process.parent.hash.tlsh'?: string | undefined; 'process.parent.interactive'?: boolean | undefined; 'process.parent.macho.go_import_hash'?: string | undefined; 'process.parent.macho.go_imports'?: unknown; 'process.parent.macho.go_imports_names_entropy'?: string | number | undefined; 'process.parent.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.go_stripped'?: boolean | undefined; 'process.parent.macho.import_hash'?: string | undefined; 'process.parent.macho.imports'?: unknown[] | undefined; 'process.parent.macho.imports_names_entropy'?: string | number | undefined; 'process.parent.macho.imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.macho.symhash'?: string | undefined; 'process.parent.name'?: string | undefined; 'process.parent.pe.architecture'?: string | undefined; 'process.parent.pe.company'?: string | undefined; 'process.parent.pe.description'?: string | undefined; 'process.parent.pe.file_version'?: string | undefined; 'process.parent.pe.go_import_hash'?: string | undefined; 'process.parent.pe.go_imports'?: unknown; 'process.parent.pe.go_imports_names_entropy'?: string | number | undefined; 'process.parent.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.go_stripped'?: boolean | undefined; 'process.parent.pe.imphash'?: string | undefined; 'process.parent.pe.import_hash'?: string | undefined; 'process.parent.pe.imports'?: unknown[] | undefined; 'process.parent.pe.imports_names_entropy'?: string | number | undefined; 'process.parent.pe.imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.original_file_name'?: string | undefined; 'process.parent.pe.pehash'?: string | undefined; 'process.parent.pe.product'?: string | undefined; 'process.parent.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.pgid'?: string | number | undefined; 'process.parent.pid'?: string | number | undefined; 'process.parent.real_group.id'?: string | undefined; 'process.parent.real_group.name'?: string | undefined; 'process.parent.real_user.id'?: string | undefined; 'process.parent.real_user.name'?: string | undefined; 'process.parent.saved_group.id'?: string | undefined; 'process.parent.saved_group.name'?: string | undefined; 'process.parent.saved_user.id'?: string | undefined; 'process.parent.saved_user.name'?: string | undefined; 'process.parent.start'?: string | number | undefined; 'process.parent.supplemental_groups.id'?: string | undefined; 'process.parent.supplemental_groups.name'?: string | undefined; 'process.parent.thread.capabilities.effective'?: string[] | undefined; 'process.parent.thread.capabilities.permitted'?: string[] | undefined; 'process.parent.thread.id'?: string | number | undefined; 'process.parent.thread.name'?: string | undefined; 'process.parent.title'?: string | undefined; 'process.parent.tty'?: unknown; 'process.parent.uptime'?: string | number | undefined; 'process.parent.user.id'?: string | undefined; 'process.parent.user.name'?: string | undefined; 'process.parent.vpid'?: string | number | undefined; 'process.parent.working_directory'?: string | undefined; 'process.pe.architecture'?: string | undefined; 'process.pe.company'?: string | undefined; 'process.pe.description'?: string | undefined; 'process.pe.file_version'?: string | undefined; 'process.pe.go_import_hash'?: string | undefined; 'process.pe.go_imports'?: unknown; 'process.pe.go_imports_names_entropy'?: string | number | undefined; 'process.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.pe.go_stripped'?: boolean | undefined; 'process.pe.imphash'?: string | undefined; 'process.pe.import_hash'?: string | undefined; 'process.pe.imports'?: unknown[] | undefined; 'process.pe.imports_names_entropy'?: string | number | undefined; 'process.pe.imports_names_var_entropy'?: string | number | undefined; 'process.pe.original_file_name'?: string | undefined; 'process.pe.pehash'?: string | undefined; 'process.pe.product'?: string | undefined; 'process.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.pgid'?: string | number | undefined; 'process.pid'?: string | number | undefined; 'process.previous.args'?: string[] | undefined; 'process.previous.args_count'?: string | number | undefined; 'process.previous.executable'?: string | undefined; 'process.real_group.id'?: string | undefined; 'process.real_group.name'?: string | undefined; 'process.real_user.id'?: string | undefined; 'process.real_user.name'?: string | undefined; 'process.saved_group.id'?: string | undefined; 'process.saved_group.name'?: string | undefined; 'process.saved_user.id'?: string | undefined; 'process.saved_user.name'?: string | undefined; 'process.session_leader.args'?: string[] | undefined; 'process.session_leader.args_count'?: string | number | undefined; 'process.session_leader.command_line'?: string | undefined; 'process.session_leader.entity_id'?: string | undefined; 'process.session_leader.executable'?: string | undefined; 'process.session_leader.group.id'?: string | undefined; 'process.session_leader.group.name'?: string | undefined; 'process.session_leader.interactive'?: boolean | undefined; 'process.session_leader.name'?: string | undefined; 'process.session_leader.parent.entity_id'?: string | undefined; 'process.session_leader.parent.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.entity_id'?: string | undefined; 'process.session_leader.parent.session_leader.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.start'?: string | number | undefined; 'process.session_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.session_leader.parent.start'?: string | number | undefined; 'process.session_leader.parent.vpid'?: string | number | undefined; 'process.session_leader.pid'?: string | number | undefined; 'process.session_leader.real_group.id'?: string | undefined; 'process.session_leader.real_group.name'?: string | undefined; 'process.session_leader.real_user.id'?: string | undefined; 'process.session_leader.real_user.name'?: string | undefined; 'process.session_leader.same_as_process'?: boolean | undefined; 'process.session_leader.saved_group.id'?: string | undefined; 'process.session_leader.saved_group.name'?: string | undefined; 'process.session_leader.saved_user.id'?: string | undefined; 'process.session_leader.saved_user.name'?: string | undefined; 'process.session_leader.start'?: string | number | undefined; 'process.session_leader.supplemental_groups.id'?: string | undefined; 'process.session_leader.supplemental_groups.name'?: string | undefined; 'process.session_leader.tty'?: unknown; 'process.session_leader.user.id'?: string | undefined; 'process.session_leader.user.name'?: string | undefined; 'process.session_leader.vpid'?: string | number | undefined; 'process.session_leader.working_directory'?: string | undefined; 'process.start'?: string | number | undefined; 'process.supplemental_groups.id'?: string | undefined; 'process.supplemental_groups.name'?: string | undefined; 'process.thread.capabilities.effective'?: string[] | undefined; 'process.thread.capabilities.permitted'?: string[] | undefined; 'process.thread.id'?: string | number | undefined; 'process.thread.name'?: string | undefined; 'process.title'?: string | undefined; 'process.tty'?: unknown; 'process.uptime'?: string | number | undefined; 'process.user.id'?: string | undefined; 'process.user.name'?: string | undefined; 'process.vpid'?: string | number | undefined; 'process.working_directory'?: string | undefined; 'registry.data.bytes'?: string | undefined; 'registry.data.strings'?: string[] | undefined; 'registry.data.type'?: string | undefined; 'registry.hive'?: string | undefined; 'registry.key'?: string | undefined; 'registry.path'?: string | undefined; 'registry.value'?: string | undefined; 'related.hash'?: string[] | undefined; 'related.hosts'?: string[] | undefined; 'related.ip'?: string[] | undefined; 'related.user'?: string[] | undefined; 'rule.author'?: string[] | undefined; 'rule.category'?: string | undefined; 'rule.description'?: string | undefined; 'rule.id'?: string | undefined; 'rule.license'?: string | undefined; 'rule.name'?: string | undefined; 'rule.reference'?: string | undefined; 'rule.ruleset'?: string | undefined; 'rule.uuid'?: string | undefined; 'rule.version'?: string | undefined; 'server.address'?: string | undefined; 'server.as.number'?: string | number | undefined; 'server.as.organization.name'?: string | undefined; 'server.bytes'?: string | number | undefined; 'server.domain'?: string | undefined; 'server.geo.city_name'?: string | undefined; 'server.geo.continent_code'?: string | undefined; 'server.geo.continent_name'?: string | undefined; 'server.geo.country_iso_code'?: string | undefined; 'server.geo.country_name'?: string | undefined; 'server.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'server.geo.name'?: string | undefined; 'server.geo.postal_code'?: string | undefined; 'server.geo.region_iso_code'?: string | undefined; 'server.geo.region_name'?: string | undefined; 'server.geo.timezone'?: string | undefined; 'server.ip'?: string | undefined; 'server.mac'?: string | undefined; 'server.nat.ip'?: string | undefined; 'server.nat.port'?: string | number | undefined; 'server.packets'?: string | number | undefined; 'server.port'?: string | number | undefined; 'server.registered_domain'?: string | undefined; 'server.subdomain'?: string | undefined; 'server.top_level_domain'?: string | undefined; 'server.user.domain'?: string | undefined; 'server.user.email'?: string | undefined; 'server.user.full_name'?: string | undefined; 'server.user.group.domain'?: string | undefined; 'server.user.group.id'?: string | undefined; 'server.user.group.name'?: string | undefined; 'server.user.hash'?: string | undefined; 'server.user.id'?: string | undefined; 'server.user.name'?: string | undefined; 'server.user.roles'?: string[] | undefined; 'service.address'?: string | undefined; 'service.environment'?: string | undefined; 'service.ephemeral_id'?: string | undefined; 'service.id'?: string | undefined; 'service.name'?: string | undefined; 'service.node.name'?: string | undefined; 'service.node.role'?: string | undefined; 'service.node.roles'?: string[] | undefined; 'service.origin.address'?: string | undefined; 'service.origin.environment'?: string | undefined; 'service.origin.ephemeral_id'?: string | undefined; 'service.origin.id'?: string | undefined; 'service.origin.name'?: string | undefined; 'service.origin.node.name'?: string | undefined; 'service.origin.node.role'?: string | undefined; 'service.origin.node.roles'?: string[] | undefined; 'service.origin.state'?: string | undefined; 'service.origin.type'?: string | undefined; 'service.origin.version'?: string | undefined; 'service.state'?: string | undefined; 'service.target.address'?: string | undefined; 'service.target.environment'?: string | undefined; 'service.target.ephemeral_id'?: string | undefined; 'service.target.id'?: string | undefined; 'service.target.name'?: string | undefined; 'service.target.node.name'?: string | undefined; 'service.target.node.role'?: string | undefined; 'service.target.node.roles'?: string[] | undefined; 'service.target.state'?: string | undefined; 'service.target.type'?: string | undefined; 'service.target.version'?: string | undefined; 'service.type'?: string | undefined; 'service.version'?: string | undefined; 'source.address'?: string | undefined; 'source.as.number'?: string | number | undefined; 'source.as.organization.name'?: string | undefined; 'source.bytes'?: string | number | undefined; 'source.domain'?: string | undefined; 'source.geo.city_name'?: string | undefined; 'source.geo.continent_code'?: string | undefined; 'source.geo.continent_name'?: string | undefined; 'source.geo.country_iso_code'?: string | undefined; 'source.geo.country_name'?: string | undefined; 'source.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'source.geo.name'?: string | undefined; 'source.geo.postal_code'?: string | undefined; 'source.geo.region_iso_code'?: string | undefined; 'source.geo.region_name'?: string | undefined; 'source.geo.timezone'?: string | undefined; 'source.ip'?: string | undefined; 'source.mac'?: string | undefined; 'source.nat.ip'?: string | undefined; 'source.nat.port'?: string | number | undefined; 'source.packets'?: string | number | undefined; 'source.port'?: string | number | undefined; 'source.registered_domain'?: string | undefined; 'source.subdomain'?: string | undefined; 'source.top_level_domain'?: string | undefined; 'source.user.domain'?: string | undefined; 'source.user.email'?: string | undefined; 'source.user.full_name'?: string | undefined; 'source.user.group.domain'?: string | undefined; 'source.user.group.id'?: string | undefined; 'source.user.group.name'?: string | undefined; 'source.user.hash'?: string | undefined; 'source.user.id'?: string | undefined; 'source.user.name'?: string | undefined; 'source.user.roles'?: string[] | undefined; 'span.id'?: string | undefined; tags?: string[] | undefined; 'threat.enrichments'?: { indicator?: unknown; 'matched.atomic'?: string | undefined; 'matched.field'?: string | undefined; 'matched.id'?: string | undefined; 'matched.index'?: string | undefined; 'matched.occurred'?: string | number | undefined; 'matched.type'?: string | undefined; }[] | undefined; 'threat.feed.dashboard_id'?: string | undefined; 'threat.feed.description'?: string | undefined; 'threat.feed.name'?: string | undefined; 'threat.feed.reference'?: string | undefined; 'threat.framework'?: string | undefined; 'threat.group.alias'?: string[] | undefined; 'threat.group.id'?: string | undefined; 'threat.group.name'?: string | undefined; 'threat.group.reference'?: string | undefined; 'threat.indicator.as.number'?: string | number | undefined; 'threat.indicator.as.organization.name'?: string | undefined; 'threat.indicator.confidence'?: string | undefined; 'threat.indicator.description'?: string | undefined; 'threat.indicator.email.address'?: string | undefined; 'threat.indicator.file.accessed'?: string | number | undefined; 'threat.indicator.file.attributes'?: string[] | undefined; 'threat.indicator.file.code_signature.digest_algorithm'?: string | undefined; 'threat.indicator.file.code_signature.exists'?: boolean | undefined; 'threat.indicator.file.code_signature.signing_id'?: string | undefined; 'threat.indicator.file.code_signature.status'?: string | undefined; 'threat.indicator.file.code_signature.subject_name'?: string | undefined; 'threat.indicator.file.code_signature.team_id'?: string | undefined; 'threat.indicator.file.code_signature.timestamp'?: string | number | undefined; 'threat.indicator.file.code_signature.trusted'?: boolean | undefined; 'threat.indicator.file.code_signature.valid'?: boolean | undefined; 'threat.indicator.file.created'?: string | number | undefined; 'threat.indicator.file.ctime'?: string | number | undefined; 'threat.indicator.file.device'?: string | undefined; 'threat.indicator.file.directory'?: string | undefined; 'threat.indicator.file.drive_letter'?: string | undefined; 'threat.indicator.file.elf.architecture'?: string | undefined; 'threat.indicator.file.elf.byte_order'?: string | undefined; 'threat.indicator.file.elf.cpu_type'?: string | undefined; 'threat.indicator.file.elf.creation_date'?: string | number | undefined; 'threat.indicator.file.elf.exports'?: unknown[] | undefined; 'threat.indicator.file.elf.go_import_hash'?: string | undefined; 'threat.indicator.file.elf.go_imports'?: unknown; 'threat.indicator.file.elf.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_stripped'?: boolean | undefined; 'threat.indicator.file.elf.header.abi_version'?: string | undefined; 'threat.indicator.file.elf.header.class'?: string | undefined; 'threat.indicator.file.elf.header.data'?: string | undefined; 'threat.indicator.file.elf.header.entrypoint'?: string | number | undefined; 'threat.indicator.file.elf.header.object_version'?: string | undefined; 'threat.indicator.file.elf.header.os_abi'?: string | undefined; 'threat.indicator.file.elf.header.type'?: string | undefined; 'threat.indicator.file.elf.header.version'?: string | undefined; 'threat.indicator.file.elf.import_hash'?: string | undefined; 'threat.indicator.file.elf.imports'?: unknown[] | undefined; 'threat.indicator.file.elf.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'threat.indicator.file.elf.shared_libraries'?: string[] | undefined; 'threat.indicator.file.elf.telfhash'?: string | undefined; 'threat.indicator.file.extension'?: string | undefined; 'threat.indicator.file.fork_name'?: string | undefined; 'threat.indicator.file.gid'?: string | undefined; 'threat.indicator.file.group'?: string | undefined; 'threat.indicator.file.hash.md5'?: string | undefined; 'threat.indicator.file.hash.sha1'?: string | undefined; 'threat.indicator.file.hash.sha256'?: string | undefined; 'threat.indicator.file.hash.sha384'?: string | undefined; 'threat.indicator.file.hash.sha512'?: string | undefined; 'threat.indicator.file.hash.ssdeep'?: string | undefined; 'threat.indicator.file.hash.tlsh'?: string | undefined; 'threat.indicator.file.inode'?: string | undefined; 'threat.indicator.file.mime_type'?: string | undefined; 'threat.indicator.file.mode'?: string | undefined; 'threat.indicator.file.mtime'?: string | number | undefined; 'threat.indicator.file.name'?: string | undefined; 'threat.indicator.file.owner'?: string | undefined; 'threat.indicator.file.path'?: string | undefined; 'threat.indicator.file.pe.architecture'?: string | undefined; 'threat.indicator.file.pe.company'?: string | undefined; 'threat.indicator.file.pe.description'?: string | undefined; 'threat.indicator.file.pe.file_version'?: string | undefined; 'threat.indicator.file.pe.go_import_hash'?: string | undefined; 'threat.indicator.file.pe.go_imports'?: unknown; 'threat.indicator.file.pe.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_stripped'?: boolean | undefined; 'threat.indicator.file.pe.imphash'?: string | undefined; 'threat.indicator.file.pe.import_hash'?: string | undefined; 'threat.indicator.file.pe.imports'?: unknown[] | undefined; 'threat.indicator.file.pe.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.original_file_name'?: string | undefined; 'threat.indicator.file.pe.pehash'?: string | undefined; 'threat.indicator.file.pe.product'?: string | undefined; 'threat.indicator.file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.size'?: string | number | undefined; 'threat.indicator.file.target_path'?: string | undefined; 'threat.indicator.file.type'?: string | undefined; 'threat.indicator.file.uid'?: string | undefined; 'threat.indicator.file.x509.alternative_names'?: string[] | undefined; 'threat.indicator.file.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.file.x509.issuer.country'?: string[] | undefined; 'threat.indicator.file.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.not_after'?: string | number | undefined; 'threat.indicator.file.x509.not_before'?: string | number | undefined; 'threat.indicator.file.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.file.x509.public_key_curve'?: string | undefined; 'threat.indicator.file.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.file.x509.public_key_size'?: string | number | undefined; 'threat.indicator.file.x509.serial_number'?: string | undefined; 'threat.indicator.file.x509.signature_algorithm'?: string | undefined; 'threat.indicator.file.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.file.x509.subject.country'?: string[] | undefined; 'threat.indicator.file.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.subject.locality'?: string[] | undefined; 'threat.indicator.file.x509.subject.organization'?: string[] | undefined; 'threat.indicator.file.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.version_number'?: string | undefined; 'threat.indicator.first_seen'?: string | number | undefined; 'threat.indicator.geo.city_name'?: string | undefined; 'threat.indicator.geo.continent_code'?: string | undefined; 'threat.indicator.geo.continent_name'?: string | undefined; 'threat.indicator.geo.country_iso_code'?: string | undefined; 'threat.indicator.geo.country_name'?: string | undefined; 'threat.indicator.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'threat.indicator.geo.name'?: string | undefined; 'threat.indicator.geo.postal_code'?: string | undefined; 'threat.indicator.geo.region_iso_code'?: string | undefined; 'threat.indicator.geo.region_name'?: string | undefined; 'threat.indicator.geo.timezone'?: string | undefined; 'threat.indicator.ip'?: string | undefined; 'threat.indicator.last_seen'?: string | number | undefined; 'threat.indicator.marking.tlp'?: string | undefined; 'threat.indicator.marking.tlp_version'?: string | undefined; 'threat.indicator.modified_at'?: string | number | undefined; 'threat.indicator.name'?: string | undefined; 'threat.indicator.port'?: string | number | undefined; 'threat.indicator.provider'?: string | undefined; 'threat.indicator.reference'?: string | undefined; 'threat.indicator.registry.data.bytes'?: string | undefined; 'threat.indicator.registry.data.strings'?: string[] | undefined; 'threat.indicator.registry.data.type'?: string | undefined; 'threat.indicator.registry.hive'?: string | undefined; 'threat.indicator.registry.key'?: string | undefined; 'threat.indicator.registry.path'?: string | undefined; 'threat.indicator.registry.value'?: string | undefined; 'threat.indicator.scanner_stats'?: string | number | undefined; 'threat.indicator.sightings'?: string | number | undefined; 'threat.indicator.type'?: string | undefined; 'threat.indicator.url.domain'?: string | undefined; 'threat.indicator.url.extension'?: string | undefined; 'threat.indicator.url.fragment'?: string | undefined; 'threat.indicator.url.full'?: string | undefined; 'threat.indicator.url.original'?: string | undefined; 'threat.indicator.url.password'?: string | undefined; 'threat.indicator.url.path'?: string | undefined; 'threat.indicator.url.port'?: string | number | undefined; 'threat.indicator.url.query'?: string | undefined; 'threat.indicator.url.registered_domain'?: string | undefined; 'threat.indicator.url.scheme'?: string | undefined; 'threat.indicator.url.subdomain'?: string | undefined; 'threat.indicator.url.top_level_domain'?: string | undefined; 'threat.indicator.url.username'?: string | undefined; 'threat.indicator.x509.alternative_names'?: string[] | undefined; 'threat.indicator.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.x509.issuer.country'?: string[] | undefined; 'threat.indicator.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.x509.not_after'?: string | number | undefined; 'threat.indicator.x509.not_before'?: string | number | undefined; 'threat.indicator.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.x509.public_key_curve'?: string | undefined; 'threat.indicator.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.x509.public_key_size'?: string | number | undefined; 'threat.indicator.x509.serial_number'?: string | undefined; 'threat.indicator.x509.signature_algorithm'?: string | undefined; 'threat.indicator.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.x509.subject.country'?: string[] | undefined; 'threat.indicator.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.x509.subject.locality'?: string[] | undefined; 'threat.indicator.x509.subject.organization'?: string[] | undefined; 'threat.indicator.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.x509.version_number'?: string | undefined; 'threat.software.alias'?: string[] | undefined; 'threat.software.id'?: string | undefined; 'threat.software.name'?: string | undefined; 'threat.software.platforms'?: string[] | undefined; 'threat.software.reference'?: string | undefined; 'threat.software.type'?: string | undefined; 'threat.tactic.id'?: string[] | undefined; 'threat.tactic.name'?: string[] | undefined; 'threat.tactic.reference'?: string[] | undefined; 'threat.technique.id'?: string[] | undefined; 'threat.technique.name'?: string[] | undefined; 'threat.technique.reference'?: string[] | undefined; 'threat.technique.subtechnique.id'?: string[] | undefined; 'threat.technique.subtechnique.name'?: string[] | undefined; 'threat.technique.subtechnique.reference'?: string[] | undefined; 'tls.cipher'?: string | undefined; 'tls.client.certificate'?: string | undefined; 'tls.client.certificate_chain'?: string[] | undefined; 'tls.client.hash.md5'?: string | undefined; 'tls.client.hash.sha1'?: string | undefined; 'tls.client.hash.sha256'?: string | undefined; 'tls.client.issuer'?: string | undefined; 'tls.client.ja3'?: string | undefined; 'tls.client.not_after'?: string | number | undefined; 'tls.client.not_before'?: string | number | undefined; 'tls.client.server_name'?: string | undefined; 'tls.client.subject'?: string | undefined; 'tls.client.supported_ciphers'?: string[] | undefined; 'tls.client.x509.alternative_names'?: string[] | undefined; 'tls.client.x509.issuer.common_name'?: string[] | undefined; 'tls.client.x509.issuer.country'?: string[] | undefined; 'tls.client.x509.issuer.distinguished_name'?: string | undefined; 'tls.client.x509.issuer.locality'?: string[] | undefined; 'tls.client.x509.issuer.organization'?: string[] | undefined; 'tls.client.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.client.x509.issuer.state_or_province'?: string[] | undefined; 'tls.client.x509.not_after'?: string | number | undefined; 'tls.client.x509.not_before'?: string | number | undefined; 'tls.client.x509.public_key_algorithm'?: string | undefined; 'tls.client.x509.public_key_curve'?: string | undefined; 'tls.client.x509.public_key_exponent'?: string | number | undefined; 'tls.client.x509.public_key_size'?: string | number | undefined; 'tls.client.x509.serial_number'?: string | undefined; 'tls.client.x509.signature_algorithm'?: string | undefined; 'tls.client.x509.subject.common_name'?: string[] | undefined; 'tls.client.x509.subject.country'?: string[] | undefined; 'tls.client.x509.subject.distinguished_name'?: string | undefined; 'tls.client.x509.subject.locality'?: string[] | undefined; 'tls.client.x509.subject.organization'?: string[] | undefined; 'tls.client.x509.subject.organizational_unit'?: string[] | undefined; 'tls.client.x509.subject.state_or_province'?: string[] | undefined; 'tls.client.x509.version_number'?: string | undefined; 'tls.curve'?: string | undefined; 'tls.established'?: boolean | undefined; 'tls.next_protocol'?: string | undefined; 'tls.resumed'?: boolean | undefined; 'tls.server.certificate'?: string | undefined; 'tls.server.certificate_chain'?: string[] | undefined; 'tls.server.hash.md5'?: string | undefined; 'tls.server.hash.sha1'?: string | undefined; 'tls.server.hash.sha256'?: string | undefined; 'tls.server.issuer'?: string | undefined; 'tls.server.ja3s'?: string | undefined; 'tls.server.not_after'?: string | number | undefined; 'tls.server.not_before'?: string | number | undefined; 'tls.server.subject'?: string | undefined; 'tls.server.x509.alternative_names'?: string[] | undefined; 'tls.server.x509.issuer.common_name'?: string[] | undefined; 'tls.server.x509.issuer.country'?: string[] | undefined; 'tls.server.x509.issuer.distinguished_name'?: string | undefined; 'tls.server.x509.issuer.locality'?: string[] | undefined; 'tls.server.x509.issuer.organization'?: string[] | undefined; 'tls.server.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.server.x509.issuer.state_or_province'?: string[] | undefined; 'tls.server.x509.not_after'?: string | number | undefined; 'tls.server.x509.not_before'?: string | number | undefined; 'tls.server.x509.public_key_algorithm'?: string | undefined; 'tls.server.x509.public_key_curve'?: string | undefined; 'tls.server.x509.public_key_exponent'?: string | number | undefined; 'tls.server.x509.public_key_size'?: string | number | undefined; 'tls.server.x509.serial_number'?: string | undefined; 'tls.server.x509.signature_algorithm'?: string | undefined; 'tls.server.x509.subject.common_name'?: string[] | undefined; 'tls.server.x509.subject.country'?: string[] | undefined; 'tls.server.x509.subject.distinguished_name'?: string | undefined; 'tls.server.x509.subject.locality'?: string[] | undefined; 'tls.server.x509.subject.organization'?: string[] | undefined; 'tls.server.x509.subject.organizational_unit'?: string[] | undefined; 'tls.server.x509.subject.state_or_province'?: string[] | undefined; 'tls.server.x509.version_number'?: string | undefined; 'tls.version'?: string | undefined; 'tls.version_protocol'?: string | undefined; 'trace.id'?: string | undefined; 'transaction.id'?: string | undefined; 'url.domain'?: string | undefined; 'url.extension'?: string | undefined; 'url.fragment'?: string | undefined; 'url.full'?: string | undefined; 'url.original'?: string | undefined; 'url.password'?: string | undefined; 'url.path'?: string | undefined; 'url.port'?: string | number | undefined; 'url.query'?: string | undefined; 'url.registered_domain'?: string | undefined; 'url.scheme'?: string | undefined; 'url.subdomain'?: string | undefined; 'url.top_level_domain'?: string | undefined; 'url.username'?: string | undefined; 'user.changes.domain'?: string | undefined; 'user.changes.email'?: string | undefined; 'user.changes.full_name'?: string | undefined; 'user.changes.group.domain'?: string | undefined; 'user.changes.group.id'?: string | undefined; 'user.changes.group.name'?: string | undefined; 'user.changes.hash'?: string | undefined; 'user.changes.id'?: string | undefined; 'user.changes.name'?: string | undefined; 'user.changes.roles'?: string[] | undefined; 'user.domain'?: string | undefined; 'user.effective.domain'?: string | undefined; 'user.effective.email'?: string | undefined; 'user.effective.full_name'?: string | undefined; 'user.effective.group.domain'?: string | undefined; 'user.effective.group.id'?: string | undefined; 'user.effective.group.name'?: string | undefined; 'user.effective.hash'?: string | undefined; 'user.effective.id'?: string | undefined; 'user.effective.name'?: string | undefined; 'user.effective.roles'?: string[] | undefined; 'user.email'?: string | undefined; 'user.full_name'?: string | undefined; 'user.group.domain'?: string | undefined; 'user.group.id'?: string | undefined; 'user.group.name'?: string | undefined; 'user.hash'?: string | undefined; 'user.id'?: string | undefined; 'user.name'?: string | undefined; 'user.risk.calculated_level'?: string | undefined; 'user.risk.calculated_score'?: number | undefined; 'user.risk.calculated_score_norm'?: number | undefined; 'user.risk.static_level'?: string | undefined; 'user.risk.static_score'?: number | undefined; 'user.risk.static_score_norm'?: number | undefined; 'user.roles'?: string[] | undefined; 'user.target.domain'?: string | undefined; 'user.target.email'?: string | undefined; 'user.target.full_name'?: string | undefined; 'user.target.group.domain'?: string | undefined; 'user.target.group.id'?: string | undefined; 'user.target.group.name'?: string | undefined; 'user.target.hash'?: string | undefined; 'user.target.id'?: string | undefined; 'user.target.name'?: string | undefined; 'user.target.roles'?: string[] | undefined; 'user_agent.device.name'?: string | undefined; 'user_agent.name'?: string | undefined; 'user_agent.original'?: string | undefined; 'user_agent.os.family'?: string | undefined; 'user_agent.os.full'?: string | undefined; 'user_agent.os.kernel'?: string | undefined; 'user_agent.os.name'?: string | undefined; 'user_agent.os.platform'?: string | undefined; 'user_agent.os.type'?: string | undefined; 'user_agent.os.version'?: string | undefined; 'user_agent.version'?: string | undefined; 'vulnerability.category'?: string[] | undefined; 'vulnerability.classification'?: string | undefined; 'vulnerability.description'?: string | undefined; 'vulnerability.enumeration'?: string | undefined; 'vulnerability.id'?: string | undefined; 'vulnerability.reference'?: string | undefined; 'vulnerability.report_id'?: string | undefined; 'vulnerability.scanner.vendor'?: string | undefined; 'vulnerability.score.base'?: number | undefined; 'vulnerability.score.environmental'?: number | undefined; 'vulnerability.score.temporal'?: number | undefined; 'vulnerability.score.version'?: string | undefined; 'vulnerability.severity'?: string | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }) | ({ 'kibana.alert.job_id': string; } & { 'kibana.alert.anomaly_score'?: number[] | undefined; 'kibana.alert.anomaly_timestamp'?: string | number | undefined; 'kibana.alert.is_interim'?: boolean | undefined; 'kibana.alert.top_influencers'?: { influencer_field_name?: string | undefined; influencer_field_value?: string | undefined; influencer_score?: number | undefined; initial_influencer_score?: number | undefined; is_interim?: boolean | undefined; job_id?: string | undefined; timestamp?: string | number | undefined; }[] | undefined; 'kibana.alert.top_records'?: { actual?: number | undefined; by_field_name?: string | undefined; by_field_value?: string | undefined; detector_index?: number | undefined; field_name?: string | undefined; function?: string | undefined; initial_record_score?: number | undefined; is_interim?: boolean | undefined; job_id?: string | undefined; over_field_name?: string | undefined; over_field_value?: string | undefined; partition_field_name?: string | undefined; partition_field_value?: string | undefined; record_score?: number | undefined; timestamp?: string | number | undefined; typical?: number | undefined; }[] | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; }) | ({} & { 'kibana.alert.datafeed_results'?: { datafeed_id?: string | undefined; datafeed_state?: string | undefined; job_id?: string | undefined; job_state?: string | undefined; }[] | undefined; 'kibana.alert.delayed_data_results'?: { annotation?: string | undefined; end_timestamp?: string | number | undefined; job_id?: string | undefined; missed_docs_count?: string | number | undefined; }[] | undefined; 'kibana.alert.job_errors_results'?: { errors?: unknown; job_id?: string | undefined; }[] | undefined; 'kibana.alert.mml_results'?: { job_id?: string | undefined; log_time?: string | number | undefined; memory_status?: string | undefined; model_bytes?: string | number | undefined; model_bytes_exceeded?: string | number | undefined; model_bytes_memory_limit?: string | number | undefined; peak_model_bytes?: string | number | undefined; }[] | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; }) | ({} & { 'kibana.alert.results'?: { description?: string | undefined; health_status?: string | undefined; issues?: unknown; node_name?: string | undefined; transform_id?: string | undefined; transform_state?: string | undefined; }[] | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; })" ], "path": "packages/kbn-alerts-as-data-utils/src/schemas/index.ts", "deprecated": false, @@ -420,7 +420,7 @@ "label": "ObservabilityUptimeAlert", "description": [], "signature": [ - "{} & { 'agent.name'?: string | undefined; 'anomaly.bucket_span.minutes'?: string | undefined; 'anomaly.start'?: string | number | undefined; 'error.message'?: string | undefined; 'kibana.alert.context'?: unknown; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | number | undefined; 'kibana.alert.evaluation.values'?: (string | number)[] | undefined; 'kibana.alert.group'?: { field?: string[] | undefined; value?: string[] | undefined; }[] | undefined; 'monitor.id'?: string | undefined; 'monitor.name'?: string | undefined; 'monitor.type'?: string | undefined; 'observer.geo.name'?: string | undefined; 'tls.server.hash.sha256'?: string | undefined; 'tls.server.x509.issuer.common_name'?: string | undefined; 'tls.server.x509.not_after'?: string | number | undefined; 'tls.server.x509.not_before'?: string | number | undefined; 'tls.server.x509.subject.common_name'?: string | undefined; 'url.full'?: string | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }" + "{} & { 'agent.name'?: string | undefined; 'anomaly.bucket_span.minutes'?: string | undefined; 'anomaly.start'?: string | number | undefined; configId?: string | undefined; 'error.message'?: string | undefined; 'host.name'?: string | undefined; 'kibana.alert.context'?: unknown; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | number | undefined; 'kibana.alert.evaluation.values'?: (string | number)[] | undefined; 'kibana.alert.group'?: { field?: string[] | undefined; value?: string[] | undefined; }[] | undefined; 'location.id'?: string | undefined; 'location.name'?: string | undefined; 'monitor.id'?: string | undefined; 'monitor.name'?: string | undefined; 'monitor.tags'?: string[] | undefined; 'monitor.type'?: string | undefined; 'observer.geo.name'?: string | undefined; 'tls.server.hash.sha256'?: string | undefined; 'tls.server.x509.issuer.common_name'?: string | undefined; 'tls.server.x509.not_after'?: string | number | undefined; 'tls.server.x509.not_before'?: string | number | undefined; 'tls.server.x509.subject.common_name'?: string | undefined; 'url.full'?: string | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }" ], "path": "packages/kbn-alerts-as-data-utils/src/schemas/generated/observability_uptime_schema.ts", "deprecated": false, diff --git a/api_docs/kbn_alerts_as_data_utils.mdx b/api_docs/kbn_alerts_as_data_utils.mdx index 15e6cdc1bb493..b407cbcb0c39e 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-06-27 +date: 2024-06-29 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_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx index 648cbf2744cfb..36d36c3e8f150 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-06-27 +date: 2024-06-29 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 55fef90e0f881..04f4f2ac4b40f 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-06-27 +date: 2024-06-29 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 f58c34825aae1..b5eb4213aefd5 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-06-27 +date: 2024-06-29 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 4aa1947b9c1c8..7154426454781 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-06-27 +date: 2024-06-29 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 1b7ad780cf13a..abd28affc5394 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-06-27 +date: 2024-06-29 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 501cf8baf228e..774853b7d0b88 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-06-27 +date: 2024-06-29 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 685bb1416d39b..ce2e6658c0196 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-06-27 +date: 2024-06-29 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_utils.mdx b/api_docs/kbn_apm_utils.mdx index 8e4f474b3e55b..e3eedbcd4b069 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-utils'] --- import kbnApmUtilsObj from './kbn_apm_utils.devdocs.json'; diff --git a/api_docs/kbn_axe_config.mdx b/api_docs/kbn_axe_config.mdx index 24ea8921b5795..6e6a15ce200b6 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-06-27 +date: 2024-06-29 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 231a4f502494f..0cd7d0a352e7a 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-06-27 +date: 2024-06-29 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 1a9d8622072f1..c715c5b4d05a4 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-06-27 +date: 2024-06-29 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 b40c009b786d4..580bbd3871f8b 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-06-27 +date: 2024-06-29 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 4c50d36632348..c4a7446a07454 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cases-components'] --- import kbnCasesComponentsObj from './kbn_cases_components.devdocs.json'; diff --git a/api_docs/kbn_cell_actions.mdx b/api_docs/kbn_cell_actions.mdx index 6855f4fac3078..17d3bbfd535f0 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-06-27 +date: 2024-06-29 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 92d84cf121c81..07ca5fefbe764 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-06-27 +date: 2024-06-29 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 00ee1abb6a0d9..86a0cbeaa9b61 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-06-27 +date: 2024-06-29 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 53905bdb14c7a..2e62a277d53ea 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-06-27 +date: 2024-06-29 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 b2d71c19f7c53..aabb69cd5ceb4 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-06-27 +date: 2024-06-29 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 52d15a1253a06..f71656c22fabb 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-06-27 +date: 2024-06-29 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 b67475559dd67..8663fdc6065bf 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cli-dev-mode'] --- import kbnCliDevModeObj from './kbn_cli_dev_mode.devdocs.json'; diff --git a/api_docs/kbn_code_editor.mdx b/api_docs/kbn_code_editor.mdx index 8738fd7c818a6..170d196cb9f6a 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-06-27 +date: 2024-06-29 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 7c40db1374b32..6a616c46795d6 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-06-27 +date: 2024-06-29 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 419f5f53c38ef..788a8b97ae25c 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-06-27 +date: 2024-06-29 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 f06e8f940494b..9b656b7034af7 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-06-27 +date: 2024-06-29 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 65fd46e5f73dc..dc20112e0dcca 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-06-27 +date: 2024-06-29 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 4f239b8379d8e..03822d23a04bf 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-06-27 +date: 2024-06-29 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 563a0da08a520..29e45a635b80e 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-06-27 +date: 2024-06-29 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 21cd9d7136c8e..6e73ac203c7b3 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-06-27 +date: 2024-06-29 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_tabbed_table_list_view.mdx b/api_docs/kbn_content_management_tabbed_table_list_view.mdx index 8c857dc4ed0d6..1db277cded5d3 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-06-27 +date: 2024-06-29 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 2039ab5814c9e..b1c3f8aa67d93 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-06-27 +date: 2024-06-29 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 9716d1c640229..081858b8f854b 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-06-27 +date: 2024-06-29 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 7b9e40d6f66c1..82aeb3a088a30 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-06-27 +date: 2024-06-29 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 042ad2452a1f6..771368e16c52d 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-06-27 +date: 2024-06-29 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 edd77eb545cbb..4c3f859769bd2 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-06-27 +date: 2024-06-29 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 39750c189b184..2bdcb21161c4a 100644 --- a/api_docs/kbn_core_analytics_browser.devdocs.json +++ b/api_docs/kbn_core_analytics_browser.devdocs.json @@ -651,6 +651,10 @@ "plugin": "security", "path": "x-pack/plugins/security/server/analytics/analytics_service.ts" }, + { + "plugin": "actions", + "path": "x-pack/plugins/actions/server/lib/action_executor.ts" + }, { "plugin": "@kbn/cloud", "path": "packages/cloud/connection_details/kibana/kibana_connection_details_provider.tsx" @@ -703,6 +707,10 @@ "plugin": "observabilityAIAssistant", "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/analytics/index.ts" }, + { + "plugin": "integrationAssistant", + "path": "x-pack/plugins/integration_assistant/public/services/telemetry/service.ts" + }, { "plugin": "fleet", "path": "x-pack/plugins/fleet/server/services/telemetry/fleet_usage_sender.ts" @@ -1331,6 +1339,10 @@ "plugin": "@kbn/core-analytics-server-mocks", "path": "packages/core/analytics/core-analytics-server-mocks/src/analytics_service.mock.ts" }, + { + "plugin": "actions", + "path": "x-pack/plugins/actions/server/lib/action_executor.test.ts" + }, { "plugin": "@kbn/ebt", "path": "packages/analytics/ebt/client/src/analytics_client/mocks.ts" diff --git a/api_docs/kbn_core_analytics_browser.mdx b/api_docs/kbn_core_analytics_browser.mdx index 14152336ebc4f..eecd390df0fb3 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-06-27 +date: 2024-06-29 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 ac4d5ad7787fc..38a4b24e4ec42 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-06-27 +date: 2024-06-29 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 d35cc2e535c73..551f378be492b 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-06-27 +date: 2024-06-29 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 d65f4d6171a88..d9a4cef589320 100644 --- a/api_docs/kbn_core_analytics_server.devdocs.json +++ b/api_docs/kbn_core_analytics_server.devdocs.json @@ -651,6 +651,10 @@ "plugin": "security", "path": "x-pack/plugins/security/server/analytics/analytics_service.ts" }, + { + "plugin": "actions", + "path": "x-pack/plugins/actions/server/lib/action_executor.ts" + }, { "plugin": "@kbn/cloud", "path": "packages/cloud/connection_details/kibana/kibana_connection_details_provider.tsx" @@ -703,6 +707,10 @@ "plugin": "observabilityAIAssistant", "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/analytics/index.ts" }, + { + "plugin": "integrationAssistant", + "path": "x-pack/plugins/integration_assistant/public/services/telemetry/service.ts" + }, { "plugin": "fleet", "path": "x-pack/plugins/fleet/server/services/telemetry/fleet_usage_sender.ts" @@ -1331,6 +1339,10 @@ "plugin": "@kbn/core-analytics-server-mocks", "path": "packages/core/analytics/core-analytics-server-mocks/src/analytics_service.mock.ts" }, + { + "plugin": "actions", + "path": "x-pack/plugins/actions/server/lib/action_executor.test.ts" + }, { "plugin": "@kbn/ebt", "path": "packages/analytics/ebt/client/src/analytics_client/mocks.ts" diff --git a/api_docs/kbn_core_analytics_server.mdx b/api_docs/kbn_core_analytics_server.mdx index 65b164ce8fd8d..1509db148466c 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-06-27 +date: 2024-06-29 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 7cb300078cf77..5ddb90b0be972 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-06-27 +date: 2024-06-29 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 13b0e1d75ad75..12850d166ca01 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-06-27 +date: 2024-06-29 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 2e18d6346547e..f165aa99f1063 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-06-27 +date: 2024-06-29 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 9c8edfbdde6b3..20f003eb5c462 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-06-27 +date: 2024-06-29 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 063c2226fa09f..ad5a645c8edeb 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-06-27 +date: 2024-06-29 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 debf29dd67dc9..ced05032952f8 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-06-27 +date: 2024-06-29 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 9991163519d59..d3075749ef0aa 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-06-27 +date: 2024-06-29 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 163268cc21672..179fe9f255464 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-06-27 +date: 2024-06-29 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 698337ca38e0a..a99f0b5d4e7df 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-06-27 +date: 2024-06-29 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 9f53c2d0c7e88..c0e3a1e72f667 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-06-27 +date: 2024-06-29 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 487c9f64b0540..5885a63e01493 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-06-27 +date: 2024-06-29 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 0ce47657d6f39..0d327bc716bcf 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-06-27 +date: 2024-06-29 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 79a02419115e3..4ec160616978b 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-06-27 +date: 2024-06-29 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 7e98ac512388e..10a5aae9ddf5c 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-06-27 +date: 2024-06-29 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 d191a138ee8f3..6975f06960482 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-06-27 +date: 2024-06-29 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 ea7bcc82ac693..63e74da3c69e1 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-06-27 +date: 2024-06-29 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 c1022f4b48b73..dcffa36023468 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-06-27 +date: 2024-06-29 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.mdx b/api_docs/kbn_core_chrome_browser.mdx index e2f6d6ba5d035..017e6d0533e5d 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-chrome-browser'] --- import kbnCoreChromeBrowserObj from './kbn_core_chrome_browser.devdocs.json'; diff --git a/api_docs/kbn_core_chrome_browser_mocks.mdx b/api_docs/kbn_core_chrome_browser_mocks.mdx index d57df86591e2f..aaf4a47e832d4 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-06-27 +date: 2024-06-29 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 8bf81ea5ac3b2..3712642a26db9 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-06-27 +date: 2024-06-29 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 d58a7d7635fcd..10cc793ffcc67 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-06-27 +date: 2024-06-29 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 5739dc1278609..ac93010aa83b5 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-06-27 +date: 2024-06-29 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 95fec25112f4a..9e1193b6bf5d8 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-06-27 +date: 2024-06-29 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 0a1bbf1c179c7..a0a7d454d1aa6 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-06-27 +date: 2024-06-29 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 f8e79f791d9d2..54ce4e6fa9dd3 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-06-27 +date: 2024-06-29 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 3a7661a66ecb4..808ce26979f96 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-06-27 +date: 2024-06-29 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 3d1ee88553ea7..92e11bb2f6efe 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-06-27 +date: 2024-06-29 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 394d972c73c7c..d1808d4dcdf73 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-06-27 +date: 2024-06-29 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 8a4eed579de65..65563dc39f4a2 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-06-27 +date: 2024-06-29 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 f2560a3b5b588..1c3ea8396d648 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-06-27 +date: 2024-06-29 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 89ada91bcb82b..49b1e55361f6a 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-06-27 +date: 2024-06-29 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 611be3cf47c5a..6c02cf2816470 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-06-27 +date: 2024-06-29 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 e7ed1c05f8b69..ae91d5ac4646e 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-06-27 +date: 2024-06-29 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 1de96422f6385..4b206ac9ab04a 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-06-27 +date: 2024-06-29 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 d76893d72bf5b..3fe7277c56579 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-06-27 +date: 2024-06-29 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 1e89a89c198ca..dfa5a046a6c84 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-06-27 +date: 2024-06-29 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 7f5f8b46cb31d..57d3948bcb980 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-06-27 +date: 2024-06-29 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 5d5560e6e095b..119dbf61d5806 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-06-27 +date: 2024-06-29 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 9ab168013daf8..d4bbe7a6f7fe8 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-06-27 +date: 2024-06-29 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 130bc641ff2ec..c1e530e6a062f 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-06-27 +date: 2024-06-29 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 635f3da698ba3..2f4d8458bad4f 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-06-27 +date: 2024-06-29 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 adea55e5b48d8..3959f46b6ea2e 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-06-27 +date: 2024-06-29 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 94d118ee2add2..8342da915ca20 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-06-27 +date: 2024-06-29 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 e49d8dc8528cf..6684b48924fc1 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-06-27 +date: 2024-06-29 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 681b74ed34e5d..ea07cc7d7f9c2 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-06-27 +date: 2024-06-29 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 89e17e5b355e2..6b804747f3eb4 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-06-27 +date: 2024-06-29 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 5f2d7600e0b73..ddece1d90b5d9 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-06-27 +date: 2024-06-29 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 7a40116ebf2d5..f29e3d3854a79 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-06-27 +date: 2024-06-29 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 68d046b6e9c32..e9bc32f9e2375 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-06-27 +date: 2024-06-29 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 a74b1dbeb7c69..a3d3c63220fa8 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-06-27 +date: 2024-06-29 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 ceae2108eaa97..834d784d52705 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-06-27 +date: 2024-06-29 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 b3fc1256f1128..271bb191bce08 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-06-27 +date: 2024-06-29 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 e8d424d4b30a0..e63199b6c1436 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-06-27 +date: 2024-06-29 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 a8281760e16e0..7299b715aea78 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-06-27 +date: 2024-06-29 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_http_browser.mdx b/api_docs/kbn_core_http_browser.mdx index 9e28f28f76880..b522cf9a17869 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-06-27 +date: 2024-06-29 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 3ddb18d2126c9..dd75e9540c6fc 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-06-27 +date: 2024-06-29 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 21a8d3fb26e01..1e4ebbf7591a4 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-06-27 +date: 2024-06-29 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 2e10906af952b..812a72f9987a4 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-06-27 +date: 2024-06-29 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 a787918c0336d..bea41d87518e8 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-06-27 +date: 2024-06-29 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 cb8b4c02ef30e..4452bf197adaa 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-06-27 +date: 2024-06-29 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 37a22ecfbd395..e1088e0f9ace6 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-06-27 +date: 2024-06-29 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 3888225adea66..e0d408dd7237c 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-06-27 +date: 2024-06-29 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 440a9a93a2513..6ba4c1c0f4d85 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-06-27 +date: 2024-06-29 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 b912cf433706b..bf8de99b3ffdd 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-06-27 +date: 2024-06-29 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 56a536b9d37e2..12b8270da3cb4 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-06-27 +date: 2024-06-29 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.devdocs.json b/api_docs/kbn_core_http_server.devdocs.json index df694b330d87a..3ba2c76647c3b 100644 --- a/api_docs/kbn_core_http_server.devdocs.json +++ b/api_docs/kbn_core_http_server.devdocs.json @@ -14798,6 +14798,10 @@ "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/server/lib/timeline/routes/draft_timelines/get_draft_timelines/index.ts" }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/server/lib/timeline/routes/notes/get_notes.ts" + }, { "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/server/lib/security_integrations/cribl/routes/index.ts" @@ -15006,6 +15010,10 @@ "plugin": "ecsDataQualityDashboard", "path": "x-pack/plugins/ecs_data_quality_dashboard/server/__mocks__/server.ts" }, + { + "plugin": "integrationAssistant", + "path": "x-pack/plugins/integration_assistant/server/__mocks__/mock_server.ts" + }, { "plugin": "canvas", "path": "x-pack/plugins/canvas/server/routes/custom_elements/find.test.ts" @@ -15349,6 +15357,10 @@ "plugin": "ecsDataQualityDashboard", "path": "x-pack/plugins/ecs_data_quality_dashboard/server/__mocks__/server.ts" }, + { + "plugin": "integrationAssistant", + "path": "x-pack/plugins/integration_assistant/server/__mocks__/mock_server.ts" + }, { "plugin": "canvas", "path": "x-pack/plugins/canvas/server/routes/custom_elements/update.test.ts" @@ -16412,6 +16424,10 @@ "plugin": "ecsDataQualityDashboard", "path": "x-pack/plugins/ecs_data_quality_dashboard/server/__mocks__/server.ts" }, + { + "plugin": "integrationAssistant", + "path": "x-pack/plugins/integration_assistant/server/__mocks__/mock_server.ts" + }, { "plugin": "canvas", "path": "x-pack/plugins/canvas/server/routes/custom_elements/create.test.ts" @@ -16558,6 +16574,10 @@ { "plugin": "ecsDataQualityDashboard", "path": "x-pack/plugins/ecs_data_quality_dashboard/server/__mocks__/server.ts" + }, + { + "plugin": "integrationAssistant", + "path": "x-pack/plugins/integration_assistant/server/__mocks__/mock_server.ts" } ], "returnComment": [], @@ -16822,6 +16842,10 @@ "plugin": "ecsDataQualityDashboard", "path": "x-pack/plugins/ecs_data_quality_dashboard/server/__mocks__/server.ts" }, + { + "plugin": "integrationAssistant", + "path": "x-pack/plugins/integration_assistant/server/__mocks__/mock_server.ts" + }, { "plugin": "canvas", "path": "x-pack/plugins/canvas/server/routes/custom_elements/delete.test.ts" diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index 31da9a28a0f76..94d8029051d21 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-06-27 +date: 2024-06-29 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 247beaf6a24b3..4be20318917ff 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-06-27 +date: 2024-06-29 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 78c4ac91a5ff5..ad20ff9d895eb 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-06-27 +date: 2024-06-29 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 c98e8d259572e..dcbae1a747147 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-06-27 +date: 2024-06-29 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 4997e9b9b4189..63762fc7eb367 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-06-27 +date: 2024-06-29 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 5d96a73bba948..b6d911633838d 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-06-27 +date: 2024-06-29 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 2a3dede45edef..cfcddc7e4d1e6 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-06-27 +date: 2024-06-29 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 066b450114a81..df8dcb5c46234 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-06-27 +date: 2024-06-29 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 f8103bb2a00a1..7f533a196ef8f 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-06-27 +date: 2024-06-29 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 57bc944f27ce5..382a6015fe7c2 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-06-27 +date: 2024-06-29 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 fe89b702a38b2..c492077ee4a3a 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-06-27 +date: 2024-06-29 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 ee26e32bb0a2e..042a640c74da0 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-06-27 +date: 2024-06-29 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 dda6401cbe8d6..b3a5ff753bcc2 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-06-27 +date: 2024-06-29 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 9c788a541fe0e..8aa9dcf9ae9e4 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-06-27 +date: 2024-06-29 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 81e0d4dc61558..61d4806a9f959 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-06-27 +date: 2024-06-29 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 673b2df0477cc..323176bd0054d 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-06-27 +date: 2024-06-29 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 ac84ee5ece5b8..ea14bf5a73442 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-06-27 +date: 2024-06-29 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 e0b6c8f36e321..edaa3736cc19a 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-06-27 +date: 2024-06-29 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 01700240f2b4b..e0538342de411 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-06-27 +date: 2024-06-29 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 2313fac9ead42..f93329970f1f0 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-06-27 +date: 2024-06-29 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 541a23184b942..f8b6bad9f403d 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-06-27 +date: 2024-06-29 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 ea561e0766b24..800ddb3ffae69 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-06-27 +date: 2024-06-29 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 0da6317b881bb..f782685751b26 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-06-27 +date: 2024-06-29 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 e9f08dc3fa6df..51026687dcac9 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-06-27 +date: 2024-06-29 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 2eefd91215c45..49332a21d6287 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-06-27 +date: 2024-06-29 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 feaedeb8aed02..379832a984b80 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-06-27 +date: 2024-06-29 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 e656b0edef73b..05dd7b871a27d 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-06-27 +date: 2024-06-29 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 18a51885f4395..0dfece7c58120 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-06-27 +date: 2024-06-29 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 31f3591d61dd0..435722411ef8f 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-06-27 +date: 2024-06-29 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 20c3ae5bea6c0..80fdb376b2699 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-06-27 +date: 2024-06-29 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 55f807652a11f..25e3073ec4461 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-06-27 +date: 2024-06-29 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 ce3bf91217411..15d480e4bf8ee 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-06-27 +date: 2024-06-29 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 2fce259d03de8..a037b9ddab918 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-06-27 +date: 2024-06-29 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 e545df2674dfa..37c8e5814ebb6 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-06-27 +date: 2024-06-29 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 fe68d9c987369..8d81b7702924b 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-06-27 +date: 2024-06-29 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 c875c333b7281..dfc051e8f622b 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-06-27 +date: 2024-06-29 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 3a7f0d68026b5..052da752c1a4e 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-06-27 +date: 2024-06-29 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 df7b2c58a69f5..e52bc9257af32 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-06-27 +date: 2024-06-29 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 5ab96279cc13b..482fbf5611af8 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-06-27 +date: 2024-06-29 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 3f57671fea71b..852878215d70d 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-06-27 +date: 2024-06-29 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 34db246dc64a4..e029fc0456d72 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-06-27 +date: 2024-06-29 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 29ed0899a23bf..ca8888550f2e3 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-06-27 +date: 2024-06-29 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 2dce5199bb71d..19306387d1fcc 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-06-27 +date: 2024-06-29 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 7b6c7e56e6408..187bbb0564f89 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-06-27 +date: 2024-06-29 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 5f2631c4a3e8e..90457862834ae 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-06-27 +date: 2024-06-29 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 f98c627e0b607..87040268b7e2e 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-06-27 +date: 2024-06-29 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 91f6cd9de93e4..7b5f6af55871e 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-06-27 +date: 2024-06-29 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 377e9f35b3136..e5bb1cbaef456 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-06-27 +date: 2024-06-29 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 e745ca1c4ab21..3871b997f9fa7 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-06-27 +date: 2024-06-29 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 228f48ad7d009..28bf2513a4f4e 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-06-27 +date: 2024-06-29 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 e8ade08d0c4ab..1dfd391c76ca3 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-06-27 +date: 2024-06-29 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 fcc94f2ea2f53..7811d13026f4a 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-06-27 +date: 2024-06-29 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 4d9308d76a9ec..58fceebfb41fa 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-06-27 +date: 2024-06-29 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 70b166c51e811..58ebce545707f 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-06-27 +date: 2024-06-29 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 d5c9417b01b92..cb3fe61c05849 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-06-27 +date: 2024-06-29 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 9f487732fc2cc..0aab9f8221f15 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-06-27 +date: 2024-06-29 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 99a48284b1c91..a775eed798cb3 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-06-27 +date: 2024-06-29 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 a897cf7c6b000..216f1c6681173 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-06-27 +date: 2024-06-29 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 b12df3139c943..c4548e53af6a0 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-06-27 +date: 2024-06-29 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 1ebc697f3b53b..fde7f1e54a514 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-06-27 +date: 2024-06-29 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 1c4483af3f6b4..1e6079fbdb0f2 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-06-27 +date: 2024-06-29 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.mdx b/api_docs/kbn_core_saved_objects_server_internal.mdx index e0d376d011e95..f2496e78c7635 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server-internal'] --- import kbnCoreSavedObjectsServerInternalObj from './kbn_core_saved_objects_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server_mocks.mdx b/api_docs/kbn_core_saved_objects_server_mocks.mdx index 415f8a6628307..c1dc647749a72 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-06-27 +date: 2024-06-29 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 6ca1afe4eb7cf..e50a285d78204 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-06-27 +date: 2024-06-29 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 12ac4d5c99d48..e78d5b65016b7 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-06-27 +date: 2024-06-29 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 4d938a2037b44..b4c371df3cb64 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-06-27 +date: 2024-06-29 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 442a74b8373cf..5cb043b4c8fb4 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-06-27 +date: 2024-06-29 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 a07160761e011..3893e6f685e78 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-06-27 +date: 2024-06-29 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 8ebf15051ff0c..b2ba358769285 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-06-27 +date: 2024-06-29 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 977391df688e6..124b72a99dc99 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-06-27 +date: 2024-06-29 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 13e695d33b3b9..d8e39739400a1 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-06-27 +date: 2024-06-29 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 9933b0f152da0..3d2d4082dbf96 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-06-27 +date: 2024-06-29 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 7e78a851294e0..2d4e1d85de69d 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-06-27 +date: 2024-06-29 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 d99d1f7a50fbf..d0d09f3270603 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-06-27 +date: 2024-06-29 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 4dc604078f9b6..90c9acef6cf75 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-06-27 +date: 2024-06-29 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 fb3c53922d9f3..157e116cd80b0 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-06-27 +date: 2024-06-29 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 21d5f2c39b1b2..0dc7cd20288aa 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-06-27 +date: 2024-06-29 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 7e1f495c3bd39..8dd893a58848d 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-06-27 +date: 2024-06-29 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 dbbb108decf47..681f2ddd449de 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-06-27 +date: 2024-06-29 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 6fc4a24260c41..521f5ca0c7d90 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-06-27 +date: 2024-06-29 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 d275ce54aa0c4..def1b3685d0d2 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-06-27 +date: 2024-06-29 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 4801a55f052e1..52bf0e32a18d1 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-06-27 +date: 2024-06-29 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 1f02da58b4d5b..071d44929a41a 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-06-27 +date: 2024-06-29 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 83f4681646978..c4697007b6f4f 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-06-27 +date: 2024-06-29 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 6805ba684df04..49a8e03bc18fa 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-06-27 +date: 2024-06-29 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 6ae906f5c5a35..c966e3ae649e5 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-06-27 +date: 2024-06-29 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 da08d28f18127..2d8c2dec1173a 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-06-27 +date: 2024-06-29 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 d9d9ea2b35622..3fe744b96ae4f 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-06-27 +date: 2024-06-29 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 3032f13c0e138..806e6a7e8b393 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-06-27 +date: 2024-06-29 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 91d8b0fc0bc41..6263261ea8597 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-06-27 +date: 2024-06-29 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 2d5500a7a5739..6521fe2541a2e 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-06-27 +date: 2024-06-29 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 2b1742dc1d501..963487f6a43fd 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-06-27 +date: 2024-06-29 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 eb6d8f500ce6f..2b7935a84a8a3 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-06-27 +date: 2024-06-29 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 f764dc93e38c8..1daf358976e41 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-06-27 +date: 2024-06-29 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 43d7456d469d0..4d7ece985e012 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-06-27 +date: 2024-06-29 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 7ecf7d424b44c..8d3b40fcfb832 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-06-27 +date: 2024-06-29 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 639909ae4fc1d..dd71a24df206e 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-06-27 +date: 2024-06-29 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 f5e186ca6efc8..cacc58012491e 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-06-27 +date: 2024-06-29 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 8ea6052ea144b..0c772d2ab5d67 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-06-27 +date: 2024-06-29 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 9191088b33847..5a9ed2dc7719f 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-06-27 +date: 2024-06-29 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 145b4225613be..b7ec7fcc1ecaa 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-06-27 +date: 2024-06-29 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 ea584711c2850..dfc1cde71bc4a 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-06-27 +date: 2024-06-29 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 44f6119d2f0bb..e4c7d18e0dc8f 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-06-27 +date: 2024-06-29 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 066e8eb059eb5..45ad05516534d 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-06-27 +date: 2024-06-29 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 fe62df7b13205..176fc2b4cd8fd 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-06-27 +date: 2024-06-29 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 a79cb3b9424b1..00252333394fa 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-06-27 +date: 2024-06-29 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 9faabedd76648..4568730b74e09 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-06-27 +date: 2024-06-29 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 19110654dfc52..d086abcbd2069 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-06-27 +date: 2024-06-29 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 b206fd3e236fa..0a8e2010a5e73 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-06-27 +date: 2024-06-29 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 e8d87a82b8960..5b381c4f89352 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-06-27 +date: 2024-06-29 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 96014e8dec0eb..186ce951ef7b9 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-06-27 +date: 2024-06-29 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 99786e6f877c7..d54d479f8f22e 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-06-27 +date: 2024-06-29 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 6fcaaac311d04..f6f4827f57943 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-06-27 +date: 2024-06-29 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 d40219dcaa29f..6498e1820954d 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-06-27 +date: 2024-06-29 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 3b5b59c01c387..f7bfae41e863d 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-06-27 +date: 2024-06-29 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 d6b0392a052fe..6980c7283b297 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-06-27 +date: 2024-06-29 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 d369797ce083f..2b6740dfd4bcf 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-06-27 +date: 2024-06-29 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 2ee1bc011b475..36f930070071e 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-06-27 +date: 2024-06-29 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 b5ca2962de35a..abe17442e3099 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-06-27 +date: 2024-06-29 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 4d6df126e3678..6b788269c6ae1 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-06-27 +date: 2024-06-29 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 20bdb711ab1c5..24d1e14accff2 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-06-27 +date: 2024-06-29 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 8d2082ce8af03..35028a3e267f7 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-06-27 +date: 2024-06-29 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 efad7a0fbb359..eca0518b8676f 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-06-27 +date: 2024-06-29 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 778c02c8bfd61..f0807dc4e7ab7 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-06-27 +date: 2024-06-29 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 f4d799219b1d3..109bd7d72bd35 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-06-27 +date: 2024-06-29 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 836d43136afc8..f741e25bd891c 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-06-27 +date: 2024-06-29 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 02b3165046c71..21119753a1cee 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-06-27 +date: 2024-06-29 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 eebe3d53bda8e..d6adb46c48cf3 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-06-27 +date: 2024-06-29 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 1d47739ee213a..fa0a1d0df5226 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-06-27 +date: 2024-06-29 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 fbfc4cce53ced..23243db7c88c7 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-06-27 +date: 2024-06-29 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 4aac68ae01bfc..cf8a88d0e505a 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-06-27 +date: 2024-06-29 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 291e6feea78cb..c5c0e93c28ce4 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-06-27 +date: 2024-06-29 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 b903d5840df95..64afe12111035 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-06-27 +date: 2024-06-29 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 37079204cdb60..e70b968c6d233 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-06-27 +date: 2024-06-29 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.devdocs.json b/api_docs/kbn_ebt.devdocs.json index 82e5dbb2ad965..6a608e785f53d 100644 --- a/api_docs/kbn_ebt.devdocs.json +++ b/api_docs/kbn_ebt.devdocs.json @@ -1786,6 +1786,10 @@ "plugin": "security", "path": "x-pack/plugins/security/server/analytics/analytics_service.ts" }, + { + "plugin": "actions", + "path": "x-pack/plugins/actions/server/lib/action_executor.ts" + }, { "plugin": "@kbn/cloud", "path": "packages/cloud/connection_details/kibana/kibana_connection_details_provider.tsx" @@ -1838,6 +1842,10 @@ "plugin": "observabilityAIAssistant", "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/analytics/index.ts" }, + { + "plugin": "integrationAssistant", + "path": "x-pack/plugins/integration_assistant/public/services/telemetry/service.ts" + }, { "plugin": "fleet", "path": "x-pack/plugins/fleet/server/services/telemetry/fleet_usage_sender.ts" @@ -2322,6 +2330,10 @@ "plugin": "@kbn/core-analytics-server-mocks", "path": "packages/core/analytics/core-analytics-server-mocks/src/analytics_service.mock.ts" }, + { + "plugin": "actions", + "path": "x-pack/plugins/actions/server/lib/action_executor.test.ts" + }, { "plugin": "@kbn/core-analytics-browser-internal", "path": "packages/core/analytics/core-analytics-browser-internal/src/analytics_service.test.mocks.ts" diff --git a/api_docs/kbn_ebt.mdx b/api_docs/kbn_ebt.mdx index 9b4fe7bfb759f..4364b48e94710 100644 --- a/api_docs/kbn_ebt.mdx +++ b/api_docs/kbn_ebt.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ebt title: "@kbn/ebt" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ebt plugin -date: 2024-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ebt'] --- import kbnEbtObj from './kbn_ebt.devdocs.json'; diff --git a/api_docs/kbn_ebt_tools.mdx b/api_docs/kbn_ebt_tools.mdx index 37014336cd5be..6617cd9992512 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-06-27 +date: 2024-06-29 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 bf2228c79eb89..e3d86df01b0b0 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-06-27 +date: 2024-06-29 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 2180b9d17025d..5e6647beacc13 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-06-27 +date: 2024-06-29 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.devdocs.json b/api_docs/kbn_elastic_assistant.devdocs.json index edb7425fa9508..c85859f2fe60a 100644 --- a/api_docs/kbn_elastic_assistant.devdocs.json +++ b/api_docs/kbn_elastic_assistant.devdocs.json @@ -159,7 +159,7 @@ "label": "AssistantProvider", "description": [], "signature": [ - "({ actionTypeRegistry, alertsIndexPattern, assistantAvailability, assistantTelemetry, augmentMessageCodeBlocks, docLinks, basePath, basePromptContexts, baseQuickPrompts, baseSystemPrompts, children, getComments, http, baseConversations, nameSpace, title, toasts, }: React.PropsWithChildren<", + "({ actionTypeRegistry, alertsIndexPattern, assistantAvailability, assistantTelemetry, augmentMessageCodeBlocks, docLinks, basePath, basePromptContexts, baseQuickPrompts, baseSystemPrompts, children, getComments, http, baseConversations, navigateToApp, nameSpace, title, toasts, }: React.PropsWithChildren<", "AssistantProviderProps", ">) => JSX.Element" ], @@ -172,7 +172,7 @@ "id": "def-public.AssistantProvider.$1", "type": "CompoundType", "tags": [], - "label": "{\n actionTypeRegistry,\n alertsIndexPattern,\n assistantAvailability,\n assistantTelemetry,\n augmentMessageCodeBlocks,\n docLinks,\n basePath,\n basePromptContexts = [],\n baseQuickPrompts = [],\n baseSystemPrompts = BASE_SYSTEM_PROMPTS,\n children,\n getComments,\n http,\n baseConversations,\n nameSpace = DEFAULT_ASSISTANT_NAMESPACE,\n title = DEFAULT_ASSISTANT_TITLE,\n toasts,\n}", + "label": "{\n actionTypeRegistry,\n alertsIndexPattern,\n assistantAvailability,\n assistantTelemetry,\n augmentMessageCodeBlocks,\n docLinks,\n basePath,\n basePromptContexts = [],\n baseQuickPrompts = [],\n baseSystemPrompts = BASE_SYSTEM_PROMPTS,\n children,\n getComments,\n http,\n baseConversations,\n navigateToApp,\n nameSpace = DEFAULT_ASSISTANT_NAMESPACE,\n title = DEFAULT_ASSISTANT_TITLE,\n toasts,\n}", "description": [], "signature": [ "React.PropsWithChildren<", @@ -2291,6 +2291,20 @@ "path": "x-pack/packages/kbn-elastic-assistant/impl/assistant/types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "@kbn/elastic-assistant", + "id": "def-public.Prompt.label", + "type": "string", + "tags": [], + "label": "label", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "x-pack/packages/kbn-elastic-assistant/impl/assistant/types.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/kbn_elastic_assistant.mdx b/api_docs/kbn_elastic_assistant.mdx index 0e25df287ab9c..5ac68007aff93 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant'] --- import kbnElasticAssistantObj from './kbn_elastic_assistant.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/ | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 165 | 0 | 138 | 9 | +| 166 | 0 | 139 | 9 | ## Client diff --git a/api_docs/kbn_elastic_assistant_common.devdocs.json b/api_docs/kbn_elastic_assistant_common.devdocs.json index 2e245eee05c74..96ae9d0c04f2d 100644 --- a/api_docs/kbn_elastic_assistant_common.devdocs.json +++ b/api_docs/kbn_elastic_assistant_common.devdocs.json @@ -983,7 +983,7 @@ "label": "AttackDiscoveryGetResponse", "description": [], "signature": [ - "{ entryExists: boolean; data?: { id: string; namespace: string; createdAt: string; status: \"running\" | \"succeeded\" | \"failed\" | \"canceled\"; users: { id?: string | undefined; name?: string | undefined; }[]; apiConfig: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }; attackDiscoveries: { timestamp: string; title: string; alertIds: string[]; detailsMarkdown: string; entitySummaryMarkdown: string; summaryMarkdown: string; id?: string | undefined; mitreAttackTactics?: string[] | undefined; }[]; backingIndex: string; generationIntervals: { date: string; durationMs: number; }[]; averageIntervalMs: number; timestamp?: string | undefined; updatedAt?: string | undefined; alertsContextCount?: number | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; failureReason?: string | undefined; } | undefined; }" + "{ data?: { id: string; namespace: string; createdAt: string; status: \"running\" | \"succeeded\" | \"failed\" | \"canceled\"; users: { id?: string | undefined; name?: string | undefined; }[]; apiConfig: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }; attackDiscoveries: { timestamp: string; title: string; alertIds: string[]; detailsMarkdown: string; entitySummaryMarkdown: string; summaryMarkdown: string; id?: string | undefined; mitreAttackTactics?: string[] | undefined; }[]; backingIndex: string; generationIntervals: { date: string; durationMs: number; }[]; averageIntervalMs: number; timestamp?: string | undefined; updatedAt?: string | undefined; alertsContextCount?: number | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; failureReason?: string | undefined; } | undefined; }" ], "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/attack_discovery/get_attack_discovery_route.gen.ts", "deprecated": false, @@ -3387,7 +3387,7 @@ "label": "AttackDiscoveryGetResponse", "description": [], "signature": [ - "Zod.ZodObject<{ data: Zod.ZodOptional; updatedAt: Zod.ZodOptional; alertsContextCount: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodString, \"strip\">>>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; status: Zod.ZodEnum<[\"running\", \"succeeded\", \"failed\", \"canceled\"]>; attackDiscoveries: Zod.ZodArray; id: Zod.ZodOptional; detailsMarkdown: Zod.ZodString; entitySummaryMarkdown: Zod.ZodString; mitreAttackTactics: Zod.ZodOptional>; summaryMarkdown: Zod.ZodString; title: Zod.ZodString; timestamp: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; title: string; alertIds: string[]; detailsMarkdown: string; entitySummaryMarkdown: string; summaryMarkdown: string; id?: string | undefined; mitreAttackTactics?: string[] | undefined; }, { timestamp: string; title: string; alertIds: string[]; detailsMarkdown: string; entitySummaryMarkdown: string; summaryMarkdown: string; id?: string | undefined; mitreAttackTactics?: string[] | undefined; }>, \"many\">; apiConfig: Zod.ZodObject<{ connectorId: Zod.ZodString; actionTypeId: Zod.ZodString; defaultSystemPromptId: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>; namespace: Zod.ZodString; backingIndex: Zod.ZodString; generationIntervals: Zod.ZodArray, \"many\">; averageIntervalMs: Zod.ZodNumber; failureReason: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; createdAt: string; status: \"running\" | \"succeeded\" | \"failed\" | \"canceled\"; users: { id?: string | undefined; name?: string | undefined; }[]; apiConfig: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }; attackDiscoveries: { timestamp: string; title: string; alertIds: string[]; detailsMarkdown: string; entitySummaryMarkdown: string; summaryMarkdown: string; id?: string | undefined; mitreAttackTactics?: string[] | undefined; }[]; backingIndex: string; generationIntervals: { date: string; durationMs: number; }[]; averageIntervalMs: number; timestamp?: string | undefined; updatedAt?: string | undefined; alertsContextCount?: number | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; failureReason?: string | undefined; }, { id: string; namespace: string; createdAt: string; status: \"running\" | \"succeeded\" | \"failed\" | \"canceled\"; users: { id?: string | undefined; name?: string | undefined; }[]; apiConfig: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }; attackDiscoveries: { timestamp: string; title: string; alertIds: string[]; detailsMarkdown: string; entitySummaryMarkdown: string; summaryMarkdown: string; id?: string | undefined; mitreAttackTactics?: string[] | undefined; }[]; backingIndex: string; generationIntervals: { date: string; durationMs: number; }[]; averageIntervalMs: number; timestamp?: string | undefined; updatedAt?: string | undefined; alertsContextCount?: number | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; failureReason?: string | undefined; }>>; entryExists: Zod.ZodBoolean; }, \"strip\", Zod.ZodTypeAny, { entryExists: boolean; data?: { id: string; namespace: string; createdAt: string; status: \"running\" | \"succeeded\" | \"failed\" | \"canceled\"; users: { id?: string | undefined; name?: string | undefined; }[]; apiConfig: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }; attackDiscoveries: { timestamp: string; title: string; alertIds: string[]; detailsMarkdown: string; entitySummaryMarkdown: string; summaryMarkdown: string; id?: string | undefined; mitreAttackTactics?: string[] | undefined; }[]; backingIndex: string; generationIntervals: { date: string; durationMs: number; }[]; averageIntervalMs: number; timestamp?: string | undefined; updatedAt?: string | undefined; alertsContextCount?: number | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; failureReason?: string | undefined; } | undefined; }, { entryExists: boolean; data?: { id: string; namespace: string; createdAt: string; status: \"running\" | \"succeeded\" | \"failed\" | \"canceled\"; users: { id?: string | undefined; name?: string | undefined; }[]; apiConfig: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }; attackDiscoveries: { timestamp: string; title: string; alertIds: string[]; detailsMarkdown: string; entitySummaryMarkdown: string; summaryMarkdown: string; id?: string | undefined; mitreAttackTactics?: string[] | undefined; }[]; backingIndex: string; generationIntervals: { date: string; durationMs: number; }[]; averageIntervalMs: number; timestamp?: string | undefined; updatedAt?: string | undefined; alertsContextCount?: number | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; failureReason?: string | undefined; } | undefined; }>" + "Zod.ZodObject<{ data: Zod.ZodOptional; updatedAt: Zod.ZodOptional; alertsContextCount: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodString, \"strip\">>>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; status: Zod.ZodEnum<[\"running\", \"succeeded\", \"failed\", \"canceled\"]>; attackDiscoveries: Zod.ZodArray; id: Zod.ZodOptional; detailsMarkdown: Zod.ZodString; entitySummaryMarkdown: Zod.ZodString; mitreAttackTactics: Zod.ZodOptional>; summaryMarkdown: Zod.ZodString; title: Zod.ZodString; timestamp: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; title: string; alertIds: string[]; detailsMarkdown: string; entitySummaryMarkdown: string; summaryMarkdown: string; id?: string | undefined; mitreAttackTactics?: string[] | undefined; }, { timestamp: string; title: string; alertIds: string[]; detailsMarkdown: string; entitySummaryMarkdown: string; summaryMarkdown: string; id?: string | undefined; mitreAttackTactics?: string[] | undefined; }>, \"many\">; apiConfig: Zod.ZodObject<{ connectorId: Zod.ZodString; actionTypeId: Zod.ZodString; defaultSystemPromptId: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>; namespace: Zod.ZodString; backingIndex: Zod.ZodString; generationIntervals: Zod.ZodArray, \"many\">; averageIntervalMs: Zod.ZodNumber; failureReason: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; createdAt: string; status: \"running\" | \"succeeded\" | \"failed\" | \"canceled\"; users: { id?: string | undefined; name?: string | undefined; }[]; apiConfig: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }; attackDiscoveries: { timestamp: string; title: string; alertIds: string[]; detailsMarkdown: string; entitySummaryMarkdown: string; summaryMarkdown: string; id?: string | undefined; mitreAttackTactics?: string[] | undefined; }[]; backingIndex: string; generationIntervals: { date: string; durationMs: number; }[]; averageIntervalMs: number; timestamp?: string | undefined; updatedAt?: string | undefined; alertsContextCount?: number | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; failureReason?: string | undefined; }, { id: string; namespace: string; createdAt: string; status: \"running\" | \"succeeded\" | \"failed\" | \"canceled\"; users: { id?: string | undefined; name?: string | undefined; }[]; apiConfig: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }; attackDiscoveries: { timestamp: string; title: string; alertIds: string[]; detailsMarkdown: string; entitySummaryMarkdown: string; summaryMarkdown: string; id?: string | undefined; mitreAttackTactics?: string[] | undefined; }[]; backingIndex: string; generationIntervals: { date: string; durationMs: number; }[]; averageIntervalMs: number; timestamp?: string | undefined; updatedAt?: string | undefined; alertsContextCount?: number | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; failureReason?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { data?: { id: string; namespace: string; createdAt: string; status: \"running\" | \"succeeded\" | \"failed\" | \"canceled\"; users: { id?: string | undefined; name?: string | undefined; }[]; apiConfig: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }; attackDiscoveries: { timestamp: string; title: string; alertIds: string[]; detailsMarkdown: string; entitySummaryMarkdown: string; summaryMarkdown: string; id?: string | undefined; mitreAttackTactics?: string[] | undefined; }[]; backingIndex: string; generationIntervals: { date: string; durationMs: number; }[]; averageIntervalMs: number; timestamp?: string | undefined; updatedAt?: string | undefined; alertsContextCount?: number | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; failureReason?: string | undefined; } | undefined; }, { data?: { id: string; namespace: string; createdAt: string; status: \"running\" | \"succeeded\" | \"failed\" | \"canceled\"; users: { id?: string | undefined; name?: string | undefined; }[]; apiConfig: { connectorId: string; actionTypeId: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }; attackDiscoveries: { timestamp: string; title: string; alertIds: string[]; detailsMarkdown: string; entitySummaryMarkdown: string; summaryMarkdown: string; id?: string | undefined; mitreAttackTactics?: string[] | undefined; }[]; backingIndex: string; generationIntervals: { date: string; durationMs: number; }[]; averageIntervalMs: number; timestamp?: string | undefined; updatedAt?: string | undefined; alertsContextCount?: number | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; failureReason?: string | undefined; } | undefined; }>" ], "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/attack_discovery/get_attack_discovery_route.gen.ts", "deprecated": false, @@ -4958,4 +4958,4 @@ } ] } -} \ No newline at end of file +} diff --git a/api_docs/kbn_elastic_assistant_common.mdx b/api_docs/kbn_elastic_assistant_common.mdx index 69a6e5a28dcd4..53573351eb5cb 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-06-27 +date: 2024-06-29 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 3e4be2f2a7487..ce9c1e6758ab4 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-06-27 +date: 2024-06-29 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 4ca6499a198fd..0261ccb17987c 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-06-27 +date: 2024-06-29 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 72c66eecd1015..7ec81ffb1ef0a 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-06-27 +date: 2024-06-29 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 5ae6374455303..a74b91a72272f 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-06-27 +date: 2024-06-29 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 956090cf3e8db..0eb13fd6699d4 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-06-27 +date: 2024-06-29 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 eb49930025745..f5e1272c398ac 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-06-27 +date: 2024-06-29 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 95347d0a0e181..63ec260fbd6dc 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-06-27 +date: 2024-06-29 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 b60f50d8c1005..5e17da9b55561 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-ast'] --- import kbnEsqlAstObj from './kbn_esql_ast.devdocs.json'; diff --git a/api_docs/kbn_esql_utils.mdx b/api_docs/kbn_esql_utils.mdx index 47cd580854145..b7f6b9d5852cd 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-06-27 +date: 2024-06-29 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 009abec822be6..c4ffd0abae267 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-06-27 +date: 2024-06-29 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 9efa5dfbeac91..e74c70bb345bb 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-06-27 +date: 2024-06-29 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 94d7bb4c8b936..3bbdbec46ab1f 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-06-27 +date: 2024-06-29 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 2b6dcd7f959c8..116dc037842e0 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-06-27 +date: 2024-06-29 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 be24aa2cd71a0..b9d04dcd2e269 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-06-27 +date: 2024-06-29 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 dd67586fb6438..0d7b3960a9d86 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-06-27 +date: 2024-06-29 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 8cd3ebf400d2f..1473eac64b5b4 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-06-27 +date: 2024-06-29 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 36a7b21e9270d..805fff502f321 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-06-27 +date: 2024-06-29 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 48f9eabd38d7e..6c8adbcc1551f 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-06-27 +date: 2024-06-29 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 0118717bb080f..8742eff5c7287 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-06-27 +date: 2024-06-29 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 0995924c3cadb..b6fd436c0a3ff 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-06-27 +date: 2024-06-29 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 0411c724bce2e..585eadadf0b8b 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-06-27 +date: 2024-06-29 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 81ea5f92a9523..8b2fc2558d85e 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv'] --- import kbnGenerateCsvObj from './kbn_generate_csv.devdocs.json'; diff --git a/api_docs/kbn_grouping.mdx b/api_docs/kbn_grouping.mdx index d3a5016409d6f..812df52b659ef 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-06-27 +date: 2024-06-29 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 3a369dd86db1d..980c4e73e278e 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-06-27 +date: 2024-06-29 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 7f1c4ee605f10..30b096fbffc53 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-06-27 +date: 2024-06-29 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 776a461781dc1..8b2c6394ffe9c 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-06-27 +date: 2024-06-29 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 9dc77af5e1ae0..64297db8f9b1e 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-06-27 +date: 2024-06-29 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 a16601865d71c..e3fe5578ba375 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-06-27 +date: 2024-06-29 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 3dde42c994096..49da5aceb83c3 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-06-27 +date: 2024-06-29 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 6c3d3729674e4..4860fef10d487 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-06-27 +date: 2024-06-29 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 c32c89bff0da2..e0d9a2539e0ea 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-06-27 +date: 2024-06-29 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 a8e3c57651290..b22e26feaad14 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] --- import kbnImportResolverObj from './kbn_import_resolver.devdocs.json'; diff --git a/api_docs/kbn_index_management.mdx b/api_docs/kbn_index_management.mdx index e23b2b0227f90..6e407ace8a8df 100644 --- a/api_docs/kbn_index_management.mdx +++ b/api_docs/kbn_index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-index-management title: "@kbn/index-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/index-management plugin -date: 2024-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/index-management'] --- import kbnIndexManagementObj from './kbn_index_management.devdocs.json'; diff --git a/api_docs/kbn_inference_integration_flyout.mdx b/api_docs/kbn_inference_integration_flyout.mdx index faa3f342737ac..2f615365c2328 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-06-27 +date: 2024-06-29 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 2e0df77cf5649..144fe55a44a74 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-06-27 +date: 2024-06-29 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 3fa85bcb7c410..3c8a443904a51 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/interpreter'] --- import kbnInterpreterObj from './kbn_interpreter.devdocs.json'; diff --git a/api_docs/kbn_io_ts_utils.mdx b/api_docs/kbn_io_ts_utils.mdx index 04aedbd9eea0a..ef58f001144c9 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-06-27 +date: 2024-06-29 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 5fae35be8900f..a0b5352cb941a 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-06-27 +date: 2024-06-29 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 ef870cc54d6fb..62db478702239 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-06-27 +date: 2024-06-29 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 93dc189684b28..6aaf038c061d6 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-06-27 +date: 2024-06-29 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 a84d4b246ff64..0cc2134bbcd57 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-06-27 +date: 2024-06-29 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 5baadee184b45..36b3d66086279 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-06-27 +date: 2024-06-29 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 dda31ed4c9303..f225b3e7acad3 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-06-27 +date: 2024-06-29 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_popover.mdx b/api_docs/kbn_language_documentation_popover.mdx index 4ea513694a701..4e33fed366807 100644 --- a/api_docs/kbn_language_documentation_popover.mdx +++ b/api_docs/kbn_language_documentation_popover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-language-documentation-popover title: "@kbn/language-documentation-popover" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/language-documentation-popover plugin -date: 2024-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/language-documentation-popover'] --- import kbnLanguageDocumentationPopoverObj from './kbn_language_documentation_popover.devdocs.json'; diff --git a/api_docs/kbn_lens_embeddable_utils.mdx b/api_docs/kbn_lens_embeddable_utils.mdx index 3a6c6df581abb..8d91cafdb7ee7 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-06-27 +date: 2024-06-29 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 f35c7650cc906..ef78af397d76e 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-06-27 +date: 2024-06-29 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 b59734b96b624..91dd5aeb8bd74 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-06-27 +date: 2024-06-29 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 9a9607c09f0d6..d774413cc3856 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-06-27 +date: 2024-06-29 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 a4f46af6d935f..6a3517374371d 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-06-27 +date: 2024-06-29 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 e4aa1218bf53a..a65dae67d6191 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-06-27 +date: 2024-06-29 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.devdocs.json b/api_docs/kbn_management_cards_navigation.devdocs.json index 6e5588dff2455..7d589a0a00560 100644 --- a/api_docs/kbn_management_cards_navigation.devdocs.json +++ b/api_docs/kbn_management_cards_navigation.devdocs.json @@ -145,7 +145,7 @@ "label": "hideLinksTo", "description": [], "signature": [ - "(\"transform\" | \"tags\" | \"maintenanceWindows\" | \"settings\" | \"dataViews\" | \"filesManagement\" | \"roles\" | \"reporting\" | \"api_keys\" | \"index_management\" | \"ingest_pipelines\" | \"jobsListLink\" | \"objects\" | \"pipelines\" | \"triggersActions\" | \"triggersActionsConnectors\")[] | undefined" + "(\"transform\" | \"tags\" | \"maintenanceWindows\" | \"settings\" | \"dataViews\" | \"data_quality\" | \"filesManagement\" | \"roles\" | \"reporting\" | \"api_keys\" | \"index_management\" | \"ingest_pipelines\" | \"jobsListLink\" | \"objects\" | \"pipelines\" | \"triggersActions\" | \"triggersActionsConnectors\")[] | undefined" ], "path": "packages/kbn-management/cards_navigation/src/types.ts", "deprecated": false, @@ -202,7 +202,7 @@ "label": "AppId", "description": [], "signature": [ - "\"transform\" | \"tags\" | \"maintenanceWindows\" | \"settings\" | \"dataViews\" | \"filesManagement\" | \"roles\" | \"reporting\" | \"api_keys\" | \"index_management\" | \"ingest_pipelines\" | \"jobsListLink\" | \"objects\" | \"pipelines\" | \"triggersActions\" | \"triggersActionsConnectors\"" + "\"transform\" | \"tags\" | \"maintenanceWindows\" | \"settings\" | \"dataViews\" | \"data_quality\" | \"filesManagement\" | \"roles\" | \"reporting\" | \"api_keys\" | \"index_management\" | \"ingest_pipelines\" | \"jobsListLink\" | \"objects\" | \"pipelines\" | \"triggersActions\" | \"triggersActionsConnectors\"" ], "path": "packages/kbn-management/cards_navigation/src/types.ts", "deprecated": false, diff --git a/api_docs/kbn_management_cards_navigation.mdx b/api_docs/kbn_management_cards_navigation.mdx index c6ae9e129b7b3..9b67311110615 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-06-27 +date: 2024-06-29 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 7483abe507946..ca126be4df246 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-06-27 +date: 2024-06-29 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 445be245160d3..c511dd54a15e9 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-06-27 +date: 2024-06-29 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 73d6119afeb03..994da45ca7703 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-06-27 +date: 2024-06-29 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 1c0f24e140521..c5d50373067ca 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-06-27 +date: 2024-06-29 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 57442950cb231..1882aa39ab30a 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-06-27 +date: 2024-06-29 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 e0ec451640c43..f5c335646fa94 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-06-27 +date: 2024-06-29 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 8466e95c1ac39..ce8b290ef67fd 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-06-27 +date: 2024-06-29 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 11e27f1e02937..84021653d84c8 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-06-27 +date: 2024-06-29 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 dcd0977739aa8..3a7abe56c028f 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-06-27 +date: 2024-06-29 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 b7386d3526b28..1b0172b92d3d6 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-06-27 +date: 2024-06-29 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 aec8b15e44e2b..5efe08aceb6ca 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-06-27 +date: 2024-06-29 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 be33c837a44ad..efc0dffc67453 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-06-27 +date: 2024-06-29 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 04824a7e5728f..644e14408c500 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-06-27 +date: 2024-06-29 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 bccf9002659f5..243b5128e2ebb 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-06-27 +date: 2024-06-29 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 df0a8f0d17962..e4a465a5ffd4b 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-06-27 +date: 2024-06-29 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 626072cba9863..13db611d4feb3 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-06-27 +date: 2024-06-29 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 250d48d2731d1..10e5dfe203c45 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-06-27 +date: 2024-06-29 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 44869c20e88f9..48679bb872267 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-06-27 +date: 2024-06-29 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 da0169decfe7c..746b82fecc2d3 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-06-27 +date: 2024-06-29 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 73e4ddeea0f19..378adfc2637be 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-06-27 +date: 2024-06-29 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 0a25e699d93dc..70b9dc59c7639 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-06-27 +date: 2024-06-29 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 901edc35af913..0f62730b9a54f 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-06-27 +date: 2024-06-29 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 6fcaa1ef20120..ec67830327ab4 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-06-27 +date: 2024-06-29 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_in_memory_table.mdx b/api_docs/kbn_ml_in_memory_table.mdx index 2086e238eea43..8aec48f170339 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-06-27 +date: 2024-06-29 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 9156e26819b54..002a605ebf493 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-06-27 +date: 2024-06-29 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 8a6c1c4d860b0..af6997c16c98e 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-06-27 +date: 2024-06-29 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 7333b2680dc7b..d31e99268e4f2 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-06-27 +date: 2024-06-29 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 8178350fc6c8c..3a47fa1f25b55 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-06-27 +date: 2024-06-29 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 0cb903c6c5bce..938c89b33d66b 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-06-27 +date: 2024-06-29 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 78e9dba95849c..cfceaaf1cee03 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-06-27 +date: 2024-06-29 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_query_utils.mdx b/api_docs/kbn_ml_query_utils.mdx index 822a0d64ba1d7..ec8d7ac43fb06 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-06-27 +date: 2024-06-29 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 3ae038a5ca5ba..7529b194ba3f2 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-06-27 +date: 2024-06-29 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 07394a1515aa3..7dcf78a15b0e3 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-06-27 +date: 2024-06-29 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 b7ee66e5ca0c6..5e7bb0216a041 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-06-27 +date: 2024-06-29 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 cadd61ac8a40c..8a380e1c5c719 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-06-27 +date: 2024-06-29 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 557addcd16147..83157f471559d 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-06-27 +date: 2024-06-29 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 0bfcea6c9331c..1e43444a046ee 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-06-27 +date: 2024-06-29 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 6493f88a1c350..c254789f09400 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-06-27 +date: 2024-06-29 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 b5e7a500ec99d..a19dcb7c8e1c2 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-url-state'] --- import kbnMlUrlStateObj from './kbn_ml_url_state.devdocs.json'; diff --git a/api_docs/kbn_mock_idp_utils.mdx b/api_docs/kbn_mock_idp_utils.mdx index 275c388032922..2d029f807a85f 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-06-27 +date: 2024-06-29 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 a219ebed69527..5a3f9bf8e21a4 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-06-27 +date: 2024-06-29 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 5915ba8c537dd..e2f0320d85720 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/object-versioning'] --- import kbnObjectVersioningObj from './kbn_object_versioning.devdocs.json'; diff --git a/api_docs/kbn_observability_alert_details.mdx b/api_docs/kbn_observability_alert_details.mdx index ebeccd9789e9b..123229a48bf3b 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-06-27 +date: 2024-06-29 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_test_data.mdx b/api_docs/kbn_observability_alerting_test_data.mdx index 3f69913502c96..d246f88f2212f 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-06-27 +date: 2024-06-29 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 75a93bcd5d40b..2da12ab68f9dd 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-06-27 +date: 2024-06-29 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 7634f5986d3ff..a726c416f28a7 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-06-27 +date: 2024-06-29 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 41fae8cbf23dc..17914914724fb 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-06-27 +date: 2024-06-29 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 2c72fcaa1dc9d..b565754a2cde0 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-06-27 +date: 2024-06-29 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 4bd8dcd1da217..0a7a1daa777f5 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-06-27 +date: 2024-06-29 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 c9cfbac06a6a8..b831c6325fe8d 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-06-27 +date: 2024-06-29 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 9b1a71c76e62e..e3bd6ae55b146 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-06-27 +date: 2024-06-29 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 8f938e0afa271..c84c74c85d67c 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-06-27 +date: 2024-06-29 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 cb9da0b0fa1a9..329016801e93f 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-06-27 +date: 2024-06-29 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 23b563bcd82b3..0ab117cea7a17 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-06-27 +date: 2024-06-29 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 869ca61c6c00b..cca8a11fd49b8 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-06-27 +date: 2024-06-29 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 4558b0e494990..add98c69763e5 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-06-27 +date: 2024-06-29 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 7d44d8a491458..5c1be27f915ff 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-06-27 +date: 2024-06-29 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 4bdbc6a36bba7..2c2df8f37440d 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-06-27 +date: 2024-06-29 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 50ab5cb325a06..5e05cc5377868 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-06-27 +date: 2024-06-29 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 8b78e7ed88a19..2977c785b876e 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-06-27 +date: 2024-06-29 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 5520407a9b3ca..bc71501219c71 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-06-27 +date: 2024-06-29 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 9a274c872e0e0..8b4b71697aec9 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-06-27 +date: 2024-06-29 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 a00bab8013011..f6ead3e92c198 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-06-27 +date: 2024-06-29 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 b4ce56faf5663..b7734231d1e7e 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-06-27 +date: 2024-06-29 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 c45899ef9cc5f..36117343efd05 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-06-27 +date: 2024-06-29 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 d4497419db7a1..7f88ba874d709 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-06-27 +date: 2024-06-29 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 3899a1674ab5c..f5159b1261a27 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-mount'] --- import kbnReactKibanaMountObj from './kbn_react_kibana_mount.devdocs.json'; diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx index df63b21056f16..5a594199d8bb5 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-06-27 +date: 2024-06-29 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 34c8dc6beb895..427ce9e83c79e 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-06-27 +date: 2024-06-29 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 26380672f3513..b73b77009aff3 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-06-27 +date: 2024-06-29 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 33b20468a274e..e4eb589b3bc59 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-06-27 +date: 2024-06-29 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 bd5a73396adcf..81cd7606b0a50 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-06-27 +date: 2024-06-29 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 e0fc0eb58d093..354148ad5aed1 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-06-27 +date: 2024-06-29 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 afbb868baa591..ea1a578565b15 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-06-27 +date: 2024-06-29 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 1b37feb8569cd..9528febd84be7 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-06-27 +date: 2024-06-29 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 9a5b1c2e1a540..266d5747cae91 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-06-27 +date: 2024-06-29 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 5aebfd8139822..6e6009aa4e813 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-06-27 +date: 2024-06-29 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 ff7f4c1454ccc..d2e4072824d00 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-06-27 +date: 2024-06-29 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 2e604fc6d8f8c..a53584fa6bc1f 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-06-27 +date: 2024-06-29 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 e8be119ad091e..dd09bc0983897 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-06-27 +date: 2024-06-29 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 fdcfbd0a4ab6c..d2003dfc1a03a 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-06-27 +date: 2024-06-29 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 72990a9f3ab0f..1abb779525d12 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-06-27 +date: 2024-06-29 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 29d1d3d852187..33506e6f341c3 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-06-27 +date: 2024-06-29 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 ab8225b825151..5c62928970ef8 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-06-27 +date: 2024-06-29 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 758b2d0db5b9c..04fc7439a2720 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-06-27 +date: 2024-06-29 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 74efc42858972..db46af8a8e5bb 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-06-27 +date: 2024-06-29 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 87d977258d214..b3cf778876e5d 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-06-27 +date: 2024-06-29 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 69cb01ff349ad..e15033d40071e 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-06-27 +date: 2024-06-29 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 280782d8e2b46..4c4f54d969af6 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-06-27 +date: 2024-06-29 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 e32b079499c86..c772094c9a10f 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-06-27 +date: 2024-06-29 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 3137d45411f73..394a545dc7511 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/saved-objects-settings'] --- import kbnSavedObjectsSettingsObj from './kbn_saved_objects_settings.devdocs.json'; diff --git a/api_docs/kbn_search_api_panels.mdx b/api_docs/kbn_search_api_panels.mdx index 5900cbe5f18a2..1b5c545958ebe 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-06-27 +date: 2024-06-29 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.devdocs.json b/api_docs/kbn_search_connectors.devdocs.json index 3cf388d6f1656..5ef0ca703940d 100644 --- a/api_docs/kbn_search_connectors.devdocs.json +++ b/api_docs/kbn_search_connectors.devdocs.json @@ -23451,13 +23451,10 @@ { "parentPluginId": "@kbn/search-connectors", "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.jira.configuration.account_email.tooltip", - "type": "Uncategorized", + "type": "string", "tags": [], "label": "tooltip", "description": [], - "signature": [ - "null" - ], "path": "packages/kbn-search-connectors/types/native_connectors.ts", "deprecated": false, "trackAdoption": false diff --git a/api_docs/kbn_search_connectors.mdx b/api_docs/kbn_search_connectors.mdx index 926e6b1a30a4c..5e94eab9d22fd 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-06-27 +date: 2024-06-29 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 7434852e35b05..625594fd8684b 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-06-27 +date: 2024-06-29 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 e8265baeb9e28..20425e0d945a1 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-06-27 +date: 2024-06-29 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 08b099d334d30..0576ce9c9e8db 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-06-27 +date: 2024-06-29 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 b2055ef4b770c..e2cffcd09d211 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-06-27 +date: 2024-06-29 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 e3a8f5e4603f3..18079bdc7bef7 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-06-27 +date: 2024-06-29 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_form_components.mdx b/api_docs/kbn_security_form_components.mdx index bd645b441a367..afb84e65ebfb0 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-06-27 +date: 2024-06-29 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 7098587e19de4..538fdc4d5b46a 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-06-27 +date: 2024-06-29 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 eb6156d8c41e2..d32f80275b96c 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-06-27 +date: 2024-06-29 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 bfe904b1137db..17c1ecb22d341 100644 --- a/api_docs/kbn_security_plugin_types_public.devdocs.json +++ b/api_docs/kbn_security_plugin_types_public.devdocs.json @@ -627,10 +627,6 @@ "deprecated": true, "trackAdoption": false, "references": [ - { - "plugin": "dataViews", - "path": "src/plugins/data_views/public/plugin.ts" - }, { "plugin": "security", "path": "x-pack/plugins/security/public/plugin.tsx" diff --git a/api_docs/kbn_security_plugin_types_public.mdx b/api_docs/kbn_security_plugin_types_public.mdx index 9d8dfb08a1f3d..0155b967d30a3 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-public'] --- import kbnSecurityPluginTypesPublicObj from './kbn_security_plugin_types_public.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_server.devdocs.json b/api_docs/kbn_security_plugin_types_server.devdocs.json index 855977ffccd49..f0f437b5ae00d 100644 --- a/api_docs/kbn_security_plugin_types_server.devdocs.json +++ b/api_docs/kbn_security_plugin_types_server.devdocs.json @@ -3280,70 +3280,10 @@ "plugin": "fleet", "path": "x-pack/plugins/fleet/server/services/api_keys/security.ts" }, - { - "plugin": "fleet", - "path": "x-pack/plugins/fleet/server/services/security/security.ts" - }, { "plugin": "fleet", "path": "x-pack/plugins/fleet/server/services/api_keys/transform_api_keys.ts" }, - { - "plugin": "fleet", - "path": "x-pack/plugins/fleet/server/routes/epm/handlers.ts" - }, - { - "plugin": "fleet", - "path": "x-pack/plugins/fleet/server/routes/epm/handlers.ts" - }, - { - "plugin": "fleet", - "path": "x-pack/plugins/fleet/server/routes/epm/handlers.ts" - }, - { - "plugin": "fleet", - "path": "x-pack/plugins/fleet/server/routes/epm/handlers.ts" - }, - { - "plugin": "fleet", - "path": "x-pack/plugins/fleet/server/routes/epm/handlers.ts" - }, - { - "plugin": "fleet", - "path": "x-pack/plugins/fleet/server/routes/agent_policy/handlers.ts" - }, - { - "plugin": "fleet", - "path": "x-pack/plugins/fleet/server/routes/agent_policy/handlers.ts" - }, - { - "plugin": "fleet", - "path": "x-pack/plugins/fleet/server/routes/agent_policy/handlers.ts" - }, - { - "plugin": "fleet", - "path": "x-pack/plugins/fleet/server/routes/agent_policy/handlers.ts" - }, - { - "plugin": "fleet", - "path": "x-pack/plugins/fleet/server/routes/package_policy/handlers.ts" - }, - { - "plugin": "fleet", - "path": "x-pack/plugins/fleet/server/routes/package_policy/handlers.ts" - }, - { - "plugin": "fleet", - "path": "x-pack/plugins/fleet/server/routes/package_policy/handlers.ts" - }, - { - "plugin": "fleet", - "path": "x-pack/plugins/fleet/server/routes/package_policy/handlers.ts" - }, - { - "plugin": "fleet", - "path": "x-pack/plugins/fleet/server/routes/package_policy/handlers.ts" - }, { "plugin": "fleet", "path": "x-pack/plugins/fleet/server/services/setup/fleet_server_policies_enrollment_keys.ts" @@ -3352,10 +3292,6 @@ "plugin": "fleet", "path": "x-pack/plugins/fleet/server/routes/setup/handlers.ts" }, - { - "plugin": "fleet", - "path": "x-pack/plugins/fleet/server/routes/settings/index.ts" - }, { "plugin": "cloudDefend", "path": "x-pack/plugins/cloud_defend/server/routes/setup_routes.ts" @@ -3364,10 +3300,6 @@ "plugin": "cloudSecurityPosture", "path": "x-pack/plugins/cloud_security_posture/server/routes/setup_routes.ts" }, - { - "plugin": "elasticAssistant", - "path": "x-pack/plugins/elastic_assistant/server/routes/request_context_factory.ts" - }, { "plugin": "enterpriseSearch", "path": "x-pack/plugins/enterprise_search/server/lib/indices/create_api_key.ts" @@ -3380,30 +3312,6 @@ "plugin": "lists", "path": "x-pack/plugins/lists/server/get_user.ts" }, - { - "plugin": "osquery", - "path": "x-pack/plugins/osquery/server/routes/live_query/create_live_query_route.ts" - }, - { - "plugin": "osquery", - "path": "x-pack/plugins/osquery/server/routes/saved_query/create_saved_query_route.ts" - }, - { - "plugin": "osquery", - "path": "x-pack/plugins/osquery/server/routes/saved_query/update_saved_query_route.ts" - }, - { - "plugin": "osquery", - "path": "x-pack/plugins/osquery/server/routes/pack/create_pack_route.ts" - }, - { - "plugin": "osquery", - "path": "x-pack/plugins/osquery/server/routes/pack/update_pack_route.ts" - }, - { - "plugin": "osquery", - "path": "x-pack/plugins/osquery/server/routes/asset/update_assets_route.ts" - }, { "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/server/endpoint/endpoint_app_context_services.ts" @@ -3428,10 +3336,6 @@ "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/server/endpoint/routes/actions/response_actions.ts" }, - { - "plugin": "reporting", - "path": "x-pack/plugins/reporting/server/routes/common/get_user.ts" - }, { "plugin": "serverlessSearch", "path": "x-pack/plugins/serverless_search/server/routes/api_key_routes.ts" diff --git a/api_docs/kbn_security_plugin_types_server.mdx b/api_docs/kbn_security_plugin_types_server.mdx index fa3f42eaad88a..4e888f6c93adc 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-06-27 +date: 2024-06-29 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_solution_features.mdx b/api_docs/kbn_security_solution_features.mdx index 3b5a227f84c94..ea8bc02e018c5 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-06-27 +date: 2024-06-29 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 b8f6ce60beac1..86a9b9c3cc529 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-06-27 +date: 2024-06-29 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 57f6349f44639..b16abf3e7df54 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-06-27 +date: 2024-06-29 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 f7077f3b93338..d38432acfc9e3 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-06-27 +date: 2024-06-29 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_securitysolution_autocomplete.mdx b/api_docs/kbn_securitysolution_autocomplete.mdx index ec09a4a6bde27..ddebdecf5e872 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-06-27 +date: 2024-06-29 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 e820dc65cc174..bfaa0fe9cc303 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-06-27 +date: 2024-06-29 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 7b6aeafb544a6..6a8e99c792b12 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-06-27 +date: 2024-06-29 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 17c0780ff87b2..addb0ac1c6b02 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-06-27 +date: 2024-06-29 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 9fa17eca87f1a..78935a5139719 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-06-27 +date: 2024-06-29 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 16df67d07d048..9c6c4d8e1483f 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-06-27 +date: 2024-06-29 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 e9defdb9b1253..ab3cbced84dec 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-06-27 +date: 2024-06-29 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 b194f1207d4fa..af455c1c031cc 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-06-27 +date: 2024-06-29 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 f278268425cc4..e072f168d4fd9 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-06-27 +date: 2024-06-29 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 fee0593562eb0..79a845c2b380f 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-06-27 +date: 2024-06-29 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 4aedda6795373..72ebc77bf13e0 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-06-27 +date: 2024-06-29 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.mdx b/api_docs/kbn_securitysolution_list_constants.mdx index b205068430261..eb22e282972ff 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-06-27 +date: 2024-06-29 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 22f8a387168ee..1abbf420157fe 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-06-27 +date: 2024-06-29 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 dbf097fa1c5df..6a06044a954df 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-06-27 +date: 2024-06-29 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 9fb0dfe483829..2f31a4b28d29d 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-06-27 +date: 2024-06-29 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 c36d504c5aa17..3f3c719613727 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-06-27 +date: 2024-06-29 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 d52be2bfb9254..ea4076ce67c9e 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-06-27 +date: 2024-06-29 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 f21988f728dd4..7a7b86ad1a96d 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-06-27 +date: 2024-06-29 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 b986fb411bca0..9cf9a758ea29f 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository'] --- import kbnServerRouteRepositoryObj from './kbn_server_route_repository.devdocs.json'; diff --git a/api_docs/kbn_serverless_common_settings.mdx b/api_docs/kbn_serverless_common_settings.mdx index aba0d11f842c5..95a21031b7fd2 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-06-27 +date: 2024-06-29 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 221eb198ead64..797f3427db6cf 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-06-27 +date: 2024-06-29 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 10e51fdae1028..718dea9a53db9 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-06-27 +date: 2024-06-29 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 b1d43931ebb0a..7e6c7590c2f30 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-06-27 +date: 2024-06-29 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 9db90980199b7..ac25cc3eba298 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-06-27 +date: 2024-06-29 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 4552018ee4971..cf5d743e0eefa 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-06-27 +date: 2024-06-29 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 7d54d4833501c..1ca604e938489 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-06-27 +date: 2024-06-29 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 d2329fde3ccc4..6119443b4c4e8 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-06-27 +date: 2024-06-29 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 930b4e30f6f1e..2db41b40a55b1 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-06-27 +date: 2024-06-29 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 ffe8feae8b297..ba130d42ac4d3 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-06-27 +date: 2024-06-29 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 3d7e10dcb652b..679569f8e6721 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-06-27 +date: 2024-06-29 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 fb25cc237bf0b..6111d140b1b4a 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-06-27 +date: 2024-06-29 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.mdx b/api_docs/kbn_shared_ux_chrome_navigation.mdx index 644f6ac844bb6..e2a786e5a59f2 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-chrome-navigation'] --- import kbnSharedUxChromeNavigationObj from './kbn_shared_ux_chrome_navigation.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_error_boundary.mdx b/api_docs/kbn_shared_ux_error_boundary.mdx index 3be634116cf25..25fe4c0ed41b1 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-06-27 +date: 2024-06-29 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 5360d9bf11239..6b42853105e36 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-06-27 +date: 2024-06-29 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 cf62cf901f442..d3cd9f9d0acba 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-06-27 +date: 2024-06-29 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 8725c2601f7a8..0c169631530dd 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-06-27 +date: 2024-06-29 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 d4b32dba8cf42..2b0d670d59b74 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-06-27 +date: 2024-06-29 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 aa04493d4adcf..21a5cc86e8842 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-06-27 +date: 2024-06-29 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 337a2a154deab..e9b4e9b0e5ea6 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-06-27 +date: 2024-06-29 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 209bdc2c45086..4c843ecc9c96e 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-06-27 +date: 2024-06-29 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 4ca5558508333..0620f94bb753a 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-06-27 +date: 2024-06-29 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 3f6a81eadd7b6..934591ebeb068 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-06-27 +date: 2024-06-29 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 c9a66445013f5..93e896d2707a5 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-06-27 +date: 2024-06-29 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 cb7d651766f70..9121d40c50839 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-06-27 +date: 2024-06-29 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 96dbb0600aff2..1c1dbce1f2804 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-06-27 +date: 2024-06-29 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 d172b67a0ea35..6a7b09c9fb882 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-06-27 +date: 2024-06-29 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 23077b97e1289..fcf30f872a133 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-06-27 +date: 2024-06-29 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 6e7c393416f8a..244bb2d7f8d3e 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-06-27 +date: 2024-06-29 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 7c609f3243282..2d020aa245480 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-06-27 +date: 2024-06-29 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 fa7d2d0a30a47..2a9cd7906d88d 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-06-27 +date: 2024-06-29 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 396aba46e8221..7a9d358364fa6 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-06-27 +date: 2024-06-29 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 672a1df70a8d3..12da95163ac46 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-06-27 +date: 2024-06-29 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 1b95207f1c22b..1479314b6208f 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-06-27 +date: 2024-06-29 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 b9256883124d4..b791a757444b0 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-06-27 +date: 2024-06-29 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 9269a500a86ff..85970986b124a 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-06-27 +date: 2024-06-29 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 4a7e2a051a0e2..878788b3d4715 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-06-27 +date: 2024-06-29 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 421d2530f2249..bf52b96afb94f 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-06-27 +date: 2024-06-29 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 0ccf52b2ed0de..9814b2f735df5 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-06-27 +date: 2024-06-29 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 d476213214168..387c655a3d657 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-06-27 +date: 2024-06-29 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 c94a5ae2b89ff..d451948c7c7d9 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-06-27 +date: 2024-06-29 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 1a3492907f42b..67fdd58316ed6 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-06-27 +date: 2024-06-29 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 4cb717c4d2693..f3856bfb82f0b 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-06-27 +date: 2024-06-29 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 1f41647c44194..bd9938f285c67 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-06-27 +date: 2024-06-29 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 e91971f726114..72094fa7b49e8 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-06-27 +date: 2024-06-29 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_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx index a2c14b9298ba6..40af05c12e0a1 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-06-27 +date: 2024-06-29 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 3f7b39c031fa4..0946fca909ec0 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-06-27 +date: 2024-06-29 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 b1d63077e9f50..bd3ac329d3ff1 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-06-27 +date: 2024-06-29 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 513e4b7680c43..01e9d3af0579b 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sort-predicates'] --- import kbnSortPredicatesObj from './kbn_sort_predicates.devdocs.json'; diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx index 8d535d6a34953..bf3f5c395b679 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-06-27 +date: 2024-06-29 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 5d7f06aa1c106..86a829c82259c 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-06-27 +date: 2024-06-29 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 b08ac30e3b286..782653c3cc88d 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook'] --- import kbnStorybookObj from './kbn_storybook.devdocs.json'; diff --git a/api_docs/kbn_telemetry_tools.mdx b/api_docs/kbn_telemetry_tools.mdx index a4f434d56d614..f751fe16f7823 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/telemetry-tools'] --- import kbnTelemetryToolsObj from './kbn_telemetry_tools.devdocs.json'; diff --git a/api_docs/kbn_test.mdx b/api_docs/kbn_test.mdx index 08ef91c2c05b6..8a34a0646390a 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test'] --- import kbnTestObj from './kbn_test.devdocs.json'; diff --git a/api_docs/kbn_test_eui_helpers.mdx b/api_docs/kbn_test_eui_helpers.mdx index 2324a8fd86bf8..5d7337462dc57 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-06-27 +date: 2024-06-29 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 f45293a2daac8..44e139b8f7eb5 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-06-27 +date: 2024-06-29 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 17efd56bd83ed..344d706efc541 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-subj-selector'] --- import kbnTestSubjSelectorObj from './kbn_test_subj_selector.devdocs.json'; diff --git a/api_docs/kbn_text_based_editor.mdx b/api_docs/kbn_text_based_editor.mdx index f3c2ba63d1b60..14c7ce6dccd41 100644 --- a/api_docs/kbn_text_based_editor.mdx +++ b/api_docs/kbn_text_based_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-text-based-editor title: "@kbn/text-based-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/text-based-editor plugin -date: 2024-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/text-based-editor'] --- import kbnTextBasedEditorObj from './kbn_text_based_editor.devdocs.json'; diff --git a/api_docs/kbn_timerange.mdx b/api_docs/kbn_timerange.mdx index 52b0d766c6444..fcd0106988ed7 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-06-27 +date: 2024-06-29 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 50365f8ff1144..9c9b94318c944 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-06-27 +date: 2024-06-29 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 c63c3d9fedae8..79f93fb9a3223 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-06-27 +date: 2024-06-29 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 e97a995e94ba0..6e2e5be02c229 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-06-27 +date: 2024-06-29 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 22099c46f8f88..ea3b165b75c0f 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-06-27 +date: 2024-06-29 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 01b8a56afebe4..0326f70127abc 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-06-27 +date: 2024-06-29 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 e440c05b9cbb2..dad900c070157 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-06-27 +date: 2024-06-29 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 d7b1ddb267586..86001479d4c49 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-06-27 +date: 2024-06-29 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 385d83c0c5d7a..4de3d8b71b21b 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-06-27 +date: 2024-06-29 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 27ec8b148cca5..93cab30ac3d68 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-06-27 +date: 2024-06-29 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 11667c9ada2fd..c4efafa517634 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-06-27 +date: 2024-06-29 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 e4c8018c89344..ec7620203086b 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-06-27 +date: 2024-06-29 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 71a74de92a195..3d357ffa7fa44 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-06-27 +date: 2024-06-29 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 ac7d523ba9f8f..f87859c4fd8cb 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-06-27 +date: 2024-06-29 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 d3b0d789698d6..94d3b5983fd03 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-06-27 +date: 2024-06-29 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 c42f3159d005c..197b95cf06ed3 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-06-27 +date: 2024-06-29 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 f8699acc70c2c..80729564ca397 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-06-27 +date: 2024-06-29 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 87f5d89604ce6..d45921393b4c5 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-06-27 +date: 2024-06-29 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 e1a5320cd948d..d1f7ae6e01944 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-06-27 +date: 2024-06-29 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 3bde27e96b761..6f0fe4502da5d 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-06-27 +date: 2024-06-29 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 d1d908929a6a2..47f0a8700c425 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-06-27 +date: 2024-06-29 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 17157f4c724e5..47b8fa79c93fc 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-06-27 +date: 2024-06-29 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 c9a74ec05ab42..5595149de650b 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-06-27 +date: 2024-06-29 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_helpers.mdx b/api_docs/kbn_zod_helpers.mdx index 96d6fff9a06fe..657fed7eb2b1f 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-06-27 +date: 2024-06-29 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 3b8040a0f929f..91980a037639e 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-06-27 +date: 2024-06-29 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 e4bcb7a28fe6e..95c83742d018f 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-06-27 +date: 2024-06-29 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 57dcab83b70ef..af99dea7c4cd5 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-06-27 +date: 2024-06-29 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 e47bef7170c48..c87be433cc326 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-06-27 +date: 2024-06-29 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 402fcdb2b06ab..c6045a3458344 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-06-27 +date: 2024-06-29 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 75305ce5b27b7..9b3db06849cc3 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-06-27 +date: 2024-06-29 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 a987330bb8bc3..380fa2c0af553 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-06-27 +date: 2024-06-29 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 745e2fd6551e3..4d27f997a5860 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-06-27 +date: 2024-06-29 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 d6e6a553f30b9..9281df5884fa0 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-06-27 +date: 2024-06-29 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 bbd7308aab971..39bd636d8f64a 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-06-27 +date: 2024-06-29 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 de8b1a4d800cc..4863659b23eb8 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-06-27 +date: 2024-06-29 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 16a836eaa1ae8..98b02692c1e8d 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-06-27 +date: 2024-06-29 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 bf7bd4e4a9bbc..b809bd0772d5e 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-06-27 +date: 2024-06-29 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 73ff341cc518b..4ca87c41eb157 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'management'] --- import managementObj from './management.devdocs.json'; diff --git a/api_docs/maps.mdx b/api_docs/maps.mdx index 85dba4b5d2b4c..886d41c503e92 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'maps'] --- import mapsObj from './maps.devdocs.json'; diff --git a/api_docs/maps_ems.mdx b/api_docs/maps_ems.mdx index 708cbd31fdb5d..dfa6f89ed61e9 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-06-27 +date: 2024-06-29 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 fc2ef4d8dd350..0111d8711ad8f 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'metricsDataAccess'] --- import metricsDataAccessObj from './metrics_data_access.devdocs.json'; diff --git a/api_docs/ml.mdx b/api_docs/ml.mdx index d5dba84ca6092..4bd30f4389336 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ml'] --- import mlObj from './ml.devdocs.json'; diff --git a/api_docs/mock_idp_plugin.mdx b/api_docs/mock_idp_plugin.mdx index b61b033007198..3c326666c0357 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-06-27 +date: 2024-06-29 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 bfb344ff68abd..d3bc5e3339ca8 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-06-27 +date: 2024-06-29 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 3a66129650e29..f33e43b5051f4 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-06-27 +date: 2024-06-29 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 7cf7d209cf9e0..dbfba40ddce3e 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-06-27 +date: 2024-06-29 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 cc512c0b1e181..daf282d06ce4b 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-06-27 +date: 2024-06-29 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 3894b6dbe2398..8231555335950 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-06-27 +date: 2024-06-29 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 9f9a64a7b9842..450baff388173 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'notifications'] --- import notificationsObj from './notifications.devdocs.json'; diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx index 20063bd495b93..a42a48b8dfb9e 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-06-27 +date: 2024-06-29 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 50aa42665cef1..5dcc08040d7d3 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-06-27 +date: 2024-06-29 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 bdf4fc2d52e8c..88815e6c59e47 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-06-27 +date: 2024-06-29 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 cd76730e9fd7f..54b073e62e69d 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-06-27 +date: 2024-06-29 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 77daf4b910c44..89e3ec978cb0e 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-06-27 +date: 2024-06-29 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 64e7685552080..c7d8994f11ed0 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityOnboarding'] --- import observabilityOnboardingObj from './observability_onboarding.devdocs.json'; diff --git a/api_docs/observability_shared.mdx b/api_docs/observability_shared.mdx index 2ab04149131e3..b27eb876c6c7c 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityShared'] --- import observabilitySharedObj from './observability_shared.devdocs.json'; diff --git a/api_docs/osquery.mdx b/api_docs/osquery.mdx index cf960b0ec2f94..b4f9ddc9a064d 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-06-27 +date: 2024-06-29 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 289175278888f..5dc4277d865da 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-06-27 +date: 2024-06-29 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 32a6f6a6959d8..95bb37dae4f59 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -21,7 +21,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 49596 | 238 | 37840 | 1886 | +| 49595 | 238 | 37839 | 1886 | ## Plugin Directory @@ -61,7 +61,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | This plugin provides the ability to create data views via a modal flyout inside Kibana apps | 35 | 0 | 25 | 5 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Reusable data view field editor across Kibana | 72 | 0 | 33 | 1 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Data view management app | 2 | 0 | 2 | 0 | -| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | 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. | 1159 | 0 | 402 | 3 | +| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | 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. | 1158 | 0 | 401 | 3 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | The Data Visualizer tools help you understand your data, by analyzing the metrics and fields in a log file or an existing Elasticsearch index. | 31 | 3 | 25 | 4 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | This plugin introduces the concept of data set quality, where users can easily get an overview on the data sets they have. | 10 | 0 | 10 | 5 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 15 | 0 | 9 | 2 | @@ -100,7 +100,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | Exposes services for async usage and search of fields metadata. | 39 | 0 | 39 | 7 | | | [@elastic/kibana-gis](https://github.com/orgs/elastic/teams/kibana-gis) | 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. | 84 | 0 | 84 | 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 | 2 | 0 | 2 | 0 | +| | [@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) | - | 1348 | 5 | 1226 | 72 | | 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 | @@ -201,7 +201,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 6 | 0 | 0 | 0 | | | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 29 | 0 | 10 | 0 | | | [@elastic/security-threat-hunting-investigations](https://github.com/orgs/elastic/teams/security-threat-hunting-investigations) | Elastic threat intelligence helps you see if you are open to or have been subject to current or historical known threats | 30 | 0 | 14 | 4 | -| | [@elastic/security-threat-hunting-investigations](https://github.com/orgs/elastic/teams/security-threat-hunting-investigations) | - | 241 | 1 | 197 | 17 | +| | [@elastic/security-threat-hunting-investigations](https://github.com/orgs/elastic/teams/security-threat-hunting-investigations) | - | 239 | 1 | 195 | 17 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | This plugin provides access to the transforms features provided by Elastic. Transforms enable you to convert existing Elasticsearch indices into summarized indices, which provide opportunities for new insights and analytics. | 4 | 0 | 4 | 1 | | translations | [@elastic/kibana-localization](https://github.com/orgs/elastic/teams/kibana-localization) | - | 0 | 0 | 0 | 0 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 588 | 1 | 562 | 52 | @@ -487,7 +487,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 33 | 0 | 24 | 1 | | | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | - | 13 | 0 | 5 | 0 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 35 | 0 | 34 | 0 | -| | [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/security-generative-ai) | - | 165 | 0 | 138 | 9 | +| | [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/security-generative-ai) | - | 166 | 0 | 139 | 9 | | | [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/security-generative-ai) | - | 329 | 0 | 307 | 0 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 20 | 0 | 20 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 52 | 0 | 37 | 7 | diff --git a/api_docs/presentation_panel.mdx b/api_docs/presentation_panel.mdx index 5ef0a49798ca9..cd69f9851043d 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-06-27 +date: 2024-06-29 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 155acab0c3274..a8a293a42b8b0 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-06-27 +date: 2024-06-29 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 37b092da1f820..cd6cc0615757e 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-06-27 +date: 2024-06-29 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 8f602ad0ec795..7761fe64fc3e5 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-06-27 +date: 2024-06-29 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 14d1c852e3971..bd8b9027e1ae6 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-06-27 +date: 2024-06-29 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 fae5e602d1c5a..ac56271bfecae 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-06-27 +date: 2024-06-29 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 ceea6f349150d..917907f20dce4 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-06-27 +date: 2024-06-29 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 3199c63e6f740..87a25bfbfb592 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-06-27 +date: 2024-06-29 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 8ac4d632e0566..caf64c3dcd11d 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-06-27 +date: 2024-06-29 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 46abd8a5e3478..f5a7b131e72a2 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-06-27 +date: 2024-06-29 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 1a7cb2ff545a8..76e2f2e186dbf 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-06-27 +date: 2024-06-29 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 1c502437abf5a..42be245243229 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-06-27 +date: 2024-06-29 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 21553a9620154..0ed29db3eafde 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-06-27 +date: 2024-06-29 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 e551f248495cc..c5f6edec166ed 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-06-27 +date: 2024-06-29 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 e615c0d8afc8f..7af86dda64b26 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-06-27 +date: 2024-06-29 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 382c4a0edb8de..c3d4fa6d2b4ee 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-06-27 +date: 2024-06-29 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 fc232e10b6a7a..f9fef23f8dd5b 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting'] --- import screenshottingObj from './screenshotting.devdocs.json'; diff --git a/api_docs/search_connectors.mdx b/api_docs/search_connectors.mdx index 11877c011e0fb..0818f161227b7 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-06-27 +date: 2024-06-29 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 8e45bfc176348..c8342805d4f18 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchHomepage'] --- import searchHomepageObj from './search_homepage.devdocs.json'; diff --git a/api_docs/search_inference_endpoints.mdx b/api_docs/search_inference_endpoints.mdx index 75ce9ac687363..4bbed68cfe07e 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-06-27 +date: 2024-06-29 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 747a262ec13ce..4c4e6b5d826ea 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-06-27 +date: 2024-06-29 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 d4bf427e9f94a..f6e94463de174 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchPlayground'] --- import searchPlaygroundObj from './search_playground.devdocs.json'; diff --git a/api_docs/security.devdocs.json b/api_docs/security.devdocs.json index 4f259e19d65dc..c233a4b569565 100644 --- a/api_docs/security.devdocs.json +++ b/api_docs/security.devdocs.json @@ -5295,10 +5295,6 @@ "plugin": "actions", "path": "x-pack/plugins/actions/server/plugin.ts" }, - { - "plugin": "data", - "path": "src/plugins/data/server/search/session/session_service.ts" - }, { "plugin": "ml", "path": "x-pack/plugins/ml/server/routes/annotations.ts" @@ -5486,70 +5482,10 @@ "plugin": "fleet", "path": "x-pack/plugins/fleet/server/services/api_keys/security.ts" }, - { - "plugin": "fleet", - "path": "x-pack/plugins/fleet/server/services/security/security.ts" - }, { "plugin": "fleet", "path": "x-pack/plugins/fleet/server/services/api_keys/transform_api_keys.ts" }, - { - "plugin": "fleet", - "path": "x-pack/plugins/fleet/server/routes/epm/handlers.ts" - }, - { - "plugin": "fleet", - "path": "x-pack/plugins/fleet/server/routes/epm/handlers.ts" - }, - { - "plugin": "fleet", - "path": "x-pack/plugins/fleet/server/routes/epm/handlers.ts" - }, - { - "plugin": "fleet", - "path": "x-pack/plugins/fleet/server/routes/epm/handlers.ts" - }, - { - "plugin": "fleet", - "path": "x-pack/plugins/fleet/server/routes/epm/handlers.ts" - }, - { - "plugin": "fleet", - "path": "x-pack/plugins/fleet/server/routes/agent_policy/handlers.ts" - }, - { - "plugin": "fleet", - "path": "x-pack/plugins/fleet/server/routes/agent_policy/handlers.ts" - }, - { - "plugin": "fleet", - "path": "x-pack/plugins/fleet/server/routes/agent_policy/handlers.ts" - }, - { - "plugin": "fleet", - "path": "x-pack/plugins/fleet/server/routes/agent_policy/handlers.ts" - }, - { - "plugin": "fleet", - "path": "x-pack/plugins/fleet/server/routes/package_policy/handlers.ts" - }, - { - "plugin": "fleet", - "path": "x-pack/plugins/fleet/server/routes/package_policy/handlers.ts" - }, - { - "plugin": "fleet", - "path": "x-pack/plugins/fleet/server/routes/package_policy/handlers.ts" - }, - { - "plugin": "fleet", - "path": "x-pack/plugins/fleet/server/routes/package_policy/handlers.ts" - }, - { - "plugin": "fleet", - "path": "x-pack/plugins/fleet/server/routes/package_policy/handlers.ts" - }, { "plugin": "fleet", "path": "x-pack/plugins/fleet/server/services/setup/fleet_server_policies_enrollment_keys.ts" @@ -5558,10 +5494,6 @@ "plugin": "fleet", "path": "x-pack/plugins/fleet/server/routes/setup/handlers.ts" }, - { - "plugin": "fleet", - "path": "x-pack/plugins/fleet/server/routes/settings/index.ts" - }, { "plugin": "cloudDefend", "path": "x-pack/plugins/cloud_defend/server/routes/setup_routes.ts" @@ -5570,10 +5502,6 @@ "plugin": "cloudSecurityPosture", "path": "x-pack/plugins/cloud_security_posture/server/routes/setup_routes.ts" }, - { - "plugin": "elasticAssistant", - "path": "x-pack/plugins/elastic_assistant/server/routes/request_context_factory.ts" - }, { "plugin": "enterpriseSearch", "path": "x-pack/plugins/enterprise_search/server/lib/indices/create_api_key.ts" @@ -5586,30 +5514,6 @@ "plugin": "lists", "path": "x-pack/plugins/lists/server/get_user.ts" }, - { - "plugin": "osquery", - "path": "x-pack/plugins/osquery/server/routes/live_query/create_live_query_route.ts" - }, - { - "plugin": "osquery", - "path": "x-pack/plugins/osquery/server/routes/saved_query/create_saved_query_route.ts" - }, - { - "plugin": "osquery", - "path": "x-pack/plugins/osquery/server/routes/saved_query/update_saved_query_route.ts" - }, - { - "plugin": "osquery", - "path": "x-pack/plugins/osquery/server/routes/pack/create_pack_route.ts" - }, - { - "plugin": "osquery", - "path": "x-pack/plugins/osquery/server/routes/pack/update_pack_route.ts" - }, - { - "plugin": "osquery", - "path": "x-pack/plugins/osquery/server/routes/asset/update_assets_route.ts" - }, { "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/server/endpoint/endpoint_app_context_services.ts" @@ -5634,10 +5538,6 @@ "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/server/endpoint/routes/actions/response_actions.ts" }, - { - "plugin": "reporting", - "path": "x-pack/plugins/reporting/server/routes/common/get_user.ts" - }, { "plugin": "serverlessSearch", "path": "x-pack/plugins/serverless_search/server/routes/api_key_routes.ts" diff --git a/api_docs/security.mdx b/api_docs/security.mdx index 85fba086d7189..ed9515dc1ac27 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-06-27 +date: 2024-06-29 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 9ae122651ead9..053f30a5fd66f 100644 --- a/api_docs/security_solution.devdocs.json +++ b/api_docs/security_solution.devdocs.json @@ -485,7 +485,7 @@ "\nExperimental flag needed to enable the link" ], "signature": [ - "\"assistantKnowledgeBaseByDefault\" | \"assistantModelEvaluation\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionsEnabled\" | \"endpointResponseActionsEnabled\" | \"responseActionUploadEnabled\" | \"automatedProcessActionsEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"responseActionsSentinelOneV2Enabled\" | \"responseActionsSentinelOneGetFileEnabled\" | \"responseActionsCrowdstrikeManualHostIsolationEnabled\" | \"responseActionScanEnabled\" | \"alertsPageChartsEnabled\" | \"alertTypeEnabled\" | \"expandableFlyoutDisabled\" | \"securitySolutionNotesEnabled\" | \"newUserDetailsFlyoutManagedUser\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"alertSuppressionForEsqlRuleEnabled\" | \"riskEnginePrivilegesRouteEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"crowdstrikeDataInAnalyzerEnabled\" | \"jamfDataInAnalyzerEnabled\" | \"jsonPrebuiltRulesDiffingEnabled\" | \"timelineEsqlTabDisabled\" | \"unifiedComponentsInTimelineEnabled\" | \"analyzerDatePickersAndSourcererDisabled\" | \"perFieldPrebuiltRulesDiffingEnabled\" | \"prebuiltRulesCustomizationEnabled\" | \"malwareOnWriteScanOptionAvailable\" | \"unifiedManifestEnabled\" | \"aiAssistantFlyoutMode\" | \"valueListItemsModalEnabled\" | \"bulkCustomHighlightedFieldsEnabled\" | \"manualRuleRunEnabled\" | \"filterProcessDescendantsForEventFiltersEnabled\" | undefined" + "\"assistantKnowledgeBaseByDefault\" | \"assistantModelEvaluation\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionsEnabled\" | \"endpointResponseActionsEnabled\" | \"responseActionUploadEnabled\" | \"automatedProcessActionsEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"responseActionsSentinelOneV2Enabled\" | \"responseActionsSentinelOneGetFileEnabled\" | \"responseActionsCrowdstrikeManualHostIsolationEnabled\" | \"responseActionScanEnabled\" | \"alertsPageChartsEnabled\" | \"alertTypeEnabled\" | \"expandableFlyoutDisabled\" | \"securitySolutionNotesEnabled\" | \"entityAlertPreviewEnabled\" | \"newUserDetailsFlyoutManagedUser\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"alertSuppressionForEsqlRuleEnabled\" | \"riskEnginePrivilegesRouteEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"crowdstrikeDataInAnalyzerEnabled\" | \"jamfDataInAnalyzerEnabled\" | \"timelineEsqlTabDisabled\" | \"unifiedComponentsInTimelineEnabled\" | \"analyzerDatePickersAndSourcererDisabled\" | \"prebuiltRulesCustomizationEnabled\" | \"malwareOnWriteScanOptionAvailable\" | \"unifiedManifestEnabled\" | \"aiAssistantFlyoutMode\" | \"valueListItemsModalEnabled\" | \"bulkCustomHighlightedFieldsEnabled\" | \"manualRuleRunEnabled\" | \"filterProcessDescendantsForEventFiltersEnabled\" | undefined" ], "path": "x-pack/plugins/security_solution/public/common/links/types.ts", "deprecated": false, @@ -565,7 +565,7 @@ "\nExperimental flag needed to disable the link. Opposite of experimentalKey" ], "signature": [ - "\"assistantKnowledgeBaseByDefault\" | \"assistantModelEvaluation\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionsEnabled\" | \"endpointResponseActionsEnabled\" | \"responseActionUploadEnabled\" | \"automatedProcessActionsEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"responseActionsSentinelOneV2Enabled\" | \"responseActionsSentinelOneGetFileEnabled\" | \"responseActionsCrowdstrikeManualHostIsolationEnabled\" | \"responseActionScanEnabled\" | \"alertsPageChartsEnabled\" | \"alertTypeEnabled\" | \"expandableFlyoutDisabled\" | \"securitySolutionNotesEnabled\" | \"newUserDetailsFlyoutManagedUser\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"alertSuppressionForEsqlRuleEnabled\" | \"riskEnginePrivilegesRouteEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"crowdstrikeDataInAnalyzerEnabled\" | \"jamfDataInAnalyzerEnabled\" | \"jsonPrebuiltRulesDiffingEnabled\" | \"timelineEsqlTabDisabled\" | \"unifiedComponentsInTimelineEnabled\" | \"analyzerDatePickersAndSourcererDisabled\" | \"perFieldPrebuiltRulesDiffingEnabled\" | \"prebuiltRulesCustomizationEnabled\" | \"malwareOnWriteScanOptionAvailable\" | \"unifiedManifestEnabled\" | \"aiAssistantFlyoutMode\" | \"valueListItemsModalEnabled\" | \"bulkCustomHighlightedFieldsEnabled\" | \"manualRuleRunEnabled\" | \"filterProcessDescendantsForEventFiltersEnabled\" | undefined" + "\"assistantKnowledgeBaseByDefault\" | \"assistantModelEvaluation\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionsEnabled\" | \"endpointResponseActionsEnabled\" | \"responseActionUploadEnabled\" | \"automatedProcessActionsEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"responseActionsSentinelOneV2Enabled\" | \"responseActionsSentinelOneGetFileEnabled\" | \"responseActionsCrowdstrikeManualHostIsolationEnabled\" | \"responseActionScanEnabled\" | \"alertsPageChartsEnabled\" | \"alertTypeEnabled\" | \"expandableFlyoutDisabled\" | \"securitySolutionNotesEnabled\" | \"entityAlertPreviewEnabled\" | \"newUserDetailsFlyoutManagedUser\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"alertSuppressionForEsqlRuleEnabled\" | \"riskEnginePrivilegesRouteEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"crowdstrikeDataInAnalyzerEnabled\" | \"jamfDataInAnalyzerEnabled\" | \"timelineEsqlTabDisabled\" | \"unifiedComponentsInTimelineEnabled\" | \"analyzerDatePickersAndSourcererDisabled\" | \"prebuiltRulesCustomizationEnabled\" | \"malwareOnWriteScanOptionAvailable\" | \"unifiedManifestEnabled\" | \"aiAssistantFlyoutMode\" | \"valueListItemsModalEnabled\" | \"bulkCustomHighlightedFieldsEnabled\" | \"manualRuleRunEnabled\" | \"filterProcessDescendantsForEventFiltersEnabled\" | undefined" ], "path": "x-pack/plugins/security_solution/public/common/links/types.ts", "deprecated": false, @@ -1964,7 +1964,7 @@ "label": "experimentalFeatures", "description": [], "signature": [ - "{ readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly responseActionScanEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutDisabled: boolean; readonly securitySolutionNotesEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly assistantKnowledgeBaseByDefault: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly alertSuppressionForEsqlRuleEnabled: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly jsonPrebuiltRulesDiffingEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineEnabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly perFieldPrebuiltRulesDiffingEnabled: boolean; readonly prebuiltRulesCustomizationEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly aiAssistantFlyoutMode: boolean; readonly valueListItemsModalEnabled: boolean; readonly bulkCustomHighlightedFieldsEnabled: boolean; readonly manualRuleRunEnabled: boolean; readonly filterProcessDescendantsForEventFiltersEnabled: boolean; }" + "{ readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly responseActionScanEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutDisabled: boolean; readonly securitySolutionNotesEnabled: boolean; readonly entityAlertPreviewEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly assistantKnowledgeBaseByDefault: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly alertSuppressionForEsqlRuleEnabled: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineEnabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly prebuiltRulesCustomizationEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly aiAssistantFlyoutMode: boolean; readonly valueListItemsModalEnabled: boolean; readonly bulkCustomHighlightedFieldsEnabled: boolean; readonly manualRuleRunEnabled: boolean; readonly filterProcessDescendantsForEventFiltersEnabled: boolean; }" ], "path": "x-pack/plugins/security_solution/public/types.ts", "deprecated": false, @@ -3071,7 +3071,7 @@ "\nThe security solution generic experimental features" ], "signature": [ - "{ readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly responseActionScanEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutDisabled: boolean; readonly securitySolutionNotesEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly assistantKnowledgeBaseByDefault: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly alertSuppressionForEsqlRuleEnabled: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly jsonPrebuiltRulesDiffingEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineEnabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly perFieldPrebuiltRulesDiffingEnabled: boolean; readonly prebuiltRulesCustomizationEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly aiAssistantFlyoutMode: boolean; readonly valueListItemsModalEnabled: boolean; readonly bulkCustomHighlightedFieldsEnabled: boolean; readonly manualRuleRunEnabled: boolean; readonly filterProcessDescendantsForEventFiltersEnabled: boolean; }" + "{ readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly responseActionScanEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutDisabled: boolean; readonly securitySolutionNotesEnabled: boolean; readonly entityAlertPreviewEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly assistantKnowledgeBaseByDefault: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly alertSuppressionForEsqlRuleEnabled: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineEnabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly prebuiltRulesCustomizationEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly aiAssistantFlyoutMode: boolean; readonly valueListItemsModalEnabled: boolean; readonly bulkCustomHighlightedFieldsEnabled: boolean; readonly manualRuleRunEnabled: boolean; readonly filterProcessDescendantsForEventFiltersEnabled: boolean; }" ], "path": "x-pack/plugins/security_solution/server/plugin_contract.ts", "deprecated": false, @@ -3247,7 +3247,7 @@ "label": "ExperimentalFeatures", "description": [], "signature": [ - "{ readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly responseActionScanEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutDisabled: boolean; readonly securitySolutionNotesEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly assistantKnowledgeBaseByDefault: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly alertSuppressionForEsqlRuleEnabled: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly jsonPrebuiltRulesDiffingEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineEnabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly perFieldPrebuiltRulesDiffingEnabled: boolean; readonly prebuiltRulesCustomizationEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly aiAssistantFlyoutMode: boolean; readonly valueListItemsModalEnabled: boolean; readonly bulkCustomHighlightedFieldsEnabled: boolean; readonly manualRuleRunEnabled: boolean; readonly filterProcessDescendantsForEventFiltersEnabled: boolean; }" + "{ readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly responseActionScanEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutDisabled: boolean; readonly securitySolutionNotesEnabled: boolean; readonly entityAlertPreviewEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly assistantKnowledgeBaseByDefault: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly alertSuppressionForEsqlRuleEnabled: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineEnabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly prebuiltRulesCustomizationEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly aiAssistantFlyoutMode: boolean; readonly valueListItemsModalEnabled: boolean; readonly bulkCustomHighlightedFieldsEnabled: boolean; readonly manualRuleRunEnabled: boolean; readonly filterProcessDescendantsForEventFiltersEnabled: boolean; }" ], "path": "x-pack/plugins/security_solution/common/experimental_features.ts", "deprecated": false, @@ -3313,7 +3313,7 @@ "\nA list of allowed values that can be used in `xpack.securitySolution.enableExperimental`.\nThis object is then used to validate and parse the value entered." ], "signature": [ - "{ readonly excludePoliciesInFilterEnabled: false; readonly kubernetesEnabled: true; readonly donutChartEmbeddablesEnabled: false; readonly previewTelemetryUrlEnabled: false; readonly extendedRuleExecutionLoggingEnabled: false; readonly socTrendsEnabled: false; readonly responseActionsEnabled: true; readonly endpointResponseActionsEnabled: true; readonly responseActionUploadEnabled: true; readonly automatedProcessActionsEnabled: true; readonly responseActionsSentinelOneV1Enabled: true; readonly responseActionsSentinelOneV2Enabled: true; readonly responseActionsSentinelOneGetFileEnabled: false; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: false; readonly responseActionScanEnabled: false; readonly alertsPageChartsEnabled: true; readonly alertTypeEnabled: false; readonly expandableFlyoutDisabled: false; readonly securitySolutionNotesEnabled: false; readonly assistantModelEvaluation: false; readonly assistantKnowledgeBaseByDefault: false; readonly newUserDetailsFlyoutManagedUser: false; readonly riskScoringPersistence: true; readonly riskScoringRoutesEnabled: true; readonly esqlRulesDisabled: false; readonly protectionUpdatesEnabled: true; readonly disableTimelineSaveTour: false; readonly alertSuppressionForEsqlRuleEnabled: false; readonly riskEnginePrivilegesRouteEnabled: true; readonly sentinelOneDataInAnalyzerEnabled: true; readonly sentinelOneManualHostActionsEnabled: true; readonly crowdstrikeDataInAnalyzerEnabled: false; readonly jamfDataInAnalyzerEnabled: false; readonly jsonPrebuiltRulesDiffingEnabled: true; readonly timelineEsqlTabDisabled: false; readonly unifiedComponentsInTimelineEnabled: false; readonly analyzerDatePickersAndSourcererDisabled: false; readonly perFieldPrebuiltRulesDiffingEnabled: true; readonly prebuiltRulesCustomizationEnabled: false; readonly malwareOnWriteScanOptionAvailable: true; readonly unifiedManifestEnabled: false; readonly aiAssistantFlyoutMode: true; readonly valueListItemsModalEnabled: true; readonly bulkCustomHighlightedFieldsEnabled: false; readonly manualRuleRunEnabled: false; readonly filterProcessDescendantsForEventFiltersEnabled: false; }" + "{ readonly excludePoliciesInFilterEnabled: false; readonly kubernetesEnabled: true; readonly donutChartEmbeddablesEnabled: false; readonly previewTelemetryUrlEnabled: false; readonly extendedRuleExecutionLoggingEnabled: false; readonly socTrendsEnabled: false; readonly responseActionsEnabled: true; readonly endpointResponseActionsEnabled: true; readonly responseActionUploadEnabled: true; readonly automatedProcessActionsEnabled: true; readonly responseActionsSentinelOneV1Enabled: true; readonly responseActionsSentinelOneV2Enabled: true; readonly responseActionsSentinelOneGetFileEnabled: true; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: true; readonly responseActionScanEnabled: false; readonly alertsPageChartsEnabled: true; readonly alertTypeEnabled: false; readonly expandableFlyoutDisabled: false; readonly securitySolutionNotesEnabled: false; readonly entityAlertPreviewEnabled: false; readonly assistantModelEvaluation: false; readonly assistantKnowledgeBaseByDefault: false; readonly newUserDetailsFlyoutManagedUser: false; readonly riskScoringPersistence: true; readonly riskScoringRoutesEnabled: true; readonly esqlRulesDisabled: false; readonly protectionUpdatesEnabled: true; readonly disableTimelineSaveTour: false; readonly alertSuppressionForEsqlRuleEnabled: false; readonly riskEnginePrivilegesRouteEnabled: true; readonly sentinelOneDataInAnalyzerEnabled: true; readonly sentinelOneManualHostActionsEnabled: true; readonly crowdstrikeDataInAnalyzerEnabled: true; readonly jamfDataInAnalyzerEnabled: false; readonly timelineEsqlTabDisabled: false; readonly unifiedComponentsInTimelineEnabled: false; readonly analyzerDatePickersAndSourcererDisabled: false; readonly prebuiltRulesCustomizationEnabled: false; readonly malwareOnWriteScanOptionAvailable: true; readonly unifiedManifestEnabled: false; readonly aiAssistantFlyoutMode: true; readonly valueListItemsModalEnabled: true; readonly bulkCustomHighlightedFieldsEnabled: false; readonly manualRuleRunEnabled: false; readonly filterProcessDescendantsForEventFiltersEnabled: false; }" ], "path": "x-pack/plugins/security_solution/common/experimental_features.ts", "deprecated": false, diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx index 21e7679183a85..5007fffad6011 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolution'] --- import securitySolutionObj from './security_solution.devdocs.json'; diff --git a/api_docs/security_solution_ess.mdx b/api_docs/security_solution_ess.mdx index 95e445d1a304f..77ff6a11af118 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-06-27 +date: 2024-06-29 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 3adb6a9b90c1b..b18c2570fb579 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-06-27 +date: 2024-06-29 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 d18f6bf9d4c9d..e1110a135fc91 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-06-27 +date: 2024-06-29 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 5ff812b235783..caf04a27d7195 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-06-27 +date: 2024-06-29 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 f2e838596862e..9cd3f37c0cfe9 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-06-27 +date: 2024-06-29 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 9c494eb302832..b6f6276312553 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-06-27 +date: 2024-06-29 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 6d215ebe46f15..88ff017703747 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-06-27 +date: 2024-06-29 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 bfc50519b368c..cd59d56208717 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-06-27 +date: 2024-06-29 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 7335a2cb0b6c7..affacb458655d 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'snapshotRestore'] --- import snapshotRestoreObj from './snapshot_restore.devdocs.json'; diff --git a/api_docs/spaces.mdx b/api_docs/spaces.mdx index ae90ac22b4c75..2cb49e0bf0e8e 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'spaces'] --- import spacesObj from './spaces.devdocs.json'; diff --git a/api_docs/stack_alerts.mdx b/api_docs/stack_alerts.mdx index 76a79e6ea6ab4..f8034f8456e16 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-06-27 +date: 2024-06-29 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 9b6b3520dc1fb..058741677c2bb 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackConnectors'] --- import stackConnectorsObj from './stack_connectors.devdocs.json'; diff --git a/api_docs/task_manager.mdx b/api_docs/task_manager.mdx index bddcfde51e170..16045ed88a485 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'taskManager'] --- import taskManagerObj from './task_manager.devdocs.json'; diff --git a/api_docs/telemetry.mdx b/api_docs/telemetry.mdx index 929517ed120af..fda09b9d20ac0 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-06-27 +date: 2024-06-29 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 c5227e71b281f..adfc60c6a27b5 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-06-27 +date: 2024-06-29 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 aac85f4f25d36..dae72600287b2 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-06-27 +date: 2024-06-29 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 dd8e187b532b2..5f46ded1ee25a 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection'] --- import telemetryManagementSectionObj from './telemetry_management_section.devdocs.json'; diff --git a/api_docs/text_based_languages.mdx b/api_docs/text_based_languages.mdx index bc5a748508256..4b3290d4a48c1 100644 --- a/api_docs/text_based_languages.mdx +++ b/api_docs/text_based_languages.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/textBasedLanguages title: "textBasedLanguages" image: https://source.unsplash.com/400x175/?github description: API docs for the textBasedLanguages plugin -date: 2024-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'textBasedLanguages'] --- import textBasedLanguagesObj from './text_based_languages.devdocs.json'; diff --git a/api_docs/threat_intelligence.mdx b/api_docs/threat_intelligence.mdx index aaad1d8cf4d10..e680c9f8e9010 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-06-27 +date: 2024-06-29 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 eb63ebd78a254..c978c041d986f 100644 --- a/api_docs/timelines.devdocs.json +++ b/api_docs/timelines.devdocs.json @@ -1594,19 +1594,19 @@ }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/common/components/event_details/table/use_action_cell_data_provider.ts" + "path": "x-pack/plugins/security_solution/public/timelines/components/edit_data_provider/helpers.tsx" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/common/components/event_details/table/use_action_cell_data_provider.ts" + "path": "x-pack/plugins/security_solution/public/timelines/components/edit_data_provider/helpers.tsx" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/timelines/components/edit_data_provider/helpers.tsx" + "path": "x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/formatted_field.tsx" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/timelines/components/edit_data_provider/helpers.tsx" + "path": "x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/formatted_field.tsx" }, { "plugin": "securitySolution", @@ -1618,11 +1618,11 @@ }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/formatted_field.tsx" + "path": "x-pack/plugins/security_solution/public/common/components/event_details/table/use_action_cell_data_provider.ts" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/formatted_field.tsx" + "path": "x-pack/plugins/security_solution/public/common/components/event_details/table/use_action_cell_data_provider.ts" }, { "plugin": "securitySolution", @@ -1685,34 +1685,6 @@ "deprecated": false, "trackAdoption": false }, - { - "parentPluginId": "timelines", - "id": "def-common.BrowserField.description", - "type": "CompoundType", - "tags": [], - "label": "description", - "description": [], - "signature": [ - "string | null" - ], - "path": "x-pack/plugins/timelines/common/search_strategy/index_fields/index.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "timelines", - "id": "def-common.BrowserField.example", - "type": "CompoundType", - "tags": [], - "label": "example", - "description": [], - "signature": [ - "string | number | null" - ], - "path": "x-pack/plugins/timelines/common/search_strategy/index_fields/index.ts", - "deprecated": false, - "trackAdoption": false - }, { "parentPluginId": "timelines", "id": "def-common.BrowserField.fields", @@ -4201,99 +4173,99 @@ }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/common/components/event_details/helpers.tsx" + "path": "x-pack/plugins/security_solution/public/timelines/components/edit_data_provider/helpers.tsx" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/common/components/event_details/helpers.tsx" + "path": "x-pack/plugins/security_solution/public/timelines/components/edit_data_provider/helpers.tsx" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/query_bar/index.tsx" + "path": "x-pack/plugins/security_solution/public/timelines/components/edit_data_provider/helpers.tsx" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/query_bar/index.tsx" + "path": "x-pack/plugins/security_solution/public/timelines/components/edit_data_provider/index.tsx" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/timelines/components/timeline/body/column_headers/index.tsx" + "path": "x-pack/plugins/security_solution/public/timelines/components/edit_data_provider/index.tsx" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/timelines/components/timeline/body/column_headers/index.tsx" + "path": "x-pack/plugins/security_solution/public/timelines/components/timeline/data_providers/provider_item_actions.tsx" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/timelines/components/timeline/body/column_headers/helpers.ts" + "path": "x-pack/plugins/security_solution/public/timelines/components/timeline/data_providers/provider_item_actions.tsx" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/timelines/components/timeline/body/column_headers/helpers.ts" + "path": "x-pack/plugins/security_solution/public/timelines/components/timeline/data_providers/provider_item_actions.tsx" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/timelines/components/timeline/body/column_headers/helpers.ts" + "path": "x-pack/plugins/security_solution/public/timelines/components/timeline/data_providers/provider_item_badge.tsx" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/timelines/components/edit_data_provider/helpers.tsx" + "path": "x-pack/plugins/security_solution/public/timelines/components/timeline/data_providers/provider_item_badge.tsx" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/timelines/components/edit_data_provider/helpers.tsx" + "path": "x-pack/plugins/security_solution/public/common/components/event_details/helpers.tsx" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/timelines/components/edit_data_provider/helpers.tsx" + "path": "x-pack/plugins/security_solution/public/common/components/event_details/helpers.tsx" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/timelines/components/edit_data_provider/index.tsx" + "path": "x-pack/plugins/security_solution/public/timelines/components/timeline/body/column_headers/helpers.ts" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/timelines/components/edit_data_provider/index.tsx" + "path": "x-pack/plugins/security_solution/public/timelines/components/timeline/body/column_headers/helpers.ts" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/timelines/components/timeline/data_providers/provider_item_actions.tsx" + "path": "x-pack/plugins/security_solution/public/timelines/components/timeline/body/column_headers/helpers.ts" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/timelines/components/timeline/data_providers/provider_item_actions.tsx" + "path": "x-pack/plugins/security_solution/public/common/components/event_details/event_fields_browser.tsx" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/timelines/components/timeline/data_providers/provider_item_actions.tsx" + "path": "x-pack/plugins/security_solution/public/common/components/event_details/event_fields_browser.tsx" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/timelines/components/timeline/data_providers/provider_item_badge.tsx" + "path": "x-pack/plugins/security_solution/public/common/components/event_details/event_fields_browser.tsx" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/timelines/components/timeline/data_providers/provider_item_badge.tsx" + "path": "x-pack/plugins/security_solution/public/common/components/event_details/columns.tsx" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/common/components/event_details/event_fields_browser.tsx" + "path": "x-pack/plugins/security_solution/public/common/components/event_details/columns.tsx" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/common/components/event_details/event_fields_browser.tsx" + "path": "x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/query_bar/index.tsx" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/common/components/event_details/event_fields_browser.tsx" + "path": "x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/query_bar/index.tsx" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/common/components/event_details/columns.tsx" + "path": "x-pack/plugins/security_solution/public/timelines/components/timeline/body/column_headers/index.tsx" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/common/components/event_details/columns.tsx" + "path": "x-pack/plugins/security_solution/public/timelines/components/timeline/body/column_headers/index.tsx" }, { "plugin": "securitySolution", diff --git a/api_docs/timelines.mdx b/api_docs/timelines.mdx index 3f9b1f64d1b07..b4fea54179104 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'timelines'] --- import timelinesObj from './timelines.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/security-threat-hunting-investigations](https://github.com/org | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 241 | 1 | 197 | 17 | +| 239 | 1 | 195 | 17 | ## Client diff --git a/api_docs/transform.mdx b/api_docs/transform.mdx index ce431d559a921..5ddf405ec22c9 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'transform'] --- import transformObj from './transform.devdocs.json'; diff --git a/api_docs/triggers_actions_ui.devdocs.json b/api_docs/triggers_actions_ui.devdocs.json index f2d0b86703d56..e8e1b4e820781 100644 --- a/api_docs/triggers_actions_ui.devdocs.json +++ b/api_docs/triggers_actions_ui.devdocs.json @@ -8101,7 +8101,9 @@ }, " | undefined; onUpdate?: ((args: ", "TableUpdateHandlerArgs", - ") => void) | undefined; onLoaded?: (() => void) | undefined; runtimeMappings?: ", + ") => void) | undefined; onLoaded?: ((alerts: ", + "Alerts", + ") => void) | undefined; runtimeMappings?: ", "MappingRuntimeFields", " | undefined; showAlertStatusWithFlapping?: boolean | undefined; toolbarVisibility?: ", "EuiDataGridToolBarVisibilityOptions", @@ -8159,7 +8161,9 @@ }, " | undefined; onUpdate?: ((args: ", "TableUpdateHandlerArgs", - ") => void) | undefined; onLoaded?: (() => void) | undefined; runtimeMappings?: ", + ") => void) | undefined; onLoaded?: ((alerts: ", + "Alerts", + ") => void) | undefined; runtimeMappings?: ", "MappingRuntimeFields", " | undefined; showAlertStatusWithFlapping?: boolean | undefined; toolbarVisibility?: ", "EuiDataGridToolBarVisibilityOptions", diff --git a/api_docs/triggers_actions_ui.mdx b/api_docs/triggers_actions_ui.mdx index 9a1a3dae42a2f..522cebb767b69 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-06-27 +date: 2024-06-29 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 c09eb950235fb..0b1324c05e624 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-06-27 +date: 2024-06-29 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 768df3adbdc41..0c070052e0a0e 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-06-27 +date: 2024-06-29 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 5eeeb76e2cfdf..4b52d84a0e9b4 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-06-27 +date: 2024-06-29 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 ddc623867bfed..198e8212d4c28 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-06-27 +date: 2024-06-29 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 0111ada9035de..cbfd1410066fe 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-06-27 +date: 2024-06-29 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 efc5a8b638270..b3819f3571e53 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-06-27 +date: 2024-06-29 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 5e277f4b4aed6..8a752745794c1 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-06-27 +date: 2024-06-29 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 2008139a1cfd3..3f280b345272e 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-06-27 +date: 2024-06-29 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 3e55fcc6c5750..66352f35fc39a 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-06-27 +date: 2024-06-29 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 479b85cdbb13c..c40e8f770cb02 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-06-27 +date: 2024-06-29 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 eca8a308ff7cd..279c791440c56 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-06-27 +date: 2024-06-29 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 fb2b00b108136..eec263e92564a 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-06-27 +date: 2024-06-29 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 babe3e984b669..1b0e630249aa1 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-06-27 +date: 2024-06-29 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 31e9467e274e6..0da4e352abd19 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-06-27 +date: 2024-06-29 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 e7dcabec47a11..9fd42e7d54ae2 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-06-27 +date: 2024-06-29 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 b22a6d23cdcc2..c2b3480619503 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-06-27 +date: 2024-06-29 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 7bc96cd401558..8d1646fa2db2d 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-06-27 +date: 2024-06-29 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 2dab598c3e1e2..70f151f1bf975 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-06-27 +date: 2024-06-29 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 87e5790e9230b..a7c8edde513e5 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-06-27 +date: 2024-06-29 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 f59ca10a95120..024d8722dd417 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-06-27 +date: 2024-06-29 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 94cd5d9f846ad..50642eca73c99 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-06-27 +date: 2024-06-29 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; diff --git a/package.json b/package.json index 13b12d2d4e82c..dfbfcd6bec3a3 100644 --- a/package.json +++ b/package.json @@ -101,15 +101,15 @@ "@dnd-kit/core": "^6.1.0", "@dnd-kit/sortable": "^8.0.0", "@dnd-kit/utilities": "^3.2.2", - "@elastic/apm-rum": "^5.16.0", + "@elastic/apm-rum": "^5.16.1", "@elastic/apm-rum-core": "^5.21.0", - "@elastic/apm-rum-react": "^2.0.2", + "@elastic/apm-rum-react": "^2.0.3", "@elastic/charts": "66.0.4", "@elastic/datemath": "5.0.3", "@elastic/ecs": "^8.11.1", "@elastic/elasticsearch": "^8.14.0", "@elastic/ems-client": "8.5.1", - "@elastic/eui": "95.1.0-backport.0", + "@elastic/eui": "95.2.0", "@elastic/filesaver": "1.1.2", "@elastic/node-crypto": "1.2.1", "@elastic/numeral": "^2.5.1", @@ -1002,7 +1002,7 @@ "compare-versions": "3.5.1", "constate": "^3.3.2", "copy-to-clipboard": "^3.0.8", - "core-js": "^3.36.0", + "core-js": "^3.37.1", "cronstrue": "^1.51.0", "css-box-model": "^1.2.1", "css.escape": "^1.5.1", @@ -1037,7 +1037,7 @@ "flat": "5", "fnv-plus": "^1.3.1", "font-awesome": "4.7.0", - "formik": "^2.4.5", + "formik": "^2.4.6", "fp-ts": "^2.3.1", "get-port": "^5.0.0", "getopts": "^2.2.5", @@ -1074,7 +1074,7 @@ "kea": "^2.6.0", "langchain": "0.2.3", "langsmith": "^0.1.30", - "launchdarkly-js-client-sdk": "^3.3.0", + "launchdarkly-js-client-sdk": "^3.4.0", "launchdarkly-node-server-sdk": "^7.0.3", "load-json-file": "^6.2.0", "lodash": "^4.17.21", @@ -1096,7 +1096,7 @@ "mustache": "^2.3.2", "node-fetch": "^2.6.7", "node-forge": "^1.3.1", - "nodemailer": "^6.9.9", + "nodemailer": "^6.9.14", "normalize-path": "^3.0.0", "nunjucks": "^3.2.4", "object-hash": "^1.3.1", @@ -1160,7 +1160,7 @@ "remark-gfm": "1.0.0", "remark-parse-no-trim": "^8.0.4", "remark-stringify": "^8.0.3", - "require-in-the-middle": "^7.2.1", + "require-in-the-middle": "^7.3.0", "reselect": "^4.1.8", "resize-observer-polyfill": "1.5.1", "rison-node": "1.0.2", @@ -1252,7 +1252,7 @@ "@jest/reporters": "^29.6.1", "@jest/transform": "^29.6.1", "@jest/types": "^29.6.1", - "@kayahr/text-encoding": "^1.2.0", + "@kayahr/text-encoding": "^1.3.0", "@kbn/alerting-api-integration-helpers": "link:x-pack/test/alerting_api_integration/packages/helpers", "@kbn/ambient-common-types": "link:packages/kbn-ambient-common-types", "@kbn/ambient-ftr-types": "link:packages/kbn-ambient-ftr-types", @@ -1509,7 +1509,7 @@ "@types/nock": "^10.0.3", "@types/node": "20.10.5", "@types/node-fetch": "2.6.4", - "@types/node-forge": "^1.3.10", + "@types/node-forge": "^1.3.11", "@types/nodemailer": "^6.4.0", "@types/normalize-path": "^3.0.0", "@types/nunjucks": "^3.2.6", @@ -1542,7 +1542,7 @@ "@types/redux-actions": "^2.6.1", "@types/resolve": "^1.20.1", "@types/seedrandom": ">=2.0.0 <4.0.0", - "@types/selenium-webdriver": "^4.1.22", + "@types/selenium-webdriver": "^4.1.23", "@types/semver": "^7", "@types/set-value": "^2.0.0", "@types/sinon": "^7.0.13", @@ -1577,7 +1577,7 @@ "@wojtekmaj/enzyme-adapter-react-17": "^0.6.7", "@yarnpkg/lockfile": "^1.1.0", "aggregate-error": "^3.1.0", - "apidoc-markdown": "^7.3.0", + "apidoc-markdown": "^7.3.2", "argsplit": "^1.0.5", "autoprefixer": "^10.4.7", "axe-core": "^4.9.0", @@ -1594,7 +1594,7 @@ "buildkite-test-collector": "^1.7.0", "callsites": "^3.1.0", "chance": "1.0.18", - "chromedriver": "^125.0.2", + "chromedriver": "^126.0.3", "clean-webpack-plugin": "^3.0.0", "cli-progress": "^3.12.0", "cli-table3": "^0.6.1", @@ -1711,13 +1711,13 @@ "q": "^1.5.1", "raw-loader": "^3.1.0", "react-test-renderer": "^17.0.2", - "recast": "^0.23.7", + "recast": "^0.23.9", "regenerate": "^1.4.0", "resolve": "^1.22.0", "rxjs-marbles": "^7.0.1", "sass-embedded": "^1.77.5", "sass-loader": "^10.5.1", - "selenium-webdriver": "^4.21.0", + "selenium-webdriver": "^4.22.0", "sharp": "0.32.6", "simple-git": "^3.16.0", "sinon": "^7.4.2", @@ -1734,7 +1734,7 @@ "tape": "^5.0.1", "terser": "^5.31.1", "terser-webpack-plugin": "^4.2.3", - "tough-cookie": "^4.1.3", + "tough-cookie": "^4.1.4", "tree-kill": "^1.2.2", "ts-morph": "^15.1.0", "tsd": "^0.20.0", diff --git a/packages/kbn-alerts-as-data-utils/src/schemas/generated/observability_uptime_schema.ts b/packages/kbn-alerts-as-data-utils/src/schemas/generated/observability_uptime_schema.ts index 7837a83b1c9b3..039622f645e42 100644 --- a/packages/kbn-alerts-as-data-utils/src/schemas/generated/observability_uptime_schema.ts +++ b/packages/kbn-alerts-as-data-utils/src/schemas/generated/observability_uptime_schema.ts @@ -74,7 +74,9 @@ const ObservabilityUptimeAlertOptional = rt.partial({ 'agent.name': schemaString, 'anomaly.bucket_span.minutes': schemaString, 'anomaly.start': schemaDate, + configId: schemaString, 'error.message': schemaString, + 'host.name': schemaString, 'kibana.alert.context': schemaUnknown, 'kibana.alert.evaluation.threshold': schemaStringOrNumber, 'kibana.alert.evaluation.value': schemaStringOrNumber, @@ -85,8 +87,11 @@ const ObservabilityUptimeAlertOptional = rt.partial({ value: schemaStringArray, }) ), + 'location.id': schemaString, + 'location.name': schemaString, 'monitor.id': schemaString, 'monitor.name': schemaString, + 'monitor.tags': schemaStringArray, 'monitor.type': schemaString, 'observer.geo.name': schemaString, 'tls.server.hash.sha256': schemaString, diff --git a/packages/kbn-babel-preset/node_preset.js b/packages/kbn-babel-preset/node_preset.js index a0c5a0114873c..0f1a36ff23195 100644 --- a/packages/kbn-babel-preset/node_preset.js +++ b/packages/kbn-babel-preset/node_preset.js @@ -31,7 +31,7 @@ module.exports = (_, options = {}) => { // Because of that we should use for that value the same version we install // in the package.json in order to have the same polyfills between the environment // and the tests - corejs: '3.34.0', + corejs: '3.37.1', bugfixes: true, ...(options['@babel/preset-env'] || {}), diff --git a/packages/kbn-babel-preset/webpack_preset.js b/packages/kbn-babel-preset/webpack_preset.js index 84f3771816dfa..0ad8b59489651 100644 --- a/packages/kbn-babel-preset/webpack_preset.js +++ b/packages/kbn-babel-preset/webpack_preset.js @@ -19,7 +19,7 @@ module.exports = (api, options = {}) => { modules: false, // Please read the explanation for this // in node_preset.js - corejs: '3.34.0', + corejs: '3.37.1', bugfixes: true, browserslistEnv: api.env('production') ? 'production' : 'dev', }, diff --git a/packages/kbn-expandable-flyout/src/components/preview_section.test.tsx b/packages/kbn-expandable-flyout/src/components/preview_section.test.tsx index 223d73fa5cf43..27cff985534e8 100644 --- a/packages/kbn-expandable-flyout/src/components/preview_section.test.tsx +++ b/packages/kbn-expandable-flyout/src/components/preview_section.test.tsx @@ -31,32 +31,18 @@ describe('PreviewSection', () => { const component =
{'component'}
; const left = 500; - it('should render close button in header', () => { - const showBackButton = false; - + it('should render back button and close button in header', () => { const { getByTestId } = render( - + ); expect(getByTestId(PREVIEW_SECTION_CLOSE_BUTTON_TEST_ID)).toBeInTheDocument(); - }); - - it('should render back button in header', () => { - const showBackButton = true; - - const { getByTestId } = render( - - - - ); - expect(getByTestId(PREVIEW_SECTION_BACK_BUTTON_TEST_ID)).toBeInTheDocument(); }); it('should render banner', () => { - const showBackButton = false; const title = 'test'; const banner: PreviewBanner = { title, @@ -66,12 +52,7 @@ describe('PreviewSection', () => { const { getByTestId, getByText } = render( - + ); diff --git a/packages/kbn-expandable-flyout/src/components/preview_section.tsx b/packages/kbn-expandable-flyout/src/components/preview_section.tsx index a43b4378e6384..64493c75bd3e9 100644 --- a/packages/kbn-expandable-flyout/src/components/preview_section.tsx +++ b/packages/kbn-expandable-flyout/src/components/preview_section.tsx @@ -69,10 +69,6 @@ interface PreviewSectionProps { * Left position used when rendering the panel */ leftPosition: number; - /** - * Display the back button in the header - */ - showBackButton: boolean; /** * Preview banner shown at the top of preview panel */ @@ -85,7 +81,6 @@ interface PreviewSectionProps { */ export const PreviewSection: React.FC = ({ component, - showBackButton, leftPosition, banner, }: PreviewSectionProps) => { @@ -104,7 +99,7 @@ export const PreviewSection: React.FC = ({ /> ); - const header = showBackButton ? ( + const header = ( = ({ {closeButton} - ) : ( - - {closeButton} - ); return ( diff --git a/packages/kbn-expandable-flyout/src/hooks/use_expandable_flyout_api.ts b/packages/kbn-expandable-flyout/src/hooks/use_expandable_flyout_api.ts index dcfcf429e1086..5c7b716b003b5 100644 --- a/packages/kbn-expandable-flyout/src/hooks/use_expandable_flyout_api.ts +++ b/packages/kbn-expandable-flyout/src/hooks/use_expandable_flyout_api.ts @@ -7,6 +7,7 @@ */ import { useCallback, useMemo } from 'react'; +import { useHistory } from 'react-router-dom'; import { REDUX_ID_FOR_MEMORY_STORAGE } from '../constants'; import { useExpandableFlyoutContext } from '../context'; import { @@ -30,6 +31,7 @@ export type { ExpandableFlyoutApi }; */ export const useExpandableFlyoutApi = () => { const dispatch = useDispatch(); + const history = useHistory(); const { urlKey } = useExpandableFlyoutContext(); // if no urlKey is provided, we are in memory storage mode and use the reserved word 'memory' @@ -75,10 +77,13 @@ export const useExpandableFlyoutApi = () => { [dispatch, id] ); - const previousPreviewPanel = useCallback( - () => dispatch(previousPreviewPanelAction({ id })), - [dispatch, id] - ); + const previousPreviewPanel = useCallback(() => { + dispatch(previousPreviewPanelAction({ id })); + + if (id !== REDUX_ID_FOR_MEMORY_STORAGE) { + history.goBack(); + } + }, [dispatch, id, history]); const closePanels = useCallback(() => dispatch(closePanelsAction({ id })), [dispatch, id]); diff --git a/packages/kbn-expandable-flyout/src/index.tsx b/packages/kbn-expandable-flyout/src/index.tsx index 7bcfa050fbfa5..ba11b597e0b06 100644 --- a/packages/kbn-expandable-flyout/src/index.tsx +++ b/packages/kbn-expandable-flyout/src/index.tsx @@ -70,7 +70,6 @@ export const ExpandableFlyout: React.FC = ({ ? mostRecentPreview?.params?.banner : undefined; - const showBackButton = !!preview && preview.length > 1; const previewSection = useMemo( () => registeredPanels.find((panel) => panel.key === mostRecentPreview?.id), [mostRecentPreview, registeredPanels] @@ -129,7 +128,6 @@ export const ExpandableFlyout: React.FC = ({ {showPreview ? ( diff --git a/packages/kbn-expandable-flyout/src/provider.test.tsx b/packages/kbn-expandable-flyout/src/provider.test.tsx index c6246eff9fa32..f47b538ed851e 100644 --- a/packages/kbn-expandable-flyout/src/provider.test.tsx +++ b/packages/kbn-expandable-flyout/src/provider.test.tsx @@ -67,7 +67,7 @@ describe('UrlSynchronizer', () => { expect(mockSet).toHaveBeenCalledWith('urlKey', { left: undefined, right: undefined, - preview: undefined, + preview: [undefined], }); }); diff --git a/packages/kbn-expandable-flyout/src/provider.tsx b/packages/kbn-expandable-flyout/src/provider.tsx index d88df39ab61eb..7ad9ddd084963 100644 --- a/packages/kbn-expandable-flyout/src/provider.tsx +++ b/packages/kbn-expandable-flyout/src/provider.tsx @@ -49,14 +49,14 @@ export const UrlSynchronizer = () => { dispatch( urlChangedAction({ ...currentValue, - preview: currentValue?.preview?.[0], + preview: currentValue?.preview?.at(-1), id: urlKey, }) ); } const subscription = urlStorage.change$(urlKey).subscribe((value) => { - dispatch(urlChangedAction({ ...value, preview: value?.preview?.[0], id: urlKey })); + dispatch(urlChangedAction({ ...value, preview: value?.preview?.at(-1), id: urlKey })); }); return () => subscription.unsubscribe(); @@ -68,7 +68,7 @@ export const UrlSynchronizer = () => { } const { left, right, preview } = panels; - urlStorage.set(urlKey, { left, right, preview }); + urlStorage.set(urlKey, { left, right, preview: [preview?.at(-1)] }); }, [needsSync, panels, urlKey, urlStorage]); return null; diff --git a/packages/kbn-expandable-flyout/src/reducer.test.ts b/packages/kbn-expandable-flyout/src/reducer.test.ts index df03d9277f946..7f0a5c289e295 100644 --- a/packages/kbn-expandable-flyout/src/reducer.test.ts +++ b/packages/kbn-expandable-flyout/src/reducer.test.ts @@ -622,7 +622,7 @@ describe('reducer', () => { const action = previousPreviewPanelAction({ id: id1 }); const newState: State = reducer(state, action); - expect(newState).toEqual({ ...initialState, needsSync: true }); + expect(newState).toEqual({ ...initialState, needsSync: false }); }); it(`should return unmodified state when previous preview panel when no preview panel exist`, () => { @@ -638,7 +638,7 @@ describe('reducer', () => { const action = previousPreviewPanelAction({ id: id1 }); const newState: State = reducer(state, action); - expect(newState).toEqual({ ...state, needsSync: true }); + expect(newState).toEqual({ ...state, needsSync: false }); }); it('should remove only last preview panel', () => { @@ -662,7 +662,7 @@ describe('reducer', () => { preview: [previewPanel1], }, }, - needsSync: true, + needsSync: false, }); }); @@ -687,7 +687,7 @@ describe('reducer', () => { preview: [previewPanel1], }, }, - needsSync: true, + needsSync: false, }); }); }); diff --git a/packages/kbn-expandable-flyout/src/reducer.ts b/packages/kbn-expandable-flyout/src/reducer.ts index 617ad5e3a7c95..32465f554ab7f 100644 --- a/packages/kbn-expandable-flyout/src/reducer.ts +++ b/packages/kbn-expandable-flyout/src/reducer.ts @@ -7,6 +7,7 @@ */ import { createReducer } from '@reduxjs/toolkit'; +import deepEqual from 'react-fast-compare'; import { openPanelsAction, openLeftPanelAction, @@ -69,7 +70,11 @@ export const reducer = createReducer(initialState, (builder) => { builder.addCase(openPreviewPanelAction, (state, { payload: { preview, id } }) => { if (id in state.byId) { if (state.byId[id].preview) { - state.byId[id].preview?.push(preview); + const previewIdenticalToLastOne = deepEqual(preview, state.byId[id].preview?.at(-1)); + // Only append preview when it does not match the last item in state.byId[id].preview + if (!previewIdenticalToLastOne) { + state.byId[id].preview?.push(preview); + } } else { state.byId[id].preview = preview ? [preview] : undefined; } @@ -89,7 +94,8 @@ export const reducer = createReducer(initialState, (builder) => { state.byId[id].preview?.pop(); } - state.needsSync = true; + // if state is stored in url, click go back in preview should utilize browser history + state.needsSync = false; }); builder.addCase(closePanelsAction, (state, { payload: { id } }) => { diff --git a/packages/kbn-ftr-common-functional-ui-services/services/browser.ts b/packages/kbn-ftr-common-functional-ui-services/services/browser.ts index 8e26a0d9dac9f..c017433446d75 100644 --- a/packages/kbn-ftr-common-functional-ui-services/services/browser.ts +++ b/packages/kbn-ftr-common-functional-ui-services/services/browser.ts @@ -53,7 +53,10 @@ class BrowserService extends FtrService { * https://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/lib/webdriver_exports_WebDriver.html#actions */ public getActions() { - return this.driver.actions(); + return this.driver.actions({ + async: undefined, + bridge: undefined, + }); } /** diff --git a/packages/kbn-ftr-common-functional-ui-services/services/remote/webdriver.ts b/packages/kbn-ftr-common-functional-ui-services/services/remote/webdriver.ts index 40c9fff679653..4789a7566756d 100644 --- a/packages/kbn-ftr-common-functional-ui-services/services/remote/webdriver.ts +++ b/packages/kbn-ftr-common-functional-ui-services/services/remote/webdriver.ts @@ -121,7 +121,7 @@ function initChromiumOptions(browserType: Browsers, acceptInsecureCerts: boolean } if (browserBinaryPath) { - options.setChromeBinaryPath(browserBinaryPath); + options.setBinaryPath(browserBinaryPath); } if (noCache === '1') { diff --git a/packages/kbn-ftr-common-functional-ui-services/services/web_element_wrapper/web_element_wrapper.ts b/packages/kbn-ftr-common-functional-ui-services/services/web_element_wrapper/web_element_wrapper.ts index e7083d7f17587..c1fb7d471c7f3 100644 --- a/packages/kbn-ftr-common-functional-ui-services/services/web_element_wrapper/web_element_wrapper.ts +++ b/packages/kbn-ftr-common-functional-ui-services/services/web_element_wrapper/web_element_wrapper.ts @@ -141,7 +141,10 @@ export class WebElementWrapper { } private getActions() { - return this.driver.actions(); + return this.driver.actions({ + async: undefined, + bridge: undefined, + }); } /** diff --git a/packages/kbn-management/cards_navigation/src/consts.tsx b/packages/kbn-management/cards_navigation/src/consts.tsx index 97b62eca90a4c..ba0d370c9577f 100644 --- a/packages/kbn-management/cards_navigation/src/consts.tsx +++ b/packages/kbn-management/cards_navigation/src/consts.tsx @@ -63,6 +63,13 @@ export const appDefinitions: Record = { }), icon: 'logstashQueue', }, + [AppIds.DATA_QUALITY]: { + category: appCategories.DATA, + description: i18n.translate('management.landing.withCardNavigation.dataQualityDescription', { + defaultMessage: 'Find and manage quality issues in your log data.', + }), + icon: 'documents', + }, [AppIds.RULES]: { category: appCategories.ALERTS, diff --git a/packages/kbn-management/cards_navigation/src/types.ts b/packages/kbn-management/cards_navigation/src/types.ts index f03544342abb0..5be90d5b7c147 100644 --- a/packages/kbn-management/cards_navigation/src/types.ts +++ b/packages/kbn-management/cards_navigation/src/types.ts @@ -28,6 +28,7 @@ export enum AppIds { SERVERLESS_SETTINGS = 'settings', ROLES = 'roles', API_KEYS = 'api_keys', + DATA_QUALITY = 'data_quality', } // Create new type that is a union of all the appId values diff --git a/packages/kbn-management/settings/components/field_input/input/image_input.tsx b/packages/kbn-management/settings/components/field_input/input/image_input.tsx index 9bcacf620c1fe..0bcc61789953c 100644 --- a/packages/kbn-management/settings/components/field_input/input/image_input.tsx +++ b/packages/kbn-management/settings/components/field_input/input/image_input.tsx @@ -8,7 +8,11 @@ import React, { useImperativeHandle, useRef } from 'react'; import { i18n } from '@kbn/i18n'; -import { EuiFilePicker, EuiFilePickerProps, EuiImage } from '@elastic/eui'; +import { EuiFilePicker, EuiImage } from '@elastic/eui'; +import type { + EuiFilePickerClass, + EuiFilePickerProps, +} from '@elastic/eui/src/components/form/file_picker/file_picker'; import { ResetInputRef } from '@kbn/management-settings-types'; import { getFieldInputValue, useUpdate } from '@kbn/management-settings-utilities'; @@ -45,7 +49,7 @@ const errorMessage = i18n.translate('management.settings.field.imageChangeErrorM */ export const ImageInput = React.forwardRef( ({ field, unsavedChange, isSavingEnabled, onInputChange }, ref) => { - const inputRef = useRef(null); + const inputRef = useRef(null); useImperativeHandle(ref, () => ({ reset: () => inputRef.current?.removeFiles(), @@ -99,7 +103,7 @@ export const ImageInput = React.forwardRef( accept=".jpg,.jpeg,.png" data-test-subj={`${TEST_SUBJ_PREFIX_FIELD}-${id}`} disabled={!isSavingEnabled} - ref={inputRef} + ref={inputRef as React.Ref>} fullWidth {...{ onChange, ...a11yProps }} /> diff --git a/packages/kbn-optimizer/limits.yml b/packages/kbn-optimizer/limits.yml index 07edd80d6387f..73d9f0e23af29 100644 --- a/packages/kbn-optimizer/limits.yml +++ b/packages/kbn-optimizer/limits.yml @@ -102,7 +102,7 @@ pageLoadAssetSize: maps: 90000 mapsEms: 26072 metricsDataAccess: 73287 - ml: 82187 + ml: 82210 mockIdpPlugin: 30000 monitoring: 80000 navigation: 37269 diff --git a/packages/kbn-securitysolution-autocomplete/src/field/__tests__/__snapshots__/index.test.tsx.snap b/packages/kbn-securitysolution-autocomplete/src/field/__tests__/__snapshots__/index.test.tsx.snap index d9e917684d768..1bfa3200b4243 100644 --- a/packages/kbn-securitysolution-autocomplete/src/field/__tests__/__snapshots__/index.test.tsx.snap +++ b/packages/kbn-securitysolution-autocomplete/src/field/__tests__/__snapshots__/index.test.tsx.snap @@ -29,6 +29,7 @@ Object { aria-controls="" aria-expanded="false" aria-invalid="false" + autocomplete="off" class="euiComboBox__input" data-test-subj="comboBoxSearchInput" id="generated-id__eui-combobox-id" @@ -96,6 +97,7 @@ Object { aria-controls="" aria-expanded="false" aria-invalid="false" + autocomplete="off" class="euiComboBox__input" data-test-subj="comboBoxSearchInput" id="generated-id__eui-combobox-id" @@ -219,6 +221,7 @@ Object { aria-controls="" aria-expanded="false" aria-invalid="false" + autocomplete="off" class="euiComboBox__input" data-test-subj="comboBoxSearchInput" disabled="" @@ -258,6 +261,7 @@ Object { aria-controls="" aria-expanded="false" aria-invalid="false" + autocomplete="off" class="euiComboBox__input" data-test-subj="comboBoxSearchInput" disabled="" @@ -355,6 +359,7 @@ Object { aria-controls="" aria-expanded="false" aria-invalid="false" + autocomplete="off" class="euiComboBox__input" data-test-subj="comboBoxSearchInput" id="generated-id__eui-combobox-id" @@ -411,6 +416,7 @@ Object { aria-controls="" aria-expanded="false" aria-invalid="false" + autocomplete="off" class="euiComboBox__input" data-test-subj="comboBoxSearchInput" id="generated-id__eui-combobox-id" @@ -524,6 +530,7 @@ Object { aria-controls="" aria-expanded="false" aria-invalid="false" + autocomplete="off" class="euiComboBox__input" data-test-subj="comboBoxSearchInput" disabled="" @@ -573,6 +580,7 @@ Object { aria-controls="" aria-expanded="false" aria-invalid="false" + autocomplete="off" class="euiComboBox__input" data-test-subj="comboBoxSearchInput" disabled="" diff --git a/packages/shared-ux/file/file_upload/impl/src/file_upload.component.tsx b/packages/shared-ux/file/file_upload/impl/src/file_upload.component.tsx index 06cd2c6d27de0..a10fa1085c11e 100644 --- a/packages/shared-ux/file/file_upload/impl/src/file_upload.component.tsx +++ b/packages/shared-ux/file/file_upload/impl/src/file_upload.component.tsx @@ -16,6 +16,10 @@ import { useEuiTheme, useGeneratedHtmlId, } from '@elastic/eui'; +import type { + EuiFilePickerClass, + EuiFilePickerProps, +} from '@elastic/eui/src/components/form/file_picker/file_picker'; import { euiThemeVars } from '@kbn/ui-theme'; import { useBehaviorSubject } from '@kbn/shared-ux-file-util'; import { css } from '@emotion/react'; @@ -48,7 +52,7 @@ const styles = { `, }; -export const FileUpload = React.forwardRef( +export const FileUpload = React.forwardRef( ( { compressed, @@ -90,7 +94,7 @@ export const FileUpload = React.forwardRef( fullWidth={fullWidth} aria-label={i18nTexts.defaultPickerLabel} id={id} - ref={ref} + ref={ref as React.Ref>} onChange={(fs) => { uploadState.setFiles(Array.from(fs ?? [])); if (immediate && uploadState.hasFiles()) uploadState.upload(meta); diff --git a/packages/shared-ux/file/file_upload/impl/src/file_upload.tsx b/packages/shared-ux/file/file_upload/impl/src/file_upload.tsx index 45e74312e1e55..8fdc292bc5431 100644 --- a/packages/shared-ux/file/file_upload/impl/src/file_upload.tsx +++ b/packages/shared-ux/file/file_upload/impl/src/file_upload.tsx @@ -6,8 +6,8 @@ * Side Public License, v 1. */ -import { EuiFilePicker } from '@elastic/eui'; import React, { type FunctionComponent, useRef, useEffect, useMemo } from 'react'; +import type { EuiFilePickerClass } from '@elastic/eui/src/components/form/file_picker/file_picker'; import type { FileJSON } from '@kbn/shared-ux-file-types'; import { useFilesContext } from '@kbn/shared-ux-file-context'; @@ -136,7 +136,7 @@ export const FileUpload = ({ className, }: Props): ReturnType => { const { client } = useFilesContext(); - const ref = useRef(null); + const ref = useRef(null); const fileKind = client.getFileKind(kindId); const repeatedUploads = compressed || allowRepeatedUploads; const uploadState = useMemo( diff --git a/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts b/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts index a5b264882ca3d..732685c732ff7 100644 --- a/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts +++ b/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts @@ -115,7 +115,7 @@ describe('checking migration metadata changes on all registered SO types', () => "ingest-agent-policies": "90625b4a5ded9d4867358fcccc14a57c0454fcee", "ingest-download-sources": "279a68147e62e4d8858c09ad1cf03bd5551ce58d", "ingest-outputs": "daafff49255ab700e07491376fe89f04fc998b91", - "ingest-package-policies": "579cd432aa814145f59587354c0f55c71341e5dd", + "ingest-package-policies": "2c0f7c72d211bb7d3076ce2fc0bd368f9c16d274", "ingest_manager_settings": "91445219e7115ff0c45d1dabd5d614a80b421797", "inventory-view": "b8683c8e352a286b4aca1ab21003115a4800af83", "kql-telemetry": "93c1d16c1a0dfca9c8842062cf5ef8f62ae401ad", diff --git a/src/dev/build/args.test.ts b/src/dev/build/args.test.ts index 5d1aabc85a7f6..1ef318099a657 100644 --- a/src/dev/build/args.test.ts +++ b/src/dev/build/args.test.ts @@ -31,13 +31,13 @@ it('build default and oss dist for current platform, without packages, by defaul "createArchives": true, "createCdnAssets": true, "createDebPackage": false, - "createDockerChainguard": false, "createDockerCloud": false, "createDockerContexts": true, "createDockerFIPS": false, "createDockerServerless": false, "createDockerUBI": false, "createDockerUbuntu": false, + "createDockerWolfi": false, "createGenericFolders": true, "createPlatformFolders": true, "createRpmPackage": false, @@ -73,13 +73,13 @@ it('builds packages if --all-platforms is passed', () => { "createArchives": true, "createCdnAssets": true, "createDebPackage": true, - "createDockerChainguard": true, "createDockerCloud": true, "createDockerContexts": true, "createDockerFIPS": true, "createDockerServerless": true, "createDockerUBI": true, "createDockerUbuntu": true, + "createDockerWolfi": true, "createGenericFolders": true, "createPlatformFolders": true, "createRpmPackage": true, @@ -115,13 +115,13 @@ it('limits packages if --rpm passed with --all-platforms', () => { "createArchives": true, "createCdnAssets": true, "createDebPackage": false, - "createDockerChainguard": false, "createDockerCloud": false, "createDockerContexts": true, "createDockerFIPS": false, "createDockerServerless": false, "createDockerUBI": false, "createDockerUbuntu": false, + "createDockerWolfi": false, "createGenericFolders": true, "createPlatformFolders": true, "createRpmPackage": true, @@ -157,13 +157,13 @@ it('limits packages if --deb passed with --all-platforms', () => { "createArchives": true, "createCdnAssets": true, "createDebPackage": true, - "createDockerChainguard": false, "createDockerCloud": false, "createDockerContexts": true, "createDockerFIPS": false, "createDockerServerless": false, "createDockerUBI": false, "createDockerUbuntu": false, + "createDockerWolfi": false, "createGenericFolders": true, "createPlatformFolders": true, "createRpmPackage": false, @@ -200,13 +200,13 @@ it('limits packages if --docker passed with --all-platforms', () => { "createArchives": true, "createCdnAssets": true, "createDebPackage": false, - "createDockerChainguard": true, "createDockerCloud": true, "createDockerContexts": true, "createDockerFIPS": true, "createDockerServerless": true, "createDockerUBI": true, "createDockerUbuntu": true, + "createDockerWolfi": true, "createGenericFolders": true, "createPlatformFolders": true, "createRpmPackage": false, @@ -250,13 +250,13 @@ it('limits packages if --docker passed with --skip-docker-ubi and --all-platform "createArchives": true, "createCdnAssets": true, "createDebPackage": false, - "createDockerChainguard": true, "createDockerCloud": true, "createDockerContexts": true, "createDockerFIPS": true, "createDockerServerless": true, "createDockerUBI": false, "createDockerUbuntu": true, + "createDockerWolfi": true, "createGenericFolders": true, "createPlatformFolders": true, "createRpmPackage": false, @@ -293,13 +293,13 @@ it('limits packages if --all-platforms passed with --skip-docker-ubuntu', () => "createArchives": true, "createCdnAssets": true, "createDebPackage": true, - "createDockerChainguard": true, "createDockerCloud": true, "createDockerContexts": true, "createDockerFIPS": true, "createDockerServerless": true, "createDockerUBI": true, "createDockerUbuntu": false, + "createDockerWolfi": true, "createGenericFolders": true, "createPlatformFolders": true, "createRpmPackage": true, @@ -336,13 +336,13 @@ it('limits packages if --all-platforms passed with --skip-docker-fips', () => { "createArchives": true, "createCdnAssets": true, "createDebPackage": true, - "createDockerChainguard": true, "createDockerCloud": true, "createDockerContexts": true, "createDockerFIPS": false, "createDockerServerless": true, "createDockerUBI": true, "createDockerUbuntu": true, + "createDockerWolfi": true, "createGenericFolders": true, "createPlatformFolders": true, "createRpmPackage": true, diff --git a/src/dev/build/args.ts b/src/dev/build/args.ts index 2ffab8ccb17b9..1bc68c751119d 100644 --- a/src/dev/build/args.ts +++ b/src/dev/build/args.ts @@ -31,7 +31,7 @@ export function readCliArgs(argv: string[]) { 'skip-docker-contexts', 'skip-docker-ubi', 'skip-docker-ubuntu', - 'skip-docker-chainguard', + 'skip-docker-wolfi', 'skip-docker-cloud', 'skip-docker-serverless', 'skip-docker-fips', @@ -141,8 +141,7 @@ export function readCliArgs(argv: string[]) { createDebPackage: isOsPackageDesired('deb'), createDockerUbuntu: isOsPackageDesired('docker-images') && !Boolean(flags['skip-docker-ubuntu']), - createDockerChainguard: - isOsPackageDesired('docker-images') && !Boolean(flags['skip-docker-chainguard']), + createDockerWolfi: isOsPackageDesired('docker-images') && !Boolean(flags['skip-docker-wolfi']), createDockerCloud: isOsPackageDesired('docker-images') && !Boolean(flags['skip-docker-cloud']), createDockerServerless: (isOsPackageDesired('docker-images') && !Boolean(flags['skip-docker-serverless'])) || diff --git a/src/dev/build/build_distributables.ts b/src/dev/build/build_distributables.ts index fca37dd46769b..9e8fa29979cf5 100644 --- a/src/dev/build/build_distributables.ts +++ b/src/dev/build/build_distributables.ts @@ -31,7 +31,7 @@ export interface BuildOptions { createDebPackage: boolean; createDockerUBI: boolean; createDockerUbuntu: boolean; - createDockerChainguard: boolean; + createDockerWolfi: boolean; createDockerCloud: boolean; createDockerServerless: boolean; createDockerContexts: boolean; @@ -151,9 +151,9 @@ export async function buildDistributables(log: ToolingLog, options: BuildOptions await run(Tasks.CreateDockerUbuntu); } - if (options.createDockerChainguard) { - // control w/ --docker-images or --skip-docker-chainguard or --skip-os-packages - await run(Tasks.CreateDockerChainguard); + if (options.createDockerWolfi) { + // control w/ --docker-images or --skip-docker-wolfi or --skip-os-packages + await run(Tasks.CreateDockerWolfi); } if (options.createDockerCloud) { // control w/ --docker-images and --skip-docker-cloud diff --git a/src/dev/build/cli.ts b/src/dev/build/cli.ts index 105ce366742a5..73abe4322f647 100644 --- a/src/dev/build/cli.ts +++ b/src/dev/build/cli.ts @@ -47,7 +47,7 @@ if (showHelp) { --skip-cdn-assets {dim Don't build CDN assets} --skip-docker-ubi {dim Don't build the docker ubi image} --skip-docker-ubuntu {dim Don't build the docker ubuntu image} - --skip-docker-chainguard {dim Don't build the docker chainguard image} + --skip-docker-wolfi {dim Don't build the docker wolfi image} --skip-docker-fips {dim Don't build the docker fips image} --release {dim Produce a release-ready distributable} --version-qualifier {dim Suffix version with a qualifier} diff --git a/src/dev/build/tasks/os_packages/create_os_package_tasks.ts b/src/dev/build/tasks/os_packages/create_os_package_tasks.ts index b71f900986380..f422d9fae221a 100644 --- a/src/dev/build/tasks/os_packages/create_os_package_tasks.ts +++ b/src/dev/build/tasks/os_packages/create_os_package_tasks.ts @@ -80,20 +80,20 @@ export const CreateDockerUbuntu: Task = { }, }; -export const CreateDockerChainguard: Task = { - description: 'Creating Docker Chainguard image', +export const CreateDockerWolfi: Task = { + description: 'Creating Docker Wolfi image', async run(config, log, build) { await runDockerGenerator(config, log, build, { architecture: 'x64', - baseImage: 'chainguard', + baseImage: 'wolfi', context: false, image: true, dockerBuildDate, }); await runDockerGenerator(config, log, build, { architecture: 'aarch64', - baseImage: 'chainguard', + baseImage: 'wolfi', context: false, image: true, dockerBuildDate, @@ -183,7 +183,7 @@ export const CreateDockerContexts: Task = { dockerBuildDate, }); await runDockerGenerator(config, log, build, { - baseImage: 'chainguard', + baseImage: 'wolfi', context: true, image: false, dockerBuildDate, diff --git a/src/dev/build/tasks/os_packages/docker_generator/run.ts b/src/dev/build/tasks/os_packages/docker_generator/run.ts index 88de0e92e868f..25cb0d8d0d2d1 100644 --- a/src/dev/build/tasks/os_packages/docker_generator/run.ts +++ b/src/dev/build/tasks/os_packages/docker_generator/run.ts @@ -29,7 +29,7 @@ export async function runDockerGenerator( build: Build, flags: { architecture?: string; - baseImage: 'none' | 'chainguard' | 'ubi' | 'ubuntu'; + baseImage: 'none' | 'wolfi' | 'ubi' | 'ubuntu'; context: boolean; image: boolean; ironbank?: boolean; @@ -42,12 +42,12 @@ export async function runDockerGenerator( let baseImageName = ''; if (flags.baseImage === 'ubuntu') baseImageName = 'ubuntu:20.04'; if (flags.baseImage === 'ubi') baseImageName = 'docker.elastic.co/ubi9/ubi-minimal:latest'; - if (flags.baseImage === 'chainguard') + if (flags.baseImage === 'wolfi') baseImageName = 'docker.elastic.co/wolfi/chainguard-base:20230214'; let imageFlavor = ''; if (flags.baseImage === 'ubi') imageFlavor += `-ubi`; - if (flags.baseImage === 'chainguard') imageFlavor += `-chainguard`; + if (flags.baseImage === 'wolfi') imageFlavor += `-wolfi`; if (flags.ironbank) imageFlavor += '-ironbank'; if (flags.cloud) imageFlavor += '-cloud'; if (flags.serverless) imageFlavor += '-serverless'; diff --git a/src/dev/build/tasks/os_packages/docker_generator/template_context.ts b/src/dev/build/tasks/os_packages/docker_generator/template_context.ts index b6cdd9e549956..2d6d2fbd200bd 100644 --- a/src/dev/build/tasks/os_packages/docker_generator/template_context.ts +++ b/src/dev/build/tasks/os_packages/docker_generator/template_context.ts @@ -24,7 +24,7 @@ export interface TemplateContext { dockerBuildDate: string; usePublicArtifact?: boolean; publicArtifactSubdomain: string; - baseImage: 'none' | 'ubi' | 'ubuntu' | 'chainguard'; + baseImage: 'none' | 'ubi' | 'ubuntu' | 'wolfi'; baseImageName: string; cloud?: boolean; serverless?: boolean; diff --git a/src/dev/build/tasks/os_packages/docker_generator/templates/base/Dockerfile b/src/dev/build/tasks/os_packages/docker_generator/templates/base/Dockerfile index e7f515ed3bfe2..ecb93cfd50792 100644 --- a/src/dev/build/tasks/os_packages/docker_generator/templates/base/Dockerfile +++ b/src/dev/build/tasks/os_packages/docker_generator/templates/base/Dockerfile @@ -17,9 +17,9 @@ RUN microdnf install -y findutils tar gzip {{#ubuntu}} RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y curl {{/ubuntu}} -{{#chainguard}} +{{#wolfi}} RUN apk --no-cache add curl -{{/chainguard}} +{{/wolfi}} {{#usePublicArtifact}} RUN cd /tmp && \ @@ -109,9 +109,9 @@ RUN for iter in {1..10}; do \ done; \ (exit $exit_code) {{/ubuntu}} -{{#chainguard}} +{{#wolfi}} RUN apk --no-cache add bash curl fontconfig libstdc++ freetype nss findutils shadow -{{/chainguard}} +{{/wolfi}} # Bring in Kibana from the initial stage. COPY --from=builder --chown=1000:0 /usr/share/kibana /usr/share/kibana diff --git a/src/dev/build/tasks/os_packages/docker_generator/templates/dockerfile.template.ts b/src/dev/build/tasks/os_packages/docker_generator/templates/dockerfile.template.ts index b07be8b073747..a0e50fb3528ff 100755 --- a/src/dev/build/tasks/os_packages/docker_generator/templates/dockerfile.template.ts +++ b/src/dev/build/tasks/os_packages/docker_generator/templates/dockerfile.template.ts @@ -16,7 +16,7 @@ function generator(options: TemplateContext) { const dir = options.ironbank ? 'ironbank' : 'base'; const template = readFileSync(resolve(__dirname, dir, './Dockerfile')); return Mustache.render(template.toString(), { - chainguard: options.baseImage === 'chainguard', + wolfi: options.baseImage === 'wolfi', ubi: options.baseImage === 'ubi', ubuntu: options.baseImage === 'ubuntu', opensslLegacyProvider: !(options.cloud || options.serverless || options.fips), diff --git a/src/dev/license_checker/config.ts b/src/dev/license_checker/config.ts index 61671275ecff9..fabd250b29137 100644 --- a/src/dev/license_checker/config.ts +++ b/src/dev/license_checker/config.ts @@ -86,7 +86,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.1': ['Elastic License 2.0'], - '@elastic/eui@95.1.0-backport.0': ['SSPL-1.0 OR Elastic License 2.0'], + '@elastic/eui@95.2.0': ['SSPL-1.0 OR Elastic License 2.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/advanced_settings/public/plugin.tsx b/src/plugins/advanced_settings/public/plugin.tsx index aca337c70ceac..23e52787207ce 100644 --- a/src/plugins/advanced_settings/public/plugin.tsx +++ b/src/plugins/advanced_settings/public/plugin.tsx @@ -30,10 +30,7 @@ const title = i18n.translate('advancedSettings.advancedSettingsLabel', { export class AdvancedSettingsPlugin implements Plugin { - public setup( - core: CoreSetup, - { management, home, usageCollection }: AdvancedSettingsPluginSetup - ) { + public setup(core: CoreSetup, { management, home }: AdvancedSettingsPluginSetup) { const kibanaSection = management.sections.section.kibana; kibanaSection.registerApp({ @@ -42,6 +39,9 @@ export class AdvancedSettingsPlugin order: 3, async mount({ element, setBreadcrumbs, history }) { const [coreStart] = await core.getStartServices(); + + const { docTitle } = coreStart.chrome; + docTitle.change(title); setBreadcrumbs([{ text: title }]); ReactDOM.render( @@ -53,6 +53,7 @@ export class AdvancedSettingsPlugin element ); return () => { + docTitle.reset(); ReactDOM.unmountComponentAtNode(element); }; }, diff --git a/src/plugins/ai_assistant_management/selection/public/routes/components/ai_assistant_selection_page.tsx b/src/plugins/ai_assistant_management/selection/public/routes/components/ai_assistant_selection_page.tsx index 41422212fa08b..9b0941d86a5d4 100644 --- a/src/plugins/ai_assistant_management/selection/public/routes/components/ai_assistant_selection_page.tsx +++ b/src/plugins/ai_assistant_management/selection/public/routes/components/ai_assistant_selection_page.tsx @@ -9,6 +9,7 @@ import React, { useEffect } from 'react'; import { i18n } from '@kbn/i18n'; import { + EuiButton, EuiCallOut, EuiCard, EuiFlexGrid, @@ -86,32 +87,48 @@ export function AiAssistantSelectionPage() { ) : null} - + {i18n.translate( + 'aiAssistantManagementSelection.aiAssistantSelectionPage.obsAssistant.documentationLinkDescription', + { defaultMessage: 'For more info, see our' } + )}{' '} + + {i18n.translate( + 'aiAssistantManagementSelection.aiAssistantSelectionPage.obsAssistant.documentationLinkLabel', + { defaultMessage: 'documentation' } + )} + +

+ + navigateToApp('management', { + path: 'kibana/observabilityAiAssistantManagement', + }) + } > {i18n.translate( - 'aiAssistantManagementSelection.aiAssistantSettingsPage.obsAssistant.documentationLinkLabel', - { defaultMessage: 'Documentation' } + 'aiAssistantManagementSelection.aiAssistantSelectionPage.obsAssistant.manageSettingsButtonLabel', + { defaultMessage: 'Manage Settings' } )} -
+ } display="plain" hasBorder - icon={} + icon={} isDisabled={!observabilityAIAssistantEnabled} - layout="horizontal" title={i18n.translate( 'aiAssistantManagementSelection.aiAssistantSelectionPage.observabilityLabel', { defaultMessage: 'Elastic AI Assistant for Observability' } )} titleSize="xs" - onClick={() => - navigateToApp('management', { path: 'kibana/observabilityAiAssistantManagement' }) - } /> @@ -135,32 +152,46 @@ export function AiAssistantSelectionPage() { ) : null} - + {i18n.translate( + 'aiAssistantManagementSelection.aiAssistantSelectionPage.securityAssistant.documentationLinkDescription', + { defaultMessage: 'For more info, see our' } + )}{' '} + + {i18n.translate( + 'aiAssistantManagementSelection.aiAssistantSettingsPage.securityAssistant.documentationLinkLabel', + { defaultMessage: 'documentation' } + )} + +

+ + navigateToApp('management', { path: 'kibana/securityAiAssistantManagement' }) + } > {i18n.translate( - 'aiAssistantManagementSelection.aiAssistantSettingsPage.securityAssistant.documentationLinkLabel', - { defaultMessage: 'Documentation' } + 'aiAssistantManagementSelection.aiAssistantSelectionPage.securityAssistant.manageSettingsButtonLabel', + { defaultMessage: 'Manage Settings' } )} -
+ } display="plain" hasBorder - icon={} + icon={} isDisabled={!securityAIAssistantEnabled} - layout="horizontal" title={i18n.translate( 'aiAssistantManagementSelection.aiAssistantSelectionPage.securityLabel', { defaultMessage: 'Elastic AI Assistant for Security' } )} titleSize="xs" - onClick={() => - navigateToApp('management', { path: 'kibana/securityAiAssistantManagement' }) - } />
diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/capabilities.json b/src/plugins/console/server/lib/spec_definitions/json/generated/capabilities.json new file mode 100644 index 0000000000000..148c9f1ad027b --- /dev/null +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/capabilities.json @@ -0,0 +1,15 @@ +{ + "capabilities": { + "methods": [ + "GET" + ], + "patterns": [ + "_capabilities" + ], + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/capabilities.html", + "availability": { + "stack": false, + "serverless": false + } + } +} diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/cluster.put_component_template.json b/src/plugins/console/server/lib/spec_definitions/json/generated/cluster.put_component_template.json index 3caf19f4084e1..a7afc71940327 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/cluster.put_component_template.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/cluster.put_component_template.json @@ -10,8 +10,7 @@ "30s", "-1", "0" - ], - "cause": "" + ] }, "methods": [ "PUT", diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/connector.put.json b/src/plugins/console/server/lib/spec_definitions/json/generated/connector.put.json index 3565e6933f0d3..613a82ceacfe8 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/connector.put.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/connector.put.json @@ -10,7 +10,8 @@ "PUT" ], "patterns": [ - "_connector/{connector_id}" + "_connector/{connector_id}", + "_connector" ], "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/create-connector-api.html", "availability": { diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/connector.secret_delete.json b/src/plugins/console/server/lib/spec_definitions/json/generated/connector.secret_delete.json new file mode 100644 index 0000000000000..845c8a0b7510a --- /dev/null +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/connector.secret_delete.json @@ -0,0 +1,15 @@ +{ + "connector.secret_delete": { + "methods": [ + "DELETE" + ], + "patterns": [ + "_connector/_secret/{id}" + ], + "documentation": null, + "availability": { + "stack": false, + "serverless": false + } + } +} diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/connector.secret_get.json b/src/plugins/console/server/lib/spec_definitions/json/generated/connector.secret_get.json new file mode 100644 index 0000000000000..989e599eb66f7 --- /dev/null +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/connector.secret_get.json @@ -0,0 +1,15 @@ +{ + "connector.secret_get": { + "methods": [ + "GET" + ], + "patterns": [ + "_connector/_secret/{id}" + ], + "documentation": null, + "availability": { + "stack": false, + "serverless": false + } + } +} diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/connector.secret_post.json b/src/plugins/console/server/lib/spec_definitions/json/generated/connector.secret_post.json new file mode 100644 index 0000000000000..a26ec68bf8689 --- /dev/null +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/connector.secret_post.json @@ -0,0 +1,15 @@ +{ + "connector.secret_post": { + "methods": [ + "POST" + ], + "patterns": [ + "_connector/_secret" + ], + "documentation": null, + "availability": { + "stack": false, + "serverless": false + } + } +} diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/connector.secret_put.json b/src/plugins/console/server/lib/spec_definitions/json/generated/connector.secret_put.json new file mode 100644 index 0000000000000..79f61c764ccc5 --- /dev/null +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/connector.secret_put.json @@ -0,0 +1,15 @@ +{ + "connector.secret_put": { + "methods": [ + "PUT" + ], + "patterns": [ + "_connector/_secret/{id}" + ], + "documentation": null, + "availability": { + "stack": false, + "serverless": false + } + } +} diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/connector.sync_job_check_in.json b/src/plugins/console/server/lib/spec_definitions/json/generated/connector.sync_job_check_in.json new file mode 100644 index 0000000000000..54be708a6e7fe --- /dev/null +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/connector.sync_job_check_in.json @@ -0,0 +1,15 @@ +{ + "connector.sync_job_check_in": { + "methods": [ + "PUT" + ], + "patterns": [ + "_connector/_sync_job/{connector_sync_job_id}/_check_in" + ], + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/check-in-connector-sync-job-api.html", + "availability": { + "stack": true, + "serverless": false + } + } +} diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/connector.sync_job_claim.json b/src/plugins/console/server/lib/spec_definitions/json/generated/connector.sync_job_claim.json new file mode 100644 index 0000000000000..7abe3c845a22d --- /dev/null +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/connector.sync_job_claim.json @@ -0,0 +1,15 @@ +{ + "connector.sync_job_claim": { + "methods": [ + "PUT" + ], + "patterns": [ + "_connector/_sync_job/{connector_sync_job_id}/_claim" + ], + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/claim-connector-sync-job-api.html", + "availability": { + "stack": true, + "serverless": false + } + } +} diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/connector.sync_job_error.json b/src/plugins/console/server/lib/spec_definitions/json/generated/connector.sync_job_error.json new file mode 100644 index 0000000000000..c312d25bfb3ac --- /dev/null +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/connector.sync_job_error.json @@ -0,0 +1,15 @@ +{ + "connector.sync_job_error": { + "methods": [ + "PUT" + ], + "patterns": [ + "_connector/_sync_job/{connector_sync_job_id}/_error" + ], + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/set-connector-sync-job-error-api.html", + "availability": { + "stack": true, + "serverless": false + } + } +} diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/connector.sync_job_update_stats.json b/src/plugins/console/server/lib/spec_definitions/json/generated/connector.sync_job_update_stats.json new file mode 100644 index 0000000000000..f6b09c8a5b658 --- /dev/null +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/connector.sync_job_update_stats.json @@ -0,0 +1,15 @@ +{ + "connector.sync_job_update_stats": { + "methods": [ + "PUT" + ], + "patterns": [ + "_connector/_sync_job/{connector_sync_job_id}/_stats" + ], + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/set-connector-sync-job-stats-api.html", + "availability": { + "stack": true, + "serverless": false + } + } +} diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/connector.update_features.json b/src/plugins/console/server/lib/spec_definitions/json/generated/connector.update_features.json new file mode 100644 index 0000000000000..fd9ef3fbcced0 --- /dev/null +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/connector.update_features.json @@ -0,0 +1,15 @@ +{ + "connector.update_features": { + "methods": [ + "PUT" + ], + "patterns": [ + "_connector/{connector_id}/_features" + ], + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/update-connector-features-api.html", + "availability": { + "stack": true, + "serverless": false + } + } +} diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/esql.async_query.json b/src/plugins/console/server/lib/spec_definitions/json/generated/esql.async_query.json new file mode 100644 index 0000000000000..5e1a042cbd99b --- /dev/null +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/esql.async_query.json @@ -0,0 +1,15 @@ +{ + "esql.async_query": { + "methods": [ + "POST" + ], + "patterns": [ + "_query/async" + ], + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/esql-async-query-api.html", + "availability": { + "stack": true, + "serverless": false + } + } +} diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/esql.async_query_get.json b/src/plugins/console/server/lib/spec_definitions/json/generated/esql.async_query_get.json new file mode 100644 index 0000000000000..4a459ad7a5dfc --- /dev/null +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/esql.async_query_get.json @@ -0,0 +1,15 @@ +{ + "esql.async_query_get": { + "methods": [ + "GET" + ], + "patterns": [ + "_query/async/{id}" + ], + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/esql-async-query-get-api.html", + "availability": { + "stack": true, + "serverless": false + } + } +} diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/inference.delete_model.json b/src/plugins/console/server/lib/spec_definitions/json/generated/inference.delete.json similarity index 84% rename from src/plugins/console/server/lib/spec_definitions/json/generated/inference.delete_model.json rename to src/plugins/console/server/lib/spec_definitions/json/generated/inference.delete.json index 7e082d86a8bcc..6fa19254ec50a 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/inference.delete_model.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/inference.delete.json @@ -1,10 +1,12 @@ { - "inference.delete_model": { + "inference.delete": { "url_params": { "error_trace": "__flag__", "filter_path": [], "human": "__flag__", - "pretty": "__flag__" + "pretty": "__flag__", + "dry_run": "__flag__", + "force": "__flag__" }, "url_components": { "task_type": [ diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/inference.get_model.json b/src/plugins/console/server/lib/spec_definitions/json/generated/inference.get.json similarity index 95% rename from src/plugins/console/server/lib/spec_definitions/json/generated/inference.get_model.json rename to src/plugins/console/server/lib/spec_definitions/json/generated/inference.get.json index 0fe3602233280..906eb3f584541 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/inference.get_model.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/inference.get.json @@ -1,5 +1,5 @@ { - "inference.get_model": { + "inference.get": { "url_params": { "error_trace": "__flag__", "filter_path": [], diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/inference.put_model.json b/src/plugins/console/server/lib/spec_definitions/json/generated/inference.put.json similarity index 95% rename from src/plugins/console/server/lib/spec_definitions/json/generated/inference.put_model.json rename to src/plugins/console/server/lib/spec_definitions/json/generated/inference.put.json index 9bd3f0df09de3..9109c3cb909f1 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/inference.put_model.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/inference.put.json @@ -1,5 +1,5 @@ { - "inference.put_model": { + "inference.put": { "url_params": { "error_trace": "__flag__", "filter_path": [], diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/ml.get_trained_models.json b/src/plugins/console/server/lib/spec_definitions/json/generated/ml.get_trained_models.json index 285c38fee485b..a192a36c17057 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/ml.get_trained_models.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/ml.get_trained_models.json @@ -19,7 +19,7 @@ "size": [ "100" ], - "tags": "" + "tags": [] }, "methods": [ "GET" diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/ml.update_trained_model_deployment.json b/src/plugins/console/server/lib/spec_definitions/json/generated/ml.update_trained_model_deployment.json index 8e7f488299c84..15a3ee7ef9750 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/ml.update_trained_model_deployment.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/ml.update_trained_model_deployment.json @@ -1,5 +1,14 @@ { "ml.update_trained_model_deployment": { + "url_params": { + "error_trace": "__flag__", + "filter_path": [], + "human": "__flag__", + "pretty": "__flag__", + "number_of_allocations": [ + "1" + ] + }, "methods": [ "POST" ], @@ -9,7 +18,7 @@ "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/update-trained-model-deployment.html", "availability": { "stack": true, - "serverless": false + "serverless": true } } } diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/profiling.flamegraph.json b/src/plugins/console/server/lib/spec_definitions/json/generated/profiling.flamegraph.json new file mode 100644 index 0000000000000..0d5b3b76fcd48 --- /dev/null +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/profiling.flamegraph.json @@ -0,0 +1,15 @@ +{ + "profiling.flamegraph": { + "methods": [ + "POST" + ], + "patterns": [ + "_profiling/flamegraph" + ], + "documentation": "https://www.elastic.co/guide/en/observability/current/universal-profiling.html", + "availability": { + "stack": false, + "serverless": false + } + } +} diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/profiling.stacktraces.json b/src/plugins/console/server/lib/spec_definitions/json/generated/profiling.stacktraces.json new file mode 100644 index 0000000000000..61dbb1147fe13 --- /dev/null +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/profiling.stacktraces.json @@ -0,0 +1,15 @@ +{ + "profiling.stacktraces": { + "methods": [ + "POST" + ], + "patterns": [ + "_profiling/stacktraces" + ], + "documentation": "https://www.elastic.co/guide/en/observability/current/universal-profiling.html", + "availability": { + "stack": false, + "serverless": false + } + } +} diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/profiling.status.json b/src/plugins/console/server/lib/spec_definitions/json/generated/profiling.status.json new file mode 100644 index 0000000000000..c64acf2e2e6b7 --- /dev/null +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/profiling.status.json @@ -0,0 +1,15 @@ +{ + "profiling.status": { + "methods": [ + "GET" + ], + "patterns": [ + "_profiling/status" + ], + "documentation": "https://www.elastic.co/guide/en/observability/current/universal-profiling.html", + "availability": { + "stack": false, + "serverless": false + } + } +} diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/profiling.topn_functions.json b/src/plugins/console/server/lib/spec_definitions/json/generated/profiling.topn_functions.json new file mode 100644 index 0000000000000..b47ff26f3f53b --- /dev/null +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/profiling.topn_functions.json @@ -0,0 +1,15 @@ +{ + "profiling.topn_functions": { + "methods": [ + "POST" + ], + "patterns": [ + "_profiling/topn/functions" + ], + "documentation": "https://www.elastic.co/guide/en/observability/current/universal-profiling.html", + "availability": { + "stack": false, + "serverless": false + } + } +} diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/query_rule.delete.json b/src/plugins/console/server/lib/spec_definitions/json/generated/query_rule.delete.json new file mode 100644 index 0000000000000..eea5d085b03bc --- /dev/null +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/query_rule.delete.json @@ -0,0 +1,21 @@ +{ + "query_rule.delete": { + "url_params": { + "error_trace": "__flag__", + "filter_path": [], + "human": "__flag__", + "pretty": "__flag__" + }, + "methods": [ + "DELETE" + ], + "patterns": [ + "_query_rules/{ruleset_id}/_rule/{rule_id}" + ], + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/delete-query-rule.html", + "availability": { + "stack": true, + "serverless": true + } + } +} diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/query_rule.get.json b/src/plugins/console/server/lib/spec_definitions/json/generated/query_rule.get.json new file mode 100644 index 0000000000000..27564d1fe7b16 --- /dev/null +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/query_rule.get.json @@ -0,0 +1,21 @@ +{ + "query_rule.get": { + "url_params": { + "error_trace": "__flag__", + "filter_path": [], + "human": "__flag__", + "pretty": "__flag__" + }, + "methods": [ + "GET" + ], + "patterns": [ + "_query_rules/{ruleset_id}/_rule/{rule_id}" + ], + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/get-query-rule.html", + "availability": { + "stack": true, + "serverless": true + } + } +} diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/query_rule.put.json b/src/plugins/console/server/lib/spec_definitions/json/generated/query_rule.put.json new file mode 100644 index 0000000000000..346eeba09e6ed --- /dev/null +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/query_rule.put.json @@ -0,0 +1,21 @@ +{ + "query_rule.put": { + "url_params": { + "error_trace": "__flag__", + "filter_path": [], + "human": "__flag__", + "pretty": "__flag__" + }, + "methods": [ + "PUT" + ], + "patterns": [ + "_query_rules/{ruleset_id}/_rule/{rule_id}" + ], + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/put-query-rule.html", + "availability": { + "stack": true, + "serverless": true + } + } +} diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/search_application.search.json b/src/plugins/console/server/lib/spec_definitions/json/generated/search_application.search.json index f631d4d66edb3..7c56913704d1c 100644 --- a/src/plugins/console/server/lib/spec_definitions/json/generated/search_application.search.json +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/search_application.search.json @@ -4,7 +4,8 @@ "error_trace": "__flag__", "filter_path": [], "human": "__flag__", - "pretty": "__flag__" + "pretty": "__flag__", + "typed_keys": "__flag__" }, "methods": [ "GET", diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/security.query_user.json b/src/plugins/console/server/lib/spec_definitions/json/generated/security.query_user.json new file mode 100644 index 0000000000000..4b8f22799b4bc --- /dev/null +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/security.query_user.json @@ -0,0 +1,16 @@ +{ + "security.query_user": { + "methods": [ + "GET", + "POST" + ], + "patterns": [ + "_security/_query/user" + ], + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-query-user.html", + "availability": { + "stack": true, + "serverless": false + } + } +} diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/simulate.ingest.json b/src/plugins/console/server/lib/spec_definitions/json/generated/simulate.ingest.json new file mode 100644 index 0000000000000..9f7c9a4e91b3d --- /dev/null +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/simulate.ingest.json @@ -0,0 +1,17 @@ +{ + "simulate.ingest": { + "methods": [ + "GET", + "POST" + ], + "patterns": [ + "_ingest/_simulate", + "_ingest/{index}/_simulate" + ], + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/simulate-ingest-api.html", + "availability": { + "stack": true, + "serverless": false + } + } +} diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/text_structure.find_field_structure.json b/src/plugins/console/server/lib/spec_definitions/json/generated/text_structure.find_field_structure.json new file mode 100644 index 0000000000000..08d0ca5f33c4f --- /dev/null +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/text_structure.find_field_structure.json @@ -0,0 +1,15 @@ +{ + "text_structure.find_field_structure": { + "methods": [ + "GET" + ], + "patterns": [ + "_text_structure/find_field_structure" + ], + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/find-field-structure.html", + "availability": { + "stack": true, + "serverless": false + } + } +} diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/text_structure.find_message_structure.json b/src/plugins/console/server/lib/spec_definitions/json/generated/text_structure.find_message_structure.json new file mode 100644 index 0000000000000..6d01c9d1fc96f --- /dev/null +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/text_structure.find_message_structure.json @@ -0,0 +1,16 @@ +{ + "text_structure.find_message_structure": { + "methods": [ + "GET", + "POST" + ], + "patterns": [ + "_text_structure/find_message_structure" + ], + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/find-message-structure.html", + "availability": { + "stack": true, + "serverless": false + } + } +} diff --git a/src/plugins/console/server/lib/spec_definitions/json/generated/transform.get_node_stats.json b/src/plugins/console/server/lib/spec_definitions/json/generated/transform.get_node_stats.json new file mode 100644 index 0000000000000..f876a6c186ba1 --- /dev/null +++ b/src/plugins/console/server/lib/spec_definitions/json/generated/transform.get_node_stats.json @@ -0,0 +1,15 @@ +{ + "transform.get_node_stats": { + "methods": [ + "GET" + ], + "patterns": [ + "_transform/_node_stats" + ], + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/get-transform-node-stats.html", + "availability": { + "stack": true, + "serverless": false + } + } +} diff --git a/src/plugins/data/kibana.jsonc b/src/plugins/data/kibana.jsonc index 2881da532d63a..c109bde374680 100644 --- a/src/plugins/data/kibana.jsonc +++ b/src/plugins/data/kibana.jsonc @@ -27,8 +27,7 @@ "management" ], "optionalPlugins": [ - "usageCollection", - "security" + "usageCollection" ], "requiredBundles": [ "kibanaUtils", diff --git a/src/plugins/data/server/plugin.ts b/src/plugins/data/server/plugin.ts index dfe88a12026bb..77f90393a6164 100644 --- a/src/plugins/data/server/plugin.ts +++ b/src/plugins/data/server/plugin.ts @@ -12,7 +12,6 @@ import { BfetchServerSetup } from '@kbn/bfetch-plugin/server'; import { PluginStart as DataViewsServerPluginStart } from '@kbn/data-views-plugin/server'; import { UsageCollectionSetup } from '@kbn/usage-collection-plugin/server'; import { FieldFormatsSetup, FieldFormatsStart } from '@kbn/field-formats-plugin/server'; -import type { SecurityPluginSetup } from '@kbn/security-plugin/server'; import { ConfigSchema } from '../config'; import type { ISearchSetup, ISearchStart } from './search'; import { DatatableUtilitiesService } from './datatable_utilities'; @@ -51,7 +50,6 @@ export interface DataPluginSetupDependencies { expressions: ExpressionsServerSetup; usageCollection?: UsageCollectionSetup; fieldFormats: FieldFormatsSetup; - security?: SecurityPluginSetup; } export interface DataPluginStartDependencies { @@ -86,7 +84,7 @@ export class DataServerPlugin public setup( core: CoreSetup, - { bfetch, expressions, usageCollection, fieldFormats, security }: DataPluginSetupDependencies + { bfetch, expressions, usageCollection, fieldFormats }: DataPluginSetupDependencies ) { this.scriptsService.setup(core); const querySetup = this.queryService.setup(core); @@ -98,7 +96,6 @@ export class DataServerPlugin bfetch, expressions, usageCollection, - security, }); return { diff --git a/src/plugins/data/server/search/search_service.ts b/src/plugins/data/server/search/search_service.ts index 4de7cec4dade6..09bee9bb8bab8 100644 --- a/src/plugins/data/server/search/search_service.ts +++ b/src/plugins/data/server/search/search_service.ts @@ -32,7 +32,6 @@ import { ExpressionsServerSetup } from '@kbn/expressions-plugin/server'; import { FieldFormatsStart } from '@kbn/field-formats-plugin/server'; import { UsageCollectionSetup } from '@kbn/usage-collection-plugin/server'; import { KbnServerError } from '@kbn/kibana-utils-plugin/server'; -import type { SecurityPluginSetup } from '@kbn/security-plugin/server'; import type { DataViewsServerPluginStart } from '@kbn/data-views-plugin/server'; import type { DataRequestHandlerContext, @@ -110,7 +109,6 @@ export interface SearchServiceSetupDependencies { bfetch: BfetchServerSetup; expressions: ExpressionsServerSetup; usageCollection?: UsageCollectionSetup; - security?: SecurityPluginSetup; } /** @internal */ @@ -147,7 +145,7 @@ export class SearchService implements Plugin { public setup( core: CoreSetup, - { bfetch, expressions, usageCollection, security }: SearchServiceSetupDependencies + { bfetch, expressions, usageCollection }: SearchServiceSetupDependencies ): ISearchSetup { core.savedObjects.registerType(searchSessionSavedObjectType); const usage = usageCollection ? usageProvider(core) : undefined; @@ -156,7 +154,7 @@ export class SearchService implements Plugin { registerSearchRoute(router); registerSessionRoutes(router, this.logger); - this.sessionService.setup(core, { security }); + this.sessionService.setup(core, {}); core.http.registerRouteHandlerContext( 'search', diff --git a/src/plugins/data/server/search/session/session_service.test.ts b/src/plugins/data/server/search/session/session_service.test.ts index 212eb810f227e..5a31cefe7b998 100644 --- a/src/plugins/data/server/search/session/session_service.test.ts +++ b/src/plugins/data/server/search/session/session_service.test.ts @@ -18,7 +18,7 @@ import { createRequestHash } from './utils'; import moment from 'moment'; import { coreMock } from '@kbn/core/server/mocks'; import { ConfigSchema } from '../../../config'; -import type { AuthenticatedUser } from '@kbn/security-plugin/common'; +import type { AuthenticatedUser } from '@kbn/core/server'; import { SEARCH_SESSION_TYPE, SearchSessionStatus } from '../../../common'; import { elasticsearchServiceMock } from '@kbn/core/server/mocks'; diff --git a/src/plugins/data/server/search/session/session_service.ts b/src/plugins/data/server/search/session/session_service.ts index 8eeff580ca450..d729795d4f8fe 100644 --- a/src/plugins/data/server/search/session/session_service.ts +++ b/src/plugins/data/server/search/session/session_service.ts @@ -18,7 +18,7 @@ import { SavedObjectsFindOptions, ElasticsearchClient, } from '@kbn/core/server'; -import type { AuthenticatedUser, SecurityPluginSetup } from '@kbn/security-plugin/server'; +import type { AuthenticatedUser } from '@kbn/core/server'; import { defer } from '@kbn/kibana-utils-plugin/common'; import type { IKibanaSearchRequest, ISearchOptions } from '@kbn/search-types'; import { debounce } from 'lodash'; @@ -43,10 +43,8 @@ export interface SearchSessionStatusDependencies extends SearchSessionDependenci internalElasticsearchClient: ElasticsearchClient; } -interface SetupDependencies { - security?: SecurityPluginSetup; -} - +// eslint-disable-next-line @typescript-eslint/no-empty-interface +interface SetupDependencies {} // eslint-disable-next-line @typescript-eslint/no-empty-interface interface StartDependencies {} @@ -68,7 +66,6 @@ interface TrackIdQueueEntry { export class SearchSessionService implements ISearchSessionService { private sessionConfig: SearchSessionsConfigSchema; - private security?: SecurityPluginSetup; private setupCompleted = false; constructor( @@ -80,8 +77,6 @@ export class SearchSessionService implements ISearchSessionService { } public setup(core: CoreSetup, deps: SetupDependencies) { - this.security = deps.security; - this.setupCompleted = true; } @@ -419,9 +414,9 @@ export class SearchSessionService implements ISearchSessionService { return session.attributes.idMapping[requestHash].id; }; - public asScopedProvider = ({ savedObjects, elasticsearch }: CoreStart) => { + public asScopedProvider = ({ security, savedObjects, elasticsearch }: CoreStart) => { return (request: KibanaRequest) => { - const user = this.security?.authc.getCurrentUser(request) ?? null; + const user = security.authc.getCurrentUser(request) ?? null; const savedObjectsClient = savedObjects.getScopedClient(request, { includedHiddenTypes: [SEARCH_SESSION_TYPE], }); diff --git a/src/plugins/data/tsconfig.json b/src/plugins/data/tsconfig.json index ea92ad9289b13..3c8d6b1718439 100644 --- a/src/plugins/data/tsconfig.json +++ b/src/plugins/data/tsconfig.json @@ -25,7 +25,6 @@ "@kbn/field-formats-plugin", "@kbn/data-views-plugin", "@kbn/screenshot-mode-plugin", - "@kbn/security-plugin", "@kbn/expressions-plugin", "@kbn/field-types", "@kbn/es-query", diff --git a/src/plugins/data_views/public/index.ts b/src/plugins/data_views/public/index.ts index 96380665548dd..f690552b5a147 100644 --- a/src/plugins/data_views/public/index.ts +++ b/src/plugins/data_views/public/index.ts @@ -67,7 +67,6 @@ export type { DataViewsContract, HasDataViewsResponse, IndicesViaSearchResponse, - UserIdGetter, } from './types'; // Export plugin after all other imports diff --git a/src/plugins/data_views/public/plugin.ts b/src/plugins/data_views/public/plugin.ts index 8ff545d8585e1..3a847ce939981 100644 --- a/src/plugins/data_views/public/plugin.ts +++ b/src/plugins/data_views/public/plugin.ts @@ -8,7 +8,6 @@ import { CoreSetup, CoreStart, Plugin, PluginInitializerContext } from '@kbn/core/public'; import { i18n } from '@kbn/i18n'; -import type { SecurityPluginStart } from '@kbn/security-plugin-types-public'; import { getIndexPatternLoad } from './expressions'; import type { ClientConfigType } from '../common/types'; import { @@ -16,7 +15,6 @@ import { DataViewsPublicPluginStart, DataViewsPublicSetupDependencies, DataViewsPublicStartDependencies, - UserIdGetter, } from './types'; import { DataViewsApiClient } from '.'; @@ -43,7 +41,6 @@ export class DataViewsPublicPlugin { private readonly hasData = new HasData(); private rollupsEnabled: boolean = false; - private userIdGetter: UserIdGetter = async () => undefined; constructor(private readonly initializerContext: PluginInitializerContext) {} @@ -63,18 +60,6 @@ export class DataViewsPublicPlugin }), }); - core.plugins.onStart<{ security: SecurityPluginStart }>('security').then(({ security }) => { - if (security.found) { - const getUserId = async function getUserId(): Promise { - const currentUser = await security.contract.authc.getCurrentUser(); - return currentUser?.profile_uid; - }; - this.userIdGetter = getUserId; - } else { - throw new Error('Security plugin is not available, but is required for Data Views plugin'); - } - }); - return { enableRollups: () => (this.rollupsEnabled = true), }; @@ -101,7 +86,10 @@ export class DataViewsPublicPlugin hasData: this.hasData.start(core), uiSettings: new UiSettingsPublicToCommon(uiSettings), savedObjectsClient: new ContentMagementWrapper(contentManagement.client), - apiClient: new DataViewsApiClient(http, () => this.userIdGetter()), + apiClient: new DataViewsApiClient(http, async () => { + const currentUser = await core.security.authc.getCurrentUser(); + return currentUser?.profile_uid; + }), fieldFormats, http, onNotification: (toastInputFields, key) => { diff --git a/src/plugins/data_views/public/types.ts b/src/plugins/data_views/public/types.ts index 98db0382f641f..7d6cbbc6cf533 100644 --- a/src/plugins/data_views/public/types.ts +++ b/src/plugins/data_views/public/types.ts @@ -106,8 +106,6 @@ export interface DataViewsPublicStartDependencies { contentManagement: ContentManagementPublicStart; } -export type UserIdGetter = () => Promise; - /** * Data plugin public Setup contract */ diff --git a/src/plugins/data_views/tsconfig.json b/src/plugins/data_views/tsconfig.json index 13fc03be53996..312de968d6408 100644 --- a/src/plugins/data_views/tsconfig.json +++ b/src/plugins/data_views/tsconfig.json @@ -33,7 +33,6 @@ "@kbn/object-versioning", "@kbn/core-saved-objects-server", "@kbn/logging", - "@kbn/security-plugin-types-public", "@kbn/crypto-browser", ], "exclude": [ diff --git a/src/plugins/files_management/common/index.ts b/src/plugins/files_management/common/index.ts index fca412a874276..74b3801773f50 100755 --- a/src/plugins/files_management/common/index.ts +++ b/src/plugins/files_management/common/index.ts @@ -12,3 +12,12 @@ export const PLUGIN_ID = 'filesManagement'; export const PLUGIN_NAME = i18n.translate('filesManagement.name', { defaultMessage: 'Files', }); + +export const LIST_BREADCRUMB = [ + { + text: i18n.translate('filesManagement.listBreadcrumb', { + defaultMessage: 'Files', + }), + href: '#/management/kibana/filesManagement', + }, +]; diff --git a/src/plugins/files_management/public/plugin.ts b/src/plugins/files_management/public/plugin.ts index b380cd63b17c6..50ed3bb7cb79b 100755 --- a/src/plugins/files_management/public/plugin.ts +++ b/src/plugins/files_management/public/plugin.ts @@ -8,7 +8,7 @@ import type { CoreSetup, Plugin } from '@kbn/core/public'; import type { ManagementAppMountParams } from '@kbn/management-plugin/public'; -import { PLUGIN_ID, PLUGIN_NAME } from '../common'; +import { LIST_BREADCRUMB, PLUGIN_ID, PLUGIN_NAME } from '../common'; import type { SetupDependencies, StartDependencies } from './types'; export class FilesManagementPlugin @@ -22,7 +22,18 @@ export class FilesManagementPlugin async mount(params: ManagementAppMountParams) { const { mountManagementSection } = await import('./mount_management_section'); const [coreStart, depsStart] = await core.getStartServices(); - return mountManagementSection(coreStart, depsStart, params); + + const { docTitle } = coreStart.chrome; + docTitle.change(PLUGIN_NAME); + + const { setBreadcrumbs } = params; + setBreadcrumbs(LIST_BREADCRUMB); + + const unmountAppCallback = mountManagementSection(coreStart, depsStart, params); + return () => { + docTitle.reset(); + unmountAppCallback(); + }; }, }); } diff --git a/src/plugins/presentation_panel/public/panel_component/panel_header/use_presentation_panel_header_actions.tsx b/src/plugins/presentation_panel/public/panel_component/panel_header/use_presentation_panel_header_actions.tsx index 740aa18606837..5c31419de3f89 100644 --- a/src/plugins/presentation_panel/public/panel_component/panel_header/use_presentation_panel_header_actions.tsx +++ b/src/plugins/presentation_panel/public/panel_component/panel_header/use_presentation_panel_header_actions.tsx @@ -141,7 +141,9 @@ export const usePresentationPanelHeaderActions = < ); return tooltipText ? ( - {badgeElement} + + {badgeElement} + ) : ( badgeElement ); diff --git a/src/plugins/saved_objects_management/public/management_section/objects_table/components/__snapshots__/flyout.test.tsx.snap b/src/plugins/saved_objects_management/public/management_section/objects_table/components/__snapshots__/flyout.test.tsx.snap index e3445d77bb541..6f30a6715f023 100644 --- a/src/plugins/saved_objects_management/public/management_section/objects_table/components/__snapshots__/flyout.test.tsx.snap +++ b/src/plugins/saved_objects_management/public/management_section/objects_table/components/__snapshots__/flyout.test.tsx.snap @@ -314,10 +314,8 @@ exports[`Flyout should render import step 1`] = ` } labelType="label" > - { component.update(); expect(component.state('file')).toBe(undefined); - component.find('EuiFilePicker').simulate('change', [mockFile]); + component.find('EuiFilePickerClass').simulate('change', [mockFile]); expect(component.state('file')).toBe(mockFile); }); @@ -86,9 +86,9 @@ describe('Flyout', () => { component.update(); expect(component.state('file')).toBe(undefined); - component.find('EuiFilePicker').simulate('change', [mockFile]); + component.find('EuiFilePickerClass').simulate('change', [mockFile]); expect(component.state('file')).toBe(mockFile); - component.find('EuiFilePicker').simulate('change', []); + component.find('EuiFilePickerClass').simulate('change', []); expect(component.state('file')).toBe(undefined); }); @@ -105,7 +105,7 @@ describe('Flyout', () => { 'EuiButton[data-test-subj="importSavedObjectsImportBtn"]' ); expect(importButton.prop('isDisabled')).toBe(true); - component.find('EuiFilePicker').simulate('change', [mockFile]); + component.find('EuiFilePickerClass').simulate('change', [mockFile]); // Ensure state changes are reflected component.update(); diff --git a/src/plugins/visualizations/public/embeddable/constants.ts b/src/plugins/visualizations/public/embeddable/constants.ts index 920562103e242..9e1e282c94adb 100644 --- a/src/plugins/visualizations/public/embeddable/constants.ts +++ b/src/plugins/visualizations/public/embeddable/constants.ts @@ -6,12 +6,17 @@ * Side Public License, v 1. */ +import { i18n } from '@kbn/i18n'; + export { VISUALIZE_EMBEDDABLE_TYPE } from '../../common/constants'; export const COMMON_VISUALIZATION_GROUPING = [ { id: 'visualizations', - getDisplayName: () => 'Visualizations', + getDisplayName: () => + i18n.translate('visualizations.common.constants.grouping.legacy', { + defaultMessage: 'Visualizations', + }), getIconType: () => { return 'visGauge'; }, diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/attack_discovery/common_attributes.gen.ts b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/attack_discovery/common_attributes.gen.ts index 533acefe02156..57b79b87fe4f9 100644 --- a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/attack_discovery/common_attributes.gen.ts +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/attack_discovery/common_attributes.gen.ts @@ -87,6 +87,48 @@ export const GenerationInterval = z.object({ durationMs: z.number().int(), }); +/** + * Attack discovery stats + */ +export type AttackDiscoveryStat = z.infer; +export const AttackDiscoveryStat = z.object({ + /** + * Whether the user has viewed the results of the attack discovery run + */ + hasViewed: z.boolean(), + /** + * The number of attack discoveries for the connector + */ + count: z.number().int(), + /** + * The connector ID for the attack discovery + */ + connectorId: z.string(), + /** + * The status of the attack discovery. + */ + status: AttackDiscoveryStatus, +}); + +/** + * Stats on existing attack discovery documents + */ +export type AttackDiscoveryStats = z.infer; +export const AttackDiscoveryStats = z.object({ + /** + * The number of attack discoveries that have not yet been viewed + */ + newDiscoveriesCount: z.number().int(), + /** + * The number of connectors with new results that have not yet been viewed + */ + newConnectorResultsCount: z.number().int(), + /** + * Attack discovery stats per connector + */ + statsPerConnector: z.array(AttackDiscoveryStat), +}); + export type AttackDiscoveryResponse = z.infer; export const AttackDiscoveryResponse = z.object({ id: NonEmptyString, @@ -94,7 +136,11 @@ export const AttackDiscoveryResponse = z.object({ /** * The last time attack discovery was updated. */ - updatedAt: z.string().optional(), + updatedAt: z.string(), + /** + * The last time attack discovery was viewed in the browser. + */ + lastViewedAt: z.string(), /** * The number of alerts in the context. */ @@ -157,7 +203,7 @@ export const AttackDiscoveryUpdateProps = z.object({ /** * The status of the attack discovery. */ - status: AttackDiscoveryStatus, + status: AttackDiscoveryStatus.optional(), replacements: Replacements.optional(), /** * The most 5 recent generation intervals @@ -171,6 +217,10 @@ export const AttackDiscoveryUpdateProps = z.object({ * The reason for a status of failed. */ failureReason: z.string().optional(), + /** + * The last time attack discovery was viewed in the browser. + */ + lastViewedAt: z.string().optional(), }); export type AttackDiscoveryCreateProps = z.infer; diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/attack_discovery/common_attributes.schema.yaml b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/attack_discovery/common_attributes.schema.yaml index 634b5f0192a60..dcb72147f9408 100644 --- a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/attack_discovery/common_attributes.schema.yaml +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/attack_discovery/common_attributes.schema.yaml @@ -74,6 +74,48 @@ components: description: The duration of the attack discovery generation type: integer + AttackDiscoveryStat: + type: object + description: Attack discovery stats + required: + - 'hasViewed' + - 'status' + - 'count' + - 'connectorId' + properties: + hasViewed: + description: Whether the user has viewed the results of the attack discovery run + type: boolean + count: + description: The number of attack discoveries for the connector + type: integer + connectorId: + description: The connector ID for the attack discovery + type: string + status: + $ref: '#/components/schemas/AttackDiscoveryStatus' + description: The status of the attack discovery. + + AttackDiscoveryStats: + type: object + description: Stats on existing attack discovery documents + required: + - 'newDiscoveriesCount' + - 'newConnectorResultsCount' + - 'statsPerConnector' + properties: + newDiscoveriesCount: + description: The number of attack discoveries that have not yet been viewed + type: integer + newConnectorResultsCount: + description: The number of connectors with new results that have not yet been viewed + type: integer + statsPerConnector: + type: array + description: Attack discovery stats per connector + items: + $ref: '#/components/schemas/AttackDiscoveryStat' + AttackDiscoveryResponse: type: object @@ -81,6 +123,8 @@ components: - apiConfig - id - createdAt + - updatedAt + - lastViewedAt - users - namespace - attackDiscoveries @@ -96,6 +140,9 @@ components: updatedAt: description: The last time attack discovery was updated. type: string + lastViewedAt: + description: The last time attack discovery was viewed in the browser. + type: string alertsContextCount: type: integer description: The number of alerts in the context. @@ -139,7 +186,6 @@ components: type: object required: - id - - status - backingIndex properties: id: @@ -169,6 +215,9 @@ components: failureReason: type: string description: The reason for a status of failed. + lastViewedAt: + description: The last time attack discovery was viewed in the browser. + type: string AttackDiscoveryCreateProps: type: object diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/attack_discovery/get_attack_discovery_route.gen.ts b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/attack_discovery/get_attack_discovery_route.gen.ts index 3e58606df8298..00eb09809614b 100644 --- a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/attack_discovery/get_attack_discovery_route.gen.ts +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/attack_discovery/get_attack_discovery_route.gen.ts @@ -17,7 +17,7 @@ import { z } from 'zod'; import { NonEmptyString } from '../common_attributes.gen'; -import { AttackDiscoveryResponse } from './common_attributes.gen'; +import { AttackDiscoveryResponse, AttackDiscoveryStat } from './common_attributes.gen'; export type AttackDiscoveryGetRequestParams = z.infer; export const AttackDiscoveryGetRequestParams = z.object({ @@ -32,7 +32,7 @@ export type AttackDiscoveryGetResponse = z.infer>; onConversationSelected: ({ cId, cTitle }: { cId: string; cTitle: string }) => void; conversations: Record; + conversationsLoaded: boolean; refetchConversationsState: () => Promise; onConversationCreate: () => Promise; isAssistantEnabled: boolean; @@ -69,6 +70,7 @@ export const AssistantHeaderFlyout: React.FC = ({ onCloseFlyout, onConversationSelected, conversations, + conversationsLoaded, refetchConversationsState, onConversationCreate, isAssistantEnabled, @@ -158,6 +160,7 @@ export const AssistantHeaderFlyout: React.FC = ({ setIsSettingsModalVisible={setIsSettingsModalVisible} onConversationSelected={onConversationSelected} conversations={conversations} + conversationsLoaded={conversationsLoaded} refetchConversationsState={refetchConversationsState} isFlyoutMode={true} /> diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/assistant_header/index.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/assistant_header/index.test.tsx index 4cf6afada5367..2301078d57ba1 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/assistant_header/index.test.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/assistant_header/index.test.tsx @@ -19,6 +19,7 @@ const mockConversations = { [welcomeConvo.title]: welcomeConvo, }; const testProps = { + conversationsLoaded: true, currentConversation: welcomeConvo, title: 'Test Title', docLinks: { diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/assistant_header/index.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/assistant_header/index.tsx index bb2e72e2936d3..ac7ca235b36ee 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/assistant_header/index.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/assistant_header/index.tsx @@ -38,6 +38,7 @@ interface OwnProps { showAnonymizedValues: boolean; title: string; conversations: Record; + conversationsLoaded: boolean; refetchConversationsState: () => Promise; } @@ -61,6 +62,7 @@ export const AssistantHeader: React.FC = ({ showAnonymizedValues, title, conversations, + conversationsLoaded, refetchConversationsState, }) => { const showAnonymizedValuesChecked = useMemo( @@ -151,6 +153,7 @@ export const AssistantHeader: React.FC = ({ setIsSettingsModalVisible={setIsSettingsModalVisible} onConversationSelected={onConversationSelected} conversations={conversations} + conversationsLoaded={conversationsLoaded} refetchConversationsState={refetchConversationsState} isFlyoutMode={false} /> diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/common/components/assistant_settings_management/badges/index.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/common/components/assistant_settings_management/badges/index.tsx new file mode 100644 index 0000000000000..3a93da1e6f72a --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/common/components/assistant_settings_management/badges/index.tsx @@ -0,0 +1,23 @@ +/* + * 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 } from '@elastic/eui'; +import React from 'react'; + +export const BadgesColumn: React.FC<{ items: string[] | null | undefined; prefix: string }> = + React.memo(({ items, prefix }) => + items && items.length > 0 ? ( +
+ {items.map((c, idx) => ( + + {c} + + ))} +
+ ) : null + ); +BadgesColumn.displayName = 'BadgesColumn'; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/common/components/assistant_settings_management/flyout/index.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/common/components/assistant_settings_management/flyout/index.tsx new file mode 100644 index 0000000000000..e749fb483d504 --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/common/components/assistant_settings_management/flyout/index.tsx @@ -0,0 +1,85 @@ +/* + * 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, + EuiFlyout, + EuiFlyoutBody, + EuiFlyoutFooter, + EuiFlyoutHeader, + EuiTitle, +} from '@elastic/eui'; +import { css } from '@emotion/react'; +import React from 'react'; +import * as i18n from './translations'; + +interface Props { + children: React.ReactNode; + title: string; + flyoutVisible: boolean; + onClose: () => void; + onSaveCancelled: () => void; + onSaveConfirmed: () => void; +} + +const FlyoutComponent: React.FC = ({ + title, + flyoutVisible, + children, + onClose, + onSaveCancelled, + onSaveConfirmed, +}) => { + return flyoutVisible ? ( + + + +

{title}

+
+
+ {children} + + + + + {i18n.FLYOUT_CANCEL_BUTTON_TITLE} + + + + + {i18n.FLYOUT_SAVE_BUTTON_TITLE} + + + + +
+ ) : null; +}; + +export const Flyout = React.memo(FlyoutComponent); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/common/components/assistant_settings_management/flyout/translations.ts b/x-pack/packages/kbn-elastic-assistant/impl/assistant/common/components/assistant_settings_management/flyout/translations.ts new file mode 100644 index 0000000000000..f25348cd8b5d6 --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/common/components/assistant_settings_management/flyout/translations.ts @@ -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 { i18n } from '@kbn/i18n'; + +export const FLYOUT_SAVE_BUTTON_TITLE = i18n.translate( + 'xpack.elasticAssistant.assistant.settings.flyout.saveButtonTitle', + { + defaultMessage: 'Save', + } +); + +export const FLYOUT_CANCEL_BUTTON_TITLE = i18n.translate( + 'xpack.elasticAssistant.assistant.settings.flyout.cancelButtonTitle', + { + defaultMessage: 'Cancel', + } +); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/common/components/assistant_settings_management/flyout/use_flyout_modal_visibility.ts b/x-pack/packages/kbn-elastic-assistant/impl/assistant/common/components/assistant_settings_management/flyout/use_flyout_modal_visibility.ts new file mode 100644 index 0000000000000..ad3da6b12242e --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/common/components/assistant_settings_management/flyout/use_flyout_modal_visibility.ts @@ -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 { useMemo, useState } from 'react'; + +export const useFlyoutModalVisibility = () => { + const [isFlyoutOpen, setIsFlyoutOpen] = useState(false); + + const openFlyout = () => { + setIsFlyoutOpen(true); + }; + + const closeFlyout = () => { + setIsFlyoutOpen(false); + }; + + return useMemo( + () => ({ + isFlyoutOpen, + openFlyout, + closeFlyout, + }), + [isFlyoutOpen] + ); +}; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/common/components/assistant_settings_management/pagination/use_session_pagination.ts b/x-pack/packages/kbn-elastic-assistant/impl/assistant/common/components/assistant_settings_management/pagination/use_session_pagination.ts new file mode 100644 index 0000000000000..daaccc1fc6992 --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/common/components/assistant_settings_management/pagination/use_session_pagination.ts @@ -0,0 +1,65 @@ +/* + * 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 { Direction } from '@elastic/eui'; +import { useCallback, useMemo } from 'react'; +import useSessionStorage from 'react-use/lib/useSessionStorage'; +import { DEFAULT_ASSISTANT_NAMESPACE } from '../../../../../assistant_context/constants'; +import { DEFAULT_PAGE_SIZE } from '../../../../settings/const'; + +export const DEFAULT_TABLE_OPTIONS = { + page: { size: DEFAULT_PAGE_SIZE, index: 0 }, + sort: { field: '', direction: 'asc' as const }, +}; + +export const useSessionPagination = ({ + defaultTableOptions, + nameSpace = DEFAULT_ASSISTANT_NAMESPACE, + storageKey, +}: { + defaultTableOptions: { + page: { size: number; index: number }; + sort: { field: string; direction: Direction }; + }; + nameSpace?: string; + storageKey: string; +}) => { + const [sessionStorageTableOptions = defaultTableOptions, setSessionStorageTableOptions] = + useSessionStorage(`${nameSpace}.${storageKey}`, defaultTableOptions); + + const pagination = useMemo( + () => ({ + initialPageSize: sessionStorageTableOptions.page.size, + pageSizeOptions: [5, 10, DEFAULT_PAGE_SIZE, 50], + pageIndex: sessionStorageTableOptions.page.index, + }), + [sessionStorageTableOptions] + ); + + const sorting = useMemo( + () => ({ + sort: sessionStorageTableOptions.sort, + }), + [sessionStorageTableOptions.sort] + ); + + const onTableChange = useCallback( + ({ page, sort }) => { + setSessionStorageTableOptions({ + page, + sort, + }); + }, + [setSessionStorageTableOptions] + ); + + return { + onTableChange, + pagination, + sorting, + }; +}; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/common/components/assistant_settings_management/row_actions/index.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/common/components/assistant_settings_management/row_actions/index.tsx new file mode 100644 index 0000000000000..b2d31ec80433f --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/common/components/assistant_settings_management/row_actions/index.tsx @@ -0,0 +1,89 @@ +/* + * 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, EuiButtonIcon, EuiFlexGroup, EuiFlexItem, EuiPopover } from '@elastic/eui'; +import React, { useCallback, useState } from 'react'; +import * as i18n from './translations'; + +interface Props { + isDeletable?: boolean; + isEditable?: boolean; + onDelete?: (rowItem: T) => void; + onEdit?: (rowItem: T) => void; + rowItem: T; +} + +type RowActionsComponentType = (props: Props) => JSX.Element; + +const RowActionsComponent = ({ + isDeletable = true, + isEditable = true, + onDelete, + onEdit, + rowItem, +}: Props) => { + const [isPopoverOpen, setIsPopoverOpen] = useState(false); + + const closePopover = useCallback(() => setIsPopoverOpen(false), []); + const handleEdit = useCallback(() => { + closePopover(); + onEdit?.(rowItem); + }, [closePopover, onEdit, rowItem]); + + const handleDelete = useCallback(() => { + closePopover(); + onDelete?.(rowItem); + }, [closePopover, onDelete, rowItem]); + + const onButtonClick = useCallback(() => setIsPopoverOpen((prevState) => !prevState), []); + return onEdit || onDelete ? ( + + } + isOpen={isPopoverOpen} + closePopover={closePopover} + anchorPosition="downLeft" + > + + {onEdit != null && ( + + + {i18n.EDIT_BUTTON} + + + )} + {onDelete != null && ( + + + {i18n.DELETE_BUTTON} + + + )} + + + ) : null; +}; + +// casting to correctly infer the param of onEdit and onDelete when reusing this component +export const RowActions = React.memo(RowActionsComponent) as RowActionsComponentType; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/common/components/assistant_settings_management/row_actions/translations.ts b/x-pack/packages/kbn-elastic-assistant/impl/assistant/common/components/assistant_settings_management/row_actions/translations.ts new file mode 100644 index 0000000000000..1a2430cb6428c --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/common/components/assistant_settings_management/row_actions/translations.ts @@ -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 { i18n } from '@kbn/i18n'; + +export const EDIT_BUTTON = i18n.translate( + 'xpack.elasticAssistant.assistant.settings.editButtonTitle', + { + defaultMessage: 'Edit', + } +); + +export const DELETE_BUTTON = i18n.translate( + 'xpack.elasticAssistant.assistant.settings.deleteButtonTitle', + { + defaultMessage: 'Delete', + } +); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_selector_settings/index.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_selector_settings/index.tsx index 286be81f531f3..f4b8f9a79412f 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_selector_settings/index.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_selector_settings/index.tsx @@ -8,7 +8,6 @@ import { EuiButtonIcon, EuiComboBox, - EuiComboBoxOptionOption, EuiFlexGroup, EuiFlexItem, EuiFormRow, @@ -21,6 +20,7 @@ import { css } from '@emotion/react'; import { Conversation } from '../../../..'; import * as i18n from '../conversation_selector/translations'; import { SystemPromptSelectorOption } from '../../prompt_editor/system_prompt/system_prompt_modal/system_prompt_selector/system_prompt_selector'; +import { ConversationSelectorSettingsOption } from './types'; interface Props { conversations: Record; @@ -49,10 +49,6 @@ const getNextConversationTitle = ( : conversationTitles[conversationTitles.indexOf(selectedConversationTitle) + 1]; }; -export type ConversationSelectorSettingsOption = EuiComboBoxOptionOption<{ - isDefault: boolean; -}>; - /** * A disconnected variant of the ConversationSelector component that allows for * modifiable settings without persistence. Also changes some styling and removes diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_selector_settings/types.ts b/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_selector_settings/types.ts new file mode 100644 index 0000000000000..548149ffe0c7b --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_selector_settings/types.ts @@ -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. + */ + +import { EuiComboBoxOptionOption } from '@elastic/eui'; + +export type ConversationSelectorSettingsOption = EuiComboBoxOptionOption<{ + isDefault: boolean; +}>; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings/conversation_settings.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings/conversation_settings.test.tsx index 10fbcdbb842a7..104b55987bc42 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings/conversation_settings.test.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings/conversation_settings.test.tsx @@ -180,7 +180,10 @@ describe('ConversationSettings', () => { ); fireEvent.click(getByTestId('change-new-convo')); - expect(onSelectedConversationChange).toHaveBeenCalledWith({ ...mockConvo, id: '' }); + expect(onSelectedConversationChange).toHaveBeenCalledWith({ + ...mockConvo, + id: mockConvo.title, + }); expect(setConversationsSettingsBulkActions).toHaveBeenCalledWith({ create: { [mockConvo.title]: { ...mockConvo, id: '' }, @@ -205,7 +208,7 @@ describe('ConversationSettings', () => { ...mockConvos, [newConvo.title]: newConvo, }); - expect(onSelectedConversationChange).toHaveBeenCalledWith(newConvo); + expect(onSelectedConversationChange).toHaveBeenCalledWith({ ...newConvo, id: newConvo.title }); }); it('Deleting a conversation removes it from the convo settings', () => { const { getByTestId } = render( diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings/conversation_settings.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings/conversation_settings.tsx index 179ff7524bd88..adf2e012c0b8f 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings/conversation_settings.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings/conversation_settings.tsx @@ -6,37 +6,35 @@ */ import { - EuiFormRow, - EuiLink, EuiTitle, EuiText, EuiHorizontalRule, EuiSpacer, + EuiFormRow, EuiSwitch, } from '@elastic/eui'; -import React, { useCallback, useMemo } from 'react'; +import React, { useMemo } from 'react'; import { HttpSetup } from '@kbn/core-http-browser'; -import { FormattedMessage } from '@kbn/i18n-react'; -import { OpenAiProviderType } from '@kbn/stack-connectors-plugin/public/common'; -import { noop } from 'lodash/fp'; + import { ActionTypeRegistryContract } from '@kbn/triggers-actions-ui-plugin/public'; import { Conversation, Prompt } from '../../../..'; import * as i18n from './translations'; -import * as i18nModel from '../../../connectorland/models/model_selector/translations'; -import { AIConnector, ConnectorSelector } from '../../../connectorland/connector_selector'; -import { SelectSystemPrompt } from '../../prompt_editor/system_prompt/select_system_prompt'; -import { ModelSelector } from '../../../connectorland/models/model_selector/model_selector'; +import { AIConnector } from '../../../connectorland/connector_selector'; + import { ConversationSelectorSettings } from '../conversation_selector_settings'; -import { getDefaultSystemPrompt } from '../../use_conversation/helpers'; -import { useLoadConnectors } from '../../../connectorland/use_load_connectors'; -import { getGenAiConfig } from '../../../connectorland/helpers'; + import { ConversationsBulkActions } from '../../api'; +import { useConversationDeleted } from './use_conversation_deleted'; +import { ConversationSettingsEditor } from './conversation_settings_editor'; +import { useConversationChanged } from './use_conversation_changed'; +import { getConversationApiConfig } from '../../use_conversation/helpers'; export interface ConversationSettingsProps { actionTypeRegistry: ActionTypeRegistryContract; allSystemPrompts: Prompt[]; + connectors?: AIConnector[]; conversationSettings: Record; conversationsSettingsBulkActions: ConversationsBulkActions; defaultConnector?: AIConnector; @@ -60,6 +58,7 @@ export const ConversationSettings: React.FC = React.m ({ allSystemPrompts, assistantStreamingEnabled, + connectors, defaultConnector, selectedConversation, onSelectedConversationChange, @@ -72,300 +71,39 @@ export const ConversationSettings: React.FC = React.m conversationsSettingsBulkActions, setConversationsSettingsBulkActions, }) => { - const defaultSystemPrompt = useMemo(() => { - return getDefaultSystemPrompt({ allSystemPrompts, conversation: undefined }); - }, [allSystemPrompts]); - - const selectedSystemPrompt = useMemo(() => { - return getDefaultSystemPrompt({ allSystemPrompts, conversation: selectedConversation }); - }, [allSystemPrompts, selectedConversation]); + const onConversationSelectionChange = useConversationChanged({ + allSystemPrompts, + conversationSettings, + conversationsSettingsBulkActions, + defaultConnector, + setConversationSettings, + setConversationsSettingsBulkActions, + onSelectedConversationChange, + }); - const { data: connectors, isSuccess: areConnectorsFetched } = useLoadConnectors({ - http, + const onConversationDeleted = useConversationDeleted({ + conversationSettings, + conversationsSettingsBulkActions, + setConversationSettings, + setConversationsSettingsBulkActions, }); - const selectedConversationId = useMemo( + const selectedConversationWithApiConfig = useMemo( () => - selectedConversation?.id === '' - ? selectedConversation.title - : (selectedConversation?.id as string), - [selectedConversation] - ); - - // Conversation callbacks - // When top level conversation selection changes - const onConversationSelectionChange = useCallback( - (c?: Conversation | string) => { - const isNew = typeof c === 'string'; - - const newSelectedConversation: Conversation | undefined = isNew + selectedConversation ? { - id: '', - title: c ?? '', - category: 'assistant', - messages: [], - replacements: {}, - ...(defaultConnector - ? { - apiConfig: { - connectorId: defaultConnector.id, - actionTypeId: defaultConnector.actionTypeId, - provider: defaultConnector.apiProvider, - defaultSystemPromptId: defaultSystemPrompt?.id, - }, - } - : {}), + ...selectedConversation, + ...getConversationApiConfig({ + allSystemPrompts, + conversation: selectedConversation, + connectors, + defaultConnector, + }), } - : c; - - if (newSelectedConversation && (isNew || newSelectedConversation.id === '')) { - setConversationSettings({ - ...conversationSettings, - [isNew ? c : newSelectedConversation.title]: newSelectedConversation, - }); - setConversationsSettingsBulkActions({ - ...conversationsSettingsBulkActions, - create: { - ...(conversationsSettingsBulkActions.create ?? {}), - [newSelectedConversation.title]: newSelectedConversation, - }, - }); - } else if (newSelectedConversation != null) { - setConversationSettings((prev) => { - return { - ...prev, - [newSelectedConversation.id]: newSelectedConversation, - }; - }); - } - - onSelectedConversationChange(newSelectedConversation); - }, - [ - conversationSettings, - conversationsSettingsBulkActions, - defaultConnector, - defaultSystemPrompt?.id, - onSelectedConversationChange, - setConversationSettings, - setConversationsSettingsBulkActions, - ] + : selectedConversation, + [allSystemPrompts, connectors, defaultConnector, selectedConversation] ); - const onConversationDeleted = useCallback( - (conversationTitle: string) => { - const conversationId = - Object.values(conversationSettings).find((c) => c.title === conversationTitle)?.id ?? ''; - const updatedConversationSettings = { ...conversationSettings }; - delete updatedConversationSettings[conversationId]; - setConversationSettings(updatedConversationSettings); - - setConversationsSettingsBulkActions({ - ...conversationsSettingsBulkActions, - delete: { - ids: [...(conversationsSettingsBulkActions.delete?.ids ?? []), conversationId], - }, - }); - }, - [ - conversationSettings, - conversationsSettingsBulkActions, - setConversationSettings, - setConversationsSettingsBulkActions, - ] - ); - - const handleOnSystemPromptSelectionChange = useCallback( - (systemPromptId?: string | undefined) => { - if (selectedConversation != null && selectedConversation.apiConfig) { - const updatedConversation = { - ...selectedConversation, - apiConfig: { - ...selectedConversation.apiConfig, - defaultSystemPromptId: systemPromptId, - }, - }; - setConversationSettings({ - ...conversationSettings, - [updatedConversation.id]: updatedConversation, - }); - if (selectedConversation.id !== '') { - setConversationsSettingsBulkActions({ - ...conversationsSettingsBulkActions, - update: { - ...(conversationsSettingsBulkActions.update ?? {}), - [updatedConversation.id]: { - ...updatedConversation, - ...(conversationsSettingsBulkActions.update - ? conversationsSettingsBulkActions.update[updatedConversation.id] ?? {} - : {}), - apiConfig: { - ...updatedConversation.apiConfig, - ...((conversationsSettingsBulkActions.update - ? conversationsSettingsBulkActions.update[updatedConversation.id] ?? {} - : {} - ).apiConfig ?? {}), - defaultSystemPromptId: systemPromptId, - }, - }, - }, - }); - } else { - setConversationsSettingsBulkActions({ - ...conversationsSettingsBulkActions, - create: { - ...(conversationsSettingsBulkActions.create ?? {}), - [updatedConversation.id]: updatedConversation, - }, - }); - } - } - }, - [ - conversationSettings, - conversationsSettingsBulkActions, - selectedConversation, - setConversationSettings, - setConversationsSettingsBulkActions, - ] - ); - - const selectedConnector = useMemo(() => { - const selectedConnectorId = selectedConversation?.apiConfig?.connectorId; - if (areConnectorsFetched) { - return connectors?.find((c) => c.id === selectedConnectorId); - } - return undefined; - }, [areConnectorsFetched, connectors, selectedConversation?.apiConfig?.connectorId]); - - const selectedProvider = useMemo( - () => selectedConversation?.apiConfig?.provider, - [selectedConversation?.apiConfig?.provider] - ); - - const handleOnConnectorSelectionChange = useCallback( - (connector) => { - if (selectedConversation != null) { - const config = getGenAiConfig(connector); - const updatedConversation = { - ...selectedConversation, - apiConfig: { - ...selectedConversation.apiConfig, - connectorId: connector.id, - actionTypeId: connector.actionTypeId, - provider: config?.apiProvider, - model: config?.defaultModel, - }, - }; - setConversationSettings({ - ...conversationSettings, - [selectedConversationId]: updatedConversation, - }); - if (selectedConversation.id !== '') { - setConversationsSettingsBulkActions({ - ...conversationsSettingsBulkActions, - update: { - ...(conversationsSettingsBulkActions.update ?? {}), - [updatedConversation.id]: { - ...updatedConversation, - ...(conversationsSettingsBulkActions.update - ? conversationsSettingsBulkActions.update[updatedConversation.id] ?? {} - : {}), - apiConfig: { - ...updatedConversation.apiConfig, - ...((conversationsSettingsBulkActions.update - ? conversationsSettingsBulkActions.update[updatedConversation.id] ?? {} - : {} - ).apiConfig ?? {}), - connectorId: connector?.id, - actionTypeId: connector?.actionTypeId, - provider: config?.apiProvider, - model: config?.defaultModel, - }, - }, - }, - }); - } else { - setConversationsSettingsBulkActions({ - ...conversationsSettingsBulkActions, - create: { - ...(conversationsSettingsBulkActions.create ?? {}), - [updatedConversation.id]: updatedConversation, - }, - }); - } - } - }, - [ - conversationSettings, - conversationsSettingsBulkActions, - selectedConversation, - selectedConversationId, - setConversationSettings, - setConversationsSettingsBulkActions, - ] - ); - - const selectedModel = useMemo(() => { - const connectorModel = getGenAiConfig(selectedConnector)?.defaultModel; - // Prefer conversation configuration over connector default - return selectedConversation?.apiConfig?.model ?? connectorModel; - }, [selectedConnector, selectedConversation?.apiConfig?.model]); - - const handleOnModelSelectionChange = useCallback( - (model?: string) => { - if (selectedConversation != null && selectedConversation.apiConfig) { - const updatedConversation = { - ...selectedConversation, - apiConfig: { - ...selectedConversation.apiConfig, - model, - }, - }; - setConversationSettings({ - ...conversationSettings, - [updatedConversation.id]: updatedConversation, - }); - if (selectedConversation.id !== '') { - setConversationsSettingsBulkActions({ - ...conversationsSettingsBulkActions, - update: { - ...(conversationsSettingsBulkActions.update ?? {}), - [updatedConversation.id]: { - ...updatedConversation, - ...(conversationsSettingsBulkActions.update - ? conversationsSettingsBulkActions.update[updatedConversation.id] ?? {} - : {}), - apiConfig: { - ...updatedConversation.apiConfig, - ...((conversationsSettingsBulkActions.update - ? conversationsSettingsBulkActions.update[updatedConversation.id] ?? {} - : {} - ).apiConfig ?? {}), - model, - }, - }, - }, - }); - } else { - setConversationsSettingsBulkActions({ - ...conversationsSettingsBulkActions, - create: { - ...(conversationsSettingsBulkActions.create ?? {}), - [updatedConversation.id]: updatedConversation, - }, - }); - } - } - }, - [ - conversationSettings, - conversationsSettingsBulkActions, - selectedConversation, - setConversationSettings, - setConversationsSettingsBulkActions, - ] - ); return ( <> @@ -382,67 +120,18 @@ export const ConversationSettings: React.FC = React.m onConversationSelectionChange={onConversationSelectionChange} /> - - - - - - - - } - > - - + - {selectedConnector?.isPreconfigured === false && - selectedProvider === OpenAiProviderType.OpenAi && ( - - - - )}

{i18n.SETTINGS_ALL_TITLE}

diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings/conversation_settings_editor.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings/conversation_settings_editor.tsx new file mode 100644 index 0000000000000..a0ddd33b34d05 --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings/conversation_settings_editor.tsx @@ -0,0 +1,328 @@ +/* + * 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, EuiLink } from '@elastic/eui'; +import React, { useCallback, useMemo } from 'react'; + +import { HttpSetup } from '@kbn/core-http-browser'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { OpenAiProviderType } from '@kbn/stack-connectors-plugin/public/common'; +import { noop } from 'lodash/fp'; +import { Conversation, Prompt } from '../../../..'; +import * as i18n from './translations'; +import * as i18nModel from '../../../connectorland/models/model_selector/translations'; + +import { ConnectorSelector } from '../../../connectorland/connector_selector'; +import { SelectSystemPrompt } from '../../prompt_editor/system_prompt/select_system_prompt'; +import { ModelSelector } from '../../../connectorland/models/model_selector/model_selector'; +import { useLoadConnectors } from '../../../connectorland/use_load_connectors'; +import { getGenAiConfig } from '../../../connectorland/helpers'; +import { ConversationsBulkActions } from '../../api'; +import { getDefaultSystemPrompt } from '../../use_conversation/helpers'; + +export interface ConversationSettingsEditorProps { + allSystemPrompts: Prompt[]; + conversationSettings: Record; + conversationsSettingsBulkActions: ConversationsBulkActions; + http: HttpSetup; + isDisabled?: boolean; + isFlyoutMode: boolean; + selectedConversation?: Conversation; + setConversationSettings: React.Dispatch>>; + setConversationsSettingsBulkActions: React.Dispatch< + React.SetStateAction + >; +} + +/** + * Settings for adding/removing conversation and configuring default system prompt and connector. + */ +export const ConversationSettingsEditor: React.FC = React.memo( + ({ + allSystemPrompts, + selectedConversation, + conversationSettings, + http, + isDisabled = false, + isFlyoutMode, + setConversationSettings, + conversationsSettingsBulkActions, + setConversationsSettingsBulkActions, + }) => { + const { data: connectors, isSuccess: areConnectorsFetched } = useLoadConnectors({ + http, + }); + + const selectedSystemPrompt = useMemo(() => { + return getDefaultSystemPrompt({ allSystemPrompts, conversation: selectedConversation }); + }, [allSystemPrompts, selectedConversation]); + const handleOnSystemPromptSelectionChange = useCallback( + (systemPromptId?: string | undefined) => { + if (selectedConversation != null && selectedConversation.apiConfig) { + const updatedConversation = { + ...selectedConversation, + apiConfig: { + ...selectedConversation.apiConfig, + defaultSystemPromptId: systemPromptId, + }, + }; + setConversationSettings({ + ...conversationSettings, + [updatedConversation.id || updatedConversation.title]: updatedConversation, + }); + if (selectedConversation.id !== '') { + setConversationsSettingsBulkActions({ + ...conversationsSettingsBulkActions, + update: { + ...(conversationsSettingsBulkActions.update ?? {}), + [updatedConversation.id]: { + ...updatedConversation, + ...(conversationsSettingsBulkActions.update + ? conversationsSettingsBulkActions.update[updatedConversation.id] ?? {} + : {}), + apiConfig: { + ...updatedConversation.apiConfig, + ...((conversationsSettingsBulkActions.update + ? conversationsSettingsBulkActions.update[updatedConversation.id] ?? {} + : {} + ).apiConfig ?? {}), + defaultSystemPromptId: systemPromptId, + }, + }, + }, + }); + } else { + setConversationsSettingsBulkActions({ + ...conversationsSettingsBulkActions, + create: { + ...(conversationsSettingsBulkActions.create ?? {}), + [updatedConversation.title]: updatedConversation, + }, + }); + } + } + }, + [ + conversationSettings, + conversationsSettingsBulkActions, + selectedConversation, + setConversationSettings, + setConversationsSettingsBulkActions, + ] + ); + + const selectedConnector = useMemo(() => { + const selectedConnectorId: string | undefined = selectedConversation?.apiConfig?.connectorId; + if (areConnectorsFetched) { + return connectors?.find((c) => c.id === selectedConnectorId); + } + return undefined; + }, [areConnectorsFetched, connectors, selectedConversation?.apiConfig?.connectorId]); + + const selectedProvider = useMemo( + () => selectedConversation?.apiConfig?.provider, + [selectedConversation?.apiConfig?.provider] + ); + + const selectedConversationId = useMemo( + () => + selectedConversation?.id === '' + ? selectedConversation.title + : (selectedConversation?.id as string), + [selectedConversation] + ); + const handleOnConnectorSelectionChange = useCallback( + (connector) => { + if (selectedConversation != null) { + const config = getGenAiConfig(connector); + const updatedConversation = { + ...selectedConversation, + apiConfig: { + ...selectedConversation.apiConfig, + connectorId: connector.id, + actionTypeId: connector.actionTypeId, + provider: config?.apiProvider, + model: config?.defaultModel, + }, + }; + setConversationSettings({ + ...conversationSettings, + [selectedConversationId]: updatedConversation, + }); + if (selectedConversation.id !== '') { + setConversationsSettingsBulkActions({ + ...conversationsSettingsBulkActions, + update: { + ...(conversationsSettingsBulkActions.update ?? {}), + [updatedConversation.id || updatedConversation.title]: { + ...updatedConversation, + ...(conversationsSettingsBulkActions.update + ? conversationsSettingsBulkActions.update[updatedConversation.id] ?? {} + : {}), + apiConfig: { + ...updatedConversation.apiConfig, + ...((conversationsSettingsBulkActions.update + ? conversationsSettingsBulkActions.update[updatedConversation.id] ?? {} + : {} + ).apiConfig ?? {}), + connectorId: connector?.id, + actionTypeId: connector?.actionTypeId, + provider: config?.apiProvider, + model: config?.defaultModel, + }, + }, + }, + }); + } else { + setConversationsSettingsBulkActions({ + ...conversationsSettingsBulkActions, + create: { + ...(conversationsSettingsBulkActions.create ?? {}), + [updatedConversation.title || updatedConversation.id]: updatedConversation, + }, + }); + } + } + }, + [ + conversationSettings, + conversationsSettingsBulkActions, + selectedConversation, + selectedConversationId, + setConversationSettings, + setConversationsSettingsBulkActions, + ] + ); + + const selectedModel = useMemo(() => { + const connectorModel = getGenAiConfig(selectedConnector)?.defaultModel; + // Prefer conversation configuration over connector default + return selectedConversation?.apiConfig?.model ?? connectorModel; + }, [selectedConnector, selectedConversation?.apiConfig?.model]); + + const handleOnModelSelectionChange = useCallback( + (model?: string) => { + if (selectedConversation != null && selectedConversation.apiConfig) { + const updatedConversation = { + ...selectedConversation, + apiConfig: { + ...selectedConversation.apiConfig, + model, + }, + }; + setConversationSettings({ + ...conversationSettings, + [updatedConversation.id || updatedConversation.title]: updatedConversation, + }); + if (selectedConversation.id !== '') { + setConversationsSettingsBulkActions({ + ...conversationsSettingsBulkActions, + update: { + ...(conversationsSettingsBulkActions.update ?? {}), + [updatedConversation.id]: { + ...updatedConversation, + ...(conversationsSettingsBulkActions.update + ? conversationsSettingsBulkActions.update[updatedConversation.id] ?? {} + : {}), + apiConfig: { + ...updatedConversation.apiConfig, + ...((conversationsSettingsBulkActions.update + ? conversationsSettingsBulkActions.update[updatedConversation.id] ?? {} + : {} + ).apiConfig ?? {}), + model, + }, + }, + }, + }); + } else { + setConversationsSettingsBulkActions({ + ...conversationsSettingsBulkActions, + create: { + ...(conversationsSettingsBulkActions.create ?? {}), + [updatedConversation.id || updatedConversation.title]: updatedConversation, + }, + }); + } + } + }, + [ + conversationSettings, + conversationsSettingsBulkActions, + selectedConversation, + setConversationSettings, + setConversationsSettingsBulkActions, + ] + ); + return ( + <> + + + + + + + + } + > + + + + {selectedConnector?.isPreconfigured === false && + selectedProvider === OpenAiProviderType.OpenAi && ( + + + + )} + + ); + } +); +ConversationSettingsEditor.displayName = 'ConversationSettingsEditor'; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings/conversation_streaming_switch.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings/conversation_streaming_switch.tsx new file mode 100644 index 0000000000000..3f8fa6fba4ae5 --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings/conversation_streaming_switch.tsx @@ -0,0 +1,59 @@ +/* + * 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, EuiSwitch, EuiText, useEuiTheme } from '@elastic/eui'; +import { css } from '@emotion/react'; +import React from 'react'; +import { STREAMING_TITLE, STREAMING_HELP_TEXT_TITLE } from './translations'; + +interface Props { + assistantStreamingEnabled: boolean; + setAssistantStreamingEnabled: React.Dispatch>; + compressed?: boolean; +} + +const ConversationStreamingSwitchComponent: React.FC = ({ + assistantStreamingEnabled, + compressed, + setAssistantStreamingEnabled, +}) => { + const { euiTheme } = useEuiTheme(); + + return ( + + {STREAMING_TITLE} + + } + > + {STREAMING_HELP_TEXT_TITLE}} + checked={assistantStreamingEnabled} + onChange={(e) => setAssistantStreamingEnabled(e.target.checked)} + compressed={compressed} + /> + + ); +}; + +export const ConversationStreamingSwitch = React.memo(ConversationStreamingSwitchComponent); + +ConversationStreamingSwitch.displayName = 'ConversationStreamingSwitch'; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings/use_conveersation_changed.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings/use_conveersation_changed.test.tsx new file mode 100644 index 0000000000000..091c691d8e324 --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings/use_conveersation_changed.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 { renderHook, act } from '@testing-library/react-hooks'; +import { useConversationChanged } from './use_conversation_changed'; +import { customConvo } from '../../../mock/conversation'; +import { mockConnectors } from '../../../mock/connectors'; +import { mockSystemPrompts } from '../../../mock/system_prompt'; +import { getDefaultSystemPrompt } from '../../use_conversation/helpers'; +import { Conversation, ConversationsBulkActions } from '../../../..'; + +jest.mock('../../use_conversation/helpers', () => ({ + getDefaultSystemPrompt: jest.fn(), +})); + +const mockAllSystemPrompts = mockSystemPrompts; + +const mockDefaultConnector = mockConnectors[0]; + +const mockConversationSettings = {}; +const mockConversationsSettingsBulkActions: ConversationsBulkActions = {}; +const mockSetConversationSettings = jest.fn(); +const mockSetConversationsSettingsBulkActions = jest.fn(); +const mockOnSelectedConversationChange = jest.fn(); + +describe('useConversationChanged', () => { + beforeEach(() => { + jest.clearAllMocks(); + (getDefaultSystemPrompt as jest.Mock).mockReturnValue(mockAllSystemPrompts[2]); + }); + + test('should return a function', () => { + const { result } = renderHook(() => + useConversationChanged({ + allSystemPrompts: mockAllSystemPrompts, + conversationSettings: mockConversationSettings, + conversationsSettingsBulkActions: mockConversationsSettingsBulkActions, + defaultConnector: mockDefaultConnector, + setConversationSettings: mockSetConversationSettings, + setConversationsSettingsBulkActions: mockSetConversationsSettingsBulkActions, + onSelectedConversationChange: mockOnSelectedConversationChange, + }) + ); + + expect(typeof result.current).toBe('function'); + }); + + test('should handle new conversation selection', () => { + const newConversationTitle = 'New Conversation'; + const { result } = renderHook(() => + useConversationChanged({ + allSystemPrompts: mockAllSystemPrompts, + conversationSettings: mockConversationSettings, + conversationsSettingsBulkActions: mockConversationsSettingsBulkActions, + defaultConnector: mockDefaultConnector, + setConversationSettings: mockSetConversationSettings, + setConversationsSettingsBulkActions: mockSetConversationsSettingsBulkActions, + onSelectedConversationChange: mockOnSelectedConversationChange, + }) + ); + + act(() => { + result.current(newConversationTitle); + }); + + const expectedNewConversation: Conversation = { + id: '', + title: newConversationTitle, + category: 'assistant', + messages: [], + replacements: {}, + apiConfig: { + connectorId: mockDefaultConnector.id, + actionTypeId: mockDefaultConnector.actionTypeId, + provider: mockDefaultConnector.apiProvider, + defaultSystemPromptId: mockAllSystemPrompts[2].id, + }, + }; + + expect(mockSetConversationSettings).toHaveBeenCalledWith({ + ...mockConversationSettings, + [newConversationTitle]: expectedNewConversation, + }); + expect(mockSetConversationsSettingsBulkActions).toHaveBeenCalledWith({ + ...mockConversationsSettingsBulkActions, + create: { + ...(mockConversationsSettingsBulkActions.create ?? {}), + [newConversationTitle]: expectedNewConversation, + }, + }); + expect(mockOnSelectedConversationChange).toHaveBeenCalledWith({ + ...expectedNewConversation, + id: expectedNewConversation.title, + }); + }); + + test('should handle existing conversation selection', () => { + const existingConversation = { ...customConvo, id: 'mock-id' }; + + const { result } = renderHook(() => + useConversationChanged({ + allSystemPrompts: mockAllSystemPrompts, + conversationSettings: mockConversationSettings, + conversationsSettingsBulkActions: mockConversationsSettingsBulkActions, + defaultConnector: mockDefaultConnector, + setConversationSettings: mockSetConversationSettings, + setConversationsSettingsBulkActions: mockSetConversationsSettingsBulkActions, + onSelectedConversationChange: mockOnSelectedConversationChange, + }) + ); + + act(() => { + result.current(existingConversation); + }); + + expect(mockSetConversationSettings.mock.calls[0][0](mockConversationSettings)).toEqual({ + ...mockConversationSettings, + [existingConversation.id]: existingConversation, + }); + expect(mockOnSelectedConversationChange).toHaveBeenCalledWith(existingConversation); + }); +}); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings/use_conversation_changed.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings/use_conversation_changed.tsx new file mode 100644 index 0000000000000..670832ac83798 --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings/use_conversation_changed.tsx @@ -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 { useCallback, useMemo } from 'react'; +import { Conversation, Prompt } from '../../../..'; +import { getDefaultSystemPrompt } from '../../use_conversation/helpers'; +import { ConversationsBulkActions } from '../../api'; +import { AIConnector } from '../../../connectorland/connector_selector'; + +interface Props { + allSystemPrompts: Prompt[]; + conversationSettings: Record; + conversationsSettingsBulkActions: ConversationsBulkActions; + defaultConnector?: AIConnector; + setConversationSettings: React.Dispatch>>; + setConversationsSettingsBulkActions: React.Dispatch< + React.SetStateAction + >; + onSelectedConversationChange: (conversation?: Conversation) => void; +} + +type OnConversationSelectionChange = (c?: string | Conversation) => void; + +export const useConversationChanged = ({ + allSystemPrompts, + conversationSettings, + conversationsSettingsBulkActions, + defaultConnector, + setConversationSettings, + setConversationsSettingsBulkActions, + onSelectedConversationChange, +}: Props) => { + const defaultSystemPrompt = useMemo(() => { + return getDefaultSystemPrompt({ allSystemPrompts, conversation: undefined }); + }, [allSystemPrompts]); + + // Conversation callbacks + // When top level conversation selection changes + const onConversationSelectionChange: OnConversationSelectionChange = useCallback( + (c = '') => { + const isNew = typeof c === 'string'; + const newSelectedConversation: Conversation | undefined = isNew + ? { + id: '', + title: c ?? '', + category: 'assistant', + messages: [], + replacements: {}, + ...(defaultConnector + ? { + apiConfig: { + connectorId: defaultConnector.id, + actionTypeId: defaultConnector.actionTypeId, + provider: defaultConnector.apiProvider, + defaultSystemPromptId: defaultSystemPrompt?.id, + }, + } + : {}), + } + : c; + + if (newSelectedConversation && (isNew || newSelectedConversation.id === '')) { + setConversationSettings({ + ...conversationSettings, + [isNew ? c : newSelectedConversation.title]: newSelectedConversation, + }); + setConversationsSettingsBulkActions({ + ...conversationsSettingsBulkActions, + create: { + ...(conversationsSettingsBulkActions.create ?? {}), + [newSelectedConversation.title]: newSelectedConversation, + }, + }); + } else if (newSelectedConversation != null) { + setConversationSettings((prev) => { + return { + ...prev, + [newSelectedConversation.id]: newSelectedConversation, + }; + }); + } + + onSelectedConversationChange({ + ...newSelectedConversation, + id: newSelectedConversation.id || newSelectedConversation.title, + }); + }, + [ + conversationSettings, + conversationsSettingsBulkActions, + defaultConnector, + defaultSystemPrompt?.id, + onSelectedConversationChange, + setConversationSettings, + setConversationsSettingsBulkActions, + ] + ); + + return onConversationSelectionChange; +}; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings/use_conversation_deleted.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings/use_conversation_deleted.tsx new file mode 100644 index 0000000000000..c8e5fcfbab01e --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings/use_conversation_deleted.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 { useCallback } from 'react'; +import { Conversation, ConversationsBulkActions } from '../../../..'; + +interface Props { + conversationSettings: Record; + conversationsSettingsBulkActions: ConversationsBulkActions; + setConversationSettings: React.Dispatch>>; + setConversationsSettingsBulkActions: React.Dispatch< + React.SetStateAction + >; +} + +export const useConversationDeleted = ({ + conversationSettings, + conversationsSettingsBulkActions, + setConversationSettings, + setConversationsSettingsBulkActions, +}: Props) => { + const onConversationDeleted = useCallback( + (conversationTitle: string) => { + const conversationId = Object.values(conversationSettings).find( + (c) => c.title === conversationTitle + )?.id; + // If matching conversation is not found, do nothing + if (!conversationId) { + return; + } + + const updatedConversationSettings = { ...conversationSettings }; + delete updatedConversationSettings[conversationId]; + + setConversationSettings(updatedConversationSettings); + setConversationsSettingsBulkActions({ + ...conversationsSettingsBulkActions, + delete: { + ids: [...(conversationsSettingsBulkActions.delete?.ids ?? []), conversationId], + }, + }); + }, + [ + conversationSettings, + conversationsSettingsBulkActions, + setConversationSettings, + setConversationsSettingsBulkActions, + ] + ); + + return onConversationDeleted; +}; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings/use_conversation_deletex.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings/use_conversation_deletex.test.tsx new file mode 100644 index 0000000000000..f96de69b8ae7c --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings/use_conversation_deletex.test.tsx @@ -0,0 +1,94 @@ +/* + * 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, act } from '@testing-library/react-hooks'; +import { useConversationDeleted } from './use_conversation_deleted'; +import { customConvo, alertConvo, welcomeConvo } from '../../../mock/conversation'; +import { Conversation, ConversationsBulkActions } from '../../../..'; + +const customConveId = '1'; +const alertConvoId = '2'; +const welcomeConvoId = '3'; +const mockConversationSettings: Record = { + [customConveId]: { ...customConvo, id: customConveId }, + [alertConvoId]: { ...alertConvo, id: alertConvoId }, + [welcomeConvoId]: { ...welcomeConvo, id: welcomeConvoId }, +}; + +const mockConversationsSettingsBulkActions: ConversationsBulkActions = { + create: {}, + update: {}, + delete: { ids: [] }, +}; + +const mockSetConversationSettings = jest.fn(); +const mockSetConversationsSettingsBulkActions = jest.fn(); + +describe('useConversationDeleted', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + test('should return a function', () => { + const { result } = renderHook(() => + useConversationDeleted({ + conversationSettings: mockConversationSettings, + conversationsSettingsBulkActions: mockConversationsSettingsBulkActions, + setConversationSettings: mockSetConversationSettings, + setConversationsSettingsBulkActions: mockSetConversationsSettingsBulkActions, + }) + ); + + expect(typeof result.current).toBe('function'); + }); + + test('should handle conversation deletion', () => { + const conversationTitleToDelete = customConvo.title; + const { result } = renderHook(() => + useConversationDeleted({ + conversationSettings: mockConversationSettings, + conversationsSettingsBulkActions: mockConversationsSettingsBulkActions, + setConversationSettings: mockSetConversationSettings, + setConversationsSettingsBulkActions: mockSetConversationsSettingsBulkActions, + }) + ); + + act(() => { + result.current(conversationTitleToDelete); + }); + + const expectedConversationSettings = { ...mockConversationSettings }; + delete expectedConversationSettings[customConveId]; + expect(mockSetConversationSettings).toHaveBeenCalledWith(expectedConversationSettings); + + expect(mockSetConversationsSettingsBulkActions).toHaveBeenCalledWith({ + ...mockConversationsSettingsBulkActions, + delete: { + ids: [customConveId], + }, + }); + }); + + test('should do nothing when no matching conversation title exists', () => { + const conversationTitleToDelete = 'Non-existent Conversation'; + const { result } = renderHook(() => + useConversationDeleted({ + conversationSettings: mockConversationSettings, + conversationsSettingsBulkActions: mockConversationsSettingsBulkActions, + setConversationSettings: mockSetConversationSettings, + setConversationsSettingsBulkActions: mockSetConversationsSettingsBulkActions, + }) + ); + + act(() => { + result.current(conversationTitleToDelete); + }); + + expect(mockSetConversationSettings).not.toHaveBeenCalled(); + + expect(mockSetConversationsSettingsBulkActions).not.toHaveBeenCalled(); + }); +}); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings_management/index.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings_management/index.tsx new file mode 100644 index 0000000000000..c4b2f834ecec5 --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings_management/index.tsx @@ -0,0 +1,252 @@ +/* + * 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 { EuiPanel, EuiSpacer, EuiConfirmModal, EuiInMemoryTable } from '@elastic/eui'; +import React, { useCallback, useMemo, useState } from 'react'; + +import { Conversation } from '../../../assistant_context/types'; +import { ConversationTableItem, useConversationsTable } from './use_conversations_table'; +import { ConversationStreamingSwitch } from '../conversation_settings/conversation_streaming_switch'; +import { AIConnector } from '../../../connectorland/connector_selector'; +import * as i18n from './translations'; + +import { Prompt } from '../../types'; +import { ConversationsBulkActions } from '../../api'; +import { useAssistantContext } from '../../../assistant_context'; +import { useConversationDeleted } from '../conversation_settings/use_conversation_deleted'; +import { useFlyoutModalVisibility } from '../../common/components/assistant_settings_management/flyout/use_flyout_modal_visibility'; +import { Flyout } from '../../common/components/assistant_settings_management/flyout'; +import { CANCEL, DELETE } from '../../settings/translations'; +import { ConversationSettingsEditor } from '../conversation_settings/conversation_settings_editor'; +import { useConversationChanged } from '../conversation_settings/use_conversation_changed'; +import { CONVERSATION_TABLE_SESSION_STORAGE_KEY } from '../../../assistant_context/constants'; +import { useSessionPagination } from '../../common/components/assistant_settings_management/pagination/use_session_pagination'; +import { DEFAULT_PAGE_SIZE } from '../../settings/const'; +interface Props { + allSystemPrompts: Prompt[]; + assistantStreamingEnabled: boolean; + connectors: AIConnector[] | undefined; + conversationSettings: Record; + conversationsSettingsBulkActions: ConversationsBulkActions; + conversationsLoaded: boolean; + defaultConnector?: AIConnector; + handleSave: (shouldRefetchConversation?: boolean) => void; + isDisabled?: boolean; + isFlyoutMode: boolean; + onCancelClick: () => void; + setAssistantStreamingEnabled: React.Dispatch>; + setConversationSettings: React.Dispatch>>; + setConversationsSettingsBulkActions: React.Dispatch< + React.SetStateAction + >; + selectedConversation: Conversation | undefined; + onSelectedConversationChange: (conversation?: Conversation) => void; +} + +export const DEFAULT_TABLE_OPTIONS = { + page: { size: DEFAULT_PAGE_SIZE, index: 0 }, + sort: { field: 'createdAt', direction: 'desc' as const }, +}; + +const ConversationSettingsManagementComponent: React.FC = ({ + allSystemPrompts, + assistantStreamingEnabled, + connectors, + defaultConnector, + conversationSettings, + conversationsSettingsBulkActions, + conversationsLoaded, + handleSave, + isDisabled, + isFlyoutMode, + onSelectedConversationChange, + onCancelClick, + selectedConversation, + setAssistantStreamingEnabled, + setConversationSettings, + setConversationsSettingsBulkActions, +}) => { + const { http, nameSpace, actionTypeRegistry } = useAssistantContext(); + + const { + isFlyoutOpen: editFlyoutVisible, + openFlyout: openEditFlyout, + closeFlyout: closeEditFlyout, + } = useFlyoutModalVisibility(); + const [deletedConversation, setDeletedConversation] = useState(); + + const { + isFlyoutOpen: deleteConfirmModalVisibility, + openFlyout: openConfirmModal, + closeFlyout: closeConfirmModal, + } = useFlyoutModalVisibility(); + + const onConversationSelectionChange = useConversationChanged({ + allSystemPrompts, + conversationSettings, + conversationsSettingsBulkActions, + defaultConnector, + setConversationSettings, + setConversationsSettingsBulkActions, + onSelectedConversationChange, + }); + + const onEditActionClicked = useCallback( + (rowItem: ConversationTableItem) => { + openEditFlyout(); + onConversationSelectionChange(rowItem); + }, + [onConversationSelectionChange, openEditFlyout] + ); + + const onConversationDeleted = useConversationDeleted({ + conversationSettings, + conversationsSettingsBulkActions, + setConversationSettings, + setConversationsSettingsBulkActions, + }); + + const onDeleteActionClicked = useCallback( + (rowItem: ConversationTableItem) => { + setDeletedConversation(rowItem); + onConversationDeleted(rowItem.title); + + closeEditFlyout(); + openConfirmModal(); + }, + [closeEditFlyout, onConversationDeleted, openConfirmModal] + ); + + const onDeleteConfirmed = useCallback(() => { + if (Object.keys(conversationsSettingsBulkActions).length === 0) { + return; + } + closeConfirmModal(); + handleSave(true); + setConversationsSettingsBulkActions({}); + }, [ + closeConfirmModal, + conversationsSettingsBulkActions, + handleSave, + setConversationsSettingsBulkActions, + ]); + + const onDeleteCancelled = useCallback(() => { + setDeletedConversation(null); + closeConfirmModal(); + onCancelClick(); + }, [closeConfirmModal, onCancelClick]); + + const { getConversationsList, getColumns } = useConversationsTable(); + + const { onTableChange, pagination, sorting } = useSessionPagination({ + nameSpace, + storageKey: CONVERSATION_TABLE_SESSION_STORAGE_KEY, + defaultTableOptions: DEFAULT_TABLE_OPTIONS, + }); + + const conversationOptions = getConversationsList({ + allSystemPrompts, + actionTypeRegistry, + connectors, + conversations: conversationSettings, + defaultConnector, + }); + + const onSaveCancelled = useCallback(() => { + closeEditFlyout(); + onCancelClick(); + }, [closeEditFlyout, onCancelClick]); + + const onSaveConfirmed = useCallback(() => { + closeEditFlyout(); + handleSave(true); + setConversationsSettingsBulkActions({}); + }, [closeEditFlyout, handleSave, setConversationsSettingsBulkActions]); + + const columns = useMemo( + () => + getColumns({ + conversations: conversationSettings, + onDeleteActionClicked, + onEditActionClicked, + }), + [conversationSettings, getColumns, onDeleteActionClicked, onEditActionClicked] + ); + + const confirmationTitle = useMemo( + () => + deletedConversation?.title + ? i18n.DELETE_CONVERSATION_CONFIRMATION_TITLE(deletedConversation?.title) + : i18n.DELETE_CONVERSATION_CONFIRMATION_DEFAULT_TITLE, + [deletedConversation?.title] + ); + + if (!conversationsLoaded) { + return null; + } + + return ( + <> + + + + + + {editFlyoutVisible && ( + + + + )} + {deleteConfirmModalVisibility && deletedConversation?.title && ( + +

+ + )} + + ); +}; + +export const ConversationSettingsManagement = React.memo(ConversationSettingsManagementComponent); + +ConversationSettingsManagement.displayName = 'ConversationSettingsManagement'; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings_management/translations.ts b/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings_management/translations.ts new file mode 100644 index 0000000000000..5761ba8e6e99f --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings_management/translations.ts @@ -0,0 +1,63 @@ +/* + * 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 CONVERSATIONS_TABLE_COLUMN_NAME = i18n.translate( + 'xpack.elasticAssistant.assistant.conversationSettings.column.name', + { + defaultMessage: 'Name', + } +); + +export const CONVERSATIONS_TABLE_COLUMN_SYSTEM_PROMPT = i18n.translate( + 'xpack.elasticAssistant.assistant.conversationSettings.column.systemPrompt', + { + defaultMessage: 'System prompt', + } +); + +export const CONVERSATIONS_TABLE_COLUMN_CONNECTOR = i18n.translate( + 'xpack.elasticAssistant.assistant.conversationSettings.column.connector', + { + defaultMessage: 'Connector', + } +); + +export const CONVERSATIONS_TABLE_COLUMN_UPDATED_AT = i18n.translate( + 'xpack.elasticAssistant.assistant.conversationSettings.column.updatedAt', + { + defaultMessage: 'Date updated', + } +); + +export const CONVERSATIONS_TABLE_COLUMN_ACTIONS = i18n.translate( + 'xpack.elasticAssistant.assistant.conversationSettings.column.actions', + { + defaultMessage: 'Actions', + } +); + +export const CONVERSATIONS_FLYOUT_DEFAULT_TITLE = i18n.translate( + 'xpack.elasticAssistant.assistant.conversationSettings.flyout.defaultTitle', + { + defaultMessage: 'Conversation', + } +); + +export const DELETE_CONVERSATION_CONFIRMATION_DEFAULT_TITLE = i18n.translate( + 'xpack.elasticAssistant.assistant.conversationSettings.deleteConfirmation.defaultTitle', + { + defaultMessage: 'Delete conversation?', + } +); + +export const DELETE_CONVERSATION_CONFIRMATION_TITLE = (conversationTitle: string) => + i18n.translate('xpack.elasticAssistant.assistant.conversationSettings.deleteConfirmation.Title', { + values: { conversationTitle }, + defaultMessage: 'Delete "{conversationTitle}"?', + }); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings_management/use_conversations_table.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings_management/use_conversations_table.test.tsx new file mode 100644 index 0000000000000..465ffa792fb0b --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings_management/use_conversations_table.test.tsx @@ -0,0 +1,91 @@ +/* + * 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 { + useConversationsTable, + GetConversationsListParams, + ConversationTableItem, +} from './use_conversations_table'; +import { alertConvo, welcomeConvo, customConvo } from '../../../mock/conversation'; +import { mockActionTypes, mockConnectors } from '../../../mock/connectors'; +import { mockSystemPrompts } from '../../../mock/system_prompt'; +import { ActionTypeRegistryContract } from '@kbn/triggers-actions-ui-plugin/public'; +import * as i18n from './translations'; +import { EuiTableFieldDataColumnType } from '@elastic/eui'; + +const mockActionTypeRegistry: ActionTypeRegistryContract = { + has: jest + .fn() + .mockImplementation((id: string) => + mockActionTypes.some((actionType: { id: string }) => actionType.id === id) + ), + get: jest + .fn() + .mockImplementation((id: string) => + mockActionTypes.find((actionType: { id: string }) => actionType.id === id) + ), + list: jest.fn().mockReturnValue(mockActionTypes), + register: jest.fn(), +}; + +describe('useConversationsTable', () => { + it('should return columns', () => { + const { result } = renderHook(() => useConversationsTable()); + const columns = result.current.getColumns({ + onDeleteActionClicked: jest.fn(), + onEditActionClicked: jest.fn(), + }); + + expect(columns).toHaveLength(5); + + expect(columns[0].name).toBe(i18n.CONVERSATIONS_TABLE_COLUMN_NAME); + expect((columns[1] as EuiTableFieldDataColumnType).field).toBe( + 'systemPromptTitle' + ); + expect((columns[2] as EuiTableFieldDataColumnType).field).toBe( + 'connectorTypeTitle' + ); + expect((columns[3] as EuiTableFieldDataColumnType).field).toBe( + 'updatedAt' + ); + expect(columns[4].name).toBe(i18n.CONVERSATIONS_TABLE_COLUMN_ACTIONS); + }); + + it('should return a list of conversations', () => { + const alertConvoId = 'alert-convo-id'; + const welcomeConvoId = 'welcome-convo-id'; + const customConvoId = 'custom-convo-id'; + const params: GetConversationsListParams = { + allSystemPrompts: mockSystemPrompts, + actionTypeRegistry: mockActionTypeRegistry, + connectors: mockConnectors, + conversations: { + [alertConvoId]: { ...alertConvo, id: alertConvoId }, + [welcomeConvoId]: { ...welcomeConvo, id: welcomeConvoId }, + [customConvoId]: { ...customConvo, id: customConvoId }, + }, + defaultConnector: mockConnectors[0], + }; + + const { result } = renderHook(() => useConversationsTable()); + const conversationsList: ConversationTableItem[] = result.current.getConversationsList(params); + + expect(conversationsList).toHaveLength(3); + + expect(conversationsList[0].title).toBe(alertConvo.title); + expect(conversationsList[0].connectorTypeTitle).toBe('OpenAI'); + expect(conversationsList[0].systemPromptTitle).toBe('Mock system prompt'); + + expect(conversationsList[1].title).toBe(welcomeConvo.title); + expect(conversationsList[1].connectorTypeTitle).toBe('OpenAI'); + expect(conversationsList[1].systemPromptTitle).toBe('Mock system prompt'); + + expect(conversationsList[2].title).toBe(customConvo.title); + expect(conversationsList[2].connectorTypeTitle).toBe('OpenAI'); + expect(conversationsList[2].systemPromptTitle).toBe('Mock system prompt'); + }); +}); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings_management/use_conversations_table.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings_management/use_conversations_table.tsx new file mode 100644 index 0000000000000..fb705db6bb33c --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings_management/use_conversations_table.tsx @@ -0,0 +1,157 @@ +/* + * 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, { useCallback } from 'react'; + +import { ActionTypeRegistryContract } from '@kbn/triggers-actions-ui-plugin/public'; +import { EuiBadge, EuiBasicTableColumn, EuiLink } from '@elastic/eui'; + +import { FormattedDate } from '@kbn/i18n-react'; +import { Conversation } from '../../../assistant_context/types'; +import { AIConnector } from '../../../connectorland/connector_selector'; +import { getConnectorTypeTitle } from '../../../connectorland/helpers'; +import { Prompt } from '../../../..'; +import { + getConversationApiConfig, + getInitialDefaultSystemPrompt, +} from '../../use_conversation/helpers'; +import * as i18n from './translations'; +import { RowActions } from '../../common/components/assistant_settings_management/row_actions'; + +const emptyConversations = {}; + +export interface GetConversationsListParams { + allSystemPrompts: Prompt[]; + actionTypeRegistry: ActionTypeRegistryContract; + connectors: AIConnector[] | undefined; + conversations: Record; + defaultConnector?: AIConnector; +} + +export type ConversationTableItem = Conversation & { + connectorTypeTitle?: string | null; + systemPromptTitle?: string | null; +}; + +export const useConversationsTable = () => { + const getColumns = useCallback( + ({ + onDeleteActionClicked, + onEditActionClicked, + }): Array> => { + return [ + { + name: i18n.CONVERSATIONS_TABLE_COLUMN_NAME, + render: (conversation: ConversationTableItem) => ( + onEditActionClicked(conversation)}> + {conversation.title} + + ), + sortable: ({ title }: ConversationTableItem) => title, + }, + { + field: 'systemPromptTitle', + name: i18n.CONVERSATIONS_TABLE_COLUMN_SYSTEM_PROMPT, + align: 'left', + render: (systemPromptTitle: ConversationTableItem['systemPromptTitle']) => + systemPromptTitle ? {systemPromptTitle} : null, + sortable: true, + }, + { + field: 'connectorTypeTitle', + name: i18n.CONVERSATIONS_TABLE_COLUMN_CONNECTOR, + align: 'left', + render: (connectorTypeTitle: ConversationTableItem['connectorTypeTitle']) => + connectorTypeTitle ? {connectorTypeTitle} : null, + sortable: true, + }, + { + field: 'updatedAt', + name: i18n.CONVERSATIONS_TABLE_COLUMN_UPDATED_AT, + align: 'center', + render: (updatedAt: ConversationTableItem['updatedAt']) => + updatedAt ? ( + + + + ) : null, + sortable: true, + }, + { + name: i18n.CONVERSATIONS_TABLE_COLUMN_ACTIONS, + width: '120px', + align: 'center', + render: (conversation: ConversationTableItem) => { + const isDeletable = !conversation.isDefault; + return ( + + rowItem={conversation} + onDelete={isDeletable ? onDeleteActionClicked : undefined} + onEdit={onEditActionClicked} + isDeletable={isDeletable} + /> + ); + }, + }, + ]; + }, + [] + ); + const getConversationsList = useCallback( + ({ + allSystemPrompts, + actionTypeRegistry, + connectors, + conversations = emptyConversations, + defaultConnector, + }: GetConversationsListParams): ConversationTableItem[] => + Object.values(conversations).map((conversation) => { + const conversationApiConfig = getConversationApiConfig({ + allSystemPrompts, + connectors, + conversation, + defaultConnector, + }); + const connector: AIConnector | undefined = connectors?.find( + (c) => c.id === conversationApiConfig.apiConfig?.connectorId + ); + const connectorTypeTitle = getConnectorTypeTitle(connector, actionTypeRegistry); + + const systemPrompt: Prompt | undefined = allSystemPrompts.find( + ({ id }) => id === conversation.apiConfig?.defaultSystemPromptId + ); + const defaultSystemPrompt = getInitialDefaultSystemPrompt({ + allSystemPrompts, + conversation, + }); + + const systemPromptTitle = + systemPrompt?.label || + systemPrompt?.name || + defaultSystemPrompt?.label || + defaultSystemPrompt?.name; + + return { + ...conversation, + connectorTypeTitle, + systemPromptTitle, + ...conversationApiConfig, + }; + }), + [] + ); + + return { + getColumns, + getConversationsList, + }; +}; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/index.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/index.tsx index dd96b4883c969..830c5d2b7080a 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/index.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/index.tsx @@ -947,6 +947,7 @@ const AssistantComponent: React.FC = ({ setChatHistoryVisible={setChatHistoryVisible} onConversationSelected={handleOnConversationSelected} conversations={conversations} + conversationsLoaded={conversationsLoaded} refetchConversationsState={refetchConversationsState} onConversationCreate={handleCreateConversation} isAssistantEnabled={isAssistantEnabled} @@ -1115,6 +1116,7 @@ const AssistantComponent: React.FC = ({ showAnonymizedValues={showAnonymizedValues} title={title} conversations={conversations} + conversationsLoaded={conversationsLoaded} onConversationDeleted={handleOnConversationDeleted} refetchConversationsState={refetchConversationsState} /> diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/select_system_prompt/index.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/select_system_prompt/index.tsx index a2b8d0e1c4b7b..2cbbdf68b307c 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/select_system_prompt/index.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/select_system_prompt/index.tsx @@ -24,9 +24,9 @@ import * as i18n from '../translations'; import type { Prompt } from '../../../types'; import { useAssistantContext } from '../../../../assistant_context'; import { useConversation } from '../../../use_conversation'; -import { SYSTEM_PROMPTS_TAB } from '../../../settings/assistant_settings'; import { TEST_IDS } from '../../../constants'; import { PROMPT_CONTEXT_SELECTOR_PREFIX } from '../../../quick_prompts/prompt_context_selector/translations'; +import { SYSTEM_PROMPTS_TAB } from '../../../settings/const'; export interface Props { allSystemPrompts: Prompt[]; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_modal/system_prompt_editor.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_modal/system_prompt_editor.tsx new file mode 100644 index 0000000000000..3fd7dfeb00e73 --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_modal/system_prompt_editor.tsx @@ -0,0 +1,333 @@ +/* + * 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, { useCallback, useMemo } from 'react'; +import { + EuiFormRow, + EuiTextArea, + EuiCheckbox, + EuiIcon, + EuiFlexGroup, + EuiFlexItem, +} from '@elastic/eui'; + +import { keyBy } from 'lodash/fp'; + +import { css } from '@emotion/react'; +import { ApiConfig } from '@kbn/elastic-assistant-common'; +import { AIConnector } from '../../../../connectorland/connector_selector'; +import { Conversation, Prompt } from '../../../../..'; +import * as i18n from './translations'; +import { ConversationMultiSelector } from './conversation_multi_selector/conversation_multi_selector'; +import { SystemPromptSelector } from './system_prompt_selector/system_prompt_selector'; +import { TEST_IDS } from '../../../constants'; +import { ConversationsBulkActions } from '../../../api'; +import { getSelectedConversations } from '../system_prompt_settings_management/utils'; +import { useSystemPromptEditor } from './use_system_prompt_editor'; +import { getConversationApiConfig } from '../../../use_conversation/helpers'; + +interface Props { + connectors: AIConnector[] | undefined; + conversationSettings: Record; + conversationsSettingsBulkActions: ConversationsBulkActions; + onSelectedSystemPromptChange: (systemPrompt?: Prompt) => void; + selectedSystemPrompt: Prompt | undefined; + setUpdatedSystemPromptSettings: React.Dispatch>; + setConversationSettings: React.Dispatch>>; + systemPromptSettings: Prompt[]; + setConversationsSettingsBulkActions: React.Dispatch< + React.SetStateAction + >; + defaultConnector?: AIConnector; + resetSettings?: () => void; +} + +/** + * Settings for adding/removing system prompts. Configure name, prompt and default conversations. + */ +export const SystemPromptEditorComponent: React.FC = ({ + connectors, + conversationSettings, + onSelectedSystemPromptChange, + selectedSystemPrompt, + setUpdatedSystemPromptSettings, + setConversationSettings, + systemPromptSettings, + conversationsSettingsBulkActions, + setConversationsSettingsBulkActions, + defaultConnector, + resetSettings, +}) => { + // Prompt + const promptContent = useMemo( + // Fixing Cursor Jump in text area + () => systemPromptSettings.find((sp) => sp.id === selectedSystemPrompt?.id)?.content ?? '', + [selectedSystemPrompt?.id, systemPromptSettings] + ); + + const handlePromptContentChange = useCallback( + (e: React.ChangeEvent) => { + if (selectedSystemPrompt != null) { + setUpdatedSystemPromptSettings((prev): Prompt[] => { + const alreadyExists = prev.some((sp) => sp.id === selectedSystemPrompt.id); + + if (alreadyExists) { + return prev.map((sp): Prompt => { + if (sp.id === selectedSystemPrompt.id) { + return { + ...sp, + content: e.target.value, + }; + } + return sp; + }); + } + + return prev; + }); + } + }, + [selectedSystemPrompt, setUpdatedSystemPromptSettings] + ); + + const conversationsWithApiConfig = Object.entries(conversationSettings).reduce< + Record + >((acc, [key, conversation]) => { + acc[key] = { + ...conversation, + ...getConversationApiConfig({ + allSystemPrompts: systemPromptSettings, + connectors, + conversation, + defaultConnector, + }), + }; + return acc; + }, {}); + // Conversations this system prompt should be a default for + const conversationOptions = useMemo( + () => Object.values(conversationsWithApiConfig), + [conversationsWithApiConfig] + ); + + const selectedConversations = useMemo(() => { + return selectedSystemPrompt != null + ? getSelectedConversations( + systemPromptSettings, + conversationsWithApiConfig, + selectedSystemPrompt.id + ) + : []; + }, [conversationsWithApiConfig, selectedSystemPrompt, systemPromptSettings]); + + const handleConversationSelectionChange = useCallback( + (currentPromptConversations: Conversation[]) => { + const currentPromptConversationTitles = currentPromptConversations.map( + (convo) => convo.title + ); + + const getDefaultSystemPromptId = (convo: Conversation) => + currentPromptConversationTitles.includes(convo.title) + ? selectedSystemPrompt?.id + : convo.apiConfig && convo.apiConfig.defaultSystemPromptId === selectedSystemPrompt?.id + ? // remove the default System Prompt if it is assigned to a conversation + // but that conversation is not in the currentPromptConversationList + // This means conversation was removed in the current transaction + systemPromptSettings?.[0].id + : // leave it as it is .. if that conversation was neither added nor removed. + convo.apiConfig?.defaultSystemPromptId; + + if (selectedSystemPrompt != null) { + setConversationSettings((prev) => + keyBy( + 'title', + /* + * updatedConversationWithPrompts calculates the present of prompt for + * each conversation. Based on the values of selected conversation, it goes + * through each conversation adds/removed the selected prompt on each conversation. + * + * */ + Object.values(prev).map((convo) => ({ + ...convo, + ...(convo.apiConfig + ? { + apiConfig: { + ...convo.apiConfig, + defaultSystemPromptId: getDefaultSystemPromptId(convo), + }, + } + : { + apiConfig: { + defaultSystemPromptId: getDefaultSystemPromptId(convo), + connectorId: defaultConnector?.id ?? '', + actionTypeId: defaultConnector?.actionTypeId ?? '', + }, + }), + })) + ) + ); + + let updatedConversationsSettingsBulkActions = { ...conversationsSettingsBulkActions }; + Object.values(conversationsWithApiConfig).forEach((convo) => { + const getApiConfigWithSelectedPrompt = (): ApiConfig | {} => { + if (convo.apiConfig) { + return { + apiConfig: { + ...getConversationApiConfig({ + allSystemPrompts: systemPromptSettings, + connectors, + conversation: convo, + defaultConnector, + }).apiConfig, + defaultSystemPromptId: getDefaultSystemPromptId(convo), + }, + }; + } + + return {}; + }; + const createOperation = + convo.id === '' + ? { + create: { + ...(updatedConversationsSettingsBulkActions.create ?? {}), + [convo.title]: { + ...convo, + ...(convo.apiConfig ? getApiConfigWithSelectedPrompt() : {}), + }, + }, + } + : {}; + const updateOperation = + convo.id !== '' + ? { + update: { + ...(updatedConversationsSettingsBulkActions.update ?? {}), + [convo.id]: { + ...(updatedConversationsSettingsBulkActions.update + ? updatedConversationsSettingsBulkActions.update[convo.id] ?? {} + : {}), + ...getApiConfigWithSelectedPrompt(), + }, + }, + } + : {}; + + updatedConversationsSettingsBulkActions = { + ...updatedConversationsSettingsBulkActions, + ...createOperation, + ...updateOperation, + }; + }); + + setConversationsSettingsBulkActions(updatedConversationsSettingsBulkActions); + } + }, + [ + connectors, + conversationsSettingsBulkActions, + conversationsWithApiConfig, + defaultConnector, + selectedSystemPrompt, + setConversationSettings, + setConversationsSettingsBulkActions, + systemPromptSettings, + ] + ); + + // Whether this system prompt should be the default for new conversations + const isNewConversationDefault = useMemo( + () => selectedSystemPrompt?.isNewConversationDefault ?? false, + [selectedSystemPrompt?.isNewConversationDefault] + ); + + const handleNewConversationDefaultChange = useCallback( + (e) => { + const isChecked = e.target.checked; + + if (selectedSystemPrompt != null) { + setUpdatedSystemPromptSettings((prev) => { + return prev.map((pp) => { + return { + ...pp, + isNewConversationDefault: selectedSystemPrompt.id === pp.id && isChecked, + }; + }); + }); + } + }, + [selectedSystemPrompt, setUpdatedSystemPromptSettings] + ); + + const { onSystemPromptSelectionChange, onSystemPromptDeleted } = useSystemPromptEditor({ + setUpdatedSystemPromptSettings, + onSelectedSystemPromptChange, + }); + + return ( + <> + + + + + + + + + + + + + {i18n.SYSTEM_PROMPT_DEFAULT_NEW_CONVERSATION} + + + + + } + checked={isNewConversationDefault} + onChange={handleNewConversationDefaultChange} + /> + + + ); +}; + +export const SystemPromptEditor = React.memo(SystemPromptEditorComponent); + +SystemPromptEditor.displayName = 'SystemPromptEditor'; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_modal/system_prompt_selector/system_prompt_selector.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_modal/system_prompt_selector/system_prompt_selector.test.tsx index d8d14a8ffebe0..45f320528ec64 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_modal/system_prompt_selector/system_prompt_selector.test.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_modal/system_prompt_selector/system_prompt_selector.test.tsx @@ -23,7 +23,7 @@ describe('SystemPromptSelector', () => { beforeEach(() => { jest.clearAllMocks(); }); - it('Selects an existing quick prompt', () => { + it('Selects an existing system prompt', () => { const { getByTestId } = render(); expect(getByTestId('comboBoxSearchInput')).toHaveValue(mockSystemPrompts[0].name); fireEvent.click(getByTestId('comboBoxToggleListButton')); @@ -33,7 +33,7 @@ describe('SystemPromptSelector', () => { it('Deletes a system prompt that is not selected', () => { const { getByTestId, getAllByTestId } = render(); fireEvent.click(getByTestId('comboBoxToggleListButton')); - // there is only one delete quick prompt because there is only one custom option + // there is only one delete system prompt because there is only one custom option fireEvent.click(getAllByTestId('delete-prompt')[1]); expect(onSystemPromptDeleted).toHaveBeenCalledWith(mockSystemPrompts[1].name); expect(onSystemPromptSelectionChange).not.toHaveBeenCalled(); @@ -41,12 +41,12 @@ describe('SystemPromptSelector', () => { it('Deletes a system prompt that is selected', () => { const { getByTestId, getAllByTestId } = render(); fireEvent.click(getByTestId('comboBoxToggleListButton')); - // there is only one delete quick prompt because there is only one custom option + // there is only one delete system prompt because there is only one custom option fireEvent.click(getAllByTestId('delete-prompt')[0]); expect(onSystemPromptDeleted).toHaveBeenCalledWith(mockSystemPrompts[0].name); expect(onSystemPromptSelectionChange).toHaveBeenCalledWith(undefined); }); - it('Selects existing quick prompt from the search input', () => { + it('Selects existing system prompt from the search input', () => { const { getByTestId } = render(); fireEvent.change(getByTestId('comboBoxSearchInput'), { target: { value: mockSystemPrompts[1].name }, @@ -58,6 +58,22 @@ describe('SystemPromptSelector', () => { }); expect(onSystemPromptSelectionChange).toHaveBeenCalledWith(mockSystemPrompts[1]); }); + it('Reset settings every time before selecting an system prompt from the input if resetSettings is provided', () => { + const mockResetSettings = jest.fn(); + const { getByTestId } = render( + + ); + // changing the selection + fireEvent.change(getByTestId('comboBoxSearchInput'), { + target: { value: mockSystemPrompts[1].name }, + }); + fireEvent.keyDown(getByTestId('comboBoxSearchInput'), { + key: 'Enter', + code: 'Enter', + charCode: 13, + }); + expect(mockResetSettings).toHaveBeenCalled(); + }); it('Creates a new system prompt', () => { const { getByTestId } = render(); const customOption = 'Cool new prompt'; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_modal/system_prompt_selector/system_prompt_selector.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_modal/system_prompt_selector/system_prompt_selector.tsx index 1ec1c4b721065..53b6414d05b53 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_modal/system_prompt_selector/system_prompt_selector.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_modal/system_prompt_selector/system_prompt_selector.tsx @@ -26,11 +26,12 @@ import { SYSTEM_PROMPT_DEFAULT_NEW_CONVERSATION } from '../translations'; export const SYSTEM_PROMPT_SELECTOR_CLASSNAME = 'systemPromptSelector'; interface Props { + autoFocus?: boolean; onSystemPromptDeleted: (systemPromptTitle: string) => void; onSystemPromptSelectionChange: (systemPrompt?: Prompt | string) => void; - systemPrompts: Prompt[]; - autoFocus?: boolean; + resetSettings?: () => void; selectedSystemPrompt?: Prompt; + systemPrompts: Prompt[]; } export type SystemPromptSelectorOption = EuiComboBoxOptionOption<{ @@ -44,10 +45,11 @@ export type SystemPromptSelectorOption = EuiComboBoxOptionOption<{ export const SystemPromptSelector: React.FC = React.memo( ({ autoFocus = false, - systemPrompts, onSystemPromptDeleted, onSystemPromptSelectionChange, + resetSettings, selectedSystemPrompt, + systemPrompts, }) => { // Form options const [options, setOptions] = useState( @@ -76,6 +78,8 @@ export const SystemPromptSelector: React.FC = React.memo( const handleSelectionChange = useCallback( (systemPromptSelectorOption: SystemPromptSelectorOption[]) => { + // Reset settings on every selection change to avoid option saved automatically on settings management page + resetSettings?.(); const newSystemPrompt = systemPromptSelectorOption.length === 0 ? undefined @@ -83,7 +87,7 @@ export const SystemPromptSelector: React.FC = React.memo( systemPromptSelectorOption[0]?.label; onSystemPromptSelectionChange(newSystemPrompt); }, - [onSystemPromptSelectionChange, systemPrompts] + [onSystemPromptSelectionChange, resetSettings, systemPrompts] ); // Callback for when user types to create a new system prompt diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_modal/system_prompt_settings.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_modal/system_prompt_settings.test.tsx index 3892383b3d584..be9e33f615e4b 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_modal/system_prompt_settings.test.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_modal/system_prompt_settings.test.tsx @@ -25,6 +25,7 @@ const setConversationSettings = jest.fn().mockImplementation((fn) => { }); const testProps = { + connectors: [], conversationSettings: { [welcomeConvo.title]: welcomeConvo, }, diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_modal/system_prompt_settings.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_modal/system_prompt_settings.tsx index 88f00de57f444..b7f66acba85c7 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_modal/system_prompt_settings.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_modal/system_prompt_settings.tsx @@ -5,51 +5,19 @@ * 2.0. */ -import React, { useCallback, useMemo } from 'react'; -import { - EuiFormRow, - EuiTextArea, - EuiCheckbox, - EuiIcon, - EuiFlexGroup, - EuiFlexItem, - EuiTitle, - EuiText, - EuiHorizontalRule, - EuiSpacer, -} from '@elastic/eui'; +import React from 'react'; +import { EuiTitle, EuiText, EuiHorizontalRule, EuiSpacer } from '@elastic/eui'; -import { keyBy } from 'lodash/fp'; - -import { css } from '@emotion/react'; -import { ApiConfig } from '@kbn/elastic-assistant-common'; -import { AIConnector } from '../../../../connectorland/connector_selector'; -import { Conversation, Prompt } from '../../../../..'; import * as i18n from './translations'; -import { ConversationMultiSelector } from './conversation_multi_selector/conversation_multi_selector'; -import { SystemPromptSelector } from './system_prompt_selector/system_prompt_selector'; -import { TEST_IDS } from '../../../constants'; -import { ConversationsBulkActions } from '../../../api'; - -interface Props { - conversationSettings: Record; - conversationsSettingsBulkActions: ConversationsBulkActions; - onSelectedSystemPromptChange: (systemPrompt?: Prompt) => void; - selectedSystemPrompt: Prompt | undefined; - setUpdatedSystemPromptSettings: React.Dispatch>; - setConversationSettings: React.Dispatch>>; - systemPromptSettings: Prompt[]; - setConversationsSettingsBulkActions: React.Dispatch< - React.SetStateAction - >; - defaultConnector?: AIConnector; -} +import { SystemPromptEditor } from './system_prompt_editor'; +import { SystemPromptSettingsProps } from './types'; /** * Settings for adding/removing system prompts. Configure name, prompt and default conversations. */ -export const SystemPromptSettings: React.FC = React.memo( +export const SystemPromptSettings: React.FC = React.memo( ({ + connectors, conversationSettings, onSelectedSystemPromptChange, selectedSystemPrompt, @@ -60,226 +28,6 @@ export const SystemPromptSettings: React.FC = React.memo( setConversationsSettingsBulkActions, defaultConnector, }) => { - // Prompt - const promptContent = useMemo( - () => selectedSystemPrompt?.content ?? '', - [selectedSystemPrompt?.content] - ); - - const handlePromptContentChange = useCallback( - (e: React.ChangeEvent) => { - if (selectedSystemPrompt != null) { - setUpdatedSystemPromptSettings((prev): Prompt[] => { - const alreadyExists = prev.some((sp) => sp.id === selectedSystemPrompt.id); - - if (alreadyExists) { - return prev.map((sp): Prompt => { - if (sp.id === selectedSystemPrompt.id) { - return { - ...sp, - content: e.target.value, - }; - } - return sp; - }); - } - - return prev; - }); - } - }, - [selectedSystemPrompt, setUpdatedSystemPromptSettings] - ); - - // Conversations this system prompt should be a default for - const conversationOptions = useMemo( - () => Object.values(conversationSettings), - [conversationSettings] - ); - const selectedConversations = useMemo(() => { - return selectedSystemPrompt != null - ? Object.values(conversationSettings).filter( - (conversation) => - conversation.apiConfig?.defaultSystemPromptId === selectedSystemPrompt.id - ) - : []; - }, [conversationSettings, selectedSystemPrompt]); - - const handleConversationSelectionChange = useCallback( - (currentPromptConversations: Conversation[]) => { - const currentPromptConversationTitles = currentPromptConversations.map( - (convo) => convo.title - ); - const getDefaultSystemPromptId = (convo: Conversation) => - currentPromptConversationTitles.includes(convo.title) - ? selectedSystemPrompt?.id - : convo.apiConfig && convo.apiConfig.defaultSystemPromptId === selectedSystemPrompt?.id - ? // remove the default System Prompt if it is assigned to a conversation - // but that conversation is not in the currentPromptConversationList - // This means conversation was removed in the current transaction - undefined - : // leave it as it is .. if that conversation was neither added nor removed. - convo.apiConfig?.defaultSystemPromptId; - - if (selectedSystemPrompt != null) { - setConversationSettings((prev) => - keyBy( - 'title', - /* - * updatedConversationWithPrompts calculates the present of prompt for - * each conversation. Based on the values of selected conversation, it goes - * through each conversation adds/removed the selected prompt on each conversation. - * - * */ - Object.values(prev).map((convo) => ({ - ...convo, - ...(convo.apiConfig - ? { - apiConfig: { - ...convo.apiConfig, - defaultSystemPromptId: getDefaultSystemPromptId(convo), - }, - } - : { - apiConfig: { - defaultSystemPromptId: getDefaultSystemPromptId(convo), - connectorId: defaultConnector?.id ?? '', - actionTypeId: defaultConnector?.actionTypeId ?? '', - }, - }), - })) - ) - ); - - let updatedConversationsSettingsBulkActions = { ...conversationsSettingsBulkActions }; - Object.values(conversationSettings).forEach((convo) => { - const getApiConfig = (): ApiConfig | {} => { - if (convo.apiConfig) { - return { - apiConfig: { - ...convo.apiConfig, - defaultSystemPromptId: getDefaultSystemPromptId(convo), - }, - }; - } - return {}; - }; - const createOperation = - convo.id === '' - ? { - create: { - ...(updatedConversationsSettingsBulkActions.create ?? {}), - [convo.id]: { - ...convo, - ...(convo.apiConfig - ? { - apiConfig: { - ...convo.apiConfig, - defaultSystemPromptId: getDefaultSystemPromptId(convo), - }, - } - : {}), - }, - }, - } - : {}; - - const updateOperation = - convo.id !== '' - ? { - update: { - ...(updatedConversationsSettingsBulkActions.update ?? {}), - [convo.id]: { - ...(updatedConversationsSettingsBulkActions.update - ? updatedConversationsSettingsBulkActions.update[convo.id] ?? {} - : {}), - ...getApiConfig(), - }, - }, - } - : {}; - - updatedConversationsSettingsBulkActions = { - ...updatedConversationsSettingsBulkActions, - ...createOperation, - ...updateOperation, - }; - }); - setConversationsSettingsBulkActions(updatedConversationsSettingsBulkActions); - } - }, - [ - conversationSettings, - conversationsSettingsBulkActions, - defaultConnector?.actionTypeId, - defaultConnector?.id, - selectedSystemPrompt, - setConversationSettings, - setConversationsSettingsBulkActions, - ] - ); - - // Whether this system prompt should be the default for new conversations - const isNewConversationDefault = useMemo( - () => selectedSystemPrompt?.isNewConversationDefault ?? false, - [selectedSystemPrompt?.isNewConversationDefault] - ); - - const handleNewConversationDefaultChange = useCallback( - (e) => { - const isChecked = e.target.checked; - - if (selectedSystemPrompt != null) { - setUpdatedSystemPromptSettings((prev) => { - return prev.map((pp) => { - return { - ...pp, - isNewConversationDefault: selectedSystemPrompt.id === pp.id && isChecked, - }; - }); - }); - } - }, - [selectedSystemPrompt, setUpdatedSystemPromptSettings] - ); - - // When top level system prompt selection changes - const onSystemPromptSelectionChange = useCallback( - (systemPrompt?: Prompt | string) => { - const isNew = typeof systemPrompt === 'string'; - const newSelectedSystemPrompt: Prompt | undefined = isNew - ? { - id: systemPrompt ?? '', - content: '', - name: systemPrompt ?? '', - promptType: 'system', - } - : systemPrompt; - - if (newSelectedSystemPrompt != null) { - setUpdatedSystemPromptSettings((prev) => { - const alreadyExists = prev.some((sp) => sp.id === newSelectedSystemPrompt.id); - - if (!alreadyExists) { - return [...prev, newSelectedSystemPrompt]; - } - - return prev; - }); - } - - onSelectedSystemPromptChange(newSelectedSystemPrompt); - }, - [onSelectedSystemPromptChange, setUpdatedSystemPromptSettings] - ); - - const onSystemPromptDeleted = useCallback( - (id: string) => { - setUpdatedSystemPromptSettings((prev) => prev.filter((sp) => sp.id !== id)); - }, - [setUpdatedSystemPromptSettings] - ); - return ( <> @@ -289,59 +37,18 @@ export const SystemPromptSettings: React.FC = React.memo( {i18n.SETTINGS_DESCRIPTION} - - - - - - - - - - - - - {i18n.SYSTEM_PROMPT_DEFAULT_NEW_CONVERSATION} - - - - - } - checked={isNewConversationDefault} - onChange={handleNewConversationDefaultChange} - /> - + ); } diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_modal/types.ts b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_modal/types.ts new file mode 100644 index 0000000000000..63025566c9400 --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_modal/types.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 { AIConnector } from '../../../../connectorland/connector_selector'; +import { Conversation, Prompt } from '../../../../..'; +import { ConversationsBulkActions } from '../../../api'; + +export interface SystemPromptSettingsProps { + connectors: AIConnector[] | undefined; + conversationSettings: Record; + conversationsSettingsBulkActions: ConversationsBulkActions; + onSelectedSystemPromptChange: (systemPrompt?: Prompt) => void; + selectedSystemPrompt: Prompt | undefined; + setUpdatedSystemPromptSettings: React.Dispatch>; + setConversationSettings: React.Dispatch>>; + systemPromptSettings: Prompt[]; + setConversationsSettingsBulkActions: React.Dispatch< + React.SetStateAction + >; + defaultConnector?: AIConnector; +} diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_modal/use_system_prompt_editor.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_modal/use_system_prompt_editor.test.tsx new file mode 100644 index 0000000000000..85efe99979650 --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_modal/use_system_prompt_editor.test.tsx @@ -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 { renderHook, act } from '@testing-library/react-hooks'; +import { useSystemPromptEditor } from './use_system_prompt_editor'; +import { Prompt } from '../../../types'; +import { + mockSystemPrompt, + mockSuperheroSystemPrompt, + mockSystemPrompts, +} from '../../../../mock/system_prompt'; + +// Mock functions for the tests +const mockOnSelectedSystemPromptChange = jest.fn(); +const mockSetUpdatedSystemPromptSettings = jest.fn(); +const mockPreviousSystemPrompts = [...mockSystemPrompts]; + +describe('useSystemPromptEditor', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + test('should delete a system prompt by id', () => { + const { result } = renderHook(() => + useSystemPromptEditor({ + onSelectedSystemPromptChange: mockOnSelectedSystemPromptChange, + setUpdatedSystemPromptSettings: mockSetUpdatedSystemPromptSettings, + }) + ); + + act(() => { + result.current.onSystemPromptDeleted('mock-system-prompt-1'); + }); + + expect( + mockSetUpdatedSystemPromptSettings.mock.calls[0][0]?.(mockPreviousSystemPrompts) + ).toEqual(mockSystemPrompts.filter((sp) => sp.id !== 'mock-system-prompt-1')); + }); + + test('should handle selection of an existing system prompt', () => { + const existingPrompt: Prompt = mockSystemPrompt; + const { result } = renderHook(() => + useSystemPromptEditor({ + onSelectedSystemPromptChange: mockOnSelectedSystemPromptChange, + setUpdatedSystemPromptSettings: mockSetUpdatedSystemPromptSettings, + }) + ); + + act(() => { + result.current.onSystemPromptSelectionChange(existingPrompt); + }); + + expect(mockOnSelectedSystemPromptChange).toHaveBeenCalledWith(existingPrompt); + expect( + mockSetUpdatedSystemPromptSettings.mock.calls[0][0]?.(mockPreviousSystemPrompts) + ).toEqual(mockSystemPrompts); + }); + + test('should handle selection of a new system prompt', () => { + const newPromptId = 'new-system-prompt'; + const { result } = renderHook(() => + useSystemPromptEditor({ + onSelectedSystemPromptChange: mockOnSelectedSystemPromptChange, + setUpdatedSystemPromptSettings: mockSetUpdatedSystemPromptSettings, + }) + ); + + act(() => { + result.current.onSystemPromptSelectionChange(newPromptId); + }); + + const newPrompt: Prompt = { + id: newPromptId, + content: '', + name: newPromptId, + promptType: 'system', + }; + + expect(mockOnSelectedSystemPromptChange).toHaveBeenCalledWith(newPrompt); + expect( + mockSetUpdatedSystemPromptSettings.mock.calls[0][0]?.(mockPreviousSystemPrompts) + ).toEqual([...mockSystemPrompts, newPrompt]); + }); + + test('should handle prompt selection with an existing system prompt id', () => { + const { result } = renderHook(() => + useSystemPromptEditor({ + onSelectedSystemPromptChange: mockOnSelectedSystemPromptChange, + setUpdatedSystemPromptSettings: mockSetUpdatedSystemPromptSettings, + }) + ); + + const expectedPrompt: Prompt = mockSuperheroSystemPrompt; + + act(() => { + result.current.onSystemPromptSelectionChange(expectedPrompt); + }); + + expect(mockOnSelectedSystemPromptChange).toHaveBeenCalledWith(expectedPrompt); + expect( + mockSetUpdatedSystemPromptSettings.mock.calls[0][0]?.(mockPreviousSystemPrompts) + ).toContain(expectedPrompt); + }); +}); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_modal/use_system_prompt_editor.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_modal/use_system_prompt_editor.tsx new file mode 100644 index 0000000000000..87e284d6dcf25 --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_modal/use_system_prompt_editor.tsx @@ -0,0 +1,58 @@ +/* + * 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 { useCallback } from 'react'; +import { Prompt } from '../../../types'; + +interface Props { + setUpdatedSystemPromptSettings: React.Dispatch>; + onSelectedSystemPromptChange: (systemPrompt?: Prompt) => void; +} + +export const useSystemPromptEditor = ({ + setUpdatedSystemPromptSettings, + onSelectedSystemPromptChange, +}: Props) => { + // When top level system prompt selection changes + const onSystemPromptSelectionChange = useCallback( + (systemPrompt?: Prompt | string) => { + const isNew = typeof systemPrompt === 'string'; + const newSelectedSystemPrompt: Prompt | undefined = isNew + ? { + id: systemPrompt ?? '', + content: '', + name: systemPrompt ?? '', + promptType: 'system', + } + : systemPrompt; + + if (newSelectedSystemPrompt != null) { + setUpdatedSystemPromptSettings((prev) => { + const alreadyExists = prev.some((sp) => sp.id === newSelectedSystemPrompt.id); + + if (!alreadyExists) { + return [...prev, newSelectedSystemPrompt]; + } + + return prev; + }); + } + + onSelectedSystemPromptChange(newSelectedSystemPrompt); + }, + [onSelectedSystemPromptChange, setUpdatedSystemPromptSettings] + ); + + const onSystemPromptDeleted = useCallback( + (id: string) => { + setUpdatedSystemPromptSettings((prev) => prev.filter((sp) => sp.id !== id)); + }, + [setUpdatedSystemPromptSettings] + ); + + return { onSystemPromptSelectionChange, onSystemPromptDeleted }; +}; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_settings_management/default_conversations_column.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_settings_management/default_conversations_column.tsx new file mode 100644 index 0000000000000..7567775909a09 --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_settings_management/default_conversations_column.tsx @@ -0,0 +1,50 @@ +/* + * 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, EuiLink } from '@elastic/eui'; +import React, { useCallback, useState } from 'react'; + +interface Props { + defaultConversations: string[]; +} + +export const DefaultConversationsColumn: React.FC = React.memo( + ({ defaultConversations }) => { + const maxConversationsToShow = 5; + const isOverflow = defaultConversations.length > maxConversationsToShow; + + const [isExpanded, setIsExpanded] = useState(false); + + const currentDisplaying = isExpanded + ? defaultConversations.length + : Math.min(maxConversationsToShow, defaultConversations.length); + const itemsToDisplay = defaultConversations.slice(0, currentDisplaying - 1); + + const toggleContent = useCallback((prev) => { + setIsExpanded(!prev); + }, []); + + if (!defaultConversations || defaultConversations?.length === 0) { + return null; + } + + return ( + <> + {itemsToDisplay.map((c, idx) => ( + + {c} + + ))} + {isOverflow && ( + {isExpanded ? 'Show less' : 'Show All'} + )} + + ); + } +); + +DefaultConversationsColumn.displayName = 'DefaultConversationsColumn'; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_settings_management/index.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_settings_management/index.tsx new file mode 100644 index 0000000000000..e0f27f3fa8c7d --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_settings_management/index.tsx @@ -0,0 +1,224 @@ +/* + * 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 { + EuiInMemoryTable, + EuiPanel, + EuiConfirmModal, + EuiButton, + EuiFlexGroup, + EuiFlexItem, + EuiSpacer, +} from '@elastic/eui'; +import React, { useCallback, useMemo, useState } from 'react'; + +import { Conversation, ConversationsBulkActions, useAssistantContext } from '../../../../..'; +import { SYSTEM_PROMPT_TABLE_SESSION_STORAGE_KEY } from '../../../../assistant_context/constants'; +import { AIConnector } from '../../../../connectorland/connector_selector'; +import { Flyout } from '../../../common/components/assistant_settings_management/flyout'; +import { useFlyoutModalVisibility } from '../../../common/components/assistant_settings_management/flyout/use_flyout_modal_visibility'; +import { + DEFAULT_TABLE_OPTIONS, + useSessionPagination, +} from '../../../common/components/assistant_settings_management/pagination/use_session_pagination'; +import { CANCEL, DELETE } from '../../../settings/translations'; +import { Prompt } from '../../../types'; +import { SystemPromptEditor } from '../system_prompt_modal/system_prompt_editor'; +import { SETTINGS_TITLE } from '../system_prompt_modal/translations'; +import { useSystemPromptEditor } from '../system_prompt_modal/use_system_prompt_editor'; +import * as i18n from './translations'; +import { useSystemPromptTable } from './use_system_prompt_table'; + +interface Props { + connectors: AIConnector[] | undefined; + conversationSettings: Record; + conversationsSettingsBulkActions: ConversationsBulkActions; + onSelectedSystemPromptChange: (systemPrompt?: Prompt) => void; + selectedSystemPrompt: Prompt | undefined; + setUpdatedSystemPromptSettings: React.Dispatch>; + setConversationSettings: React.Dispatch>>; + systemPromptSettings: Prompt[]; + setConversationsSettingsBulkActions: React.Dispatch< + React.SetStateAction + >; + defaultConnector?: AIConnector; + handleSave: (shouldRefetchConversation?: boolean) => void; + onCancelClick: () => void; + resetSettings: () => void; +} + +const SystemPromptSettingsManagementComponent = ({ + connectors, + conversationSettings, + onSelectedSystemPromptChange, + setUpdatedSystemPromptSettings, + setConversationSettings, + selectedSystemPrompt, + systemPromptSettings, + conversationsSettingsBulkActions, + setConversationsSettingsBulkActions, + defaultConnector, + handleSave, + onCancelClick, + resetSettings, +}: Props) => { + const { nameSpace } = useAssistantContext(); + const { isFlyoutOpen: editFlyoutVisible, openFlyout, closeFlyout } = useFlyoutModalVisibility(); + const { + isFlyoutOpen: deleteConfirmModalVisibility, + openFlyout: openConfirmModal, + closeFlyout: closeConfirmModal, + } = useFlyoutModalVisibility(); + const [deletedPrompt, setDeletedPrompt] = useState(); + + const onCreate = useCallback(() => { + onSelectedSystemPromptChange({ + id: '', + content: '', + name: '', + promptType: 'system', + }); + openFlyout(); + }, [onSelectedSystemPromptChange, openFlyout]); + + const { onSystemPromptSelectionChange, onSystemPromptDeleted } = useSystemPromptEditor({ + setUpdatedSystemPromptSettings, + onSelectedSystemPromptChange, + }); + + const onEditActionClicked = useCallback( + (prompt: Prompt) => { + onSystemPromptSelectionChange(prompt); + openFlyout(); + }, + [onSystemPromptSelectionChange, openFlyout] + ); + + const onDeleteActionClicked = useCallback( + (prompt: Prompt) => { + setDeletedPrompt(prompt); + onSystemPromptDeleted(prompt.id); + openConfirmModal(); + }, + [onSystemPromptDeleted, openConfirmModal] + ); + + const onDeleteCancelled = useCallback(() => { + setDeletedPrompt(null); + closeConfirmModal(); + onCancelClick(); + }, [closeConfirmModal, onCancelClick]); + + const onDeleteConfirmed = useCallback(() => { + closeConfirmModal(); + handleSave(true); + setConversationsSettingsBulkActions({}); + }, [closeConfirmModal, handleSave, setConversationsSettingsBulkActions]); + + const onSaveCancelled = useCallback(() => { + closeFlyout(); + onCancelClick(); + }, [closeFlyout, onCancelClick]); + + const onSaveConfirmed = useCallback(() => { + closeFlyout(); + handleSave(true); + setConversationsSettingsBulkActions({}); + }, [closeFlyout, handleSave, setConversationsSettingsBulkActions]); + + const confirmationTitle = useMemo( + () => + deletedPrompt?.name + ? i18n.DELETE_SYSTEM_PROMPT_MODAL_TITLE(deletedPrompt?.name) + : i18n.DELETE_SYSTEM_PROMPT_MODAL_DEFAULT_TITLE, + [deletedPrompt?.name] + ); + + const { getColumns, getSystemPromptsList } = useSystemPromptTable(); + + const { onTableChange, pagination, sorting } = useSessionPagination({ + defaultTableOptions: DEFAULT_TABLE_OPTIONS, + nameSpace, + storageKey: SYSTEM_PROMPT_TABLE_SESSION_STORAGE_KEY, + }); + + const columns = useMemo( + () => getColumns({ onEditActionClicked, onDeleteActionClicked }), + [getColumns, onEditActionClicked, onDeleteActionClicked] + ); + const systemPromptListItems = useMemo( + () => + getSystemPromptsList({ + connectors, + conversationSettings, + defaultConnector, + systemPromptSettings, + }), + [getSystemPromptsList, connectors, conversationSettings, defaultConnector, systemPromptSettings] + ); + + return ( + <> + + + + + {SETTINGS_TITLE} + + + + + + + + + + + {deleteConfirmModalVisibility && deletedPrompt?.name && ( + +

{i18n.DELETE_SYSTEM_PROMPT_MODAL_DESCRIPTION}

+
+ )} + + ); +}; + +export const SystemPromptSettingsManagement = React.memo(SystemPromptSettingsManagementComponent); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_settings_management/translations.ts b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_settings_management/translations.ts new file mode 100644 index 0000000000000..b1ff676486954 --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_settings_management/translations.ts @@ -0,0 +1,58 @@ +/* + * 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 SYSTEM_PROMPTS_TABLE_COLUMN_NAME = i18n.translate( + 'xpack.elasticAssistant.assistant.promptsTable.systemPromptsTableColumnName', + { + defaultMessage: 'Name', + } +); + +export const SYSTEM_PROMPTS_TABLE_COLUMN_DEFAULT_CONVERSATIONS = i18n.translate( + 'xpack.elasticAssistant.assistant.promptsTable.systemPromptsTableColumnDefaultConversations', + { + defaultMessage: 'Default conversations', + } +); + +export const SYSTEM_PROMPTS_TABLE_COLUMN_CREATED_ON = i18n.translate( + 'xpack.elasticAssistant.assistant.promptsTable.systemPromptsTableColumnCreatedOn', + { + defaultMessage: 'Created on', + } +); + +export const SYSTEM_PROMPTS_TABLE_COLUMN_ACTIONS = i18n.translate( + 'xpack.elasticAssistant.assistant.promptsTable.systemPromptsTableColumnActions', + { + defaultMessage: 'Actions', + } +); + +export const DELETE_SYSTEM_PROMPT_MODAL_TITLE = (prompt: string) => + i18n.translate( + 'xpack.elasticAssistant.assistant.promptEditor.modal.deleteSystemPromptConfirmationTitle', + { + values: { prompt }, + defaultMessage: 'Delete "{prompt}"?', + } + ); + +export const DELETE_SYSTEM_PROMPT_MODAL_DEFAULT_TITLE = i18n.translate( + 'xpack.elasticAssistant.assistant.promptEditor.modal.deleteSystemPromptConfirmationDefaultTitle', + { + defaultMessage: 'Delete system prompt?', + } +); + +export const DELETE_SYSTEM_PROMPT_MODAL_DESCRIPTION = i18n.translate( + 'xpack.elasticAssistant.assistant.promptEditor.modal.deleteSystemPromptConfirmationMessage', + { + defaultMessage: 'You cannot recover the prompt once deleted', + } +); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_settings_management/use_system_prompt_table.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_settings_management/use_system_prompt_table.test.tsx new file mode 100644 index 0000000000000..90cea2319714d --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_settings_management/use_system_prompt_table.test.tsx @@ -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 { renderHook } from '@testing-library/react-hooks'; +import { useSystemPromptTable } from './use_system_prompt_table'; +import { Prompt } from '../../../types'; +import { Conversation } from '../../../../assistant_context/types'; +import { AIConnector } from '../../../../connectorland/connector_selector'; +import { customConvo, welcomeConvo } from '../../../../mock/conversation'; +import { mockConnectors } from '../../../../mock/connectors'; +import { ApiConfig } from '@kbn/elastic-assistant-common'; + +// Mock data for tests +const mockSystemPrompts: Prompt[] = [ + { + id: 'prompt-1', + content: 'Prompt 1', + name: 'Prompt 1', + promptType: 'user', + }, + { + id: 'prompt-2', + content: 'Prompt 2', + name: 'Prompt 2', + promptType: 'user', + isNewConversationDefault: true, + }, +]; + +const mockConversationSettings: Record = { + 'conv-1': { + ...welcomeConvo, + id: 'conv-1', + apiConfig: { + ...welcomeConvo.apiConfig, + defaultSystemPromptId: 'prompt-1', + } as ApiConfig, + }, + 'conv-2': { + ...customConvo, + id: 'conv-2', + apiConfig: { + ...customConvo.apiConfig, + defaultSystemPromptId: 'prompt-2', + } as ApiConfig, + }, +}; + +const mockAiConnectors: AIConnector[] = [...mockConnectors]; + +const mockDefaultConnector: AIConnector = { + id: 'default-connector', + actionTypeId: '.gen-ai', + apiProvider: 'OpenAI', +} as AIConnector; + +describe('useSystemPromptTable', () => { + const { result } = renderHook(() => useSystemPromptTable()); + + describe('getColumns', () => { + it('should return columns with correct render functions', () => { + const onEditActionClicked = jest.fn(); + const onDeleteActionClicked = jest.fn(); + const columns = result.current.getColumns({ + onEditActionClicked, + onDeleteActionClicked, + }); + + expect(columns).toHaveLength(3); + expect(columns[0].name).toBe('Name'); + expect(columns[1].name).toBe('Default conversations'); + expect(columns[2].name).toBe('Actions'); + }); + }); + + describe('getSystemPromptsList', () => { + it('should return system prompts with associated default conversations', () => { + const systemPromptsList = result.current.getSystemPromptsList({ + connectors: mockAiConnectors, + conversationSettings: mockConversationSettings, + defaultConnector: mockDefaultConnector, + systemPromptSettings: mockSystemPrompts, + }); + + expect(systemPromptsList).toHaveLength(2); + expect(systemPromptsList[0].defaultConversations).toEqual(['Welcome']); + expect(systemPromptsList[1].defaultConversations).toEqual(['Custom option']); + }); + + it('should return empty defaultConversations if no conversations match', () => { + const systemPromptsList = result.current.getSystemPromptsList({ + connectors: [], + conversationSettings: {}, + defaultConnector: undefined, + systemPromptSettings: mockSystemPrompts, + }); + + systemPromptsList.forEach((prompt) => { + expect(prompt.defaultConversations).toEqual([]); + }); + }); + }); +}); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_settings_management/use_system_prompt_table.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_settings_management/use_system_prompt_table.tsx new file mode 100644 index 0000000000000..7cf907bb7adf5 --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_settings_management/use_system_prompt_table.tsx @@ -0,0 +1,135 @@ +/* + * 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 { EuiBasicTableColumn, EuiIcon, EuiLink } from '@elastic/eui'; +import React, { useCallback } from 'react'; +import { Conversation } from '../../../../assistant_context/types'; +import { AIConnector } from '../../../../connectorland/connector_selector'; +import { BadgesColumn } from '../../../common/components/assistant_settings_management/badges'; +import { RowActions } from '../../../common/components/assistant_settings_management/row_actions'; +import { Prompt } from '../../../types'; +import { + getConversationApiConfig, + getInitialDefaultSystemPrompt, +} from '../../../use_conversation/helpers'; +import { SYSTEM_PROMPT_DEFAULT_NEW_CONVERSATION } from '../system_prompt_modal/translations'; +import * as i18n from './translations'; +import { getSelectedConversations } from './utils'; + +type ConversationsWithSystemPrompt = Record< + string, + Conversation & { systemPrompt: Prompt | undefined } +>; + +type SystemPromptTableItem = Prompt & { defaultConversations: string[] }; + +export const useSystemPromptTable = () => { + const getColumns = useCallback( + ({ + onEditActionClicked, + onDeleteActionClicked, + }: { + onEditActionClicked: (prompt: SystemPromptTableItem) => void; + onDeleteActionClicked: (prompt: SystemPromptTableItem) => void; + }): Array> => [ + { + align: 'left', + name: i18n.SYSTEM_PROMPTS_TABLE_COLUMN_NAME, + truncateText: { lines: 3 }, + render: (prompt: SystemPromptTableItem) => + prompt?.name ? ( + onEditActionClicked(prompt)}> + {prompt?.name} + {prompt.isNewConversationDefault && ( + + )} + + ) : null, + sortable: ({ name }: SystemPromptTableItem) => name, + }, + { + align: 'left', + name: i18n.SYSTEM_PROMPTS_TABLE_COLUMN_DEFAULT_CONVERSATIONS, + render: ({ defaultConversations, id }: SystemPromptTableItem) => ( + + ), + }, + /* TODO: enable when createdAt is added + { + align: 'left', + field: 'createdAt', + name: i18n.SYSTEM_PROMPTS_TABLE_COLUMN_CREATED_ON, + }, + */ + { + align: 'center', + name: 'Actions', + width: '120px', + render: (prompt: SystemPromptTableItem) => { + const isDeletable = !prompt.isDefault; + return ( + + rowItem={prompt} + onEdit={onEditActionClicked} + onDelete={isDeletable ? onDeleteActionClicked : undefined} + isDeletable={isDeletable} + /> + ); + }, + }, + ], + [] + ); + + const getSystemPromptsList = ({ + connectors, + conversationSettings, + defaultConnector, + systemPromptSettings, + }: { + connectors: AIConnector[] | undefined; + conversationSettings: Record; + defaultConnector: AIConnector | undefined; + systemPromptSettings: Prompt[]; + }): SystemPromptTableItem[] => { + const conversationsWithApiConfig = Object.entries( + conversationSettings + ).reduce((acc, [key, conversation]) => { + const defaultSystemPrompt = getInitialDefaultSystemPrompt({ + allSystemPrompts: systemPromptSettings, + conversation, + }); + + acc[key] = { + ...conversation, + ...getConversationApiConfig({ + allSystemPrompts: systemPromptSettings, + connectors, + conversation, + defaultConnector, + }), + systemPrompt: defaultSystemPrompt, + }; + return acc; + }, {}); + return systemPromptSettings.map((systemPrompt) => { + return { + ...systemPrompt, + defaultConversations: getSelectedConversations( + systemPromptSettings, + conversationsWithApiConfig, + systemPrompt?.id + ).map(({ title }) => title), + }; + }); + }; + + return { getColumns, getSystemPromptsList }; +}; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_settings_management/utils.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_settings_management/utils.test.tsx new file mode 100644 index 0000000000000..5f10e3bb59c65 --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_settings_management/utils.test.tsx @@ -0,0 +1,70 @@ +/* + * 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 { ProviderEnum } from '@kbn/elastic-assistant-common'; +import { mockSystemPrompts } from '../../../../mock/system_prompt'; +import { PromptType } from '../../../types'; +import { getSelectedConversations } from './utils'; +describe('getSelectedConversations', () => { + const allSystemPrompts = [...mockSystemPrompts]; + const conversationSettings = { + '8f1e3218-0b02-480a-8791-78c1ed5f3708': { + timestamp: '2024-06-25T12:33:26.779Z', + createdAt: '2024-06-25T12:33:26.779Z' as unknown as Date, + users: [ + { + id: 'u_mGBROF_q5bmFCATbLXAcCwKa0k8JvONAwSruelyKA5E_0', + name: 'elastic', + }, + ], + title: 'New chat', + category: 'assistant', + apiConfig: { + connectorId: 'acdeb074-f863-4e04-a22b-014391dd1be4', + actionTypeId: '.gen-ai', + provider: ProviderEnum.OpenAI, + defaultSystemPromptId: 'mock-system-prompt-1', + model: 'gpt-4', + }, + messages: [], + updatedAt: '2024-06-25T18:35:28.217Z' as unknown as Date, + namespace: 'default', + id: '8f1e3218-0b02-480a-8791-78c1ed5f3708', + replacements: {}, + systemPrompt: { + id: 'mock-system-prompt-1', + content: + 'You are a helpful, expert assistant who answers questions about Elastic Security. Do not answer questions unrelated to Elastic Security.\nProvide the most detailed and relevant answer possible, as if you were relaying this information back to a cyber security expert.\nIf you answer a question related to KQL, EQL, or ES|QL, it should be immediately usable within an Elastic Security timeline; please always format the output correctly with back ticks. Any answer provided for Query DSL should also be usable in a security timeline. This means you should only ever include the "filter" portion of the query. xxx', + name: 'Enhanced system prompt', + promptType: 'system' as PromptType, + isDefault: true, + isNewConversationDefault: true, + }, + }, + }; + test('should return selected conversations', () => { + const systemPromptId = 'mock-system-prompt-1'; + + const conversations = getSelectedConversations( + allSystemPrompts, + conversationSettings, + systemPromptId + ); + + expect(conversations).toEqual(Object.values(conversationSettings)); + }); + test('should return empty array if no conversations are selected', () => { + const systemPromptId = 'ooo'; + + const conversations = getSelectedConversations( + allSystemPrompts, + conversationSettings, + systemPromptId + ); + + expect(conversations).toEqual([]); + }); +}); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_settings_management/utils.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_settings_management/utils.tsx new file mode 100644 index 0000000000000..5fde200db9b17 --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_settings_management/utils.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 { Conversation } from '../../../../assistant_context/types'; +import { Prompt } from '../../../types'; + +export const getSelectedConversations = ( + allSystemPrompts: Prompt[], + conversationSettings: Record, + systemPromptId: string +) => { + return Object.values(conversationSettings).filter((conversation) => { + const conversationSystemPrompt = allSystemPrompts.find( + (prompt) => prompt.id === conversation?.apiConfig?.defaultSystemPromptId + ); + return conversationSystemPrompt?.id === systemPromptId; + }); +}; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/quick_prompts/quick_prompt_selector/quick_prompt_selector.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/quick_prompts/quick_prompt_selector/quick_prompt_selector.test.tsx index 6e24d662955b1..04ccd478e3bc5 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/quick_prompts/quick_prompt_selector/quick_prompt_selector.test.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/quick_prompts/quick_prompt_selector/quick_prompt_selector.test.tsx @@ -53,6 +53,22 @@ describe('QuickPromptSelector', () => { title: 'A_CUSTOM_OPTION', }); }); + it('Reset settings every time before selecting an system prompt from the input if resetSettings is provided', () => { + const mockResetSettings = jest.fn(); + const { getByTestId } = render( + + ); + // changing the selection + fireEvent.change(getByTestId('comboBoxSearchInput'), { + target: { value: MOCK_QUICK_PROMPTS[1].title }, + }); + fireEvent.keyDown(getByTestId('comboBoxSearchInput'), { + key: 'Enter', + code: 'Enter', + charCode: 13, + }); + expect(mockResetSettings).toHaveBeenCalled(); + }); it('Creates a new quick prompt', () => { const { getByTestId } = render(); const customOption = 'Cool new prompt'; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/quick_prompts/quick_prompt_selector/quick_prompt_selector.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/quick_prompts/quick_prompt_selector/quick_prompt_selector.tsx index 5aaff2bbc8fc9..3fb0ba17cf4bf 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/quick_prompts/quick_prompt_selector/quick_prompt_selector.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/quick_prompts/quick_prompt_selector/quick_prompt_selector.tsx @@ -26,6 +26,7 @@ interface Props { onQuickPromptDeleted: (quickPromptTitle: string) => void; onQuickPromptSelectionChange: (quickPrompt?: QuickPrompt | string) => void; quickPrompts: QuickPrompt[]; + resetSettings?: () => void; selectedQuickPrompt?: QuickPrompt; } @@ -40,6 +41,7 @@ export const QuickPromptSelector: React.FC = React.memo( quickPrompts, onQuickPromptDeleted, onQuickPromptSelectionChange, + resetSettings, selectedQuickPrompt, }) => { // Form options @@ -69,6 +71,8 @@ export const QuickPromptSelector: React.FC = React.memo( const handleSelectionChange = useCallback( (quickPromptSelectorOption: QuickPromptSelectorOption[]) => { + // Reset settings on every selection change to avoid option saved automatically on settings management page + resetSettings?.(); const newQuickPrompt = quickPromptSelectorOption.length === 0 ? undefined @@ -76,7 +80,7 @@ export const QuickPromptSelector: React.FC = React.memo( quickPromptSelectorOption[0]?.label; onQuickPromptSelectionChange(newQuickPrompt); }, - [onQuickPromptSelectionChange, quickPrompts] + [onQuickPromptSelectionChange, resetSettings, quickPrompts] ); // Callback for when user types to create a new quick prompt diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/quick_prompts/quick_prompt_settings/quick_prompt_editor.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/quick_prompts/quick_prompt_settings/quick_prompt_editor.tsx new file mode 100644 index 0000000000000..4300e53525b33 --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/quick_prompts/quick_prompt_settings/quick_prompt_editor.tsx @@ -0,0 +1,195 @@ +/* + * 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, { memo, useCallback, useMemo } from 'react'; +import { EuiFormRow, EuiColorPicker, EuiTextArea } from '@elastic/eui'; + +import { EuiSetColorMethod } from '@elastic/eui/src/services/color_picker/color_picker'; +import { css } from '@emotion/react'; +import { PromptContextTemplate } from '../../../..'; +import * as i18n from './translations'; +import { QuickPrompt } from '../types'; +import { QuickPromptSelector } from '../quick_prompt_selector/quick_prompt_selector'; +import { PromptContextSelector } from '../prompt_context_selector/prompt_context_selector'; +import { useAssistantContext } from '../../../assistant_context'; +import { useQuickPromptEditor } from './use_quick_prompt_editor'; + +const DEFAULT_COLOR = '#D36086'; + +interface Props { + onSelectedQuickPromptChange: (quickPrompt?: QuickPrompt) => void; + quickPromptSettings: QuickPrompt[]; + resetSettings?: () => void; + selectedQuickPrompt: QuickPrompt | undefined; + setUpdatedQuickPromptSettings: React.Dispatch>; +} + +const QuickPromptSettingsEditorComponent = ({ + onSelectedQuickPromptChange, + quickPromptSettings, + resetSettings, + selectedQuickPrompt, + setUpdatedQuickPromptSettings, +}: Props) => { + const { basePromptContexts } = useAssistantContext(); + + // Prompt + const prompt = useMemo( + // Fixing Cursor Jump in text area + () => quickPromptSettings.find((p) => p.title === selectedQuickPrompt?.title)?.prompt ?? '', + [selectedQuickPrompt?.title, quickPromptSettings] + ); + + const handlePromptChange = useCallback( + (e: React.ChangeEvent) => { + if (selectedQuickPrompt != null) { + setUpdatedQuickPromptSettings((prev) => { + const alreadyExists = prev.some((qp) => qp.title === selectedQuickPrompt.title); + + if (alreadyExists) { + return prev.map((qp) => { + if (qp.title === selectedQuickPrompt.title) { + return { + ...qp, + prompt: e.target.value, + }; + } + return qp; + }); + } + + return prev; + }); + } + }, + [selectedQuickPrompt, setUpdatedQuickPromptSettings] + ); + + // Color + const selectedColor = useMemo( + () => selectedQuickPrompt?.color ?? DEFAULT_COLOR, + [selectedQuickPrompt?.color] + ); + + const handleColorChange = useCallback( + (color, { hex, isValid }) => { + if (selectedQuickPrompt != null) { + setUpdatedQuickPromptSettings((prev) => { + const alreadyExists = prev.some((qp) => qp.title === selectedQuickPrompt.title); + + if (alreadyExists) { + return prev.map((qp) => { + if (qp.title === selectedQuickPrompt.title) { + return { + ...qp, + color, + }; + } + return qp; + }); + } + return prev; + }); + } + }, + [selectedQuickPrompt, setUpdatedQuickPromptSettings] + ); + + // Prompt Contexts + const selectedPromptContexts = useMemo( + () => + basePromptContexts.filter((bpc) => + selectedQuickPrompt?.categories?.some((cat) => bpc?.category === cat) + ) ?? [], + [basePromptContexts, selectedQuickPrompt?.categories] + ); + + const onPromptContextSelectionChange = useCallback( + (pc: PromptContextTemplate[]) => { + if (selectedQuickPrompt != null) { + setUpdatedQuickPromptSettings((prev) => { + const alreadyExists = prev.some((qp) => qp.title === selectedQuickPrompt.title); + + if (alreadyExists) { + return prev.map((qp) => { + if (qp.title === selectedQuickPrompt.title) { + return { + ...qp, + categories: pc.map((p) => p.category), + }; + } + return qp; + }); + } + return prev; + }); + } + }, + [selectedQuickPrompt, setUpdatedQuickPromptSettings] + ); + + // When top level quick prompt selection changes + const { onQuickPromptDeleted, onQuickPromptSelectionChange } = useQuickPromptEditor({ + onSelectedQuickPromptChange, + setUpdatedQuickPromptSettings, + }); + + return ( + <> + + + + + + + + + + + + + + + + + ); +}; +export const QuickPromptSettingsEditor = memo(QuickPromptSettingsEditorComponent); + +QuickPromptSettingsEditor.displayName = 'QuickPromptSettingsEditor'; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/quick_prompts/quick_prompt_settings/quick_prompt_settings.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/quick_prompts/quick_prompt_settings/quick_prompt_settings.tsx index 38bbb0e6899be..4b8b6a8f8039d 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/quick_prompts/quick_prompt_settings/quick_prompt_settings.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/quick_prompts/quick_prompt_settings/quick_prompt_settings.tsx @@ -5,27 +5,12 @@ * 2.0. */ -import React, { useCallback, useMemo } from 'react'; -import { - EuiFormRow, - EuiColorPicker, - EuiTextArea, - EuiTitle, - EuiText, - EuiHorizontalRule, - EuiSpacer, -} from '@elastic/eui'; +import React from 'react'; +import { EuiTitle, EuiText, EuiHorizontalRule, EuiSpacer } from '@elastic/eui'; -import { EuiSetColorMethod } from '@elastic/eui/src/services/color_picker/color_picker'; -import { css } from '@emotion/react'; -import { PromptContextTemplate } from '../../../..'; import * as i18n from './translations'; import { QuickPrompt } from '../types'; -import { QuickPromptSelector } from '../quick_prompt_selector/quick_prompt_selector'; -import { PromptContextSelector } from '../prompt_context_selector/prompt_context_selector'; -import { useAssistantContext } from '../../../assistant_context'; - -const DEFAULT_COLOR = '#D36086'; +import { QuickPromptSettingsEditor } from './quick_prompt_editor'; interface Props { onSelectedQuickPromptChange: (quickPrompt?: QuickPrompt) => void; @@ -44,136 +29,6 @@ export const QuickPromptSettings: React.FC = React.memo( selectedQuickPrompt, setUpdatedQuickPromptSettings, }) => { - const { basePromptContexts } = useAssistantContext(); - - // Prompt - const prompt = useMemo(() => selectedQuickPrompt?.prompt ?? '', [selectedQuickPrompt?.prompt]); - - const handlePromptChange = useCallback( - (e: React.ChangeEvent) => { - if (selectedQuickPrompt != null) { - setUpdatedQuickPromptSettings((prev) => { - const alreadyExists = prev.some((qp) => qp.title === selectedQuickPrompt.title); - - if (alreadyExists) { - return prev.map((qp) => { - if (qp.title === selectedQuickPrompt.title) { - return { - ...qp, - prompt: e.target.value, - }; - } - return qp; - }); - } - - return prev; - }); - } - }, - [selectedQuickPrompt, setUpdatedQuickPromptSettings] - ); - - // Color - const selectedColor = useMemo( - () => selectedQuickPrompt?.color ?? DEFAULT_COLOR, - [selectedQuickPrompt?.color] - ); - - const handleColorChange = useCallback( - (color, { hex, isValid }) => { - if (selectedQuickPrompt != null) { - setUpdatedQuickPromptSettings((prev) => { - const alreadyExists = prev.some((qp) => qp.title === selectedQuickPrompt.title); - - if (alreadyExists) { - return prev.map((qp) => { - if (qp.title === selectedQuickPrompt.title) { - return { - ...qp, - color, - }; - } - return qp; - }); - } - return prev; - }); - } - }, - [selectedQuickPrompt, setUpdatedQuickPromptSettings] - ); - - // Prompt Contexts - const selectedPromptContexts = useMemo( - () => - basePromptContexts.filter((bpc) => - selectedQuickPrompt?.categories?.some((cat) => bpc?.category === cat) - ) ?? [], - [basePromptContexts, selectedQuickPrompt?.categories] - ); - - const onPromptContextSelectionChange = useCallback( - (pc: PromptContextTemplate[]) => { - if (selectedQuickPrompt != null) { - setUpdatedQuickPromptSettings((prev) => { - const alreadyExists = prev.some((qp) => qp.title === selectedQuickPrompt.title); - - if (alreadyExists) { - return prev.map((qp) => { - if (qp.title === selectedQuickPrompt.title) { - return { - ...qp, - categories: pc.map((p) => p.category), - }; - } - return qp; - }); - } - return prev; - }); - } - }, - [selectedQuickPrompt, setUpdatedQuickPromptSettings] - ); - - // When top level quick prompt selection changes - const onQuickPromptSelectionChange = useCallback( - (quickPrompt?: QuickPrompt | string) => { - const isNew = typeof quickPrompt === 'string'; - const newSelectedQuickPrompt: QuickPrompt | undefined = isNew - ? { - title: quickPrompt ?? '', - prompt: '', - color: DEFAULT_COLOR, - categories: [], - } - : quickPrompt; - - if (newSelectedQuickPrompt != null) { - setUpdatedQuickPromptSettings((prev) => { - const alreadyExists = prev.some((qp) => qp.title === newSelectedQuickPrompt.title); - - if (!alreadyExists) { - return [...prev, newSelectedQuickPrompt]; - } - - return prev; - }); - } - - onSelectedQuickPromptChange(newSelectedQuickPrompt); - }, - [onSelectedQuickPromptChange, setUpdatedQuickPromptSettings] - ); - - const onQuickPromptDeleted = useCallback( - (title: string) => { - setUpdatedQuickPromptSettings((prev) => prev.filter((qp) => qp.title !== title)); - }, - [setUpdatedQuickPromptSettings] - ); - return ( <> @@ -183,52 +38,12 @@ export const QuickPromptSettings: React.FC = React.memo( {i18n.SETTINGS_DESCRIPTION} - - - - - - - - - - - - - - - + ); } diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/quick_prompts/quick_prompt_settings/use_quick_prompt_editor.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/quick_prompts/quick_prompt_settings/use_quick_prompt_editor.test.tsx new file mode 100644 index 0000000000000..ec3a0256716ae --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/quick_prompts/quick_prompt_settings/use_quick_prompt_editor.test.tsx @@ -0,0 +1,94 @@ +/* + * 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, act } from '@testing-library/react-hooks'; +import { useQuickPromptEditor, DEFAULT_COLOR } from './use_quick_prompt_editor'; +import { QuickPrompt } from '../types'; +import { mockAlertPromptContext } from '../../../mock/prompt_context'; +import { MOCK_QUICK_PROMPTS } from '../../../mock/quick_prompt'; + +// Mock functions for the tests +const mockOnSelectedQuickPromptChange = jest.fn(); +const mockSetUpdatedQuickPromptSettings = jest.fn(); +const mockPreviousQuickPrompts = [...MOCK_QUICK_PROMPTS]; + +describe('useQuickPromptEditor', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + test('should delete a quick prompt by title', () => { + const { result } = renderHook(() => + useQuickPromptEditor({ + onSelectedQuickPromptChange: mockOnSelectedQuickPromptChange, + setUpdatedQuickPromptSettings: mockSetUpdatedQuickPromptSettings, + }) + ); + + act(() => { + result.current.onQuickPromptDeleted('ALERT_SUMMARIZATION_TITLE'); + }); + + expect(mockSetUpdatedQuickPromptSettings.mock.calls[0][0]?.(mockPreviousQuickPrompts)).toEqual( + MOCK_QUICK_PROMPTS.filter((qp) => qp.title !== 'ALERT_SUMMARIZATION_TITLE') + ); + }); + + test('should handle selection of a new quick prompt', () => { + const newPromptTitle = 'New Prompt'; + const { result } = renderHook(() => + useQuickPromptEditor({ + onSelectedQuickPromptChange: mockOnSelectedQuickPromptChange, + setUpdatedQuickPromptSettings: mockSetUpdatedQuickPromptSettings, + }) + ); + + act(() => { + result.current.onQuickPromptSelectionChange(newPromptTitle); + }); + + const newPrompt: QuickPrompt = { + title: newPromptTitle, + prompt: '', + color: DEFAULT_COLOR, + categories: [], + }; + + expect(mockOnSelectedQuickPromptChange).toHaveBeenCalledWith(newPrompt); + expect(mockSetUpdatedQuickPromptSettings.mock.calls[0][0]?.(mockPreviousQuickPrompts)).toEqual([ + ...MOCK_QUICK_PROMPTS, + newPrompt, + ]); + }); + + test('should handle prompt selection', async () => { + const { result } = renderHook(() => + useQuickPromptEditor({ + onSelectedQuickPromptChange: mockOnSelectedQuickPromptChange, + setUpdatedQuickPromptSettings: mockSetUpdatedQuickPromptSettings, + }) + ); + + const alertData = await mockAlertPromptContext.getPromptContext(); + + const expectedPrompt: QuickPrompt = { + title: mockAlertPromptContext.description, + prompt: alertData, + color: DEFAULT_COLOR, + categories: [mockAlertPromptContext.category], + } as QuickPrompt; + + act(() => { + result.current.onQuickPromptSelectionChange(expectedPrompt); + }); + + expect(mockOnSelectedQuickPromptChange).toHaveBeenCalledWith(expectedPrompt); + expect( + mockSetUpdatedQuickPromptSettings.mock.calls[0][0]?.(mockPreviousQuickPrompts) + ).toContain(expectedPrompt); + }); +}); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/quick_prompts/quick_prompt_settings/use_quick_prompt_editor.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/quick_prompts/quick_prompt_settings/use_quick_prompt_editor.tsx new file mode 100644 index 0000000000000..716298afb21da --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/quick_prompts/quick_prompt_settings/use_quick_prompt_editor.tsx @@ -0,0 +1,58 @@ +/* + * 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 { useCallback } from 'react'; +import { QuickPrompt } from '../types'; + +export const DEFAULT_COLOR = '#D36086'; + +export const useQuickPromptEditor = ({ + onSelectedQuickPromptChange, + setUpdatedQuickPromptSettings, +}: { + onSelectedQuickPromptChange: (quickPrompt?: QuickPrompt) => void; + setUpdatedQuickPromptSettings: React.Dispatch>; +}) => { + const onQuickPromptDeleted = useCallback( + (title: string) => { + setUpdatedQuickPromptSettings((prev) => prev.filter((qp) => qp.title !== title)); + }, + [setUpdatedQuickPromptSettings] + ); + + // When top level quick prompt selection changes + const onQuickPromptSelectionChange = useCallback( + (quickPrompt?: QuickPrompt | string) => { + const isNew = typeof quickPrompt === 'string'; + const newSelectedQuickPrompt: QuickPrompt | undefined = isNew + ? { + title: quickPrompt ?? '', + prompt: '', + color: DEFAULT_COLOR, + categories: [], + } + : quickPrompt; + + if (newSelectedQuickPrompt != null) { + setUpdatedQuickPromptSettings((prev) => { + const alreadyExists = prev.some((qp) => qp.title === newSelectedQuickPrompt.title); + + if (!alreadyExists) { + return [...prev, newSelectedQuickPrompt]; + } + + return prev; + }); + } + + onSelectedQuickPromptChange(newSelectedQuickPrompt); + }, + [onSelectedQuickPromptChange, setUpdatedQuickPromptSettings] + ); + + return { onQuickPromptDeleted, onQuickPromptSelectionChange }; +}; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/quick_prompts/quick_prompt_settings_management/index.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/quick_prompts/quick_prompt_settings_management/index.tsx new file mode 100644 index 0000000000000..e8362db441719 --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/quick_prompts/quick_prompt_settings_management/index.tsx @@ -0,0 +1,184 @@ +/* + * 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, { useCallback, useMemo, useState } from 'react'; +import { + EuiButton, + EuiConfirmModal, + EuiFlexGroup, + EuiFlexItem, + EuiInMemoryTable, + EuiPanel, + EuiSpacer, +} from '@elastic/eui'; +import { QuickPrompt } from '../types'; +import { QuickPromptSettingsEditor } from '../quick_prompt_settings/quick_prompt_editor'; +import * as i18n from './translations'; +import { useFlyoutModalVisibility } from '../../common/components/assistant_settings_management/flyout/use_flyout_modal_visibility'; +import { Flyout } from '../../common/components/assistant_settings_management/flyout'; +import { CANCEL, DELETE } from '../../settings/translations'; +import { useQuickPromptEditor } from '../quick_prompt_settings/use_quick_prompt_editor'; +import { useQuickPromptTable } from './use_quick_prompt_table'; +import { + DEFAULT_TABLE_OPTIONS, + useSessionPagination, +} from '../../common/components/assistant_settings_management/pagination/use_session_pagination'; +import { QUICK_PROMPT_TABLE_SESSION_STORAGE_KEY } from '../../../assistant_context/constants'; +import { useAssistantContext } from '../../../assistant_context'; + +interface Props { + handleSave: (shouldRefetchConversation?: boolean) => void; + onCancelClick: () => void; + onSelectedQuickPromptChange: (quickPrompt?: QuickPrompt) => void; + quickPromptSettings: QuickPrompt[]; + resetSettings?: () => void; + selectedQuickPrompt: QuickPrompt | undefined; + setUpdatedQuickPromptSettings: React.Dispatch>; +} + +const QuickPromptSettingsManagementComponent = ({ + handleSave, + onCancelClick, + onSelectedQuickPromptChange, + quickPromptSettings, + resetSettings, + selectedQuickPrompt, + setUpdatedQuickPromptSettings, +}: Props) => { + const { nameSpace, basePromptContexts } = useAssistantContext(); + + const { isFlyoutOpen: editFlyoutVisible, openFlyout, closeFlyout } = useFlyoutModalVisibility(); + const [deletedQuickPrompt, setDeletedQuickPrompt] = useState(); + const { + isFlyoutOpen: deleteConfirmModalVisibility, + openFlyout: openConfirmModal, + closeFlyout: closeConfirmModal, + } = useFlyoutModalVisibility(); + + const { onQuickPromptDeleted, onQuickPromptSelectionChange } = useQuickPromptEditor({ + onSelectedQuickPromptChange, + setUpdatedQuickPromptSettings, + }); + + const onEditActionClicked = useCallback( + (prompt: QuickPrompt) => { + onQuickPromptSelectionChange(prompt); + openFlyout(); + }, + [onQuickPromptSelectionChange, openFlyout] + ); + + const onDeleteActionClicked = useCallback( + (prompt: QuickPrompt) => { + setDeletedQuickPrompt(prompt); + onQuickPromptDeleted(prompt.title); + openConfirmModal(); + }, + [onQuickPromptDeleted, openConfirmModal] + ); + + const onDeleteCancelled = useCallback(() => { + setDeletedQuickPrompt(null); + closeConfirmModal(); + onCancelClick(); + }, [closeConfirmModal, onCancelClick]); + + const onDeleteConfirmed = useCallback(() => { + handleSave(); + closeConfirmModal(); + }, [closeConfirmModal, handleSave]); + + const onCreate = useCallback(() => { + onSelectedQuickPromptChange(); + openFlyout(); + }, [onSelectedQuickPromptChange, openFlyout]); + + const onSaveCancelled = useCallback(() => { + onSelectedQuickPromptChange(); + closeFlyout(); + onCancelClick(); + }, [closeFlyout, onSelectedQuickPromptChange, onCancelClick]); + + const onSaveConfirmed = useCallback(() => { + handleSave(); + onSelectedQuickPromptChange(); + closeFlyout(); + }, [closeFlyout, handleSave, onSelectedQuickPromptChange]); + + const { getColumns } = useQuickPromptTable(); + const columns = getColumns({ + basePromptContexts, + onEditActionClicked, + onDeleteActionClicked, + }); + + const { onTableChange, pagination, sorting } = useSessionPagination({ + defaultTableOptions: DEFAULT_TABLE_OPTIONS, + nameSpace, + storageKey: QUICK_PROMPT_TABLE_SESSION_STORAGE_KEY, + }); + + const confirmationTitle = useMemo( + () => + deletedQuickPrompt?.title + ? i18n.DELETE_QUICK_PROMPT_MODAL_TITLE(deletedQuickPrompt.title) + : i18n.DELETE_QUICK_PROMPT_MODAL_DEFAULT_TITLE, + [deletedQuickPrompt?.title] + ); + + return ( + <> + + + + + {i18n.QUICK_PROMPTS_TABLE_CREATE_BUTTON_TITLE} + + + + + + + + + + {deleteConfirmModalVisibility && deletedQuickPrompt && ( + +

{i18n.DELETE_QUICK_PROMPT_MODAL_DESCRIPTION}

+
+ )} + + ); +}; + +export const QuickPromptSettingsManagement = QuickPromptSettingsManagementComponent; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/quick_prompts/quick_prompt_settings_management/translations.ts b/x-pack/packages/kbn-elastic-assistant/impl/assistant/quick_prompts/quick_prompt_settings_management/translations.ts new file mode 100644 index 0000000000000..545fa822a7244 --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/quick_prompts/quick_prompt_settings_management/translations.ts @@ -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. + */ +import { i18n } from '@kbn/i18n'; + +export const QUICK_PROMPTS_TABLE_COLUMN_NAME = i18n.translate( + 'xpack.elasticAssistant.assistant.quickPromptsTable.quickPromptsTableColumnName', + { + defaultMessage: 'Name', + } +); + +export const QUICK_PROMPTS_TABLE_COLUMN_CREATED_AT = i18n.translate( + 'xpack.elasticAssistant.assistant.quickPromptsTable.quickPromptsTableColumnCreatedAt', + { + defaultMessage: 'Created at', + } +); + +export const QUICK_PROMPTS_TABLE_COLUMN_ACTIONS = i18n.translate( + 'xpack.elasticAssistant.assistant.quickPromptsTable.quickPromptsTableColumnActions', + { + defaultMessage: 'Actions', + } +); + +export const QUICK_PROMPTS_TABLE_CREATE_BUTTON_TITLE = i18n.translate( + 'xpack.elasticAssistant.assistant.quickPromptsTable.createButtonTitle', + { + defaultMessage: 'Quick Prompt', + } +); + +export const QUICK_PROMPT_EDIT_FLYOUT_TITLE = i18n.translate( + 'xpack.elasticAssistant.assistant.quickPromptEditFlyout.title', + { + defaultMessage: 'Quick Prompt', + } +); + +export const QUICK_PROMPTS_TABLE_COLUMN_CONTEXTS = i18n.translate( + 'xpack.elasticAssistant.assistant.quickPromptsTable.quickPromptsTableColumnContexts', + { + defaultMessage: 'Contexts', + } +); + +export const DELETE_QUICK_PROMPT_MODAL_TITLE = (prompt: string) => + i18n.translate( + 'xpack.elasticAssistant.assistant.quickPromptsTable.modal.deleteQuickPromptConfirmationTitle', + { + values: { prompt }, + defaultMessage: 'Delete "{prompt}"?', + } + ); + +export const DELETE_QUICK_PROMPT_MODAL_DEFAULT_TITLE = i18n.translate( + 'xpack.elasticAssistant.assistant.quickPromptsTable.modal.deleteQuickPromptConfirmationDefaultTitle', + { + defaultMessage: 'Delete quick prompt?', + } +); + +export const DELETE_QUICK_PROMPT_MODAL_DESCRIPTION = i18n.translate( + 'xpack.elasticAssistant.assistant.quickPromptsTable.modal.deleteQuickPromptConfirmationMessage', + { + defaultMessage: 'You cannot recover the prompt once deleted', + } +); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/quick_prompts/quick_prompt_settings_management/use_quick_prompt_table.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/quick_prompts/quick_prompt_settings_management/use_quick_prompt_table.test.tsx new file mode 100644 index 0000000000000..316b43f6cfb3d --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/quick_prompts/quick_prompt_settings_management/use_quick_prompt_table.test.tsx @@ -0,0 +1,98 @@ +/* + * 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 { useQuickPromptTable } from './use_quick_prompt_table'; +import { EuiTableComputedColumnType } from '@elastic/eui'; +import { QuickPrompt } from '../types'; +import { MOCK_QUICK_PROMPTS } from '../../../mock/quick_prompt'; +import { mockPromptContexts } from '../../../mock/prompt_context'; + +const mockOnEditActionClicked = jest.fn(); +const mockOnDeleteActionClicked = jest.fn(); + +describe('useQuickPromptTable', () => { + const { result } = renderHook(() => useQuickPromptTable()); + + describe('getColumns', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + it('should return columns with correct render functions', () => { + const columns = result.current.getColumns({ + basePromptContexts: mockPromptContexts, + onEditActionClicked: mockOnEditActionClicked, + onDeleteActionClicked: mockOnDeleteActionClicked, + }); + + expect(columns).toHaveLength(3); + expect(columns[0].name).toBe('Name'); + expect(columns[1].name).toBe('Contexts'); + expect(columns[2].name).toBe('Actions'); + }); + + it('should render contexts column correctly', () => { + const columns = result.current.getColumns({ + basePromptContexts: mockPromptContexts, + onEditActionClicked: mockOnEditActionClicked, + onDeleteActionClicked: mockOnDeleteActionClicked, + }); + + const mockQuickPrompt = { ...MOCK_QUICK_PROMPTS[0], categories: ['alert'] }; + const mockBadgesColumn = (columns[1] as EuiTableComputedColumnType).render( + mockQuickPrompt + ); + const selectedPromptContexts = mockPromptContexts + .filter((bpc) => mockQuickPrompt.categories?.some((cat) => bpc.category === cat)) + .map((bpc) => bpc.description); + expect(mockBadgesColumn).toHaveProperty('props', { + items: selectedPromptContexts, + prefix: MOCK_QUICK_PROMPTS[0].title, + }); + }); + + it('should not render delete action for non-deletable prompt', () => { + const columns = result.current.getColumns({ + basePromptContexts: mockPromptContexts, + onEditActionClicked: mockOnEditActionClicked, + onDeleteActionClicked: mockOnDeleteActionClicked, + }); + + const mockRowActions = (columns[2] as EuiTableComputedColumnType).render( + MOCK_QUICK_PROMPTS[0] + ); + + expect(mockRowActions).toHaveProperty('props', { + rowItem: MOCK_QUICK_PROMPTS[0], + onDelete: undefined, + onEdit: mockOnEditActionClicked, + isDeletable: false, + }); + }); + + it('should render delete actions correctly for deletable prompt', () => { + const columns = result.current.getColumns({ + basePromptContexts: mockPromptContexts, + onEditActionClicked: mockOnEditActionClicked, + onDeleteActionClicked: mockOnDeleteActionClicked, + }); + + const nonDefaultPrompt = MOCK_QUICK_PROMPTS.find((qp) => !qp.isDefault); + if (nonDefaultPrompt) { + const mockRowActions = (columns[2] as EuiTableComputedColumnType).render( + nonDefaultPrompt + ); + expect(mockRowActions).toHaveProperty('props', { + rowItem: nonDefaultPrompt, + onDelete: mockOnDeleteActionClicked, + onEdit: mockOnEditActionClicked, + isDeletable: true, + }); + } + }); + }); +}); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/quick_prompts/quick_prompt_settings_management/use_quick_prompt_table.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/quick_prompts/quick_prompt_settings_management/use_quick_prompt_table.tsx new file mode 100644 index 0000000000000..9ec334f817340 --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/quick_prompts/quick_prompt_settings_management/use_quick_prompt_table.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 { EuiBasicTableColumn, EuiLink } from '@elastic/eui'; +import React, { useCallback } from 'react'; +import { BadgesColumn } from '../../common/components/assistant_settings_management/badges'; +import { RowActions } from '../../common/components/assistant_settings_management/row_actions'; +import { PromptContextTemplate } from '../../prompt_context/types'; +import { QuickPrompt } from '../types'; +import * as i18n from './translations'; + +export const useQuickPromptTable = () => { + const getColumns = useCallback( + ({ + basePromptContexts, + onEditActionClicked, + onDeleteActionClicked, + }: { + basePromptContexts: PromptContextTemplate[]; + onEditActionClicked: (prompt: QuickPrompt) => void; + onDeleteActionClicked: (prompt: QuickPrompt) => void; + }): Array> => [ + { + align: 'left', + name: i18n.QUICK_PROMPTS_TABLE_COLUMN_NAME, + render: (prompt: QuickPrompt) => + prompt?.title ? ( + onEditActionClicked(prompt)}>{prompt?.title} + ) : null, + sortable: ({ title }: QuickPrompt) => title, + }, + { + align: 'left', + name: i18n.QUICK_PROMPTS_TABLE_COLUMN_CONTEXTS, + render: (prompt: QuickPrompt) => { + const selectedPromptContexts = ( + basePromptContexts.filter((bpc) => + prompt?.categories?.some((cat) => bpc?.category === cat) + ) ?? [] + ).map((bpc) => bpc?.description); + return selectedPromptContexts ? ( + + ) : null; + }, + }, + /* TODO: enable when createdAt is added + { + align: 'left', + field: 'createdAt', + name: i18n.QUICK_PROMPTS_TABLE_COLUMN_CREATED_AT, + }, + */ + { + align: 'center', + name: i18n.QUICK_PROMPTS_TABLE_COLUMN_ACTIONS, + width: '120px', + render: (prompt: QuickPrompt) => { + if (!prompt) { + return null; + } + const isDeletable = !prompt.isDefault; + return ( + + rowItem={prompt} + onDelete={isDeletable ? onDeleteActionClicked : undefined} + onEdit={onEditActionClicked} + isDeletable={isDeletable} + /> + ); + }, + }, + ], + [] + ); + + return { getColumns }; +}; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/quick_prompts/quick_prompts.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/quick_prompts/quick_prompts.test.tsx index 2632a66ac7f5a..7fb2c9760fc7b 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/quick_prompts/quick_prompts.test.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/quick_prompts/quick_prompts.test.tsx @@ -10,7 +10,7 @@ import { fireEvent, render } from '@testing-library/react'; import { QuickPrompts } from './quick_prompts'; import { TestProviders } from '../../mock/test_providers/test_providers'; import { MOCK_QUICK_PROMPTS } from '../../mock/quick_prompt'; -import { QUICK_PROMPTS_TAB } from '../settings/assistant_settings'; +import { QUICK_PROMPTS_TAB } from '../settings/const'; const setInput = jest.fn(); const setIsSettingsModalVisible = jest.fn(); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/quick_prompts/quick_prompts.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/quick_prompts/quick_prompts.tsx index 63e57424fa49b..7d08d20f432b9 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/quick_prompts/quick_prompts.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/quick_prompts/quick_prompts.tsx @@ -20,7 +20,7 @@ import { css } from '@emotion/react'; import { QuickPrompt } from '../../..'; import * as i18n from './translations'; import { useAssistantContext } from '../../assistant_context'; -import { QUICK_PROMPTS_TAB } from '../settings/assistant_settings'; +import { QUICK_PROMPTS_TAB } from '../settings/const'; export const KNOWLEDGE_BASE_CATEGORY = 'knowledge-base'; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/assistant_settings.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/assistant_settings.test.tsx index 8278cb1559535..8f4a8680f9c57 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/assistant_settings.test.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/assistant_settings.test.tsx @@ -8,19 +8,19 @@ import { alertConvo, customConvo, welcomeConvo } from '../../mock/conversation'; import { useAssistantContext } from '../../assistant_context'; import { fireEvent, render, act } from '@testing-library/react'; +import { AssistantSettings } from './assistant_settings'; +import React from 'react'; +import { OpenAiProviderType } from '@kbn/stack-connectors-plugin/common/openai/constants'; +import { MOCK_QUICK_PROMPTS } from '../../mock/quick_prompt'; +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { - AssistantSettings, ANONYMIZATION_TAB, CONVERSATIONS_TAB, EVALUATION_TAB, KNOWLEDGE_BASE_TAB, QUICK_PROMPTS_TAB, SYSTEM_PROMPTS_TAB, -} from './assistant_settings'; -import React from 'react'; -import { OpenAiProviderType } from '@kbn/stack-connectors-plugin/common/openai/constants'; -import { MOCK_QUICK_PROMPTS } from '../../mock/quick_prompt'; -import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +} from './const'; const mockConversations = { [alertConvo.title]: alertConvo, @@ -49,6 +49,7 @@ const onSave = jest.fn().mockResolvedValue(() => {}); const onConversationSelected = jest.fn(); const testProps = { + conversationsLoaded: true, defaultConnectorId: '123', defaultProvider: OpenAiProviderType.OpenAi, selectedConversationId: welcomeConvo.title, @@ -65,7 +66,7 @@ jest.mock('../../assistant_context'); jest.mock('.', () => { return { AnonymizationSettings: () => , - ConversationSettings: () => , + ConversationSettings: () => , EvaluationSettings: () => , KnowledgeBaseSettings: () => , QuickPromptSettings: () => , diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/assistant_settings.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/assistant_settings.tsx index f83e6c0d72ee6..68a8049b825b3 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/assistant_settings.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/assistant_settings.tsx @@ -24,7 +24,7 @@ import { import styled from 'styled-components'; import { css } from '@emotion/react'; import { AIConnector } from '../../connectorland/connector_selector'; -import { Conversation, Prompt, QuickPrompt } from '../../..'; +import { Conversation, Prompt, QuickPrompt, useLoadConnectors } from '../../..'; import * as i18n from './translations'; import { useAssistantContext } from '../../assistant_context'; import { TEST_IDS } from '../constants'; @@ -38,26 +38,20 @@ import { SystemPromptSettings, } from '.'; import { useFetchAnonymizationFields } from '../api/anonymization_fields/use_fetch_anonymization_fields'; +import { + ANONYMIZATION_TAB, + CONVERSATIONS_TAB, + EVALUATION_TAB, + KNOWLEDGE_BASE_TAB, + QUICK_PROMPTS_TAB, + SYSTEM_PROMPTS_TAB, +} from './const'; const StyledEuiModal = styled(EuiModal)` width: 800px; height: 575px; `; -export const CONVERSATIONS_TAB = 'CONVERSATION_TAB' as const; -export const QUICK_PROMPTS_TAB = 'QUICK_PROMPTS_TAB' as const; -export const SYSTEM_PROMPTS_TAB = 'SYSTEM_PROMPTS_TAB' as const; -export const ANONYMIZATION_TAB = 'ANONYMIZATION_TAB' as const; -export const KNOWLEDGE_BASE_TAB = 'KNOWLEDGE_BASE_TAB' as const; -export const EVALUATION_TAB = 'EVALUATION_TAB' as const; - -export type SettingsTabs = - | typeof CONVERSATIONS_TAB - | typeof QUICK_PROMPTS_TAB - | typeof SYSTEM_PROMPTS_TAB - | typeof ANONYMIZATION_TAB - | typeof KNOWLEDGE_BASE_TAB - | typeof EVALUATION_TAB; interface Props { defaultConnector?: AIConnector; onClose: ( @@ -68,6 +62,7 @@ interface Props { selectedConversationId?: string; onConversationSelected: ({ cId, cTitle }: { cId: string; cTitle: string }) => void; conversations: Record; + conversationsLoaded: boolean; } /** @@ -82,6 +77,7 @@ export const AssistantSettings: React.FC = React.memo( selectedConversationId: defaultSelectedConversationId, onConversationSelected, conversations, + conversationsLoaded, isFlyoutMode, }) => { const { @@ -93,9 +89,19 @@ export const AssistantSettings: React.FC = React.memo( setSelectedSettingsTab, } = useAssistantContext(); + useEffect(() => { + if (selectedSettingsTab == null) { + setSelectedSettingsTab(CONVERSATIONS_TAB); + } + }, [selectedSettingsTab, setSelectedSettingsTab]); + const { data: anonymizationFields, refetch: refetchAnonymizationFieldsResults } = useFetchAnonymizationFields(); + const { data: connectors } = useLoadConnectors({ + http, + }); + const { conversationSettings, setConversationSettings, @@ -114,7 +120,7 @@ export const AssistantSettings: React.FC = React.memo( anonymizationFieldsBulkActions, setAnonymizationFieldsBulkActions, setUpdatedAnonymizationData, - } = useSettingsUpdater(conversations, anonymizationFields); + } = useSettingsUpdater(conversations, conversationsLoaded, anonymizationFields); // Local state for saving previously selected items so tab switching is friendlier // Conversation Selection State @@ -205,7 +211,7 @@ export const AssistantSettings: React.FC = React.memo( setSelectedSettingsTab(CONVERSATIONS_TAB)} data-test-subj={`${CONVERSATIONS_TAB}-button`} > @@ -310,24 +316,26 @@ export const AssistantSettings: React.FC = React.memo( overflow-y: scroll; `} > - {selectedSettingsTab === CONVERSATIONS_TAB && ( - - )} + {!selectedSettingsTab || + (selectedSettingsTab === CONVERSATIONS_TAB && ( + + ))} {selectedSettingsTab === QUICK_PROMPTS_TAB && ( = React.memo( )} {selectedSettingsTab === SYSTEM_PROMPTS_TAB && ( ; + conversationsLoaded: boolean; refetchConversationsState: () => Promise; } @@ -39,6 +41,7 @@ export const AssistantSettingsButton: React.FC = React.memo( isFlyoutMode, onConversationSelected, conversations, + conversationsLoaded, refetchConversationsState, }) => { const { toasts, setSelectedSettingsTab } = useAssistantContext(); @@ -94,6 +97,7 @@ export const AssistantSettingsButton: React.FC = React.memo( onSave={handleSave} isFlyoutMode={isFlyoutMode} conversations={conversations} + conversationsLoaded={conversationsLoaded} /> )} diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/assistant_settings_management.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/assistant_settings_management.test.tsx new file mode 100644 index 0000000000000..3b34b3467aa84 --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/assistant_settings_management.test.tsx @@ -0,0 +1,157 @@ +/* + * 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 { alertConvo, welcomeConvo } from '../../mock/conversation'; +import { useAssistantContext } from '../../assistant_context'; +import { fireEvent, render } from '@testing-library/react'; + +import React from 'react'; +import { OpenAiProviderType } from '@kbn/stack-connectors-plugin/common/openai/constants'; +import { MOCK_QUICK_PROMPTS } from '../../mock/quick_prompt'; +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import { AssistantSettingsManagement } from './assistant_settings_management'; +import { + ANONYMIZATION_TAB, + CONNECTORS_TAB, + CONVERSATIONS_TAB, + EVALUATION_TAB, + KNOWLEDGE_BASE_TAB, + QUICK_PROMPTS_TAB, + SYSTEM_PROMPTS_TAB, +} from './const'; + +const mockConversations = { + [alertConvo.title]: alertConvo, + [welcomeConvo.title]: welcomeConvo, +}; +const saveSettings = jest.fn(); + +const mockValues = { + conversationSettings: mockConversations, + saveSettings, +}; + +const setSelectedSettingsTab = jest.fn(); +const mockContext = { + basePromptContexts: MOCK_QUICK_PROMPTS, + setSelectedSettingsTab, + http: { + get: jest.fn(), + }, + assistantFeatures: { assistantModelEvaluation: true }, + selectedSettingsTab: null, + assistantAvailability: { + isAssistantEnabled: true, + }, +}; +const onClose = jest.fn(); +const onSave = jest.fn().mockResolvedValue(() => {}); +const onConversationSelected = jest.fn(); + +const testProps = { + conversationsLoaded: true, + defaultConnectorId: '123', + defaultProvider: OpenAiProviderType.OpenAi, + selectedConversation: welcomeConvo, + onClose, + onSave, + isFlyoutMode: false, + onConversationSelected, + conversations: {}, + anonymizationFields: { total: 0, page: 1, perPage: 1000, data: [] }, + refetchAnonymizationFieldsResults: jest.fn(), + refetchConversations: jest.fn(), +}; +jest.mock('../../assistant_context'); + +jest.mock('../../connectorland/connector_settings_management', () => ({ + ConnectorsSettingsManagement: () => , +})); + +jest.mock('../conversations/conversation_settings_management', () => ({ + ConversationSettingsManagement: () => , +})); + +jest.mock('../quick_prompts/quick_prompt_settings_management', () => ({ + QuickPromptSettingsManagement: () => , +})); + +jest.mock('../prompt_editor/system_prompt/system_prompt_settings_management', () => ({ + SystemPromptSettingsManagement: () => , +})); + +jest.mock('../../data_anonymization/settings/anonymization_settings_management', () => ({ + AnonymizationSettingsManagement: () => , +})); + +jest.mock('.', () => { + return { + EvaluationSettings: () => , + KnowledgeBaseSettings: () => , + }; +}); + +jest.mock('./use_settings_updater/use_settings_updater', () => { + const original = jest.requireActual('./use_settings_updater/use_settings_updater'); + return { + ...original, + useSettingsUpdater: jest.fn().mockImplementation(() => mockValues), + }; +}); + +const queryClient = new QueryClient(); + +const wrapper = (props: { children: React.ReactNode }) => ( + {props.children} +); + +describe('AssistantSettingsManagement', () => { + beforeEach(() => { + jest.clearAllMocks(); + (useAssistantContext as jest.Mock).mockImplementation(() => mockContext); + }); + + it('Bottom bar is hidden when no pending changes', async () => { + const { queryByTestId } = render(, { + wrapper, + }); + + expect(queryByTestId(`bottom-bar`)).not.toBeInTheDocument(); + }); + + describe.each([ + CONNECTORS_TAB, + ANONYMIZATION_TAB, + CONVERSATIONS_TAB, + EVALUATION_TAB, + KNOWLEDGE_BASE_TAB, + QUICK_PROMPTS_TAB, + SYSTEM_PROMPTS_TAB, + ])('%s', (tab) => { + it('Opens the tab on button click', () => { + (useAssistantContext as jest.Mock).mockImplementation(() => ({ + ...mockContext, + selectedSettingsTab: tab, + })); + const { getByTestId } = render(, { + wrapper, + }); + fireEvent.click(getByTestId(`settingsPageTab-${tab}`)); + expect(setSelectedSettingsTab).toHaveBeenCalledWith(tab); + }); + it('renders with the correct tab open', () => { + (useAssistantContext as jest.Mock).mockImplementation(() => ({ + ...mockContext, + selectedSettingsTab: tab, + })); + const { getByTestId } = render(, { + wrapper, + }); + expect(getByTestId(`${tab}-tab`)).toBeInTheDocument(); + }); + }); +}); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/assistant_settings_management.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/assistant_settings_management.tsx index 79a050b11bb27..4e89bb3bba4fc 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/assistant_settings_management.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/assistant_settings_management.tsx @@ -7,12 +7,15 @@ import React, { useCallback, useEffect, useMemo, useState } from 'react'; import { + EuiAvatar, EuiButton, EuiButtonEmpty, - EuiIcon, + EuiFlexGroup, EuiFlexItem, EuiPageTemplate, - EuiFlexGroup, + EuiTitle, + useEuiShadow, + useEuiTheme, } from '@elastic/eui'; import { css } from '@emotion/react'; @@ -20,37 +23,32 @@ import { Conversation, Prompt, QuickPrompt } from '../../..'; import * as i18n from './translations'; import { useAssistantContext } from '../../assistant_context'; import { useSettingsUpdater } from './use_settings_updater/use_settings_updater'; -import { - AnonymizationSettings, - ConversationSettings, - EvaluationSettings, - KnowledgeBaseSettings, - QuickPromptSettings, - SystemPromptSettings, -} from '.'; +import { KnowledgeBaseSettings, EvaluationSettings } from '.'; import { useLoadConnectors } from '../../connectorland/use_load_connectors'; import { getDefaultConnector } from '../helpers'; import { useFetchAnonymizationFields } from '../api/anonymization_fields/use_fetch_anonymization_fields'; +import { ConnectorsSettingsManagement } from '../../connectorland/connector_settings_management'; +import { ConversationSettingsManagement } from '../conversations/conversation_settings_management'; +import { QuickPromptSettingsManagement } from '../quick_prompts/quick_prompt_settings_management'; +import { SystemPromptSettingsManagement } from '../prompt_editor/system_prompt/system_prompt_settings_management'; +import { AnonymizationSettingsManagement } from '../../data_anonymization/settings/anonymization_settings_management'; -export const CONVERSATIONS_TAB = 'CONVERSATION_TAB' as const; -export const QUICK_PROMPTS_TAB = 'QUICK_PROMPTS_TAB' as const; -export const SYSTEM_PROMPTS_TAB = 'SYSTEM_PROMPTS_TAB' as const; -export const ANONYMIZATION_TAB = 'ANONYMIZATION_TAB' as const; -export const KNOWLEDGE_BASE_TAB = 'KNOWLEDGE_BASE_TAB' as const; -export const EVALUATION_TAB = 'EVALUATION_TAB' as const; +import { + ANONYMIZATION_TAB, + CONNECTORS_TAB, + CONVERSATIONS_TAB, + EVALUATION_TAB, + KNOWLEDGE_BASE_TAB, + QUICK_PROMPTS_TAB, + SYSTEM_PROMPTS_TAB, +} from './const'; -export type SettingsTabs = - | typeof CONVERSATIONS_TAB - | typeof QUICK_PROMPTS_TAB - | typeof SYSTEM_PROMPTS_TAB - | typeof ANONYMIZATION_TAB - | typeof KNOWLEDGE_BASE_TAB - | typeof EVALUATION_TAB; interface Props { conversations: Record; + conversationsLoaded: boolean; selectedConversation: Conversation; - setSelectedConversationId: React.Dispatch>; isFlyoutMode: boolean; + refetchConversations: () => void; } /** @@ -59,13 +57,13 @@ interface Props { */ export const AssistantSettingsManagement: React.FC = React.memo( ({ - selectedConversation: defaultSelectedConversation, - setSelectedConversationId, conversations, + conversationsLoaded, isFlyoutMode, + refetchConversations, + selectedConversation: defaultSelectedConversation, }) => { const { - actionTypeRegistry, assistantFeatures: { assistantModelEvaluation: modelEvaluatorEnabled }, http, selectedSettingsTab, @@ -75,13 +73,14 @@ export const AssistantSettingsManagement: React.FC = React.memo( const { data: anonymizationFields } = useFetchAnonymizationFields(); - // Connector details const { data: connectors } = useLoadConnectors({ http, }); const defaultConnector = useMemo(() => getDefaultConnector(connectors), [connectors]); const [hasPendingChanges, setHasPendingChanges] = useState(false); + const { euiTheme } = useEuiTheme(); + const headerIconShadow = useEuiShadow('s'); const { conversationSettings, @@ -104,6 +103,7 @@ export const AssistantSettingsManagement: React.FC = React.memo( resetSettings, } = useSettingsUpdater( conversations, + conversationsLoaded, anonymizationFields ?? { page: 0, perPage: 0, total: 0, data: [] } ); @@ -121,10 +121,20 @@ export const AssistantSettingsManagement: React.FC = React.memo( useEffect(() => { if (selectedConversation != null) { - setSelectedConversation(conversationSettings[selectedConversation.title]); + setSelectedConversation( + // conversationSettings has title as key, sometime has id as key + conversationSettings[selectedConversation.id] || + conversationSettings[selectedConversation.title] + ); } }, [conversationSettings, selectedConversation]); + useEffect(() => { + if (selectedSettingsTab == null) { + setSelectedSettingsTab(CONNECTORS_TAB); + } + }, [selectedSettingsTab, setSelectedSettingsTab]); + // Quick Prompt Selection State const [selectedQuickPrompt, setSelectedQuickPrompt] = useState(); const onHandleSelectedQuickPromptChange = useCallback((quickPrompt?: QuickPrompt) => { @@ -149,61 +159,56 @@ export const AssistantSettingsManagement: React.FC = React.memo( } }, [selectedSystemPrompt, systemPromptSettings]); - const handleSave = useCallback(() => { - // If the selected conversation is deleted, we need to select a new conversation to prevent a crash creating a conversation that already exists - const isSelectedConversationDeleted = - conversationSettings[defaultSelectedConversation.title] == null; - const newSelectedConversationId: string | undefined = Object.keys(conversationSettings)[0]; - if (isSelectedConversationDeleted && newSelectedConversationId != null) { - setSelectedConversationId(conversationSettings[newSelectedConversationId].title); - } - saveSettings(); - toasts?.addSuccess({ - iconType: 'check', - title: i18n.SETTINGS_UPDATED_TOAST_TITLE, - }); - setHasPendingChanges(false); - }, [ - conversationSettings, - defaultSelectedConversation.title, - saveSettings, - setSelectedConversationId, - toasts, - ]); + const handleSave = useCallback( + async (shouldRefetchConversation?: boolean) => { + await saveSettings(); + toasts?.addSuccess({ + iconType: 'check', + title: i18n.SETTINGS_UPDATED_TOAST_TITLE, + }); + setHasPendingChanges(false); + if (shouldRefetchConversation) { + refetchConversations(); + } + }, + [refetchConversations, saveSettings, toasts] + ); + + const onSaveButtonClicked = useCallback(() => { + handleSave(true); + }, [handleSave]); const tabsConfig = useMemo( () => [ { - id: CONVERSATIONS_TAB, - label: i18n.CONVERSATIONS_MENU_ITEM, - prepend: , + id: CONNECTORS_TAB, + label: i18n.CONNECTORS_MENU_ITEM, }, { - id: QUICK_PROMPTS_TAB, - label: i18n.QUICK_PROMPTS_MENU_ITEM, - prepend: , + id: CONVERSATIONS_TAB, + label: i18n.CONVERSATIONS_MENU_ITEM, }, { id: SYSTEM_PROMPTS_TAB, label: i18n.SYSTEM_PROMPTS_MENU_ITEM, - prepend: , + }, + { + id: QUICK_PROMPTS_TAB, + label: i18n.QUICK_PROMPTS_MENU_ITEM, }, { id: ANONYMIZATION_TAB, label: i18n.ANONYMIZATION_MENU_ITEM, - prepend: , }, { id: KNOWLEDGE_BASE_TAB, label: i18n.KNOWLEDGE_BASE_MENU_ITEM, - prepend: , }, ...(modelEvaluatorEnabled ? [ { id: EVALUATION_TAB, label: i18n.EVALUATION_MENU_ITEM, - prepend: , }, ] : []), @@ -232,65 +237,91 @@ export const AssistantSettingsManagement: React.FC = React.memo( resetSettings(); setHasPendingChanges(false); }, [resetSettings]); - return ( <> - + + + +

{i18n.SECURITY_AI_SETTINGS}

+
+ + } + tabs={tabs} + paddingSize="none" + /> + {selectedSettingsTab === CONNECTORS_TAB && } {selectedSettingsTab === CONVERSATIONS_TAB && ( - - )} - {selectedSettingsTab === QUICK_PROMPTS_TAB && ( - )} {selectedSettingsTab === SYSTEM_PROMPTS_TAB && ( - + )} + {selectedSettingsTab === QUICK_PROMPTS_TAB && ( + )} {selectedSettingsTab === ANONYMIZATION_TAB && ( - @@ -304,7 +335,7 @@ export const AssistantSettingsManagement: React.FC = React.memo( {selectedSettingsTab === EVALUATION_TAB && } {hasPendingChanges && ( - + = React.memo( size="s" type="submit" data-test-subj="save-button" - onClick={handleSave} + onClick={onSaveButtonClicked} iconType="check" fill > @@ -337,4 +368,4 @@ export const AssistantSettingsManagement: React.FC = React.memo( } ); -AssistantSettingsManagement.displayName = 'AssistantSettingsNew'; +AssistantSettingsManagement.displayName = 'AssistantSettingsManagement'; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/const.ts b/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/const.ts new file mode 100644 index 0000000000000..c61a6dda8d235 --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/const.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. + */ +export const CONNECTORS_TAB = 'CONNECTORS_TAB' as const; +export const CONVERSATIONS_TAB = 'CONVERSATIONS_TAB' as const; +export const QUICK_PROMPTS_TAB = 'QUICK_PROMPTS_TAB' as const; +export const SYSTEM_PROMPTS_TAB = 'SYSTEM_PROMPTS_TAB' as const; +export const ANONYMIZATION_TAB = 'ANONYMIZATION_TAB' as const; +export const KNOWLEDGE_BASE_TAB = 'KNOWLEDGE_BASE_TAB' as const; +export const EVALUATION_TAB = 'EVALUATION_TAB' as const; + +export const DEFAULT_PAGE_SIZE = 25; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/evaluation_settings/translations.ts b/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/evaluation_settings/translations.ts index d7892b76dce98..517f4456b49e8 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/evaluation_settings/translations.ts +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/evaluation_settings/translations.ts @@ -24,7 +24,7 @@ export const SETTINGS_DESCRIPTION = i18n.translate( export const RUN_DETAILS_TITLE = i18n.translate( 'xpack.elasticAssistant.assistant.settings.evaluationSettings.runDetailsTitle', { - defaultMessage: '🏃 Run Details', + defaultMessage: 'Run Details', } ); @@ -38,7 +38,7 @@ export const RUN_DETAILS_DESCRIPTION = i18n.translate( export const PREDICTION_DETAILS_TITLE = i18n.translate( 'xpack.elasticAssistant.assistant.settings.evaluationSettings.predictionDetailsTitle', { - defaultMessage: '🔮 Predictions', + defaultMessage: 'Predictions', } ); @@ -53,7 +53,7 @@ export const PREDICTION_DETAILS_DESCRIPTION = i18n.translate( export const EVALUATION_DETAILS_TITLE = i18n.translate( 'xpack.elasticAssistant.assistant.settings.evaluationSettings.evaluationDetailsTitle', { - defaultMessage: '🧮 Evaluation (Optional)', + defaultMessage: 'Evaluation (Optional)', } ); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/translations.ts b/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/translations.ts index 78d6f462fd3fe..a8c2c85941176 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/translations.ts +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/translations.ts @@ -21,6 +21,13 @@ export const SETTINGS_TOOLTIP = i18n.translate( } ); +export const SECURITY_AI_SETTINGS = i18n.translate( + 'xpack.elasticAssistant.assistant.settings.securityAiSettingsTitle', + { + defaultMessage: 'Security AI settings', + } +); + export const SETTINGS_UPDATED_TOAST_TITLE = i18n.translate( 'xpack.elasticAssistant.assistant.settings.settingsUpdatedToastTitle', { @@ -28,6 +35,13 @@ export const SETTINGS_UPDATED_TOAST_TITLE = i18n.translate( } ); +export const CONNECTORS_MENU_ITEM = i18n.translate( + 'xpack.elasticAssistant.assistant.settings.settingsConnectorsMenuItemTitle', + { + defaultMessage: 'Connectors', + } +); + export const CONVERSATIONS_MENU_ITEM = i18n.translate( 'xpack.elasticAssistant.assistant.settings.settingsConversationsMenuItemTitle', { @@ -90,3 +104,10 @@ export const SAVE = i18n.translate( defaultMessage: 'Save', } ); + +export const DELETE = i18n.translate( + 'xpack.elasticAssistant.assistant.promptEditor.systemPrompt.slDeleteButtonTitle', + { + defaultMessage: 'Delete', + } +); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/types.ts b/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/types.ts new file mode 100644 index 0000000000000..ec4c8c90ad2bf --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/types.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 { + ANONYMIZATION_TAB, + CONNECTORS_TAB, + CONVERSATIONS_TAB, + EVALUATION_TAB, + KNOWLEDGE_BASE_TAB, + QUICK_PROMPTS_TAB, + SYSTEM_PROMPTS_TAB, +} from './const'; + +export type BaseSettingsTabs = + | typeof CONVERSATIONS_TAB + | typeof QUICK_PROMPTS_TAB + | typeof SYSTEM_PROMPTS_TAB + | typeof ANONYMIZATION_TAB + | typeof KNOWLEDGE_BASE_TAB + | typeof EVALUATION_TAB; + +export type AdditionalSettingsTabs = typeof CONNECTORS_TAB; + +export type SettingsTabs = BaseSettingsTabs | AdditionalSettingsTabs; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/use_handle_save.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/use_handle_save.tsx new file mode 100644 index 0000000000000..63f937f2fdf7a --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/use_handle_save.tsx @@ -0,0 +1,53 @@ +/* + * 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 { useCallback } from 'react'; +import { IToasts } from '@kbn/core/public'; +import { Conversation } from '../../..'; +import { SETTINGS_UPDATED_TOAST_TITLE } from './translations'; + +interface Props { + conversationSettings: Record; + defaultSelectedConversation: Conversation; + setSelectedConversationId: React.Dispatch>; + saveSettings: () => void; + setHasPendingChanges: React.Dispatch>; + toasts: IToasts | undefined; +} +export const useHandleSave = ({ + conversationSettings, + defaultSelectedConversation, + setSelectedConversationId, + saveSettings, + setHasPendingChanges, + toasts, +}: Props) => { + const handleSave = useCallback(() => { + // If the selected conversation is deleted, we need to select a new conversation to prevent a crash creating a conversation that already exists + const isSelectedConversationDeleted = + conversationSettings[defaultSelectedConversation.title] == null; + const newSelectedConversationId: string | undefined = Object.keys(conversationSettings)[0]; + if (isSelectedConversationDeleted && newSelectedConversationId != null) { + setSelectedConversationId(conversationSettings[newSelectedConversationId].title); + } + saveSettings(); + toasts?.addSuccess({ + iconType: 'check', + title: SETTINGS_UPDATED_TOAST_TITLE, + }); + setHasPendingChanges(false); + }, [ + conversationSettings, + defaultSelectedConversation.title, + saveSettings, + setHasPendingChanges, + setSelectedConversationId, + toasts, + ]); + + return handleSave; +}; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/use_settings_updater/use_settings_updater.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/use_settings_updater/use_settings_updater.test.tsx index 08e9fb434b051..20e5c86ddd251 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/use_settings_updater/use_settings_updater.test.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/use_settings_updater/use_settings_updater.test.tsx @@ -7,7 +7,7 @@ import { act, renderHook } from '@testing-library/react-hooks'; import { DEFAULT_LATEST_ALERTS } from '../../../assistant_context/constants'; -import { alertConvo, customConvo, welcomeConvo } from '../../../mock/conversation'; +import { alertConvo, welcomeConvo } from '../../../mock/conversation'; import { useSettingsUpdater } from './use_settings_updater'; import { Prompt } from '../../../..'; import { @@ -21,6 +21,7 @@ const mockConversations = { [alertConvo.title]: alertConvo, [welcomeConvo.title]: welcomeConvo, }; +const conversationsLoaded = true; const mockHttp = { fetch: jest.fn(), @@ -65,7 +66,7 @@ const mockValues = { }; const updatedValues = { - conversations: { [customConvo.title]: customConvo }, + conversations: { ...mockConversations }, allSystemPrompts: [mockSuperheroSystemPrompt], allQuickPrompts: [{ title: 'Prompt 2', prompt: 'Prompt 2', color: 'red' }], updatedAnonymizationData: { @@ -100,7 +101,7 @@ describe('useSettingsUpdater', () => { it('should set all state variables to their initial values when resetSettings is called', async () => { await act(async () => { const { result, waitForNextUpdate } = renderHook(() => - useSettingsUpdater(mockConversations, anonymizationFields) + useSettingsUpdater(mockConversations, conversationsLoaded, anonymizationFields) ); await waitForNextUpdate(); const { @@ -148,7 +149,7 @@ describe('useSettingsUpdater', () => { it('should update all state variables to their updated values when saveSettings is called', async () => { await act(async () => { const { result, waitForNextUpdate } = renderHook(() => - useSettingsUpdater(mockConversations, anonymizationFields) + useSettingsUpdater(mockConversations, conversationsLoaded, anonymizationFields) ); await waitForNextUpdate(); const { @@ -189,7 +190,7 @@ describe('useSettingsUpdater', () => { it('should track which toggles have been updated when saveSettings is called', async () => { await act(async () => { const { result, waitForNextUpdate } = renderHook(() => - useSettingsUpdater(mockConversations, anonymizationFields) + useSettingsUpdater(mockConversations, conversationsLoaded, anonymizationFields) ); await waitForNextUpdate(); const { setUpdatedKnowledgeBaseSettings } = result.current; @@ -206,7 +207,7 @@ describe('useSettingsUpdater', () => { it('should track only toggles that updated', async () => { await act(async () => { const { result, waitForNextUpdate } = renderHook(() => - useSettingsUpdater(mockConversations, anonymizationFields) + useSettingsUpdater(mockConversations, conversationsLoaded, anonymizationFields) ); await waitForNextUpdate(); const { setUpdatedKnowledgeBaseSettings } = result.current; @@ -224,7 +225,7 @@ describe('useSettingsUpdater', () => { it('if no toggles update, do not track anything', async () => { await act(async () => { const { result, waitForNextUpdate } = renderHook(() => - useSettingsUpdater(mockConversations, anonymizationFields) + useSettingsUpdater(mockConversations, conversationsLoaded, anonymizationFields) ); await waitForNextUpdate(); const { setUpdatedKnowledgeBaseSettings } = result.current; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/use_settings_updater/use_settings_updater.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/use_settings_updater/use_settings_updater.tsx index 1e1c3b0b026d6..c6cf81c4bf949 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/use_settings_updater/use_settings_updater.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/use_settings_updater/use_settings_updater.tsx @@ -46,6 +46,7 @@ interface UseSettingsUpdater { export const useSettingsUpdater = ( conversations: Record, + conversationsLoaded: boolean, anonymizationFields: FindAnonymizationFieldsResponse ): UseSettingsUpdater => { // Initial state from assistant context @@ -151,7 +152,6 @@ export const useSettingsUpdater = ( const bulkAnonymizationFieldsResult = hasBulkAnonymizationFields ? await bulkUpdateAnonymizationFields(http, anonymizationFieldsBulkActions, toasts) : undefined; - return (bulkResult?.success ?? true) && (bulkAnonymizationFieldsResult?.success ?? true); }, [ setAllQuickPrompts, @@ -163,9 +163,9 @@ export const useSettingsUpdater = ( toasts, knowledgeBase.isEnabledKnowledgeBase, knowledgeBase.isEnabledRAGAlerts, - updatedAssistantStreamingEnabled, updatedKnowledgeBaseSettings, assistantStreamingEnabled, + updatedAssistantStreamingEnabled, setAssistantStreamingEnabled, setKnowledgeBase, anonymizationFieldsBulkActions, @@ -188,6 +188,13 @@ export const useSettingsUpdater = ( anonymizationFieldsBulkActions.update?.length, ]); + useEffect(() => { + // Update conversation settings when conversations are loaded + if (conversationsLoaded) { + setConversationSettings(conversations); + } + }, [conversations, conversationsLoaded]); + return { conversationSettings, conversationsSettingsBulkActions, diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/types.ts b/x-pack/packages/kbn-elastic-assistant/impl/assistant/types.ts index 8b80b87584d35..91ee3468a12d9 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/types.ts +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/types.ts @@ -15,6 +15,7 @@ export interface Prompt { isDefault?: boolean; // TODO: Should be renamed to isImmutable as this flag is used to prevent users from deleting prompts isNewConversationDefault?: boolean; isFlyoutMode?: boolean; + label?: string; } export interface KnowledgeBaseConfig { diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/use_conversation/helpers.test.ts b/x-pack/packages/kbn-elastic-assistant/impl/assistant/use_conversation/helpers.test.ts index f348049eec8b6..c8c8ab5ff7727 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/use_conversation/helpers.test.ts +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/use_conversation/helpers.test.ts @@ -4,8 +4,15 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ +import { OpenAiProviderType } from '@kbn/stack-connectors-plugin/public/common'; -import { analyzeMarkdown, getDefaultSystemPrompt } from './helpers'; +import { + analyzeMarkdown, + getConversationApiConfig, + getDefaultNewSystemPrompt, + getDefaultSystemPrompt, +} from './helpers'; +import { AIConnector } from '../../connectorland/connector_selector'; import { Conversation, Prompt } from '../../..'; const tilde = '`'; @@ -54,6 +61,31 @@ ${codeDelimiter} This query will filter the events based on the condition that the ${tilde}user.name${tilde} field should exactly match the value \"9dcc9960-78cf-4ef6-9a2e-dbd5816daa60\".`; describe('useConversation helpers', () => { + const allSystemPrompts: Prompt[] = [ + { + id: '1', + content: 'Prompt 1', + name: 'Prompt 1', + promptType: 'user', + }, + { + id: '2', + content: 'Prompt 2', + name: 'Prompt 2', + promptType: 'user', + isNewConversationDefault: true, + }, + { + id: '3', + content: 'Prompt 3', + name: 'Prompt 3', + promptType: 'user', + }, + ]; + const allSystemPromptsNoDefault: Prompt[] = allSystemPrompts.filter( + ({ isNewConversationDefault }) => isNewConversationDefault !== true + ); + describe('analyzeMarkdown', () => { it('should identify dsl Query successfully.', () => { const result = analyzeMarkdown(markDownWithDSLQuery); @@ -65,31 +97,27 @@ describe('useConversation helpers', () => { }); }); + describe('getDefaultNewSystemPrompt', () => { + test('should return the default (starred) isNewConversationDefault system prompt', () => { + const result = getDefaultNewSystemPrompt(allSystemPrompts); + + expect(result).toEqual(allSystemPrompts[1]); + }); + + test('should return the first prompt if default new system prompt do not exist', () => { + const result = getDefaultNewSystemPrompt(allSystemPromptsNoDefault); + + expect(result).toEqual(allSystemPromptsNoDefault[0]); + }); + + test('should return undefined if default (starred) isNewConversationDefault system prompt does not exist and there are no system prompts', () => { + const result = getDefaultNewSystemPrompt([]); + + expect(result).toEqual(undefined); + }); + }); + describe('getDefaultSystemPrompt', () => { - const allSystemPrompts: Prompt[] = [ - { - id: '1', - content: 'Prompt 1', - name: 'Prompt 1', - promptType: 'user', - }, - { - id: '2', - content: 'Prompt 2', - name: 'Prompt 2', - promptType: 'user', - isNewConversationDefault: true, - }, - { - id: '3', - content: 'Prompt 3', - name: 'Prompt 3', - promptType: 'user', - }, - ]; - const allSystemPromptsNoDefault: Prompt[] = allSystemPrompts.filter( - ({ isNewConversationDefault }) => isNewConversationDefault !== true - ); const conversation: Conversation = { apiConfig: { connectorId: '123', @@ -102,7 +130,6 @@ describe('useConversation helpers', () => { replacements: {}, title: '1', }; - test('should return the conversation system prompt if it exists', () => { const result = getDefaultSystemPrompt({ allSystemPrompts, conversation }); @@ -208,3 +235,241 @@ describe('useConversation helpers', () => { }); }); }); + +describe('getConversationApiConfig', () => { + const allSystemPrompts: Prompt[] = [ + { + id: '1', + content: 'Prompt 1', + name: 'Prompt 1', + promptType: 'user', + }, + { + id: '2', + content: 'Prompt 2', + name: 'Prompt 2', + promptType: 'user', + isNewConversationDefault: true, + }, + { + id: '3', + content: 'Prompt 3', + name: 'Prompt 3', + promptType: 'user', + }, + ]; + + const conversation: Conversation = { + apiConfig: { + connectorId: '123', + actionTypeId: '.gen-ai', + defaultSystemPromptId: '2', + model: 'gpt-3', + }, + category: 'assistant', + id: '1', + messages: [], + replacements: {}, + title: 'Test Conversation', + }; + + const connectors: AIConnector[] = [ + { + id: '123', + actionTypeId: '.gen-ai', + apiProvider: OpenAiProviderType.OpenAi, + }, + { + id: '456', + actionTypeId: '.gen-ai', + apiProvider: OpenAiProviderType.AzureAi, + }, + ] as AIConnector[]; + + const defaultConnector: AIConnector = { + id: '456', + actionTypeId: '.gen-ai', + apiProvider: OpenAiProviderType.AzureAi, + } as AIConnector; + + test('should return the correct API config when connector and system prompt are found', () => { + const result = getConversationApiConfig({ + allSystemPrompts, + conversation, + connectors, + defaultConnector, + }); + + expect(result).toEqual({ + apiConfig: { + connectorId: '123', + actionTypeId: '.gen-ai', + provider: OpenAiProviderType.OpenAi, + defaultSystemPromptId: '2', + model: 'gpt-3', + }, + }); + }); + + test('should return the default connector when specific connector is not found', () => { + const conversationWithMissingConnector: Conversation = { + ...conversation, + apiConfig: { ...conversation.apiConfig, connectorId: '999' } as Conversation['apiConfig'], + }; + + const result = getConversationApiConfig({ + allSystemPrompts, + conversation: conversationWithMissingConnector, + connectors, + defaultConnector, + }); + + expect(result).toEqual({ + apiConfig: { + connectorId: '456', + actionTypeId: '.gen-ai', + provider: OpenAiProviderType.AzureAi, + defaultSystemPromptId: '2', + model: 'gpt-3', + }, + }); + }); + + test('should return an empty object when no connectors are provided and default connector is missing', () => { + const result = getConversationApiConfig({ + allSystemPrompts, + conversation, + }); + + expect(result).toEqual({}); + }); + + test('should return the default system prompt if conversation system prompt is not found', () => { + const conversationWithMissingSystemPrompt: Conversation = { + ...conversation, + apiConfig: { + ...conversation.apiConfig, + defaultSystemPromptId: '999', + } as Conversation['apiConfig'], + }; + + const result = getConversationApiConfig({ + allSystemPrompts, + conversation: conversationWithMissingSystemPrompt, + connectors, + defaultConnector, + }); + + expect(result).toEqual({ + apiConfig: { + connectorId: '123', + actionTypeId: '.gen-ai', + provider: OpenAiProviderType.OpenAi, + defaultSystemPromptId: '2', // Returns the default system prompt for new conversations + model: 'gpt-3', + }, + }); + }); + + test('should return the correct config when connectors are not provided', () => { + const result = getConversationApiConfig({ + allSystemPrompts, + conversation, + defaultConnector, + }); + + expect(result).toEqual({ + apiConfig: { + connectorId: '456', + actionTypeId: '.gen-ai', + provider: OpenAiProviderType.AzureAi, + defaultSystemPromptId: '2', + model: 'gpt-3', + }, + }); + }); + + test('should return the first system prompt if both conversation system prompt and default new system prompt do not exist', () => { + const allSystemPromptsNoDefault: Prompt[] = allSystemPrompts.filter( + ({ isNewConversationDefault }) => isNewConversationDefault !== true + ); + + const conversationWithoutSystemPrompt: Conversation = { + ...conversation, + apiConfig: { connectorId: '123', actionTypeId: '.gen-ai' }, + }; + + const result = getConversationApiConfig({ + allSystemPrompts: allSystemPromptsNoDefault, + conversation: conversationWithoutSystemPrompt, + connectors, + defaultConnector, + }); + + expect(result).toEqual({ + apiConfig: { + connectorId: '123', + actionTypeId: '.gen-ai', + provider: OpenAiProviderType.OpenAi, + defaultSystemPromptId: '1', // Uses the first prompt in the list + model: undefined, // default connector's model + }, + }); + }); + + test('should return the first system prompt if conversation system prompt does not exist within all system prompts', () => { + const allSystemPromptsNoDefault: Prompt[] = allSystemPrompts.filter( + ({ isNewConversationDefault }) => isNewConversationDefault !== true + ); + + const conversationWithoutSystemPrompt: Conversation = { + ...conversation, + apiConfig: { connectorId: '123', actionTypeId: '.gen-ai' }, + id: '4', // this id does not exist within allSystemPrompts + }; + + const result = getConversationApiConfig({ + allSystemPrompts: allSystemPromptsNoDefault, + conversation: conversationWithoutSystemPrompt, + connectors, + defaultConnector, + }); + + expect(result).toEqual({ + apiConfig: { + connectorId: '123', + actionTypeId: '.gen-ai', + provider: OpenAiProviderType.OpenAi, + defaultSystemPromptId: '1', // Uses the first prompt in the list + model: undefined, // default connector's model + }, + }); + }); + + test('should return the new default system prompt if defaultSystemPromptId is undefined', () => { + const conversationWithUndefinedPrompt: Conversation = { + ...conversation, + apiConfig: { + ...conversation.apiConfig, + defaultSystemPromptId: undefined, + } as Conversation['apiConfig'], + }; + + const result = getConversationApiConfig({ + allSystemPrompts, + conversation: conversationWithUndefinedPrompt, + connectors, + defaultConnector, + }); + + expect(result).toEqual({ + apiConfig: { + connectorId: '123', + actionTypeId: '.gen-ai', + provider: OpenAiProviderType.OpenAi, + defaultSystemPromptId: '1', + model: 'gpt-3', + }, + }); + }); +}); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/use_conversation/helpers.ts b/x-pack/packages/kbn-elastic-assistant/impl/assistant/use_conversation/helpers.ts index de766085e1aee..2d6c4075fba0e 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/use_conversation/helpers.ts +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/use_conversation/helpers.ts @@ -8,6 +8,8 @@ import React from 'react'; import { Prompt } from '../types'; import { Conversation } from '../../assistant_context/types'; +import { AIConnector } from '../../connectorland/connector_selector'; +import { getGenAiConfig } from '../../connectorland/helpers'; export interface CodeBlockDetails { type: QueryType; @@ -69,7 +71,15 @@ export const analyzeMarkdown = (markdown: string): CodeBlockDetails[] => { }; /** - * Returns the default system prompt for a given conversation + * Returns the default system prompt + * + * @param allSystemPrompts All available System Prompts + */ +export const getDefaultNewSystemPrompt = (allSystemPrompts: Prompt[]) => + allSystemPrompts.find((prompt) => prompt.isNewConversationDefault) ?? allSystemPrompts?.[0]; + +/** + * Returns the default system prompt for a given (New Custom) conversation * * @param allSystemPrompts All available System Prompts * @param conversation Conversation to get the default system prompt for @@ -84,7 +94,73 @@ export const getDefaultSystemPrompt = ({ const conversationSystemPrompt = allSystemPrompts.find( (prompt) => prompt.id === conversation?.apiConfig?.defaultSystemPromptId ); - const defaultNewSystemPrompt = allSystemPrompts.find((prompt) => prompt.isNewConversationDefault); + const defaultNewSystemPrompt = getDefaultNewSystemPrompt(allSystemPrompts); + + return conversationSystemPrompt ?? defaultNewSystemPrompt; +}; + +/** + * Returns the default system prompt for an existing conversation that has never been given a system prompt + * + * @param allSystemPrompts All available System Prompts + * @param conversation Conversation to get the default system prompt for + */ +export const getInitialDefaultSystemPrompt = ({ + allSystemPrompts, + conversation, +}: { + allSystemPrompts: Prompt[]; + conversation: Conversation | undefined; +}): Prompt | undefined => { + const conversationSystemPrompt = allSystemPrompts.find( + (prompt) => prompt.id === conversation?.apiConfig?.defaultSystemPromptId + ); - return conversationSystemPrompt ?? defaultNewSystemPrompt ?? allSystemPrompts?.[0]; + return conversationSystemPrompt ?? allSystemPrompts?.[0]; +}; + +/** + * Returns the API config for a conversation + * + * @param allSystemPrompts All available System Prompts + * @param conversation Conversation to get the API config for + * @param connectors All available connectors + * @param defaultConnector Default connector to use + */ +export const getConversationApiConfig = ({ + allSystemPrompts, + conversation, + connectors, + defaultConnector, +}: { + allSystemPrompts: Prompt[]; + conversation: Conversation; + connectors?: AIConnector[]; + defaultConnector?: AIConnector; +}) => { + const connector: AIConnector | undefined = + connectors?.find((c) => c.id === conversation.apiConfig?.connectorId) ?? defaultConnector; + const connectorModel = getGenAiConfig(connector)?.defaultModel; + const defaultSystemPrompt = + conversation.apiConfig?.defaultSystemPromptId == null + ? getInitialDefaultSystemPrompt({ + allSystemPrompts, + conversation, + }) + : getDefaultSystemPrompt({ + allSystemPrompts, + conversation, + }); + + return connector + ? { + apiConfig: { + connectorId: connector.id, + actionTypeId: connector.actionTypeId, + provider: connector.apiProvider, + defaultSystemPromptId: defaultSystemPrompt?.id, + model: conversation?.apiConfig?.model ?? connectorModel, + }, + } + : {}; }; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant_context/constants.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant_context/constants.tsx index d54f6f8b4d28d..0262dbe3ed778 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant_context/constants.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant_context/constants.tsx @@ -15,6 +15,10 @@ export const LAST_CONVERSATION_ID_LOCAL_STORAGE_KEY = 'lastConversationId'; export const KNOWLEDGE_BASE_LOCAL_STORAGE_KEY = 'knowledgeBase'; export const STREAMING_LOCAL_STORAGE_KEY = 'streaming'; export const TRACE_OPTIONS_SESSION_STORAGE_KEY = 'traceOptions'; +export const CONVERSATION_TABLE_SESSION_STORAGE_KEY = 'conversationTable'; +export const QUICK_PROMPT_TABLE_SESSION_STORAGE_KEY = 'quickPromptTable'; +export const SYSTEM_PROMPT_TABLE_SESSION_STORAGE_KEY = 'systemPromptTable'; +export const ANONYMIZATION_TABLE_SESSION_STORAGE_KEY = 'anonymizationTable'; /** The default `n` latest alerts, ordered by risk score, sent as context to the assistant */ export const DEFAULT_LATEST_ALERTS = 20; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant_context/index.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant_context/index.tsx index 6a74dab81ac47..ffafb4f704a17 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant_context/index.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant_context/index.tsx @@ -14,6 +14,7 @@ import { ActionTypeRegistryContract } from '@kbn/triggers-actions-ui-plugin/publ import { useLocalStorage, useSessionStorage } from 'react-use'; import type { DocLinksStart } from '@kbn/core-doc-links-browser'; import { AssistantFeatures, defaultAssistantFeatures } from '@kbn/elastic-assistant-common'; +import { NavigateToAppOptions } from '@kbn/core/public'; import { updatePromptContexts } from './helpers'; import type { PromptContext, @@ -37,10 +38,10 @@ import { SYSTEM_PROMPT_LOCAL_STORAGE_KEY, TRACE_OPTIONS_SESSION_STORAGE_KEY, } from './constants'; -import { CONVERSATIONS_TAB, SettingsTabs } from '../assistant/settings/assistant_settings'; import { AssistantAvailability, AssistantTelemetry } from './types'; import { useCapabilities } from '../assistant/api/capabilities/use_capabilities'; import { WELCOME_CONVERSATION_TITLE } from '../assistant/use_conversation/translations'; +import { SettingsTabs } from '../assistant/settings/types'; export interface ShowAssistantOverlayProps { showOverlay: boolean; @@ -83,6 +84,7 @@ export interface AssistantProviderProps { http: HttpSetup; baseConversations: Record; nameSpace?: string; + navigateToApp: (appId: string, options?: NavigateToAppOptions | undefined) => Promise; title?: string; toasts?: IToasts; } @@ -128,15 +130,16 @@ export interface UseAssistantContext { knowledgeBase: KnowledgeBaseConfig; getLastConversationId: (conversationTitle?: string) => string; promptContexts: Record; + navigateToApp: (appId: string, options?: NavigateToAppOptions | undefined) => Promise; nameSpace: string; registerPromptContext: RegisterPromptContext; - selectedSettingsTab: SettingsTabs; + selectedSettingsTab: SettingsTabs | null; setAllQuickPrompts: React.Dispatch>; setAllSystemPrompts: React.Dispatch>; setAssistantStreamingEnabled: React.Dispatch>; setKnowledgeBase: React.Dispatch>; setLastConversationId: React.Dispatch>; - setSelectedSettingsTab: React.Dispatch>; + setSelectedSettingsTab: React.Dispatch>; setShowAssistantOverlay: (showAssistantOverlay: ShowAssistantOverlay) => void; showAssistantOverlay: ShowAssistantOverlay; setTraceOptions: (traceOptions: { @@ -167,6 +170,7 @@ export const AssistantProvider: React.FC = ({ getComments, http, baseConversations, + navigateToApp, nameSpace = DEFAULT_ASSISTANT_NAMESPACE, title = DEFAULT_ASSISTANT_TITLE, toasts, @@ -264,7 +268,7 @@ export const AssistantProvider: React.FC = ({ /** * Settings State */ - const [selectedSettingsTab, setSelectedSettingsTab] = useState(CONVERSATIONS_TAB); + const [selectedSettingsTab, setSelectedSettingsTab] = useState(null); const getLastConversationId = useCallback( // if a conversationId has been provided, use that @@ -297,6 +301,7 @@ export const AssistantProvider: React.FC = ({ http, knowledgeBase: { ...DEFAULT_KNOWLEDGE_BASE_SETTINGS, ...localStorageKnowledgeBase }, promptContexts, + navigateToApp, nameSpace, registerPromptContext, selectedSettingsTab, @@ -336,6 +341,7 @@ export const AssistantProvider: React.FC = ({ http, localStorageKnowledgeBase, promptContexts, + navigateToApp, nameSpace, registerPromptContext, selectedSettingsTab, diff --git a/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_missing_callout/index.tsx b/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_missing_callout/index.tsx index 8cecb7d6332e3..8853ca0a67d33 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_missing_callout/index.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_missing_callout/index.tsx @@ -13,8 +13,8 @@ import { FormattedMessage } from '@kbn/i18n-react'; import { css } from '@emotion/react'; import * as i18n from '../translations'; import { useAssistantContext } from '../../assistant_context'; -import { CONVERSATIONS_TAB } from '../../assistant/settings/assistant_settings'; import { ConnectorButton } from '../connector_button'; +import { CONVERSATIONS_TAB } from '../../assistant/settings/const'; interface Props { isConnectorConfigured: boolean; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_selector/attack_discovery_status_indicator.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_selector/attack_discovery_status_indicator.test.tsx new file mode 100644 index 0000000000000..4846091e5ef37 --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_selector/attack_discovery_status_indicator.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 { AttackDiscoveryStatusIndicator } from './attack_discovery_status_indicator'; +import { render } from '@testing-library/react'; + +describe('AttackDiscoveryStatusIndicator', () => { + it('renders loading spinner when status is running and hasViewed is false', () => { + const { getByTestId } = render( + + ); + + expect(getByTestId('status-running')).toBeInTheDocument(); + }); + it('renders loading spinner when status is running and hasViewed is true', () => { + const { getByTestId } = render( + + ); + + expect(getByTestId('status-running')).toBeInTheDocument(); + }); + + it('renders null when status is not running hasViewed is true', () => { + const { queryByTestId } = render( + + ); + + expect(queryByTestId('status-succeeded')).not.toBeInTheDocument(); + }); + + it('renders succeeded count badge when status is succeeded and count is not null', () => { + const { getByTestId } = render( + + ); + + expect(getByTestId('status-succeeded')).toBeInTheDocument(); + }); + + it('renders failed badge when status is failed', () => { + const { getByTestId } = render( + + ); + + expect(getByTestId('status-failed')).toBeInTheDocument(); + }); + + it('renders null when status is canceled', () => { + const { queryByTestId } = render( + + ); + + expect(queryByTestId('status-running')).not.toBeInTheDocument(); + expect(queryByTestId('status-succeeded')).not.toBeInTheDocument(); + expect(queryByTestId('status-failed')).not.toBeInTheDocument(); + }); +}); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_selector/attack_discovery_status_indicator.tsx b/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_selector/attack_discovery_status_indicator.tsx new file mode 100644 index 0000000000000..7041028eb1b61 --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_selector/attack_discovery_status_indicator.tsx @@ -0,0 +1,71 @@ +/* + * 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, { FunctionComponent } from 'react'; +import { AttackDiscoveryStatus } from '@kbn/elastic-assistant-common'; +import { + EuiFlexItem, + EuiLoadingSpinner, + EuiIconTip, + EuiNotificationBadge, + EuiToolTip, +} from '@elastic/eui'; +import * as i18n from './translations'; + +interface Props { + hasViewed: boolean; + status: AttackDiscoveryStatus; + count: number; +} +export const AttackDiscoveryStatusIndicator: FunctionComponent = ({ + hasViewed, + status, + count, +}) => { + if (status === 'running') { + return ( + + + + + + ); + } + if (hasViewed) return null; + if (status === 'succeeded' && count != null) { + return ( + + + {count} + + + ); + } + if (status === 'failed') { + return ( + + + + ); + } + return null; +}; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_selector/index.tsx b/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_selector/index.tsx index a6070bc05a97a..410ee650c43ef 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_selector/index.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_selector/index.tsx @@ -12,6 +12,8 @@ import { ActionConnector, ActionType } from '@kbn/triggers-actions-ui-plugin/pub import { OpenAiProviderType } from '@kbn/stack-connectors-plugin/common/openai/constants'; import { some } from 'lodash'; +import type { AttackDiscoveryStats } from '@kbn/elastic-assistant-common'; +import { AttackDiscoveryStatusIndicator } from './attack_discovery_status_indicator'; import { useLoadConnectors } from '../use_load_connectors'; import * as i18n from '../translations'; import { useLoadActionTypes } from '../use_load_action_types'; @@ -29,6 +31,7 @@ interface Props { displayFancy?: (displayText: string) => React.ReactNode; setIsOpen?: (isOpen: boolean) => void; isFlyoutMode: boolean; + stats?: AttackDiscoveryStats | null; } export type AIConnector = ActionConnector & { @@ -45,6 +48,7 @@ export const ConnectorSelector: React.FC = React.memo( onConnectorSelectionChange, setIsOpen, isFlyoutMode, + stats = null, }) => { const { actionTypeRegistry, http, assistantAvailability } = useAssistantContext(); // Connector Modal State @@ -91,23 +95,35 @@ export const ConnectorSelector: React.FC = React.memo( const connectorDetails = connector.isPreconfigured ? i18n.PRECONFIGURED_CONNECTOR : connectorTypeTitle; + const attackDiscoveryStats = + stats !== null + ? stats.statsPerConnector.find((s) => s.connectorId === connector.id) ?? null + : null; + return { value: connector.id, 'data-test-subj': connector.id, inputDisplay: displayFancy?.(connector.name) ?? connector.name, dropdownDisplay: ( - {connector.name} - {connectorDetails && ( - -

{connectorDetails}

-
- )} + + + {connector.name} + {connectorDetails && ( + +

{connectorDetails}

+
+ )} +
+ {attackDiscoveryStats && ( + + )} +
), }; }), - [actionTypeRegistry, aiConnectors, displayFancy] + [actionTypeRegistry, aiConnectors, displayFancy, stats] ); const connectorExists = useMemo( diff --git a/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_selector/translations.ts b/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_selector/translations.ts new file mode 100644 index 0000000000000..2719db05b9d39 --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_selector/translations.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 { i18n } from '@kbn/i18n'; + +export const SUCCESS_MESSAGE = (totalAttacks: number) => + i18n.translate('xpack.elasticAssistant.attackDiscovery.statusSuccess', { + values: { totalAttacks }, + defaultMessage: + 'The connector has updated with {totalAttacks} potential {totalAttacks, plural, =1 {attack} other {attacks}}', + }); + +export const IN_PROGRESS_MESSAGE = i18n.translate( + 'xpack.elasticAssistant.attackDiscovery.statusInProgress', + { + defaultMessage: 'Attack discovery generation in progress.', + } +); + +export const FAILURE_MESSAGE = i18n.translate('xpack.elasticAssistant.attackDiscovery.statusFail', { + defaultMessage: 'The connector encountered an error while generating attack discoveries.', +}); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_selector_inline/connector_selector_inline.tsx b/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_selector_inline/connector_selector_inline.tsx index 65e388862bd53..ebf762530af11 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_selector_inline/connector_selector_inline.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_selector_inline/connector_selector_inline.tsx @@ -10,6 +10,7 @@ import React, { useCallback, useState } from 'react'; import { css } from '@emotion/css'; import { euiThemeVars } from '@kbn/ui-theme'; +import type { AttackDiscoveryStats } from '@kbn/elastic-assistant-common'; import { AIConnector, ConnectorSelector } from '../connector_selector'; import { Conversation } from '../../..'; import { useLoadConnectors } from '../use_load_connectors'; @@ -27,6 +28,7 @@ interface Props { isFlyoutMode: boolean; onConnectorIdSelected?: (connectorId: string) => void; onConnectorSelected?: (conversation: Conversation) => void; + stats?: AttackDiscoveryStats | null; } const inputContainerClassName = css` @@ -71,6 +73,7 @@ export const ConnectorSelectorInline: React.FC = React.memo( onConnectorIdSelected, onConnectorSelected, + stats = null, }) => { const [isOpen, setIsOpen] = useState(false); const { assistantAvailability, http } = useAssistantContext(); @@ -153,6 +156,7 @@ export const ConnectorSelectorInline: React.FC = React.memo( setIsOpen={setIsOpen} onConnectorSelectionChange={onChange} isFlyoutMode={isFlyoutMode} + stats={stats} />
@@ -182,6 +186,7 @@ export const ConnectorSelectorInline: React.FC = React.memo( setIsOpen={setIsOpen} onConnectorSelectionChange={onChange} isFlyoutMode={isFlyoutMode} + stats={stats} /> ) : ( diff --git a/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_settings_management/index.tsx b/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_settings_management/index.tsx new file mode 100644 index 0000000000000..f144253ea4cce --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_settings_management/index.tsx @@ -0,0 +1,53 @@ +/* + * 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, + EuiFlexGroup, + EuiFlexItem, + EuiPanel, + EuiSpacer, + EuiText, + EuiTitle, +} from '@elastic/eui'; +import React, { useCallback } from 'react'; +import { useAssistantContext } from '../../assistant_context'; + +import * as i18n from './translations'; + +const ConnectorsSettingsManagementComponent: React.FC = () => { + const { navigateToApp } = useAssistantContext(); + + const onClick = useCallback( + () => + navigateToApp('management', { + path: 'insightsAndAlerting/triggersActionsConnectors/connectors', + }), + [navigateToApp] + ); + + return ( + + +

{i18n.CONNECTOR_SETTINGS_MANAGEMENT_TITLE}

+
+ + + + {i18n.CONNECTOR_SETTINGS_MANAGEMENT_DESCRIPTION} + + + + {i18n.CONNECTOR_MANAGEMENT_BUTTON_TITLE} + + +
+ ); +}; + +export const ConnectorsSettingsManagement = React.memo(ConnectorsSettingsManagementComponent); +ConnectorsSettingsManagementComponent.displayName = 'ConnectorsSettingsManagementComponent'; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_settings_management/translations.ts b/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_settings_management/translations.ts new file mode 100644 index 0000000000000..941337761fadc --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_settings_management/translations.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 { i18n } from '@kbn/i18n'; + +export const CONNECTOR_SETTINGS_MANAGEMENT_TITLE = i18n.translate( + 'xpack.elasticAssistant.connectors.connectorSettingsManagement.title', + { + defaultMessage: 'Connector Settings', + } +); + +export const CONNECTOR_SETTINGS_MANAGEMENT_DESCRIPTION = i18n.translate( + 'xpack.elasticAssistant.connectors.connectorSettingsManagement.description', + { + defaultMessage: + 'Using the Elastic AI Assistant requires setting up a connector with API access to OpenAI or Bedrock large language models. ', + } +); + +export const CONNECTOR_MANAGEMENT_BUTTON_TITLE = i18n.translate( + 'xpack.elasticAssistant.connectors.connectorSettingsManagement.buttonTitle', + { + defaultMessage: 'Manage Connectors', + } +); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_setup/index.tsx b/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_setup/index.tsx index ab552656fc57f..81166bbf90fa1 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_setup/index.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_setup/index.tsx @@ -35,7 +35,7 @@ export interface ConnectorSetupProps { conversation?: Conversation; isFlyoutMode?: boolean; onSetupComplete?: () => void; - onConversationUpdate: ({ cId, cTitle }: { cId: string; cTitle: string }) => Promise; + onConversationUpdate?: ({ cId, cTitle }: { cId: string; cTitle: string }) => Promise; updateConversationsOnSaveConnector?: boolean; } @@ -198,7 +198,10 @@ export const useConnectorSetup = ({ }); if (updatedConversation) { - onConversationUpdate({ cId: updatedConversation.id, cTitle: updatedConversation.title }); + onConversationUpdate?.({ + cId: updatedConversation.id, + cTitle: updatedConversation.title, + }); refetchConnectors?.(); setIsConnectorModalVisible(false); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/connectorland/helpers.tsx b/x-pack/packages/kbn-elastic-assistant/impl/connectorland/helpers.tsx index c8b17de9906a3..2bbc74af5a45a 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/connectorland/helpers.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/connectorland/helpers.tsx @@ -5,9 +5,14 @@ * 2.0. */ -import type { ActionConnector } from '@kbn/triggers-actions-ui-plugin/public'; +import type { + ActionConnector, + ActionTypeModel, + ActionTypeRegistryContract, +} from '@kbn/triggers-actions-ui-plugin/public'; + import { ActionConnectorProps } from '@kbn/triggers-actions-ui-plugin/public/types'; -import { ActionTypeModel } from '@kbn/triggers-actions-ui-plugin/public'; +import { PRECONFIGURED_CONNECTOR } from './translations'; // aligns with OpenAiProviderType from '@kbn/stack-connectors-plugin/common/openai/types' enum OpenAiProviderType { @@ -54,3 +59,18 @@ const getAzureApiVersionParameter = (url: string): string | undefined => { const urlSearchParams = new URLSearchParams(new URL(url).search); return urlSearchParams.get('api-version') ?? undefined; }; + +export const getConnectorTypeTitle = ( + connector: ActionConnector | undefined, + actionTypeRegistry: ActionTypeRegistryContract +) => { + if (!connector) { + return null; + } + const connectorTypeTitle = + getGenAiConfig(connector)?.apiProvider ?? + getActionTypeTitle(actionTypeRegistry.get(connector.actionTypeId)); + const actionType = connector.isPreconfigured ? PRECONFIGURED_CONNECTOR : connectorTypeTitle; + + return actionType; +}; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/connectorland/translations.ts b/x-pack/packages/kbn-elastic-assistant/impl/connectorland/translations.ts index 4381da8486497..11d214afc4faf 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/connectorland/translations.ts +++ b/x-pack/packages/kbn-elastic-assistant/impl/connectorland/translations.ts @@ -10,24 +10,14 @@ import { i18n } from '@kbn/i18n'; export const LOAD_ACTIONS_ERROR_MESSAGE = i18n.translate( 'xpack.elasticAssistant.connectors.useLoadActionTypes.errorMessage', { - defaultMessage: - 'Welcome to your Elastic AI Assistant! I am your 100% open-source portal into your Elastic Life. ', + defaultMessage: 'An error occurred loading the Kibana Actions. ', } ); export const LOAD_CONNECTORS_ERROR_MESSAGE = i18n.translate( 'xpack.elasticAssistant.connectors.useLoadConnectors.errorMessage', { - defaultMessage: - 'Welcome to your Elastic AI Assistant! I am your 100% open-source portal into your Elastic Life. ', - } -); - -export const WELCOME_SECURITY = i18n.translate( - 'xpack.elasticAssistant.content.prompts.welcome.welcomeSecurityPrompt', - { - defaultMessage: - 'Welcome to your Elastic AI Assistant! I am your 100% open-source portal into Elastic Security. ', + defaultMessage: 'An error occurred loading the Kibana Connectors. ', } ); @@ -59,13 +49,6 @@ export const ADD_CONNECTOR = i18n.translate( } ); -export const INLINE_CONNECTOR_LABEL = i18n.translate( - 'xpack.elasticAssistant.assistant.connectors.connectorSelectorInline.connectorLabel', - { - defaultMessage: 'Connector:', - } -); - export const INLINE_CONNECTOR_PLACEHOLDER = i18n.translate( 'xpack.elasticAssistant.assistant.connectors.connectorSelectorInline.connectorPlaceholder', { @@ -129,13 +112,6 @@ export const CONNECTOR_SETUP_SKIP = i18n.translate( } ); -export const CONNECTOR_SETUP_COMPLETE = i18n.translate( - 'xpack.elasticAssistant.assistant.connectors.setup.complete', - { - defaultMessage: 'Connector setup complete!', - } -); - export const MISSING_CONNECTOR_CALLOUT_TITLE = i18n.translate( 'xpack.elasticAssistant.assistant.connectors.connectorMissingCallout.calloutTitle', { @@ -149,3 +125,17 @@ export const MISSING_CONNECTOR_CONVERSATION_SETTINGS_LINK = i18n.translate( defaultMessage: 'Conversation Settings', } ); + +export const CREATE_CONNECTOR_BUTTON = i18n.translate( + 'xpack.elasticAssistant.assistant.connectors.createConnectorButton', + { + defaultMessage: 'Connector', + } +); + +export const REFRESH_CONNECTORS_BUTTON = i18n.translate( + 'xpack.elasticAssistant.assistant.connectors.refreshConnectorsButton', + { + defaultMessage: 'Refresh', + } +); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/content/prompts/system/index.tsx b/x-pack/packages/kbn-elastic-assistant/impl/content/prompts/system/index.tsx index e2034cc62c33a..a73fbf4854ef1 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/content/prompts/system/index.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/content/prompts/system/index.tsx @@ -7,8 +7,10 @@ import { Prompt } from '../../../..'; import { + DEFAULT_SYSTEM_PROMPT_LABEL, DEFAULT_SYSTEM_PROMPT_NAME, DEFAULT_SYSTEM_PROMPT_NON_I18N, + SUPERHERO_SYSTEM_PROMPT_LABEL, SUPERHERO_SYSTEM_PROMPT_NAME, SUPERHERO_SYSTEM_PROMPT_NON_I18N, } from './translations'; @@ -22,11 +24,13 @@ export const BASE_SYSTEM_PROMPTS: Prompt[] = [ content: DEFAULT_SYSTEM_PROMPT_NON_I18N, name: DEFAULT_SYSTEM_PROMPT_NAME, promptType: 'system', + label: DEFAULT_SYSTEM_PROMPT_LABEL, }, { id: 'CB9FA555-B59F-4F71-AFF9-8A891AC5BC28', content: SUPERHERO_SYSTEM_PROMPT_NON_I18N, name: SUPERHERO_SYSTEM_PROMPT_NAME, promptType: 'system', + label: SUPERHERO_SYSTEM_PROMPT_LABEL, }, ]; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/content/prompts/system/translations.ts b/x-pack/packages/kbn-elastic-assistant/impl/content/prompts/system/translations.ts index eecc3b6dea246..8ce92919de1cb 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/content/prompts/system/translations.ts +++ b/x-pack/packages/kbn-elastic-assistant/impl/content/prompts/system/translations.ts @@ -39,6 +39,13 @@ export const DEFAULT_SYSTEM_PROMPT_NAME = i18n.translate( } ); +export const DEFAULT_SYSTEM_PROMPT_LABEL = i18n.translate( + 'xpack.elasticAssistant.assistant.content.prompts.system.defaultSystemPromptLabel', + { + defaultMessage: 'Default', + } +); + export const SUPERHERO_SYSTEM_PROMPT_NON_I18N = `${YOU_ARE_A_HELPFUL_EXPERT_ASSISTANT} ${IF_YOU_DONT_KNOW_THE_ANSWER} ${SUPERHERO_PERSONALITY}`; @@ -49,6 +56,13 @@ export const SUPERHERO_SYSTEM_PROMPT_NAME = i18n.translate( } ); +export const SUPERHERO_SYSTEM_PROMPT_LABEL = i18n.translate( + 'xpack.elasticAssistant.assistant.content.prompts.system.superheroSystemPromptLabel', + { + defaultMessage: 'Enhanced', + } +); + export const SYSTEM_PROMPT_CONTEXT_NON_I18N = (context: string) => { return `CONTEXT:\n"""\n${context}\n"""`; }; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/data_anonymization/settings/anonymization_settings/index.tsx b/x-pack/packages/kbn-elastic-assistant/impl/data_anonymization/settings/anonymization_settings/index.tsx index e03a965f6c98c..c371c9498dc2f 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/data_anonymization/settings/anonymization_settings/index.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/data_anonymization/settings/anonymization_settings/index.tsx @@ -6,14 +6,14 @@ */ import { EuiFlexGroup, EuiHorizontalRule, EuiSpacer, EuiText, EuiTitle } from '@elastic/eui'; -import React, { useCallback } from 'react'; +import React from 'react'; import { FindAnonymizationFieldsResponse } from '@kbn/elastic-assistant-common/impl/schemas/anonymization_fields/find_anonymization_fields_route.gen'; import { PerformBulkActionRequestBody } from '@kbn/elastic-assistant-common/impl/schemas/anonymization_fields/bulk_crud_anonymization_fields_route.gen'; import { Stats } from '../../../data_anonymization_editor/stats'; import { ContextEditor } from '../../../data_anonymization_editor/context_editor'; -import type { BatchUpdateListItem } from '../../../data_anonymization_editor/context_editor/types'; import * as i18n from './translations'; +import { useAnonymizationListUpdate } from './use_anonymization_list_update'; export interface Props { defaultPageSize?: number; @@ -34,39 +34,12 @@ const AnonymizationSettingsComponent: React.FC = ({ setAnonymizationFieldsBulkActions, setUpdatedAnonymizationData, }) => { - const onListUpdated = useCallback( - async (updates: BatchUpdateListItem[]) => { - const updatedFieldsKeys = updates.map((u) => u.field); - - const updatedFields = updates.map((u) => ({ - ...(anonymizationFields.data.find((f) => f.field === u.field) ?? { id: '', field: '' }), - ...(u.update === 'allow' || u.update === 'defaultAllow' - ? { allowed: u.operation === 'add' } - : {}), - ...(u.update === 'allowReplacement' || u.update === 'defaultAllowReplacement' - ? { anonymized: u.operation === 'add' } - : {}), - })); - setAnonymizationFieldsBulkActions({ - ...anonymizationFieldsBulkActions, - // Only update makes sense now, as long as we don't have an add new field design/UX - update: [...(anonymizationFieldsBulkActions?.update ?? []), ...updatedFields], - }); - setUpdatedAnonymizationData({ - ...anonymizationFields, - data: [ - ...anonymizationFields.data.filter((f) => !updatedFieldsKeys.includes(f.field)), - ...updatedFields, - ], - }); - }, - [ - anonymizationFields, - anonymizationFieldsBulkActions, - setAnonymizationFieldsBulkActions, - setUpdatedAnonymizationData, - ] - ); + const onListUpdated = useAnonymizationListUpdate({ + anonymizationFields, + anonymizationFieldsBulkActions, + setAnonymizationFieldsBulkActions, + setUpdatedAnonymizationData, + }); return ( <> @@ -88,6 +61,7 @@ const AnonymizationSettingsComponent: React.FC = ({ onListUpdated={onListUpdated} rawData={null} pageSize={defaultPageSize} + compressed={true} /> ); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/data_anonymization/settings/anonymization_settings/use_anonymization_list_update.tsx b/x-pack/packages/kbn-elastic-assistant/impl/data_anonymization/settings/anonymization_settings/use_anonymization_list_update.tsx new file mode 100644 index 0000000000000..f9ee4875fad23 --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant/impl/data_anonymization/settings/anonymization_settings/use_anonymization_list_update.tsx @@ -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 { useCallback } from 'react'; +import { FindAnonymizationFieldsResponse } from '@kbn/elastic-assistant-common/impl/schemas/anonymization_fields/find_anonymization_fields_route.gen'; +import { PerformBulkActionRequestBody } from '@kbn/elastic-assistant-common/impl/schemas/anonymization_fields/bulk_crud_anonymization_fields_route.gen'; + +import { BatchUpdateListItem } from '../../../data_anonymization_editor/context_editor/types'; + +interface Props { + anonymizationFields: FindAnonymizationFieldsResponse; + anonymizationFieldsBulkActions: PerformBulkActionRequestBody; + setAnonymizationFieldsBulkActions: React.Dispatch< + React.SetStateAction + >; + setUpdatedAnonymizationData: React.Dispatch< + React.SetStateAction + >; +} + +export const useAnonymizationListUpdate = ({ + anonymizationFields, + anonymizationFieldsBulkActions, + setAnonymizationFieldsBulkActions, + setUpdatedAnonymizationData, +}: Props) => { + const onListUpdated = useCallback( + async (updates: BatchUpdateListItem[]) => { + const updatedFieldsKeys = updates.map((u) => u.field); + + const updatedFields = updates.map((u) => ({ + ...(anonymizationFields.data.find((f) => f.field === u.field) ?? { id: '', field: '' }), + ...(u.update === 'allow' || u.update === 'defaultAllow' + ? { allowed: u.operation === 'add' } + : {}), + ...(u.update === 'allowReplacement' || u.update === 'defaultAllowReplacement' + ? { anonymized: u.operation === 'add' } + : {}), + })); + setAnonymizationFieldsBulkActions({ + ...anonymizationFieldsBulkActions, + // Only update makes sense now, as long as we don't have an add new field design/UX + update: [...(anonymizationFieldsBulkActions?.update ?? []), ...updatedFields], + }); + setUpdatedAnonymizationData({ + ...anonymizationFields, + data: [ + ...anonymizationFields.data.filter((f) => !updatedFieldsKeys.includes(f.field)), + ...updatedFields, + ], + }); + }, + [ + anonymizationFields, + anonymizationFieldsBulkActions, + setAnonymizationFieldsBulkActions, + setUpdatedAnonymizationData, + ] + ); + + return onListUpdated; +}; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/data_anonymization/settings/anonymization_settings_management/index.tsx b/x-pack/packages/kbn-elastic-assistant/impl/data_anonymization/settings/anonymization_settings_management/index.tsx new file mode 100644 index 0000000000000..3e3812510f076 --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant/impl/data_anonymization/settings/anonymization_settings_management/index.tsx @@ -0,0 +1,78 @@ +/* + * 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, EuiPanel, EuiSpacer, EuiText, EuiTitle } from '@elastic/eui'; +import React from 'react'; + +import { FindAnonymizationFieldsResponse } from '@kbn/elastic-assistant-common/impl/schemas/anonymization_fields/find_anonymization_fields_route.gen'; +import { PerformBulkActionRequestBody } from '@kbn/elastic-assistant-common/impl/schemas/anonymization_fields/bulk_crud_anonymization_fields_route.gen'; +import { euiThemeVars } from '@kbn/ui-theme'; +import { Stats } from '../../../data_anonymization_editor/stats'; +import { ContextEditor } from '../../../data_anonymization_editor/context_editor'; +import * as i18n from '../anonymization_settings/translations'; +import { useAnonymizationListUpdate } from '../anonymization_settings/use_anonymization_list_update'; + +export interface Props { + defaultPageSize?: number; + anonymizationFields: FindAnonymizationFieldsResponse; + anonymizationFieldsBulkActions: PerformBulkActionRequestBody; + setAnonymizationFieldsBulkActions: React.Dispatch< + React.SetStateAction + >; + setUpdatedAnonymizationData: React.Dispatch< + React.SetStateAction + >; +} + +const AnonymizationSettingsManagementComponent: React.FC = ({ + defaultPageSize, + anonymizationFields, + anonymizationFieldsBulkActions, + setAnonymizationFieldsBulkActions, + setUpdatedAnonymizationData, +}) => { + const onListUpdated = useAnonymizationListUpdate({ + anonymizationFields, + anonymizationFieldsBulkActions, + setAnonymizationFieldsBulkActions, + setUpdatedAnonymizationData, + }); + return ( + + +

{i18n.SETTINGS_TITLE}

+
+ + {i18n.SETTINGS_DESCRIPTION} + + + + + + + + + + +
+ ); +}; + +AnonymizationSettingsManagementComponent.displayName = 'AnonymizationSettingsManagementComponent'; + +export const AnonymizationSettingsManagement = React.memo(AnonymizationSettingsManagementComponent); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/data_anonymization_editor/context_editor/index.tsx b/x-pack/packages/kbn-elastic-assistant/impl/data_anonymization_editor/context_editor/index.tsx index 6eeb80f2bb911..13ed9bd866513 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/data_anonymization_editor/context_editor/index.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/data_anonymization_editor/context_editor/index.tsx @@ -17,8 +17,10 @@ import { Toolbar } from './toolbar'; import * as i18n from './translations'; import { BatchUpdateListItem, ContextEditorRow, FIELDS, SortConfig } from './types'; import { useAssistantContext } from '../../assistant_context'; +import { useSessionPagination } from '../../assistant/common/components/assistant_settings_management/pagination/use_session_pagination'; +import { ANONYMIZATION_TABLE_SESSION_STORAGE_KEY } from '../../assistant_context/constants'; -export const DEFAULT_PAGE_SIZE = 10; +const DEFAULT_PAGE_SIZE = 10; const Wrapper = styled.div` > div > .euiSpacer { @@ -33,8 +35,14 @@ const defaultSort: SortConfig = { }, }; +export const DEFAULT_TABLE_OPTIONS = { + page: { size: DEFAULT_PAGE_SIZE, index: 0 }, + ...defaultSort, +}; + export interface Props { anonymizationFields: FindAnonymizationFieldsResponse; + compressed?: boolean; onListUpdated: (updates: BatchUpdateListItem[]) => void; rawData: Record | null; pageSize?: number; @@ -60,6 +68,7 @@ const search: EuiSearchBarProps = { const ContextEditorComponent: React.FC = ({ anonymizationFields, + compressed = true, onListUpdated, rawData, pageSize = DEFAULT_PAGE_SIZE, @@ -67,6 +76,7 @@ const ContextEditorComponent: React.FC = ({ const isAllSelected = useRef(false); // Must be a ref and not state in order not to re-render `selectionValue`, which fires `onSelectionChange` twice const { assistantAvailability: { hasUpdateAIAssistantAnonymization }, + nameSpace, } = useAssistantContext(); const [selected, setSelection] = useState([]); const selectionValue: EuiTableSelectionType = useMemo( @@ -106,12 +116,11 @@ const ContextEditorComponent: React.FC = ({ setSelection(rows); }, [rows]); - const pagination = useMemo(() => { - return { - initialPageSize: pageSize, - pageSizeOptions: [5, DEFAULT_PAGE_SIZE, 25, 50], - }; - }, [pageSize]); + const { onTableChange, pagination, sorting } = useSessionPagination({ + defaultTableOptions: DEFAULT_TABLE_OPTIONS, + nameSpace, + storageKey: ANONYMIZATION_TABLE_SESSION_STORAGE_KEY, + }); const toolbar = useMemo( () => ( @@ -131,14 +140,15 @@ const ContextEditorComponent: React.FC = ({ allowNeutralSort={false} childrenBetween={hasUpdateAIAssistantAnonymization ? toolbar : undefined} columns={columns} - compressed={true} + compressed={compressed} data-test-subj="contextEditor" itemId={FIELDS.FIELD} items={rows} pagination={pagination} search={search} selection={selectionValue} - sorting={defaultSort} + sorting={sorting} + onTableChange={onTableChange} /> ); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/data_anonymization_editor/stats/allowed_stat/index.tsx b/x-pack/packages/kbn-elastic-assistant/impl/data_anonymization_editor/stats/allowed_stat/index.tsx index 2febee604e4b5..9d893cdaa65a2 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/data_anonymization_editor/stats/allowed_stat/index.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/data_anonymization_editor/stats/allowed_stat/index.tsx @@ -15,11 +15,19 @@ import * as i18n from './translations'; interface Props { allowed: number; + titleSize?: 'xs' | 's' | 'xxxs' | 'xxs' | 'm' | 'l' | undefined; + gap?: string; total: number; inline?: boolean; } -const AllowedStatComponent: React.FC = ({ allowed, total, inline }) => { +const AllowedStatComponent: React.FC = ({ + allowed, + total, + inline, + titleSize = TITLE_SIZE, + gap = euiThemeVars.euiSizeXS, +}) => { const tooltipContent = useMemo(() => i18n.ALLOWED_TOOLTIP({ allowed, total }), [allowed, total]); return ( @@ -30,7 +38,7 @@ const AllowedStatComponent: React.FC = ({ allowed, total, inline }) => { ? css` display: flex; align-items: center; - gap: ${euiThemeVars.euiSizeXS}; + gap: ${gap}; ` : null } @@ -38,7 +46,7 @@ const AllowedStatComponent: React.FC = ({ allowed, total, inline }) => { description={i18n.ALLOWED} reverse title={allowed} - titleSize={TITLE_SIZE} + titleSize={titleSize} /> ); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/data_anonymization_editor/stats/anonymized_stat/index.tsx b/x-pack/packages/kbn-elastic-assistant/impl/data_anonymization_editor/stats/anonymized_stat/index.tsx index 210b65c6d6a70..74b3e631b7117 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/data_anonymization_editor/stats/anonymized_stat/index.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/data_anonymization_editor/stats/anonymized_stat/index.tsx @@ -16,11 +16,19 @@ import * as i18n from './translations'; interface Props { anonymized: number; + titleSize?: 'xs' | 's' | 'xxxs' | 'xxs' | 'm' | 'l' | undefined; + gap?: string; isDataAnonymizable: boolean; inline?: boolean; } -const AnonymizedStatComponent: React.FC = ({ anonymized, isDataAnonymizable, inline }) => { +const AnonymizedStatComponent: React.FC = ({ + anonymized, + isDataAnonymizable, + inline, + titleSize = TITLE_SIZE, + gap = euiThemeVars.euiSizeXS, +}) => { const color = useMemo(() => getColor(isDataAnonymizable), [isDataAnonymizable]); const tooltipContent = useMemo( @@ -45,7 +53,7 @@ const AnonymizedStatComponent: React.FC = ({ anonymized, isDataAnonymizab ? css` display: flex; align-items: center; - gap: ${euiThemeVars.euiSizeXS}; + gap: ${gap}; ` : null } @@ -54,7 +62,7 @@ const AnonymizedStatComponent: React.FC = ({ anonymized, isDataAnonymizab reverse titleColor={color} title={anonymized} - titleSize={TITLE_SIZE} + titleSize={titleSize} /> ); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/data_anonymization_editor/stats/available_stat/index.tsx b/x-pack/packages/kbn-elastic-assistant/impl/data_anonymization_editor/stats/available_stat/index.tsx index 6e5853c871a6f..d29bfab02b897 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/data_anonymization_editor/stats/available_stat/index.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/data_anonymization_editor/stats/available_stat/index.tsx @@ -15,10 +15,17 @@ import * as i18n from './translations'; interface Props { total: number; + titleSize?: 'xs' | 's' | 'xxxs' | 'xxs' | 'm' | 'l' | undefined; + gap?: string; inline?: boolean; } -const AvailableStatComponent: React.FC = ({ total, inline }) => { +const AvailableStatComponent: React.FC = ({ + total, + inline, + titleSize = TITLE_SIZE, + gap = euiThemeVars.euiSizeXS, +}) => { const tooltipContent = useMemo(() => i18n.AVAILABLE_TOOLTIP(total), [total]); return ( @@ -29,7 +36,7 @@ const AvailableStatComponent: React.FC = ({ total, inline }) => { ? css` display: flex; align-items: center; - gap: ${euiThemeVars.euiSizeXS}; + gap: ${gap}; ` : null } @@ -37,7 +44,7 @@ const AvailableStatComponent: React.FC = ({ total, inline }) => { description={i18n.AVAILABLE} reverse title={total} - titleSize={TITLE_SIZE} + titleSize={titleSize} /> ); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/data_anonymization_editor/stats/constants.ts b/x-pack/packages/kbn-elastic-assistant/impl/data_anonymization_editor/stats/constants.ts index ba1e02e569bc2..ed5c08a0c64f9 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/data_anonymization_editor/stats/constants.ts +++ b/x-pack/packages/kbn-elastic-assistant/impl/data_anonymization_editor/stats/constants.ts @@ -6,3 +6,4 @@ */ export const TITLE_SIZE = 'xs'; +export const STAT_TITLE_SIZE = 'm'; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/data_anonymization_editor/stats/index.tsx b/x-pack/packages/kbn-elastic-assistant/impl/data_anonymization_editor/stats/index.tsx index 2068bc517025d..b628119032d1a 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/data_anonymization_editor/stats/index.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/data_anonymization_editor/stats/index.tsx @@ -27,6 +27,8 @@ interface Props { rawData?: string | Record; inline?: boolean; replacements?: Replacements; + titleSize?: 's' | 'l' | 'xs' | 'm' | 'xxxs' | 'xxs' | undefined; + gap?: string; } const StatsComponent: React.FC = ({ @@ -35,6 +37,8 @@ const StatsComponent: React.FC = ({ rawData, inline, replacements, + titleSize, + gap, }) => { const { allowed, anonymized, total } = useMemo( () => @@ -50,7 +54,13 @@ const StatsComponent: React.FC = ({ {isDataAnonymizable && ( - + )} @@ -59,12 +69,14 @@ const StatsComponent: React.FC = ({ anonymized={anonymized} isDataAnonymizable={isDataAnonymizable || anonymized > 0} inline={inline} + titleSize={titleSize} + gap={gap} /> {isDataAnonymizable && ( - + )} diff --git a/x-pack/packages/kbn-elastic-assistant/impl/mock/test_providers/test_providers.tsx b/x-pack/packages/kbn-elastic-assistant/impl/mock/test_providers/test_providers.tsx index 1b3a5183bd208..17e977fdbf80f 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/mock/test_providers/test_providers.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/mock/test_providers/test_providers.tsx @@ -49,6 +49,7 @@ export const TestProvidersComponent: React.FC = ({ }); const mockGetComments = jest.fn(() => []); const mockHttp = httpServiceMock.createStartContract({ basePath: '/test' }); + const mockNavigateToApp = jest.fn(); const queryClient = new QueryClient({ defaultOptions: { queries: { @@ -78,6 +79,7 @@ export const TestProvidersComponent: React.FC = ({ getComments={mockGetComments} http={mockHttp} baseConversations={{}} + navigateToApp={mockNavigateToApp} {...providerContext} > {children} diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/mock/test_providers/test_providers.tsx b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/mock/test_providers/test_providers.tsx index ac3cfea820df7..a4e6d39e720ec 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/mock/test_providers/test_providers.tsx +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/mock/test_providers/test_providers.tsx @@ -31,6 +31,7 @@ export const TestProvidersComponent: React.FC = ({ children, isILMAvailab const actionTypeRegistry = actionTypeRegistryMock.create(); const mockGetComments = jest.fn(() => []); const mockHttp = httpServiceMock.createStartContract({ basePath: '/test' }); + const mockNavigateToApp = jest.fn(); const mockTelemetryEvents = { reportDataQualityIndexChecked: jest.fn(), reportDataQualityCheckAllCompleted: jest.fn(), @@ -71,6 +72,7 @@ export const TestProvidersComponent: React.FC = ({ children, isILMAvailab getComments={mockGetComments} http={mockHttp} baseConversations={{}} + navigateToApp={mockNavigateToApp} > services, getUnsecuredServices: () => unsecuredServices, actionTypeRegistry: connectorTypeRegistry, + analyticsService: analyticsServiceMock.createAnalyticsServiceStart(), encryptedSavedObjectsClient, eventLogger, getActionsAuthorizationWithRequest, @@ -1355,163 +1356,160 @@ describe('System actions', () => { }); }); }); - -test('writes to event log for execute timeout', async () => { - setupActionExecutorMock(); - - await actionExecutor.logCancellation({ - actionId: 'action1', - executionId: '123abc', - consumer: 'test-consumer', - relatedSavedObjects: [], - request: {} as KibanaRequest, - actionExecutionId: '2', - }); - expect(eventLogger.logEvent).toHaveBeenCalledTimes(1); - expect(eventLogger.logEvent).toHaveBeenNthCalledWith(1, { - event: { - action: 'execute-timeout', - kind: 'action', - }, - kibana: { - action: { - execution: { - uuid: '2', - }, - name: undefined, - id: 'action1', +describe('Event log', () => { + test('writes to event log for execute timeout', async () => { + setupActionExecutorMock(); + + await actionExecutor.logCancellation({ + actionId: 'action1', + executionId: '123abc', + consumer: 'test-consumer', + relatedSavedObjects: [], + request: {} as KibanaRequest, + actionExecutionId: '2', + }); + expect(eventLogger.logEvent).toHaveBeenCalledTimes(1); + expect(eventLogger.logEvent).toHaveBeenNthCalledWith(1, { + event: { + action: 'execute-timeout', + kind: 'action', }, - alert: { - rule: { - consumer: 'test-consumer', + kibana: { + action: { execution: { - uuid: '123abc', + uuid: '2', }, - }, - }, - saved_objects: [ - { + name: undefined, id: 'action1', - namespace: 'some-namespace', - rel: 'primary', - type: 'action', - type_id: 'test', }, - ], - space_ids: ['some-namespace'], - }, - message: - 'action: test:action1: \'action-1\' execution cancelled due to timeout - exceeded default timeout of "5m"', + alert: { + rule: { + consumer: 'test-consumer', + execution: { + uuid: '123abc', + }, + }, + }, + saved_objects: [ + { + id: 'action1', + namespace: 'some-namespace', + rel: 'primary', + type: 'action', + type_id: 'test', + }, + ], + space_ids: ['some-namespace'], + }, + message: + 'action: test:action1: \'action-1\' execution cancelled due to timeout - exceeded default timeout of "5m"', + }); }); -}); -test('writes to event log for execute and execute start', async () => { - const executorMock = setupActionExecutorMock(); - executorMock.mockResolvedValue({ - actionId: '1', - status: 'ok', - }); - await actionExecutor.execute(executeParams); - expect(eventLogger.logEvent).toHaveBeenCalledTimes(2); - expect(eventLogger.logEvent).toHaveBeenNthCalledWith(1, { - event: { - action: 'execute-start', - kind: 'action', - }, - kibana: { - action: { - execution: { - uuid: '2', - }, - name: 'action-1', - id: '1', + test('writes to event log for execute and execute start', async () => { + const executorMock = setupActionExecutorMock(); + executorMock.mockResolvedValue({ + actionId: '1', + status: 'ok', + }); + await actionExecutor.execute(executeParams); + expect(eventLogger.logEvent).toHaveBeenCalledTimes(2); + expect(eventLogger.logEvent).toHaveBeenNthCalledWith(1, { + event: { + action: 'execute-start', + kind: 'action', }, - alert: { - rule: { + kibana: { + action: { execution: { - uuid: '123abc', + uuid: '2', }, - }, - }, - saved_objects: [ - { + name: 'action-1', id: '1', - namespace: 'some-namespace', - rel: 'primary', - type: 'action', - type_id: 'test', }, - ], - space_ids: ['some-namespace'], - }, - message: 'action started: test:1: action-1', - }); -}); - -test('writes to event log for execute and execute start when consumer and related saved object are defined', async () => { - const executorMock = setupActionExecutorMock(); - executorMock.mockResolvedValue({ - actionId: '1', - status: 'ok', - }); - await actionExecutor.execute({ - ...executeParams, - consumer: 'test-consumer', - relatedSavedObjects: [ - { - typeId: '.rule-type', - type: 'alert', - id: '12', + alert: { + rule: { + execution: { + uuid: '123abc', + }, + }, + }, + saved_objects: [ + { + id: '1', + namespace: 'some-namespace', + rel: 'primary', + type: 'action', + type_id: 'test', + }, + ], + space_ids: ['some-namespace'], }, - ], + message: 'action started: test:1: action-1', + }); }); - expect(eventLogger.logEvent).toHaveBeenCalledTimes(2); - expect(eventLogger.logEvent).toHaveBeenNthCalledWith(1, { - event: { - action: 'execute-start', - kind: 'action', - }, - kibana: { - action: { - execution: { - uuid: '2', + + test('writes to event log for execute and execute start when consumer and related saved object are defined', async () => { + const executorMock = setupActionExecutorMock(); + executorMock.mockResolvedValue({ + actionId: '1', + status: 'ok', + }); + await actionExecutor.execute({ + ...executeParams, + consumer: 'test-consumer', + relatedSavedObjects: [ + { + typeId: '.rule-type', + type: 'alert', + id: '12', }, - name: 'action-1', - id: '1', + ], + }); + expect(eventLogger.logEvent).toHaveBeenCalledTimes(2); + expect(eventLogger.logEvent).toHaveBeenNthCalledWith(1, { + event: { + action: 'execute-start', + kind: 'action', }, - alert: { - rule: { - consumer: 'test-consumer', + kibana: { + action: { execution: { - uuid: '123abc', + uuid: '2', }, - rule_type_id: '.rule-type', - }, - }, - saved_objects: [ - { + name: 'action-1', id: '1', - namespace: 'some-namespace', - rel: 'primary', - type: 'action', - type_id: 'test', }, - { - id: '12', - namespace: undefined, - rel: 'primary', - type: 'alert', - type_id: '.rule-type', + alert: { + rule: { + consumer: 'test-consumer', + execution: { + uuid: '123abc', + }, + rule_type_id: '.rule-type', + }, }, - ], - space_ids: ['some-namespace'], - }, - message: 'action started: test:1: action-1', + saved_objects: [ + { + id: '1', + namespace: 'some-namespace', + rel: 'primary', + type: 'action', + type_id: 'test', + }, + { + id: '12', + namespace: undefined, + rel: 'primary', + type: 'alert', + type_id: '.rule-type', + }, + ], + space_ids: ['some-namespace'], + }, + message: 'action started: test:1: action-1', + }); }); -}); - -test('writes usage data to event log for OpenAI events', async () => { - const executorMock = setupActionExecutorMock('.gen-ai'); const mockGenAi = { id: 'chatcmpl-7LztF5xsJl2z5jcNpJKvaPm4uWt8x', object: 'chat.completion', @@ -1533,150 +1531,167 @@ test('writes usage data to event log for OpenAI events', async () => { }, ], }; - executorMock.mockResolvedValue({ - actionId: '1', - status: 'ok', - // @ts-ignore - data: mockGenAi, - }); - await actionExecutor.execute(executeParams); - expect(eventLogger.logEvent).toHaveBeenCalledTimes(2); - expect(eventLogger.logEvent).toHaveBeenNthCalledWith(2, { - event: { - action: 'execute', - kind: 'action', - outcome: 'success', - }, - kibana: { - action: { - execution: { - uuid: '2', - gen_ai: { - usage: mockGenAi.usage, - }, - }, - name: 'action-1', - id: '1', + test('writes usage data to event log for OpenAI events', async () => { + const executorMock = setupActionExecutorMock('.gen-ai'); + + executorMock.mockResolvedValue({ + actionId: '1', + status: 'ok', + // @ts-ignore + data: mockGenAi, + }); + await actionExecutor.execute(executeParams); + expect(eventLogger.logEvent).toHaveBeenCalledTimes(2); + expect(eventLogger.logEvent).toHaveBeenNthCalledWith(2, { + event: { + action: 'execute', + kind: 'action', + outcome: 'success', }, - alert: { - rule: { + kibana: { + action: { execution: { - uuid: '123abc', + uuid: '2', + gen_ai: { + usage: mockGenAi.usage, + }, }, - }, - }, - saved_objects: [ - { + name: 'action-1', id: '1', - namespace: 'some-namespace', - rel: 'primary', - type: 'action', - type_id: '.gen-ai', }, - ], - space_ids: ['some-namespace'], - }, - message: 'action executed: .gen-ai:1: action-1', - user: { name: 'coolguy', id: '123' }, + alert: { + rule: { + execution: { + uuid: '123abc', + }, + }, + }, + saved_objects: [ + { + id: '1', + namespace: 'some-namespace', + rel: 'primary', + type: 'action', + type_id: '.gen-ai', + }, + ], + space_ids: ['some-namespace'], + }, + message: 'action executed: .gen-ai:1: action-1', + user: { name: 'coolguy', id: '123' }, + }); }); -}); -test('writes usage data to event log for streaming OpenAI events', async () => { - const executorMock = setupActionExecutorMock('.gen-ai', { - params: { schema: schema.any() }, - config: { schema: schema.any() }, - secrets: { schema: schema.any() }, - }); + test('writes usage data to event log for streaming OpenAI events', async () => { + const executorMock = setupActionExecutorMock('.gen-ai', { + params: { schema: schema.any() }, + config: { schema: schema.any() }, + secrets: { schema: schema.any() }, + }); - const stream = new PassThrough(); + const stream = new PassThrough(); - executorMock.mockResolvedValue({ - actionId: '1', - status: 'ok', - // @ts-ignore - data: stream, - }); + executorMock.mockResolvedValue({ + actionId: '1', + status: 'ok', + // @ts-ignore + data: stream, + }); - await actionExecutor.execute({ - ...executeParams, - params: { - subActionParams: { - body: JSON.stringify({ - messages: [ - { - role: 'system', - content: 'System message', - }, - { - role: 'user', - content: 'User message', - }, - ], - }), + await actionExecutor.execute({ + ...executeParams, + params: { + subActionParams: { + body: JSON.stringify({ + messages: [ + { + role: 'system', + content: 'System message', + }, + { + role: 'user', + content: 'User message', + }, + ], + }), + }, }, - }, - }); + }); - expect(eventLogger.logEvent).toHaveBeenCalledTimes(1); - stream.write( - `data: ${JSON.stringify({ - object: 'chat.completion.chunk', - choices: [{ delta: { content: 'Single' } }], - })}\n` - ); - stream.write(`data: [DONE]`); + expect(eventLogger.logEvent).toHaveBeenCalledTimes(1); + stream.write( + `data: ${JSON.stringify({ + object: 'chat.completion.chunk', + choices: [{ delta: { content: 'Single' } }], + })}\n` + ); + stream.write(`data: [DONE]`); - stream.end(); + stream.end(); - await finished(stream); + await finished(stream); - await new Promise(process.nextTick); + await new Promise(process.nextTick); - expect(eventLogger.logEvent).toHaveBeenCalledTimes(2); - expect(eventLogger.logEvent).toHaveBeenNthCalledWith(2, { - event: { - action: 'execute', - kind: 'action', - outcome: 'success', - }, - kibana: { - action: { - execution: { - uuid: '2', - gen_ai: { - usage: { - completion_tokens: 5, - prompt_tokens: 30, - total_tokens: 35, + expect(eventLogger.logEvent).toHaveBeenCalledTimes(2); + expect(eventLogger.logEvent).toHaveBeenNthCalledWith(2, { + event: { + action: 'execute', + kind: 'action', + outcome: 'success', + }, + kibana: { + action: { + execution: { + uuid: '2', + gen_ai: { + usage: { + completion_tokens: 5, + prompt_tokens: 30, + total_tokens: 35, + }, }, }, + name: 'action-1', + id: '1', }, - name: 'action-1', - id: '1', - }, - alert: { - rule: { - execution: { - uuid: '123abc', + alert: { + rule: { + execution: { + uuid: '123abc', + }, }, }, + saved_objects: [ + { + id: '1', + namespace: 'some-namespace', + rel: 'primary', + type: 'action', + type_id: '.gen-ai', + }, + ], + space_ids: ['some-namespace'], }, - saved_objects: [ - { - id: '1', - namespace: 'some-namespace', - rel: 'primary', - type: 'action', - type_id: '.gen-ai', - }, - ], - space_ids: ['some-namespace'], - }, - message: 'action executed: .gen-ai:1: action-1', - user: { name: 'coolguy', id: '123' }, + message: 'action executed: .gen-ai:1: action-1', + user: { name: 'coolguy', id: '123' }, + }); + }); + test('reports telemetry for token count events', async () => { + const executorMock = setupActionExecutorMock('.gen-ai'); + executorMock.mockResolvedValue({ + actionId: '1', + status: 'ok', + // @ts-ignore + data: mockGenAi, + }); + await actionExecutor.execute(executeParams); + expect(actionExecutorInitializationParams.analyticsService.reportEvent).toHaveBeenCalledWith( + GEN_AI_TOKEN_COUNT_EVENT.eventType, + { actionTypeId: '.gen-ai', completion_tokens: 9, prompt_tokens: 10, total_tokens: 19 } + ); }); }); - function setupActionExecutorMock( actionTypeId = 'test', validationOverride?: ConnectorType['validate'] diff --git a/x-pack/plugins/actions/server/lib/action_executor.ts b/x-pack/plugins/actions/server/lib/action_executor.ts index c06e33bf3df6a..5ca37f6ee871c 100644 --- a/x-pack/plugins/actions/server/lib/action_executor.ts +++ b/x-pack/plugins/actions/server/lib/action_executor.ts @@ -6,7 +6,12 @@ */ import type { PublicMethodsOf } from '@kbn/utility-types'; -import { KibanaRequest, Logger, SavedObjectsErrorHelpers } from '@kbn/core/server'; +import { + AnalyticsServiceStart, + KibanaRequest, + Logger, + SavedObjectsErrorHelpers, +} from '@kbn/core/server'; import { cloneDeep } from 'lodash'; import { set } from '@kbn/safer-lodash-set'; import { withSpan } from '@kbn/apm-utils'; @@ -16,6 +21,7 @@ import { IEventLogger, SAVED_OBJECT_REL_PRIMARY } from '@kbn/event-log-plugin/se import { AuthenticatedUser, SecurityPluginStart } from '@kbn/security-plugin/server'; import { createTaskRunError, TaskErrorSource } from '@kbn/task-manager-plugin/server'; import { getErrorSource } from '@kbn/task-manager-plugin/server/task_running'; +import { GEN_AI_TOKEN_COUNT_EVENT } from './event_based_telemetry'; import { getGenAiTokenTracking, shouldTrackGenAiToken } from './gen_ai_token_tracking'; import { validateConfig, @@ -58,6 +64,7 @@ export interface ActionExecutorContext { getUnsecuredServices: GetUnsecuredServicesFunction; encryptedSavedObjectsClient: EncryptedSavedObjectsClient; actionTypeRegistry: ActionTypeRegistryContract; + analyticsService: AnalyticsServiceStart; eventLogger: IEventLogger; inMemoryConnectors: InMemoryConnector[]; getActionsAuthorizationWithRequest: (request: KibanaRequest) => ActionsAuthorization; @@ -380,7 +387,7 @@ export class ActionExecutor { }, }, async (span) => { - const { actionTypeRegistry, eventLogger } = this.actionExecutorContext!; + const { actionTypeRegistry, analyticsService, eventLogger } = this.actionExecutorContext!; const actionInfo = await this.getActionInfoInternal(actionId, namespace.namespace); @@ -587,6 +594,15 @@ export class ActionExecutor { prompt_tokens: tokenTracking.prompt_tokens, completion_tokens: tokenTracking.completion_tokens, }); + analyticsService.reportEvent(GEN_AI_TOKEN_COUNT_EVENT.eventType, { + actionTypeId, + total_tokens: tokenTracking.total_tokens, + prompt_tokens: tokenTracking.prompt_tokens, + completion_tokens: tokenTracking.completion_tokens, + ...(actionTypeId === '.gen-ai' && config?.apiProvider != null + ? { provider: config?.apiProvider } + : {}), + }); } }) .catch((err) => { diff --git a/x-pack/plugins/actions/server/lib/event_based_telemetry.ts b/x-pack/plugins/actions/server/lib/event_based_telemetry.ts new file mode 100644 index 0000000000000..eb7ad8dbdfb65 --- /dev/null +++ b/x-pack/plugins/actions/server/lib/event_based_telemetry.ts @@ -0,0 +1,57 @@ +/* + * 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 { EventTypeOpts } from '@kbn/core/server'; + +export const GEN_AI_TOKEN_COUNT_EVENT: EventTypeOpts<{ + actionTypeId: string; + total_tokens: number; + prompt_tokens: number; + completion_tokens: number; + provider?: string; +}> = { + eventType: 'gen_ai_token_count', + schema: { + actionTypeId: { + type: 'keyword', + _meta: { + description: 'Kibana connector type', + optional: false, + }, + }, + total_tokens: { + type: 'integer', + _meta: { + description: 'Total token count', + optional: false, + }, + }, + prompt_tokens: { + type: 'integer', + _meta: { + description: 'Prompt token count', + optional: false, + }, + }, + completion_tokens: { + type: 'integer', + _meta: { + description: 'Completion token count', + optional: false, + }, + }, + provider: { + type: 'keyword', + _meta: { + description: 'OpenAI provider', + optional: true, + }, + }, + }, +}; + +export const events: Array> = [GEN_AI_TOKEN_COUNT_EVENT]; diff --git a/x-pack/plugins/actions/server/lib/task_runner_factory.test.ts b/x-pack/plugins/actions/server/lib/task_runner_factory.test.ts index 96a3059ef852a..c5f10f728065e 100644 --- a/x-pack/plugins/actions/server/lib/task_runner_factory.test.ts +++ b/x-pack/plugins/actions/server/lib/task_runner_factory.test.ts @@ -17,6 +17,7 @@ import { loggingSystemMock, httpServiceMock, savedObjectsRepositoryMock, + analyticsServiceMock, } from '@kbn/core/server/mocks'; import { eventLoggerMock } from '@kbn/event-log-plugin/server/mocks'; import { ActionTypeDisabledError } from './errors'; @@ -96,6 +97,7 @@ const actionExecutorInitializerParams = { encryptedSavedObjectsClient: mockedEncryptedSavedObjectsClient, eventLogger, inMemoryConnectors: [], + analyticsService: analyticsServiceMock.createAnalyticsServiceStart(), }; const taskRunnerFactoryInitializerParams = { diff --git a/x-pack/plugins/actions/server/plugin.ts b/x-pack/plugins/actions/server/plugin.ts index 651de2ea04137..111e0509f81ac 100644 --- a/x-pack/plugins/actions/server/plugin.ts +++ b/x-pack/plugins/actions/server/plugin.ts @@ -44,6 +44,7 @@ import { MonitoringCollectionSetup } from '@kbn/monitoring-collection-plugin/ser import { ServerlessPluginSetup, ServerlessPluginStart } from '@kbn/serverless/server'; import { ActionsConfig, AllowedHosts, EnabledConnectorTypes, getValidatedConfig } from './config'; import { resolveCustomHosts } from './lib/custom_host_settings'; +import { events } from './lib/event_based_telemetry'; import { ActionsClient } from './actions_client/actions_client'; import { ActionTypeRegistry } from './action_type_registry'; import { @@ -249,7 +250,7 @@ export class ActionsPlugin implements Plugin core.analytics.registerEventType(eventConfig)); const actionExecutor = new ActionExecutor({ isESOCanEncrypt: this.isESOCanEncrypt, }); @@ -571,6 +572,7 @@ export class ActionsPlugin implements Plugin { }); expect(args.securityPluginStart.userProfiles.getCurrent).toHaveBeenCalled(); - expect(args.securityPluginStart.authc.getCurrentUser).not.toHaveBeenCalled(); + expect(args.securityServiceStart.authc.getCurrentUser).not.toHaveBeenCalled(); expect(createCasesClientMocked.mock.calls[0][0].user).toEqual({ username: 'my_user', full_name: 'My user', @@ -63,7 +63,7 @@ describe('CasesClientFactory', () => { it('constructs the user info from the authc service if the user profile is not available', async () => { const scopedClusterClient = coreStart.elasticsearch.client.asScoped(request).asCurrentUser; // @ts-expect-error: not all fields are needed - args.securityPluginStart.authc.getCurrentUser.mockReturnValueOnce({ + args.securityServiceStart.authc.getCurrentUser.mockReturnValueOnce({ username: 'my_user_2', full_name: 'My user 2', email: 'elastic2@elastic.co', @@ -76,7 +76,7 @@ describe('CasesClientFactory', () => { }); expect(args.securityPluginStart.userProfiles.getCurrent).toHaveBeenCalled(); - expect(args.securityPluginStart.authc.getCurrentUser).toHaveBeenCalled(); + expect(args.securityServiceStart.authc.getCurrentUser).toHaveBeenCalled(); expect(createCasesClientMocked.mock.calls[0][0].user).toEqual({ username: 'my_user_2', full_name: 'My user 2', @@ -95,7 +95,7 @@ describe('CasesClientFactory', () => { }); expect(args.securityPluginStart.userProfiles.getCurrent).toHaveBeenCalled(); - expect(args.securityPluginStart.authc.getCurrentUser).toHaveBeenCalled(); + expect(args.securityServiceStart.authc.getCurrentUser).toHaveBeenCalled(); expect(createCasesClientMocked.mock.calls[0][0].user).toEqual({ username: 'elastic/kibana', full_name: null, @@ -113,7 +113,7 @@ describe('CasesClientFactory', () => { }); expect(args.securityPluginStart.userProfiles.getCurrent).toHaveBeenCalled(); - expect(args.securityPluginStart.authc.getCurrentUser).toHaveBeenCalled(); + expect(args.securityServiceStart.authc.getCurrentUser).toHaveBeenCalled(); expect(createCasesClientMocked.mock.calls[0][0].user).toEqual({ username: null, full_name: null, diff --git a/x-pack/plugins/cases/server/client/factory.ts b/x-pack/plugins/cases/server/client/factory.ts index 5bb04c1da9e86..865ee2ff3b684 100644 --- a/x-pack/plugins/cases/server/client/factory.ts +++ b/x-pack/plugins/cases/server/client/factory.ts @@ -12,6 +12,7 @@ import type { ElasticsearchClient, SavedObjectsClientContract, IBasePath, + SecurityServiceStart, } from '@kbn/core/server'; import type { ISavedObjectsSerializer } from '@kbn/core-saved-objects-server'; import { SECURITY_EXTENSION_ID } from '@kbn/core-saved-objects-server'; @@ -57,6 +58,7 @@ import { EmailNotificationService } from '../services/notifications/email_notifi interface CasesClientFactoryArgs { securityPluginSetup: SecurityPluginSetup; securityPluginStart: SecurityPluginStart; + securityServiceStart: SecurityServiceStart; spacesPluginStart?: SpacesPluginStart; featuresPluginStart: FeaturesPluginStart; actionsPluginStart: ActionsPluginStart; @@ -257,6 +259,7 @@ export class CasesClientFactory { try { const userProfile = await this.options.securityPluginStart.userProfiles.getCurrent({ + // todo: Access userProfiles from core's UserProfileService contract request, }); @@ -273,7 +276,7 @@ export class CasesClientFactory { } try { - const user = this.options.securityPluginStart.authc.getCurrentUser(request); + const user = this.options.securityServiceStart.authc.getCurrentUser(request); if (user != null) { return { diff --git a/x-pack/plugins/cases/server/client/mocks.ts b/x-pack/plugins/cases/server/client/mocks.ts index 3de350f5a3981..74d3c3de46fa0 100644 --- a/x-pack/plugins/cases/server/client/mocks.ts +++ b/x-pack/plugins/cases/server/client/mocks.ts @@ -6,7 +6,11 @@ */ import type { PublicContract, PublicMethodsOf } from '@kbn/utility-types'; -import { loggingSystemMock, savedObjectsClientMock } from '@kbn/core/server/mocks'; +import { + loggingSystemMock, + savedObjectsClientMock, + securityServiceMock, +} from '@kbn/core/server/mocks'; import type { ISavedObjectsSerializer } from '@kbn/core-saved-objects-server'; import { @@ -226,6 +230,7 @@ export const createCasesClientFactoryMockArgs = () => { return { securityPluginSetup: securityMock.createSetup(), securityPluginStart: securityMock.createStart(), + securityServiceStart: securityServiceMock.createStart(), spacesPluginStart: spacesMock.createStart(), featuresPluginStart: featuresPluginMock.createSetup(), actionsPluginStart: actionsMock.createStart(), diff --git a/x-pack/plugins/cases/server/plugin.ts b/x-pack/plugins/cases/server/plugin.ts index 2c3f1f10ad254..48ed1722149ed 100644 --- a/x-pack/plugins/cases/server/plugin.ts +++ b/x-pack/plugins/cases/server/plugin.ts @@ -186,6 +186,7 @@ export class CasePlugin // eslint-disable-next-line @typescript-eslint/no-non-null-assertion securityPluginSetup: this.securityPluginSetup!, securityPluginStart: plugins.security, + securityServiceStart: core.security, spacesPluginStart: plugins.spaces, featuresPluginStart: plugins.features, actionsPluginStart: plugins.actions, diff --git a/x-pack/plugins/cases/server/services/notifications/email_notification_service.ts b/x-pack/plugins/cases/server/services/notifications/email_notification_service.ts index e17eb2f22f7bc..22c93f8919a2a 100644 --- a/x-pack/plugins/cases/server/services/notifications/email_notification_service.ts +++ b/x-pack/plugins/cases/server/services/notifications/email_notification_service.ts @@ -100,7 +100,7 @@ export class EmailNotificationService implements NotificationService { ); const uids = new Set(assignees.map((assignee) => assignee.uid)); - const userProfiles = await this.security.userProfiles.bulkGet({ uids }); + const userProfiles = await this.security.userProfiles.bulkGet({ uids }); // todo: access userProfiles from core security service start contract const users = userProfiles.map((profile) => profile.user); const to = users diff --git a/x-pack/plugins/cases/server/services/user_profiles/index.ts b/x-pack/plugins/cases/server/services/user_profiles/index.ts index 6a7be7deac4eb..7bc57a96105f5 100644 --- a/x-pack/plugins/cases/server/services/user_profiles/index.ts +++ b/x-pack/plugins/cases/server/services/user_profiles/index.ts @@ -27,7 +27,7 @@ const MIN_PROFILES_SIZE = 0; interface UserProfileOptions { securityPluginSetup: SecurityPluginSetup; - securityPluginStart: SecurityPluginStart; + securityPluginStart: SecurityPluginStart; // TODO: Use core's UserProfileService spaces?: SpacesPluginStart; licensingPluginStart: LicensingPluginStart; } @@ -58,6 +58,7 @@ export class UserProfileService { size?: number; owners: string[]; }) { + // TODO: Use core's UserProfileService return securityPluginStart.userProfiles.suggest({ name: searchTerm, size, diff --git a/x-pack/plugins/cloud_security_posture/common/constants.ts b/x-pack/plugins/cloud_security_posture/common/constants.ts index 31f36b8d57a7c..57f1e465ea73b 100644 --- a/x-pack/plugins/cloud_security_posture/common/constants.ts +++ b/x-pack/plugins/cloud_security_posture/common/constants.ts @@ -193,4 +193,12 @@ export const AZURE_CREDENTIALS_TYPE_TO_FIELDS_MAP = { manual: [], }; +export const CLOUD_FORMATION_STACK_NAME = 'Elastic-Cloud-Security-Posture-Management'; +export const TEMPLATE_URL_ACCOUNT_TYPE_ENV_VAR = 'ACCOUNT_TYPE'; + +export const ORGANIZATION_ACCOUNT = 'organization-account'; +export const SINGLE_ACCOUNT = 'single-account'; + export const CLOUD_SECURITY_PLUGIN_VERSION = '1.8.1'; +// Cloud Credentials Template url was implemented in 1.10.0-preview01. See PR - https://github.com/elastic/integrations/pull/9828 +export const CLOUD_CREDENTIALS_PACKAGE_VERSION = '1.10.0-preview01'; diff --git a/x-pack/plugins/cloud_security_posture/public/common/utils/get_template_url_package_info.ts b/x-pack/plugins/cloud_security_posture/public/common/utils/get_template_url_package_info.ts new file mode 100644 index 0000000000000..eb86392a40863 --- /dev/null +++ b/x-pack/plugins/cloud_security_posture/public/common/utils/get_template_url_package_info.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 { PackageInfo } from '@kbn/fleet-plugin/common'; + +export const SUPPORTED_TEMPLATES_URL_FROM_PACKAGE_INFO_INPUT_VARS = { + CLOUD_FORMATION: 'cloud_formation_template', + CLOUD_FORMATION_CREDENTIALS: 'cloud_formation_credentials_template', + ARM_TEMPLATE: 'arm_template_url', + CLOUD_SHELL_URL: 'cloud_shell_url', +}; + +export const getTemplateUrlFromPackageInfo = ( + packageInfo: PackageInfo | undefined, + integrationType: string, + templateUrlFieldName: string +): string | undefined => { + if (!packageInfo?.policy_templates) return undefined; + + const policyTemplate = packageInfo.policy_templates.find((p) => p.name === integrationType); + if (!policyTemplate) return undefined; + + if ('inputs' in policyTemplate) { + const cloudFormationTemplate = policyTemplate.inputs?.reduce((acc, input): string => { + if (!input.vars) return acc; + const template = input.vars.find((v) => v.name === templateUrlFieldName)?.default; + return template ? String(template) : acc; + }, ''); + return cloudFormationTemplate !== '' ? cloudFormationTemplate : undefined; + } +}; diff --git a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/aws_credentials_form/aws_credentials_form_agentless.tsx b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/aws_credentials_form/aws_credentials_form_agentless.tsx index 790bfdc606e82..1929d6c552596 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/aws_credentials_form/aws_credentials_form_agentless.tsx +++ b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/aws_credentials_form/aws_credentials_form_agentless.tsx @@ -6,10 +6,22 @@ */ import React from 'react'; -import { EuiLink, EuiSpacer } from '@elastic/eui'; +import { EuiButton, EuiCallOut, EuiLink, EuiSpacer, EuiText } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; +import semverCompare from 'semver/functions/compare'; +import semverValid from 'semver/functions/valid'; import { i18n } from '@kbn/i18n'; + +import { + getTemplateUrlFromPackageInfo, + SUPPORTED_TEMPLATES_URL_FROM_PACKAGE_INFO_INPUT_VARS, +} from '../../../common/utils/get_template_url_package_info'; import { cspIntegrationDocsNavigation } from '../../../common/navigation/constants'; +import { + CLOUD_CREDENTIALS_PACKAGE_VERSION, + SINGLE_ACCOUNT, + TEMPLATE_URL_ACCOUNT_TYPE_ENV_VAR, +} from '../../../../common/constants'; import { DEFAULT_AGENTLESS_AWS_CREDENTIALS_TYPE, getAwsCredentialsFormAgentlessOptions, @@ -20,11 +32,110 @@ import { getAwsCredentialsType, getPosturePolicy } from '../utils'; import { AwsInputVarFields } from './aws_input_var_fields'; import { AwsFormProps, - ReadDocumentation, AWSSetupInfoContent, AwsCredentialTypeSelector, } from './aws_credentials_form'; +const CLOUD_FORMATION_EXTERNAL_DOC_URL = + 'https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-whatis-howdoesitwork.html'; + +export const CloudFormationCloudCredentialsGuide = ({ + isOrganization, +}: { + isOrganization?: boolean; +}) => { + return ( + +

+ + + + ), + }} + /> +

+ +
    + {isOrganization ? ( +
  1. + +
  2. + ) : ( +
  3. + +
  4. + )} +
  5. + +
  6. +
  7. + +
  8. +
  9. + + + + ), + }} + /> +
  10. +
  11. + +
  12. +
  13. + +
  14. +
  15. + +
  16. +
+
+
+ ); +}; + export const AwsCredentialsFormAgentless = ({ input, newPolicy, @@ -36,6 +147,18 @@ export const AwsCredentialsFormAgentless = ({ const group = options[awsCredentialsType]; const fields = getInputVarsFields(input, group.fields); const integrationLink = cspIntegrationDocsNavigation.cspm.getStartedPath; + const accountType = input?.streams?.[0].vars?.['aws.account_type']?.value ?? SINGLE_ACCOUNT; + + const isValidSemantic = semverValid(packageInfo.version); + const showCloudCredentialsButton = isValidSemantic + ? semverCompare(packageInfo.version, CLOUD_CREDENTIALS_PACKAGE_VERSION) >= 0 + : false; + + const automationCredentialTemplate = getTemplateUrlFromPackageInfo( + packageInfo, + input.policy_template, + SUPPORTED_TEMPLATES_URL_FROM_PACKAGE_INFO_INPUT_VARS.CLOUD_FORMATION_CREDENTIALS + )?.replace(TEMPLATE_URL_ACCOUNT_TYPE_ENV_VAR, accountType); return ( <> @@ -73,10 +196,35 @@ export const AwsCredentialsFormAgentless = ({ }} /> - {group.info} - - - + {!showCloudCredentialsButton && ( + <> + + + + + + )} + {awsCredentialsType === DEFAULT_AGENTLESS_AWS_CREDENTIALS_TYPE && showCloudCredentialsButton && ( + <> + + + + + + + )} { const accountType = input.streams?.[0]?.vars?.['gcp.account_type']?.value; - const isOrganization = accountType === 'organization-account'; + const isOrganization = accountType === ORGANIZATION_ACCOUNT; const organizationFields = ['gcp.organization_id', 'gcp.credentials.json']; const singleAccountFields = ['gcp.project_id', 'gcp.credentials.json']; + const isValidSemantic = semverValid(packageInfo.version); + const showCloudCredentialsButton = isValidSemantic + ? semverCompare(packageInfo.version, CLOUD_CREDENTIALS_PACKAGE_VERSION) >= 0 + : false; + /* For Agentless only JSON credentials type is supported. Also in case of organisation setup, project_id is not required in contrast to Agent-based. @@ -42,10 +58,43 @@ export const GcpCredentialsFormAgentless = ({ } }); + const cloudShellUrl = getTemplateUrlFromPackageInfo( + packageInfo, + input.policy_template, + SUPPORTED_TEMPLATES_URL_FROM_PACKAGE_INFO_INPUT_VARS.CLOUD_SHELL_URL + )?.replace(TEMPLATE_URL_ACCOUNT_TYPE_ENV_VAR, accountType); + return ( <> - - + + {!showCloudCredentialsButton && ( + <> + + + + + + )} + {showCloudCredentialsButton && ( + <> + + + + + + )} ', () => { // Loading while checking the status API expect(screen.getByText(/loading/i)).toBeInTheDocument(); - await waitFor(() => - expect(screen.getByTestId('latest_findings_container')).toBeInTheDocument() - ); - // loading findings - await waitFor(() => expect(screen.getByText(/loading results/i)).toBeInTheDocument()); - await waitFor(() => expect(screen.getByText(/2 findings/i)).toBeInTheDocument()); expect(screen.getByText(finding1.resource.name)).toBeInTheDocument(); @@ -99,12 +93,6 @@ describe('', () => { // Loading while checking the status API expect(screen.getByText(/loading/i)).toBeInTheDocument(); - await waitFor(() => - expect(screen.getByTestId('latest_findings_container')).toBeInTheDocument() - ); - // loading findings - await waitFor(() => expect(screen.getByText(/loading results/i)).toBeInTheDocument()); - await waitFor(() => expect(screen.getByText(/2 findings/i)).toBeInTheDocument()); const queryInput = screen.getByTestId('queryInput'); @@ -134,12 +122,6 @@ describe('', () => { // Loading while checking the status API expect(screen.getByText(/loading/i)).toBeInTheDocument(); - await waitFor(() => - expect(screen.getByTestId('latest_findings_container')).toBeInTheDocument() - ); - // loading findings - await waitFor(() => expect(screen.getByText(/loading results/i)).toBeInTheDocument()); - await waitFor(() => expect(screen.getByText(/2 findings/i)).toBeInTheDocument()); const queryInput = screen.getByTestId('queryInput'); @@ -171,12 +153,6 @@ describe('', () => { // Loading while checking the status API expect(screen.getByText(/loading/i)).toBeInTheDocument(); - await waitFor(() => - expect(screen.getByTestId('latest_findings_container')).toBeInTheDocument() - ); - // loading findings - await waitFor(() => expect(screen.getByText(/loading results/i)).toBeInTheDocument()); - await waitFor(() => expect(screen.getByText(/2 findings/i)).toBeInTheDocument()); userEvent.click(screen.getByTestId('addFilter'), undefined, { skipPointerEventsCheck: true }); @@ -212,7 +188,7 @@ describe('', () => { await waitFor(() => expect(screen.getByText(/1 findings/i)).toBeInTheDocument()); expect(screen.getByText(finding1.resource.name)).toBeInTheDocument(); expect(screen.queryByText(finding2.resource.id)).not.toBeInTheDocument(); - }, 10000); + }); it('remove filter', async () => { const finding1 = generateCspFinding('0001', 'failed'); const finding2 = generateCspFinding('0002', 'passed'); @@ -256,12 +232,6 @@ describe('', () => { // Loading while checking the status API expect(screen.getByText(/loading/i)).toBeInTheDocument(); - await waitFor(() => - expect(screen.getByTestId('latest_findings_container')).toBeInTheDocument() - ); - // loading findings - await waitFor(() => expect(screen.getByText(/loading results/i)).toBeInTheDocument()); - await waitFor(() => expect(screen.getByText(/1 findings/i)).toBeInTheDocument()); expect(screen.getByText(finding1.resource.name)).toBeInTheDocument(); expect(screen.queryByText(finding2.resource.id)).not.toBeInTheDocument(); diff --git a/x-pack/plugins/cloud_security_posture/public/test/mock_server/mock_server.ts b/x-pack/plugins/cloud_security_posture/public/test/mock_server/mock_server.ts index 9fe4b156bc096..bef10309fb210 100644 --- a/x-pack/plugins/cloud_security_posture/public/test/mock_server/mock_server.ts +++ b/x-pack/plugins/cloud_security_posture/public/test/mock_server/mock_server.ts @@ -33,6 +33,9 @@ jest.mock('rxjs', () => { }; }); +// Set the default timeout for all mock server tests to 30 seconds +jest.setTimeout(10 * 3000); + /** * Setup a mock server with the default handlers * @param debug - If true, log all requests to the console diff --git a/x-pack/plugins/data_quality/public/application.tsx b/x-pack/plugins/data_quality/public/application.tsx index 32ddc64eb00e1..f022ab6d0efc0 100644 --- a/x-pack/plugins/data_quality/public/application.tsx +++ b/x-pack/plugins/data_quality/public/application.tsx @@ -11,6 +11,7 @@ import React from 'react'; import ReactDOM from 'react-dom'; import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render'; import { Route, Router, Routes } from '@kbn/shared-ux-router'; +import { PerformanceContextProvider } from '@kbn/ebt-tools'; import { KbnUrlStateStorageFromRouterProvider } from './utils/kbn_url_state_context'; import { useKibanaContextForPluginProvider } from './utils/use_kibana'; import { AppPluginStartDependencies, DataQualityPluginStart } from './types'; @@ -52,9 +53,11 @@ const App = ({ core, plugins, pluginStart, params }: AppProps) => { - - } /> - + + + } /> + + diff --git a/x-pack/plugins/data_quality/public/plugin.ts b/x-pack/plugins/data_quality/public/plugin.ts index d1ae2cd748f13..cb217abf86fec 100644 --- a/x-pack/plugins/data_quality/public/plugin.ts +++ b/x-pack/plugins/data_quality/public/plugin.ts @@ -54,7 +54,7 @@ export class DataQualityPlugin return renderApp(coreStart, pluginsStartDeps, pluginStart, params); }, - hideFromSidebar: true, + hideFromSidebar: false, }); const managementLocator = diff --git a/x-pack/plugins/data_quality/tsconfig.json b/x-pack/plugins/data_quality/tsconfig.json index 59f25745ae3e6..7a904e9f95cda 100644 --- a/x-pack/plugins/data_quality/tsconfig.json +++ b/x-pack/plugins/data_quality/tsconfig.json @@ -27,6 +27,7 @@ "@kbn/share-plugin", "@kbn/utility-types", "@kbn/deeplinks-management", + "@kbn/ebt-tools", ], "exclude": ["target/**/*"] } diff --git a/x-pack/plugins/elastic_assistant/server/__mocks__/attack_discovery_schema.mock.ts b/x-pack/plugins/elastic_assistant/server/__mocks__/attack_discovery_schema.mock.ts index 156011cfbae14..9e8a0b5d2ac90 100644 --- a/x-pack/plugins/elastic_assistant/server/__mocks__/attack_discovery_schema.mock.ts +++ b/x-pack/plugins/elastic_assistant/server/__mocks__/attack_discovery_schema.mock.ts @@ -68,6 +68,7 @@ export const getAttackDiscoverySearchEsMock = () => { }, ], updated_at: '2024-06-07T21:19:08.090Z', + last_viewed_at: '2024-06-07T21:19:08.090Z', replacements: [ { uuid: 'f19e1a0a-de3b-496c-8ace-dd91229e1084', diff --git a/x-pack/plugins/elastic_assistant/server/__mocks__/data_clients.mock.ts b/x-pack/plugins/elastic_assistant/server/__mocks__/data_clients.mock.ts index a5196f93b6917..7e20e292a9868 100644 --- a/x-pack/plugins/elastic_assistant/server/__mocks__/data_clients.mock.ts +++ b/x-pack/plugins/elastic_assistant/server/__mocks__/data_clients.mock.ts @@ -38,6 +38,7 @@ export const conversationsDataClientMock: { const createAttackDiscoveryDataClientMock = (): AttackDiscoveryDataClientMock => ({ getAttackDiscovery: jest.fn(), createAttackDiscovery: jest.fn(), + findAllAttackDiscoveries: jest.fn(), findAttackDiscoveryByConnectorId: jest.fn(), updateAttackDiscovery: jest.fn(), getReader: jest.fn(), diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/anonymization_fields/helpers.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/anonymization_fields/helpers.ts index 60375a918398c..9a4a3b6e1c0ce 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/anonymization_fields/helpers.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/anonymization_fields/helpers.ts @@ -11,7 +11,7 @@ import { AnonymizationFieldResponse, AnonymizationFieldUpdateProps, } from '@kbn/elastic-assistant-common/impl/schemas/anonymization_fields/bulk_crud_anonymization_fields_route.gen'; -import { AuthenticatedUser } from '@kbn/security-plugin-types-common'; +import { AuthenticatedUser } from '@kbn/core-security-common'; import { CreateAnonymizationFieldSchema, EsAnonymizationFieldsSchema, diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/attack_discovery/create_attack_discovery.test.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/attack_discovery/create_attack_discovery.test.ts index e8ccdbc1d25ca..6e9cc39597bd7 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/attack_discovery/create_attack_discovery.test.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/attack_discovery/create_attack_discovery.test.ts @@ -9,7 +9,7 @@ import { elasticsearchServiceMock } from '@kbn/core-elasticsearch-server-mocks'; import { createAttackDiscovery } from './create_attack_discovery'; import { AttackDiscoveryCreateProps, AttackDiscoveryResponse } from '@kbn/elastic-assistant-common'; -import { AuthenticatedUser } from '@kbn/security-plugin-types-common'; +import { AuthenticatedUser } from '@kbn/core-security-common'; import { getAttackDiscovery } from './get_attack_discovery'; import { loggerMock } from '@kbn/logging-mocks'; const mockEsClient = elasticsearchServiceMock.createElasticsearchClient(); diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/attack_discovery/create_attack_discovery.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/attack_discovery/create_attack_discovery.ts index 937c78e4b9eb1..7304ab3488529 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/attack_discovery/create_attack_discovery.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/attack_discovery/create_attack_discovery.ts @@ -6,10 +6,9 @@ */ import { v4 as uuidv4 } from 'uuid'; -import { ElasticsearchClient, Logger } from '@kbn/core/server'; +import { AuthenticatedUser, ElasticsearchClient, Logger } from '@kbn/core/server'; import { AttackDiscoveryCreateProps, AttackDiscoveryResponse } from '@kbn/elastic-assistant-common'; -import { AuthenticatedUser } from '@kbn/security-plugin-types-common'; import { getAttackDiscovery } from './get_attack_discovery'; import { CreateAttackDiscoverySchema } from './types'; @@ -96,6 +95,7 @@ export const transformToCreateScheme = ( timestamp: attackDiscovery.timestamp ?? createdAt, })), updated_at: createdAt, + last_viewed_at: createdAt, replacements: replacements ? Object.keys(replacements).map((key) => ({ uuid: key, diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/attack_discovery/field_maps_configuration.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/attack_discovery/field_maps_configuration.ts index 51773489c4d6b..6b3383337e2d6 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/attack_discovery/field_maps_configuration.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/attack_discovery/field_maps_configuration.ts @@ -32,15 +32,20 @@ export const attackDiscoveryFieldMap: FieldMap = { array: false, required: true, }, + last_viewed_at: { + type: 'date', + array: false, + required: true, + }, updated_at: { type: 'date', array: false, - required: false, + required: true, }, created_at: { type: 'date', array: false, - required: false, + required: true, }, attack_discoveries: { type: 'nested', diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/attack_discovery/find_all_attack_discoveries.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/attack_discovery/find_all_attack_discoveries.ts new file mode 100644 index 0000000000000..e80d1e4589838 --- /dev/null +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/attack_discovery/find_all_attack_discoveries.ts @@ -0,0 +1,64 @@ +/* + * 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 { ElasticsearchClient, Logger } from '@kbn/core/server'; +import { AttackDiscoveryResponse } from '@kbn/elastic-assistant-common'; +import { AuthenticatedUser } from '@kbn/security-plugin/common'; +import { EsAttackDiscoverySchema } from './types'; +import { transformESSearchToAttackDiscovery } from './transforms'; +const MAX_ITEMS = 10000; +export interface FindAllAttackDiscoveriesParams { + esClient: ElasticsearchClient; + logger: Logger; + attackDiscoveryIndex: string; + user: AuthenticatedUser; +} + +export const findAllAttackDiscoveries = async ({ + esClient, + logger, + attackDiscoveryIndex, + user, +}: FindAllAttackDiscoveriesParams): Promise => { + const filterByUser = [ + { + nested: { + path: 'users', + query: { + bool: { + must: [ + { + match: user.profile_uid + ? { 'users.id': user.profile_uid } + : { 'users.name': user.username }, + }, + ], + }, + }, + }, + }, + ]; + try { + const response = await esClient.search({ + query: { + bool: { + must: [...filterByUser], + }, + }, + size: MAX_ITEMS, + _source: true, + ignore_unavailable: true, + index: attackDiscoveryIndex, + seq_no_primary_term: true, + }); + const attackDiscoveries = transformESSearchToAttackDiscovery(response); + return attackDiscoveries ?? []; + } catch (err) { + logger.error(`Error fetching attack discoveries: ${err}`); + throw err; + } +}; diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/attack_discovery/find_attack_discovery_by_connector_id.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/attack_discovery/find_attack_discovery_by_connector_id.ts index 28a99cb644951..532c35ac89c05 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/attack_discovery/find_attack_discovery_by_connector_id.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/attack_discovery/find_attack_discovery_by_connector_id.ts @@ -5,9 +5,8 @@ * 2.0. */ -import { ElasticsearchClient, Logger } from '@kbn/core/server'; +import { AuthenticatedUser, ElasticsearchClient, Logger } from '@kbn/core/server'; import { AttackDiscoveryResponse } from '@kbn/elastic-assistant-common'; -import { AuthenticatedUser } from '@kbn/security-plugin/common'; import { EsAttackDiscoverySchema } from './types'; import { transformESSearchToAttackDiscovery } from './transforms'; diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/attack_discovery/get_attack_discovery.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/attack_discovery/get_attack_discovery.ts index 57d4e167d2fa9..d0cf6fd19ae05 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/attack_discovery/get_attack_discovery.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/attack_discovery/get_attack_discovery.ts @@ -5,9 +5,8 @@ * 2.0. */ -import { ElasticsearchClient, Logger } from '@kbn/core/server'; +import { AuthenticatedUser, ElasticsearchClient, Logger } from '@kbn/core/server'; import { AttackDiscoveryResponse } from '@kbn/elastic-assistant-common'; -import { AuthenticatedUser } from '@kbn/security-plugin/common'; import { EsAttackDiscoverySchema } from './types'; import { transformESSearchToAttackDiscovery } from './transforms'; diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/attack_discovery/index.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/attack_discovery/index.ts index b8b1ef12b668c..ca053743c8035 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/attack_discovery/index.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/attack_discovery/index.ts @@ -11,6 +11,7 @@ import { AttackDiscoveryResponse, } from '@kbn/elastic-assistant-common'; import { AuthenticatedUser } from '@kbn/core-security-common'; +import { findAllAttackDiscoveries } from './find_all_attack_discoveries'; import { findAttackDiscoveryByConnectorId } from './find_attack_discovery_by_connector_id'; import { updateAttackDiscovery } from './update_attack_discovery'; import { createAttackDiscovery } from './create_attack_discovery'; @@ -78,7 +79,7 @@ export class AttackDiscoveryDataClient extends AIAssistantDataClient { * @param options * @param options.connectorId * @param options.authenticatedUser - * @returns The Attack Discovery created + * @returns The Attack Discovery found */ public findAttackDiscoveryByConnectorId = async ({ connectorId, @@ -97,6 +98,26 @@ export class AttackDiscoveryDataClient extends AIAssistantDataClient { }); }; + /** + * Finds all attack discovery for authenticated user + * @param options + * @param options.authenticatedUser + * @returns The Attack Discovery + */ + public findAllAttackDiscoveries = async ({ + authenticatedUser, + }: { + authenticatedUser: AuthenticatedUser; + }): Promise => { + const esClient = await this.options.elasticsearchClientPromise; + return findAllAttackDiscoveries({ + esClient, + logger: this.options.logger, + attackDiscoveryIndex: this.indexTemplateAndPattern.alias, + user: authenticatedUser, + }); + }; + /** * Updates an attack discovery * @param options diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/attack_discovery/transforms.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/attack_discovery/transforms.ts index d23757fd053d0..d9a37582f48b0 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/attack_discovery/transforms.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/attack_discovery/transforms.ts @@ -24,6 +24,7 @@ export const transformESSearchToAttackDiscovery = ( backingIndex: hit._index, createdAt: adSchema.created_at, updatedAt: adSchema.updated_at, + lastViewedAt: adSchema.last_viewed_at, users: adSchema.users?.map((user) => ({ id: user.id, diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/attack_discovery/types.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/attack_discovery/types.ts index 6257be7f82431..4a17c50e06af4 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/attack_discovery/types.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/attack_discovery/types.ts @@ -34,7 +34,8 @@ export interface EsAttackDiscoverySchema { alerts_context_count?: number; replacements?: EsReplacementSchema[]; status: AttackDiscoveryStatus; - updated_at?: string; + updated_at: string; + last_viewed_at: string; users?: Array<{ id?: string; name?: string; @@ -71,6 +72,7 @@ export interface CreateAttackDiscoverySchema { id?: string; name?: string; }>; - updated_at?: string; + updated_at: string; + last_viewed_at: string; namespace: string; } diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/attack_discovery/update_attack_discovery.test.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/attack_discovery/update_attack_discovery.test.ts index df8615d0336cf..24deda445f320 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/attack_discovery/update_attack_discovery.test.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/attack_discovery/update_attack_discovery.test.ts @@ -14,7 +14,7 @@ import { AttackDiscoveryStatus, AttackDiscoveryUpdateProps, } from '@kbn/elastic-assistant-common'; -import { AuthenticatedUser } from '@kbn/security-plugin/common'; +import { AuthenticatedUser } from '@kbn/core-security-common'; jest.mock('./get_attack_discovery'); const mockEsClient = elasticsearchServiceMock.createElasticsearchClient(); const mockLogger = loggerMock.create(); @@ -68,6 +68,7 @@ const existingAttackDiscovery: AttackDiscoveryResponse = { connectorId: 'my-gpt4o-ai', }, attackDiscoveries: [], + lastViewedAt: '2024-06-07T21:19:08.090Z', updatedAt: '2024-06-07T21:19:08.090Z', replacements: { 'f19e1a0a-de3b-496c-8ace-dd91229e1084': 'root', diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/attack_discovery/update_attack_discovery.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/attack_discovery/update_attack_discovery.ts index 8db6a2ed2968a..73a386bbb4362 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/attack_discovery/update_attack_discovery.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/attack_discovery/update_attack_discovery.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { ElasticsearchClient, Logger } from '@kbn/core/server'; +import { AuthenticatedUser, ElasticsearchClient, Logger } from '@kbn/core/server'; import { AttackDiscoveryResponse, AttackDiscoveryStatus, @@ -13,7 +13,6 @@ import { Provider, UUID, } from '@kbn/elastic-assistant-common'; -import { AuthenticatedUser } from '@kbn/security-plugin/common'; import * as uuid from 'uuid'; import { EsReplacementSchema } from '../conversations/types'; import { getAttackDiscovery } from './get_attack_discovery'; @@ -42,8 +41,9 @@ export interface UpdateAttackDiscoverySchema { average_interval_ms?: number; generation_intervals?: Array<{ date: string; duration_ms: number }>; replacements?: EsReplacementSchema[]; - status: AttackDiscoveryStatus; + status?: AttackDiscoveryStatus; updated_at?: string; + last_viewed_at?: string; failure_reason?: string; } @@ -97,6 +97,7 @@ export const transformToUpdateScheme = ( generationIntervals, id, replacements, + lastViewedAt, status, }: AttackDiscoveryUpdateProps ): UpdateAttackDiscoverySchema => { @@ -148,8 +149,9 @@ export const transformToUpdateScheme = ( value: replacements[key], })) : undefined, - status, - updated_at: updatedAt, + ...(status ? { status } : {}), + // only update updated_at time if this is not an update to last_viewed_at + ...(lastViewedAt ? { last_viewed_at: lastViewedAt } : { updated_at: updatedAt }), ...averageIntervalMsObj, }; }; diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/create_conversation.test.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/create_conversation.test.ts index 624eab7d30bbd..6fba2f9c8b606 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/create_conversation.test.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/create_conversation.test.ts @@ -12,7 +12,7 @@ import { estypes } from '@elastic/elasticsearch'; import { EsConversationSchema } from './types'; import { getConversation } from './get_conversation'; import { ConversationCreateProps, ConversationResponse } from '@kbn/elastic-assistant-common'; -import { AuthenticatedUser } from '@kbn/security-plugin-types-common'; +import { AuthenticatedUser } from '@kbn/core-security-common'; jest.mock('./get_conversation', () => ({ getConversation: jest.fn(), diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/create_conversation.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/create_conversation.ts index 0a5472e79b12c..b98b8a1f4cc27 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/create_conversation.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/create_conversation.ts @@ -6,14 +6,13 @@ */ import { v4 as uuidv4 } from 'uuid'; -import { ElasticsearchClient, Logger } from '@kbn/core/server'; +import { AuthenticatedUser, ElasticsearchClient, Logger } from '@kbn/core/server'; import { ConversationCategoryEnum, ConversationCreateProps, ConversationResponse, } from '@kbn/elastic-assistant-common'; -import { AuthenticatedUser } from '@kbn/security-plugin-types-common'; import { getConversation } from './get_conversation'; import { CreateMessageSchema } from './types'; diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/get_conversation.test.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/get_conversation.test.ts index 1c1dd0c2fdb24..a5a292c096cdc 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/get_conversation.test.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/get_conversation.test.ts @@ -5,14 +5,13 @@ * 2.0. */ -import type { Logger } from '@kbn/core/server'; +import type { AuthenticatedUser, Logger } from '@kbn/core/server'; import { elasticsearchClientMock } from '@kbn/core-elasticsearch-client-server-mocks'; import { getConversation } from './get_conversation'; import { estypes } from '@elastic/elasticsearch'; import { EsConversationSchema } from './types'; import { loggingSystemMock } from '@kbn/core-logging-server-mocks'; import { ConversationResponse } from '@kbn/elastic-assistant-common'; -import { AuthenticatedUser } from '@kbn/security-plugin-types-common'; export const getConversationResponseMock = (): ConversationResponse => ({ createdAt: '2020-04-20T15:25:31.830Z', diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/get_conversation.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/get_conversation.ts index 7d011c9f21433..c4e40caa6654b 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/get_conversation.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/get_conversation.ts @@ -5,9 +5,8 @@ * 2.0. */ -import { ElasticsearchClient, Logger } from '@kbn/core/server'; +import { AuthenticatedUser, ElasticsearchClient, Logger } from '@kbn/core/server'; import { ConversationResponse } from '@kbn/elastic-assistant-common'; -import { AuthenticatedUser } from '@kbn/security-plugin/common'; import { EsConversationSchema } from './types'; import { transformESSearchToConversations } from './transforms'; diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/index.test.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/index.test.ts index 38426dd06a36f..c177ea261ad90 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/index.test.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/index.test.ts @@ -7,7 +7,7 @@ import { elasticsearchServiceMock, loggingSystemMock } from '@kbn/core/server/mocks'; import type { UpdateByQueryRequest } from '@elastic/elasticsearch/lib/api/types'; import { AIAssistantConversationsDataClient } from '.'; -import { AuthenticatedUser } from '@kbn/security-plugin/server'; +import { AuthenticatedUser } from '@kbn/core-security-common'; import { getUpdateConversationSchemaMock } from '../../__mocks__/conversations_schema.mock'; import { AIAssistantDataClientParams } from '..'; diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/index.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/index.ts index c937e86a982f6..72c51d8f917aa 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/index.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/index.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { AuthenticatedUser } from '@kbn/security-plugin/server'; +import { AuthenticatedUser } from '@kbn/core-security-common'; import { ConversationCreateProps, ConversationResponse, diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/update_conversation.test.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/update_conversation.test.ts index f106a1f3bf7f5..d3e4fff018abb 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/update_conversation.test.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/update_conversation.test.ts @@ -14,7 +14,7 @@ import { } from './update_conversation'; import { getConversation } from './get_conversation'; import { ConversationResponse, ConversationUpdateProps } from '@kbn/elastic-assistant-common'; -import { AuthenticatedUser } from '@kbn/security-plugin-types-common'; +import { AuthenticatedUser } from '@kbn/core-security-common'; export const getUpdateConversationOptionsMock = (): ConversationUpdateProps => ({ id: 'test', diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/update_conversation.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/update_conversation.ts index 30888ea219401..47a9594f42cab 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/update_conversation.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/update_conversation.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { ElasticsearchClient, Logger } from '@kbn/core/server'; +import { AuthenticatedUser, ElasticsearchClient, Logger } from '@kbn/core/server'; import { ConversationResponse, Reader, @@ -15,7 +15,6 @@ import { ConversationSummary, UUID, } from '@kbn/elastic-assistant-common'; -import { AuthenticatedUser } from '@kbn/security-plugin/common'; import { getConversation } from './get_conversation'; import { getUpdateScript } from './helpers'; import { EsReplacementSchema } from './types'; diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/index.test.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/index.test.ts index 4838c70882f19..d6910f67f1167 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/index.test.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/index.test.ts @@ -6,7 +6,7 @@ */ import { elasticsearchServiceMock, loggingSystemMock } from '@kbn/core/server/mocks'; import { AIAssistantDataClient, AIAssistantDataClientParams } from '.'; -import { AuthenticatedUser } from '@kbn/security-plugin/server'; +import { AuthenticatedUser } from '@kbn/core-security-common'; const date = '2023-03-28T22:27:28.159Z'; let logger: ReturnType; diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/index.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/index.ts index 5bc84e05c8087..9c88765863724 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/index.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/index.ts @@ -5,11 +5,10 @@ * 2.0. */ -import { ElasticsearchClient, Logger } from '@kbn/core/server'; +import { AuthenticatedUser, ElasticsearchClient, Logger } from '@kbn/core/server'; import { DEFAULT_NAMESPACE_STRING } from '@kbn/core-saved-objects-utils-server'; import { ESSearchRequest, ESSearchResponse } from '@kbn/es-types'; -import { AuthenticatedUser } from '@kbn/security-plugin/server'; import { estypes } from '@elastic/elasticsearch'; import { IIndexPatternString } from '../types'; import { getIndexTemplateAndPattern } from '../lib/data_stream/helpers'; diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/create_knowledge_base_entry.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/create_knowledge_base_entry.ts index 90c0850c503fe..97060a0f48aa6 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/create_knowledge_base_entry.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/create_knowledge_base_entry.ts @@ -6,13 +6,12 @@ */ import { v4 as uuidv4 } from 'uuid'; -import { ElasticsearchClient, Logger } from '@kbn/core/server'; +import { AuthenticatedUser, ElasticsearchClient, Logger } from '@kbn/core/server'; import { KnowledgeBaseEntryCreateProps, KnowledgeBaseEntryResponse, } from '@kbn/elastic-assistant-common'; -import { AuthenticatedUser } from '@kbn/security-plugin-types-common'; import { getKnowledgeBaseEntry } from './get_knowledge_base_entry'; import { CreateKnowledgeBaseEntrySchema } from './types'; diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/get_knowledge_base_entry.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/get_knowledge_base_entry.ts index c021e022765d0..7820abfbcfe25 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/get_knowledge_base_entry.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/get_knowledge_base_entry.ts @@ -5,9 +5,8 @@ * 2.0. */ -import { ElasticsearchClient, Logger } from '@kbn/core/server'; +import { AuthenticatedUser, ElasticsearchClient, Logger } from '@kbn/core/server'; import { KnowledgeBaseEntryResponse } from '@kbn/elastic-assistant-common'; -import { AuthenticatedUser } from '@kbn/security-plugin/common'; import { EsKnowledgeBaseEntrySchema } from './types'; import { transformESSearchToKnowledgeBaseEntry } from './transforms'; diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/prompts/helpers.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/prompts/helpers.ts index 3a64dc8bb3252..83d7713c23f1f 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/prompts/helpers.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/prompts/helpers.ts @@ -11,7 +11,7 @@ import { PromptResponse, PromptUpdateProps, } from '@kbn/elastic-assistant-common/impl/schemas/prompts/bulk_crud_prompts_route.gen'; -import { AuthenticatedUser } from '@kbn/security-plugin-types-common'; +import { AuthenticatedUser } from '@kbn/core-security-common'; import { CreatePromptSchema, EsPromptsSchema, UpdatePromptSchema } from './types'; export const transformESToPrompts = (response: EsPromptsSchema[]): PromptResponse[] => { diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_service/index.test.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_service/index.test.ts index adf31630fdf04..b9079c59a0643 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_service/index.test.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_service/index.test.ts @@ -10,7 +10,7 @@ import { IndicesGetDataStreamResponse } from '@elastic/elasticsearch/lib/api/typ import { errors as EsErrors } from '@elastic/elasticsearch'; import { ReplaySubject, Subject } from 'rxjs'; import { taskManagerMock } from '@kbn/task-manager-plugin/server/mocks'; -import { AuthenticatedUser } from '@kbn/security-plugin/server'; +import { AuthenticatedUser } from '@kbn/core-security-common'; import { DEFAULT_NAMESPACE_STRING } from '@kbn/core-saved-objects-utils-server'; import { conversationsDataClientMock } from '../__mocks__/data_clients.mock'; import { AIAssistantConversationsDataClient } from '../ai_assistant_data_clients/conversations'; diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_service/index.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_service/index.ts index 351508da01a5a..02d54ef31ab75 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_service/index.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_service/index.ts @@ -7,10 +7,9 @@ import { DataStreamSpacesAdapter, FieldMap } from '@kbn/data-stream-adapter'; import { DEFAULT_NAMESPACE_STRING } from '@kbn/core-saved-objects-utils-server'; -import type { Logger, ElasticsearchClient } from '@kbn/core/server'; +import type { AuthenticatedUser, Logger, ElasticsearchClient } from '@kbn/core/server'; import type { TaskManagerSetupContract } from '@kbn/task-manager-plugin/server'; import type { MlPluginSetup } from '@kbn/ml-plugin/server'; -import { AuthenticatedUser } from '@kbn/security-plugin/server'; import { Subject } from 'rxjs'; import { attackDiscoveryFieldMap } from '../ai_assistant_data_clients/attack_discovery/field_maps_configuration'; import { getDefaultAnonymizationFields } from '../../common/anonymization'; diff --git a/x-pack/plugins/elastic_assistant/server/lib/data_stream/documents_data_writer.test.ts b/x-pack/plugins/elastic_assistant/server/lib/data_stream/documents_data_writer.test.ts index ed6edae590c99..35653878fa2d2 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/data_stream/documents_data_writer.test.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/data_stream/documents_data_writer.test.ts @@ -5,13 +5,12 @@ * 2.0. */ -import type { ElasticsearchClient, Logger } from '@kbn/core/server'; +import type { AuthenticatedUser, ElasticsearchClient, Logger } from '@kbn/core/server'; import { loggingSystemMock, elasticsearchServiceMock } from '@kbn/core/server/mocks'; import { getCreateConversationSchemaMock, getUpdateConversationSchemaMock, } from '../../__mocks__/conversations_schema.mock'; -import { AuthenticatedUser } from '@kbn/security-plugin-types-common'; import { DocumentsDataWriter } from './documents_data_writer'; describe('DocumentsDataWriter', () => { diff --git a/x-pack/plugins/elastic_assistant/server/lib/data_stream/documents_data_writer.ts b/x-pack/plugins/elastic_assistant/server/lib/data_stream/documents_data_writer.ts index 3cae3972c8bf6..2b8e7237435ba 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/data_stream/documents_data_writer.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/data_stream/documents_data_writer.ts @@ -11,9 +11,8 @@ import type { BulkResponseItem, Script, } from '@elastic/elasticsearch/lib/api/types'; -import type { Logger, ElasticsearchClient } from '@kbn/core/server'; +import type { AuthenticatedUser, Logger, ElasticsearchClient } from '@kbn/core/server'; import { UUID } from '@kbn/elastic-assistant-common'; -import { AuthenticatedUser } from '@kbn/security-plugin-types-common'; export interface BulkOperationError { message: string; diff --git a/x-pack/plugins/elastic_assistant/server/routes/anonymization_fields/bulk_actions_route.test.ts b/x-pack/plugins/elastic_assistant/server/routes/anonymization_fields/bulk_actions_route.test.ts index 769bd069cb040..e8055de3b12b9 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/anonymization_fields/bulk_actions_route.test.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/anonymization_fields/bulk_actions_route.test.ts @@ -14,7 +14,7 @@ import { getEmptyFindResult, getFindAnonymizationFieldsResultWithSingleHit, } from '../../__mocks__/response'; -import { AuthenticatedUser } from '@kbn/security-plugin-types-common'; +import { AuthenticatedUser } from '@kbn/core-security-common'; import { bulkActionAnonymizationFieldsRoute } from './bulk_actions_route'; import { getAnonymizationFieldMock, diff --git a/x-pack/plugins/elastic_assistant/server/routes/attack_discovery/get_attack_discovery.test.ts b/x-pack/plugins/elastic_assistant/server/routes/attack_discovery/get_attack_discovery.test.ts index ad5d3c4bb8d1b..74cf160c43ffe 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/attack_discovery/get_attack_discovery.test.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/attack_discovery/get_attack_discovery.test.ts @@ -15,8 +15,45 @@ import { AttackDiscoveryDataClient } from '../../ai_assistant_data_clients/attac import { transformESSearchToAttackDiscovery } from '../../ai_assistant_data_clients/attack_discovery/transforms'; import { getAttackDiscoverySearchEsMock } from '../../__mocks__/attack_discovery_schema.mock'; import { getAttackDiscoveryRequest } from '../../__mocks__/request'; +import { getAttackDiscoveryStats, updateAttackDiscoveryLastViewedAt } from './helpers'; jest.mock('./helpers'); +const mockStats = { + newConnectorResultsCount: 2, + newDiscoveriesCount: 4, + statsPerConnector: [ + { + hasViewed: false, + status: 'failed', + count: 0, + connectorId: 'my-bedrock-old', + }, + { + hasViewed: false, + status: 'running', + count: 1, + connectorId: 'my-gen-ai', + }, + { + hasViewed: true, + status: 'succeeded', + count: 1, + connectorId: 'my-gpt4o-ai', + }, + { + hasViewed: true, + status: 'canceled', + count: 1, + connectorId: 'my-bedrock', + }, + { + hasViewed: false, + status: 'succeeded', + count: 4, + connectorId: 'my-gen-a2i', + }, + ], +}; const { clients, context } = requestContextMock.createTools(); const server: ReturnType = serverMock.create(); clients.core.elasticsearch.client = elasticsearchServiceMock.createScopedClusterClient(); @@ -28,9 +65,8 @@ const mockUser = { name: 'my_realm_name', }, } as AuthenticatedUser; -const findAttackDiscoveryByConnectorId = jest.fn(); const mockDataClient = { - findAttackDiscoveryByConnectorId, + findAttackDiscoveryByConnectorId: jest.fn(), updateAttackDiscovery: jest.fn(), createAttackDiscovery: jest.fn(), getAttackDiscovery: jest.fn(), @@ -43,7 +79,8 @@ describe('getAttackDiscoveryRoute', () => { context.elasticAssistant.getAttackDiscoveryDataClient.mockResolvedValue(mockDataClient); getAttackDiscoveryRoute(server.router); - findAttackDiscoveryByConnectorId.mockResolvedValue(mockCurrentAd); + (updateAttackDiscoveryLastViewedAt as jest.Mock).mockResolvedValue(mockCurrentAd); + (getAttackDiscoveryStats as jest.Mock).mockResolvedValue(mockStats); }); it('should handle successful request', async () => { @@ -54,7 +91,7 @@ describe('getAttackDiscoveryRoute', () => { expect(response.status).toEqual(200); expect(response.body).toEqual({ data: mockCurrentAd, - entryExists: true, + stats: mockStats, }); }); @@ -87,19 +124,19 @@ describe('getAttackDiscoveryRoute', () => { }); it('should handle findAttackDiscoveryByConnectorId null response', async () => { - findAttackDiscoveryByConnectorId.mockResolvedValue(null); + (updateAttackDiscoveryLastViewedAt as jest.Mock).mockResolvedValue(null); const response = await server.inject( getAttackDiscoveryRequest('connector-id'), requestContextMock.convertContext(context) ); expect(response.status).toEqual(200); expect(response.body).toEqual({ - entryExists: false, + stats: mockStats, }); }); it('should handle findAttackDiscoveryByConnectorId error', async () => { - findAttackDiscoveryByConnectorId.mockRejectedValue(new Error('Oh no!')); + (updateAttackDiscoveryLastViewedAt as jest.Mock).mockRejectedValue(new Error('Oh no!')); const response = await server.inject( getAttackDiscoveryRequest('connector-id'), requestContextMock.convertContext(context) diff --git a/x-pack/plugins/elastic_assistant/server/routes/attack_discovery/get_attack_discovery.ts b/x-pack/plugins/elastic_assistant/server/routes/attack_discovery/get_attack_discovery.ts index 6f3a46130357b..09b2df98fe090 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/attack_discovery/get_attack_discovery.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/attack_discovery/get_attack_discovery.ts @@ -14,6 +14,7 @@ import { } from '@kbn/elastic-assistant-common'; import { transformError } from '@kbn/securitysolution-es-utils'; +import { updateAttackDiscoveryLastViewedAt, getAttackDiscoveryStats } from './helpers'; import { ATTACK_DISCOVERY_BY_CONNECTOR_ID } from '../../../common/constants'; import { buildResponse } from '../../lib/build_response'; import { ElasticAssistantRequestHandlerContext } from '../../types'; @@ -62,20 +63,24 @@ export const getAttackDiscoveryRoute = (router: IRouter { }); }); }); + describe('getAttackDiscoveryStats', () => { + const mockDiscoveries = [ + { + timestamp: '2024-06-13T17:55:11.360Z', + id: '8abb49bd-2f5d-43d2-bc2f-dd3c3cab25ad', + backingIndex: '.ds-.kibana-elastic-ai-assistant-attack-discovery-default-2024.06.12-000001', + createdAt: '2024-06-13T17:55:11.360Z', + updatedAt: '2024-06-17T20:47:57.556Z', + lastViewedAt: '2024-06-17T20:47:57.556Z', + users: [mockAuthenticatedUser], + namespace: 'default', + status: 'failed', + alertsContextCount: undefined, + apiConfig: { + connectorId: 'my-bedrock-old', + actionTypeId: '.bedrock', + defaultSystemPromptId: undefined, + model: undefined, + provider: undefined, + }, + attackDiscoveries: [], + replacements: {}, + generationIntervals: mockCurrentAd.generationIntervals, + averageIntervalMs: mockCurrentAd.averageIntervalMs, + failureReason: + 'ActionsClientLlm: action result status is error: an error occurred while running the action - Response validation failed (Error: [usage.input_tokens]: expected value of type [number] but got [undefined])', + }, + { + timestamp: '2024-06-13T17:55:11.360Z', + id: '9abb49bd-2f5d-43d2-bc2f-dd3c3cab25ad', + backingIndex: '.ds-.kibana-elastic-ai-assistant-attack-discovery-default-2024.06.12-000001', + createdAt: '2024-06-13T17:55:11.360Z', + updatedAt: '2024-06-17T20:47:57.556Z', + lastViewedAt: '2024-06-17T20:46:57.556Z', + users: [mockAuthenticatedUser], + namespace: 'default', + status: 'failed', + alertsContextCount: undefined, + apiConfig: { + connectorId: 'my-bedrock-old', + actionTypeId: '.bedrock', + defaultSystemPromptId: undefined, + model: undefined, + provider: undefined, + }, + attackDiscoveries: [], + replacements: {}, + generationIntervals: mockCurrentAd.generationIntervals, + averageIntervalMs: mockCurrentAd.averageIntervalMs, + failureReason: + 'ActionsClientLlm: action result status is error: an error occurred while running the action - Response validation failed (Error: [usage.input_tokens]: expected value of type [number] but got [undefined])', + }, + { + timestamp: '2024-06-12T19:54:50.428Z', + id: '745e005b-7248-4c08-b8b6-4cad263b4be0', + backingIndex: '.ds-.kibana-elastic-ai-assistant-attack-discovery-default-2024.06.12-000001', + createdAt: '2024-06-12T19:54:50.428Z', + updatedAt: '2024-06-17T20:47:27.182Z', + lastViewedAt: '2024-06-17T20:27:27.182Z', + users: [mockAuthenticatedUser], + namespace: 'default', + status: 'running', + alertsContextCount: 20, + apiConfig: { + connectorId: 'my-gen-ai', + actionTypeId: '.gen-ai', + defaultSystemPromptId: undefined, + model: undefined, + provider: undefined, + }, + attackDiscoveries: mockCurrentAd.attackDiscoveries, + replacements: {}, + generationIntervals: mockCurrentAd.generationIntervals, + averageIntervalMs: mockCurrentAd.averageIntervalMs, + failureReason: undefined, + }, + { + timestamp: '2024-06-13T17:50:59.409Z', + id: 'f48da2ca-b63e-4387-82d7-1423a68500aa', + backingIndex: '.ds-.kibana-elastic-ai-assistant-attack-discovery-default-2024.06.12-000001', + createdAt: '2024-06-13T17:50:59.409Z', + updatedAt: '2024-06-17T20:47:59.969Z', + lastViewedAt: '2024-06-17T20:47:35.227Z', + users: [mockAuthenticatedUser], + namespace: 'default', + status: 'succeeded', + alertsContextCount: 20, + apiConfig: { + connectorId: 'my-gpt4o-ai', + actionTypeId: '.gen-ai', + defaultSystemPromptId: undefined, + model: undefined, + provider: undefined, + }, + attackDiscoveries: mockCurrentAd.attackDiscoveries, + replacements: {}, + generationIntervals: mockCurrentAd.generationIntervals, + averageIntervalMs: mockCurrentAd.averageIntervalMs, + failureReason: undefined, + }, + { + timestamp: '2024-06-12T21:18:56.377Z', + id: '82fced1d-de48-42db-9f56-e45122dee017', + backingIndex: '.ds-.kibana-elastic-ai-assistant-attack-discovery-default-2024.06.12-000001', + createdAt: '2024-06-12T21:18:56.377Z', + updatedAt: '2024-06-17T20:47:39.372Z', + lastViewedAt: '2024-06-17T20:47:39.372Z', + users: [mockAuthenticatedUser], + namespace: 'default', + status: 'canceled', + alertsContextCount: 20, + apiConfig: { + connectorId: 'my-bedrock', + actionTypeId: '.bedrock', + defaultSystemPromptId: undefined, + model: undefined, + provider: undefined, + }, + attackDiscoveries: mockCurrentAd.attackDiscoveries, + replacements: {}, + generationIntervals: mockCurrentAd.generationIntervals, + averageIntervalMs: mockCurrentAd.averageIntervalMs, + failureReason: undefined, + }, + { + timestamp: '2024-06-12T16:44:23.107Z', + id: 'a4709094-6116-484b-b096-1e8d151cb4b7', + backingIndex: '.ds-.kibana-elastic-ai-assistant-attack-discovery-default-2024.06.12-000001', + createdAt: '2024-06-12T16:44:23.107Z', + updatedAt: '2024-06-17T20:48:16.961Z', + lastViewedAt: '2024-06-17T20:47:16.961Z', + users: [mockAuthenticatedUser], + namespace: 'default', + status: 'succeeded', + alertsContextCount: 0, + apiConfig: { + connectorId: 'my-gen-a2i', + actionTypeId: '.gen-ai', + defaultSystemPromptId: undefined, + model: undefined, + provider: undefined, + }, + attackDiscoveries: [ + ...mockCurrentAd.attackDiscoveries, + ...mockCurrentAd.attackDiscoveries, + ...mockCurrentAd.attackDiscoveries, + ...mockCurrentAd.attackDiscoveries, + ], + replacements: {}, + generationIntervals: mockCurrentAd.generationIntervals, + averageIntervalMs: mockCurrentAd.averageIntervalMs, + failureReason: 'steph threw an error', + }, + ]; + beforeEach(() => { + findAllAttackDiscoveries.mockResolvedValue(mockDiscoveries); + }); + it('returns the formatted stats object', async () => { + const stats = await getAttackDiscoveryStats({ + authenticatedUser: mockAuthenticatedUser, + dataClient: mockDataClient, + }); + expect(stats).toEqual([ + { + hasViewed: true, + status: 'failed', + count: 0, + connectorId: 'my-bedrock-old', + }, + { + hasViewed: false, + status: 'failed', + count: 0, + connectorId: 'my-bedrock-old', + }, + { + hasViewed: false, + status: 'running', + count: 1, + connectorId: 'my-gen-ai', + }, + { + hasViewed: false, + status: 'succeeded', + count: 1, + connectorId: 'my-gpt4o-ai', + }, + { + hasViewed: true, + status: 'canceled', + count: 1, + connectorId: 'my-bedrock', + }, + { + hasViewed: false, + status: 'succeeded', + count: 4, + connectorId: 'my-gen-a2i', + }, + ]); + }); + }); }); diff --git a/x-pack/plugins/elastic_assistant/server/routes/attack_discovery/helpers.ts b/x-pack/plugins/elastic_assistant/server/routes/attack_discovery/helpers.ts index 9dca7ee46cbda..c3665d1583a3f 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/attack_discovery/helpers.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/attack_discovery/helpers.ts @@ -12,6 +12,7 @@ import { AttackDiscovery, AttackDiscoveryPostRequestBody, AttackDiscoveryResponse, + AttackDiscoveryStat, AttackDiscoveryStatus, ExecuteConnectorRequestBody, GenerationInterval, @@ -414,3 +415,58 @@ export const getAssistantTool = (getRegisteredTools: GetRegisteredTools, pluginN const assistantTools = getRegisteredTools(pluginName); return assistantTools.find((tool) => tool.id === 'attack-discovery'); }; + +export const updateAttackDiscoveryLastViewedAt = async ({ + connectorId, + authenticatedUser, + dataClient, +}: { + connectorId: string; + authenticatedUser: AuthenticatedUser; + dataClient: AttackDiscoveryDataClient; +}): Promise => { + const attackDiscovery = await dataClient.findAttackDiscoveryByConnectorId({ + connectorId, + authenticatedUser, + }); + + if (attackDiscovery == null) { + return null; + } + + // update lastViewedAt time as this is the function used for polling by connectorId + return dataClient.updateAttackDiscovery({ + attackDiscoveryUpdateProps: { + id: attackDiscovery.id, + lastViewedAt: new Date().toISOString(), + backingIndex: attackDiscovery.backingIndex, + }, + authenticatedUser, + }); +}; + +export const getAttackDiscoveryStats = async ({ + authenticatedUser, + dataClient, +}: { + authenticatedUser: AuthenticatedUser; + dataClient: AttackDiscoveryDataClient; +}): Promise => { + const attackDiscoveries = await dataClient.findAllAttackDiscoveries({ + authenticatedUser, + }); + + return attackDiscoveries.map((ad) => { + const updatedAt = moment(ad.updatedAt); + const lastViewedAt = moment(ad.lastViewedAt); + const timeSinceLastViewed = updatedAt.diff(lastViewedAt); + const hasViewed = timeSinceLastViewed <= 0; + const discoveryCount = ad.attackDiscoveries.length; + return { + hasViewed, + status: ad.status, + count: discoveryCount, + connectorId: ad.apiConfig.connectorId, + }; + }); +}; diff --git a/x-pack/plugins/elastic_assistant/server/routes/prompts/bulk_actions_route.test.ts b/x-pack/plugins/elastic_assistant/server/routes/prompts/bulk_actions_route.test.ts index 9d5ba91abdaf4..3ae236f12902f 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/prompts/bulk_actions_route.test.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/prompts/bulk_actions_route.test.ts @@ -11,7 +11,7 @@ import { requestContextMock } from '../../__mocks__/request_context'; import { getPromptsBulkActionRequest, requestMock } from '../../__mocks__/request'; import { ELASTIC_AI_ASSISTANT_PROMPTS_URL_BULK_ACTION } from '@kbn/elastic-assistant-common'; import { getEmptyFindResult, getFindPromptsResultWithSingleHit } from '../../__mocks__/response'; -import { AuthenticatedUser } from '@kbn/security-plugin-types-common'; +import { AuthenticatedUser } from '@kbn/core-security-common'; import { bulkPromptsRoute } from './bulk_actions_route'; import { getCreatePromptSchemaMock, diff --git a/x-pack/plugins/elastic_assistant/server/routes/request_context_factory.ts b/x-pack/plugins/elastic_assistant/server/routes/request_context_factory.ts index 1bfdf33fdb146..75b05dced83ec 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/request_context_factory.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/request_context_factory.ts @@ -56,7 +56,7 @@ export class RequestContextFactory implements IRequestContextFactory { const getSpaceId = (): string => startPlugins.spaces?.spacesService?.getSpaceId(request) || DEFAULT_NAMESPACE_STRING; - const getCurrentUser = () => startPlugins.security?.authc.getCurrentUser(request); + const getCurrentUser = () => coreContext.security.authc.getCurrentUser(); return { core: coreContext, diff --git a/x-pack/plugins/elastic_assistant/server/routes/user_conversations/append_conversation_messages_route.test.ts b/x-pack/plugins/elastic_assistant/server/routes/user_conversations/append_conversation_messages_route.test.ts index 3fbb83534b1dd..39c25ac6749e9 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/user_conversations/append_conversation_messages_route.test.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/user_conversations/append_conversation_messages_route.test.ts @@ -15,7 +15,7 @@ import { getUpdateConversationSchemaMock, } from '../../__mocks__/conversations_schema.mock'; import { appendConversationMessageRoute } from './append_conversation_messages_route'; -import { AuthenticatedUser } from '@kbn/security-plugin-types-common'; +import { AuthenticatedUser } from '@kbn/core-security-common'; describe('Append conversation messages route', () => { let server: ReturnType; diff --git a/x-pack/plugins/elastic_assistant/server/routes/user_conversations/bulk_actions_route.test.ts b/x-pack/plugins/elastic_assistant/server/routes/user_conversations/bulk_actions_route.test.ts index 09247b1c47cb4..582651b4cdc9b 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/user_conversations/bulk_actions_route.test.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/user_conversations/bulk_actions_route.test.ts @@ -21,7 +21,7 @@ import { getPerformBulkActionSchemaMock, getUpdateConversationSchemaMock, } from '../../__mocks__/conversations_schema.mock'; -import { AuthenticatedUser } from '@kbn/security-plugin-types-common'; +import { AuthenticatedUser } from '@kbn/core-security-common'; describe('Perform bulk action route', () => { let server: ReturnType; diff --git a/x-pack/plugins/elastic_assistant/server/routes/user_conversations/create_route.test.ts b/x-pack/plugins/elastic_assistant/server/routes/user_conversations/create_route.test.ts index 5b2737436fa8c..0659b8d43a38f 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/user_conversations/create_route.test.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/user_conversations/create_route.test.ts @@ -17,7 +17,7 @@ import { getQueryConversationParams, } from '../../__mocks__/conversations_schema.mock'; import { ELASTIC_AI_ASSISTANT_CONVERSATIONS_URL } from '@kbn/elastic-assistant-common'; -import { AuthenticatedUser } from '@kbn/security-plugin-types-common'; +import { AuthenticatedUser } from '@kbn/core-security-common'; describe('Create conversation route', () => { let server: ReturnType; diff --git a/x-pack/plugins/elastic_assistant/server/routes/user_conversations/delete_route.test.ts b/x-pack/plugins/elastic_assistant/server/routes/user_conversations/delete_route.test.ts index 4204a7e51ef9d..128a380c9221a 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/user_conversations/delete_route.test.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/user_conversations/delete_route.test.ts @@ -15,7 +15,7 @@ import { getConversationMock, getQueryConversationParams, } from '../../__mocks__/conversations_schema.mock'; -import { AuthenticatedUser } from '@kbn/security-plugin-types-common'; +import { AuthenticatedUser } from '@kbn/core-security-common'; describe('Delete conversation route', () => { let server: ReturnType; diff --git a/x-pack/plugins/elastic_assistant/server/routes/user_conversations/read_route.test.ts b/x-pack/plugins/elastic_assistant/server/routes/user_conversations/read_route.test.ts index 36dd3045b9d23..d2ea1bb5936d3 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/user_conversations/read_route.test.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/user_conversations/read_route.test.ts @@ -14,7 +14,7 @@ import { getQueryConversationParams, } from '../../__mocks__/conversations_schema.mock'; import { ELASTIC_AI_ASSISTANT_CONVERSATIONS_URL_BY_ID } from '@kbn/elastic-assistant-common'; -import { AuthenticatedUser } from '@kbn/security-plugin-types-common'; +import { AuthenticatedUser } from '@kbn/core-security-common'; describe('Read conversation route', () => { let server: ReturnType; diff --git a/x-pack/plugins/elastic_assistant/server/routes/user_conversations/update_route.test.ts b/x-pack/plugins/elastic_assistant/server/routes/user_conversations/update_route.test.ts index 6b1f41c46c1bf..dd3b7bf1e577d 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/user_conversations/update_route.test.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/user_conversations/update_route.test.ts @@ -14,7 +14,7 @@ import { getUpdateConversationSchemaMock, } from '../../__mocks__/conversations_schema.mock'; import { updateConversationRoute } from './update_route'; -import { AuthenticatedUser } from '@kbn/security-plugin-types-common'; +import { AuthenticatedUser } from '@kbn/core-security-common'; describe('Update conversation route', () => { let server: ReturnType; diff --git a/x-pack/plugins/elastic_assistant/server/types.ts b/x-pack/plugins/elastic_assistant/server/types.ts index 50028bfcfd198..10bd2a3fe62c6 100755 --- a/x-pack/plugins/elastic_assistant/server/types.ts +++ b/x-pack/plugins/elastic_assistant/server/types.ts @@ -10,6 +10,7 @@ import type { PluginStartContract as ActionsPluginStart, } from '@kbn/actions-plugin/server'; import type { + AuthenticatedUser, CoreRequestHandlerContext, CoreSetup, AnalyticsServiceSetup, @@ -17,12 +18,12 @@ import type { IRouter, KibanaRequest, Logger, + SecurityServiceStart, } from '@kbn/core/server'; import { type MlPluginSetup } from '@kbn/ml-plugin/server'; import { DynamicStructuredTool, Tool } from '@langchain/core/tools'; import { SpacesPluginSetup, SpacesPluginStart } from '@kbn/spaces-plugin/server'; import { TaskManagerSetupContract } from '@kbn/task-manager-plugin/server'; -import { AuthenticatedUser, SecurityPluginStart } from '@kbn/security-plugin/server'; import { RetrievalQAChain } from 'langchain/chains'; import { ElasticsearchClient } from '@kbn/core/server'; import { @@ -99,7 +100,7 @@ export interface ElasticAssistantPluginSetupDependencies { export interface ElasticAssistantPluginStartDependencies { actions: ActionsPluginStart; spaces?: SpacesPluginStart; - security: SecurityPluginStart; + security: SecurityServiceStart; } export interface ElasticAssistantApiRequestHandlerContext { diff --git a/x-pack/plugins/elastic_assistant/tsconfig.json b/x-pack/plugins/elastic_assistant/tsconfig.json index d5fef57edaf09..8f546d6e5fe01 100644 --- a/x-pack/plugins/elastic_assistant/tsconfig.json +++ b/x-pack/plugins/elastic_assistant/tsconfig.json @@ -34,12 +34,10 @@ "@kbn/core-saved-objects-utils-server", "@kbn/core-elasticsearch-client-server-mocks", "@kbn/task-manager-plugin", - "@kbn/security-plugin", "@kbn/es-query", "@kbn/es-types", "@kbn/config-schema", "@kbn/spaces-plugin", - "@kbn/security-plugin-types-common", "@kbn/ml-response-stream", "@kbn/data-plugin", "@kbn/i18n", @@ -47,6 +45,7 @@ "@kbn/core-saved-objects-api-server", "@kbn/langchain", "@kbn/stack-connectors-plugin", + "@kbn/security-plugin", ], "exclude": [ "target/**/*", diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/components/layout.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/components/layout.tsx index 445a0bcf94287..c5170d33eee68 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/components/layout.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/components/layout.tsx @@ -17,7 +17,6 @@ import { EuiDescriptionListDescription, EuiButtonEmpty, EuiSpacer, - useIsWithinMinBreakpoint, } from '@elastic/eui'; import { useAgentless } from '../hooks/setup_technology'; @@ -252,8 +251,7 @@ export const CreatePackagePolicySinglePageLayout: React.FunctionComponent<{ ) : undefined; - const isBiggerScreen = useIsWithinMinBreakpoint('xxl'); - const maxWidth = isBiggerScreen ? 1200 : 800; + const maxWidth = 800; return ( ; encryptedSavedObjectsStart?: ReturnType; savedObjects: ReturnType; + securityCoreStart: ReturnType; securitySetup: ReturnType; securityStart: ReturnType; logger: ReturnType['get']>; @@ -74,6 +76,7 @@ export const createAppContextStartContractMock = ( encryptedSavedObjectsStart: encryptedSavedObjectsMock.createStart(), encryptedSavedObjectsSetup: encryptedSavedObjectsMock.createSetup({ canEncrypt: true }), savedObjects: savedObjectsServiceMock.createStartContract(), + securityCoreStart: securityServiceMock.createStart(), securitySetup: securityMock.createSetup(), securityStart: securityMock.createStart(), logger: loggingSystemMock.create().get(), diff --git a/x-pack/plugins/fleet/server/plugin.ts b/x-pack/plugins/fleet/server/plugin.ts index 25ac39464e774..4256a4a90e537 100644 --- a/x-pack/plugins/fleet/server/plugin.ts +++ b/x-pack/plugins/fleet/server/plugin.ts @@ -23,6 +23,7 @@ import type { PluginInitializerContext, SavedObjectsClientContract, SavedObjectsServiceStart, + SecurityServiceStart, ServiceStatus, } from '@kbn/core/server'; import { DEFAULT_APP_CATEGORIES, SavedObjectsClient, ServiceStatusLevels } from '@kbn/core/server'; @@ -155,6 +156,7 @@ export interface FleetAppContext { data: DataPluginStart; encryptedSavedObjectsStart?: EncryptedSavedObjectsPluginStart; encryptedSavedObjectsSetup?: EncryptedSavedObjectsPluginSetup; + securityCoreStart: SecurityServiceStart; securitySetup: SecurityPluginSetup; securityStart: SecurityPluginStart; config$?: Observable; @@ -613,6 +615,7 @@ export class FleetPlugin data: plugins.data, encryptedSavedObjectsStart: plugins.encryptedSavedObjects, encryptedSavedObjectsSetup: this.encryptedSavedObjectsSetup, + securityCoreStart: core.security, securitySetup: this.securitySetup, securityStart: plugins.security, configInitialValue: this.configInitialValue, diff --git a/x-pack/plugins/fleet/server/routes/agent_policy/handlers.ts b/x-pack/plugins/fleet/server/routes/agent_policy/handlers.ts index d652dacf0dd9a..b6355bf0c7f78 100644 --- a/x-pack/plugins/fleet/server/routes/agent_policy/handlers.ts +++ b/x-pack/plugins/fleet/server/routes/agent_policy/handlers.ts @@ -215,7 +215,7 @@ export const createAgentPolicyHandler: FleetRequestHandler< const fleetContext = await context.fleet; const soClient = fleetContext.internalSoClient; const esClient = coreContext.elasticsearch.client.asInternalUser; - const user = (await appContextService.getSecurity()?.authc.getCurrentUser(request)) || undefined; + const user = appContextService.getSecurityCore().authc.getCurrentUser(request) || undefined; const withSysMonitoring = request.query.sys_monitoring ?? false; const monitoringEnabled = request.body.monitoring_enabled; const { has_fleet_server: hasFleetServer, force, ...newPolicy } = request.body; @@ -261,7 +261,7 @@ export const updateAgentPolicyHandler: FleetRequestHandler< const fleetContext = await context.fleet; const soClient = coreContext.savedObjects.client; const esClient = coreContext.elasticsearch.client.asInternalUser; - const user = await appContextService.getSecurity()?.authc.getCurrentUser(request); + const user = appContextService.getSecurityCore().authc.getCurrentUser(request) || undefined; const { force, ...data } = request.body; const spaceId = fleetContext.spaceId; @@ -271,11 +271,7 @@ export const updateAgentPolicyHandler: FleetRequestHandler< esClient, request.params.agentPolicyId, data, - { - force, - user: user || undefined, - spaceId, - } + { force, user, spaceId } ); const body: UpdateAgentPolicyResponse = { item: agentPolicy }; return response.ok({ @@ -300,16 +296,14 @@ export const copyAgentPolicyHandler: RequestHandler< const coreContext = await context.core; const soClient = coreContext.savedObjects.client; const esClient = coreContext.elasticsearch.client.asInternalUser; - const user = await appContextService.getSecurity()?.authc.getCurrentUser(request); + const user = appContextService.getSecurityCore().authc.getCurrentUser(request) || undefined; try { const agentPolicy = await agentPolicyService.copy( soClient, esClient, request.params.agentPolicyId, request.body, - { - user: user || undefined, - } + { user } ); const body: CopyAgentPolicyResponse = { item: agentPolicy }; @@ -329,16 +323,13 @@ export const deleteAgentPoliciesHandler: RequestHandler< const coreContext = await context.core; const soClient = coreContext.savedObjects.client; const esClient = coreContext.elasticsearch.client.asInternalUser; - const user = await appContextService.getSecurity()?.authc.getCurrentUser(request); + const user = appContextService.getSecurityCore().authc.getCurrentUser(request) || undefined; try { const body: DeleteAgentPolicyResponse = await agentPolicyService.delete( soClient, esClient, request.body.agentPolicyId, - { - user: user || undefined, - force: request.body.force, - } + { user, force: request.body.force } ); return response.ok({ body, diff --git a/x-pack/plugins/fleet/server/routes/epm/handlers.ts b/x-pack/plugins/fleet/server/routes/epm/handlers.ts index c98adeb6f737f..9ce8c9afa4e6a 100644 --- a/x-pack/plugins/fleet/server/routes/epm/handlers.ts +++ b/x-pack/plugins/fleet/server/routes/epm/handlers.ts @@ -307,7 +307,7 @@ export const installPackageFromRegistryHandler: FleetRequestHandler< const fleetContext = await context.fleet; const savedObjectsClient = fleetContext.internalSoClient; const esClient = coreContext.elasticsearch.client.asInternalUser; - const user = (await appContextService.getSecurity()?.authc.getCurrentUser(request)) || undefined; + const user = appContextService.getSecurityCore().authc.getCurrentUser(request) || undefined; const { pkgName, pkgVersion } = request.params; @@ -350,7 +350,7 @@ export const createCustomIntegrationHandler: FleetRequestHandler< const fleetContext = await context.fleet; const savedObjectsClient = fleetContext.internalSoClient; const esClient = coreContext.elasticsearch.client.asInternalUser; - const user = (await appContextService.getSecurity()?.authc.getCurrentUser(request)) || undefined; + const user = appContextService.getSecurityCore().authc.getCurrentUser(request) || undefined; const kibanaVersion = appContextService.getKibanaVersion(); const authorizationHeader = HTTPAuthorizationHeader.parseFromRequest(request, user?.username); const spaceId = fleetContext.spaceId; @@ -425,7 +425,7 @@ export const bulkInstallPackagesFromRegistryHandler: FleetRequestHandler< const savedObjectsClient = fleetContext.internalSoClient; const esClient = coreContext.elasticsearch.client.asInternalUser; const spaceId = fleetContext.spaceId; - const user = (await appContextService.getSecurity()?.authc.getCurrentUser(request)) || undefined; + const user = appContextService.getSecurityCore().authc.getCurrentUser(request) || undefined; const authorizationHeader = HTTPAuthorizationHeader.parseFromRequest(request, user?.username); const bulkInstalledResponses = await bulkInstallPackages({ @@ -457,7 +457,7 @@ export const installPackageByUploadHandler: FleetRequestHandler< const contentType = request.headers['content-type'] as string; // from types it could also be string[] or undefined but this is checked later const archiveBuffer = Buffer.from(request.body); const spaceId = fleetContext.spaceId; - const user = (await appContextService.getSecurity()?.authc.getCurrentUser(request)) || undefined; + const user = appContextService.getSecurityCore().authc.getCurrentUser(request) || undefined; const authorizationHeader = HTTPAuthorizationHeader.parseFromRequest(request, user?.username); const res = await installPackage({ @@ -561,7 +561,7 @@ export const reauthorizeTransformsHandler: FleetRequestHandler< let username; try { - const user = await appContextService.getSecurity()?.authc.getCurrentUser(request); + const user = appContextService.getSecurityCore().authc.getCurrentUser(request); if (user) { username = user.username; } diff --git a/x-pack/plugins/fleet/server/routes/package_policy/handlers.ts b/x-pack/plugins/fleet/server/routes/package_policy/handlers.ts index b15b36a8fbd68..8aa7770be3977 100644 --- a/x-pack/plugins/fleet/server/routes/package_policy/handlers.ts +++ b/x-pack/plugins/fleet/server/routes/package_policy/handlers.ts @@ -231,7 +231,7 @@ export const createPackagePolicyHandler: FleetRequestHandler< const fleetContext = await context.fleet; const soClient = fleetContext.internalSoClient; const esClient = coreContext.elasticsearch.client.asInternalUser; - const user = appContextService.getSecurity()?.authc.getCurrentUser(request) || undefined; + const user = appContextService.getSecurityCore().authc.getCurrentUser(request) || undefined; const { force, id, package: pkg, ...newPolicy } = request.body; const authorizationHeader = HTTPAuthorizationHeader.parseFromRequest(request, user?.username); let wasPackageAlreadyInstalled = false; @@ -339,7 +339,7 @@ export const updatePackagePolicyHandler: FleetRequestHandler< const soClient = fleetContext.internalSoClient; const limitedToPackages = fleetContext.limitedToPackages; const esClient = coreContext.elasticsearch.client.asInternalUser; - const user = appContextService.getSecurity()?.authc.getCurrentUser(request) || undefined; + const user = appContextService.getSecurityCore().authc.getCurrentUser(request) || undefined; const packagePolicy = await packagePolicyService.get(soClient, request.params.packagePolicyId); if (!packagePolicy) { @@ -442,7 +442,7 @@ export const deletePackagePolicyHandler: RequestHandler< const coreContext = await context.core; const soClient = coreContext.savedObjects.client; const esClient = coreContext.elasticsearch.client.asInternalUser; - const user = appContextService.getSecurity()?.authc.getCurrentUser(request) || undefined; + const user = appContextService.getSecurityCore().authc.getCurrentUser(request) || undefined; try { const body: PostDeletePackagePoliciesResponse = await packagePolicyService.delete( @@ -470,7 +470,7 @@ export const deleteOnePackagePolicyHandler: RequestHandler< const coreContext = await context.core; const soClient = coreContext.savedObjects.client; const esClient = coreContext.elasticsearch.client.asInternalUser; - const user = appContextService.getSecurity()?.authc.getCurrentUser(request) || undefined; + const user = appContextService.getSecurityCore().authc.getCurrentUser(request) || undefined; try { const res = await packagePolicyService.delete( @@ -509,7 +509,7 @@ export const upgradePackagePolicyHandler: RequestHandler< const coreContext = await context.core; const soClient = coreContext.savedObjects.client; const esClient = coreContext.elasticsearch.client.asInternalUser; - const user = appContextService.getSecurity()?.authc.getCurrentUser(request) || undefined; + const user = appContextService.getSecurityCore().authc.getCurrentUser(request) || undefined; try { const body: UpgradePackagePolicyResponse = await packagePolicyService.upgrade( soClient, diff --git a/x-pack/plugins/fleet/server/routes/settings/index.ts b/x-pack/plugins/fleet/server/routes/settings/index.ts index d8d8aee742c9a..a72d2da7805d5 100644 --- a/x-pack/plugins/fleet/server/routes/settings/index.ts +++ b/x-pack/plugins/fleet/server/routes/settings/index.ts @@ -49,13 +49,11 @@ export const putSettingsHandler: FleetRequestHandler< > = async (context, request, response) => { const soClient = (await context.fleet).internalSoClient; const esClient = (await context.core).elasticsearch.client.asInternalUser; - const user = await appContextService.getSecurity()?.authc.getCurrentUser(request); + const user = appContextService.getSecurityCore().authc.getCurrentUser(request) || undefined; try { const settings = await settingsService.saveSettings(soClient, request.body); - await agentPolicyService.bumpAllAgentPolicies(esClient, { - user: user || undefined, - }); + await agentPolicyService.bumpAllAgentPolicies(esClient, { user }); const body = { item: settings, }; diff --git a/x-pack/plugins/fleet/server/saved_objects/index.ts b/x-pack/plugins/fleet/server/saved_objects/index.ts index b471491edc3f3..3f91146536a9d 100644 --- a/x-pack/plugins/fleet/server/saved_objects/index.ts +++ b/x-pack/plugins/fleet/server/saved_objects/index.ts @@ -86,7 +86,10 @@ import { migratePackagePolicyEvictionsFromV81102, } from './migrations/security_solution/to_v8_11_0_2'; import { settingsV1 } from './model_versions/v1'; -import { packagePolicyV10OnWriteScanFix } from './model_versions/security_solution'; +import { + packagePolicyV13AdvancedFields, + packagePolicyV10OnWriteScanFix, +} from './model_versions/security_solution'; import { migratePackagePolicyIdsToV8150, migratePackagePolicySetRequiresRootToV8150, @@ -611,6 +614,14 @@ export const getSavedObjectTypes = ( }, ], }, + '13': { + changes: [ + { + type: 'data_backfill', + backfillFn: packagePolicyV13AdvancedFields, + }, + ], + }, }, migrations: { '7.10.0': migratePackagePolicyToV7100, diff --git a/x-pack/plugins/fleet/server/saved_objects/model_versions/security_solution/index.ts b/x-pack/plugins/fleet/server/saved_objects/model_versions/security_solution/index.ts index 780bc55f9cd3e..d14e27d2d8a14 100644 --- a/x-pack/plugins/fleet/server/saved_objects/model_versions/security_solution/index.ts +++ b/x-pack/plugins/fleet/server/saved_objects/model_versions/security_solution/index.ts @@ -6,3 +6,4 @@ */ export { packagePolicyV10OnWriteScanFix } from './v10_on_write_scan_fix'; +export { packagePolicyV13AdvancedFields } from './v13_advanced_package_policy_fields'; diff --git a/x-pack/plugins/fleet/server/saved_objects/model_versions/security_solution/v13_advanced_package_policy_fields.test.ts b/x-pack/plugins/fleet/server/saved_objects/model_versions/security_solution/v13_advanced_package_policy_fields.test.ts new file mode 100644 index 0000000000000..35eaf5bcd7f3b --- /dev/null +++ b/x-pack/plugins/fleet/server/saved_objects/model_versions/security_solution/v13_advanced_package_policy_fields.test.ts @@ -0,0 +1,232 @@ +/* + * 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 { SavedObject } from '@kbn/core-saved-objects-common/src/server_types'; + +import type { ModelVersionTestMigrator } from '@kbn/core-test-helpers-model-versions'; +import { createModelVersionTestMigrator } from '@kbn/core-test-helpers-model-versions'; + +import { cloneDeep } from 'lodash'; + +import type { PackagePolicy } from '../../../../common'; + +import { PACKAGE_POLICY_SAVED_OBJECT_TYPE } from '../../../../common'; +import { getSavedObjectTypes } from '../..'; + +const policyDoc: SavedObject = { + id: 'mock-saved-object-id', + attributes: { + name: 'Some Policy Name', + package: { + name: 'endpoint', + title: '', + version: '', + }, + id: 'endpoint', + policy_id: '', + policy_ids: [''], + enabled: true, + namespace: '', + revision: 0, + updated_at: '', + updated_by: '', + created_at: '', + created_by: '', + inputs: [ + { + type: 'endpoint', + enabled: true, + streams: [], + config: { + policy: { + value: { + windows: { + malware: { + mode: 'detect', + blocklist: true, + }, + antivirus_registration: { + enabled: true, + }, + }, + mac: { + malware: { + mode: 'detect', + blocklist: true, + }, + }, + linux: { + malware: { + mode: 'detect', + blocklist: true, + }, + }, + }, + }, + }, + }, + ], + }, + type: PACKAGE_POLICY_SAVED_OBJECT_TYPE, + references: [], +}; + +describe('8.15.0 Endpoint Package Policy migration', () => { + let migrator: ModelVersionTestMigrator; + + beforeEach(() => { + migrator = createModelVersionTestMigrator({ + type: getSavedObjectTypes()[PACKAGE_POLICY_SAVED_OBJECT_TYPE], + }); + }); + + describe('backfilling `advanced` fields for Windows, Linux, and Mac', () => { + it('should backfill `advanced` fields on Kibana update if there are no advanced options yet', () => { + const originalPolicyConfigSO = cloneDeep(policyDoc); + const migratedPolicyConfigSO = migrator.migrate({ + document: originalPolicyConfigSO, + fromVersion: 12, + toVersion: 13, + }); + const migratedPolicyConfig = migratedPolicyConfigSO.attributes.inputs[0].config?.policy.value; + expect(migratedPolicyConfig.windows.advanced).toEqual({ + events: { + deduplicate_network_events: false, + ancestry_in_all_events: true, + process_ancestry_length: 20, + }, + }); + expect(migratedPolicyConfig.linux.advanced).toEqual({ + events: { + deduplicate_network_events: false, + ancestry_in_all_events: true, + process_ancestry_length: 20, + }, + }); + expect(migratedPolicyConfig.mac.advanced).toEqual({ + events: { + deduplicate_network_events: false, + ancestry_in_all_events: true, + process_ancestry_length: 20, + }, + }); + }); + it('should backfill `advanced` fields without modifying other `advanced` options', () => { + const originalPolicyConfigSO = cloneDeep(policyDoc); + const originalPolicyConfig = originalPolicyConfigSO.attributes.inputs[0].config?.policy.value; + originalPolicyConfig.linux.advanced = { + ping: 'pong', + }; + originalPolicyConfig.windows.advanced = { + ping: 'pong pong', + }; + originalPolicyConfig.mac.advanced = { + ping: 'pong pong pong', + }; + const expectedPolicyConfig = cloneDeep(originalPolicyConfig); + + expectedPolicyConfig.windows.advanced.events = { + deduplicate_network_events: false, + process_ancestry_length: 20, + ancestry_in_all_events: true, + }; + expectedPolicyConfig.linux.advanced.events = { + deduplicate_network_events: false, + process_ancestry_length: 20, + ancestry_in_all_events: true, + }; + expectedPolicyConfig.mac.advanced.events = { + deduplicate_network_events: false, + process_ancestry_length: 20, + ancestry_in_all_events: true, + }; + + const migratedPolicyConfigSO = migrator.migrate({ + document: originalPolicyConfigSO, + fromVersion: 12, + toVersion: 13, + }); + + const migratedPolicyConfig = migratedPolicyConfigSO.attributes.inputs[0].config?.policy.value; + expect(migratedPolicyConfig).toStrictEqual(expectedPolicyConfig); + }); + it('should backfill `advanced` fields without modifying other `events`', () => { + const originalPolicyConfigSO = cloneDeep(policyDoc); + const originalPolicyConfig = originalPolicyConfigSO.attributes.inputs[0].config?.policy.value; + originalPolicyConfig.windows.advanced = { + events: { + ping: 'pong', + }, + }; + originalPolicyConfig.linux.advanced = { + events: { + ping: 'pong', + }, + }; + originalPolicyConfig.mac.advanced = { + events: { + ping: 'pong', + }, + }; + const expectedPolicyConfig = cloneDeep(originalPolicyConfig); + + expectedPolicyConfig.windows.advanced.events.deduplicate_network_events = false; + expectedPolicyConfig.windows.advanced.events.process_ancestry_length = 20; + expectedPolicyConfig.windows.advanced.events.ancestry_in_all_events = true; + expectedPolicyConfig.linux.advanced.events.deduplicate_network_events = false; + expectedPolicyConfig.linux.advanced.events.process_ancestry_length = 20; + expectedPolicyConfig.linux.advanced.events.ancestry_in_all_events = true; + expectedPolicyConfig.mac.advanced.events.deduplicate_network_events = false; + expectedPolicyConfig.mac.advanced.events.process_ancestry_length = 20; + expectedPolicyConfig.mac.advanced.events.ancestry_in_all_events = true; + + const migratedPolicyConfigSO = migrator.migrate({ + document: originalPolicyConfigSO, + fromVersion: 12, + toVersion: 13, + }); + + const migratedPolicyConfig = migratedPolicyConfigSO.attributes.inputs[0].config?.policy.value; + expect(migratedPolicyConfig).toStrictEqual(expectedPolicyConfig); + }); + it('should not backfill `advanced` fields if values are already present', () => { + const originalPolicyConfigSO = cloneDeep(policyDoc); + const originalPolicyConfig = originalPolicyConfigSO.attributes.inputs[0].config?.policy.value; + originalPolicyConfig.windows.advanced = { + events: { + deduplicate_network_events: true, + process_ancestry_length: 10, + ancestry_in_all_events: false, + }, + }; + originalPolicyConfig.linux.advanced = { + events: { + deduplicate_network_events: true, + process_ancestry_length: 10, + ancestry_in_all_events: false, + }, + }; + originalPolicyConfig.mac.advanced = { + events: { + deduplicate_network_events: true, + process_ancestry_length: 10, + ancestry_in_all_events: false, + }, + }; + const expectedPolicyConfig = cloneDeep(originalPolicyConfig); + + const migratedPolicyConfigSO = migrator.migrate({ + document: originalPolicyConfigSO, + fromVersion: 12, + toVersion: 13, + }); + + const migratedPolicyConfig = migratedPolicyConfigSO.attributes.inputs[0].config?.policy.value; + expect(migratedPolicyConfig).toStrictEqual(expectedPolicyConfig); + }); + }); +}); diff --git a/x-pack/plugins/fleet/server/saved_objects/model_versions/security_solution/v13_advanced_package_policy_fields.ts b/x-pack/plugins/fleet/server/saved_objects/model_versions/security_solution/v13_advanced_package_policy_fields.ts new file mode 100644 index 0000000000000..2bf6f8830efee --- /dev/null +++ b/x-pack/plugins/fleet/server/saved_objects/model_versions/security_solution/v13_advanced_package_policy_fields.ts @@ -0,0 +1,62 @@ +/* + * 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 { + SavedObjectModelDataBackfillFn, + SavedObjectUnsanitizedDoc, +} from '@kbn/core-saved-objects-server'; + +import type { PackagePolicy } from '../../../../common'; + +export const packagePolicyV13AdvancedFields: SavedObjectModelDataBackfillFn< + PackagePolicy, + PackagePolicy +> = (packagePolicyDoc) => { + if (packagePolicyDoc.attributes.package?.name !== 'endpoint') { + return { attributes: packagePolicyDoc.attributes }; + } + + const updatedPackagePolicyDoc: SavedObjectUnsanitizedDoc = packagePolicyDoc; + + const input = updatedPackagePolicyDoc.attributes.inputs[0]; + + if (input && input.config) { + const policy = input.config.policy.value; + + policy.windows.advanced = { + ...policy.windows.advanced, + events: { + deduplicate_network_events: false, + process_ancestry_length: 20, + ancestry_in_all_events: true, + ...policy.windows.advanced?.events, + }, + }; + + policy.linux.advanced = { + ...policy.linux.advanced, + events: { + deduplicate_network_events: false, + process_ancestry_length: 20, + ancestry_in_all_events: true, + ...policy.linux.advanced?.events, + }, + }; + + policy.mac.advanced = { + ...policy.mac.advanced, + events: { + deduplicate_network_events: false, + process_ancestry_length: 20, + ancestry_in_all_events: true, + ...policy.mac.advanced?.events, + }, + }; + } + + return { attributes: updatedPackagePolicyDoc.attributes }; +}; diff --git a/x-pack/plugins/fleet/server/services/agent_policy.ts b/x-pack/plugins/fleet/server/services/agent_policy.ts index 041b644951e25..9ce4e869819c3 100644 --- a/x-pack/plugins/fleet/server/services/agent_policy.ts +++ b/x-pack/plugins/fleet/server/services/agent_policy.ts @@ -11,6 +11,7 @@ import { safeDump } from 'js-yaml'; import pMap from 'p-map'; import { lt } from 'semver'; import type { + AuthenticatedUser, ElasticsearchClient, SavedObjectsBulkUpdateObject, SavedObjectsBulkUpdateResponse, @@ -20,7 +21,6 @@ import type { } from '@kbn/core/server'; import { SavedObjectsUtils } from '@kbn/core/server'; -import type { AuthenticatedUser } from '@kbn/security-plugin/server'; import type { BulkResponseItem } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { DEFAULT_SPACE_ID } from '@kbn/spaces-plugin/common/constants'; diff --git a/x-pack/plugins/fleet/server/services/agent_policy_create.ts b/x-pack/plugins/fleet/server/services/agent_policy_create.ts index de05b3f69685c..dc5a57e81a16a 100644 --- a/x-pack/plugins/fleet/server/services/agent_policy_create.ts +++ b/x-pack/plugins/fleet/server/services/agent_policy_create.ts @@ -5,9 +5,11 @@ * 2.0. */ -import type { ElasticsearchClient, SavedObjectsClientContract } from '@kbn/core/server'; - -import type { AuthenticatedUser } from '@kbn/security-plugin/common'; +import type { + AuthenticatedUser, + ElasticsearchClient, + SavedObjectsClientContract, +} from '@kbn/core/server'; import type { HTTPAuthorizationHeader } from '../../common/http_authorization_header'; diff --git a/x-pack/plugins/fleet/server/services/app_context.ts b/x-pack/plugins/fleet/server/services/app_context.ts index 9770d6a696e85..970291bf7d552 100644 --- a/x-pack/plugins/fleet/server/services/app_context.ts +++ b/x-pack/plugins/fleet/server/services/app_context.ts @@ -14,6 +14,7 @@ import type { HttpServiceSetup, Logger, KibanaRequest, + SecurityServiceStart, } from '@kbn/core/server'; import { CoreKibanaRequest } from '@kbn/core/server'; @@ -61,6 +62,7 @@ class AppContextService { private data: DataPluginStart | undefined; private esClient: ElasticsearchClient | undefined; private experimentalFeatures?: ExperimentalFeatures; + private securityCoreStart: SecurityServiceStart | undefined; private securitySetup: SecurityPluginSetup | undefined; private securityStart: SecurityPluginStart | undefined; private config$?: Observable; @@ -86,6 +88,7 @@ class AppContextService { this.encryptedSavedObjectsStart = appContext.encryptedSavedObjectsStart; this.encryptedSavedObjects = appContext.encryptedSavedObjectsStart?.getClient(); this.encryptedSavedObjectsSetup = appContext.encryptedSavedObjectsSetup; + this.securityCoreStart = appContext.securityCoreStart; this.securitySetup = appContext.securitySetup; this.securityStart = appContext.securityStart; this.savedObjects = appContext.savedObjects; @@ -129,6 +132,10 @@ class AppContextService { return this.encryptedSavedObjects; } + public getSecurityCore() { + return this.securityCoreStart!; + } + public getSecurity() { return this.securityStart!; } diff --git a/x-pack/plugins/fleet/server/services/package_policy.ts b/x-pack/plugins/fleet/server/services/package_policy.ts index dd4d26e28ca7e..8fd71a76355c8 100644 --- a/x-pack/plugins/fleet/server/services/package_policy.ts +++ b/x-pack/plugins/fleet/server/services/package_policy.ts @@ -11,6 +11,7 @@ import { i18n } from '@kbn/i18n'; import semverLt from 'semver/functions/lt'; import { getFlattenedObject } from '@kbn/std'; import type { + AuthenticatedUser, KibanaRequest, ElasticsearchClient, SavedObjectsClientContract, @@ -25,8 +26,6 @@ import { safeLoad } from 'js-yaml'; import { DEFAULT_SPACE_ID } from '@kbn/spaces-plugin/common/constants'; -import { type AuthenticatedUser } from '@kbn/security-plugin/server'; - import pMap from 'p-map'; import type { SavedObjectError } from '@kbn/core-saved-objects-common'; 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 5f5e775bf910a..1462d451388b5 100644 --- a/x-pack/plugins/fleet/server/services/package_policy_service.ts +++ b/x-pack/plugins/fleet/server/services/package_policy_service.ts @@ -5,9 +5,14 @@ * 2.0. */ -import type { KibanaRequest, Logger, RequestHandlerContext } from '@kbn/core/server'; -import type { ElasticsearchClient, SavedObjectsClientContract } from '@kbn/core/server'; -import type { AuthenticatedUser } from '@kbn/security-plugin/server'; +import type { + AuthenticatedUser, + KibanaRequest, + Logger, + RequestHandlerContext, + ElasticsearchClient, + SavedObjectsClientContract, +} from '@kbn/core/server'; import type { SavedObjectError } from '@kbn/core-saved-objects-common'; diff --git a/x-pack/plugins/fleet/server/services/security/fleet_router.test.ts b/x-pack/plugins/fleet/server/services/security/fleet_router.test.ts index 5de46b845bfcc..2d7d898246796 100644 --- a/x-pack/plugins/fleet/server/services/security/fleet_router.test.ts +++ b/x-pack/plugins/fleet/server/services/security/fleet_router.test.ts @@ -10,12 +10,10 @@ import type { CheckPrivilegesResponse, CheckPrivilegesPayload, } from '@kbn/security-plugin/server'; -import type { RequestHandler } from '@kbn/core/server'; +import type { AuthenticatedUser, RequestHandler } from '@kbn/core/server'; import type { VersionedRouter } from '@kbn/core-http-server'; import { loggingSystemMock } from '@kbn/core/server/mocks'; -import type { AuthenticatedUser } from '@kbn/security-plugin/common'; - import { coreMock } from '@kbn/core/server/mocks'; import { API_VERSIONS } from '../../../common/constants'; @@ -85,7 +83,7 @@ describe('FleetAuthzRouter', () => { // @ts-expect-error type doesn't properly respect deeply mocked keys mockContext.securityStart.authz.actions.ui.get.mockImplementation((priv) => `ui:${priv}`); - mockContext.securityStart.authc.getCurrentUser.mockReturnValue({ + mockContext.securityCoreStart.authc.getCurrentUser.mockReturnValue({ username: 'foo', roles, } as unknown as AuthenticatedUser); diff --git a/x-pack/plugins/fleet/server/services/security/security.test.ts b/x-pack/plugins/fleet/server/services/security/security.test.ts index 9f13b39203c2e..d231d5b202342 100644 --- a/x-pack/plugins/fleet/server/services/security/security.test.ts +++ b/x-pack/plugins/fleet/server/services/security/security.test.ts @@ -8,6 +8,8 @@ import { deepFreeze } from '@kbn/std'; import type { SecurityPluginStart, CheckPrivilegesDynamically } from '@kbn/security-plugin/server'; +import { securityServiceMock, type SecurityStartMock } from '@kbn/core-security-server-mocks'; + import { appContextService } from '../app_context'; import type { FleetAuthz } from '../../../common'; @@ -554,12 +556,13 @@ describe('When using calculateRouteAuthz()', () => { }); describe('getAuthzFromRequest', () => { + let mockSecurityCore: SecurityStartMock; let mockSecurity: jest.MockedObjectDeep; let checkPrivileges: jest.MockedFn; beforeEach(() => { checkPrivileges = jest.fn(); + mockSecurityCore = securityServiceMock.createStart(); mockSecurity = { - authc: { getCurrentUser: jest.fn() }, authz: { checkPrivilegesDynamicallyWithRequest: jest.fn().mockReturnValue(checkPrivileges), actions: { @@ -576,6 +579,7 @@ describe('getAuthzFromRequest', () => { }, } as unknown as jest.MockedObjectDeep; + jest.mocked(appContextService.getSecurityCore).mockReturnValue(mockSecurityCore); jest.mocked(appContextService.getSecurity).mockReturnValue(mockSecurity); jest.mocked(appContextService.getSecurityLicense).mockReturnValue({ isEnabled: () => true, diff --git a/x-pack/plugins/fleet/server/services/security/security.ts b/x-pack/plugins/fleet/server/services/security/security.ts index b55440527e304..9d028efa8aaaf 100644 --- a/x-pack/plugins/fleet/server/services/security/security.ts +++ b/x-pack/plugins/fleet/server/services/security/security.ts @@ -45,7 +45,7 @@ export function checkSuperuser(req: KibanaRequest) { return false; } - const security = appContextService.getSecurity(); + const security = appContextService.getSecurityCore(); const user = security.authc.getCurrentUser(req); if (!user) { diff --git a/x-pack/plugins/fleet/tsconfig.json b/x-pack/plugins/fleet/tsconfig.json index 7c8bf644e5fc2..8986527bed977 100644 --- a/x-pack/plugins/fleet/tsconfig.json +++ b/x-pack/plugins/fleet/tsconfig.json @@ -111,5 +111,6 @@ "@kbn/test-jest-helpers", "@kbn/core-saved-objects-utils-server", "@kbn/integration-assistant-plugin", + "@kbn/core-security-server-mocks", ] } diff --git a/x-pack/plugins/index_lifecycle_management/integration_tests/helpers/setup_environment.tsx b/x-pack/plugins/index_lifecycle_management/integration_tests/helpers/setup_environment.tsx index 91aebb485ea7f..be7a2a104bfa4 100644 --- a/x-pack/plugins/index_lifecycle_management/integration_tests/helpers/setup_environment.tsx +++ b/x-pack/plugins/index_lifecycle_management/integration_tests/helpers/setup_environment.tsx @@ -17,6 +17,10 @@ import { fatalErrorsServiceMock, docLinksServiceMock, executionContextServiceMock, + overlayServiceMock, + applicationServiceMock, + httpServiceMock, + scopedHistoryMock, } from '@kbn/core/public/mocks'; import { licensingMock } from '@kbn/licensing-plugin/public/mocks'; import { init as initHttp } from '../../public/application/services/http'; @@ -31,8 +35,12 @@ const appContextMock = { breadcrumbService, license: licensingMock.createLicense({ license: { type: 'enterprise' } }), docLinks: docLinksServiceMock.createStartContract(), - getUrlForApp: () => {}, + getUrlForApp: applicationServiceMock.createStartContract().getUrlForApp, executionContext: executionContextServiceMock.createSetupContract(), + navigateToUrl: applicationServiceMock.createStartContract().navigateToUrl, + overlays: overlayServiceMock.createStartContract(), + http: httpServiceMock.createSetupContract(), + history: scopedHistoryMock.create(), }; export const WithAppDependencies = diff --git a/x-pack/plugins/index_lifecycle_management/public/application/index.tsx b/x-pack/plugins/index_lifecycle_management/public/application/index.tsx index 6360bee1af571..bb004766d89f7 100644 --- a/x-pack/plugins/index_lifecycle_management/public/application/index.tsx +++ b/x-pack/plugins/index_lifecycle_management/public/application/index.tsx @@ -21,10 +21,8 @@ import { import { App } from './app'; import { BreadcrumbService } from './services/breadcrumbs'; -type StartServices = Pick; - export const renderApp = ( - startServices: StartServices, + startServices: CoreStart, element: Element, history: ScopedHistory, application: ApplicationStart, @@ -34,7 +32,9 @@ export const renderApp = ( executionContext: ExecutionContextStart, cloud?: CloudSetup ): UnmountCallback => { - const { getUrlForApp } = application; + const { navigateToUrl, getUrlForApp } = application; + const { overlays, http } = startServices; + render(
@@ -51,6 +51,10 @@ export const renderApp = ( getUrlForApp, docLinks, executionContext, + navigateToUrl, + overlays, + http, + history, }} > diff --git a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/edit_policy.tsx b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/edit_policy.tsx index b63f0b595a540..83faaa3bf28f7 100644 --- a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/edit_policy.tsx +++ b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/edit_policy.tsx @@ -7,11 +7,10 @@ import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; +import { useUnsavedChangesPrompt } from '@kbn/unsaved-changes-prompt'; import React, { Fragment, useEffect, useMemo, useState } from 'react'; import { get } from 'lodash'; -import { useHistory } from 'react-router-dom'; - import './edit_policy.scss'; import { @@ -27,7 +26,13 @@ import { EuiTimeline, } from '@elastic/eui'; -import { TextField, useForm, useFormData, useKibana } from '../../../shared_imports'; +import { + TextField, + useForm, + useFormData, + useKibana, + useFormIsModified, +} from '../../../shared_imports'; import { toasts } from '../../services/notification'; import { UseField } from './form'; import { savePolicy } from './save_policy'; @@ -69,10 +74,11 @@ export const EditPolicy: React.FunctionComponent = () => { } = useEditPolicyContext(); const { - services: { cloud, docLinks }, + services: { cloud, docLinks, history, navigateToUrl, overlays, http }, } = useKibana(); const [isClonedPolicy, setIsClonedPolicy] = useState(false); + const [hasSubmittedForm, setHasSubmittedForm] = useState(false); const originalPolicyName: string = isNewPolicy ? '' : policyName!; const isAllowedByLicense = license.canUseSearchableSnapshot(); const isCloudEnabled = Boolean(cloud?.isCloudEnabled); @@ -105,6 +111,8 @@ export const EditPolicy: React.FunctionComponent = () => { }); const [formData] = useFormData({ form, watch: policyNamePath }); + const isFormDirty = useFormIsModified({ form }); + const getPolicyName = () => { return isNewPolicy || isClonedPolicy ? get(formData, policyNamePath) : originalPolicyName; }; @@ -119,7 +127,6 @@ export const EditPolicy: React.FunctionComponent = () => { [originalPolicyName, existingPolicies, isClonedPolicy] ); - const history = useHistory(); const backToPolicyList = () => { history.push('/policies'); }; @@ -134,6 +141,7 @@ export const EditPolicy: React.FunctionComponent = () => { }) ); } else { + setHasSubmittedForm(true); const success = await savePolicy( { ...policy, @@ -141,6 +149,7 @@ export const EditPolicy: React.FunctionComponent = () => { }, isNewPolicy || isClonedPolicy ); + if (success) { backToPolicyList(); } @@ -151,6 +160,21 @@ export const EditPolicy: React.FunctionComponent = () => { setIsShowingPolicyJsonFlyout(!isShowingPolicyJsonFlyout); }; + useUnsavedChangesPrompt({ + titleText: i18n.translate('xpack.indexLifecycleMgmt.editPolicy.unsavedPrompt.title', { + defaultMessage: 'Exit without saving changes?', + }), + messageText: i18n.translate('xpack.indexLifecycleMgmt.editPolicy.unsavedPrompt.body', { + defaultMessage: + 'The data will be lost if you leave this page without saving the policy changes.', + }), + hasUnsavedChanges: isFormDirty && hasSubmittedForm === false, + openConfirm: overlays.openConfirm, + history, + http, + navigateToUrl, + }); + return ( <> = ({ */ useUnsavedChangesPrompt({ titleText: i18n.translate('xpack.ingestPipelines.form.unsavedPrompt.title', { - defaultMessage: `Exit pipeline creation without saving changes?`, + defaultMessage: 'Exit without saving changes?', }), messageText: i18n.translate('xpack.ingestPipelines.form.unsavedPrompt.body', { - defaultMessage: `The data will be lost if you leave this page without saving the pipeline changes`, + defaultMessage: + 'The data will be lost if you leave this page without saving the pipeline changes.', }), hasUnsavedChanges: (isFormDirty || areProcessorsDirty) && !hasSubmittedForm, openConfirm: overlays.openConfirm, diff --git a/x-pack/plugins/integration_assistant/server/__mocks__/mock_server.ts b/x-pack/plugins/integration_assistant/server/__mocks__/mock_server.ts new file mode 100644 index 0000000000000..35eb7fd28103a --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/__mocks__/mock_server.ts @@ -0,0 +1,140 @@ +/* + * 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 { httpServiceMock } from '@kbn/core/server/mocks'; +import type { IRouter, RouteMethod, RequestHandler, KibanaRequest } from '@kbn/core/server'; +import type { RequestHandlerContext } from '@kbn/core-http-request-handler-context-server'; +import type { RouterMock } from '@kbn/core-http-router-server-mocks'; +import type { AddVersionOpts, VersionedRouteConfig } from '@kbn/core-http-server'; + +import { requestMock } from './request'; +import { responseMock as responseFactoryMock } from './response'; +import { requestContextMock } from './request_context'; +import { responseAdapter } from './test_adapters'; + +interface Route { + config: AddVersionOpts; + handler: RequestHandler; +} + +interface RegisteredVersionedRoute { + routeConfig: VersionedRouteConfig; + versionConfig: AddVersionOpts; + routeHandler: RequestHandler; +} + +type RouterMethod = Extract; + +export const getRegisteredVersionedRouteMock = ( + routerMock: RouterMock, + method: RouterMethod, + path: string, + version: string +): RegisteredVersionedRoute => { + const route = routerMock.versioned.getRoute(method, path); + const routeVersion = route.versions[version]; + + if (!routeVersion) { + throw new Error(`Handler for [${method}][${path}] with version [${version}] no found!`); + } + + return { + routeConfig: route.config, + versionConfig: routeVersion.config, + routeHandler: routeVersion.handler, + }; +}; + +const getRoute = (routerMock: MockServer['router'], request: KibanaRequest): Route => { + const versionedRouteCalls = [ + ...routerMock.versioned.get.mock.calls, + ...routerMock.versioned.post.mock.calls, + ...routerMock.versioned.put.mock.calls, + ...routerMock.versioned.patch.mock.calls, + ...routerMock.versioned.delete.mock.calls, + ]; + + const [versionedRoute] = versionedRouteCalls; + + if (!versionedRoute) { + throw new Error('No route registered!'); + } + + const { routeHandler, versionConfig } = getRegisteredVersionedRouteMock( + routerMock, + request.route.method, + request.route.path, + '1' + ); + + return { config: versionConfig, handler: routeHandler }; +}; + +const buildResultMock = () => ({ ok: jest.fn((x) => x), badRequest: jest.fn((x) => x) }); + +class MockServer { + constructor( + public readonly router = httpServiceMock.createRouter(), + private responseMock = responseFactoryMock.create(), + private contextMock = requestContextMock.convertContext(requestContextMock.create()), + private resultMock = buildResultMock() + ) {} + + public validate(request: KibanaRequest) { + this.validateRequest(request); + return this.resultMock; + } + + public async inject(request: KibanaRequest, context: RequestHandlerContext = this.contextMock) { + const validatedRequest = this.validateRequest(request); + + const [rejection] = this.resultMock.badRequest.mock.calls; + if (rejection) { + throw new Error(`Request was rejected with message: '${rejection}'`); + } + + await this.getRoute(validatedRequest).handler(context, validatedRequest, this.responseMock); + + return responseAdapter(this.responseMock); + } + + private getRoute(request: KibanaRequest): Route { + return getRoute(this.router, request); + } + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + private maybeValidate(part: any, validator?: any): any { + return typeof validator === 'function' ? validator(part, this.resultMock) : part; + } + + private validateRequest(request: KibanaRequest): KibanaRequest { + const config = this.getRoute(request).config; + const validations = config.validate + ? typeof config.validate === 'function' + ? config.validate().request + : config.validate.request + : undefined; + if (!validations) { + return request; + } + + const validatedRequest = requestMock.create({ + path: request.route.path, + method: request.route.method, + body: this.maybeValidate(request.body, validations.body), + query: this.maybeValidate(request.query, validations.query), + params: this.maybeValidate(request.params, validations.params), + }); + + return validatedRequest; + } +} +const createMockServer = () => new MockServer(); + +export const serverMock = { + create: createMockServer, +}; diff --git a/x-pack/plugins/integration_assistant/server/__mocks__/request.ts b/x-pack/plugins/integration_assistant/server/__mocks__/request.ts new file mode 100644 index 0000000000000..827f08683e0b8 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/__mocks__/request.ts @@ -0,0 +1,11 @@ +/* + * 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 { httpServerMock } from '@kbn/core/server/mocks'; + +export const requestMock = { + create: httpServerMock.createKibanaRequest, +}; diff --git a/x-pack/plugins/integration_assistant/server/__mocks__/request_context.ts b/x-pack/plugins/integration_assistant/server/__mocks__/request_context.ts new file mode 100644 index 0000000000000..f7b27c353e2af --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/__mocks__/request_context.ts @@ -0,0 +1,91 @@ +/* + * 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 { coreMock } from '@kbn/core/server/mocks'; +import type { PluginStartContract as ActionsPluginStart } from '@kbn/actions-plugin/server'; +import { loggerMock } from '@kbn/logging-mocks'; +import { FakeLLM } from '@langchain/core/utils/testing'; +import { + ActionsClientChatOpenAI, + ActionsClientSimpleChatModel, +} from '@kbn/langchain/server/language_models'; + +export const createMockClients = () => { + const core = coreMock.createRequestHandlerContext(); + + return { + core, + clusterClient: core.elasticsearch.client, + savedObjectsClient: core.savedObjects.client, + }; +}; + +type MockClients = ReturnType; + +const convertRequestContextMock = >(context: T) => { + return coreMock.createCustomRequestHandlerContext(context); +}; + +const mockLlm = new FakeLLM({ + response: JSON.stringify({}, null, 2), +}) as unknown as ActionsClientChatOpenAI | ActionsClientSimpleChatModel; + +jest.mock('@kbn/langchain/server/language_models', () => { + return { + ActionsClientSimpleChatModel: jest.fn().mockImplementation(() => { + return mockLlm; + }), + ActionsClientChatOpenAI: jest.fn().mockImplementation(() => { + return mockLlm; + }), + }; +}); + +const actions = { + getActionsClientWithRequest: jest.fn().mockResolvedValue({ + get: jest.fn().mockResolvedValue({ + mockLlm, + }), + execute: jest.fn().mockResolvedValue({ + status: 'ok', + data: { + message: '{"Answer": "testAction"}', + }, + }), + }), +} as unknown as ActionsPluginStart; + +const coreSetupMock = coreMock.createSetup(); +const createRequestContextMock = (clients: MockClients = createMockClients()) => { + return { + integrationAssistant: { + getStartServices: (coreSetupMock.getStartServices as jest.Mock).mockImplementation( + async () => { + return [ + {}, + { + actions, + }, + ]; + } + ), + logger: loggerMock.create(), + }, + }; +}; + +const createTools = () => { + const clients = createMockClients(); + const context = createRequestContextMock(clients); + + return { clients, context }; +}; + +export const requestContextMock = { + create: createRequestContextMock, + convertContext: convertRequestContextMock, + createTools, +}; diff --git a/x-pack/plugins/integration_assistant/server/__mocks__/response.ts b/x-pack/plugins/integration_assistant/server/__mocks__/response.ts new file mode 100644 index 0000000000000..8efe2407f2245 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/__mocks__/response.ts @@ -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. + */ + +import { httpServerMock } from '@kbn/core/server/mocks'; + +export const responseMock = { + create: httpServerMock.createResponseFactory, +}; diff --git a/x-pack/plugins/integration_assistant/server/__mocks__/test_adapters.ts b/x-pack/plugins/integration_assistant/server/__mocks__/test_adapters.ts new file mode 100644 index 0000000000000..8972c5f102bdb --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/__mocks__/test_adapters.ts @@ -0,0 +1,64 @@ +/* + * 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 { responseMock } from './response'; + +type ResponseMock = ReturnType; +type Method = keyof ResponseMock; + +type MockCall = any; // eslint-disable-line @typescript-eslint/no-explicit-any + +interface ResponseCall { + body: any; // eslint-disable-line @typescript-eslint/no-explicit-any + status: number; +} + +/** + * @internal + */ +export interface Response extends ResponseCall { + calls: ResponseCall[]; +} + +const buildResponses = (method: Method, calls: MockCall[]): ResponseCall[] => { + if (!calls.length) return []; + + switch (method) { + case 'ok': + return calls.map(([call]) => ({ status: 200, body: call.body })); + case 'custom': + return calls.map(([call]) => ({ + status: call.statusCode, + body: JSON.parse(call.body), + })); + case 'badRequest': + return calls.map(([call]) => ({ + status: 400, + body: call.body, + })); + default: + throw new Error(`Encountered unexpected call to response.${method}`); + } +}; + +export const responseAdapter = (response: ResponseMock): Response => { + const methods = Object.keys(response) as Method[]; + const calls = methods + .reduce((responses, method) => { + const methodMock = response[method]; + return [...responses, ...buildResponses(method, methodMock.mock.calls)]; + }, []) + .sort((call, other) => other.status - call.status); + + const [{ body, status }] = calls; + + return { + body, + status, + calls, + }; +}; diff --git a/x-pack/plugins/integration_assistant/server/routes/build_integration_routes.test.ts b/x-pack/plugins/integration_assistant/server/routes/build_integration_routes.test.ts new file mode 100644 index 0000000000000..6809d826cb81f --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/routes/build_integration_routes.test.ts @@ -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 { serverMock } from '../__mocks__/mock_server'; +import { requestMock } from '../__mocks__/request'; +import { requestContextMock } from '../__mocks__/request_context'; +import { INTEGRATION_BUILDER_PATH } from '../../common'; +import { registerIntegrationBuilderRoutes } from './build_integration_routes'; + +jest.mock('../integration_builder', () => { + return { + buildPackage: jest.fn().mockReturnValue(Buffer.from('{"test" : "test"}')), + }; +}); + +describe('registerIntegrationBuilderRoutes', () => { + let server: ReturnType; + let { context } = requestContextMock.createTools(); + + const req = requestMock.create({ + method: 'post', + path: INTEGRATION_BUILDER_PATH, + body: { + integration: { + name: 'Test', + title: 'Title', + description: 'Description', + dataStreams: [ + { + name: 'dsName', + title: 'dsTitle', + description: 'dsDesc', + inputTypes: ['filestream'], + rawSamples: ['{"ei":0}'], + pipeline: { + processors: [{ script: { source: {} } }], + }, + docs: [], + }, + ], + }, + }, + }); + + beforeEach(() => { + jest.clearAllMocks(); + server = serverMock.create(); + ({ context } = requestContextMock.createTools()); + registerIntegrationBuilderRoutes(server.router); + }); + + it('Runs route and gets CheckPipelineResponse', async () => { + const response = await server.inject(req, requestContextMock.convertContext(context)); + expect(response.body).toEqual({ test: 'test' }); + expect(response.status).toEqual(200); + }); +}); diff --git a/x-pack/plugins/integration_assistant/server/routes/categorization_routes.test.ts b/x-pack/plugins/integration_assistant/server/routes/categorization_routes.test.ts new file mode 100644 index 0000000000000..5a62162eae543 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/routes/categorization_routes.test.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 { serverMock } from '../__mocks__/mock_server'; +import { requestMock } from '../__mocks__/request'; +import { requestContextMock } from '../__mocks__/request_context'; +import { CATEGORIZATION_GRAPH_PATH } from '../../common'; +import { registerCategorizationRoutes } from './categorization_routes'; + +const mockResult = jest.fn().mockResolvedValue({ + results: { + pipeline: { + processors: [{ script: { source: {} } }], + }, + docs: [], + }, +}); + +jest.mock('../graphs/categorization', () => { + return { + getCategorizationGraph: jest.fn().mockResolvedValue({ + invoke: () => mockResult(), + }), + }; +}); + +describe('registerCategorizationRoute', () => { + let server: ReturnType; + let { context } = requestContextMock.createTools(); + + const req = requestMock.create({ + method: 'post', + path: CATEGORIZATION_GRAPH_PATH, + body: { + packageName: 'pack', + dataStreamName: 'testStream', + rawSamples: ['{"ei":0}'], + currentPipeline: { processors: [{ script: { source: {} } }] }, + connectorId: 'testConnector', + }, + }); + + beforeEach(() => { + jest.clearAllMocks(); + server = serverMock.create(); + ({ context } = requestContextMock.createTools()); + registerCategorizationRoutes(server.router); + }); + + it('Runs route and gets CategorizationResponse', async () => { + const response = await server.inject(req, requestContextMock.convertContext(context)); + expect(response.body).toEqual({ + results: { docs: [], pipeline: { processors: [{ script: { source: {} } }] } }, + }); + expect(response.status).toEqual(200); + }); + + it('Runs route with badRequest', async () => { + mockResult.mockResolvedValueOnce({}); + const response = await server.inject(req, requestContextMock.convertContext(context)); + expect(response.status).toEqual(400); + }); +}); diff --git a/x-pack/plugins/integration_assistant/server/routes/ecs_routes.test.ts b/x-pack/plugins/integration_assistant/server/routes/ecs_routes.test.ts new file mode 100644 index 0000000000000..70d0068eb963c --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/routes/ecs_routes.test.ts @@ -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. + */ + +import { serverMock } from '../__mocks__/mock_server'; +import { requestMock } from '../__mocks__/request'; +import { requestContextMock } from '../__mocks__/request_context'; +import { ECS_GRAPH_PATH } from '../../common'; +import { registerEcsRoutes } from './ecs_routes'; + +const mockResult = jest.fn().mockResolvedValue({ + results: { + pipeline: { + processors: [ + { + script: { + source: {}, + }, + }, + ], + }, + mapping: {}, + }, +}); + +jest.mock('../graphs/ecs', () => { + return { + getEcsGraph: jest.fn().mockResolvedValue({ + invoke: () => mockResult(), + }), + }; +}); + +describe('registerEcsRoute', () => { + let server: ReturnType; + let { context } = requestContextMock.createTools(); + + const req = requestMock.create({ + method: 'post', + path: ECS_GRAPH_PATH, + body: { + packageName: 'pack', + dataStreamName: 'testStream', + rawSamples: ['{"ei":0}'], + connectorId: 'testConnector', + }, + }); + + beforeEach(() => { + jest.clearAllMocks(); + server = serverMock.create(); + ({ context } = requestContextMock.createTools()); + registerEcsRoutes(server.router); + }); + + it('Runs route and gets EcsMappingResponse', async () => { + const response = await server.inject(req, requestContextMock.convertContext(context)); + expect(response.body).toEqual({ + results: { mapping: {}, pipeline: { processors: [{ script: { source: {} } }] } }, + }); + expect(response.status).toEqual(200); + }); + + it('Runs route with badRequest', async () => { + mockResult.mockResolvedValueOnce({}); + const response = await server.inject(req, requestContextMock.convertContext(context)); + expect(response.status).toEqual(400); + }); +}); diff --git a/x-pack/plugins/integration_assistant/server/routes/pipeline_routes.test.ts b/x-pack/plugins/integration_assistant/server/routes/pipeline_routes.test.ts new file mode 100644 index 0000000000000..c40472c1131d5 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/routes/pipeline_routes.test.ts @@ -0,0 +1,57 @@ +/* + * 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 { serverMock } from '../__mocks__/mock_server'; +import { requestMock } from '../__mocks__/request'; +import { requestContextMock } from '../__mocks__/request_context'; +import { CHECK_PIPELINE_PATH } from '../../common'; +import { registerPipelineRoutes } from './pipeline_routes'; + +const errors: object[] = []; + +const pipelineResults = [ + { + script: { + source: {}, + }, + }, +]; + +jest.mock('../util/pipeline', () => { + return { + testPipeline: jest.fn().mockReturnValue({ errors, pipelineResults }), + }; +}); + +describe('registerPipelineRoutes', () => { + let server: ReturnType; + let { context } = requestContextMock.createTools(); + + const req = requestMock.create({ + method: 'post', + path: CHECK_PIPELINE_PATH, + body: { + rawSamples: ['{"ei":0}'], + pipeline: { processors: [{ script: { source: {} } }] }, + }, + }); + + beforeEach(() => { + jest.clearAllMocks(); + server = serverMock.create(); + ({ context } = requestContextMock.createTools()); + registerPipelineRoutes(server.router); + }); + + it('Runs route and gets CheckPipelineResponse', async () => { + const response = await server.inject(req, requestContextMock.convertContext(context)); + expect(response.body).toEqual({ + results: { docs: [{ script: { source: {} } }] }, + }); + expect(response.status).toEqual(200); + }); +}); diff --git a/x-pack/plugins/integration_assistant/server/routes/related_routes.test.ts b/x-pack/plugins/integration_assistant/server/routes/related_routes.test.ts new file mode 100644 index 0000000000000..f393b36a30599 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/routes/related_routes.test.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 { serverMock } from '../__mocks__/mock_server'; +import { requestMock } from '../__mocks__/request'; +import { requestContextMock } from '../__mocks__/request_context'; +import { RELATED_GRAPH_PATH } from '../../common'; +import { registerRelatedRoutes } from './related_routes'; + +const mockResult = jest.fn().mockResolvedValue({ + results: { + pipeline: { + processors: [{ script: { source: {} } }], + }, + docs: [], + }, +}); + +jest.mock('../graphs/related', () => { + return { + getRelatedGraph: jest.fn().mockResolvedValue({ + invoke: () => mockResult(), + }), + }; +}); + +describe('registerRelatedRoutes', () => { + let server: ReturnType; + let { context } = requestContextMock.createTools(); + + const req = requestMock.create({ + method: 'post', + path: RELATED_GRAPH_PATH, + body: { + packageName: 'pack', + dataStreamName: 'testStream', + rawSamples: ['{"ei":0}'], + currentPipeline: { processors: [{ script: { source: {} } }] }, + connectorId: 'testConnector', + }, + }); + + beforeEach(() => { + jest.clearAllMocks(); + server = serverMock.create(); + ({ context } = requestContextMock.createTools()); + registerRelatedRoutes(server.router); + }); + + it('Runs route and gets RelatedResponse', async () => { + const response = await server.inject(req, requestContextMock.convertContext(context)); + expect(response.body).toEqual({ + results: { docs: [], pipeline: { processors: [{ script: { source: {} } }] } }, + }); + expect(response.status).toEqual(200); + }); + + it('Runs route with badRequest', async () => { + mockResult.mockResolvedValueOnce({}); + const response = await server.inject(req, requestContextMock.convertContext(context)); + expect(response.status).toEqual(400); + }); +}); diff --git a/x-pack/plugins/integration_assistant/tsconfig.json b/x-pack/plugins/integration_assistant/tsconfig.json index f16493407b415..ec7a7e094997d 100644 --- a/x-pack/plugins/integration_assistant/tsconfig.json +++ b/x-pack/plugins/integration_assistant/tsconfig.json @@ -31,6 +31,10 @@ "@kbn/shared-ux-router", "@kbn/zod-helpers", "@kbn/stack-connectors-plugin", - "@kbn/core-analytics-browser" + "@kbn/core-analytics-browser", + "@kbn/logging-mocks", + "@kbn/core-http-request-handler-context-server", + "@kbn/core-http-router-server-mocks", + "@kbn/core-http-server" ] } diff --git a/x-pack/plugins/license_management/__jest__/__snapshots__/upload_license.test.tsx.snap b/x-pack/plugins/license_management/__jest__/__snapshots__/upload_license.test.tsx.snap index 8a845149b95e8..eb9f2e7265f47 100644 --- a/x-pack/plugins/license_management/__jest__/__snapshots__/upload_license.test.tsx.snap +++ b/x-pack/plugins/license_management/__jest__/__snapshots__/upload_license.test.tsx.snap @@ -37,33 +37,29 @@ exports[`UploadLicense should display a modal when license requires acknowledgem class="euiForm" >
+
- -
-
+ Select or drag your license file +
+
- -
-
+ Select or drag your license file +
+
- -
-
+ Select or drag your license file +
+
- -
-
+ Select or drag your license file +
+
- -
-
+ Select or drag your license file +
{ map((license) => new LogstashLicenseService(license)) ); + const pluginName = i18n.translate('xpack.logstash.managementSection.pipelinesTitle', { + defaultMessage: 'Logstash Pipelines', + }); + const managementApp = plugins.management.sections.section.ingest.registerApp({ id: 'pipelines', - title: i18n.translate('xpack.logstash.managementSection.pipelinesTitle', { - defaultMessage: 'Logstash Pipelines', - }), + title: pluginName, order: 1, mount: async (params) => { const [coreStart] = await core.getStartServices(); const { renderApp } = await import('./application'); const isMonitoringEnabled = 'monitoring' in plugins; - return renderApp(coreStart, params, isMonitoringEnabled, logstashLicense$); + const { docTitle } = coreStart.chrome; + docTitle.change(pluginName); + + const unmountAppCallback = await renderApp( + coreStart, + params, + isMonitoringEnabled, + logstashLicense$ + ); + + return () => { + docTitle.reset(); + unmountAppCallback(); + }; }, }); diff --git a/x-pack/plugins/maps/public/classes/styles/vector/components/symbol/__snapshots__/custom_icon_modal.test.tsx.snap b/x-pack/plugins/maps/public/classes/styles/vector/components/symbol/__snapshots__/custom_icon_modal.test.tsx.snap index 7f380b8d15c72..16293d2db5057 100644 --- a/x-pack/plugins/maps/public/classes/styles/vector/components/symbol/__snapshots__/custom_icon_modal.test.tsx.snap +++ b/x-pack/plugins/maps/public/classes/styles/vector/components/symbol/__snapshots__/custom_icon_modal.test.tsx.snap @@ -35,11 +35,9 @@ exports[`should render a custom icon modal with an existing icon 1`] = ` isInvalid={false} labelType="label" > - - { + docTitle.reset(); + unmountAppCallback(); + }; }, }); } diff --git a/x-pack/plugins/ml/public/application/settings/calendars/edit/import_modal/__snapshots__/import_modal.test.js.snap b/x-pack/plugins/ml/public/application/settings/calendars/edit/import_modal/__snapshots__/import_modal.test.js.snap index 6b56afba3ebe2..747e801a278a7 100644 --- a/x-pack/plugins/ml/public/application/settings/calendars/edit/import_modal/__snapshots__/import_modal.test.js.snap +++ b/x-pack/plugins/ml/public/application/settings/calendars/edit/import_modal/__snapshots__/import_modal.test.js.snap @@ -40,10 +40,9 @@ exports[`ImportModal Renders import modal 1`] = ` - diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality/dataset_quality.tsx b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality/dataset_quality.tsx index 44d72802bc868..2a06fddf9f64d 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality/dataset_quality.tsx +++ b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality/dataset_quality.tsx @@ -8,6 +8,7 @@ import React, { useMemo } from 'react'; import { CoreStart } from '@kbn/core/public'; import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import { dynamic } from '@kbn/shared-ux-utility'; +import { PerformanceContextProvider } from '@kbn/ebt-tools'; import { DatasetQualityContext, DatasetQualityContextValue } from './context'; import { useKibanaContextForPluginProvider } from '../../utils'; import { DatasetQualityStartDeps } from '../../types'; @@ -41,13 +42,15 @@ export const createDatasetQuality = ({ ); return ( - - - - - - - + + + + + + + + + ); }; }; diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality/summary_panel/datasets_quality_indicators.tsx b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality/summary_panel/datasets_quality_indicators.tsx index 7bb4acc8d450d..836580565b2d8 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality/summary_panel/datasets_quality_indicators.tsx +++ b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality/summary_panel/datasets_quality_indicators.tsx @@ -19,6 +19,7 @@ import { EuiIconTip, EuiSkeletonTitle, } from '@elastic/eui'; +import { usePerformanceContext } from '@kbn/ebt-tools'; import { InfoIndicators } from '../../../../common/types'; import { useSummaryPanelContext } from '../../../hooks'; import { @@ -31,11 +32,16 @@ import { import { mapPercentagesToQualityCounts } from '../../quality_indicator'; export function DatasetsQualityIndicators() { + const { onPageReady } = usePerformanceContext(); const { datasetsQuality, isDatasetsQualityLoading, datasetsActivity } = useSummaryPanelContext(); const qualityCounts = mapPercentagesToQualityCounts(datasetsQuality.percentages); const datasetsWithoutIgnoredField = datasetsActivity.total > 0 ? datasetsActivity.total - datasetsQuality.percentages.length : 0; + if (!isDatasetsQualityLoading) { + onPageReady(); + } + return ( diff --git a/x-pack/plugins/observability_solution/dataset_quality/tsconfig.json b/x-pack/plugins/observability_solution/dataset_quality/tsconfig.json index 564a1e4216847..8fcb39724d19e 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/tsconfig.json +++ b/x-pack/plugins/observability_solution/dataset_quality/tsconfig.json @@ -49,7 +49,8 @@ "@kbn/metrics-data-access-plugin", "@kbn/calculate-auto", "@kbn/discover-plugin", - "@kbn/shared-ux-prompt-no-data-views-types" + "@kbn/shared-ux-prompt-no-data-views-types", + "@kbn/ebt-tools" ], "exclude": [ "target/**/*" diff --git a/x-pack/plugins/observability_solution/observability/public/components/alert_search_bar/containers/use_alert_search_bar_state_container.tsx b/x-pack/plugins/observability_solution/observability/public/components/alert_search_bar/containers/use_alert_search_bar_state_container.tsx index 46709a242669f..5237ab1f17c2a 100644 --- a/x-pack/plugins/observability_solution/observability/public/components/alert_search_bar/containers/use_alert_search_bar_state_container.tsx +++ b/x-pack/plugins/observability_solution/observability/public/components/alert_search_bar/containers/use_alert_search_bar_state_container.tsx @@ -123,16 +123,15 @@ function useUrlStateSyncEffect( replace ); - start(); - - syncUrlStateWithInitialContainerState( + initializeUrlAndStateContainer( timefilterService, stateContainer, urlStateStorage, - urlStorageKey, - replace + urlStorageKey ); + start(); + return stop; }, [stateContainer, history, timefilterService, urlStorageKey, replace]); } @@ -162,43 +161,33 @@ function setupUrlStateSync( }); } -function syncUrlStateWithInitialContainerState( +function initializeUrlAndStateContainer( timefilterService: TimefilterContract, stateContainer: AlertSearchBarStateContainer, urlStateStorage: IKbnUrlStateStorage, - urlStorageKey: string, - replace: boolean = true + urlStorageKey: string ) { const urlState = alertSearchBarState.decode( urlStateStorage.get>(urlStorageKey) ); + const validUrlState = isRight(urlState) ? pipe(urlState).right : {}; + const timeFilterTime = timefilterService.getTime(); + const timeFilterState = timefilterService.isTimeTouched() + ? { + rangeFrom: timeFilterTime.from, + rangeTo: timeFilterTime.to, + } + : {}; - if (isRight(urlState)) { - const newState = { - ...defaultState, - ...pipe(urlState).right, - }; + const currentState = { + ...defaultState, + ...timeFilterState, + ...validUrlState, + }; - stateContainer.set(newState); - urlStateStorage.set(urlStorageKey, stateContainer.get(), { - replace: true, - }); - return; - } else if (timefilterService.isTimeTouched()) { - const { from, to } = timefilterService.getTime(); - const newState = { - ...defaultState, - rangeFrom: from, - rangeTo: to, - }; - stateContainer.set(newState); - } else { - // Reset the state container when no URL state or timefilter range is set to avoid accidentally - // re-using state set on a previous visit to the page in the same session - stateContainer.set(defaultState); - } - - urlStateStorage.set(urlStorageKey, stateContainer.get(), { - replace, + stateContainer.set(currentState); + urlStateStorage.set(urlStorageKey, currentState, { + replace: true, }); + urlStateStorage.kbnUrlControls.flush(); } diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/elasticsearch.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/elasticsearch.ts index 81a9cffc6d033..8c255b885fd4c 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/elasticsearch.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/elasticsearch.ts @@ -39,7 +39,7 @@ export function registerElasticsearchFunction({ }, async ({ arguments: { method, path, body } }) => { const esClient = (await resources.context.core).elasticsearch.client; - const response = esClient.asCurrentUser.transport.request({ + const response = await esClient.asCurrentUser.transport.request({ method, path, body, diff --git a/x-pack/plugins/observability_solution/observability_logs_explorer/common/translations.ts b/x-pack/plugins/observability_solution/observability_logs_explorer/common/translations.ts index 078939b52ee16..f89c6eb47e6c4 100644 --- a/x-pack/plugins/observability_solution/observability_logs_explorer/common/translations.ts +++ b/x-pack/plugins/observability_solution/observability_logs_explorer/common/translations.ts @@ -61,6 +61,6 @@ export const createSLoLabel = i18n.translate('xpack.observabilityLogsExplorer.cr export const datasetQualityLinkTitle = i18n.translate( 'xpack.observabilityLogsExplorer.datasetQualityLinkTitle', { - defaultMessage: 'Datasets', + defaultMessage: 'Data sets', } ); diff --git a/x-pack/plugins/observability_solution/observability_logs_explorer/kibana.jsonc b/x-pack/plugins/observability_solution/observability_logs_explorer/kibana.jsonc index c153124e5bd68..f123bbc9795b3 100644 --- a/x-pack/plugins/observability_solution/observability_logs_explorer/kibana.jsonc +++ b/x-pack/plugins/observability_solution/observability_logs_explorer/kibana.jsonc @@ -19,7 +19,8 @@ "observabilityShared", "slo", "share", - "kibanaUtils" + "kibanaUtils", + "dataQuality" ], "optionalPlugins": [ "serverless", @@ -35,7 +36,7 @@ "triggersActionsUi" ], "extraPublicDirs": [ - "common", + "common" ] } } diff --git a/x-pack/plugins/observability_solution/observability_logs_explorer/public/components/logs_explorer_top_nav_menu.tsx b/x-pack/plugins/observability_solution/observability_logs_explorer/public/components/logs_explorer_top_nav_menu.tsx index 5d94c88251445..fb96bdbfc65f1 100644 --- a/x-pack/plugins/observability_solution/observability_logs_explorer/public/components/logs_explorer_top_nav_menu.tsx +++ b/x-pack/plugins/observability_solution/observability_logs_explorer/public/components/logs_explorer_top_nav_menu.tsx @@ -27,6 +27,7 @@ import { ConnectedDiscoverLink } from './discover_link'; import { FeedbackLink } from './feedback_link'; import { ConnectedOnboardingLink } from './onboarding_link'; import { AlertsPopover } from './alerts_popover'; +import { ConnectedDatasetQualityLink } from './dataset_quality_link'; export const LogsExplorerTopNavMenu = () => { const { @@ -70,6 +71,8 @@ const ProjectTopNav = () => { + + @@ -145,6 +148,8 @@ const ClassicTopNav = () => { + + diff --git a/x-pack/plugins/observability_solution/slo/public/application.tsx b/x-pack/plugins/observability_solution/slo/public/application.tsx index aedfba1b1eada..de8851d2dd67c 100644 --- a/x-pack/plugins/observability_solution/slo/public/application.tsx +++ b/x-pack/plugins/observability_solution/slo/public/application.tsx @@ -5,28 +5,27 @@ * 2.0. */ -import React from 'react'; -import ReactDOM from 'react-dom'; -import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; -import { KibanaThemeProvider } from '@kbn/react-kibana-context-theme'; import { AppMountParameters, APP_WRAPPER_CLASS, CoreStart } from '@kbn/core/public'; +import { PerformanceContextProvider } from '@kbn/ebt-tools'; +import { i18n } from '@kbn/i18n'; +import { EuiThemeProvider } from '@kbn/kibana-react-plugin/common'; +import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; +import { Storage } from '@kbn/kibana-utils-plugin/public'; +import { ObservabilityRuleTypeRegistry } from '@kbn/observability-plugin/public'; import type { LazyObservabilityPageTemplateProps } from '@kbn/observability-shared-plugin/public'; -import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; -import { Router, Routes, Route } from '@kbn/shared-ux-router'; import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render'; -import { EuiThemeProvider } from '@kbn/kibana-react-plugin/common'; +import { KibanaThemeProvider } from '@kbn/react-kibana-context-theme'; import { RedirectAppLinks } from '@kbn/shared-ux-link-redirect-app'; +import { Route, Router, Routes } from '@kbn/shared-ux-router'; import { UsageCollectionSetup } from '@kbn/usage-collection-plugin/public'; -import { Storage } from '@kbn/kibana-utils-plugin/public'; -import { ObservabilityRuleTypeRegistry } from '@kbn/observability-plugin/public'; - -import { i18n } from '@kbn/i18n'; -import { usePluginContext } from './hooks/use_plugin_context'; +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import React from 'react'; +import ReactDOM from 'react-dom'; +import { ExperimentalFeatures } from '../common/config'; import { PluginContext } from './context/plugin_context'; - -import { SloPublicPluginsStart } from './types'; +import { usePluginContext } from './hooks/use_plugin_context'; import { getRoutes } from './routes/routes'; -import { ExperimentalFeatures } from '../common/config'; +import { SloPublicPluginsStart } from './types'; function App() { const { isServerless } = usePluginContext(); @@ -140,9 +139,11 @@ export const renderApp = ({ coreStart={core} data-test-subj="observabilityMainContainer" > - - - + + + + + diff --git a/x-pack/plugins/observability_solution/slo/public/embeddable/slo/common/constants.ts b/x-pack/plugins/observability_solution/slo/public/embeddable/slo/common/constants.ts index b263c043d7acf..bfb65b58f3158 100644 --- a/x-pack/plugins/observability_solution/slo/public/embeddable/slo/common/constants.ts +++ b/x-pack/plugins/observability_solution/slo/public/embeddable/slo/common/constants.ts @@ -4,11 +4,15 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ +import { i18n } from '@kbn/i18n'; export const COMMON_SLO_GROUPING = [ { id: 'slos', - getDisplayName: () => 'Observability', + getDisplayName: () => + i18n.translate('xpack.slo.common.constants.grouping.legacy', { + defaultMessage: 'Observability', + }), getIconType: () => { return 'visGauge'; }, diff --git a/x-pack/plugins/observability_solution/slo/public/embeddable/slo/overview/group_view/group_view.tsx b/x-pack/plugins/observability_solution/slo/public/embeddable/slo/overview/group_view/group_view.tsx index 04e3543b02565..76221ecabe496 100644 --- a/x-pack/plugins/observability_solution/slo/public/embeddable/slo/overview/group_view/group_view.tsx +++ b/x-pack/plugins/observability_solution/slo/public/embeddable/slo/overview/group_view/group_view.tsx @@ -18,14 +18,14 @@ interface Props { groupBy: GroupByField; groups?: string[]; kqlQuery?: string; - sloView: SLOView; + view: SLOView; sort?: SortField; filters?: Filter[]; reloadSubject: Subject; } export function GroupSloView({ - sloView, + view, groupBy = 'status', groups = [], kqlQuery = '', @@ -46,7 +46,7 @@ export function GroupSloView({ return ( ({ ...jest.requireActual('react-router-dom'), @@ -49,9 +50,9 @@ jest.mock('../../hooks/use_fetch_historical_summary'); jest.mock('../../hooks/use_delete_slo'); jest.mock('../../hooks/use_create_data_view'); jest.mock('../../hooks/use_delete_slo_instance'); +jest.mock('@kbn/ebt-tools'); const useKibanaMock = useKibana as jest.Mock; - const useLicenseMock = useLicense as jest.Mock; const usePermissionsMock = usePermissions as jest.Mock; const useFetchActiveAlertsMock = useFetchActiveAlerts as jest.Mock; @@ -61,8 +62,10 @@ const useDeleteSloMock = useDeleteSlo as jest.Mock; const useCreateDataViewsMock = useCreateDataView as jest.Mock; const useDeleteSloInstanceMock = useDeleteSloInstance as jest.Mock; const TagsListMock = TagsList as jest.Mock; -TagsListMock.mockReturnValue(
Tags list
); +const usePerformanceContextMock = usePerformanceContext as jest.Mock; +usePerformanceContextMock.mockReturnValue({ onPageReady: jest.fn() }); +TagsListMock.mockReturnValue(
Tags list
); const HeaderMenuPortalMock = HeaderMenuPortal as jest.Mock; HeaderMenuPortalMock.mockReturnValue(
Portal node
); diff --git a/x-pack/plugins/observability_solution/slo/public/pages/slo_details/slo_details.tsx b/x-pack/plugins/observability_solution/slo/public/pages/slo_details/slo_details.tsx index 3da2e0f991109..26cdf62b4f7b4 100644 --- a/x-pack/plugins/observability_solution/slo/public/pages/slo_details/slo_details.tsx +++ b/x-pack/plugins/observability_solution/slo/public/pages/slo_details/slo_details.tsx @@ -8,6 +8,7 @@ import { EuiLoadingSpinner, EuiSkeletonText } from '@elastic/eui'; import type { ChromeBreadcrumb } from '@kbn/core-chrome-browser'; import type { IBasePath } from '@kbn/core-http-browser'; +import { usePerformanceContext } from '@kbn/ebt-tools'; import { i18n } from '@kbn/i18n'; import { useBreadcrumbs } from '@kbn/observability-shared-plugin/public'; import type { SLOWithSummaryResponse } from '@kbn/slo-schema'; @@ -34,6 +35,7 @@ import { useSloDetailsTabs } from './hooks/use_slo_details_tabs'; import type { SloDetailsPathParams } from './types'; export function SloDetailsPage() { + const { onPageReady } = usePerformanceContext(); const { application: { navigateToUrl }, http: { basePath }, @@ -78,6 +80,7 @@ export function SloDetailsPage() { Instance Id: ${slo.instanceId} Description: ${slo.description} Observed value: ${slo.summary.sliValue} + Error budget remaining: ${slo.summary.errorBudget.remaining} Status: ${slo.summary.status} `), data: [ @@ -96,6 +99,12 @@ export function SloDetailsPage() { } }, [hasRightLicense, permissions, navigateToUrl, basePath]); + useEffect(() => { + if (!isLoading && slo !== undefined) { + onPageReady(); + } + }, [onPageReady, slo, isLoading]); + useBreadcrumbs(getBreadcrumbs(basePath, slo)); const isSloNotFound = !isLoading && slo === undefined; diff --git a/x-pack/plugins/observability_solution/slo/public/pages/slos/components/grouped_slos/group_list_view.tsx b/x-pack/plugins/observability_solution/slo/public/pages/slos/components/grouped_slos/group_list_view.tsx index cee082338d78c..8342c9aa5976b 100644 --- a/x-pack/plugins/observability_solution/slo/public/pages/slos/components/grouped_slos/group_list_view.tsx +++ b/x-pack/plugins/observability_solution/slo/public/pages/slos/components/grouped_slos/group_list_view.tsx @@ -37,7 +37,7 @@ import { useGroupName } from './hooks/use_group_name'; interface Props { group: string; kqlQuery?: string; - sloView: SLOView; + view: SLOView; sort?: SortField; direction?: SortDirection; groupBy: GroupByField; @@ -48,7 +48,7 @@ interface Props { export function GroupListView({ group, kqlQuery, - sloView, + view, sort, direction, groupBy, @@ -203,7 +203,7 @@ export function GroupListView({ sloList={results} loading={isLoading || isRefetching} error={isError} - sloView={sloView} + view={view} /> {total > 0 && total > itemsPerPage ? ( diff --git a/x-pack/plugins/observability_solution/slo/public/pages/slos/components/grouped_slos/group_view.test.tsx b/x-pack/plugins/observability_solution/slo/public/pages/slos/components/grouped_slos/group_view.test.tsx index 775659f6be580..c3be325bb10e3 100644 --- a/x-pack/plugins/observability_solution/slo/public/pages/slos/components/grouped_slos/group_view.test.tsx +++ b/x-pack/plugins/observability_solution/slo/public/pages/slos/components/grouped_slos/group_view.test.tsx @@ -50,7 +50,7 @@ describe('Group View', () => { refetch: jest.fn(), }); const { queryByTestId, getByTestId } = render( - + ); expect(queryByTestId('sloGroupView')).toBeNull(); @@ -71,7 +71,7 @@ describe('Group View', () => { }); const { queryByTestId, getByTestId } = render( - + ); expect(queryByTestId('sloGroupView')).toBeNull(); @@ -85,7 +85,7 @@ describe('Group View', () => { }); const { queryByTestId, getByTestId } = render( - + ); expect(queryByTestId('sloGroupView')).toBeNull(); expect(getByTestId('sloGroupListLoading')).toBeInTheDocument(); @@ -170,13 +170,7 @@ describe('Group View', () => { refetch: jest.fn(), }); const { queryAllByTestId, getByTestId } = render( - + ); expect(getByTestId('sloGroupView')).toBeInTheDocument(); expect(useFetchSloGroups).toHaveBeenCalled(); @@ -220,13 +214,7 @@ describe('Group View', () => { }); const { queryAllByTestId } = render( - + ); expect(useFetchSloGroups).toHaveBeenCalled(); expect(useFetchSloGroups).toHaveBeenCalledWith({ @@ -242,7 +230,7 @@ describe('Group View', () => { describe('group by status', () => { it('should render slo groups grouped by status', async () => { const { getByTestId } = render( - + ); expect(getByTestId('sloGroupView')).toBeInTheDocument(); expect(useFetchSloGroups).toHaveBeenCalled(); @@ -261,7 +249,7 @@ describe('Group View', () => { diff --git a/x-pack/plugins/observability_solution/slo/public/pages/slos/components/grouped_slos/group_view.tsx b/x-pack/plugins/observability_solution/slo/public/pages/slos/components/grouped_slos/group_view.tsx index ffe7c1ede95b2..3cec6fef539e6 100644 --- a/x-pack/plugins/observability_solution/slo/public/pages/slos/components/grouped_slos/group_view.tsx +++ b/x-pack/plugins/observability_solution/slo/public/pages/slos/components/grouped_slos/group_view.tsx @@ -19,7 +19,7 @@ import { GroupListView } from './group_list_view'; interface Props { groupBy: GroupByField; kqlQuery?: string; - sloView: SLOView; + view: SLOView; sort?: SortField; direction?: SortDirection; filters?: Filter[]; @@ -29,7 +29,7 @@ interface Props { export function GroupView({ kqlQuery, - sloView, + view, sort, direction, groupBy, @@ -83,7 +83,7 @@ export function GroupView({ result.summary.status), (groupResults) => groupResults.map((result) => `- ${result.name}`).join('\n') - ) as Record; + ) as Record; return observabilityAIAssistant.service.setScreenContext({ screenDescription: dedent(`The user is looking at a list of SLOs. @@ -78,12 +80,18 @@ export function SloList() { }); }, [sloList, observabilityAIAssistant]); + useEffect(() => { + if (!isLoading && sloList !== undefined) { + onPageReady(); + } + }, [isLoading, sloList, onPageReady]); + return ( onStateChange({ view: newView })} onStateChange={onStateChange} state={state} @@ -91,34 +99,16 @@ export function SloList() { /> {groupBy === 'ungrouped' && ( - <> - - {total > 0 && total > perPage ? ( - - { - onStateChange({ page: newPage }); - }} - itemsPerPage={perPage} - itemsPerPageOptions={[10, 25, 50, 100]} - onChangeItemsPerPage={(newPerPage) => { - onStateChange({ perPage: newPerPage, page: 0 }); - }} - /> - - ) : null} - + )} {groupBy !== 'ungrouped' && ( ; } @@ -32,7 +32,7 @@ export function SlosView({ sloList, loading, error, sloView }: Props) { return ; } - if (sloView === 'cardView') { + if (view === 'cardView') { return ( @@ -45,7 +45,7 @@ export function SlosView({ sloList, loading, error, sloView }: Props) { ); } - if (sloView === 'compactView') { + if (view === 'compactView') { return ( diff --git a/x-pack/plugins/observability_solution/slo/public/pages/slos/components/toggle_slo_view.tsx b/x-pack/plugins/observability_solution/slo/public/pages/slos/components/toggle_slo_view.tsx index e545ca84beee7..a6a35912269a1 100644 --- a/x-pack/plugins/observability_solution/slo/public/pages/slos/components/toggle_slo_view.tsx +++ b/x-pack/plugins/observability_solution/slo/public/pages/slos/components/toggle_slo_view.tsx @@ -18,7 +18,7 @@ export type SLOView = 'cardView' | 'listView' | 'compactView'; interface Props { onChangeView: (view: SLOView) => void; onStateChange: (newState: Partial) => void; - sloView: SLOView; + view: SLOView; state: SearchState; sloList?: FindSLOResponse; loading: boolean; @@ -47,7 +47,7 @@ const toggleButtonsIcons = [ ]; export function ToggleSLOView({ - sloView, + view, onChangeView, onStateChange, sloList, @@ -95,7 +95,7 @@ export function ToggleSLOView({ defaultMessage: 'SLO View', })} options={toggleButtonsIcons} - idSelected={sloView} + idSelected={view} onChange={(id) => onChangeView(id as SLOView)} isIconOnly isDisabled={loading} diff --git a/x-pack/plugins/observability_solution/slo/public/pages/slos/components/ungrouped_slos/ungrouped_view.tsx b/x-pack/plugins/observability_solution/slo/public/pages/slos/components/ungrouped_slos/ungrouped_view.tsx new file mode 100644 index 0000000000000..0374204b7e651 --- /dev/null +++ b/x-pack/plugins/observability_solution/slo/public/pages/slos/components/ungrouped_slos/ungrouped_view.tsx @@ -0,0 +1,48 @@ +/* + * 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 { EuiFlexItem, EuiTablePagination } from '@elastic/eui'; +import { FindSLOResponse } from '@kbn/slo-schema'; +import React from 'react'; +import { useUrlSearchState } from '../../hooks/use_url_search_state'; +import { SlosView } from '../slos_view'; +import { SLOView } from '../toggle_slo_view'; + +export interface Props { + sloList: FindSLOResponse | undefined; + loading: boolean; + error: boolean; + view: SLOView; +} + +export function UngroupedView({ sloList, loading, error, view }: Props) { + const { state, onStateChange } = useUrlSearchState(); + const { page, perPage } = state; + const { results = [], total = 0 } = sloList ?? {}; + + return ( + <> + + {total > 0 && total > perPage ? ( + + { + onStateChange({ page: newPage }); + }} + itemsPerPage={perPage} + itemsPerPageOptions={[10, 25, 50, 100]} + onChangeItemsPerPage={(newPerPage) => { + onStateChange({ perPage: newPerPage, page: 0 }); + }} + /> + + ) : null} + + ); +} diff --git a/x-pack/plugins/observability_solution/slo/public/pages/slos/slos.test.tsx b/x-pack/plugins/observability_solution/slo/public/pages/slos/slos.test.tsx index 1510af2e6d194..f8db25d20c9f2 100644 --- a/x-pack/plugins/observability_solution/slo/public/pages/slos/slos.test.tsx +++ b/x-pack/plugins/observability_solution/slo/public/pages/slos/slos.test.tsx @@ -7,7 +7,9 @@ import { waitForEuiPopoverOpen } from '@elastic/eui/lib/test/rtl'; import { chartPluginMock } from '@kbn/charts-plugin/public/mocks'; +import { usePerformanceContext } from '@kbn/ebt-tools'; import { observabilityAIAssistantPluginMock } from '@kbn/observability-ai-assistant-plugin/public/mock'; +import { HeaderMenuPortal, TagsList } from '@kbn/observability-shared-plugin/public'; import { encode } from '@kbn/rison'; import { act, fireEvent, screen, waitFor } from '@testing-library/react'; import React from 'react'; @@ -15,19 +17,18 @@ import Router from 'react-router-dom'; import { paths } from '../../../common/locators/paths'; import { historicalSummaryData } from '../../data/slo/historical_summary_data'; import { emptySloList, sloList } from '../../data/slo/slo'; -import { usePermissions } from '../../hooks/use_permissions'; +import { useCreateDataView } from '../../hooks/use_create_data_view'; import { useCreateSlo } from '../../hooks/use_create_slo'; import { useDeleteSlo } from '../../hooks/use_delete_slo'; import { useDeleteSloInstance } from '../../hooks/use_delete_slo_instance'; import { useFetchHistoricalSummary } from '../../hooks/use_fetch_historical_summary'; import { useFetchSloList } from '../../hooks/use_fetch_slo_list'; import { useLicense } from '../../hooks/use_license'; -import { HeaderMenuPortal, TagsList } from '@kbn/observability-shared-plugin/public'; +import { usePermissions } from '../../hooks/use_permissions'; import { useKibana } from '../../utils/kibana_react'; import { render } from '../../utils/test_helper'; -import { SlosPage } from './slos'; import { useGetSettings } from '../slo_settings/use_get_settings'; -import { useCreateDataView } from '../../hooks/use_create_data_view'; +import { SlosPage } from './slos'; jest.mock('react-router-dom', () => ({ ...jest.requireActual('react-router-dom'), @@ -46,6 +47,7 @@ jest.mock('../../hooks/use_fetch_historical_summary'); jest.mock('../../hooks/use_permissions'); jest.mock('../../hooks/use_capabilities'); jest.mock('../../hooks/use_create_data_view'); +jest.mock('@kbn/ebt-tools'); const useGetSettingsMock = useGetSettings as jest.Mock; const useKibanaMock = useKibana as jest.Mock; @@ -58,9 +60,10 @@ const useFetchHistoricalSummaryMock = useFetchHistoricalSummary as jest.Mock; const usePermissionsMock = usePermissions as jest.Mock; const useCreateDataViewMock = useCreateDataView as jest.Mock; const TagsListMock = TagsList as jest.Mock; +const usePerformanceContextMock = usePerformanceContext as jest.Mock; +usePerformanceContextMock.mockReturnValue({ onPageReady: jest.fn() }); TagsListMock.mockReturnValue(
Tags list
); - const HeaderMenuPortalMock = HeaderMenuPortal as jest.Mock; HeaderMenuPortalMock.mockReturnValue(
Portal node
); diff --git a/x-pack/plugins/observability_solution/slo/public/utils/test_helper.tsx b/x-pack/plugins/observability_solution/slo/public/utils/test_helper.tsx index 5744a802f6aff..1fe6ece726610 100644 --- a/x-pack/plugins/observability_solution/slo/public/utils/test_helper.tsx +++ b/x-pack/plugins/observability_solution/slo/public/utils/test_helper.tsx @@ -5,19 +5,18 @@ * 2.0. */ -import React from 'react'; -import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; -import { render as testLibRender } from '@testing-library/react'; import { AppMountParameters } from '@kbn/core/public'; import { coreMock } from '@kbn/core/public/mocks'; +import { dataPluginMock } from '@kbn/data-plugin/public/mocks'; import { __IntlProvider as IntlProvider } from '@kbn/i18n-react'; +import { EuiThemeProvider } from '@kbn/kibana-react-plugin/common'; import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; +import { createObservabilityRuleTypeRegistryMock } from '@kbn/observability-plugin/public'; import { KibanaPageTemplate } from '@kbn/shared-ux-page-kibana-template'; import translations from '@kbn/translations-plugin/translations/ja-JP.json'; -import { EuiThemeProvider } from '@kbn/kibana-react-plugin/common'; -import { dataPluginMock } from '@kbn/data-plugin/public/mocks'; - -import { createObservabilityRuleTypeRegistryMock } from '@kbn/observability-plugin/public'; +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import { render as testLibRender } from '@testing-library/react'; +import React from 'react'; import { PluginContext } from '../context/plugin_context'; const appMountParameters = { setHeaderActionMenu: () => {} } as unknown as AppMountParameters; diff --git a/x-pack/plugins/observability_solution/slo/tsconfig.json b/x-pack/plugins/observability_solution/slo/tsconfig.json index b3974d1e20c91..25d6c32b6d0db 100644 --- a/x-pack/plugins/observability_solution/slo/tsconfig.json +++ b/x-pack/plugins/observability_solution/slo/tsconfig.json @@ -96,6 +96,7 @@ "@kbn/code-editor", "@kbn/react-kibana-context-render", "@kbn/core-application-browser", - "@kbn/core-theme-browser" + "@kbn/core-theme-browser", + "@kbn/ebt-tools" ] } diff --git a/x-pack/plugins/observability_solution/synthetics/common/rules/uptime_rule_field_map.ts b/x-pack/plugins/observability_solution/synthetics/common/rules/synthetics_rule_field_map.ts similarity index 75% rename from x-pack/plugins/observability_solution/synthetics/common/rules/uptime_rule_field_map.ts rename to x-pack/plugins/observability_solution/synthetics/common/rules/synthetics_rule_field_map.ts index be097ed8d8268..97ed491b320c9 100644 --- a/x-pack/plugins/observability_solution/synthetics/common/rules/uptime_rule_field_map.ts +++ b/x-pack/plugins/observability_solution/synthetics/common/rules/synthetics_rule_field_map.ts @@ -5,7 +5,9 @@ * 2.0. */ -export const uptimeRuleFieldMap = { +import { FieldMap } from '@kbn/alerts-as-data-utils'; + +export const syntheticsRuleFieldMap: FieldMap = { // common fields 'monitor.id': { type: 'keyword', @@ -36,6 +38,27 @@ export const uptimeRuleFieldMap = { type: 'keyword', required: false, }, + 'monitor.tags': { + type: 'keyword', + array: true, + required: false, + }, + configId: { + type: 'keyword', + required: false, + }, + 'host.name': { + type: 'keyword', + required: false, + }, + 'location.id': { + type: 'keyword', + required: false, + }, + 'location.name': { + type: 'keyword', + required: false, + }, // tls alert fields 'tls.server.x509.issuer.common_name': { type: 'keyword', @@ -67,5 +90,3 @@ export const uptimeRuleFieldMap = { required: false, }, } as const; - -export type UptimeRuleFieldMap = typeof uptimeRuleFieldMap; 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 d6a40ff10a642..54238d01a915d 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 @@ -26,6 +26,7 @@ export const OverviewPingCodec = t.intersection([ }), t.partial({ error: PingErrorType, + tags: t.array(t.string), }), ]); diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/fields/uploader.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/fields/uploader.tsx index e028e24504f03..9e9a4803a5795 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/fields/uploader.tsx +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/fields/uploader.tsx @@ -10,6 +10,10 @@ import React, { useState, useRef } from 'react'; import { i18n } from '@kbn/i18n'; import { EuiFormRow, EuiFilePicker } from '@elastic/eui'; +import type { + EuiFilePickerClass, + EuiFilePickerProps, +} from '@elastic/eui/src/components/form/file_picker/file_picker'; interface Props { onUpload: ({ scriptText, fileName }: { scriptText: string; fileName: string }) => void; @@ -18,7 +22,7 @@ interface Props { export function Uploader({ onUpload }: Props) { const fileReader = useRef(null); const [error, setError] = useState(null); - const filePickerRef = useRef(null); + const filePickerRef = useRef(null); const handleFileRead = (fileName: string) => { const content = fileReader?.current?.result as string; @@ -58,7 +62,7 @@ export function Uploader({ onUpload }: Props) { >} initialPromptText={PROMPT_TEXT} onChange={handleFileChosen} display={'large'} 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 5bb366001f0fb..28a01845212d2 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 @@ -19,12 +19,12 @@ import { i18n } from '@kbn/i18n'; import { fromKueryExpression, toElasticsearchQuery } from '@kbn/es-query'; import { legacyExperimentalFieldMap, ObservabilityUptimeAlert } from '@kbn/alerts-as-data-utils'; import { PublicAlertsClient } from '@kbn/alerting-plugin/server/alerts_client/types'; +import { syntheticsRuleFieldMap } from '../../common/rules/synthetics_rule_field_map'; import { combineFiltersAndUserSearch, stringifyKueries } from '../../common/lib'; import { MonitorStatusActionGroup, SYNTHETICS_RULE_TYPES_ALERT_CONTEXT, } from '../../common/constants/synthetics_alerts'; -import { uptimeRuleFieldMap } from '../../common/rules/uptime_rule_field_map'; import { getUptimeIndexPattern, IndexPatternTitleAndFields, @@ -352,10 +352,13 @@ export const generateFilterDSL = async ( return toElasticsearchQuery(fromKueryExpression(combinedString ?? ''), await getIndexPattern()); }; -export const uptimeRuleTypeFieldMap = { ...uptimeRuleFieldMap, ...legacyExperimentalFieldMap }; +export const syntheticsRuleTypeFieldMap = { + ...syntheticsRuleFieldMap, + ...legacyExperimentalFieldMap, +}; -export const UptimeRuleTypeAlertDefinition: IRuleTypeAlerts = { +export const SyntheticsRuleTypeAlertDefinition: IRuleTypeAlerts = { context: SYNTHETICS_RULE_TYPES_ALERT_CONTEXT, - mappings: { fieldMap: uptimeRuleTypeFieldMap }, + mappings: { fieldMap: syntheticsRuleTypeFieldMap }, useLegacyAlerts: true, }; diff --git a/x-pack/plugins/observability_solution/synthetics/server/alert_rules/status_rule/message_utils.ts b/x-pack/plugins/observability_solution/synthetics/server/alert_rules/status_rule/message_utils.ts index f05309dbd8511..22b15b5cdefd0 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/alert_rules/status_rule/message_utils.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/alert_rules/status_rule/message_utils.ts @@ -34,7 +34,9 @@ export const getMonitorAlertDocument = (monitorSummary: MonitorSummaryStatusRule [ALERT_REASON]: monitorSummary.reason, [STATE_ID]: monitorSummary.stateId, 'location.id': monitorSummary.locationId, + 'location.name': monitorSummary.locationName, configId: monitorSummary.configId, + 'monitor.tags': monitorSummary.monitorTags ?? [], }); export const getMonitorSummary = ( @@ -85,6 +87,7 @@ export const getMonitorSummary = ( status: statusMessage, timestamp: monitorInfo['@timestamp'], }), + monitorTags: monitorInfo.tags, }; }; 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 f7a6b54ca1929..d042e8d323302 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 @@ -18,6 +18,7 @@ import { } from '@kbn/alerting-plugin/server'; import { 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'; import { DOWN_LABEL, getMonitorAlertDocument, getMonitorSummary } from './message_utils'; import { @@ -38,7 +39,7 @@ import { getViewInAppUrl, getRelativeViewInAppUrl, getFullViewInAppMessage, - UptimeRuleTypeAlertDefinition, + SyntheticsRuleTypeAlertDefinition, } from '../common'; import { ALERT_DETAILS_URL, getActionVariables, VIEW_IN_APP_URL } from '../action_variables'; import { STATUS_RULE_NAME } from '../translations'; @@ -172,9 +173,10 @@ export const registerSyntheticsStatusCheckRule = ( }; }, alerts: { - ...UptimeRuleTypeAlertDefinition, + ...SyntheticsRuleTypeAlertDefinition, shouldWrite: true, } as IRuleTypeAlerts, + fieldsForAAD: Object.keys(syntheticsRuleFieldMap), getViewInAppRelativeUrl: ({ rule }: GetViewInAppRelativeUrlFnOpts<{}>) => observabilityPaths.ruleDetails(rule.id), }); diff --git a/x-pack/plugins/observability_solution/synthetics/server/alert_rules/status_rule/types.ts b/x-pack/plugins/observability_solution/synthetics/server/alert_rules/status_rule/types.ts index 9c8cc0b9a6e36..16f8318b04f2e 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/alert_rules/status_rule/types.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/alert_rules/status_rule/types.ts @@ -20,4 +20,5 @@ export interface MonitorSummaryStatusRule { lastErrorMessage: string; stateId: string | null; monitorUrlLabel: string; + monitorTags?: string[]; } 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 d4943685ee300..b251e950a5d4a 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 @@ -19,6 +19,7 @@ import { } from '@kbn/observability-plugin/common'; import { LocatorPublic } from '@kbn/share-plugin/common'; import { schema } from '@kbn/config-schema'; +import { syntheticsRuleFieldMap } from '../../../common/rules/synthetics_rule_field_map'; import { SyntheticsPluginsSetupDependencies, SyntheticsServerSetup } from '../../types'; import { TlsTranslations } from '../../../common/rules/synthetics/translations'; import { @@ -35,7 +36,7 @@ import { SYNTHETICS_ALERT_RULE_TYPES, TLS_CERTIFICATE, } from '../../../common/constants/synthetics_alerts'; -import { generateAlertMessage, updateState, UptimeRuleTypeAlertDefinition } from '../common'; +import { generateAlertMessage, SyntheticsRuleTypeAlertDefinition, updateState } from '../common'; import { ALERT_DETAILS_URL, getActionVariables } from '../action_variables'; import { SyntheticsMonitorClient } from '../../synthetics_service/synthetics_monitor/synthetics_monitor_client'; @@ -152,7 +153,8 @@ export const registerSyntheticsTLSCheckRule = ( return { state: updateState(ruleState, foundCerts) }; }, - alerts: UptimeRuleTypeAlertDefinition, + alerts: SyntheticsRuleTypeAlertDefinition, + fieldsForAAD: Object.keys(syntheticsRuleFieldMap), getViewInAppRelativeUrl: ({ rule }: GetViewInAppRelativeUrlFnOpts<{}>) => observabilityPaths.ruleDetails(rule.id), }); diff --git a/x-pack/plugins/observability_solution/synthetics/server/alert_rules/translations.ts b/x-pack/plugins/observability_solution/synthetics/server/alert_rules/translations.ts index 21bbda2de813b..5dced6f8928e5 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/alert_rules/translations.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/alert_rules/translations.ts @@ -52,6 +52,15 @@ export const commonMonitorStateI18: Array<{ } ), }, + { + name: 'monitorTags', + description: i18n.translate( + 'xpack.synthetics.alertRules.monitorStatus.actionVariables.state.monitorTags', + { + defaultMessage: 'Tags associated with the monitor.', + } + ), + }, { name: 'status', description: i18n.translate( diff --git a/x-pack/plugins/observability_solution/synthetics/server/plugin.ts b/x-pack/plugins/observability_solution/synthetics/server/plugin.ts index 56d333780a3f0..01466504d22b4 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/plugin.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/plugin.ts @@ -30,7 +30,7 @@ import { UptimeConfig } from '../common/config'; import { SyntheticsService } from './synthetics_service/synthetics_service'; import { syntheticsServiceApiKey } from './saved_objects/service_api_key'; import { SYNTHETICS_RULE_TYPES_ALERT_CONTEXT } from '../common/constants/synthetics_alerts'; -import { uptimeRuleTypeFieldMap } from './alert_rules/common'; +import { syntheticsRuleTypeFieldMap } from './alert_rules/common'; export class Plugin implements PluginType { private savedObjectsClient?: SavedObjectsClientContract; @@ -58,7 +58,7 @@ export class Plugin implements PluginType { componentTemplates: [ { name: 'mappings', - mappings: mappingFromFieldMap(uptimeRuleTypeFieldMap, 'strict'), + mappings: mappingFromFieldMap(syntheticsRuleTypeFieldMap, 'strict'), }, ], }); 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 ddea241f3a3df..fca44f0893afc 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 @@ -30,6 +30,7 @@ const fields = [ 'agent', 'url', 'state', + 'tags', ]; export async function queryMonitorStatus( diff --git a/x-pack/plugins/observability_solution/uptime/common/rules/uptime_rule_field_map.ts b/x-pack/plugins/observability_solution/uptime/common/rules/uptime_rule_field_map.ts index be097ed8d8268..ca6463416de6b 100644 --- a/x-pack/plugins/observability_solution/uptime/common/rules/uptime_rule_field_map.ts +++ b/x-pack/plugins/observability_solution/uptime/common/rules/uptime_rule_field_map.ts @@ -5,7 +5,9 @@ * 2.0. */ -export const uptimeRuleFieldMap = { +import { FieldMap } from '@kbn/alerts-as-data-utils'; + +export const uptimeRuleFieldMap: FieldMap = { // common fields 'monitor.id': { type: 'keyword', @@ -36,6 +38,27 @@ export const uptimeRuleFieldMap = { type: 'keyword', required: false, }, + 'monitor.tags': { + type: 'keyword', + array: true, + required: false, + }, + configId: { + type: 'keyword', + required: false, + }, + 'host.name': { + type: 'keyword', + required: false, + }, + 'location.id': { + type: 'keyword', + required: false, + }, + 'location.name': { + type: 'keyword', + required: false, + }, // tls alert fields 'tls.server.x509.issuer.common_name': { type: 'keyword', @@ -67,5 +90,3 @@ export const uptimeRuleFieldMap = { required: false, }, } as const; - -export type UptimeRuleFieldMap = typeof uptimeRuleFieldMap; diff --git a/x-pack/plugins/observability_solution/uptime/server/legacy_uptime/lib/alerts/status_check.test.ts b/x-pack/plugins/observability_solution/uptime/server/legacy_uptime/lib/alerts/status_check.test.ts index 7d162b65b6484..13d959000c3a8 100644 --- a/x-pack/plugins/observability_solution/uptime/server/legacy_uptime/lib/alerts/status_check.test.ts +++ b/x-pack/plugins/observability_solution/uptime/server/legacy_uptime/lib/alerts/status_check.test.ts @@ -538,10 +538,12 @@ describe('status check alert', () => { "latestErrorMessage": "error message 1", "monitorId": "first", "monitorName": "First", + "monitorTags": undefined, "monitorType": "myType", "monitorUrl": "localhost:8080", "observerHostname": undefined, "observerLocation": "harrisburg", + "observerName": undefined, "reason": "Monitor \\"First\\" from harrisburg failed 234 times in the last 14h. Alert when >= 4. Checked at July 6, 2020 9:14 PM.", "statusMessage": "failed 234 times in the last 14h. Alert when >= 4.", "viewInAppUrl": "http://localhost:5601/hfe/app/uptime/monitor/Zmlyc3Q=?dateRangeEnd=now&dateRangeStart=7.7%20date&filters=%5B%5B%22observer.geo.name%22%2C%5B%22harrisburg%22%5D%5D%5D", @@ -761,10 +763,12 @@ describe('status check alert', () => { "latestErrorMessage": "error message 1", "monitorId": "first", "monitorName": "First", + "monitorTags": undefined, "monitorType": "myType", "monitorUrl": "localhost:8080", "observerHostname": undefined, "observerLocation": "harrisburg", + "observerName": undefined, "reason": "Monitor \\"First\\" from harrisburg failed 234 times in the last 15 mins. Alert when >= 3. Checked at July 6, 2020 9:14 PM.", "statusMessage": "failed 234 times in the last 15 mins. Alert when >= 3.", "viewInAppUrl": "http://localhost:5601/hfe/app/uptime/monitor/Zmlyc3Q=?dateRangeEnd=now&dateRangeStart=foo%20date%20string&filters=%5B%5B%22observer.geo.name%22%2C%5B%22harrisburg%22%5D%5D%5D", @@ -971,88 +975,96 @@ describe('status check alert', () => { expect(alertsClient.setAlertData).toHaveBeenCalledTimes(4); expect(alertsClient.setAlertData.mock.calls).toMatchInlineSnapshot(` - Array [ - Array [ - Object { - "context": Object { - "alertDetailsUrl": "mockedAlertsLocator > getLocation", - "checkedAt": "July 6, 2020 9:14 PM", - "configId": undefined, - "latestErrorMessage": undefined, - "monitorId": "foo", - "monitorName": "Foo", - "monitorType": "myType", - "monitorUrl": "https://foo.com", - "observerHostname": undefined, - "observerLocation": "harrisburg", - "reason": "Monitor \\"Foo\\" from harrisburg 35 days availability is 99.28%. Alert when < 99.34%. Checked at July 6, 2020 9:14 PM.", - "statusMessage": "35 days availability is 99.28%. Alert when < 99.34%.", - "viewInAppUrl": "http://localhost:5601/hfe/app/uptime/monitor/Zm9v?dateRangeEnd=now&dateRangeStart=availability%20test&filters=%5B%5B%22observer.geo.name%22%2C%5B%22harrisburg%22%5D%5D%5D", - }, - "id": "foo_https_foo_com_foo-harrisburg", - }, - ], - Array [ - Object { - "context": Object { - "alertDetailsUrl": "mockedAlertsLocator > getLocation", - "checkedAt": "July 6, 2020 9:14 PM", - "configId": undefined, - "latestErrorMessage": undefined, - "monitorId": "foo", - "monitorName": "Foo", - "monitorType": "myType", - "monitorUrl": "https://foo.com", - "observerHostname": undefined, - "observerLocation": "fairbanks", - "reason": "Monitor \\"Foo\\" from fairbanks 35 days availability is 98.03%. Alert when < 99.34%. Checked at July 6, 2020 9:14 PM.", - "statusMessage": "35 days availability is 98.03%. Alert when < 99.34%.", - "viewInAppUrl": "http://localhost:5601/hfe/app/uptime/monitor/Zm9v?dateRangeEnd=now&dateRangeStart=availability%20test&filters=%5B%5B%22observer.geo.name%22%2C%5B%22fairbanks%22%5D%5D%5D", - }, - "id": "foo_https_foo_com_foo-fairbanks", - }, - ], - Array [ - Object { - "context": Object { - "alertDetailsUrl": "mockedAlertsLocator > getLocation", - "checkedAt": "July 6, 2020 9:14 PM", - "configId": undefined, - "latestErrorMessage": undefined, - "monitorId": "unreliable", - "monitorName": "Unreliable", - "monitorType": "myType", - "monitorUrl": "https://unreliable.co", - "observerHostname": undefined, - "observerLocation": "fairbanks", - "reason": "Monitor \\"Unreliable\\" from fairbanks 35 days availability is 90.92%. Alert when < 99.34%. Checked at July 6, 2020 9:14 PM.", - "statusMessage": "35 days availability is 90.92%. Alert when < 99.34%.", - "viewInAppUrl": "http://localhost:5601/hfe/app/uptime/monitor/dW5yZWxpYWJsZQ==?dateRangeEnd=now&dateRangeStart=availability%20test&filters=%5B%5B%22observer.geo.name%22%2C%5B%22fairbanks%22%5D%5D%5D", - }, - "id": "unreliable_https_unreliable_co_unreliable-fairbanks", - }, - ], - Array [ - Object { - "context": Object { - "alertDetailsUrl": "mockedAlertsLocator > getLocation", - "checkedAt": "July 6, 2020 9:14 PM", - "configId": undefined, - "latestErrorMessage": undefined, - "monitorId": "no-name", - "monitorName": "no-name", - "monitorType": "myType", - "monitorUrl": "https://no-name.co", - "observerHostname": undefined, - "observerLocation": "fairbanks", - "reason": "Monitor \\"no-name\\" from fairbanks 35 days availability is 90.92%. Alert when < 99.34%. Checked at July 6, 2020 9:14 PM.", - "statusMessage": "35 days availability is 90.92%. Alert when < 99.34%.", - "viewInAppUrl": "http://localhost:5601/hfe/app/uptime/monitor/bm8tbmFtZQ==?dateRangeEnd=now&dateRangeStart=availability%20test&filters=%5B%5B%22observer.geo.name%22%2C%5B%22fairbanks%22%5D%5D%5D", - }, - "id": "https_no_name_co_no-name-fairbanks", - }, - ], - ] + Array [ + Array [ + Object { + "context": Object { + "alertDetailsUrl": "mockedAlertsLocator > getLocation", + "checkedAt": "July 6, 2020 9:14 PM", + "configId": undefined, + "latestErrorMessage": undefined, + "monitorId": "foo", + "monitorName": "Foo", + "monitorTags": undefined, + "monitorType": "myType", + "monitorUrl": "https://foo.com", + "observerHostname": undefined, + "observerLocation": "harrisburg", + "observerName": undefined, + "reason": "Monitor \\"Foo\\" from harrisburg 35 days availability is 99.28%. Alert when < 99.34%. Checked at July 6, 2020 9:14 PM.", + "statusMessage": "35 days availability is 99.28%. Alert when < 99.34%.", + "viewInAppUrl": "http://localhost:5601/hfe/app/uptime/monitor/Zm9v?dateRangeEnd=now&dateRangeStart=availability%20test&filters=%5B%5B%22observer.geo.name%22%2C%5B%22harrisburg%22%5D%5D%5D", + }, + "id": "foo_https_foo_com_foo-harrisburg", + }, + ], + Array [ + Object { + "context": Object { + "alertDetailsUrl": "mockedAlertsLocator > getLocation", + "checkedAt": "July 6, 2020 9:14 PM", + "configId": undefined, + "latestErrorMessage": undefined, + "monitorId": "foo", + "monitorName": "Foo", + "monitorTags": undefined, + "monitorType": "myType", + "monitorUrl": "https://foo.com", + "observerHostname": undefined, + "observerLocation": "fairbanks", + "observerName": undefined, + "reason": "Monitor \\"Foo\\" from fairbanks 35 days availability is 98.03%. Alert when < 99.34%. Checked at July 6, 2020 9:14 PM.", + "statusMessage": "35 days availability is 98.03%. Alert when < 99.34%.", + "viewInAppUrl": "http://localhost:5601/hfe/app/uptime/monitor/Zm9v?dateRangeEnd=now&dateRangeStart=availability%20test&filters=%5B%5B%22observer.geo.name%22%2C%5B%22fairbanks%22%5D%5D%5D", + }, + "id": "foo_https_foo_com_foo-fairbanks", + }, + ], + Array [ + Object { + "context": Object { + "alertDetailsUrl": "mockedAlertsLocator > getLocation", + "checkedAt": "July 6, 2020 9:14 PM", + "configId": undefined, + "latestErrorMessage": undefined, + "monitorId": "unreliable", + "monitorName": "Unreliable", + "monitorTags": undefined, + "monitorType": "myType", + "monitorUrl": "https://unreliable.co", + "observerHostname": undefined, + "observerLocation": "fairbanks", + "observerName": undefined, + "reason": "Monitor \\"Unreliable\\" from fairbanks 35 days availability is 90.92%. Alert when < 99.34%. Checked at July 6, 2020 9:14 PM.", + "statusMessage": "35 days availability is 90.92%. Alert when < 99.34%.", + "viewInAppUrl": "http://localhost:5601/hfe/app/uptime/monitor/dW5yZWxpYWJsZQ==?dateRangeEnd=now&dateRangeStart=availability%20test&filters=%5B%5B%22observer.geo.name%22%2C%5B%22fairbanks%22%5D%5D%5D", + }, + "id": "unreliable_https_unreliable_co_unreliable-fairbanks", + }, + ], + Array [ + Object { + "context": Object { + "alertDetailsUrl": "mockedAlertsLocator > getLocation", + "checkedAt": "July 6, 2020 9:14 PM", + "configId": undefined, + "latestErrorMessage": undefined, + "monitorId": "no-name", + "monitorName": "no-name", + "monitorTags": undefined, + "monitorType": "myType", + "monitorUrl": "https://no-name.co", + "observerHostname": undefined, + "observerLocation": "fairbanks", + "observerName": undefined, + "reason": "Monitor \\"no-name\\" from fairbanks 35 days availability is 90.92%. Alert when < 99.34%. Checked at July 6, 2020 9:14 PM.", + "statusMessage": "35 days availability is 90.92%. Alert when < 99.34%.", + "viewInAppUrl": "http://localhost:5601/hfe/app/uptime/monitor/bm8tbmFtZQ==?dateRangeEnd=now&dateRangeStart=availability%20test&filters=%5B%5B%22observer.geo.name%22%2C%5B%22fairbanks%22%5D%5D%5D", + }, + "id": "https_no_name_co_no-name-fairbanks", + }, + ], + ] `); expect(mockGetter).not.toHaveBeenCalled(); expect(mockAvailability).toHaveBeenCalledTimes(1); diff --git a/x-pack/plugins/observability_solution/uptime/server/legacy_uptime/lib/alerts/status_check.ts b/x-pack/plugins/observability_solution/uptime/server/legacy_uptime/lib/alerts/status_check.ts index d9a7cd067d323..ea6edf35b6f12 100644 --- a/x-pack/plugins/observability_solution/uptime/server/legacy_uptime/lib/alerts/status_check.ts +++ b/x-pack/plugins/observability_solution/uptime/server/legacy_uptime/lib/alerts/status_check.ts @@ -26,7 +26,8 @@ import { } from '@kbn/observability-plugin/common'; import { LocatorPublic } from '@kbn/share-plugin/common'; import { asyncForEach } from '@kbn/std'; -import { UptimeAlertTypeFactory } from './types'; +import { uptimeRuleFieldMap } from '../../../../common/rules/uptime_rule_field_map'; +import { MonitorSummary, UptimeAlertTypeFactory } from './types'; import { StatusCheckFilters, Ping, @@ -151,7 +152,7 @@ export const formatFilterString = async ( export const getMonitorSummary = ( monitorInfo: Ping & { '@timestamp'?: string }, statusMessage: string -) => { +): MonitorSummary => { const monitorName = monitorInfo.monitor?.name ?? monitorInfo.monitor?.id; const observerLocation = monitorInfo.observer?.geo?.name ?? UNNAMED_LOCATION; const checkedAt = moment(monitorInfo['@timestamp'] ?? monitorInfo.timestamp).format('LLL'); @@ -159,13 +160,15 @@ export const getMonitorSummary = ( const summary = { checkedAt, monitorUrl: monitorInfo.url?.full, - monitorId: monitorInfo.monitor?.id, + monitorId: monitorInfo.monitor.id, configId: monitorInfo.config_id, - monitorName: monitorInfo.monitor?.name ?? monitorInfo.monitor?.id, - monitorType: monitorInfo.monitor?.type, + monitorName: monitorInfo.monitor.name ?? monitorInfo.monitor.id, + monitorType: monitorInfo.monitor.type, latestErrorMessage: monitorInfo.error?.message, observerLocation: monitorInfo.observer?.geo?.name ?? UNNAMED_LOCATION, + observerName: monitorInfo.observer?.name, observerHostname: monitorInfo.agent?.name, + monitorTags: monitorInfo.tags, }; return { @@ -203,13 +206,15 @@ export const getReasonMessage = ({ }); }; -export const getMonitorAlertDocument = (monitorSummary: Record) => ({ +export const getMonitorAlertDocument = (monitorSummary: MonitorSummary) => ({ 'monitor.id': monitorSummary.monitorId, configId: monitorSummary.configId, 'monitor.type': monitorSummary.monitorType, 'monitor.name': monitorSummary.monitorName, + 'monitor.tags': monitorSummary.tags, 'url.full': monitorSummary.monitorUrl, 'observer.geo.name': monitorSummary.observerLocation, + 'observer.name': monitorSummary.observerName, 'error.message': monitorSummary.latestErrorMessage, 'agent.name': monitorSummary.observerHostname, [ALERT_REASON]: monitorSummary.reason, @@ -576,6 +581,7 @@ export const statusCheckAlertFactory: UptimeAlertTypeFactory = ( return { state: updateState(state, downMonitorsByLocation.length > 0) }; }, alerts: UptimeRuleTypeAlertDefinition, + fieldsForAAD: Object.keys(uptimeRuleFieldMap), getViewInAppRelativeUrl: ({ rule }: GetViewInAppRelativeUrlFnOpts<{}>) => observabilityPaths.ruleDetails(rule.id), }); diff --git a/x-pack/plugins/observability_solution/uptime/server/legacy_uptime/lib/alerts/tls.ts b/x-pack/plugins/observability_solution/uptime/server/legacy_uptime/lib/alerts/tls.ts index 560ca9c854d78..bf0ba8596332f 100644 --- a/x-pack/plugins/observability_solution/uptime/server/legacy_uptime/lib/alerts/tls.ts +++ b/x-pack/plugins/observability_solution/uptime/server/legacy_uptime/lib/alerts/tls.ts @@ -20,6 +20,7 @@ import { LocatorPublic } from '@kbn/share-plugin/common'; import { ALERT_REASON, ALERT_UUID } from '@kbn/rule-data-utils'; import { asyncForEach } from '@kbn/std'; import { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/types'; +import { uptimeRuleFieldMap } from '../../../../common/rules/uptime_rule_field_map'; import { formatFilterString } from './status_check'; import { UptimeAlertTypeFactory } from './types'; import { @@ -259,6 +260,7 @@ export const tlsAlertFactory: UptimeAlertTypeFactory = ( return { state: updateState(state, foundCerts) }; }, alerts: UptimeRuleTypeAlertDefinition, + fieldsForAAD: Object.keys(uptimeRuleFieldMap), getViewInAppRelativeUrl: ({ rule }: GetViewInAppRelativeUrlFnOpts<{}>) => observabilityPaths.ruleDetails(rule.id), }); diff --git a/x-pack/plugins/observability_solution/uptime/server/legacy_uptime/lib/alerts/translations.ts b/x-pack/plugins/observability_solution/uptime/server/legacy_uptime/lib/alerts/translations.ts index 86e071f20ea47..49fba189c34ea 100644 --- a/x-pack/plugins/observability_solution/uptime/server/legacy_uptime/lib/alerts/translations.ts +++ b/x-pack/plugins/observability_solution/uptime/server/legacy_uptime/lib/alerts/translations.ts @@ -50,6 +50,15 @@ export const commonMonitorStateI18 = [ } ), }, + { + name: 'monitorTags', + description: i18n.translate( + 'xpack.uptime.alertRules.monitorStatus.actionVariables.state.monitorTags', + { + defaultMessage: 'Tags associated with the monitor.', + } + ), + }, { name: 'statusMessage', description: i18n.translate( diff --git a/x-pack/plugins/observability_solution/uptime/server/legacy_uptime/lib/alerts/types.ts b/x-pack/plugins/observability_solution/uptime/server/legacy_uptime/lib/alerts/types.ts index 2eaa7dbabb278..d7fa2ce3fa7d4 100644 --- a/x-pack/plugins/observability_solution/uptime/server/legacy_uptime/lib/alerts/types.ts +++ b/x-pack/plugins/observability_solution/uptime/server/legacy_uptime/lib/alerts/types.ts @@ -51,3 +51,18 @@ export type LegacyUptimeRuleTypeFactory = ( RecoveredActionGroupId, DefaultAlert >; + +export interface MonitorSummary { + checkedAt: string; + monitorUrl?: string; + monitorId: string; + configId?: string; + monitorName: string; + monitorType: string; + latestErrorMessage?: string; + observerLocation: string; + observerName?: string; + observerHostname?: string; + tags?: string[]; + reason: string; +} diff --git a/x-pack/plugins/osquery/cypress/e2e/all/alerts_cases.cy.ts b/x-pack/plugins/osquery/cypress/e2e/all/alerts_cases.cy.ts index f898886506fd0..6d41d0a50e250 100644 --- a/x-pack/plugins/osquery/cypress/e2e/all/alerts_cases.cy.ts +++ b/x-pack/plugins/osquery/cypress/e2e/all/alerts_cases.cy.ts @@ -29,7 +29,8 @@ import { interceptCaseId, } from '../../tasks/integrations'; -describe('Alert Event Details - Cases', { tags: ['@ess', '@serverless'] }, () => { +// Failing: See https://github.com/elastic/kibana/issues/187182 +describe.skip('Alert Event Details - Cases', { tags: ['@ess', '@serverless'] }, () => { let ruleId: string; let packId: string; let packName: string; diff --git a/x-pack/plugins/osquery/cypress/e2e/all/alerts_linked_apps.cy.ts b/x-pack/plugins/osquery/cypress/e2e/all/alerts_linked_apps.cy.ts index 45921be4cbc2e..3949ef8986124 100644 --- a/x-pack/plugins/osquery/cypress/e2e/all/alerts_linked_apps.cy.ts +++ b/x-pack/plugins/osquery/cypress/e2e/all/alerts_linked_apps.cy.ts @@ -22,7 +22,8 @@ import { } from '../../tasks/integrations'; import { RESULTS_TABLE, RESULTS_TABLE_BUTTON } from '../../screens/live_query'; -describe( +// Failing: See https://github.com/elastic/kibana/issues/180852 +describe.skip( 'Alert Event Details', { tags: ['@ess', '@serverless'], diff --git a/x-pack/plugins/osquery/cypress/e2e/all/alerts_multiple_agents.cy.ts b/x-pack/plugins/osquery/cypress/e2e/all/alerts_multiple_agents.cy.ts index f8241c52bda28..1e3e17e61b245 100644 --- a/x-pack/plugins/osquery/cypress/e2e/all/alerts_multiple_agents.cy.ts +++ b/x-pack/plugins/osquery/cypress/e2e/all/alerts_multiple_agents.cy.ts @@ -16,7 +16,8 @@ import { import { OSQUERY_FLYOUT_BODY_EDITOR } from '../../screens/live_query'; import { closeAlertsStepTourIfVisible } from '../../tasks/integrations'; -describe( +// Failing: See https://github.com/elastic/kibana/issues/180851 +describe.skip( 'Alert Event Details - dynamic params', { tags: ['@ess', '@serverless'], diff --git a/x-pack/plugins/osquery/cypress/e2e/roles/alert_test.cy.ts b/x-pack/plugins/osquery/cypress/e2e/roles/alert_test.cy.ts index 5ca5775247caf..1a63c4dde955d 100644 --- a/x-pack/plugins/osquery/cypress/e2e/roles/alert_test.cy.ts +++ b/x-pack/plugins/osquery/cypress/e2e/roles/alert_test.cy.ts @@ -11,7 +11,8 @@ import { loadRule, cleanupRule } from '../../tasks/api_fixtures'; import { ServerlessRoleName } from '../../support/roles'; import { closeAlertsStepTourIfVisible } from '../../tasks/integrations'; -describe('Alert Test', { tags: ['@ess'] }, () => { +// Failing: See https://github.com/elastic/kibana/issues/180853 +describe.skip('Alert Test', { tags: ['@ess'] }, () => { let ruleName: string; let ruleId: string; diff --git a/x-pack/plugins/osquery/public/fleet_integration/config_uploader.tsx b/x-pack/plugins/osquery/public/fleet_integration/config_uploader.tsx index b93c475f1e04e..3d5b042769d8d 100644 --- a/x-pack/plugins/osquery/public/fleet_integration/config_uploader.tsx +++ b/x-pack/plugins/osquery/public/fleet_integration/config_uploader.tsx @@ -6,6 +6,10 @@ */ import { EuiLink, EuiFormRow, EuiFilePicker, EuiSpacer } from '@elastic/eui'; +import type { + EuiFilePickerClass, + EuiFilePickerProps, +} from '@elastic/eui/src/components/form/file_picker/file_picker'; import React, { useCallback, useState, useRef } from 'react'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; @@ -31,7 +35,7 @@ interface ConfigUploaderProps { } const ConfigUploaderComponent: React.FC = ({ onChange }) => { - const filePickerRef = useRef(null); + const filePickerRef = useRef(null); const [isInvalid, setIsInvalid] = useState(null); // @ts-expect-error update types let fileReader; @@ -55,13 +59,11 @@ const ConfigUploaderComponent: React.FC = ({ onChange }) => setIsInvalid(null); } catch (error) { setIsInvalid(error); - // @ts-expect-error update types - filePickerRef.current?.removeFiles(new Event('fake')); + filePickerRef.current?.removeFiles(); } onChange(parsedContent); - // @ts-expect-error update types - filePickerRef.current?.removeFiles(new Event('fake')); + filePickerRef.current?.removeFiles(); }; // @ts-expect-error update types @@ -115,7 +117,7 @@ const ConfigUploaderComponent: React.FC = ({ onChange }) => error={<>{`${isInvalid}`}} > >} id="osquery_config_picker" initialPromptText={i18n.translate('xpack.osquery.configUploader.initialPromptTextLabel', { defaultMessage: 'Select or drag and drop osquery config file', diff --git a/x-pack/plugins/osquery/public/packs/form/pack_uploader.tsx b/x-pack/plugins/osquery/public/packs/form/pack_uploader.tsx index 8955b8dac88c1..b9f9c914ed24b 100644 --- a/x-pack/plugins/osquery/public/packs/form/pack_uploader.tsx +++ b/x-pack/plugins/osquery/public/packs/form/pack_uploader.tsx @@ -7,6 +7,10 @@ import { kebabCase } from 'lodash'; import { EuiLink, EuiFormRow, EuiFilePicker, EuiSpacer } from '@elastic/eui'; +import type { + EuiFilePickerClass, + EuiFilePickerProps, +} from '@elastic/eui/src/components/form/file_picker/file_picker'; import React, { useCallback, useState, useRef } from 'react'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; @@ -30,7 +34,7 @@ interface OsqueryPackUploaderProps { const OsqueryPackUploaderComponent: React.FC = ({ onChange }) => { const packName = useRef(''); - const filePickerRef = useRef(null); + const filePickerRef = useRef(null); const [isInvalid, setIsInvalid] = useState(null); // @ts-expect-error update types let fileReader; @@ -59,8 +63,7 @@ const OsqueryPackUploaderComponent: React.FC = ({ onCh setIsInvalid(null); } catch (error) { setIsInvalid(error); - // @ts-expect-error update types - filePickerRef.current?.removeFiles(new Event('fake')); + filePickerRef.current?.removeFiles(); } if (!parsedContent?.queries) { @@ -68,8 +71,7 @@ const OsqueryPackUploaderComponent: React.FC = ({ onCh } onChange(parsedContent, packName.current); - // @ts-expect-error update types - filePickerRef.current?.removeFiles(new Event('fake')); + filePickerRef.current?.removeFiles(); }; // @ts-expect-error update types @@ -104,8 +106,7 @@ const OsqueryPackUploaderComponent: React.FC = ({ onCh }, }) ); - // @ts-expect-error update types - filePickerRef.current?.removeFiles(new Event('fake')); + filePickerRef.current?.removeFiles(); return; } @@ -126,7 +127,7 @@ const OsqueryPackUploaderComponent: React.FC = ({ onCh error={<>{`${isInvalid}`}} > >} id="osquery_pack_picker" initialPromptText={i18n.translate('xpack.osquery.packUploader.initialPromptTextLabel', { defaultMessage: 'Select or drag and drop osquery pack config file', diff --git a/x-pack/plugins/osquery/server/routes/asset/update_assets_route.ts b/x-pack/plugins/osquery/server/routes/asset/update_assets_route.ts index 57800729d6435..690ea4206b84a 100644 --- a/x-pack/plugins/osquery/server/routes/asset/update_assets_route.ts +++ b/x-pack/plugins/osquery/server/routes/asset/update_assets_route.ts @@ -42,9 +42,10 @@ export const updateAssetsRoute = (router: IRouter, osqueryContext: OsqueryAppCon }, }, }, - async (context, request, response) => { - const savedObjectsClient = (await context.core).savedObjects.client; - const currentUser = await osqueryContext.security.authc.getCurrentUser(request)?.username; + async (context, _request, response) => { + const coreContext = await context.core; + const savedObjectsClient = coreContext.savedObjects.client; + const currentUser = coreContext.security.authc.getCurrentUser()?.username; let installation; diff --git a/x-pack/plugins/osquery/server/routes/live_query/create_live_query_route.ts b/x-pack/plugins/osquery/server/routes/live_query/create_live_query_route.ts index c93b58cf5af73..6372a48c89b6e 100644 --- a/x-pack/plugins/osquery/server/routes/live_query/create_live_query_route.ts +++ b/x-pack/plugins/osquery/server/routes/live_query/create_live_query_route.ts @@ -42,7 +42,8 @@ export const createLiveQueryRoute = (router: IRouter, osqueryContext: OsqueryApp }, async (context, request, response) => { const [coreStartServices] = await osqueryContext.getStartServices(); - const soClient = (await context.core).savedObjects.client; + const coreContext = await context.core; + const soClient = coreContext.savedObjects.client; const { osquery: { writeLiveQueries, runSavedQueries }, @@ -106,7 +107,7 @@ export const createLiveQueryRoute = (router: IRouter, osqueryContext: OsqueryApp } try { - const currentUser = await osqueryContext.security.authc.getCurrentUser(request)?.username; + const currentUser = coreContext.security.authc.getCurrentUser()?.username; const { response: osqueryAction, fleetActionsCount } = await createActionHandler( osqueryContext, request.body, diff --git a/x-pack/plugins/osquery/server/routes/pack/create_pack_route.ts b/x-pack/plugins/osquery/server/routes/pack/create_pack_route.ts index d69182762c8e2..31f9395d2174e 100644 --- a/x-pack/plugins/osquery/server/routes/pack/create_pack_route.ts +++ b/x-pack/plugins/osquery/server/routes/pack/create_pack_route.ts @@ -64,7 +64,7 @@ export const createPackRoute = (router: IRouter, osqueryContext: OsqueryAppConte const agentPolicyService = osqueryContext.service.getAgentPolicyService(); const packagePolicyService = osqueryContext.service.getPackagePolicyService(); - const currentUser = await osqueryContext.security.authc.getCurrentUser(request)?.username; + const currentUser = coreContext.security.authc.getCurrentUser()?.username; // eslint-disable-next-line @typescript-eslint/naming-convention const { name, description, queries, enabled, policy_ids, shards = {} } = request.body; diff --git a/x-pack/plugins/osquery/server/routes/pack/update_pack_route.ts b/x-pack/plugins/osquery/server/routes/pack/update_pack_route.ts index 5715806a19b5b..0109270f539d9 100644 --- a/x-pack/plugins/osquery/server/routes/pack/update_pack_route.ts +++ b/x-pack/plugins/osquery/server/routes/pack/update_pack_route.ts @@ -71,7 +71,7 @@ export const updatePackRoute = (router: IRouter, osqueryContext: OsqueryAppConte ); const agentPolicyService = osqueryContext.service.getAgentPolicyService(); const packagePolicyService = osqueryContext.service.getPackagePolicyService(); - const currentUser = await osqueryContext.security.authc.getCurrentUser(request)?.username; + const currentUser = coreContext.security.authc.getCurrentUser()?.username; // eslint-disable-next-line @typescript-eslint/naming-convention const { name, description, queries, enabled, policy_ids, shards = {} } = request.body; diff --git a/x-pack/plugins/osquery/server/routes/saved_query/create_saved_query_route.ts b/x-pack/plugins/osquery/server/routes/saved_query/create_saved_query_route.ts index d59f1c5ba0f8d..1be4cb24a2ea3 100644 --- a/x-pack/plugins/osquery/server/routes/saved_query/create_saved_query_route.ts +++ b/x-pack/plugins/osquery/server/routes/saved_query/create_saved_query_route.ts @@ -55,7 +55,7 @@ export const createSavedQueryRoute = (router: IRouter, osqueryContext: OsqueryAp ecs_mapping, } = request.body; - const currentUser = await osqueryContext.security.authc.getCurrentUser(request)?.username; + const currentUser = coreContext.security.authc.getCurrentUser()?.username; const conflictingEntries = await savedObjectsClient.find({ type: savedQuerySavedObjectType, diff --git a/x-pack/plugins/osquery/server/routes/saved_query/update_saved_query_route.ts b/x-pack/plugins/osquery/server/routes/saved_query/update_saved_query_route.ts index f6bcad9d4bed4..4225f0f223cd3 100644 --- a/x-pack/plugins/osquery/server/routes/saved_query/update_saved_query_route.ts +++ b/x-pack/plugins/osquery/server/routes/saved_query/update_saved_query_route.ts @@ -51,7 +51,7 @@ export const updateSavedQueryRoute = (router: IRouter, osqueryContext: OsqueryAp async (context, request, response) => { const coreContext = await context.core; const savedObjectsClient = coreContext.savedObjects.client; - const currentUser = await osqueryContext.security.authc.getCurrentUser(request)?.username; + const currentUser = coreContext.security.authc.getCurrentUser()?.username; const { id, diff --git a/x-pack/plugins/reporting/server/core.ts b/x-pack/plugins/reporting/server/core.ts index 112b08e70df2a..b5f0f8b977eb6 100644 --- a/x-pack/plugins/reporting/server/core.ts +++ b/x-pack/plugins/reporting/server/core.ts @@ -8,7 +8,7 @@ import * as Rx from 'rxjs'; import { map, take } from 'rxjs'; -import { +import type { AnalyticsServiceStart, CoreSetup, DocLinksServiceSetup, @@ -19,6 +19,7 @@ import { PackageInfo, PluginInitializerContext, SavedObjectsServiceStart, + SecurityServiceStart, StatusServiceSetup, UiSettingsServiceStart, } from '@kbn/core/server'; @@ -38,7 +39,7 @@ import { PngExportType } from '@kbn/reporting-export-types-png'; import type { ReportingConfigType } from '@kbn/reporting-server'; import { ExportType } from '@kbn/reporting-server'; import { ScreenshottingStart } from '@kbn/screenshotting-plugin/server'; -import type { SecurityPluginSetup, SecurityPluginStart } from '@kbn/security-plugin/server'; +import type { SecurityPluginSetup } from '@kbn/security-plugin/server'; import { DEFAULT_SPACE_ID } from '@kbn/spaces-plugin/common'; import type { SpacesPluginSetup } from '@kbn/spaces-plugin/server'; import type { @@ -82,7 +83,7 @@ export interface ReportingInternalStart { licensing: LicensingPluginStart; logger: Logger; screenshotting?: ScreenshottingStart; - security?: SecurityPluginStart; + securityService: SecurityServiceStart; taskManager: TaskManagerStartContract; } @@ -214,7 +215,7 @@ export class ReportingCore { */ private getExportTypes(): ExportType[] { const { csv, pdf, png } = this.config.export_types; - const exportTypes = []; + const exportTypes: ExportType[] = []; if (csv.enabled) { // NOTE: CsvSearchSourceExportType should be deprecated and replaced with V2 in the UI: https://github.com/elastic/kibana/issues/151190 diff --git a/x-pack/plugins/reporting/server/plugin.ts b/x-pack/plugins/reporting/server/plugin.ts index 3e68310f76cf4..51ba41adadac8 100644 --- a/x-pack/plugins/reporting/server/plugin.ts +++ b/x-pack/plugins/reporting/server/plugin.ts @@ -117,6 +117,7 @@ export class ReportingPlugin savedObjects, uiSettings, store, + securityService: core.security, ...plugins, }); diff --git a/x-pack/plugins/reporting/server/routes/common/authorized_user_pre_routing.test.ts b/x-pack/plugins/reporting/server/routes/common/authorized_user_pre_routing.test.ts index a10718bf6376f..b66effef8961c 100644 --- a/x-pack/plugins/reporting/server/routes/common/authorized_user_pre_routing.test.ts +++ b/x-pack/plugins/reporting/server/routes/common/authorized_user_pre_routing.test.ts @@ -49,7 +49,7 @@ describe('authorized_user_pre_routing', function () { mockStartDeps = await createMockPluginStart( { - security: { + securityService: { authc: { getCurrentUser: () => ({ id: '123', roles: ['superuser'], username: 'Tom Riddle' }), }, @@ -97,7 +97,7 @@ describe('authorized_user_pre_routing', function () { security: { license: { isEnabled: () => true } }, }); mockStartDeps = await createMockPluginStart( - { security: { authc: { getCurrentUser: () => null } } }, + { securityService: { authc: { getCurrentUser: () => null } } }, mockReportingConfig ); mockCore = await createMockReportingCore(mockReportingConfig, mockSetupDeps, mockStartDeps); @@ -126,7 +126,7 @@ describe('authorized_user_pre_routing', function () { it(`should return with 403 when security is enabled but user doesn't have the allowed role`, async function () { mockStartDeps = await createMockPluginStart( { - security: { + securityService: { authc: { getCurrentUser: () => ({ id: '123', roles: ['peasant'], username: 'Tom Riddle' }), }, @@ -154,7 +154,7 @@ describe('authorized_user_pre_routing', function () { it('should return from handler when security is enabled and user has explicitly allowed role', async function () { mockStartDeps = await createMockPluginStart( { - security: { + securityService: { authc: { getCurrentUser: () => ({ username: 'friendlyuser', roles: ['reporting_user'] }), }, @@ -176,7 +176,7 @@ describe('authorized_user_pre_routing', function () { it('should return from handler when security is enabled and user has superuser role', async function () { mockStartDeps = await createMockPluginStart( { - security: { + securityService: { authc: { getCurrentUser: () => ({ username: 'friendlyuser', roles: ['superuser'] }) }, }, }, diff --git a/x-pack/plugins/reporting/server/routes/common/authorized_user_pre_routing.ts b/x-pack/plugins/reporting/server/routes/common/authorized_user_pre_routing.ts index ee58d27d55ea0..c6d82894772fd 100644 --- a/x-pack/plugins/reporting/server/routes/common/authorized_user_pre_routing.ts +++ b/x-pack/plugins/reporting/server/routes/common/authorized_user_pre_routing.ts @@ -30,15 +30,15 @@ export const authorizedUserPreRouting = ( reporting: ReportingCore, handler: RequestHandlerUser ): RequestHandler => { - const { logger, security, docLinks } = reporting.getPluginSetupDeps(); + const { logger, security: securitySetup, docLinks } = reporting.getPluginSetupDeps(); // ReportingInternalSetup.security?: SecurityPluginSetup | undefined return async (context, req, res) => { - const { security: securityStart } = await reporting.getPluginStartDeps(); + const { securityService } = await reporting.getPluginStartDeps(); try { let user: ReportingRequestUser = false; - if (security && security.license.isEnabled()) { - // find the authenticated user, or null if security is not enabled - user = getUser(req, securityStart); + if (securitySetup && securitySetup.license.isEnabled()) { + // find the authenticated user, only if license is enabled + user = getUser(req, securityService); if (!user) { // security is enabled but the user is null return res.unauthorized({ body: `Sorry, you aren't authenticated` }); diff --git a/x-pack/plugins/reporting/server/routes/common/get_user.ts b/x-pack/plugins/reporting/server/routes/common/get_user.ts index 589643781db19..8f074f52b0d39 100644 --- a/x-pack/plugins/reporting/server/routes/common/get_user.ts +++ b/x-pack/plugins/reporting/server/routes/common/get_user.ts @@ -5,9 +5,8 @@ * 2.0. */ -import { KibanaRequest } from '@kbn/core/server'; -import { SecurityPluginStart } from '@kbn/security-plugin/server'; +import { KibanaRequest, SecurityServiceStart } from '@kbn/core/server'; -export function getUser(request: KibanaRequest, security?: SecurityPluginStart) { - return security?.authc.getCurrentUser(request) ?? false; +export function getUser(request: KibanaRequest, securityService: SecurityServiceStart) { + return securityService.authc.getCurrentUser(request) ?? false; } diff --git a/x-pack/plugins/reporting/server/routes/common/jobs/job_management_pre_routing.test.ts b/x-pack/plugins/reporting/server/routes/common/jobs/job_management_pre_routing.test.ts index ce0f6b5697eed..cc06ef2e0826c 100644 --- a/x-pack/plugins/reporting/server/routes/common/jobs/job_management_pre_routing.test.ts +++ b/x-pack/plugins/reporting/server/routes/common/jobs/job_management_pre_routing.test.ts @@ -39,7 +39,7 @@ beforeEach(async () => { mockStartDeps = await createMockPluginStart( { - security: { + securityService: { authc: { getCurrentUser: () => ({ id: '123', roles: ['superuser'], username: 'Tom Riddle' }), }, diff --git a/x-pack/plugins/reporting/server/routes/internal/generate/integration_tests/generation_from_jobparams.test.ts b/x-pack/plugins/reporting/server/routes/internal/generate/integration_tests/generation_from_jobparams.test.ts index d27c032a3ddbf..a2296ad67db2e 100644 --- a/x-pack/plugins/reporting/server/routes/internal/generate/integration_tests/generation_from_jobparams.test.ts +++ b/x-pack/plugins/reporting/server/routes/internal/generate/integration_tests/generation_from_jobparams.test.ts @@ -77,7 +77,7 @@ describe(`POST ${INTERNAL_ROUTES.GENERATE_PREFIX}`, () => { ...licensingMock.createStart(), license$: new BehaviorSubject({ isActive: true, isAvailable: true, type: 'gold' }), }, - security: { + securityService: { authc: { getCurrentUser: () => ({ id: '123', roles: ['superuser'], username: 'Tom Riddle' }), }, diff --git a/x-pack/plugins/reporting/server/routes/internal/management/integration_tests/jobs.test.ts b/x-pack/plugins/reporting/server/routes/internal/management/integration_tests/jobs.test.ts index 2ab57d291dae7..1462b27a42126 100644 --- a/x-pack/plugins/reporting/server/routes/internal/management/integration_tests/jobs.test.ts +++ b/x-pack/plugins/reporting/server/routes/internal/management/integration_tests/jobs.test.ts @@ -98,7 +98,7 @@ describe(`Reporting Job Management Routes: Internal`, () => { ...licensingMock.createStart(), license$: new BehaviorSubject({ isActive: true, isAvailable: true, type: 'gold' }), }, - security: { + securityService: { authc: { getCurrentUser: () => ({ id: '123', roles: ['superuser'], username: 'Tom Riddle' }), }, @@ -175,7 +175,7 @@ describe(`Reporting Job Management Routes: Internal`, () => { ...licensingMock.createStart(), license$: new BehaviorSubject({ isActive: true, isAvailable: true, type: 'gold' }), }, - security: { authc: { getCurrentUser: () => undefined } }, + securityService: { authc: { getCurrentUser: () => undefined } }, // security comes from core here }, mockConfigSchema ); @@ -389,7 +389,7 @@ describe(`Reporting Job Management Routes: Internal`, () => { ...licensingMock.createStart(), license$: new BehaviorSubject({ isActive: true, isAvailable: true, type: 'gold' }), }, - security: { + securityService: { authc: { getCurrentUser: () => ({ id: '123', roles: ['peasant'], username: 'Tom Riddle' }), }, diff --git a/x-pack/plugins/reporting/server/routes/public/integration_tests/generation_from_jobparams.test.ts b/x-pack/plugins/reporting/server/routes/public/integration_tests/generation_from_jobparams.test.ts index 4821df1ab48e5..471f1456c8b68 100644 --- a/x-pack/plugins/reporting/server/routes/public/integration_tests/generation_from_jobparams.test.ts +++ b/x-pack/plugins/reporting/server/routes/public/integration_tests/generation_from_jobparams.test.ts @@ -76,7 +76,7 @@ describe(`POST ${PUBLIC_ROUTES.GENERATE_PREFIX}`, () => { ...licensingMock.createStart(), license$: new BehaviorSubject({ isActive: true, isAvailable: true, type: 'gold' }), }, - security: { + securityService: { authc: { getCurrentUser: () => ({ id: '123', roles: ['superuser'], username: 'Tom Riddle' }), }, diff --git a/x-pack/plugins/reporting/server/routes/public/integration_tests/jobs.test.ts b/x-pack/plugins/reporting/server/routes/public/integration_tests/jobs.test.ts index 4c0bc76640710..96776102ebb92 100644 --- a/x-pack/plugins/reporting/server/routes/public/integration_tests/jobs.test.ts +++ b/x-pack/plugins/reporting/server/routes/public/integration_tests/jobs.test.ts @@ -95,7 +95,7 @@ describe(`Reporting Job Management Routes: Public`, () => { ...licensingMock.createStart(), license$: new BehaviorSubject({ isActive: true, isAvailable: true, type: 'gold' }), }, - security: { + securityService: { authc: { getCurrentUser: () => ({ id: '123', roles: ['superuser'], username: 'Tom Riddle' }), }, @@ -165,7 +165,7 @@ describe(`Reporting Job Management Routes: Public`, () => { ...licensingMock.createStart(), license$: new BehaviorSubject({ isActive: true, isAvailable: true, type: 'gold' }), }, - security: { authc: { getCurrentUser: () => undefined } }, + securityService: { authc: { getCurrentUser: () => undefined } }, }, mockConfigSchema ); diff --git a/x-pack/plugins/reporting/server/test_helpers/create_mock_reportingplugin.ts b/x-pack/plugins/reporting/server/test_helpers/create_mock_reportingplugin.ts index 5f87427bf8251..c5c0185785f5e 100644 --- a/x-pack/plugins/reporting/server/test_helpers/create_mock_reportingplugin.ts +++ b/x-pack/plugins/reporting/server/test_helpers/create_mock_reportingplugin.ts @@ -31,7 +31,7 @@ import { securityMock } from '@kbn/security-plugin/server/mocks'; import { taskManagerMock } from '@kbn/task-manager-plugin/server/mocks'; import { ReportingCore } from '..'; -import { ReportingInternalSetup, ReportingInternalStart } from '../core'; +import type { ReportingInternalSetup, ReportingInternalStart } from '../core'; import { ReportingStore } from '../lib'; export const createMockPluginSetup = ( @@ -51,6 +51,7 @@ export const createMockPluginSetup = ( }; const coreSetupMock = coreMock.createSetup(); +const coreStartMock = coreMock.createStart(); const logger = loggingSystemMock.createLogger(); const createMockReportingStore = async (config: ReportingConfigType) => { @@ -81,9 +82,10 @@ export const createMockPluginStart = async ( ...licensingMock.createStart(), license$: new BehaviorSubject({ isAvailable: true, isActive: true, type: 'basic' }), }, + securityService: coreStartMock.security, // we need authc from core.security start logger, screenshotting: createMockScreenshottingStart(), - ...startMock, + ...startMock, // allows to override with test instances }; }; diff --git a/x-pack/plugins/reporting/server/types.ts b/x-pack/plugins/reporting/server/types.ts index 2e8cf80d73a0e..0c744a513ebac 100644 --- a/x-pack/plugins/reporting/server/types.ts +++ b/x-pack/plugins/reporting/server/types.ts @@ -21,11 +21,7 @@ import type { PngScreenshotOptions as BasePngScreenshotOptions, ScreenshottingStart, } from '@kbn/screenshotting-plugin/server'; -import type { - AuthenticatedUser, - SecurityPluginSetup, - SecurityPluginStart, -} from '@kbn/security-plugin/server'; +import type { SecurityPluginSetup } from '@kbn/security-plugin/server'; import type { SpacesPluginSetup } from '@kbn/spaces-plugin/server'; import type { TaskManagerSetupContract, @@ -34,6 +30,7 @@ import type { import type { UsageCollectionSetup } from '@kbn/usage-collection-plugin/server'; import { ExportTypesRegistry } from '@kbn/reporting-server/export_types_registry'; +import type { AuthenticatedUser } from '@kbn/core-security-common'; /** * Plugin Setup Contract @@ -70,7 +67,6 @@ export interface ReportingStartDeps { licensing: LicensingPluginStart; taskManager: TaskManagerStartContract; screenshotting?: ScreenshottingStart; - security?: SecurityPluginStart; } export type ReportingRequestHandlerContext = CustomRequestHandlerContext<{ diff --git a/x-pack/plugins/reporting/tsconfig.json b/x-pack/plugins/reporting/tsconfig.json index b52c02a72bed1..68a7ded4ee1e8 100644 --- a/x-pack/plugins/reporting/tsconfig.json +++ b/x-pack/plugins/reporting/tsconfig.json @@ -50,6 +50,7 @@ "@kbn/reporting-csv-share-panel", "@kbn/react-kibana-context-render", "@kbn/react-kibana-mount", + "@kbn/core-security-common", ], "exclude": [ "target/**/*", diff --git a/x-pack/plugins/search_playground/public/utils/create_query.test.ts b/x-pack/plugins/search_playground/public/utils/create_query.test.ts index 164f79618d74c..c059580703ba8 100644 --- a/x-pack/plugins/search_playground/public/utils/create_query.test.ts +++ b/x-pack/plugins/search_playground/public/utils/create_query.test.ts @@ -452,7 +452,11 @@ describe('create_query', () => { standard: { query: { nested: { - inner_hits: { _source: ['field2.inference.chunks.text'], size: 2 }, + inner_hits: { + _source: ['field2.inference.chunks.text'], + name: 'index1.field2', + size: 2, + }, path: 'field2.inference.chunks', query: { sparse_vector: { @@ -570,7 +574,11 @@ describe('create_query', () => { standard: { query: { nested: { - inner_hits: { _source: ['field2.inference.chunks.text'], size: 2 }, + inner_hits: { + _source: ['field2.inference.chunks.text'], + name: 'index1.field2', + size: 2, + }, path: 'field2.inference.chunks', query: { knn: { diff --git a/x-pack/plugins/search_playground/public/utils/create_query.ts b/x-pack/plugins/search_playground/public/utils/create_query.ts index 0f65bea734d5c..fadf15f291abd 100644 --- a/x-pack/plugins/search_playground/public/utils/create_query.ts +++ b/x-pack/plugins/search_playground/public/utils/create_query.ts @@ -89,6 +89,7 @@ export function createQuery( }, inner_hits: { size: 2, + name: `${index}.${semanticField.field}`, _source: [`${semanticField.field}.inference.chunks.text`], }, }, @@ -106,6 +107,7 @@ export function createQuery( }, inner_hits: { size: 2, + name: `${index}.${semanticField.field}`, _source: [`${semanticField.field}.inference.chunks.text`], }, }, diff --git a/x-pack/plugins/search_playground/server/lib/conversational_chain.test.ts b/x-pack/plugins/search_playground/server/lib/conversational_chain.test.ts index f7ad46d3fdfda..fa6ee8e6e1abd 100644 --- a/x-pack/plugins/search_playground/server/lib/conversational_chain.test.ts +++ b/x-pack/plugins/search_playground/server/lib/conversational_chain.test.ts @@ -224,7 +224,7 @@ describe('conversational chain', () => { _index: 'index', _id: '1', inner_hits: { - 'field.inference.chunks': { + 'index.field': { hits: { hits: [ { diff --git a/x-pack/plugins/search_playground/server/utils/get_value_for_selected_field.test.ts b/x-pack/plugins/search_playground/server/utils/get_value_for_selected_field.test.ts index bf02f6620d38c..cfdefc99f80ef 100644 --- a/x-pack/plugins/search_playground/server/utils/get_value_for_selected_field.test.ts +++ b/x-pack/plugins/search_playground/server/utils/get_value_for_selected_field.test.ts @@ -91,7 +91,7 @@ describe('getValueForSelectedField', () => { }, }, inner_hits: { - 'test.inference.chunks': { + 'sample-index.test': { hits: { hits: [ { diff --git a/x-pack/plugins/search_playground/server/utils/get_value_for_selected_field.ts b/x-pack/plugins/search_playground/server/utils/get_value_for_selected_field.ts index 68bd600d62143..695c56a571374 100644 --- a/x-pack/plugins/search_playground/server/utils/get_value_for_selected_field.ts +++ b/x-pack/plugins/search_playground/server/utils/get_value_for_selected_field.ts @@ -14,8 +14,9 @@ export const getValueForSelectedField = (hit: SearchHit, path: string): string = } // for semantic_text matches - if (!!hit.inner_hits?.[`${path}.inference.chunks`]) { - return hit.inner_hits[`${path}.inference.chunks`].hits.hits + const innerHitPath = `${hit._index}.${path}`; + if (!!hit.inner_hits?.[innerHitPath]) { + return hit.inner_hits[innerHitPath].hits.hits .map((innerHit) => innerHit._source.text) .join('\n --- \n'); } diff --git a/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/bulk_actions/bulk_actions_route.gen.ts b/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/bulk_actions/bulk_actions_route.gen.ts index 9d7ed22f92052..b9750fd7eb06d 100644 --- a/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/bulk_actions/bulk_actions_route.gen.ts +++ b/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/bulk_actions/bulk_actions_route.gen.ts @@ -54,6 +54,8 @@ export const BulkActionsDryRunErrCode = z.enum([ 'MACHINE_LEARNING_INDEX_PATTERN', 'ESQL_INDEX_PATTERN', 'INVESTIGATION_FIELDS_FEATURE', + 'MANUAL_RULE_RUN_FEATURE', + 'MANUAL_RULE_RUN_DISABLED_RULE', ]); export type BulkActionsDryRunErrCodeEnum = typeof BulkActionsDryRunErrCode.enum; export const BulkActionsDryRunErrCodeEnum = BulkActionsDryRunErrCode.enum; @@ -157,6 +159,23 @@ export const BulkDuplicateRules = BulkActionBase.merge( }) ); +export type BulkManualRuleRun = z.infer; +export const BulkManualRuleRun = BulkActionBase.merge( + z.object({ + action: z.literal('run'), + run: z.object({ + /** + * Start date of the manual rule run + */ + start_date: z.string(), + /** + * End date of the manual rule run + */ + end_date: z.string().optional(), + }), + }) +); + /** * The condition for throttling the notification: 'rule', 'no_actions', or time duration */ @@ -173,6 +192,7 @@ export const BulkActionType = z.enum([ 'delete', 'duplicate', 'edit', + 'run', ]); export type BulkActionTypeEnum = typeof BulkActionType.enum; export const BulkActionTypeEnum = BulkActionType.enum; @@ -302,6 +322,7 @@ export const PerformBulkActionRequestBody = z.union([ BulkEnableRules, BulkExportRules, BulkDuplicateRules, + BulkManualRuleRun, BulkEditRules, ]); export type PerformBulkActionRequestBodyInput = z.input; diff --git a/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/bulk_actions/bulk_actions_route.schema.yaml b/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/bulk_actions/bulk_actions_route.schema.yaml index a2e75b8ae4fb6..184f4ec9825b6 100644 --- a/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/bulk_actions/bulk_actions_route.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/bulk_actions/bulk_actions_route.schema.yaml @@ -29,6 +29,7 @@ paths: - $ref: '#/components/schemas/BulkEnableRules' - $ref: '#/components/schemas/BulkExportRules' - $ref: '#/components/schemas/BulkDuplicateRules' + - $ref: '#/components/schemas/BulkManualRuleRun' - $ref: '#/components/schemas/BulkEditRules' responses: 200: @@ -78,6 +79,8 @@ components: - MACHINE_LEARNING_INDEX_PATTERN - ESQL_INDEX_PATTERN - INVESTIGATION_FIELDS_FEATURE + - MANUAL_RULE_RUN_FEATURE + - MANUAL_RULE_RUN_DISABLED_RULE NormalizedRuleError: type: object @@ -251,6 +254,29 @@ components: required: - action + BulkManualRuleRun: + allOf: + - $ref: '#/components/schemas/BulkActionBase' + - type: object + properties: + action: + type: string + enum: [run] + run: + type: object + properties: + start_date: + type: string + description: Start date of the manual rule run + end_date: + type: string + description: End date of the manual rule run + required: + - start_date + required: + - action + - run + ThrottleForBulkActions: type: string description: "The condition for throttling the notification: 'rule', 'no_actions', or time duration" @@ -269,6 +295,7 @@ components: - delete - duplicate - edit + - run BulkActionEditType: type: string diff --git a/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/bulk_actions/bulk_actions_route.test.ts b/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/bulk_actions/bulk_actions_route.test.ts index 74bdf8707629e..3c33eb6c103e7 100644 --- a/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/bulk_actions/bulk_actions_route.test.ts +++ b/x-pack/plugins/security_solution/common/api/detection_engine/rule_management/bulk_actions/bulk_actions_route.test.ts @@ -34,7 +34,7 @@ describe('Perform bulk action request schema', () => { expectParseError(result); expect(stringifyZodError(result.error)).toMatchInlineSnapshot( - `"action: Invalid literal value, expected \\"delete\\", action: Invalid literal value, expected \\"disable\\", action: Invalid literal value, expected \\"enable\\", action: Invalid literal value, expected \\"export\\", action: Invalid literal value, expected \\"duplicate\\", and 2 more"` + `"action: Invalid literal value, expected \\"delete\\", action: Invalid literal value, expected \\"disable\\", action: Invalid literal value, expected \\"enable\\", action: Invalid literal value, expected \\"export\\", action: Invalid literal value, expected \\"duplicate\\", and 4 more"` ); }); @@ -46,7 +46,7 @@ describe('Perform bulk action request schema', () => { expectParseError(result); expect(stringifyZodError(result.error)).toMatchInlineSnapshot( - `"action: Invalid literal value, expected \\"delete\\", action: Invalid literal value, expected \\"disable\\", action: Invalid literal value, expected \\"enable\\", action: Invalid literal value, expected \\"export\\", action: Invalid literal value, expected \\"duplicate\\", and 2 more"` + `"action: Invalid literal value, expected \\"delete\\", action: Invalid literal value, expected \\"disable\\", action: Invalid literal value, expected \\"enable\\", action: Invalid literal value, expected \\"export\\", action: Invalid literal value, expected \\"duplicate\\", and 4 more"` ); }); @@ -74,7 +74,7 @@ describe('Perform bulk action request schema', () => { expectParseError(result); expect(stringifyZodError(result.error)).toMatchInlineSnapshot( - `"ids: Expected array, received string, action: Invalid literal value, expected \\"delete\\", ids: Expected array, received string, action: Invalid literal value, expected \\"disable\\", ids: Expected array, received string, and 7 more"` + `"ids: Expected array, received string, action: Invalid literal value, expected \\"delete\\", ids: Expected array, received string, action: Invalid literal value, expected \\"disable\\", ids: Expected array, received string, and 10 more"` ); }); }); @@ -143,6 +143,36 @@ describe('Perform bulk action request schema', () => { }); }); + describe('bulk manual rule run', () => { + test('invalid request: missing manual rule run payload', () => { + const payload = { + query: 'name: test', + action: BulkActionTypeEnum.run, + }; + + const result = PerformBulkActionRequestBody.safeParse(payload); + expectParseError(result); + + expect(stringifyZodError(result.error)).toMatchInlineSnapshot( + `"action: Invalid literal value, expected \\"delete\\", action: Invalid literal value, expected \\"disable\\", action: Invalid literal value, expected \\"enable\\", action: Invalid literal value, expected \\"export\\", action: Invalid literal value, expected \\"duplicate\\", and 3 more"` + ); + }); + + test('valid request', () => { + const payload: PerformBulkActionRequestBody = { + query: 'name: test', + action: BulkActionTypeEnum.run, + [BulkActionTypeEnum.run]: { + start_date: new Date().toISOString(), + end_date: new Date().toISOString(), + }, + }; + const result = PerformBulkActionRequestBody.safeParse(payload); + expectParseSuccess(result); + expect(result.data).toEqual(payload); + }); + }); + describe('bulk edit', () => { describe('cases common to every type of editing', () => { test('invalid request: missing edit payload', () => { @@ -155,7 +185,7 @@ describe('Perform bulk action request schema', () => { expectParseError(result); expect(stringifyZodError(result.error)).toMatchInlineSnapshot( - `"action: Invalid literal value, expected \\"delete\\", action: Invalid literal value, expected \\"disable\\", action: Invalid literal value, expected \\"enable\\", action: Invalid literal value, expected \\"export\\", action: Invalid literal value, expected \\"duplicate\\", and 1 more"` + `"action: Invalid literal value, expected \\"delete\\", action: Invalid literal value, expected \\"disable\\", action: Invalid literal value, expected \\"enable\\", action: Invalid literal value, expected \\"export\\", action: Invalid literal value, expected \\"duplicate\\", and 3 more"` ); }); @@ -170,7 +200,7 @@ describe('Perform bulk action request schema', () => { expectParseError(result); expect(stringifyZodError(result.error)).toMatchInlineSnapshot( - `"action: Invalid literal value, expected \\"delete\\", action: Invalid literal value, expected \\"disable\\", action: Invalid literal value, expected \\"enable\\", action: Invalid literal value, expected \\"export\\", action: Invalid literal value, expected \\"duplicate\\", and 1 more"` + `"action: Invalid literal value, expected \\"delete\\", action: Invalid literal value, expected \\"disable\\", action: Invalid literal value, expected \\"enable\\", action: Invalid literal value, expected \\"export\\", action: Invalid literal value, expected \\"duplicate\\", and 3 more"` ); }); }); @@ -187,7 +217,7 @@ describe('Perform bulk action request schema', () => { expectParseError(result); expect(stringifyZodError(result.error)).toMatchInlineSnapshot( - `"action: Invalid literal value, expected \\"delete\\", action: Invalid literal value, expected \\"disable\\", action: Invalid literal value, expected \\"enable\\", action: Invalid literal value, expected \\"export\\", action: Invalid literal value, expected \\"duplicate\\", and 11 more"` + `"action: Invalid literal value, expected \\"delete\\", action: Invalid literal value, expected \\"disable\\", action: Invalid literal value, expected \\"enable\\", action: Invalid literal value, expected \\"export\\", action: Invalid literal value, expected \\"duplicate\\", and 13 more"` ); }); @@ -249,7 +279,7 @@ describe('Perform bulk action request schema', () => { expectParseError(result); expect(stringifyZodError(result.error)).toMatchInlineSnapshot( - `"action: Invalid literal value, expected \\"delete\\", action: Invalid literal value, expected \\"disable\\", action: Invalid literal value, expected \\"enable\\", action: Invalid literal value, expected \\"export\\", action: Invalid literal value, expected \\"duplicate\\", and 11 more"` + `"action: Invalid literal value, expected \\"delete\\", action: Invalid literal value, expected \\"disable\\", action: Invalid literal value, expected \\"enable\\", action: Invalid literal value, expected \\"export\\", action: Invalid literal value, expected \\"duplicate\\", and 13 more"` ); }); @@ -367,7 +397,7 @@ describe('Perform bulk action request schema', () => { expectParseError(result); expect(stringifyZodError(result.error)).toMatchInlineSnapshot( - `"action: Invalid literal value, expected \\"delete\\", action: Invalid literal value, expected \\"disable\\", action: Invalid literal value, expected \\"enable\\", action: Invalid literal value, expected \\"export\\", action: Invalid literal value, expected \\"duplicate\\", and 9 more"` + `"action: Invalid literal value, expected \\"delete\\", action: Invalid literal value, expected \\"disable\\", action: Invalid literal value, expected \\"enable\\", action: Invalid literal value, expected \\"export\\", action: Invalid literal value, expected \\"duplicate\\", and 11 more"` ); }); @@ -389,7 +419,7 @@ describe('Perform bulk action request schema', () => { expectParseError(result); expect(stringifyZodError(result.error)).toMatchInlineSnapshot( - `"action: Invalid literal value, expected \\"delete\\", action: Invalid literal value, expected \\"disable\\", action: Invalid literal value, expected \\"enable\\", action: Invalid literal value, expected \\"export\\", action: Invalid literal value, expected \\"duplicate\\", and 12 more"` + `"action: Invalid literal value, expected \\"delete\\", action: Invalid literal value, expected \\"disable\\", action: Invalid literal value, expected \\"enable\\", action: Invalid literal value, expected \\"export\\", action: Invalid literal value, expected \\"duplicate\\", and 14 more"` ); }); @@ -427,7 +457,7 @@ describe('Perform bulk action request schema', () => { expectParseError(result); expect(stringifyZodError(result.error)).toMatchInlineSnapshot( - `"action: Invalid literal value, expected \\"delete\\", action: Invalid literal value, expected \\"disable\\", action: Invalid literal value, expected \\"enable\\", action: Invalid literal value, expected \\"export\\", action: Invalid literal value, expected \\"duplicate\\", and 9 more"` + `"action: Invalid literal value, expected \\"delete\\", action: Invalid literal value, expected \\"disable\\", action: Invalid literal value, expected \\"enable\\", action: Invalid literal value, expected \\"export\\", action: Invalid literal value, expected \\"duplicate\\", and 11 more"` ); }); @@ -472,7 +502,7 @@ describe('Perform bulk action request schema', () => { expectParseError(result); expect(stringifyZodError(result.error)).toMatchInlineSnapshot( - `"action: Invalid literal value, expected \\"delete\\", action: Invalid literal value, expected \\"disable\\", action: Invalid literal value, expected \\"enable\\", action: Invalid literal value, expected \\"export\\", action: Invalid literal value, expected \\"duplicate\\", and 12 more"` + `"action: Invalid literal value, expected \\"delete\\", action: Invalid literal value, expected \\"disable\\", action: Invalid literal value, expected \\"enable\\", action: Invalid literal value, expected \\"export\\", action: Invalid literal value, expected \\"duplicate\\", and 14 more"` ); }); @@ -494,7 +524,7 @@ describe('Perform bulk action request schema', () => { expectParseError(result); expect(stringifyZodError(result.error)).toMatchInlineSnapshot( - `"action: Invalid literal value, expected \\"delete\\", action: Invalid literal value, expected \\"disable\\", action: Invalid literal value, expected \\"enable\\", action: Invalid literal value, expected \\"export\\", action: Invalid literal value, expected \\"duplicate\\", and 12 more"` + `"action: Invalid literal value, expected \\"delete\\", action: Invalid literal value, expected \\"disable\\", action: Invalid literal value, expected \\"enable\\", action: Invalid literal value, expected \\"export\\", action: Invalid literal value, expected \\"duplicate\\", and 14 more"` ); }); @@ -532,7 +562,7 @@ describe('Perform bulk action request schema', () => { expectParseError(result); expect(stringifyZodError(result.error)).toMatchInlineSnapshot( - `"action: Invalid literal value, expected \\"delete\\", action: Invalid literal value, expected \\"disable\\", action: Invalid literal value, expected \\"enable\\", action: Invalid literal value, expected \\"export\\", action: Invalid literal value, expected \\"duplicate\\", and 9 more"` + `"action: Invalid literal value, expected \\"delete\\", action: Invalid literal value, expected \\"disable\\", action: Invalid literal value, expected \\"enable\\", action: Invalid literal value, expected \\"export\\", action: Invalid literal value, expected \\"duplicate\\", and 11 more"` ); }); @@ -554,7 +584,7 @@ describe('Perform bulk action request schema', () => { expectParseError(result); expect(stringifyZodError(result.error)).toMatchInlineSnapshot( - `"action: Invalid literal value, expected \\"delete\\", action: Invalid literal value, expected \\"disable\\", action: Invalid literal value, expected \\"enable\\", action: Invalid literal value, expected \\"export\\", action: Invalid literal value, expected \\"duplicate\\", and 13 more"` + `"action: Invalid literal value, expected \\"delete\\", action: Invalid literal value, expected \\"disable\\", action: Invalid literal value, expected \\"enable\\", action: Invalid literal value, expected \\"export\\", action: Invalid literal value, expected \\"duplicate\\", and 15 more"` ); }); 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 index af5dbaf394d81..717440fa0717a 100644 --- 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 @@ -10,4 +10,5 @@ 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_note/delete_note_route_schema.yaml b/x-pack/plugins/security_solution/common/api/timeline/delete_note/delete_note_route_schema.yaml index e05666a3319a8..0f39551e757b6 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 @@ -22,11 +22,19 @@ paths: content: application/json: schema: - type: object - properties: - noteId: - type: string - nullable: true + oneOf: + type: object + properties: + noteId: + type: string + nullable: true + type: object + properties: + noteIds: + type: array + items: + type: string + nullable: true responses: 200: description: Indicates the note was successfully deleted. \ No newline at end of file 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 new file mode 100644 index 0000000000000..453f7ff045df2 --- /dev/null +++ b/x-pack/plugins/security_solution/common/api/timeline/get_notes/get_notes_route.ts @@ -0,0 +1,19 @@ +/* + * 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.number), + perPage: unionWithNullType(runtimeTypes.number), + 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/get_notes/get_notes_route_schema.yaml b/x-pack/plugins/security_solution/common/api/timeline/get_notes/get_notes_route_schema.yaml new file mode 100644 index 0000000000000..a78b7e6f9cbee --- /dev/null +++ b/x-pack/plugins/security_solution/common/api/timeline/get_notes/get_notes_route_schema.yaml @@ -0,0 +1,60 @@ +openapi: 3.0.0 +info: + title: Elastic Security - Timeline - Notes API + version: 8.9.0 +servers: + - url: 'http://{kibana_host}:{port}' + variables: + kibana_host: + default: localhost + port: + default: '5601' +paths: + /api/note: + get: + operationId: getNotes + description: Gets notes + tags: + - access:securitySolution + parameters: + - name: documentIds + in: query + schema: + oneOf: + - type: array + items: + type: string + - type: string + - name: page + in: query + schema: + type: number + nullable: true + - name: perPage + in: query + schema: + type: number + nullable: true + - name: search + in: query + schema: + type: string + nullable: true + - name: sortField + in: query + schema: + type: string + nullable: true + - name: sortOrder + in: query + schema: + type: string + nullable: true + - name: filter + in: query + schema: + type: string + nullable: true + responses: + 200: + description: Indicates the requested notes were returned. 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 5230552f3e836..3e69bd14b646c 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 @@ -45,6 +45,16 @@ export type BareNote = runtimeTypes.TypeOf; */ 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({ 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 index b588e6829aaba..e6f8b9cc94fd3 100644 --- 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 @@ -7,9 +7,9 @@ import * as runtimeTypes from 'io-ts'; import { unionWithNullType } from '../../../utility_types'; -import { BareNoteSchema } from '../model/api'; +import { BareNoteSchema, BareNoteWithoutExternalRefsSchema } from '../model/api'; -export const persistNoteSchema = runtimeTypes.intersection([ +export const persistNoteWithRefSchema = runtimeTypes.intersection([ runtimeTypes.type({ note: BareNoteSchema, }), @@ -19,3 +19,22 @@ export const persistNoteSchema = runtimeTypes.intersection([ 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/constants.ts b/x-pack/plugins/security_solution/common/constants.ts index 70fb550e798e1..38e0c5c0327b5 100644 --- a/x-pack/plugins/security_solution/common/constants.ts +++ b/x-pack/plugins/security_solution/common/constants.ts @@ -430,6 +430,8 @@ export enum BulkActionsDryRunErrCode { MACHINE_LEARNING_INDEX_PATTERN = 'MACHINE_LEARNING_INDEX_PATTERN', ESQL_INDEX_PATTERN = 'ESQL_INDEX_PATTERN', INVESTIGATION_FIELDS_FEATURE = 'INVESTIGATION_FIELDS_FEATURE', + MANUAL_RULE_RUN_FEATURE = 'MANUAL_RULE_RUN_FEATURE', + MANUAL_RULE_RUN_DISABLED_RULE = 'MANUAL_RULE_RUN_DISABLED_RULE', } export const MAX_NUMBER_OF_NEW_TERMS_FIELDS = 3; @@ -493,3 +495,9 @@ export const MAX_COMMENT_LENGTH = 30000 as const; * Cases external attachment IDs */ export const CASE_ATTACHMENT_ENDPOINT_TYPE_ID = 'endpoint' as const; + +/** + * Rule gaps + */ +export const MAX_MANUAL_RULE_RUN_LOOKBACK_WINDOW_DAYS = 90; +export const MAX_MANUAL_RULE_RUN_BULK_SIZE = 100; diff --git a/x-pack/plugins/security_solution/common/endpoint/generate_data.ts b/x-pack/plugins/security_solution/common/endpoint/generate_data.ts index 30743b3210c1a..44c9f8d0f7bd2 100644 --- a/x-pack/plugins/security_solution/common/endpoint/generate_data.ts +++ b/x-pack/plugins/security_solution/common/endpoint/generate_data.ts @@ -240,6 +240,7 @@ export interface Tree { allEvents: Event[]; startTime: Date; endTime: Date; + agentId: string; } export interface TreeOptions { @@ -381,6 +382,7 @@ export class EndpointDocGenerator extends BaseDataGenerator { protected get commonInfo() { return clone(this._commonInfo); } + protected set commonInfo(newInfo) { this._commonInfo = newInfo; } @@ -1184,6 +1186,7 @@ export class EndpointDocGenerator extends BaseDataGenerator { childrenLevels: levels, startTime, endTime, + agentId: this.commonInfo.agent.id, }; } diff --git a/x-pack/plugins/security_solution/common/endpoint/schema/resolver.ts b/x-pack/plugins/security_solution/common/endpoint/schema/resolver.ts index 6de81d3e95a55..28e9e451f0c51 100644 --- a/x-pack/plugins/security_solution/common/endpoint/schema/resolver.ts +++ b/x-pack/plugins/security_solution/common/endpoint/schema/resolver.ts @@ -30,9 +30,12 @@ export const validateTree = { to: schema.string(), }) ), + agentId: schema.maybe(schema.string()), schema: schema.object({ // the ancestry field is optional ancestry: schema.maybe(schema.string({ minLength: 1 })), + // the agentId field is introduced because agent.id will stop being included in entity_id + agentId: schema.maybe(schema.string()), id: schema.string({ minLength: 1 }), name: schema.maybe(schema.string({ minLength: 1 })), parent: schema.string({ minLength: 1 }), @@ -68,6 +71,7 @@ export const validateEvents = { filter: schema.maybe(schema.string()), entityType: schema.maybe(schema.string()), eventID: schema.maybe(schema.string()), + agentId: schema.maybe(schema.string()), }), }; diff --git a/x-pack/plugins/security_solution/common/endpoint/types/index.ts b/x-pack/plugins/security_solution/common/endpoint/types/index.ts index 1c94128160691..9e02fe0f69cef 100644 --- a/x-pack/plugins/security_solution/common/endpoint/types/index.ts +++ b/x-pack/plugins/security_solution/common/endpoint/types/index.ts @@ -149,6 +149,7 @@ export interface ResolverNode { parent?: string | number; name?: string; stats: EventStats; + agentId?: string; } /** @@ -864,6 +865,11 @@ export interface ResolverSchema { * parent represents the field that is the edge between two nodes. */ parent: string; + + /** + * agent id is required for endpoint because entity_id might not include agent.id soon + */ + agentId?: string; } /** @@ -883,6 +889,11 @@ export type ResolverEntityIndex = Array<{ * Unique ID value for the requested document using the `_id` field passed to the /entity route */ id: string; + + /** + * Agent id is required for endpoint because entity_id might not include agent.id soon + */ + agentId?: string; }>; /** diff --git a/x-pack/plugins/security_solution/common/experimental_features.ts b/x-pack/plugins/security_solution/common/experimental_features.ts index 44688b617799a..53c5bdd8a657e 100644 --- a/x-pack/plugins/security_solution/common/experimental_features.ts +++ b/x-pack/plugins/security_solution/common/experimental_features.ts @@ -85,7 +85,7 @@ export const allowedExperimentalValues = Object.freeze({ * Enables the ability to send Response actions to Crowdstrike and persist the results * in ES. */ - responseActionsCrowdstrikeManualHostIsolationEnabled: false, + responseActionsCrowdstrikeManualHostIsolationEnabled: true, /** * Enables scan response action on Endpoint @@ -185,25 +185,13 @@ export const allowedExperimentalValues = Object.freeze({ /** * Enables experimental Crowdstrike integration data to be available in Analyzer */ - crowdstrikeDataInAnalyzerEnabled: false, + crowdstrikeDataInAnalyzerEnabled: true, /** * Enables experimental JAMF integration data to be available in Analyzer */ jamfDataInAnalyzerEnabled: false, - /** - * Enables experimental "Updates" tab in the prebuilt rule upgrade flyout. - * This tab shows the JSON diff between the installed prebuilt rule - * version and the latest available version. - * - * Ticket: https://github.com/elastic/kibana/issues/169160 - * Owners: https://github.com/orgs/elastic/teams/security-detection-rule-management - * Added: on Dec 06, 2023 in https://github.com/elastic/kibana/pull/172535 - * Turned: on Dec 20, 2023 in https://github.com/elastic/kibana/pull/173368 - * Expires: on Feb 20, 2024 - */ - jsonPrebuiltRulesDiffingEnabled: true, /* * Disables discover esql tab within timeline * @@ -220,17 +208,6 @@ export const allowedExperimentalValues = Object.freeze({ */ analyzerDatePickersAndSourcererDisabled: false, - /** - * Enables per-field rule diffs tab in the prebuilt rule upgrade flyout - * - * Ticket: https://github.com/elastic/kibana/issues/166489 - * Owners: https://github.com/orgs/elastic/teams/security-detection-rule-management - * Added: on Feb 12, 2024 in https://github.com/elastic/kibana/pull/174564 - * Turned: on Feb 23, 2024 in https://github.com/elastic/kibana/pull/177495 - * Expires: on Apr 23, 2024 - */ - perFieldPrebuiltRulesDiffingEnabled: true, - /** * Enables an ability to customize Elastic prebuilt rules. * diff --git a/x-pack/plugins/security_solution/common/types/header_actions/index.ts b/x-pack/plugins/security_solution/common/types/header_actions/index.ts index c2eb92c6bee17..2bb0c4ff5f33a 100644 --- a/x-pack/plugins/security_solution/common/types/header_actions/index.ts +++ b/x-pack/plugins/security_solution/common/types/header_actions/index.ts @@ -86,6 +86,7 @@ export interface ActionProps { columnId: string; columnValues: string; data: TimelineNonEcsData[]; + disableExpandAction?: boolean; disabled?: boolean; ecsData: Ecs; eventId: string; diff --git a/x-pack/plugins/security_solution/common/types/timeline/note/saved_object.ts b/x-pack/plugins/security_solution/common/types/timeline/note/saved_object.ts index 1fad511424eda..1de998559e76f 100644 --- a/x-pack/plugins/security_solution/common/types/timeline/note/saved_object.ts +++ b/x-pack/plugins/security_solution/common/types/timeline/note/saved_object.ts @@ -14,19 +14,15 @@ import { unionWithNullType } from '../../../utility_types'; /* * Note Types */ -const SavedNoteRuntimeType = runtimeTypes.intersection([ - runtimeTypes.type({ - timelineId: runtimeTypes.string, - }), - runtimeTypes.partial({ - eventId: unionWithNullType(runtimeTypes.string), - note: unionWithNullType(runtimeTypes.string), - created: unionWithNullType(runtimeTypes.number), - createdBy: unionWithNullType(runtimeTypes.string), - updated: unionWithNullType(runtimeTypes.number), - updatedBy: unionWithNullType(runtimeTypes.string), - }), -]); +const SavedNoteRuntimeType = 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), +}); /** * Note Saved object type with metadata diff --git a/x-pack/plugins/security_solution/public/assistant/provider.tsx b/x-pack/plugins/security_solution/public/assistant/provider.tsx index 8516ec455aac0..2b5daf73fbf4b 100644 --- a/x-pack/plugins/security_solution/public/assistant/provider.tsx +++ b/x-pack/plugins/security_solution/public/assistant/provider.tsx @@ -117,6 +117,7 @@ export const createConversations = async ( */ export const AssistantProvider: FC> = ({ children }) => { const { + application: { navigateToApp }, http, notifications, storage, @@ -170,6 +171,7 @@ export const AssistantProvider: FC> = ({ children }) baseConversations={baseConversations} getComments={getComments} http={http} + navigateToApp={navigateToApp} title={ASSISTANT_TITLE} toasts={toasts} > diff --git a/x-pack/plugins/security_solution/public/assistant/stack_management/management_settings.tsx b/x-pack/plugins/security_solution/public/assistant/stack_management/management_settings.tsx index 7282e5e85e437..525315ca36eb2 100644 --- a/x-pack/plugins/security_solution/public/assistant/stack_management/management_settings.tsx +++ b/x-pack/plugins/security_solution/public/assistant/stack_management/management_settings.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import React, { useCallback, useMemo, useState } from 'react'; +import React, { useCallback, useMemo } from 'react'; import { AssistantSettingsManagement } from '@kbn/elastic-assistant/impl/assistant/settings/assistant_settings_management'; import type { Conversation } from '@kbn/elastic-assistant'; import { @@ -18,6 +18,8 @@ import { useConversation } from '@kbn/elastic-assistant/impl/assistant/use_conve import type { FetchConversationsResponse } from '@kbn/elastic-assistant/impl/assistant/api'; import { useIsExperimentalFeatureEnabled } from '../../common/hooks/use_experimental_features'; +const defaultSelectedConversationId = WELCOME_CONVERSATION_TITLE; + export const ManagementSettings = React.memo(() => { const isFlyoutMode = useIsExperimentalFeatureEnabled('aiAssistantFlyoutMode'); @@ -32,32 +34,33 @@ export const ManagementSettings = React.memo(() => { mergeBaseWithPersistedConversations(baseConversations, conversationsData), [baseConversations] ); - const { data: conversations } = useFetchCurrentUserConversations({ + const { + data: conversations, + isFetched: conversationsLoaded, + refetch: refetchConversations, + } = useFetchCurrentUserConversations({ http, onFetch: onFetchedConversations, isAssistantEnabled, }); - const [selectedConversationId, setSelectedConversationId] = useState( - WELCOME_CONVERSATION_TITLE - ); - const { getDefaultConversation } = useConversation(); const currentConversation = useMemo( () => - conversations?.[selectedConversationId] ?? + conversations?.[defaultSelectedConversationId] ?? getDefaultConversation({ cTitle: WELCOME_CONVERSATION_TITLE, isFlyoutMode }), - [conversations, getDefaultConversation, selectedConversationId, isFlyoutMode] + [conversations, getDefaultConversation, isFlyoutMode] ); if (conversations) { return ( ); } diff --git a/x-pack/plugins/security_solution/public/attack_discovery/hooks/use_poll_api.test.tsx b/x-pack/plugins/security_solution/public/attack_discovery/hooks/use_poll_api.test.tsx index e599bc8073425..a08dbcfd9a26b 100644 --- a/x-pack/plugins/security_solution/public/attack_discovery/hooks/use_poll_api.test.tsx +++ b/x-pack/plugins/security_solution/public/attack_discovery/hooks/use_poll_api.test.tsx @@ -49,6 +49,7 @@ const mockResponse = { }, ], backingIndex: '1234', + lastViewedAt: '2024-06-07T20:04:35.715Z', updatedAt: '2024-06-07T20:04:35.715Z', replacements: { 'c1f9889f-1f6b-4abc-8e65-02de89fe1054': 'root', @@ -70,6 +71,39 @@ const mockResponse = { id: '8e215edc-6318-4760-9566-d32f1844f9cb', }; +const mockStats = [ + { + hasViewed: false, + status: 'failed', + count: 0, + connectorId: 'my-bedrock-old', + }, + { + hasViewed: false, + status: 'running', + count: 1, + connectorId: 'my-gen-ai', + }, + { + hasViewed: true, + status: 'succeeded', + count: 1, + connectorId: 'my-gpt4o-ai', + }, + { + hasViewed: true, + status: 'canceled', + count: 1, + connectorId: 'my-bedrock', + }, + { + hasViewed: false, + status: 'succeeded', + count: 4, + connectorId: 'my-gen-a2i', + }, +]; + describe('usePollApi', () => { beforeAll(() => { jest.useFakeTimers({ legacyFakeTimers: true }); @@ -101,8 +135,8 @@ describe('usePollApi', () => { test('should update didInitialFetch on connector change', async () => { http.fetch.mockResolvedValue({ - entryExists: true, data: mockResponse, + stats: mockStats, }); const { result, rerender } = renderHook((props) => usePollApi(props), { initialProps: defaultProps, @@ -127,10 +161,10 @@ describe('usePollApi', () => { expect(result.current.didInitialFetch).toEqual(true); }); - test('should update status and data on successful response', async () => { + test('should update stats, status, and data on successful response', async () => { http.fetch.mockResolvedValue({ - entryExists: true, data: mockResponse, + stats: mockStats, }); const { result } = renderHook(() => usePollApi(defaultProps)); @@ -143,37 +177,13 @@ describe('usePollApi', () => { expect(setApproximateFutureTime).toHaveBeenCalledWith( moment(mockResponse.updatedAt).add(mockResponse.averageIntervalMs, 'milliseconds').toDate() ); - }); - - test('should update status and data on running status and schedule next poll', async () => { - // @ts-ignore - jest.spyOn(global, 'setTimeout').mockImplementation((cb) => cb()); - http.fetch - .mockResolvedValueOnce({ - entryExists: true, - data: { ...mockResponse, attackDiscoveries: [], status: 'running' }, - }) - .mockResolvedValueOnce({ - entryExists: true, - data: { ...mockResponse, attackDiscoveries: [], status: 'running' }, - }) - .mockResolvedValueOnce({ - entryExists: true, - data: { ...mockResponse, attackDiscoveries: [], status: 'running' }, - }) - .mockResolvedValue({ - entryExists: true, - data: mockResponse, - }); - - const { result } = renderHook(() => usePollApi(defaultProps)); - - await act(async () => { - await result.current.pollApi(); + expect(result.current.stats).toEqual({ + newConnectorResultsCount: 2, + newDiscoveriesCount: 4, + statsPerConnector: mockStats, }); - // 3 from the mockResolvedValueOnce above - expect(setTimeout).toHaveBeenCalledTimes(3); }); + test('When no connectorId and pollApi is called, should update status and data to null on error and show toast', async () => { const addDangerMock = jest.spyOn(kibanaMock.notifications.toasts, 'addDanger'); const { result } = renderHook(() => diff --git a/x-pack/plugins/security_solution/public/attack_discovery/hooks/use_poll_api.tsx b/x-pack/plugins/security_solution/public/attack_discovery/hooks/use_poll_api.tsx index d3821ab57f29b..874a4d1c99ded 100644 --- a/x-pack/plugins/security_solution/public/attack_discovery/hooks/use_poll_api.tsx +++ b/x-pack/plugins/security_solution/public/attack_discovery/hooks/use_poll_api.tsx @@ -7,7 +7,11 @@ import { useCallback, useEffect, useRef, useState } from 'react'; import * as uuid from 'uuid'; -import type { AttackDiscoveryStatus, AttackDiscoveryResponse } from '@kbn/elastic-assistant-common'; +import type { + AttackDiscoveryStats, + AttackDiscoveryStatus, + AttackDiscoveryResponse, +} from '@kbn/elastic-assistant-common'; import { AttackDiscoveryCancelResponse, AttackDiscoveryGetResponse, @@ -39,7 +43,9 @@ interface UsePollApi { didInitialFetch: boolean; status: AttackDiscoveryStatus | null; data: AttackDiscoveryData | null; + stats: AttackDiscoveryStats | null; pollApi: () => void; + setStatus: (status: AttackDiscoveryStatus | null) => void; } export const usePollApi = ({ @@ -49,14 +55,18 @@ export const usePollApi = ({ connectorId, }: Props): UsePollApi => { const [status, setStatus] = useState(null); + const [stats, setStats] = useState(null); const [data, setData] = useState(null); const timeoutIdRef = useRef | null>(null); + const connectorIdRef = useRef(undefined); const [didInitialFetch, setDidInitialFetch] = useState(false); useEffect(() => { + connectorIdRef.current = connectorId; setDidInitialFetch(false); return () => { + connectorIdRef.current = undefined; // when a connectorId changes, clear timeout if (timeoutIdRef.current) clearTimeout(timeoutIdRef.current); }; @@ -110,7 +120,6 @@ export const usePollApi = ({ if (connectorId == null || connectorId === '') { throw new Error('Invalid connector id'); } - if (timeoutIdRef.current) clearTimeout(timeoutIdRef.current); const rawResponse = await http.fetch( `/internal/elastic_assistant/attack_discovery/cancel/${connectorId}`, { @@ -138,6 +147,11 @@ export const usePollApi = ({ if (connectorId == null || connectorId === '') { throw new Error('Invalid connector id'); } + // edge case - clearTimeout does not always work in time + // so we need to check if the connectorId has changed + if (connectorId !== connectorIdRef.current) { + return; + } // call the internal API to generate attack discoveries: const rawResponse = await http.fetch( `/internal/elastic_assistant/attack_discovery/${connectorId}`, @@ -151,12 +165,34 @@ export const usePollApi = ({ if (!parsedResponse.success) { throw new Error('Failed to parse the attack discovery GET response'); } - handleResponse(parsedResponse.data.data ?? null); - if (parsedResponse?.data?.data?.status === attackDiscoveryStatus.running) { - // poll every 3 seconds if attack discovery is running + // ensure component did not unmount before setting state + if (connectorIdRef.current) { + handleResponse(parsedResponse.data.data ?? null); + const allStats = parsedResponse.data.stats.reduce( + (acc, ad) => { + return { + ...acc, + newConnectorResultsCount: + !ad.hasViewed && (ad.status === 'succeeded' || ad.status === 'failed') + ? acc.newConnectorResultsCount + 1 + : acc.newConnectorResultsCount, + newDiscoveriesCount: + !ad.hasViewed && ad.status === 'succeeded' + ? acc.newDiscoveriesCount + ad.count + : acc.newDiscoveriesCount, + }; + }, + { + newDiscoveriesCount: 0, + newConnectorResultsCount: 0, + statsPerConnector: parsedResponse.data.stats, + } + ); + setStats(allStats); + // poll every 5 seconds, regardless if current connector is running. Need stats object for connector dropdown stats timeoutIdRef.current = setTimeout(() => { pollApi(); - }, 3000); + }, 5000); } } catch (error) { setStatus(null); @@ -169,7 +205,7 @@ export const usePollApi = ({ } }, [connectorId, handleResponse, http, toasts]); - return { cancelAttackDiscovery, didInitialFetch, status, data, pollApi }; + return { cancelAttackDiscovery, didInitialFetch, status, data, pollApi, stats, setStatus }; }; export const attackDiscoveryStatus: { [k: string]: AttackDiscoveryStatus } = { diff --git a/x-pack/plugins/security_solution/public/attack_discovery/mock/mock_use_attack_discovery.ts b/x-pack/plugins/security_solution/public/attack_discovery/mock/mock_use_attack_discovery.ts index 4f8be970f40a1..6c703d799d405 100644 --- a/x-pack/plugins/security_solution/public/attack_discovery/mock/mock_use_attack_discovery.ts +++ b/x-pack/plugins/security_solution/public/attack_discovery/mock/mock_use_attack_discovery.ts @@ -13,6 +13,7 @@ export const getMockUseAttackDiscoveriesWithCachedAttackDiscoveries = ( alertsContextCount: 20, approximateFutureTime: null, isLoadingPost: false, + stats: null, didInitialFetch: true, failureReason: null, generationIntervals: [ @@ -189,6 +190,7 @@ export const getMockUseAttackDiscoveriesWithNoAttackDiscoveriesLoading = ( generationIntervals: undefined, attackDiscoveries: [], isLoadingPost: false, + stats: null, didInitialFetch: true, failureReason: null, lastUpdated: null, diff --git a/x-pack/plugins/security_solution/public/attack_discovery/pages/header/index.test.tsx b/x-pack/plugins/security_solution/public/attack_discovery/pages/header/index.test.tsx index 18dddaea3abdc..938da7f930d51 100644 --- a/x-pack/plugins/security_solution/public/attack_discovery/pages/header/index.test.tsx +++ b/x-pack/plugins/security_solution/public/attack_discovery/pages/header/index.test.tsx @@ -26,6 +26,7 @@ describe('Header', () => { render(
{ render(
{ render(
{ render(
{ render(
{ render(
{ render(
void; onCancel: () => void; onConnectorIdSelected: (connectorId: string) => void; + stats: AttackDiscoveryStats | null; } const HeaderComponent: React.FC = ({ @@ -33,6 +36,7 @@ const HeaderComponent: React.FC = ({ onGenerate, onConnectorIdSelected, onCancel, + stats, }) => { const isFlyoutMode = false; // always false for attack discovery const { hasAssistantPrivilege } = useAssistantAvailability(); @@ -67,7 +71,6 @@ const HeaderComponent: React.FC = ({ }, [isLoading, handleCancel, onGenerate] ); - return ( = ({ data-test-subj="header" gutterSize="none" > + {connectorsAreConfigured && ( = ({ onConnectorSelected={noop} onConnectorIdSelected={onConnectorIdSelected} selectedConnectorId={connectorId} + stats={stats} /> )} diff --git a/x-pack/plugins/security_solution/public/attack_discovery/pages/header/status_bell/index.tsx b/x-pack/plugins/security_solution/public/attack_discovery/pages/header/status_bell/index.tsx new file mode 100644 index 0000000000000..a8d7013d2343d --- /dev/null +++ b/x-pack/plugins/security_solution/public/attack_discovery/pages/header/status_bell/index.tsx @@ -0,0 +1,68 @@ +/* + * 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 { EuiFlexItem, EuiIconTip } from '@elastic/eui'; +import { css } from '@emotion/react'; +import type { AttackDiscoveryStats } from '@kbn/elastic-assistant-common'; +import { euiThemeVars } from '@kbn/ui-theme'; +import * as i18n from './translations'; + +interface Props { + stats: AttackDiscoveryStats | null; +} + +export const StatusBell: React.FC = ({ stats }) => { + if (stats && stats.newConnectorResultsCount > 0) { + return ( + + + + ); + } + return null; +}; diff --git a/x-pack/plugins/security_solution/public/attack_discovery/pages/header/status_bell/translations.ts b/x-pack/plugins/security_solution/public/attack_discovery/pages/header/status_bell/translations.ts new file mode 100644 index 0000000000000..b821634e9f746 --- /dev/null +++ b/x-pack/plugins/security_solution/public/attack_discovery/pages/header/status_bell/translations.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 { i18n } from '@kbn/i18n'; + +export const ATTACK_DISCOVERY_STATS_MESSAGE = ({ + newConnectorResultsCount, + newDiscoveriesCount, +}: { + newConnectorResultsCount: number; + newDiscoveriesCount: number; +}) => + i18n.translate('xpack.securitySolution.attackDiscovery.pages.pageTitle.statusConnectors', { + values: { newConnectorResultsCount, newDiscoveriesCount }, + defaultMessage: + 'You have {newDiscoveriesCount} new {newDiscoveriesCount, plural, =1 {discovery} other {discoveries}} across {newConnectorResultsCount} {newConnectorResultsCount, plural, =1 {connector} other {connectors}} to view.', + }); diff --git a/x-pack/plugins/security_solution/public/attack_discovery/pages/index.tsx b/x-pack/plugins/security_solution/public/attack_discovery/pages/index.tsx index f43360ec17666..a3784311983cb 100644 --- a/x-pack/plugins/security_solution/public/attack_discovery/pages/index.tsx +++ b/x-pack/plugins/security_solution/public/attack_discovery/pages/index.tsx @@ -80,6 +80,7 @@ const AttackDiscoveryPageComponent: React.FC = () => { isLoadingPost, lastUpdated, replacements, + stats, } = useAttackDiscovery({ connectorId, setLoadingConnectorId, @@ -172,6 +173,7 @@ const AttackDiscoveryPageComponent: React.FC = () => { onConnectorIdSelected={onConnectorIdSelected} onGenerate={onGenerate} onCancel={onCancel} + stats={stats} /> diff --git a/x-pack/plugins/security_solution/public/attack_discovery/use_attack_discovery/index.test.tsx b/x-pack/plugins/security_solution/public/attack_discovery/use_attack_discovery/index.test.tsx index a6ba1570c61ee..ca6f2c8ca02df 100644 --- a/x-pack/plugins/security_solution/public/attack_discovery/use_attack_discovery/index.test.tsx +++ b/x-pack/plugins/security_solution/public/attack_discovery/use_attack_discovery/index.test.tsx @@ -53,6 +53,7 @@ const mockAttackDiscoveryPost = { backingIndex: '.ds-.kibana-elastic-ai-assistant-attack-discovery-default-2024.06.12-000001', createdAt: '2024-06-13T17:50:59.409Z', updatedAt: '2024-06-17T15:00:39.680Z', + lastViewedAt: '2024-06-17T15:00:39.680Z', users: [ { id: 'u_mGBROF_q5bmFCATbLXAcCwKa0k8JvONAwSruelyKA5E_0', @@ -96,6 +97,7 @@ const mockAttackDiscoveries = [ }, ]; const setLoadingConnectorId = jest.fn(); +const setStatus = jest.fn(); describe('useAttackDiscovery', () => { const mockPollApi = { @@ -103,6 +105,9 @@ describe('useAttackDiscovery', () => { data: null, pollApi: jest.fn(), status: 'succeeded', + stats: null, + setStatus, + didInitialFetch: true, }; beforeEach(() => { @@ -144,9 +149,10 @@ describe('useAttackDiscovery', () => { version: '1', } ); - // called on mount, and after successful fetch - expect(mockPollApi.pollApi).toHaveBeenCalledTimes(2); - expect(result.current.isLoading).toBe(true); + // called on mount + expect(mockPollApi.pollApi).toHaveBeenCalledTimes(1); + expect(setStatus).toHaveBeenCalledWith('running'); + expect(result.current.isLoadingPost).toBe(false); }); it('handles fetch errors correctly', async () => { @@ -165,6 +171,7 @@ describe('useAttackDiscovery', () => { text: errorMessage, }); expect(result.current.isLoading).toBe(false); + expect(result.current.isLoadingPost).toBe(false); }); it('sets loading state based on poll status', async () => { diff --git a/x-pack/plugins/security_solution/public/attack_discovery/use_attack_discovery/index.tsx b/x-pack/plugins/security_solution/public/attack_discovery/use_attack_discovery/index.tsx index d517d5d0cd4ab..87f0f4d9a5089 100644 --- a/x-pack/plugins/security_solution/public/attack_discovery/use_attack_discovery/index.tsx +++ b/x-pack/plugins/security_solution/public/attack_discovery/use_attack_discovery/index.tsx @@ -10,6 +10,7 @@ import type { AttackDiscoveries, Replacements, GenerationInterval, + AttackDiscoveryStats, } from '@kbn/elastic-assistant-common'; import { AttackDiscoveryPostResponse, @@ -37,6 +38,7 @@ export interface UseAttackDiscovery { lastUpdated: Date | null; onCancel: () => Promise; replacements: Replacements; + stats: AttackDiscoveryStats | null; } export const useAttackDiscovery = ({ @@ -64,7 +66,9 @@ export const useAttackDiscovery = ({ data: pollData, pollApi, status: pollStatus, + setStatus: setPollStatus, didInitialFetch, + stats, } = usePollApi({ http, setApproximateFutureTime, toasts, connectorId }); // loading boilerplate: @@ -114,8 +118,9 @@ export const useAttackDiscovery = ({ setReplacements({}); setAttackDiscoveries([]); setGenerationIntervals([]); + setPollStatus(null); } - }, [pollApi, connectorId, setLoadingConnectorId]); + }, [pollApi, connectorId, setLoadingConnectorId, setPollStatus]); useEffect(() => { if (pollStatus === 'running') { @@ -152,7 +157,8 @@ export const useAttackDiscovery = ({ throw new Error(CONNECTOR_ERROR); } setLoadingConnectorId?.(connectorId ?? null); - setIsLoading(true); + // sets isLoading to true + setPollStatus('running'); setIsLoadingPost(true); setApproximateFutureTime(null); // call the internal API to generate attack discoveries: @@ -167,10 +173,6 @@ export const useAttackDiscovery = ({ if (!parsedResponse.success) { throw new Error('Failed to parse the response'); } - - if (parsedResponse.data.status === 'running') { - pollApi(); - } } catch (error) { setIsLoadingPost(false); setIsLoading(false); @@ -179,7 +181,7 @@ export const useAttackDiscovery = ({ text: getErrorToastText(error), }); } - }, [connectorId, http, pollApi, requestBody, setLoadingConnectorId, toasts]); + }, [connectorId, http, requestBody, setLoadingConnectorId, setPollStatus, toasts]); return { alertsContextCount, @@ -194,5 +196,6 @@ export const useAttackDiscovery = ({ lastUpdated, onCancel: cancelAttackDiscovery, replacements, + stats, }; }; diff --git a/x-pack/plugins/security_solution/public/common/components/control_columns/row_action/index.tsx b/x-pack/plugins/security_solution/public/common/components/control_columns/row_action/index.tsx index c586e887ce5e7..92ae4d094ed48 100644 --- a/x-pack/plugins/security_solution/public/common/components/control_columns/row_action/index.tsx +++ b/x-pack/plugins/security_solution/public/common/components/control_columns/row_action/index.tsx @@ -10,11 +10,15 @@ import React, { useCallback, useMemo } from 'react'; import { useDispatch } from 'react-redux'; import { useExpandableFlyoutApi } from '@kbn/expandable-flyout'; import { dataTableActions, TableId } from '@kbn/securitysolution-data-table'; +import { LeftPanelNotesTab } from '../../../../flyout/document_details/left'; import { useRouteSpy } from '../../../utils/route/use_route_spy'; import { useKibana } from '../../../lib/kibana'; import { timelineActions } from '../../../../timelines/store'; import { SecurityPageName } from '../../../../../common/constants'; -import { DocumentDetailsRightPanelKey } from '../../../../flyout/document_details/shared/constants/panel_keys'; +import { + DocumentDetailsLeftPanelKey, + DocumentDetailsRightPanelKey, +} from '../../../../flyout/document_details/shared/constants/panel_keys'; import type { SetEventsDeleted, SetEventsLoading, @@ -100,6 +104,9 @@ const RowActionComponent = ({ // TODO remove when https://github.com/elastic/security-team/issues/7462 is merged const expandableFlyoutDisabled = useIsExperimentalFeatureEnabled('expandableFlyoutDisabled'); + const securitySolutionNotesEnabled = useIsExperimentalFeatureEnabled( + 'securitySolutionNotesEnabled' + ); const showExpandableFlyout = pageName === SecurityPageName.attackDiscovery ? true : !expandableFlyoutDisabled; @@ -162,6 +169,32 @@ const RowActionComponent = ({ tabType, ]); + const toggleShowNotes = useCallback( + () => + openFlyout({ + right: { + id: DocumentDetailsRightPanelKey, + params: { + id: eventId, + indexName, + scopeId: tableId, + }, + }, + left: { + id: DocumentDetailsLeftPanelKey, + path: { + tab: LeftPanelNotesTab, + }, + params: { + id: eventId, + indexName, + scopeId: tableId, + }, + }, + }), + [eventId, indexName, openFlyout, tableId] + ); + const Action = controlColumn.rowCellRender; if (!timelineNonEcsData || !ecsData || !eventId) { @@ -191,6 +224,9 @@ const RowActionComponent = ({ showCheckboxes={showCheckboxes} tabType={tabType} timelineId={tableId} + toggleShowNotes={ + !expandableFlyoutDisabled && securitySolutionNotesEnabled ? toggleShowNotes : undefined + } width={width} setEventsLoading={setEventsLoading} setEventsDeleted={setEventsDeleted} diff --git a/x-pack/plugins/security_solution/public/common/components/endpoint/agents/agent_type_integration/agent_type_integration.test.tsx b/x-pack/plugins/security_solution/public/common/components/endpoint/agents/agent_type_integration/agent_type_integration.test.tsx new file mode 100644 index 0000000000000..87b144ad51d1c --- /dev/null +++ b/x-pack/plugins/security_solution/public/common/components/endpoint/agents/agent_type_integration/agent_type_integration.test.tsx @@ -0,0 +1,55 @@ +/* + * 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 { AppContextTestRender } from '../../../../mock/endpoint'; +import { createAppRootMockRenderer } from '../../../../mock/endpoint'; +import type { AgentTypeIntegrationProps } from './agent_type_integration'; +import { AgentTypeIntegration, INTEGRATION_SECTION_LABEL } from './agent_type_integration'; +import { getAgentTypeName } from '../../../../translations'; +import { RESPONSE_ACTION_AGENT_TYPE } from '../../../../../../common/endpoint/service/response_actions/constants'; + +describe('AgentTypeIntegration component', () => { + let props: AgentTypeIntegrationProps; + let render: () => ReturnType; + + describe.each(RESPONSE_ACTION_AGENT_TYPE)('for agent type: %s', (agentType) => { + beforeEach(() => { + const mockedContext = createAppRootMockRenderer(); + + props = { agentType, 'data-test-subj': 'test' }; + + render = () => { + return mockedContext.render(); + }; + }); + + it('should display agent type vendor name', () => { + const { getByTestId } = render(); + + expect(getByTestId('test-name')).toHaveTextContent(getAgentTypeName(agentType)); + }); + + it('should display agent type vendor icon', () => { + const { getByTestId } = render(); + + expect(getByTestId('test-vendorLogo')); + }); + + it('should display label', () => { + const { getByTestId } = render(); + + expect(getByTestId('test-label')).toHaveTextContent(INTEGRATION_SECTION_LABEL); + }); + + it('should include tooltip', () => { + const { getByTestId } = render(); + + expect(getByTestId('test-tooltipAnchor')); + }); + }); +}); diff --git a/x-pack/plugins/security_solution/public/common/components/endpoint/agents/agent_type_integration/agent_type_integration.tsx b/x-pack/plugins/security_solution/public/common/components/endpoint/agents/agent_type_integration/agent_type_integration.tsx new file mode 100644 index 0000000000000..e99c91fe05dbb --- /dev/null +++ b/x-pack/plugins/security_solution/public/common/components/endpoint/agents/agent_type_integration/agent_type_integration.tsx @@ -0,0 +1,78 @@ +/* + * 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, { memo } from 'react'; +import type { EuiTextProps } from '@elastic/eui'; +import { EuiFlexGroup, EuiFlexItem, EuiIconTip, EuiText } from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { i18n } from '@kbn/i18n'; +import { useTestIdGenerator } from '../../../../../management/hooks/use_test_id_generator'; +import { AgentTypeVendorLogo } from '../agent_type_vendor_logo'; +import { getAgentTypeName } from '../../../../translations'; +import type { ResponseActionAgentType } from '../../../../../../common/endpoint/service/response_actions/constants'; + +export const INTEGRATION_SECTION_LABEL = i18n.translate( + 'xpack.securitySolution.agentTypeIntegration.integrationSectionLabel', + { defaultMessage: 'Integration' } +); + +/** + * Shows the vendor Icon and name associated with an agent type + */ +export interface AgentTypeIntegrationProps { + agentType: ResponseActionAgentType; + textSize?: EuiTextProps['size']; + /** + * If content should be shown vertically (label and integration name on separate lines) or horizontally (next to each other). + * Defaults to `vertical` + */ + layout?: 'vertical' | 'horizontal'; + 'data-test-subj'?: string; +} + +export const AgentTypeIntegration = memo( + ({ agentType, textSize = 's', layout = 'vertical', 'data-test-subj': dataTestSubj }) => { + const testId = useTestIdGenerator(dataTestSubj); + + return ( + + + + {INTEGRATION_SECTION_LABEL}  + + } + position={layout === 'horizontal' ? 'bottom' : 'right'} + anchorProps={{ 'data-test-subj': testId('tooltipAnchor') }} + /> + + + + + + + + + + {getAgentTypeName(agentType)} + + + + + + ); + } +); +AgentTypeIntegration.displayName = 'AgentTypeIntegration'; diff --git a/x-pack/plugins/security_solution/public/common/components/endpoint/agents/agent_type_integration/index.ts b/x-pack/plugins/security_solution/public/common/components/endpoint/agents/agent_type_integration/index.ts new file mode 100644 index 0000000000000..d1dcc86cdecfc --- /dev/null +++ b/x-pack/plugins/security_solution/public/common/components/endpoint/agents/agent_type_integration/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 * from './agent_type_integration'; diff --git a/x-pack/plugins/security_solution/public/common/components/endpoint/agents/agent_type_vendor_logo/agent_type_vendor_logo.test.tsx b/x-pack/plugins/security_solution/public/common/components/endpoint/agents/agent_type_vendor_logo/agent_type_vendor_logo.test.tsx new file mode 100644 index 0000000000000..a2195004dfb03 --- /dev/null +++ b/x-pack/plugins/security_solution/public/common/components/endpoint/agents/agent_type_vendor_logo/agent_type_vendor_logo.test.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 { RESPONSE_ACTION_AGENT_TYPE } from '../../../../../../common/endpoint/service/response_actions/constants'; +import type { AppContextTestRender } from '../../../../mock/endpoint'; +import { createAppRootMockRenderer } from '../../../../mock/endpoint'; +import React from 'react'; +import type { AgentTypeVendorLogoProps } from './agent_type_vendor_logo'; +import { AgentTypeVendorLogo } from './agent_type_vendor_logo'; +import { waitFor } from '@testing-library/react'; +import { getAgentTypeName } from '../../../../translations'; + +describe('AgentTypeVendorLogo component', () => { + let props: AgentTypeVendorLogoProps; + let render: () => ReturnType; + + beforeEach(() => { + const mockedContext = createAppRootMockRenderer(); + + props = { agentType: 'endpoint', 'data-test-subj': 'test' }; + + render = () => { + return mockedContext.render(); + }; + }); + + it.each(RESPONSE_ACTION_AGENT_TYPE)('should display logo for: %s', async (agentType) => { + props.agentType = agentType; + const { getByTitle } = render(); + + await waitFor(() => { + expect(getByTitle(getAgentTypeName(agentType))); + }); + }); +}); diff --git a/x-pack/plugins/security_solution/public/common/components/endpoint/agents/agent_type_vendor_logo/agent_type_vendor_logo.tsx b/x-pack/plugins/security_solution/public/common/components/endpoint/agents/agent_type_vendor_logo/agent_type_vendor_logo.tsx new file mode 100644 index 0000000000000..2933e840288c0 --- /dev/null +++ b/x-pack/plugins/security_solution/public/common/components/endpoint/agents/agent_type_vendor_logo/agent_type_vendor_logo.tsx @@ -0,0 +1,64 @@ +/* + * 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, { memo, useEffect, useState } from 'react'; +import type { EuiIconProps } from '@elastic/eui'; +import { EuiIcon } from '@elastic/eui'; +import { useIsMounted } from '@kbn/securitysolution-hook-utils'; +import { getAgentTypeName } from '../../../../translations'; +import type { ResponseActionAgentType } from '../../../../../../common/endpoint/service/response_actions/constants'; + +const fetchSentinelOneLogoSvg = (): Promise => + import('./images/sentinelone_logo.svg').then((response) => response.default); +const fetchCrowdstrikeLogoSvg = (): Promise => + import('./images/crowdstrike_logo.svg').then((response) => response.default); + +export interface AgentTypeVendorLogoProps + extends Pick { + agentType: ResponseActionAgentType; +} + +export const AgentTypeVendorLogo = memo( + ({ agentType, ...otherIconProps }) => { + const isMounted = useIsMounted(); + const [iconType, setIconType] = useState('empty'); + + useEffect(() => { + if (isMounted()) { + const setSvgToState = (svgContent: string) => { + if (isMounted()) { + setIconType(svgContent); + } + }; + + switch (agentType) { + case 'endpoint': + setIconType('logoSecurity'); + break; + + case 'sentinel_one': + fetchSentinelOneLogoSvg().then(setSvgToState); + break; + + case 'crowdstrike': + fetchCrowdstrikeLogoSvg().then(setSvgToState); + break; + } + } + }, [agentType, isMounted]); + + return ( + + ); + } +); +AgentTypeVendorLogo.displayName = 'AgentTypeVendorLogo'; diff --git a/x-pack/plugins/security_solution/public/common/components/endpoint/agents/agent_type_vendor_logo/images/crowdstrike_logo.svg b/x-pack/plugins/security_solution/public/common/components/endpoint/agents/agent_type_vendor_logo/images/crowdstrike_logo.svg new file mode 100644 index 0000000000000..f877656d6f0b0 --- /dev/null +++ b/x-pack/plugins/security_solution/public/common/components/endpoint/agents/agent_type_vendor_logo/images/crowdstrike_logo.svg @@ -0,0 +1 @@ + diff --git a/x-pack/plugins/security_solution/public/common/components/endpoint/agents/agent_type_vendor_logo/images/sentinelone_logo.svg b/x-pack/plugins/security_solution/public/common/components/endpoint/agents/agent_type_vendor_logo/images/sentinelone_logo.svg new file mode 100644 index 0000000000000..7e48c6ca17f03 --- /dev/null +++ b/x-pack/plugins/security_solution/public/common/components/endpoint/agents/agent_type_vendor_logo/images/sentinelone_logo.svg @@ -0,0 +1 @@ + diff --git a/x-pack/plugins/security_solution/public/common/components/endpoint/agents/agent_type_vendor_logo/index.ts b/x-pack/plugins/security_solution/public/common/components/endpoint/agents/agent_type_vendor_logo/index.ts new file mode 100644 index 0000000000000..41cfcdb56f3fb --- /dev/null +++ b/x-pack/plugins/security_solution/public/common/components/endpoint/agents/agent_type_vendor_logo/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 * from './agent_type_vendor_logo'; diff --git a/x-pack/plugins/security_solution/public/common/components/events_viewer/use_timelines_events.tsx b/x-pack/plugins/security_solution/public/common/components/events_viewer/use_timelines_events.tsx index 3eb6519a041c8..dfaf17f474c74 100644 --- a/x-pack/plugins/security_solution/public/common/components/events_viewer/use_timelines_events.tsx +++ b/x-pack/plugins/security_solution/public/common/components/events_viewer/use_timelines_events.tsx @@ -29,6 +29,7 @@ import type { TimelineStrategyResponseType, } from '@kbn/timelines-plugin/common/search_strategy'; import { dataTableActions, Direction, TableId } from '@kbn/securitysolution-data-table'; +import { fetchNotesByDocumentIds } from '../../../notes/store/notes.slice'; import type { RunTimeMappings } from '../../../sourcerer/store/model'; import { TimelineEventsQueries } from '../../../../common/search_strategy'; import type { KueryFilterQueryKind } from '../../../../common/types'; @@ -434,6 +435,8 @@ export const useTimelineEvents = ({ timerangeKind, data, }: UseTimelineEventsProps): [boolean, TimelineArgs] => { + const dispatch = useDispatch(); + const [loading, timelineResponse, timelineSearchHandler] = useTimelineEventsHandler({ alertConsumers, dataViewId, @@ -458,7 +461,11 @@ export const useTimelineEvents = ({ useEffect(() => { if (!timelineSearchHandler) return; timelineSearchHandler(); - }, [timelineSearchHandler]); + + // fetch notes for the events + const events = timelineResponse.events.map((event: TimelineItem) => event._id); + dispatch(fetchNotesByDocumentIds({ documentIds: events })); + }, [dispatch, timelineResponse.events, timelineSearchHandler]); return [loading, timelineResponse]; }; diff --git a/x-pack/plugins/security_solution/public/common/components/header_actions/actions.test.tsx b/x-pack/plugins/security_solution/public/common/components/header_actions/actions.test.tsx index d31564e8bd1af..a305c41cdc808 100644 --- a/x-pack/plugins/security_solution/public/common/components/header_actions/actions.test.tsx +++ b/x-pack/plugins/security_solution/public/common/components/header_actions/actions.test.tsx @@ -98,6 +98,7 @@ const defaultProps = { checked: false, columnId: '', columnValues: 'abc def', + disableExpandAction: false, data: mockTimelineData[0].data, ecsData: mockTimelineData[0].ecs, eventId: 'abc', @@ -428,4 +429,16 @@ describe('Actions', () => { expect(wrapper.find('[data-test-subj="session-view-button"]').exists()).toEqual(true); }); }); + + describe('Expand action', () => { + test('should not be visible if disableExpandAction is true', () => { + const wrapper = mount( + + + + ); + + expect(wrapper.find('[data-test-subj="expand-event"]').exists()).toBeFalsy(); + }); + }); }); diff --git a/x-pack/plugins/security_solution/public/common/components/header_actions/actions.tsx b/x-pack/plugins/security_solution/public/common/components/header_actions/actions.tsx index 16fabb97fb464..7d346d4fd2c7b 100644 --- a/x-pack/plugins/security_solution/public/common/components/header_actions/actions.tsx +++ b/x-pack/plugins/security_solution/public/common/components/header_actions/actions.tsx @@ -6,11 +6,13 @@ */ import React, { useCallback, useMemo } from 'react'; -import { useDispatch } from 'react-redux'; +import { useDispatch, useSelector } from 'react-redux'; import { EuiButtonIcon, EuiToolTip } from '@elastic/eui'; import styled from 'styled-components'; import { TimelineTabs, TableId } from '@kbn/securitysolution-data-table'; +import { selectNotesByDocumentId } from '../../../notes/store/notes.slice'; +import type { State } from '../../store'; import { selectTimelineById } from '../../../timelines/store/selectors'; import { eventHasNotes, @@ -50,6 +52,7 @@ const ActionsContainer = styled.div` const ActionsComponent: React.FC = ({ ariaRowindex, columnValues, + disableExpandAction = false, ecsData, eventId, eventIdToNoteIds, @@ -63,9 +66,11 @@ const ActionsComponent: React.FC = ({ refetch, }) => { const dispatch = useDispatch(); - const unifiedComponentsInTimelineEnabled = useIsExperimentalFeatureEnabled( - 'unifiedComponentsInTimelineEnabled' + const securitySolutionNotesEnabled = useIsExperimentalFeatureEnabled( + 'securitySolutionNotesEnabled' ); + const expandableFlyoutDisabled = useIsExperimentalFeatureEnabled('expandableFlyoutDisabled'); + const emptyNotes: string[] = []; const { timelineType } = useShallowEqualSelector((state) => isTimelineScope(timelineId) ? selectTimelineById(state, timelineId) : timelineDefaults @@ -105,6 +110,8 @@ const ActionsComponent: React.FC = ({ ); }, [ecsData, eventType]); + const notes = useSelector((state: State) => selectNotesByDocumentId(state, eventId)); + const isDisabled = !useIsInvestigateInResolverActionEnabled(ecsData); const { setGlobalFullScreen } = useGlobalFullScreen(); const { setTimelineFullScreen } = useTimelineFullScreen(); @@ -212,15 +219,11 @@ const ActionsComponent: React.FC = ({ } onEventDetailsPanelOpened(); }, [activeStep, incrementStep, isTourAnchor, isTourShown, onEventDetailsPanelOpened]); - const showExpandEvent = useMemo( - () => !unifiedComponentsInTimelineEnabled || isEventViewer, - [isEventViewer, unifiedComponentsInTimelineEnabled] - ); return ( <> - {showExpandEvent && ( + {!disableExpandAction && ( = ({ /> )} - {!isEventViewer && toggleShowNotes && ( + {securitySolutionNotesEnabled && !expandableFlyoutDisabled && toggleShowNotes && ( <> = ({ /> )} + {(!securitySolutionNotesEnabled || expandableFlyoutDisabled) && + !isEventViewer && + toggleShowNotes && ( + <> + + + + )} void; eventId?: string; + /** + * Number of notes associated with the event + */ + notesCount?: number; } const AddEventNoteActionComponent: React.FC = ({ @@ -26,9 +30,17 @@ const AddEventNoteActionComponent: React.FC = ({ timelineType, toggleShowNotes, eventId, + notesCount, }) => { const { kibanaSecuritySolutionsPrivileges } = useUserPrivileges(); + const tooltip = + notesCount && notesCount > 0 + ? i18n.NOTE_COUNT_TOOLTIP(notesCount) + : timelineType === TimelineType.template + ? i18n.NOTES_DISABLE_TOOLTIP + : i18n.NOTES_TOOLTIP; + return ( = ({ showNotes={showNotes} timelineType={timelineType} toggleShowNotes={toggleShowNotes} - toolTip={ - timelineType === TimelineType.template ? i18n.NOTES_DISABLE_TOOLTIP : i18n.NOTES_TOOLTIP - } + toolTip={tooltip} eventId={eventId} + notesCount={notesCount} /> ); diff --git a/x-pack/plugins/security_solution/public/common/components/header_actions/translations.ts b/x-pack/plugins/security_solution/public/common/components/header_actions/translations.ts index 8cb4bbb51e1b0..4db668cc78d16 100644 --- a/x-pack/plugins/security_solution/public/common/components/header_actions/translations.ts +++ b/x-pack/plugins/security_solution/public/common/components/header_actions/translations.ts @@ -21,6 +21,12 @@ export const NOTES_DISABLE_TOOLTIP = i18n.translate( } ); +export const NOTE_COUNT_TOOLTIP = (notesCount: number) => + i18n.translate('xpack.securitySolution.notes.noteCountTooltip', { + defaultMessage: '{notesCount} {notesCount, plural, one { note } other { notes }}', + values: { notesCount }, + }); + export const NOTES_TOOLTIP = i18n.translate( 'xpack.securitySolution.timeline.body.notes.addNoteTooltip', { diff --git a/x-pack/plugins/security_solution/public/common/components/import_data_modal/__snapshots__/index.test.tsx.snap b/x-pack/plugins/security_solution/public/common/components/import_data_modal/__snapshots__/index.test.tsx.snap index 599249231c93a..1fe2bda944e0a 100644 --- a/x-pack/plugins/security_solution/public/common/components/import_data_modal/__snapshots__/index.test.tsx.snap +++ b/x-pack/plugins/security_solution/public/common/components/import_data_modal/__snapshots__/index.test.tsx.snap @@ -60,36 +60,32 @@ Object { class="euiSpacer euiSpacer--s emotion-euiSpacer-s" />
+
- -
-
+ subtitle +
+
- -
+ subtitle + + -
+ +
+
- -
+ subtitle + + -
+ +
) : ( diff --git a/x-pack/plugins/security_solution/public/common/containers/alerts/use_alert_prevalence_from_process_tree.ts b/x-pack/plugins/security_solution/public/common/containers/alerts/use_alert_prevalence_from_process_tree.ts index a723cea93433a..4e6747384fe34 100644 --- a/x-pack/plugins/security_solution/public/common/containers/alerts/use_alert_prevalence_from_process_tree.ts +++ b/x-pack/plugins/security_solution/public/common/containers/alerts/use_alert_prevalence_from_process_tree.ts @@ -22,6 +22,7 @@ export interface StatsNode { }; }; } + interface UserAlertPrevalenceFromProcessTreeResult { loading: boolean; alertIds: undefined | string[]; @@ -39,6 +40,7 @@ interface EntityResponse { id: string; name: string; schema: object; + agentId: string; } interface UseAlertPrevalenceFromProcessTree { @@ -73,16 +75,18 @@ function useAlertDocumentAnalyzerSchema({ documentId, indices }: UseAlertDocumen error: false, id: null, schema: null, + agentId: null, }; } else if (query.data && query.data.length > 0) { const { - data: [{ schema, id }], + data: [{ schema, id, agentId }], } = query; return { loading: false, error: false, id, schema, + agentId, }; } else { return { @@ -90,6 +94,7 @@ function useAlertDocumentAnalyzerSchema({ documentId, indices }: UseAlertDocumen error: true, id: null, schema: null, + agentId: null, }; } } @@ -103,7 +108,7 @@ export function useAlertPrevalenceFromProcessTree({ const { selectedPatterns } = useTimelineDataFilters(isActiveTimeline); const alertAndOriginalIndices = [...new Set(selectedPatterns.concat(indices))]; - const { loading, id, schema } = useAlertDocumentAnalyzerSchema({ + const { loading, id, schema, agentId } = useAlertDocumentAnalyzerSchema({ documentId, indices: alertAndOriginalIndices, }); @@ -118,6 +123,7 @@ export function useAlertPrevalenceFromProcessTree({ indexPatterns: alertAndOriginalIndices, nodes: [id], includeHits: true, + agentId, }), }); }, diff --git a/x-pack/plugins/security_solution/public/common/lib/apm/user_actions.ts b/x-pack/plugins/security_solution/public/common/lib/apm/user_actions.ts index 7293c8146fd18..81ac26c8d32f5 100644 --- a/x-pack/plugins/security_solution/public/common/lib/apm/user_actions.ts +++ b/x-pack/plugins/security_solution/public/common/lib/apm/user_actions.ts @@ -13,7 +13,7 @@ export const SINGLE_RULE_ACTIONS = { DUPLICATE: `${APP_UI_ID} singleRuleActions duplicate`, EXPORT: `${APP_UI_ID} singleRuleActions export`, DELETE: `${APP_UI_ID} singleRuleActions delete`, - MANUAL_RULE_RUN: `${APP_UI_ID} singleRuleActions manual run`, + MANUAL_RULE_RUN: `${APP_UI_ID} singleRuleActions manual rule run`, PREVIEW: `${APP_UI_ID} singleRuleActions preview`, SAVE: `${APP_UI_ID} singleRuleActions save`, }; @@ -23,6 +23,7 @@ export const BULK_RULE_ACTIONS = { DISABLE: `${APP_UI_ID} bulkRuleActions disable`, DUPLICATE: `${APP_UI_ID} bulkRuleActions duplicate`, EXPORT: `${APP_UI_ID} bulkRuleActions export`, + MANUAL_RULE_RUN: `${APP_UI_ID} bulkRuleActions manual rule run`, DELETE: `${APP_UI_ID} bulkRuleActions delete`, EDIT: `${APP_UI_ID} bulkRuleActions edit`, }; diff --git a/x-pack/plugins/security_solution/public/common/lib/endpoint/utils/is_agent_type_and_action_supported.test.ts b/x-pack/plugins/security_solution/public/common/lib/endpoint/utils/is_agent_type_and_action_supported.test.ts index 79294c165ab22..b414bf328995e 100644 --- a/x-pack/plugins/security_solution/public/common/lib/endpoint/utils/is_agent_type_and_action_supported.test.ts +++ b/x-pack/plugins/security_solution/public/common/lib/endpoint/utils/is_agent_type_and_action_supported.test.ts @@ -30,6 +30,9 @@ describe('isAgentTypeAndActionSupported() util', () => { const disableS1GetFileFeature = () => { enableFeatures({ responseActionsSentinelOneGetFileEnabled: false }); }; + const disableCSIsolateFeature = () => { + enableFeatures({ responseActionsCrowdstrikeManualHostIsolationEnabled: false }); + }; const resetFeatures = (): void => { (ExperimentalFeaturesService.get as jest.Mock).mockReturnValue({ @@ -56,7 +59,7 @@ describe('isAgentTypeAndActionSupported() util', () => { ${'sentinel_one'} | ${'get-file'} | ${undefined} | ${false} | ${disableS1GetFileFeature} ${'crowdstrike'} | ${undefined} | ${undefined} | ${true} | ${undefined} ${'crowdstrike'} | ${'isolate'} | ${'manual'} | ${true} | ${undefined} - ${'crowdstrike'} | ${'isolate'} | ${undefined} | ${false} | ${resetFeatures} + ${'crowdstrike'} | ${'isolate'} | ${undefined} | ${false} | ${disableCSIsolateFeature} `( 'should return `$expectedValue` for $agentType $actionName ($actionType)', ({ diff --git a/x-pack/plugins/security_solution/public/common/mock/global_state.ts b/x-pack/plugins/security_solution/public/common/mock/global_state.ts index 4365a30c2f07d..6aa38d25806a8 100644 --- a/x-pack/plugins/security_solution/public/common/mock/global_state.ts +++ b/x-pack/plugins/security_solution/public/common/mock/global_state.ts @@ -519,12 +519,12 @@ export const mockGlobalState: State = { }, }, status: { - fetchNotesByDocumentId: ReqStatus.Idle, + fetchNotesByDocumentIds: ReqStatus.Idle, createNote: ReqStatus.Idle, deleteNote: ReqStatus.Idle, }, error: { - fetchNotesByDocumentId: null, + fetchNotesByDocumentIds: null, createNote: null, deleteNote: null, }, diff --git a/x-pack/plugins/security_solution/public/common/mock/mock_assistant_provider.tsx b/x-pack/plugins/security_solution/public/common/mock/mock_assistant_provider.tsx index 63ed6b5cac7f6..b9a83fd280b10 100644 --- a/x-pack/plugins/security_solution/public/common/mock/mock_assistant_provider.tsx +++ b/x-pack/plugins/security_solution/public/common/mock/mock_assistant_provider.tsx @@ -27,6 +27,7 @@ export const MockAssistantProviderComponent: React.FC = ({ }) => { const actionTypeRegistry = actionTypeRegistryMock.create(); const mockHttp = httpServiceMock.createStartContract({ basePath: '/test' }); + const mockNavigateToApp = jest.fn(); const defaultAssistantAvailability: AssistantAvailability = { hasAssistantPrivilege: false, hasConnectorsAllPrivilege: true, @@ -47,6 +48,7 @@ export const MockAssistantProviderComponent: React.FC = ({ }} getComments={jest.fn(() => [])} http={mockHttp} + navigateToApp={mockNavigateToApp} baseConversations={BASE_SECURITY_CONVERSATIONS} > {children} diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_gaps/components/manual_rule_run/index.test.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_gaps/components/manual_rule_run/index.test.tsx index c3efb2d0d89ae..8d3b02b78108f 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_gaps/components/manual_rule_run/index.test.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_gaps/components/manual_rule_run/index.test.tsx @@ -8,7 +8,8 @@ import React from 'react'; import moment from 'moment'; import { fireEvent, render, screen } from '@testing-library/react'; -import { ManualRuleRunModal, MAX_SCHEDULE_BACKFILL_LOOKBACK_WINDOW_DAYS } from '.'; +import { ManualRuleRunModal } from '.'; +import { MAX_MANUAL_RULE_RUN_LOOKBACK_WINDOW_DAYS } from '../../../../../common/constants'; const convertToDatePickerFormat = (date: moment.Moment) => { return `${date.format('L')} ${date.format('LT')}`; @@ -67,7 +68,7 @@ describe('ManualRuleRunModal', () => { expect(confirmModalConfirmButton).toBeEnabled(); const now = moment(); - const startDate = now.clone().subtract(MAX_SCHEDULE_BACKFILL_LOOKBACK_WINDOW_DAYS, 'd'); + const startDate = now.clone().subtract(MAX_MANUAL_RULE_RUN_LOOKBACK_WINDOW_DAYS, 'd'); fireEvent.change(startDatePicker, { target: { diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_gaps/components/manual_rule_run/index.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_gaps/components/manual_rule_run/index.tsx index 37a4762254329..0f11ec3888603 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_gaps/components/manual_rule_run/index.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_gaps/components/manual_rule_run/index.tsx @@ -19,14 +19,13 @@ import { } from '@elastic/eui'; import moment from 'moment'; import React, { useCallback, useMemo, useState } from 'react'; +import { MAX_MANUAL_RULE_RUN_LOOKBACK_WINDOW_DAYS } from '../../../../../common/constants'; import { TECHNICAL_PREVIEW, TECHNICAL_PREVIEW_TOOLTIP } from '../../../../common/translations'; import * as i18n from './translations'; const MANUAL_RULE_RUN_MODAL_WIDTH = 600; -export const MAX_SCHEDULE_BACKFILL_LOOKBACK_WINDOW_DAYS = 90; - interface ManualRuleRunModalProps { onCancel: () => void; onConfirm: (timeRange: { startDate: moment.Moment; endDate: moment.Moment }) => void; @@ -43,7 +42,7 @@ const ManualRuleRunModalComponent = ({ onCancel, onConfirm }: ManualRuleRunModal const isStartDateOutOfRange = now .clone() - .subtract(MAX_SCHEDULE_BACKFILL_LOOKBACK_WINDOW_DAYS, 'd') + .subtract(MAX_MANUAL_RULE_RUN_LOOKBACK_WINDOW_DAYS, 'd') .isAfter(startDate); const isEndDateInFuture = endDate.isAfter(now); const isInvalidTimeRange = startDate.isSameOrAfter(endDate); @@ -51,7 +50,7 @@ const ManualRuleRunModalComponent = ({ onCancel, onConfirm }: ManualRuleRunModal const errorMessage = useMemo(() => { if (isStartDateOutOfRange) { return i18n.MANUAL_RULE_RUN_START_DATE_OUT_OF_RANGE_ERROR( - MAX_SCHEDULE_BACKFILL_LOOKBACK_WINDOW_DAYS + MAX_MANUAL_RULE_RUN_LOOKBACK_WINDOW_DAYS ); } if (isEndDateInFuture) { diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/api.test.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/api.test.ts index 226d0a2bd16ed..4b912c4a9a2fc 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/api.test.ts +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/api.test.ts @@ -767,6 +767,33 @@ describe('Detections Rules API', () => { ); }); + test('passes manual rule run payload', async () => { + const startDate = new Date().toISOString(); + const endDate = new Date().toISOString(); + await performBulkAction({ + bulkAction: { + type: BulkActionTypeEnum.run, + ids: ['ruleId1'], + runPayload: { start_date: startDate, end_date: endDate }, + }, + }); + + expect(fetchMock).toHaveBeenCalledWith( + '/api/detection_engine/rules/_bulk_action', + expect.objectContaining({ + method: 'POST', + body: JSON.stringify({ + action: 'run', + ids: ['ruleId1'], + run: { start_date: startDate, end_date: endDate }, + }), + query: { + dry_run: false, + }, + }) + ); + }); + test('executes dry run', async () => { await performBulkAction({ bulkAction: { type: BulkActionTypeEnum.disable, query: 'some query' }, diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/api.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/api.ts index 70f0a56ef74cd..ad82a33559bbc 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/api.ts +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/api.ts @@ -30,6 +30,7 @@ import type { BulkDuplicateRules, BulkActionEditPayload, BulkActionType, + BulkManualRuleRun, CoverageOverviewResponse, GetRuleManagementFiltersResponse, } from '../../../../common/api/detection_engine/rule_management'; @@ -330,7 +331,10 @@ export type QueryOrIds = { query: string; ids?: undefined } | { query?: undefine type PlainBulkAction = { type: Exclude< BulkActionType, - BulkActionTypeEnum['edit'] | BulkActionTypeEnum['export'] | BulkActionTypeEnum['duplicate'] + | BulkActionTypeEnum['edit'] + | BulkActionTypeEnum['export'] + | BulkActionTypeEnum['duplicate'] + | BulkActionTypeEnum['run'] >; } & QueryOrIds; @@ -344,7 +348,16 @@ type DuplicateBulkAction = { duplicatePayload?: BulkDuplicateRules['duplicate']; } & QueryOrIds; -export type BulkAction = PlainBulkAction | EditBulkAction | DuplicateBulkAction; +export type ManualRuleRunBulkAction = { + type: BulkActionTypeEnum['run']; + runPayload: BulkManualRuleRun['run']; +} & QueryOrIds; + +export type BulkAction = + | PlainBulkAction + | EditBulkAction + | DuplicateBulkAction + | ManualRuleRunBulkAction; export interface PerformBulkActionProps { bulkAction: BulkAction; @@ -370,6 +383,7 @@ export async function performBulkAction({ edit: bulkAction.type === BulkActionTypeEnum.edit ? bulkAction.editPayload : undefined, duplicate: bulkAction.type === BulkActionTypeEnum.duplicate ? bulkAction.duplicatePayload : undefined, + run: bulkAction.type === BulkActionTypeEnum.run ? bulkAction.runPayload : undefined, }; return KibanaServices.get().http.fetch(DETECTION_ENGINE_RULES_BULK_ACTION, { diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/logic/bulk_actions/translations.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_management/logic/bulk_actions/translations.ts index 99bad79536bd7..ad68e31cbeb05 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/logic/bulk_actions/translations.ts +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/logic/bulk_actions/translations.ts @@ -34,6 +34,9 @@ export function summarizeBulkSuccess(action: BulkActionType): string { case BulkActionTypeEnum.disable: return i18n.RULES_BULK_DISABLE_SUCCESS; + case BulkActionTypeEnum.run: + return i18n.RULES_BULK_MANUAL_RULE_RUN_SUCCESS; + case BulkActionTypeEnum.edit: return i18n.RULES_BULK_EDIT_SUCCESS; } @@ -58,6 +61,9 @@ export function explainBulkSuccess( case BulkActionTypeEnum.disable: return i18n.RULES_BULK_DISABLE_SUCCESS_DESCRIPTION(summary.succeeded); + + case BulkActionTypeEnum.run: + return i18n.RULES_BULK_MANUAL_RULE_RUN_SUCCESS_DESCRIPTION(summary.succeeded); } } @@ -101,6 +107,9 @@ export function summarizeBulkError(action: BulkActionType): string { case BulkActionTypeEnum.disable: return i18n.RULES_BULK_DISABLE_FAILURE; + case BulkActionTypeEnum.run: + return i18n.RULES_BULK_MANUAL_RULE_RUN_FAILURE; + case BulkActionTypeEnum.edit: return i18n.RULES_BULK_EDIT_FAILURE; } @@ -130,6 +139,9 @@ export function explainBulkError(action: BulkActionType, error: HTTPError): stri case BulkActionTypeEnum.disable: return i18n.RULES_BULK_DISABLE_FAILURE_DESCRIPTION(summary.failed); + case BulkActionTypeEnum.run: + return i18n.RULES_BULK_MANUAL_RULE_RUN_FAILURE_DESCRIPTION(summary.failed); + case BulkActionTypeEnum.edit: return i18n.RULES_BULK_EDIT_FAILURE_DESCRIPTION(summary.failed, summary.skipped); } diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/bulk_actions/bulk_action_dry_run_confirmation.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/bulk_actions/bulk_action_dry_run_confirmation.tsx index 23bb9106d62cf..023b5d118eed4 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/bulk_actions/bulk_action_dry_run_confirmation.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/bulk_actions/bulk_action_dry_run_confirmation.tsx @@ -24,6 +24,8 @@ const getActionRejectedTitle = ( return i18n.BULK_EDIT_CONFIRMATION_REJECTED_TITLE(failedRulesCount); case BulkActionTypeEnum.export: return i18n.BULK_EXPORT_CONFIRMATION_REJECTED_TITLE(failedRulesCount); + case BulkActionTypeEnum.run: + return i18n.BULK_MANUAL_RULE_RUN_CONFIRMATION_REJECTED_TITLE(failedRulesCount); default: assertUnreachable(bulkAction); } @@ -38,6 +40,8 @@ const getActionConfirmLabel = ( return i18n.BULK_EDIT_CONFIRMATION_CONFIRM(succeededRulesCount); case BulkActionTypeEnum.export: return i18n.BULK_EXPORT_CONFIRMATION_CONFIRM(succeededRulesCount); + case BulkActionTypeEnum.run: + return i18n.BULK_MANUAL_RULE_RUN_CONFIRMATION_CONFIRM(succeededRulesCount); default: assertUnreachable(bulkAction); } diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/bulk_actions/bulk_action_rule_errors_list.test.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/bulk_actions/bulk_action_rule_errors_list.test.tsx index c0112f13b776a..7354bd306d6ea 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/bulk_actions/bulk_action_rule_errors_list.test.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/bulk_actions/bulk_action_rule_errors_list.test.tsx @@ -92,4 +92,31 @@ describe('Component BulkEditRuleErrorsList', () => { expect(screen.getByText(value)).toBeInTheDocument(); }); + + test.each([ + [ + BulkActionsDryRunErrCode.MANUAL_RULE_RUN_FEATURE, + '2 rules (Manual rule run feature is disabled)', + ], + [ + BulkActionsDryRunErrCode.MANUAL_RULE_RUN_DISABLED_RULE, + '2 rules (Cannot schedule manual rule run for disabled rules)', + ], + ])('should render correct message for "%s" errorCode', (errorCode, value) => { + const ruleErrors: DryRunResult['ruleErrors'] = [ + { + message: 'test failure', + errorCode, + ruleIds: ['rule:1', 'rule:2'], + }, + ]; + render( + , + { + wrapper: Wrapper, + } + ); + + expect(screen.getByText(value)).toBeInTheDocument(); + }); }); diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/bulk_actions/bulk_action_rule_errors_list.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/bulk_actions/bulk_action_rule_errors_list.tsx index 907e67f658bc4..72e380a1a7d5a 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/bulk_actions/bulk_action_rule_errors_list.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/bulk_actions/bulk_action_rule_errors_list.tsx @@ -108,6 +108,45 @@ const BulkExportRuleErrorItem = ({ } }; +const BulkManualRuleRunErrorItem = ({ + errorCode, + message, + rulesCount, +}: BulkActionRuleErrorItemProps) => { + switch (errorCode) { + case BulkActionsDryRunErrCode.MANUAL_RULE_RUN_FEATURE: + return ( +
  • + +
  • + ); + case BulkActionsDryRunErrCode.MANUAL_RULE_RUN_DISABLED_RULE: + return ( +
  • + +
  • + ); + default: + return ( +
  • + +
  • + ); + } +}; + interface BulkActionRuleErrorsListProps { ruleErrors: DryRunResult['ruleErrors']; bulkAction: BulkActionForConfirmation; @@ -150,6 +189,15 @@ const BulkActionRuleErrorsListComponent = ({ /> ); + case BulkActionTypeEnum.run: + return ( + + ); + default: return null; } diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/bulk_actions/bulk_manual_rule_run_limit_error_modal.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/bulk_actions/bulk_manual_rule_run_limit_error_modal.tsx new file mode 100644 index 0000000000000..a2ae63b66a9ad --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/bulk_actions/bulk_manual_rule_run_limit_error_modal.tsx @@ -0,0 +1,50 @@ +/* + * 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 { + EuiButton, + EuiModal, + EuiModalBody, + EuiModalFooter, + EuiModalHeader, + EuiModalHeaderTitle, +} from '@elastic/eui'; + +import { MAX_MANUAL_RULE_RUN_BULK_SIZE } from '../../../../../../common/constants'; +import * as i18n from '../../../../../detections/pages/detection_engine/rules/translations'; + +interface BulkManualRuleRunRulesLimitErrorModalProps { + onClose: () => void; +} + +const BulkManualRuleRunLimitErrorModalComponent = ({ + onClose, +}: BulkManualRuleRunRulesLimitErrorModalProps) => { + // if the amount of selected rules is more than the limit, modal window the appropriate error will be displayed + return ( + + + {i18n.BULK_MANUAL_RULE_RUN_LIMIT_ERROR_TITLE} + + + {i18n.BULK_MANUAL_RULE_RUN_LIMIT_ERROR_MESSAGE(MAX_MANUAL_RULE_RUN_BULK_SIZE)} + + + + {i18n.BULK_MANUAL_RULE_RUN_LIMIT_ERROR_CLOSE_BUTTON} + + + + ); +}; + +export const BulkManualRuleRunLimitErrorModal = React.memo( + BulkManualRuleRunLimitErrorModalComponent +); + +BulkManualRuleRunLimitErrorModal.displayName = 'BulkManualRuleRunLimitErrorModal'; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/bulk_actions/types.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/bulk_actions/types.ts index 409ee722c6383..1203e7258a24d 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/bulk_actions/types.ts +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/bulk_actions/types.ts @@ -9,11 +9,15 @@ import type { BulkActionsDryRunErrCode } from '../../../../../../common/constant import type { BulkActionTypeEnum } from '../../../../../../common/api/detection_engine/rule_management'; /** - * Only 2 bulk actions are supported for for confirmation dry run modal: + * Only 3 bulk actions are supported for for confirmation dry run modal: * * export * * edit + * * manual rule run */ -export type BulkActionForConfirmation = BulkActionTypeEnum['export'] | BulkActionTypeEnum['edit']; +export type BulkActionForConfirmation = + | BulkActionTypeEnum['export'] + | BulkActionTypeEnum['edit'] + | BulkActionTypeEnum['run']; /** * transformed results of dry run diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/bulk_actions/use_bulk_actions.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/bulk_actions/use_bulk_actions.tsx index 70d522323a964..5ea5d3d456f15 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/bulk_actions/use_bulk_actions.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/bulk_actions/use_bulk_actions.tsx @@ -12,6 +12,8 @@ import type { Toast } from '@kbn/core/public'; import { toMountPoint } from '@kbn/react-kibana-mount'; import { euiThemeVars } from '@kbn/ui-theme'; import React, { useCallback } from 'react'; +import { MAX_MANUAL_RULE_RUN_BULK_SIZE } from '../../../../../../common/constants'; +import type { TimeRange } from '../../../../rule_gaps/types'; import { useIsExperimentalFeatureEnabled } from '../../../../../common/hooks/use_experimental_features'; import { useKibana } from '../../../../../common/lib/kibana'; import { convertRulesFilterToKQL } from '../../../../../../common/detection_engine/rule_management/rule_filtering'; @@ -53,6 +55,8 @@ interface UseBulkActionsArgs { action: BulkActionForConfirmation ) => Promise; showBulkDuplicateConfirmation: () => Promise; + showManualRuleRunConfirmation: () => Promise; + showManualRuleRunLimitError: () => void; completeBulkEditForm: ( bulkActionEditType: BulkActionEditType ) => Promise; @@ -64,6 +68,8 @@ export const useBulkActions = ({ confirmDeletion, showBulkActionConfirmation, showBulkDuplicateConfirmation, + showManualRuleRunConfirmation, + showManualRuleRunLimitError, completeBulkEditForm, executeBulkActionsDryRun, }: UseBulkActionsArgs) => { @@ -202,6 +208,53 @@ export const useBulkActions = ({ await downloadExportedRules(response); }; + const handleScheduleRuleRunAction = async () => { + startTransaction({ name: BULK_RULE_ACTIONS.MANUAL_RULE_RUN }); + closePopover(); + + setIsPreflightInProgress(true); + + const dryRunResult = await executeBulkActionsDryRun({ + type: BulkActionTypeEnum.run, + ...(isAllSelected + ? { query: convertRulesFilterToKQL(filterOptions) } + : { ids: selectedRuleIds }), + runPayload: { start_date: new Date().toISOString() }, + }); + + setIsPreflightInProgress(false); + + if ((dryRunResult?.succeededRulesCount ?? 0) > MAX_MANUAL_RULE_RUN_BULK_SIZE) { + showManualRuleRunLimitError(); + return; + } + + // User has cancelled edit action or there are no custom rules to proceed + const hasActionBeenConfirmed = await showBulkActionConfirmation( + dryRunResult, + BulkActionTypeEnum.run + ); + if (hasActionBeenConfirmed === false) { + return; + } + + const modalManualRuleRunConfirmationResult = await showManualRuleRunConfirmation(); + if (modalManualRuleRunConfirmationResult === null) { + return; + } + + const enabledIds = selectedRules.filter(({ enabled }) => enabled).map(({ id }) => id); + + await executeBulkAction({ + type: BulkActionTypeEnum.run, + ...(isAllSelected ? { query: kql } : { ids: enabledIds }), + runPayload: { + start_date: modalManualRuleRunConfirmationResult.startDate.toISOString(), + end_date: modalManualRuleRunConfirmationResult.endDate.toISOString(), + }, + }); + }; + const handleBulkEdit = (bulkEditActionType: BulkActionEditType) => async () => { let longTimeWarningToast: Toast; let isBulkEditFinished = false; @@ -391,6 +444,14 @@ export const useBulkActions = ({ onClick: handleExportAction, icon: undefined, }, + { + key: i18n.BULK_ACTION_MANUAL_RULE_RUN, + name: i18n.BULK_ACTION_MANUAL_RULE_RUN, + 'data-test-subj': 'scheduleRuleRunBulk', + disabled: containsLoading || (!containsEnabled && !isAllSelected), + onClick: handleScheduleRuleRunAction, + icon: undefined, + }, { key: i18n.BULK_ACTION_DISABLE, name: i18n.BULK_ACTION_DISABLE, @@ -520,6 +581,8 @@ export const useBulkActions = ({ kql, toasts, showBulkDuplicateConfirmation, + showManualRuleRunConfirmation, + showManualRuleRunLimitError, clearRulesSelection, confirmDeletion, bulkExport, diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/rules_table/rules_table_context.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/rules_table/rules_table_context.tsx index 1bf260aff69ed..8f0cac0130083 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/rules_table/rules_table_context.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/rules_table/rules_table_context.tsx @@ -138,6 +138,7 @@ export type LoadingRuleAction = | 'export' | 'load' | 'edit' + | 'run' | null; export interface LoadingRules { diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/rules_tables.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/rules_tables.tsx index d5e3fb77b237d..3a9c5dfb8ee00 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/rules_tables.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/rules_tables.tsx @@ -37,6 +37,7 @@ import type { FindRulesSortField } from '../../../../../common/api/detection_eng import { useIsUpgradingSecurityPackages } from '../../../rule_management/logic/use_upgrade_security_packages'; import { useManualRuleRunConfirmation } from '../../../rule_gaps/components/manual_rule_run/use_manual_rule_run_confirmation'; import { ManualRuleRunModal } from '../../../rule_gaps/components/manual_rule_run'; +import { BulkManualRuleRunLimitErrorModal } from './bulk_actions/bulk_manual_rule_run_limit_error_modal'; const INITIAL_SORT_FIELD = 'enabled'; @@ -117,6 +118,12 @@ export const RulesTables = React.memo(({ selectedTab }) => { confirmManualRuleRun, } = useManualRuleRunConfirmation(); + const [ + isManualRuleRunLimitErrorVisible, + showManualRuleRunLimitError, + hideManualRuleRunLimitError, + ] = useBoolState(); + const { bulkEditActionType, isBulkEditFlyoutVisible, @@ -132,6 +139,8 @@ export const RulesTables = React.memo(({ selectedTab }) => { confirmDeletion, showBulkActionConfirmation, showBulkDuplicateConfirmation, + showManualRuleRunConfirmation, + showManualRuleRunLimitError, completeBulkEditForm, executeBulkActionsDryRun, }); @@ -276,6 +285,9 @@ export const RulesTables = React.memo(({ selectedTab }) => { {isManualRuleRunConfirmationVisible && ( )} + {isManualRuleRunLimitErrorVisible && ( + + )} {isBulkActionConfirmationVisible && bulkAction && ( - <>{ruleDetailsI18n.UPDATES_TAB_LABEL} - - ), - content: ( - - - - ), - }, - ] - : []), - ...(isJsonPrebuiltRulesDiffingEnabled - ? [ - { - id: 'jsonViewUpdates', - name: ( - - <>{ruleDetailsI18n.JSON_VIEW_UPDATES_TAB_LABEL} - - ), - content: ( - - - - ), - }, - ] - : []), + { + id: 'updates', + name: ( + + <>{ruleDetailsI18n.UPDATES_TAB_LABEL} + + ), + content: ( + + + + ), + }, + { + id: 'jsonViewUpdates', + name: ( + + <>{ruleDetailsI18n.JSON_VIEW_UPDATES_TAB_LABEL} + + ), + content: ( + + + + ), + }, ]; - }, [ - previewedRule, - filteredRules, - isJsonPrebuiltRulesDiffingEnabled, - isPerFieldPrebuiltRulesDiffingEnabled, - ]); + }, [previewedRule, filteredRules]); return ( @@ -344,7 +316,7 @@ export const UpgradePrebuiltRulesTableContextProvider = ({ {previewedRule && ( { invalidateFetchRuleManagementFilters, invalidateFetchCoverageOverviewQuery, ]); - const isPerFieldPrebuiltRulesDiffingEnabled = useIsExperimentalFeatureEnabled( - 'perFieldPrebuiltRulesDiffingEnabled' - ); const [ { @@ -177,7 +173,7 @@ const RulesPageComponent: React.FC = () => { kibanaServices={kibanaServices} categories={[DEFAULT_APP_CATEGORIES.security.id]} /> - {isPerFieldPrebuiltRulesDiffingEnabled && } + diff --git a/x-pack/plugins/security_solution/public/detections/components/alerts_table/index.tsx b/x-pack/plugins/security_solution/public/detections/components/alerts_table/index.tsx index 5fc8364b0d7eb..4688d12d64bab 100644 --- a/x-pack/plugins/security_solution/public/detections/components/alerts_table/index.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/alerts_table/index.tsx @@ -11,7 +11,7 @@ import type { Filter } from '@kbn/es-query'; import type { FC } from 'react'; import React, { useRef, useEffect, useState, useCallback, useMemo } from 'react'; import type { AlertsTableStateProps } from '@kbn/triggers-actions-ui-plugin/public/application/sections/alerts_table/alerts_table_state'; -import type { Alert } from '@kbn/triggers-actions-ui-plugin/public/types'; +import type { Alert, Alerts } from '@kbn/triggers-actions-ui-plugin/public/types'; import { ALERT_BUILDING_BLOCK_TYPE } from '@kbn/rule-data-utils'; import styled from 'styled-components'; import { useDispatch } from 'react-redux'; @@ -22,6 +22,7 @@ import { tableDefaults, TableId, } from '@kbn/securitysolution-data-table'; +import { fetchNotesByDocumentIds } from '../../../notes/store/notes.slice'; import { useGlobalTime } from '../../../common/containers/use_global_time'; import { useLicense } from '../../../common/hooks/use_license'; import { VIEW_SELECTION } from '../../../../common/constants'; @@ -265,11 +266,19 @@ export const AlertsTableComponent: FC = ({ }; }, []); + const onLoaded = useCallback( + (alerts: Alerts) => { + const alertIds = alerts.map((alert: Alert) => alert._id); + dispatch(fetchNotesByDocumentIds({ documentIds: alertIds })); + }, + [dispatch] + ); + const alertStateProps: AlertsTableStateProps = useMemo( () => ({ alertsTableConfigurationRegistry: triggersActionsUi.alertsTableConfigurationRegistry, configurationId: configId, - // stores saperate configuration based on the view of the table + // stores separate configuration based on the view of the table id: `detection-engine-alert-table-${configId}-${tableView}`, featureIds: ['siem'], query: finalBoolQuery, @@ -280,6 +289,7 @@ export const AlertsTableComponent: FC = ({ browserFields: finalBrowserFields, onUpdate: onAlertTableUpdate, cellContext, + onLoaded, runtimeMappings, toolbarVisibility: { showColumnSelector: !isEventRenderedView, @@ -300,6 +310,7 @@ export const AlertsTableComponent: FC = ({ runtimeMappings, isEventRenderedView, cellContext, + onLoaded, ] ); diff --git a/x-pack/plugins/security_solution/public/detections/components/rules/rule_execution_status/rule_status_failed_callout.test.tsx b/x-pack/plugins/security_solution/public/detections/components/rules/rule_execution_status/rule_status_failed_callout.test.tsx index 45291cb5d0315..b5e7737be38f7 100644 --- a/x-pack/plugins/security_solution/public/detections/components/rules/rule_execution_status/rule_status_failed_callout.test.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/rules/rule_execution_status/rule_status_failed_callout.test.tsx @@ -28,6 +28,7 @@ const MESSAGE = 'This rule is attempting to query data but...'; const actionTypeRegistry = actionTypeRegistryMock.create(); const mockGetComments = jest.fn(() => []); const mockHttp = httpServiceMock.createStartContract({ basePath: '/test' }); +const mockNavigationToApp = jest.fn(); const mockAssistantAvailability: AssistantAvailability = { hasAssistantPrivilege: false, hasConnectorsAllPrivilege: true, @@ -61,6 +62,7 @@ const ContextWrapper: FC> = ({ children }) => ( }} getComments={mockGetComments} http={mockHttp} + navigateToApp={mockNavigationToApp} baseConversations={BASE_SECURITY_CONVERSATIONS} > {children} diff --git a/x-pack/plugins/security_solution/public/detections/components/value_lists_management_flyout/form.test.tsx b/x-pack/plugins/security_solution/public/detections/components/value_lists_management_flyout/form.test.tsx index e3fe9d39d6601..8d55d14a4718c 100644 --- a/x-pack/plugins/security_solution/public/detections/components/value_lists_management_flyout/form.test.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/value_lists_management_flyout/form.test.tsx @@ -27,7 +27,7 @@ const mockSelectFile:

    (container: ReactWrapper

    , file: File) => Promise { - const fileChange = container.find('EuiFilePicker').prop('onChange'); + const fileChange = container.find('EuiFilePickerClass').last().prop('onChange'); await waitFor(() => { if (fileChange) { fileChange({ item: () => file } as unknown as FormEvent); diff --git a/x-pack/plugins/security_solution/public/detections/components/value_lists_management_flyout/form.tsx b/x-pack/plugins/security_solution/public/detections/components/value_lists_management_flyout/form.tsx index b95ec41048f89..0190f06381e66 100644 --- a/x-pack/plugins/security_solution/public/detections/components/value_lists_management_flyout/form.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/value_lists_management_flyout/form.tsx @@ -17,6 +17,10 @@ import { EuiFlexItem, EuiSelect, } from '@elastic/eui'; +import type { + EuiFilePickerClass, + EuiFilePickerProps, +} from '@elastic/eui/src/components/form/file_picker/file_picker'; import type { Type, ListSchema } from '@kbn/securitysolution-io-ts-list-types'; import { useImportList } from '@kbn/securitysolution-list-hooks'; @@ -55,7 +59,7 @@ export const ValueListsFormComponent: React.FC = ({ onError const ctrl = useRef(new AbortController()); const [file, setFile] = useState(null); const [type, setType] = useState(defaultListType); - const filePickerRef = useRef(null); + const filePickerRef = useRef(null); const { http } = useKibana().services; const { start: importList, ...importState } = useImportList(); @@ -136,7 +140,7 @@ export const ValueListsFormComponent: React.FC = ({ onError data-test-subj="value-list-file-picker" id="value-list-file-picker" initialPromptText={i18n.FILE_PICKER_PROMPT} - ref={filePickerRef} + ref={filePickerRef as React.Ref>} onChange={handleFileChange} fullWidth={true} isLoading={importState.loading} diff --git a/x-pack/plugins/security_solution/public/detections/hooks/trigger_actions_alert_table/use_actions_column.tsx b/x-pack/plugins/security_solution/public/detections/hooks/trigger_actions_alert_table/use_actions_column.tsx index 840cc0efb5529..2e838e9f2ba23 100644 --- a/x-pack/plugins/security_solution/public/detections/hooks/trigger_actions_alert_table/use_actions_column.tsx +++ b/x-pack/plugins/security_solution/public/detections/hooks/trigger_actions_alert_table/use_actions_column.tsx @@ -10,6 +10,7 @@ import React, { useCallback, useContext, useMemo } from 'react'; import { useSelector } from 'react-redux'; import type { AlertsTableConfigurationRegistry } from '@kbn/triggers-actions-ui-plugin/public/types'; import { TableId } from '@kbn/securitysolution-data-table'; +import { useIsExperimentalFeatureEnabled } from '../../../common/hooks/use_experimental_features'; import { StatefulEventContext } from '../../../common/components/events_viewer/stateful_event_context'; import { eventsViewerSelector } from '../../../common/components/events_viewer/selectors'; import { getDefaultControlColumn } from '../../../timelines/components/timeline/body/control_columns'; @@ -24,7 +25,17 @@ export const getUseActionColumnHook = () => { const license = useLicense(); const isEnterprisePlus = license.isEnterprise(); - const ACTION_BUTTON_COUNT = tableId === TableId.alertsOnCasePage ? 3 : isEnterprisePlus ? 5 : 4; + let ACTION_BUTTON_COUNT = tableId === TableId.alertsOnCasePage ? 4 : isEnterprisePlus ? 6 : 5; + + // we only want to show the note icon if the expandable flyout and the new notes system are enabled + // TODO delete most likely in 8.16 + const expandableFlyoutDisabled = useIsExperimentalFeatureEnabled('expandableFlyoutDisabled'); + const securitySolutionNotesEnabled = useIsExperimentalFeatureEnabled( + 'securitySolutionNotesEnabled' + ); + if (expandableFlyoutDisabled || !securitySolutionNotesEnabled) { + ACTION_BUTTON_COUNT--; + } const eventContext = useContext(StatefulEventContext); diff --git a/x-pack/plugins/security_solution/public/detections/pages/detection_engine/rules/translations.ts b/x-pack/plugins/security_solution/public/detections/pages/detection_engine/rules/translations.ts index b8e4063abb600..4fa96cf519bbf 100644 --- a/x-pack/plugins/security_solution/public/detections/pages/detection_engine/rules/translations.ts +++ b/x-pack/plugins/security_solution/public/detections/pages/detection_engine/rules/translations.ts @@ -103,6 +103,13 @@ export const BULK_ACTION_EXPORT = i18n.translate( } ); +export const BULK_ACTION_MANUAL_RULE_RUN = i18n.translate( + 'xpack.securitySolution.detectionEngine.rules.allRules.bulkActions.manualRuleRunTitle', + { + defaultMessage: 'Manual run', + } +); + export const BULK_ACTION_DUPLICATE = i18n.translate( 'xpack.securitySolution.detectionEngine.rules.allRules.bulkActions.duplicateTitle', { @@ -240,6 +247,15 @@ export const BULK_EXPORT_CONFIRMATION_REJECTED_TITLE = (rulesCount: number) => } ); +export const BULK_MANUAL_RULE_RUN_CONFIRMATION_REJECTED_TITLE = (rulesCount: number) => + i18n.translate( + 'xpack.securitySolution.detectionEngine.rules.allRules.bulkActions.bulkManualRuleRunConfirmationDeniedTitle', + { + values: { rulesCount }, + defaultMessage: '{rulesCount, plural, =1 {# rule} other {# rules}} cannot be scheduled', + } + ); + export const BULK_EDIT_CONFIRMATION_REJECTED_TITLE = (rulesCount: number) => i18n.translate( 'xpack.securitySolution.detectionEngine.rules.allRules.bulkActions.bulkEditConfirmationDeniedTitle', @@ -292,6 +308,40 @@ export const BULK_EXPORT_CONFIRMATION_CONFIRM = (customRulesCount: number) => } ); +export const BULK_MANUAL_RULE_RUN_CONFIRMATION_CONFIRM = (customRulesCount: number) => + i18n.translate( + 'xpack.securitySolution.detectionEngine.components.allRules.bulkActions.bulkManualRuleRunConfirmation.confirmButtonLabel', + { + values: { customRulesCount }, + defaultMessage: + 'Schedule {customRulesCount, plural, =1 {# custom rule} other {# custom rules}}', + } + ); + +export const BULK_MANUAL_RULE_RUN_LIMIT_ERROR_TITLE = i18n.translate( + 'xpack.securitySolution.detectionEngine.rules.allRules.bulkActions.bulkManualRuleRunLimitErrorMessage', + { + defaultMessage: 'This action can only be applied', + } +); + +export const BULK_MANUAL_RULE_RUN_LIMIT_ERROR_MESSAGE = (rulesCount: number) => + i18n.translate( + 'xpack.securitySolution.detectionEngine.rules.allRules.bulkActions.bulkManualRuleRunLimitErrorTitle', + { + values: { rulesCount }, + defaultMessage: + 'Manual rule run cannot be scheduled for more than {rulesCount, plural, =1 {# rule} other {# rules}}', + } + ); + +export const BULK_MANUAL_RULE_RUN_LIMIT_ERROR_CLOSE_BUTTON = i18n.translate( + 'xpack.securitySolution.detectionEngine.rules.allRules.bulkActions.bulkManualRuleRunLimitErrorCloseButton', + { + defaultMessage: 'Close', + } +); + export const BULK_EDIT_FLYOUT_FORM_SAVE = i18n.translate( 'xpack.securitySolution.detectionEngine.components.allRules.bulkActions.bulkEditFlyoutForm.saveButtonLabel', { @@ -1201,6 +1251,44 @@ export const RULES_BULK_DISABLE_FAILURE_DESCRIPTION = (rulesCount: number) => } ); +/** + * Bulk Manual Rule Run + */ + +export const RULES_BULK_MANUAL_RULE_RUN_SUCCESS = i18n.translate( + 'xpack.securitySolution.detectionEngine.rules.allRules.bulkActions.manualRuleRun.successToastTitle', + { + defaultMessage: 'Rules scheduled', + } +); + +export const RULES_BULK_MANUAL_RULE_RUN_FAILURE = i18n.translate( + 'xpack.securitySolution.detectionEngine.rules.allRules.bulkActions.manualRuleRun.errorToastTitle', + { + defaultMessage: 'Error scheduling manual rule run', + } +); + +export const RULES_BULK_MANUAL_RULE_RUN_SUCCESS_DESCRIPTION = (totalRules: number) => + i18n.translate( + 'xpack.securitySolution.detectionEngine.rules.allRules.bulkActions.manualRuleRun.successToastDescription', + { + values: { totalRules }, + defaultMessage: + 'Successfully scheduled manual rule run for {totalRules, plural, =1 {{totalRules} rule} other {{totalRules} rules}}', + } + ); + +export const RULES_BULK_MANUAL_RULE_RUN_FAILURE_DESCRIPTION = (failedRulesCount: number) => + i18n.translate( + 'xpack.securitySolution.detectionEngine.rules.allRules.bulkActions.manualRuleRun.errorToastDescription', + { + values: { failedRulesCount }, + defaultMessage: + '{failedRulesCount, plural, =0 {} =1 {# rule} other {# rules}} failed to schedule manual rule run.', + } + ); + /** * Bulk Edit */ diff --git a/x-pack/plugins/security_solution/public/exceptions/components/import_exceptions_list_flyout/index.tsx b/x-pack/plugins/security_solution/public/exceptions/components/import_exceptions_list_flyout/index.tsx index d34a67087e40e..5c7fa4ba3b14c 100644 --- a/x-pack/plugins/security_solution/public/exceptions/components/import_exceptions_list_flyout/index.tsx +++ b/x-pack/plugins/security_solution/public/exceptions/components/import_exceptions_list_flyout/index.tsx @@ -26,6 +26,10 @@ import { EuiFlyout, EuiToolTip, } from '@elastic/eui'; +import type { + EuiFilePickerClass, + EuiFilePickerProps, +} from '@elastic/eui/src/components/form/file_picker/file_picker'; import type { BulkErrorSchema, ImportExceptionsResponseSchema, @@ -53,7 +57,7 @@ export const ImportExceptionListFlyout = React.memo( addError: (error: unknown, options: ErrorToastOptions) => Toast; setDisplayImportListFlyout: Dispatch>; }) => { - const filePickerRef = useRef(null); + const filePickerRef = useRef(null); const filePickerId = useGeneratedHtmlId({ prefix: 'filePicker' }); const [files, setFiles] = useState(null); @@ -179,7 +183,7 @@ export const ImportExceptionListFlyout = React.memo( >} initialPromptText={i18n.IMPORT_PROMPT} onChange={handleFileChange} display={'large'} diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/isolate_host/header.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/isolate_host/header.test.tsx index 63fd7651f04aa..ba166175640ea 100644 --- a/x-pack/plugins/security_solution/public/flyout/document_details/isolate_host/header.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/isolate_host/header.test.tsx @@ -95,6 +95,8 @@ describe('Isolation Flyout PanelHeader', () => { } else { expect(queryByTestId('flyoutHostIsolationHeaderBadge')).toBeNull(); } + + expect(getByTestId('flyoutHostIsolationHeaderIntegration')); } ); }); diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/isolate_host/header.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/isolate_host/header.tsx index 52ce2d707d4ba..aa4c04623dfba 100644 --- a/x-pack/plugins/security_solution/public/flyout/document_details/isolate_host/header.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/isolate_host/header.tsx @@ -5,9 +5,10 @@ * 2.0. */ -import { EuiBetaBadge, EuiFlexGroup, EuiFlexItem, EuiTitle } from '@elastic/eui'; +import { EuiBetaBadge, EuiFlexGroup, EuiFlexItem, EuiSpacer, EuiTitle } from '@elastic/eui'; import type { FC } from 'react'; import React, { useMemo } from 'react'; +import { AgentTypeIntegration } from '../../../common/components/endpoint/agents/agent_type_integration'; import { useAlertResponseActionsSupport } from '../../../common/hooks/endpoint/use_alert_response_actions_support'; import { TECHNICAL_PREVIEW, TECHNICAL_PREVIEW_TOOLTIP } from '../../../common/translations'; import { useIsolateHostPanelContext } from './context'; @@ -33,6 +34,12 @@ export const PanelHeader: FC = () => { {isolateAction === 'isolateHost' ? ISOLATE_HOST : UNISOLATE_HOST} + + {showTechPreviewBadge && ( diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/notes_details.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/notes_details.tsx index 94e5233ff8d70..7ff48d0392779 100644 --- a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/notes_details.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/notes_details.tsx @@ -10,7 +10,7 @@ import { useDispatch } from 'react-redux'; import { EuiSpacer } from '@elastic/eui'; import { AddNote } from './add_note'; import { NotesList } from './notes_list'; -import { fetchNotesByDocumentId } from '../../../../notes/store/notes.slice'; +import { fetchNotesByDocumentIds } from '../../../../notes/store/notes.slice'; import { useDocumentDetailsContext } from '../../shared/context'; /** @@ -22,7 +22,7 @@ export const NotesDetails = memo(() => { const { eventId } = useDocumentDetailsContext(); useEffect(() => { - dispatch(fetchNotesByDocumentId({ documentId: eventId })); + dispatch(fetchNotesByDocumentIds({ documentIds: [eventId] })); }, [dispatch, eventId]); return ( diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/notes_list.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/notes_list.test.tsx index d73053047341e..8491804e1a572 100644 --- a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/notes_list.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/notes_list.test.tsx @@ -62,7 +62,7 @@ describe('NotesList', () => { ...mockGlobalState.notes, status: { ...mockGlobalState.notes.status, - fetchNotesByDocumentId: ReqStatus.Loading, + fetchNotesByDocumentIds: ReqStatus.Loading, }, }, }); @@ -83,7 +83,7 @@ describe('NotesList', () => { ...mockGlobalState.notes, status: { ...mockGlobalState.notes.status, - fetchNotesByDocumentId: ReqStatus.Succeeded, + fetchNotesByDocumentIds: ReqStatus.Succeeded, }, }, }); @@ -104,11 +104,11 @@ describe('NotesList', () => { ...mockGlobalState.notes, status: { ...mockGlobalState.notes.status, - fetchNotesByDocumentId: ReqStatus.Failed, + fetchNotesByDocumentIds: ReqStatus.Failed, }, error: { ...mockGlobalState.notes.error, - fetchNotesByDocumentId: { type: 'http', status: 500 }, + fetchNotesByDocumentIds: { type: 'http', status: 500 }, }, }, }); 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 248b3958339d1..c27f8441c103a 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 @@ -35,8 +35,8 @@ import { selectCreateNoteStatus, selectDeleteNoteError, selectDeleteNoteStatus, - selectFetchNotesByDocumentIdError, - selectFetchNotesByDocumentIdStatus, + selectFetchNotesByDocumentIdsError, + selectFetchNotesByDocumentIdsStatus, selectNotesByDocumentId, } from '../../../../notes/store/notes.slice'; import { useAppToasts } from '../../../../common/hooks/use_app_toasts'; @@ -84,8 +84,9 @@ export const NotesList = memo(({ eventId }: NotesListProps) => { 'unifiedComponentsInTimelineEnabled' ); - const fetchStatus = useSelector((state: State) => selectFetchNotesByDocumentIdStatus(state)); - const fetchError = useSelector((state: State) => selectFetchNotesByDocumentIdError(state)); + const fetchStatus = useSelector((state: State) => selectFetchNotesByDocumentIdsStatus(state)); + const fetchError = useSelector((state: State) => selectFetchNotesByDocumentIdsError(state)); + const notes: Note[] = useSelector((state: State) => selectNotesByDocumentId(state, eventId)); const createStatus = useSelector((state: State) => selectCreateNoteStatus(state)); diff --git a/x-pack/plugins/security_solution/public/management/components/console/components/command_execution_result.tsx b/x-pack/plugins/security_solution/public/management/components/console/components/command_execution_result.tsx index 563c20e4317fd..79d208fbb3c57 100644 --- a/x-pack/plugins/security_solution/public/management/components/console/components/command_execution_result.tsx +++ b/x-pack/plugins/security_solution/public/management/components/console/components/command_execution_result.tsx @@ -11,6 +11,7 @@ import { i18n } from '@kbn/i18n'; import type { CommonProps } from '@elastic/eui'; import { EuiPanel, EuiSpacer } from '@elastic/eui'; import classNames from 'classnames'; +import type { ResponseActionAgentType } from '../../../../../common/endpoint/service/response_actions/constants'; import { useDataTestSubj } from '../hooks/state_selectors/use_data_test_subj'; import { useTestIdGenerator } from '../../../hooks/use_test_id_generator'; import { ConsoleText } from './console_text'; @@ -19,6 +20,10 @@ const COMMAND_EXECUTION_RESULT_SUCCESS_TITLE = i18n.translate( 'xpack.securitySolution.commandExecutionResult.successTitle', { defaultMessage: 'Action completed.' } ); +const COMMAND_EXECUTION_SUBMIT_RESULT_SUCCESS_TITLE = i18n.translate( + 'xpack.securitySolution.commandExecutionSubmitResult.successTitle', + { defaultMessage: 'Action successfully submitted.' } +); const COMMAND_EXECUTION_RESULT_FAILURE_TITLE = i18n.translate( 'xpack.securitySolution.commandExecutionResult.failureTitle', { defaultMessage: 'Action failed.' } @@ -47,6 +52,8 @@ export type CommandExecutionResultProps = PropsWithChildren<{ className?: CommonProps['className']; + agentType?: ResponseActionAgentType; + 'data-test-subj'?: string; }>; @@ -63,6 +70,7 @@ export const CommandExecutionResult = memo( 'data-test-subj': dataTestSubj, className, children, + agentType, }) => { const consoleDataTestSubj = useDataTestSubj(); const getTestId = useTestIdGenerator(dataTestSubj ?? consoleDataTestSubj); @@ -76,6 +84,19 @@ export const CommandExecutionResult = memo( }); }, [className, showAs]); + const titleMessage = useMemo(() => { + if (title) { + return title; + } + if (showAs === 'success') { + return agentType === 'crowdstrike' + ? COMMAND_EXECUTION_SUBMIT_RESULT_SUCCESS_TITLE + : COMMAND_EXECUTION_RESULT_SUCCESS_TITLE; + } else { + return COMMAND_EXECUTION_RESULT_FAILURE_TITLE; + } + }, [agentType, showAs, title]); + return ( ( {showTitle && ( <> - {title - ? title - : showAs === 'success' - ? COMMAND_EXECUTION_RESULT_SUCCESS_TITLE - : COMMAND_EXECUTION_RESULT_FAILURE_TITLE} + {titleMessage} diff --git a/x-pack/plugins/security_solution/public/management/components/console/components/console_header.tsx b/x-pack/plugins/security_solution/public/management/components/console/components/console_header.tsx index 7fbc0b53e5413..8c7d9116d3a35 100644 --- a/x-pack/plugins/security_solution/public/management/components/console/components/console_header.tsx +++ b/x-pack/plugins/security_solution/public/management/components/console/components/console_header.tsx @@ -55,12 +55,13 @@ export const ConsoleHeader = memo(({ TitleComponent }) => { {TitleComponent ? : ''} {!isHelpOpen && ( - + ( return actionOutputCode ? endpointActionResponseCodes[actionOutputCode] : undefined; }, [_title, action.agents, action.outputs]); - return ; + return ; } ); ActionSuccess.displayName = 'ActionSuccess'; diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/components/header_info/agent_info/agent_info.test.tsx b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/components/header_info/agent_info/agent_info.test.tsx index e7b04bc4a5817..2e5d9a8b56014 100644 --- a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/components/header_info/agent_info/agent_info.test.tsx +++ b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/components/header_info/agent_info/agent_info.test.tsx @@ -67,7 +67,7 @@ describe('Responder header Agent Info', () => { }); render(agentType); - const name = await renderResult.findByTestId('responderHeaderHostName'); + const name = await renderResult.findByTestId('responseConsole-hostName'); expect(name.textContent).toBe('test-agent'); }); @@ -102,7 +102,7 @@ describe('Responder header Agent Info', () => { }); render(agentType); - const lastUpdated = await renderResult.findByTestId('responderHeaderLastSeen'); + const lastUpdated = await renderResult.findByTestId('responseConsole-lastSeen'); expect(lastUpdated).toBeTruthy(); }); @@ -116,8 +116,21 @@ describe('Responder header Agent Info', () => { }); render(agentType); - const platformIcon = await renderResult.findByTestId('responderHeaderHostPlatformIcon'); + const platformIcon = await renderResult.findByTestId('responseConsole-platformIcon'); expect(platformIcon).toBeTruthy(); }); + + it('should show agent type integration info', async () => { + getAgentStatusMock.mockReturnValue({ + data: { + [agentId]: { ...baseData, agentType, status: HostStatus.HEALTHY }, + }, + isLoading: false, + isFetched: true, + }); + render(agentType); + + expect(renderResult.getByTestId('responseConsole-integration')); + }); }); }); diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/components/header_info/agent_info/agent_info.tsx b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/components/header_info/agent_info/agent_info.tsx index 1ce87a03caf7e..dc490a791693a 100644 --- a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/components/header_info/agent_info/agent_info.tsx +++ b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/components/header_info/agent_info/agent_info.tsx @@ -29,6 +29,8 @@ export const AgentInfo = memo(({ agentId, platform, hostName, ag platform={platform.toLowerCase() as Platform} hostName={hostName} lastCheckin={lastCheckin} + agentType={agentType} + data-test-subj="responseConsole" > { jest.clearAllMocks(); }); it('should show endpoint name', async () => { - const name = await renderResult.findByTestId('responderHeaderHostName'); + const name = await renderResult.findByTestId('responseConsole-hostName'); expect(name.textContent).toBe(`${endpointDetails.metadata.host.name}`); }); it('should show agent and isolation status', async () => { @@ -65,11 +65,11 @@ describe('Responder header endpoint info', () => { expect(agentStatus.textContent).toBe(`Healthy`); }); it('should show last checkin time', async () => { - const lastUpdated = await renderResult.findByTestId('responderHeaderLastSeen'); + const lastUpdated = await renderResult.findByTestId('responseConsole-lastSeen'); expect(lastUpdated).toBeTruthy(); }); it('should show platform icon', async () => { - const platformIcon = await renderResult.findByTestId('responderHeaderHostPlatformIcon'); + const platformIcon = await renderResult.findByTestId('responseConsole-platformIcon'); expect(platformIcon).toBeTruthy(); }); }); diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/components/header_info/endpoint/header_endpoint_info.tsx b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/components/header_info/endpoint/header_endpoint_info.tsx index 5a76abbe297cb..f302a31c5f48e 100644 --- a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/components/header_info/endpoint/header_endpoint_info.tsx +++ b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/components/header_info/endpoint/header_endpoint_info.tsx @@ -34,6 +34,8 @@ export const HeaderEndpointInfo = memo(({ endpointId }) platform={endpointDetails.metadata.host.os.name.toLowerCase() as Platform} hostName={endpointDetails.metadata.host.name} lastCheckin={endpointDetails.last_checkin} + agentType="endpoint" + data-test-subj="responseConsole" > ( - ({ platform, hostName, lastCheckin, children }) => { + ({ platform, hostName, lastCheckin, agentType, 'data-test-subj': dataTestSubj, children }) => { + const { euiTheme } = useEuiTheme(); + const testId = useTestIdGenerator(dataTestSubj); + return ( - + - - - + - - + + - +

    {hostName}
    @@ -41,9 +56,9 @@ export const HeaderAgentInfo = memo( {children} + - - + ( + + {agentType && ( + + + + )} ); } diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_response_actions_list/components/action_log_expanded_tray.tsx b/x-pack/plugins/security_solution/public/management/components/endpoint_response_actions_list/components/action_log_expanded_tray.tsx index 11837ed6d2364..6d1a20a5d28f1 100644 --- a/x-pack/plugins/security_solution/public/management/components/endpoint_response_actions_list/components/action_log_expanded_tray.tsx +++ b/x-pack/plugins/security_solution/public/management/components/endpoint_response_actions_list/components/action_log_expanded_tray.tsx @@ -15,6 +15,7 @@ import { } from '@elastic/eui'; import { css, euiStyled } from '@kbn/kibana-react-plugin/common'; import { reduce } from 'lodash'; +import { i18n } from '@kbn/i18n'; import { useIsExperimentalFeatureEnabled } from '../../../../common/hooks/use_experimental_features'; import { getAgentTypeName } from '../../../../common/translations'; import { RESPONSE_ACTION_API_COMMAND_TO_CONSOLE_COMMAND_MAP } from '../../../../../common/endpoint/service/response_actions/constants'; @@ -89,99 +90,123 @@ const StyledEuiFlexGroup = euiStyled(EuiFlexGroup).attrs({ overflow-y: auto; `; -const OutputContent = memo<{ action: MaybeImmutable; 'data-test-subj'?: string }>( - ({ action, 'data-test-subj': dataTestSubj }) => { - const getTestId = useTestIdGenerator(dataTestSubj); +const OutputContent = memo<{ + action: MaybeImmutable; + fromAlertWorkaround?: boolean; + 'data-test-subj'?: string; +}>(({ action, fromAlertWorkaround = false, 'data-test-subj': dataTestSubj }) => { + const getTestId = useTestIdGenerator(dataTestSubj); - const { - canWriteFileOperations, - canReadActionsLogManagement, - canAccessEndpointActionsLogManagement, - } = useUserPrivileges().endpointPrivileges; + const { + canWriteFileOperations, + canReadActionsLogManagement, + canAccessEndpointActionsLogManagement, + } = useUserPrivileges().endpointPrivileges; - const { command: _command, isCompleted, isExpired, wasSuccessful } = action; - const command = RESPONSE_ACTION_API_COMMAND_TO_CONSOLE_COMMAND_MAP[_command]; + const { command: _command, isCompleted, isExpired, wasSuccessful } = action; + const command = RESPONSE_ACTION_API_COMMAND_TO_CONSOLE_COMMAND_MAP[_command]; - if (isExpired) { - return <>{OUTPUT_MESSAGES.hasExpired(command)}; - } + // FIXME:PT remove once automated response actions are corrected to use `ActionDetails` (team issue 9822) + if (fromAlertWorkaround && action.errors?.length) { + return ( + <> + {( + action.errors ?? [ + i18n.translate('xpack.securitySolution.actionLogExpandedTray.missingErrors', { + defaultMessage: 'Action did not specify any errors', + }), + ] + ).map((error) => ( + {error} + ))} + + ); + } - if (!isCompleted) { - return <>{OUTPUT_MESSAGES.isPending(command)}; - } + if (isExpired) { + return <>{OUTPUT_MESSAGES.hasExpired(command)}; + } - if (!wasSuccessful) { - return ( - <> - {OUTPUT_MESSAGES.hasFailed(command)} - - - - ); - } + if (!isCompleted) { + return <>{OUTPUT_MESSAGES.isPending(command)}; + } - if (isGetFileAction(action)) { - return ( - <> - {OUTPUT_MESSAGES.wasSuccessful(command)} - - - ); - } + if (!wasSuccessful) { + return ( + <> + {OUTPUT_MESSAGES.hasFailed(command)} + + + + ); + } - if (isExecuteAction(action)) { - return ( - - {action.agents.map((agentId) => ( -
    - {OUTPUT_MESSAGES.wasSuccessful(command)} - -
    - ))} -
    - ); - } + if (isGetFileAction(action)) { + return ( + <> + {OUTPUT_MESSAGES.wasSuccessful(command)} + + + ); + } + + if (isExecuteAction(action)) { + return ( + + {action.agents.map((agentId) => ( +
    + {OUTPUT_MESSAGES.wasSuccessful(command)} + +
    + ))} +
    + ); + } - if (isUploadAction(action)) { - return ( - -

    {OUTPUT_MESSAGES.wasSuccessful(command)}

    + if (isUploadAction(action)) { + return ( + +

    {OUTPUT_MESSAGES.wasSuccessful(command)}

    - -
    - ); - } + +
    + ); + } - return <>{OUTPUT_MESSAGES.wasSuccessful(command)}; + if (action.agentType === 'crowdstrike') { + return <>{OUTPUT_MESSAGES.submittedSuccessfully(command)}; } -); + return <>{OUTPUT_MESSAGES.wasSuccessful(command)}; +}); OutputContent.displayName = 'OutputContent'; export const ActionsLogExpandedTray = memo<{ action: MaybeImmutable; + // Delete prop `fromAlert` once we refactor automated response actions + fromAlertWorkaround?: boolean; 'data-test-subj'?: string; -}>(({ action, 'data-test-subj': dataTestSubj }) => { +}>(({ action, fromAlertWorkaround = false, 'data-test-subj': dataTestSubj }) => { const getTestId = useTestIdGenerator(dataTestSubj); const isSentinelOneV1Enabled = useIsExperimentalFeatureEnabled( @@ -292,12 +317,16 @@ export const ActionsLogExpandedTray = memo<{ description: ( // codeblock for output - + ), }, ], - [action, dataTestSubj, getTestId] + [action, dataTestSubj, fromAlertWorkaround, getTestId] ); return ( diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_response_actions_list/translations.tsx b/x-pack/plugins/security_solution/public/management/components/endpoint_response_actions_list/translations.tsx index e19f7cc19102e..633bfece6957c 100644 --- a/x-pack/plugins/security_solution/public/management/components/endpoint_response_actions_list/translations.tsx +++ b/x-pack/plugins/security_solution/public/management/components/endpoint_response_actions_list/translations.tsx @@ -18,6 +18,11 @@ export const OUTPUT_MESSAGES = Object.freeze({ defaultMessage: `{command} completed successfully`, values: { command }, }), + submittedSuccessfully: (command: string) => + i18n.translate('xpack.securitySolution.responseActionsList.list.item.submittedSuccessfully', { + defaultMessage: `{command} submitted successfully`, + values: { command }, + }), isPending: (command: string) => i18n.translate('xpack.securitySolution.responseActionsList.list.item.isPending', { defaultMessage: `{command} is pending`, diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/automated_response_actions/automated_response_actions.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/automated_response_actions/automated_response_actions.cy.ts index 3def00d1fc905..9da25023f0778 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/automated_response_actions/automated_response_actions.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/automated_response_actions/automated_response_actions.cy.ts @@ -20,10 +20,7 @@ import { createEndpointHost } from '../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../tasks/delete_all_endpoint_data'; import { enableAllPolicyProtections } from '../../tasks/endpoint_policy'; -// 8.15.0 -// TODO: Re-enable when action requests history can be filtered by alert ids -// security-team issue #9822 -describe.skip( +describe( 'Automated Response Actions', { tags: ['@ess', '@serverless'], diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/metering.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/metering.cy.ts index b775b2809f085..7a0533e85c1e4 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/metering.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/metering.cy.ts @@ -53,7 +53,8 @@ describe( stopTransparentApiProxy(); }); - describe('Usage Reporting Task', () => { + // FLAKY: https://github.com/elastic/kibana/issues/187083 + describe.skip('Usage Reporting Task', () => { it('properly sends indexed heartbeats to the metering api', () => { const expectedChunks = Math.ceil(HEARTBEAT_COUNT / METERING_SERVICE_BATCH_SIZE); 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 b535070a07ee9..05ea215f65c50 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 @@ -1285,6 +1285,72 @@ export const AdvancedPolicySchema: AdvancedPolicySchemaType[] = [ } ), }, + { + key: 'windows.advanced.events.process_ancestry_length', + first_supported_version: '8.15', + documentation: i18n.translate( + 'xpack.securitySolution.endpoint.policy.advanced.windows.advanced.events.process_ancestry_length', + { + defaultMessage: + 'Maximum number of process ancestry entries to include in process events. Default: 5', + } + ), + }, + { + key: 'mac.advanced.events.process_ancestry_length', + first_supported_version: '8.15', + documentation: i18n.translate( + 'xpack.securitySolution.endpoint.policy.advanced.mac.advanced.events.process_ancestry_length', + { + defaultMessage: + 'Maximum number of process ancestry entries to include in process events. Default: 5', + } + ), + }, + { + key: 'linux.advanced.events.process_ancestry_length', + first_supported_version: '8.15', + documentation: i18n.translate( + 'xpack.securitySolution.endpoint.policy.advanced.linux.advanced.events.process_ancestry_length', + { + defaultMessage: + 'Maximum number of process ancestry entries to include in process events. Default: 5', + } + ), + }, + { + key: 'windows.advanced.events.ancestry_in_all_events', + first_supported_version: '8.15', + documentation: i18n.translate( + 'xpack.securitySolution.endpoint.policy.advanced.windows.advanced.events.ancestry_in_all_events', + { + defaultMessage: + 'Include ancestor process entity IDs in all event types, by default it is only included in alerts and process events. Default: false', + } + ), + }, + { + key: 'mac.advanced.events.ancestry_in_all_events', + first_supported_version: '8.15', + documentation: i18n.translate( + 'xpack.securitySolution.endpoint.policy.advanced.mac.advanced.events.ancestry_in_all_events', + { + defaultMessage: + 'Include ancestor process entity IDs in all event types, by default it is only included in alerts and process events. Default: false', + } + ), + }, + { + key: 'linux.advanced.events.ancestry_in_all_events', + first_supported_version: '8.15', + documentation: i18n.translate( + 'xpack.securitySolution.endpoint.policy.advanced.linux.advanced.events.ancestry_in_all_events', + { + defaultMessage: + 'Include ancestor process entity IDs in all event types, by default it is only included in alerts and process events. Default: false', + } + ), + }, { key: 'windows.advanced.artifacts.global.proxy_url', first_supported_version: '8.8', @@ -1779,4 +1845,67 @@ export const AdvancedPolicySchema: AdvancedPolicySchemaType[] = [ } ), }, + { + key: 'mac.advanced.events.deduplicate_network_events', + first_supported_version: '8.15', + documentation: i18n.translate( + 'xpack.securitySolution.endpoint.policy.advanced.mac.advanced.events.deduplicate_network_events', + { + defaultMessage: "A value of 'false' disables network events deduplication. Default: true", + } + ), + }, + { + key: 'windows.advanced.events.deduplicate_network_events', + first_supported_version: '8.15', + documentation: i18n.translate( + 'xpack.securitySolution.endpoint.policy.advanced.windows.advanced.events.deduplicate_network_events', + { + defaultMessage: "A value of 'false' disables network events deduplication. Default: true", + } + ), + }, + { + key: 'linux.advanced.events.deduplicate_network_events', + first_supported_version: '8.15', + documentation: i18n.translate( + 'xpack.securitySolution.endpoint.policy.advanced.linux.advanced.events.deduplicate_network_events', + { + defaultMessage: "A value of 'false' disables network events deduplication. Default: true", + } + ), + }, + { + key: 'mac.advanced.events.deduplicate_network_events_below_bytes', + first_supported_version: '8.15', + documentation: i18n.translate( + 'xpack.securitySolution.endpoint.policy.advanced.mac.advanced.events.deduplicate_network_events_below_bytes', + { + defaultMessage: + "Deduplication transfer threshold in bytes. Events exceeding the transfer will not be deduplicated. A value '0' means disabled. Default: 1048576 (1MB)", + } + ), + }, + { + key: 'windows.advanced.events.deduplicate_network_events_below_bytes', + first_supported_version: '8.15', + documentation: i18n.translate( + 'xpack.securitySolution.endpoint.policy.advanced.windows.advanced.events.deduplicate_network_events_below_bytes', + { + defaultMessage: + "Deduplication transfer threshold in bytes. Events exceeding the transfer will not be deduplicated. A value '0' means disabled. Default: 1048576 (1MB)", + } + ), + }, + { + key: 'linux.advanced.events.deduplicate_network_events_below_bytes', + first_supported_version: '8.15', + documentation: i18n.translate( + 'xpack.securitySolution.endpoint.policy.advanced.linux.advanced.events.deduplicate_network_events_below_bytes', + { + defaultMessage: + "Deduplication transfer threshold in bytes. Events exceeding the transfer will not be deduplicated. A value '0' means disabled. Default: 1048576 (1MB)", + } + ), + }, ]; diff --git a/x-pack/plugins/security_solution/public/notes/api/api.ts b/x-pack/plugins/security_solution/public/notes/api/api.ts index 302e70185cfba..91455d71a8d17 100644 --- a/x-pack/plugins/security_solution/public/notes/api/api.ts +++ b/x-pack/plugins/security_solution/public/notes/api/api.ts @@ -5,7 +5,6 @@ * 2.0. */ -import * as uuid from 'uuid'; import type { BareNote, Note } from '../../../common/api/timeline'; import { KibanaServices } from '../../common/lib/kibana'; import { NOTE_URL } from '../../../common/constants'; @@ -30,31 +29,20 @@ export const createNote = async ({ note }: { note: BareNote }) => { } }; -// TODO point to the correct API when it is available /** - * Fetches all the notes for a document id + * Fetches all the notes for an array of document ids */ -export const fetchNotesByDocumentId = async (documentId: string) => { - const response = { - totalCount: 1, - notes: [generateNoteMock(documentId)], - }; - return response.notes; +export const fetchNotesByDocumentIds = async (documentIds: string[]) => { + const response = await KibanaServices.get().http.get<{ notes: Note[]; totalCount: number }>( + NOTE_URL, + { + query: { documentIds }, + version: '2023-10-31', + } + ); + return response; }; -// TODO remove when the API is available -export const generateNoteMock = (documentId: string) => ({ - noteId: uuid.v4(), - version: 'WzU1MDEsMV0=', - timelineId: '', - eventId: documentId, - note: 'This is a mocked note', - created: new Date().getTime(), - createdBy: 'elastic', - updated: new Date().getTime(), - updatedBy: 'elastic', -}); - /** * Deletes a note */ diff --git a/x-pack/plugins/security_solution/public/notes/store/notes.slice.test.ts b/x-pack/plugins/security_solution/public/notes/store/notes.slice.test.ts index 57347c1562837..59f196b6a5af5 100644 --- a/x-pack/plugins/security_solution/public/notes/store/notes.slice.test.ts +++ b/x-pack/plugins/security_solution/public/notes/store/notes.slice.test.ts @@ -4,11 +4,11 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ - +import * as uuid from 'uuid'; import { createNote, deleteNote, - fetchNotesByDocumentId, + fetchNotesByDocumentIds, initialNotesState, notesReducer, ReqStatus, @@ -17,29 +17,41 @@ import { selectCreateNoteStatus, selectDeleteNoteError, selectDeleteNoteStatus, - selectFetchNotesByDocumentIdError, - selectFetchNotesByDocumentIdStatus, + selectFetchNotesByDocumentIdsError, + selectFetchNotesByDocumentIdsStatus, selectNoteById, selectNoteIds, selectNotesByDocumentId, } from './notes.slice'; -import { generateNoteMock } from '../api/api'; import { mockGlobalState } from '../../common/mock'; const initalEmptyState = initialNotesState; -const mockNote = { ...generateNoteMock('1') }; +export const generateNoteMock = (documentIds: string[]) => + documentIds.map((documentId: string) => ({ + noteId: uuid.v4(), + version: 'WzU1MDEsMV0=', + timelineId: '', + eventId: documentId, + note: 'This is a mocked note', + created: new Date().getTime(), + createdBy: 'elastic', + updated: new Date().getTime(), + updatedBy: 'elastic', + })); + +const mockNote = { ...generateNoteMock(['1'])[0] }; const initialNonEmptyState = { entities: { [mockNote.noteId]: mockNote, }, ids: [mockNote.noteId], status: { - fetchNotesByDocumentId: ReqStatus.Idle, + fetchNotesByDocumentIds: ReqStatus.Idle, createNote: ReqStatus.Idle, deleteNote: ReqStatus.Idle, }, - error: { fetchNotesByDocumentId: null, createNote: null, deleteNote: null }, + error: { fetchNotesByDocumentIds: null, createNote: null, deleteNote: null }, }; describe('notesSlice', () => { @@ -49,33 +61,33 @@ describe('notesSlice', () => { entities: {}, ids: [], status: { - fetchNotesByDocumentId: ReqStatus.Idle, + fetchNotesByDocumentIds: ReqStatus.Idle, createNote: ReqStatus.Idle, deleteNote: ReqStatus.Idle, }, - error: { fetchNotesByDocumentId: null, createNote: null, deleteNote: null }, + error: { fetchNotesByDocumentIds: null, createNote: null, deleteNote: null }, }); }); - describe('fetchNotesByDocumentId', () => { + describe('fetchNotesByDocumentIds', () => { it('should set correct status state when fetching notes by document id', () => { - const action = { type: fetchNotesByDocumentId.pending.type }; + const action = { type: fetchNotesByDocumentIds.pending.type }; expect(notesReducer(initalEmptyState, action)).toEqual({ entities: {}, ids: [], status: { - fetchNotesByDocumentId: ReqStatus.Loading, + fetchNotesByDocumentIds: ReqStatus.Loading, createNote: ReqStatus.Idle, deleteNote: ReqStatus.Idle, }, - error: { fetchNotesByDocumentId: null, createNote: null, deleteNote: null }, + error: { fetchNotesByDocumentIds: null, createNote: null, deleteNote: null }, }); }); it('should set correct state when success on fetch notes by document id on an empty state', () => { const action = { - type: fetchNotesByDocumentId.fulfilled.type, + type: fetchNotesByDocumentIds.fulfilled.type, payload: { entities: { notes: { @@ -90,18 +102,18 @@ describe('notesSlice', () => { entities: action.payload.entities.notes, ids: action.payload.result, status: { - fetchNotesByDocumentId: ReqStatus.Succeeded, + fetchNotesByDocumentIds: ReqStatus.Succeeded, createNote: ReqStatus.Idle, deleteNote: ReqStatus.Idle, }, - error: { fetchNotesByDocumentId: null, createNote: null, deleteNote: null }, + error: { fetchNotesByDocumentIds: null, createNote: null, deleteNote: null }, }); }); it('should replace notes when success on fetch notes by document id on a non-empty state', () => { const newMockNote = { ...mockNote, timelineId: 'timelineId' }; const action = { - type: fetchNotesByDocumentId.fulfilled.type, + type: fetchNotesByDocumentIds.fulfilled.type, payload: { entities: { notes: { @@ -116,27 +128,27 @@ describe('notesSlice', () => { entities: action.payload.entities.notes, ids: action.payload.result, status: { - fetchNotesByDocumentId: ReqStatus.Succeeded, + fetchNotesByDocumentIds: ReqStatus.Succeeded, createNote: ReqStatus.Idle, deleteNote: ReqStatus.Idle, }, - error: { fetchNotesByDocumentId: null, createNote: null, deleteNote: null }, + error: { fetchNotesByDocumentIds: null, createNote: null, deleteNote: null }, }); }); it('should set correct error state when failing to fetch notes by document id', () => { - const action = { type: fetchNotesByDocumentId.rejected.type, error: 'error' }; + const action = { type: fetchNotesByDocumentIds.rejected.type, error: 'error' }; expect(notesReducer(initalEmptyState, action)).toEqual({ entities: {}, ids: [], status: { - fetchNotesByDocumentId: ReqStatus.Failed, + fetchNotesByDocumentIds: ReqStatus.Failed, createNote: ReqStatus.Idle, deleteNote: ReqStatus.Idle, }, error: { - fetchNotesByDocumentId: 'error', + fetchNotesByDocumentIds: 'error', createNote: null, deleteNote: null, }, @@ -152,11 +164,11 @@ describe('notesSlice', () => { entities: {}, ids: [], status: { - fetchNotesByDocumentId: ReqStatus.Idle, + fetchNotesByDocumentIds: ReqStatus.Idle, createNote: ReqStatus.Loading, deleteNote: ReqStatus.Idle, }, - error: { fetchNotesByDocumentId: null, createNote: null, deleteNote: null }, + error: { fetchNotesByDocumentIds: null, createNote: null, deleteNote: null }, }); }); @@ -177,11 +189,11 @@ describe('notesSlice', () => { entities: action.payload.entities.notes, ids: [action.payload.result], status: { - fetchNotesByDocumentId: ReqStatus.Idle, + fetchNotesByDocumentIds: ReqStatus.Idle, createNote: ReqStatus.Succeeded, deleteNote: ReqStatus.Idle, }, - error: { fetchNotesByDocumentId: null, createNote: null, deleteNote: null }, + error: { fetchNotesByDocumentIds: null, createNote: null, deleteNote: null }, }); }); @@ -192,12 +204,12 @@ describe('notesSlice', () => { entities: {}, ids: [], status: { - fetchNotesByDocumentId: ReqStatus.Idle, + fetchNotesByDocumentIds: ReqStatus.Idle, createNote: ReqStatus.Failed, deleteNote: ReqStatus.Idle, }, error: { - fetchNotesByDocumentId: null, + fetchNotesByDocumentIds: null, createNote: 'error', deleteNote: null, }, @@ -213,11 +225,11 @@ describe('notesSlice', () => { entities: {}, ids: [], status: { - fetchNotesByDocumentId: ReqStatus.Idle, + fetchNotesByDocumentIds: ReqStatus.Idle, createNote: ReqStatus.Idle, deleteNote: ReqStatus.Loading, }, - error: { fetchNotesByDocumentId: null, createNote: null, deleteNote: null }, + error: { fetchNotesByDocumentIds: null, createNote: null, deleteNote: null }, }); }); @@ -231,11 +243,11 @@ describe('notesSlice', () => { entities: {}, ids: [], status: { - fetchNotesByDocumentId: ReqStatus.Idle, + fetchNotesByDocumentIds: ReqStatus.Idle, createNote: ReqStatus.Idle, deleteNote: ReqStatus.Succeeded, }, - error: { fetchNotesByDocumentId: null, createNote: null, deleteNote: null }, + error: { fetchNotesByDocumentIds: null, createNote: null, deleteNote: null }, }); }); @@ -246,12 +258,12 @@ describe('notesSlice', () => { entities: {}, ids: [], status: { - fetchNotesByDocumentId: ReqStatus.Idle, + fetchNotesByDocumentIds: ReqStatus.Idle, createNote: ReqStatus.Idle, deleteNote: ReqStatus.Failed, }, error: { - fetchNotesByDocumentId: null, + fetchNotesByDocumentIds: null, createNote: null, deleteNote: 'error', }, @@ -283,11 +295,11 @@ describe('notesSlice', () => { }); it('should return fetch notes by document id status', () => { - expect(selectFetchNotesByDocumentIdStatus(mockGlobalState)).toEqual(ReqStatus.Idle); + expect(selectFetchNotesByDocumentIdsStatus(mockGlobalState)).toEqual(ReqStatus.Idle); }); it('should return fetch notes by document id error', () => { - expect(selectFetchNotesByDocumentIdError(mockGlobalState)).toEqual(null); + expect(selectFetchNotesByDocumentIdsError(mockGlobalState)).toEqual(null); }); it('should return create note by document id status', () => { diff --git a/x-pack/plugins/security_solution/public/notes/store/notes.slice.ts b/x-pack/plugins/security_solution/public/notes/store/notes.slice.ts index 52a2805e765f6..303313d180306 100644 --- a/x-pack/plugins/security_solution/public/notes/store/notes.slice.ts +++ b/x-pack/plugins/security_solution/public/notes/store/notes.slice.ts @@ -12,7 +12,7 @@ import type { State } from '../../common/store'; import { createNote as createNoteApi, deleteNote as deleteNoteApi, - fetchNotesByDocumentId as fetchNotesByDocumentIdApi, + fetchNotesByDocumentIds as fetchNotesByDocumentIdsApi, } from '../api/api'; import type { NormalizedEntities, NormalizedEntity } from './normalize'; import { normalizeEntities, normalizeEntity } from './normalize'; @@ -32,12 +32,12 @@ interface HttpError { export interface NotesState extends EntityState { status: { - fetchNotesByDocumentId: ReqStatus; + fetchNotesByDocumentIds: ReqStatus; createNote: ReqStatus; deleteNote: ReqStatus; }; error: { - fetchNotesByDocumentId: SerializedError | HttpError | null; + fetchNotesByDocumentIds: SerializedError | HttpError | null; createNote: SerializedError | HttpError | null; deleteNote: SerializedError | HttpError | null; }; @@ -49,25 +49,25 @@ const notesAdapter = createEntityAdapter({ export const initialNotesState: NotesState = notesAdapter.getInitialState({ status: { - fetchNotesByDocumentId: ReqStatus.Idle, + fetchNotesByDocumentIds: ReqStatus.Idle, createNote: ReqStatus.Idle, deleteNote: ReqStatus.Idle, }, error: { - fetchNotesByDocumentId: null, + fetchNotesByDocumentIds: null, createNote: null, deleteNote: null, }, }); -export const fetchNotesByDocumentId = createAsyncThunk< +export const fetchNotesByDocumentIds = createAsyncThunk< NormalizedEntities, - { documentId: string }, + { documentIds: string[] }, {} ->('notes/fetchNotesByDocumentId', async (args) => { - const { documentId } = args; - const res = await fetchNotesByDocumentIdApi(documentId); - return normalizeEntities(res); +>('notes/fetchNotesByDocumentIds', async (args) => { + const { documentIds } = args; + const res = await fetchNotesByDocumentIdsApi(documentIds); + return normalizeEntities(res.notes); }); export const createNote = createAsyncThunk, { note: BareNote }, {}>( @@ -94,16 +94,16 @@ const notesSlice = createSlice({ reducers: {}, extraReducers(builder) { builder - .addCase(fetchNotesByDocumentId.pending, (state) => { - state.status.fetchNotesByDocumentId = ReqStatus.Loading; + .addCase(fetchNotesByDocumentIds.pending, (state) => { + state.status.fetchNotesByDocumentIds = ReqStatus.Loading; }) - .addCase(fetchNotesByDocumentId.fulfilled, (state, action) => { + .addCase(fetchNotesByDocumentIds.fulfilled, (state, action) => { notesAdapter.upsertMany(state, action.payload.entities.notes); - state.status.fetchNotesByDocumentId = ReqStatus.Succeeded; + state.status.fetchNotesByDocumentIds = ReqStatus.Succeeded; }) - .addCase(fetchNotesByDocumentId.rejected, (state, action) => { - state.status.fetchNotesByDocumentId = ReqStatus.Failed; - state.error.fetchNotesByDocumentId = action.payload ?? action.error; + .addCase(fetchNotesByDocumentIds.rejected, (state, action) => { + state.status.fetchNotesByDocumentIds = ReqStatus.Failed; + state.error.fetchNotesByDocumentIds = action.payload ?? action.error; }) .addCase(createNote.pending, (state) => { state.status.createNote = ReqStatus.Loading; @@ -138,11 +138,11 @@ export const { selectIds: selectNoteIds, } = notesAdapter.getSelectors((state: State) => state.notes); -export const selectFetchNotesByDocumentIdStatus = (state: State) => - state.notes.status.fetchNotesByDocumentId; +export const selectFetchNotesByDocumentIdsStatus = (state: State) => + state.notes.status.fetchNotesByDocumentIds; -export const selectFetchNotesByDocumentIdError = (state: State) => - state.notes.error.fetchNotesByDocumentId; +export const selectFetchNotesByDocumentIdsError = (state: State) => + state.notes.error.fetchNotesByDocumentIds; export const selectCreateNoteStatus = (state: State) => state.notes.status.createNote; diff --git a/x-pack/plugins/security_solution/public/resolver/data_access_layer/factory.ts b/x-pack/plugins/security_solution/public/resolver/data_access_layer/factory.ts index 66a04acaca439..9e960f34b9a36 100644 --- a/x-pack/plugins/security_solution/public/resolver/data_access_layer/factory.ts +++ b/x-pack/plugins/security_solution/public/resolver/data_access_layer/factory.ts @@ -40,10 +40,12 @@ export function dataAccessLayerFactory(context: CoreStart): DataAccessLayer { entityID, timeRange, indexPatterns, + agentId, }: { entityID: string; timeRange?: TimeRange; indexPatterns: string[]; + agentId: string; }): Promise { const response: ResolverPaginatedEvents = await context.http.post( '/api/endpoint/resolver/events', @@ -51,6 +53,7 @@ export function dataAccessLayerFactory(context: CoreStart): DataAccessLayer { query: {}, body: JSON.stringify({ indexPatterns, + agentId, ...getRangeFilter(timeRange), filter: JSON.stringify({ bool: { @@ -77,12 +80,14 @@ export function dataAccessLayerFactory(context: CoreStart): DataAccessLayer { after, timeRange, indexPatterns, + agentId, }: { entityID: string; category: string; after?: string; timeRange?: TimeRange; indexPatterns: string[]; + agentId: string; }): Promise { const commonFields = { query: { afterEvent: after, limit: 25 }, @@ -98,6 +103,7 @@ export function dataAccessLayerFactory(context: CoreStart): DataAccessLayer { ...commonFields.body, entityType: 'alerts', eventID: entityID, + agentId, }), }); } else { @@ -105,6 +111,7 @@ export function dataAccessLayerFactory(context: CoreStart): DataAccessLayer { query: commonFields.query, body: JSON.stringify({ ...commonFields.body, + agentId, filter: JSON.stringify({ bool: { filter: [ @@ -127,16 +134,19 @@ export function dataAccessLayerFactory(context: CoreStart): DataAccessLayer { timeRange, indexPatterns, limit, + agentId, }: { ids: string[]; timeRange?: TimeRange; indexPatterns: string[]; limit: number; + agentId: string; }): Promise { const query = { query: { limit }, body: JSON.stringify({ indexPatterns, + agentId, ...getRangeFilter(timeRange), filter: JSON.stringify({ bool: { @@ -166,6 +176,7 @@ export function dataAccessLayerFactory(context: CoreStart): DataAccessLayer { winlogRecordID, timeRange, indexPatterns, + agentId, }: { nodeID: string; eventCategory: string[]; @@ -174,6 +185,7 @@ export function dataAccessLayerFactory(context: CoreStart): DataAccessLayer { winlogRecordID: string; timeRange?: TimeRange; indexPatterns: string[]; + agentId: string; }): Promise { /** @description - eventID isn't provided by winlog. This can be removed once runtime fields are available */ const filter = @@ -199,6 +211,7 @@ export function dataAccessLayerFactory(context: CoreStart): DataAccessLayer { { query: { limit: 1 }, body: JSON.stringify({ + agentId, indexPatterns, ...getRangeFilter(timeRange), filter: JSON.stringify(filter), @@ -217,6 +230,7 @@ export function dataAccessLayerFactory(context: CoreStart): DataAccessLayer { ...getRangeFilter(timeRange), entityType: 'alertDetail', eventID, + agentId, }), } ); @@ -241,6 +255,7 @@ export function dataAccessLayerFactory(context: CoreStart): DataAccessLayer { indices, ancestors, descendants, + agentId, }: { dataId: string; schema: ResolverSchema; @@ -248,6 +263,7 @@ export function dataAccessLayerFactory(context: CoreStart): DataAccessLayer { indices: string[]; ancestors: number; descendants: number; + agentId: string; }): Promise { return context.http.post('/api/endpoint/resolver/tree', { body: JSON.stringify({ @@ -257,6 +273,7 @@ export function dataAccessLayerFactory(context: CoreStart): DataAccessLayer { schema, nodes: [dataId], indexPatterns: indices, + agentId, }), }); }, diff --git a/x-pack/plugins/security_solution/public/resolver/data_access_layer/mocks/generator_tree.ts b/x-pack/plugins/security_solution/public/resolver/data_access_layer/mocks/generator_tree.ts index 6b833c93704b4..170bfe3c6797d 100644 --- a/x-pack/plugins/security_solution/public/resolver/data_access_layer/mocks/generator_tree.ts +++ b/x-pack/plugins/security_solution/public/resolver/data_access_layer/mocks/generator_tree.ts @@ -160,6 +160,7 @@ export function generateTreeWithDAL( indices, ancestors, descendants, + agentId, }: { dataId: string; schema: ResolverSchema; @@ -167,6 +168,7 @@ export function generateTreeWithDAL( indices: string[]; ancestors: number; descendants: number; + agentId: string; }): Promise { return formattedTree.nodes; }, @@ -183,8 +185,10 @@ export function generateTreeWithDAL( parent: 'process.parent.entity_id', ancestry: 'process.Ext.ancestry', name: 'process.name', + agentId: 'agent.id', }, id: generatedTree.origin.id, + agentId: 'mockedAgentId', }, ]; }, diff --git a/x-pack/plugins/security_solution/public/resolver/data_access_layer/mocks/no_ancestors_two_children.ts b/x-pack/plugins/security_solution/public/resolver/data_access_layer/mocks/no_ancestors_two_children.ts index e883a96b162e8..d8b2836879194 100644 --- a/x-pack/plugins/security_solution/public/resolver/data_access_layer/mocks/no_ancestors_two_children.ts +++ b/x-pack/plugins/security_solution/public/resolver/data_access_layer/mocks/no_ancestors_two_children.ts @@ -121,11 +121,13 @@ export function noAncestorsTwoChildren(): { dataAccessLayer: DataAccessLayer; me timeRange, indexPatterns, limit, + agentId, }: { ids: string[]; timeRange: TimeRange; indexPatterns: string[]; limit: number; + agentId: string; }): Promise { return []; }, @@ -140,6 +142,7 @@ export function noAncestorsTwoChildren(): { dataAccessLayer: DataAccessLayer; me indices, ancestors, descendants, + agentId, }: { dataId: string; schema: ResolverSchema; @@ -147,6 +150,7 @@ export function noAncestorsTwoChildren(): { dataAccessLayer: DataAccessLayer; me indices: string[]; ancestors: number; descendants: number; + agentId: string; }): Promise { const { treeResponse } = mockTreeWithNoAncestorsAnd2Children({ originID: metadata.entityIDs.origin, @@ -169,8 +173,10 @@ export function noAncestorsTwoChildren(): { dataAccessLayer: DataAccessLayer; me parent: 'process.parent.entity_id', ancestry: 'process.Ext.ancestry', name: 'process.name', + agentId: 'agent.id', }, id: metadata.entityIDs.origin, + agentId: 'mockedAgentId', }, ]); }, diff --git a/x-pack/plugins/security_solution/public/resolver/data_access_layer/mocks/no_ancestors_two_children_in_index_called_awesome_index.ts b/x-pack/plugins/security_solution/public/resolver/data_access_layer/mocks/no_ancestors_two_children_in_index_called_awesome_index.ts index c4c7fda097e8f..3f45246b3b99a 100644 --- a/x-pack/plugins/security_solution/public/resolver/data_access_layer/mocks/no_ancestors_two_children_in_index_called_awesome_index.ts +++ b/x-pack/plugins/security_solution/public/resolver/data_access_layer/mocks/no_ancestors_two_children_in_index_called_awesome_index.ts @@ -138,11 +138,13 @@ export function noAncestorsTwoChildenInIndexCalledAwesomeIndex(): { timeRange, indexPatterns, limit, + agentId, }: { ids: string[]; timeRange: TimeRange; indexPatterns: string[]; limit: number; + agentId: string; }): Promise { return ids.map((id: string) => mockEndpointEvent({ @@ -161,6 +163,7 @@ export function noAncestorsTwoChildenInIndexCalledAwesomeIndex(): { indices, ancestors, descendants, + agentId, }: { dataId: string; schema: ResolverSchema; @@ -168,6 +171,7 @@ export function noAncestorsTwoChildenInIndexCalledAwesomeIndex(): { indices: string[]; ancestors: number; descendants: number; + agentId: string; }): Promise { const { treeResponse } = mockTreeWithNoAncestorsAnd2Children({ originID: metadata.entityIDs.origin, @@ -192,8 +196,10 @@ export function noAncestorsTwoChildenInIndexCalledAwesomeIndex(): { parent: 'process.parent.entity_id', ancestry: 'process.Ext.ancestry', name: 'process.name', + agentId: 'agent.id', }, id: metadata.entityIDs.origin, + agentId: 'mockedAgentId', }, ]); } diff --git a/x-pack/plugins/security_solution/public/resolver/data_access_layer/mocks/no_ancestors_two_children_with_related_events_on_origin.ts b/x-pack/plugins/security_solution/public/resolver/data_access_layer/mocks/no_ancestors_two_children_with_related_events_on_origin.ts index 30f7e07bf041a..c697e719f9d0f 100644 --- a/x-pack/plugins/security_solution/public/resolver/data_access_layer/mocks/no_ancestors_two_children_with_related_events_on_origin.ts +++ b/x-pack/plugins/security_solution/public/resolver/data_access_layer/mocks/no_ancestors_two_children_with_related_events_on_origin.ts @@ -140,11 +140,13 @@ export function noAncestorsTwoChildrenWithRelatedEventsOnOrigin(): { timeRange, indexPatterns, limit, + agentId, }: { ids: string[]; timeRange: TimeRange; indexPatterns: string[]; limit: number; + agentId: string; }): Promise { return nodeDataResponse; }, @@ -159,6 +161,7 @@ export function noAncestorsTwoChildrenWithRelatedEventsOnOrigin(): { indices, ancestors, descendants, + agentId, }: { dataId: string; schema: ResolverSchema; @@ -166,6 +169,7 @@ export function noAncestorsTwoChildrenWithRelatedEventsOnOrigin(): { indices: string[]; ancestors: number; descendants: number; + agentId: string; }): Promise { return tree.nodes; }, @@ -182,8 +186,10 @@ export function noAncestorsTwoChildrenWithRelatedEventsOnOrigin(): { parent: 'process.parent.entity_id', ancestry: 'process.Ext.ancestry', name: 'process.name', + agentId: 'agent.id', }, id: metadata.entityIDs.origin, + agentId: 'mockedAgentId', }, ]; }, diff --git a/x-pack/plugins/security_solution/public/resolver/data_access_layer/mocks/one_node_with_paginated_related_events.ts b/x-pack/plugins/security_solution/public/resolver/data_access_layer/mocks/one_node_with_paginated_related_events.ts index dc7031acdbd91..464478c0d507c 100644 --- a/x-pack/plugins/security_solution/public/resolver/data_access_layer/mocks/one_node_with_paginated_related_events.ts +++ b/x-pack/plugins/security_solution/public/resolver/data_access_layer/mocks/one_node_with_paginated_related_events.ts @@ -31,6 +31,7 @@ interface Metadata { origin: 'origin'; }; } + export function oneNodeWithPaginatedEvents(): { dataAccessLayer: DataAccessLayer; metadata: Metadata; @@ -132,11 +133,13 @@ export function oneNodeWithPaginatedEvents(): { timeRange, indexPatterns, limit, + agentId, }: { ids: string[]; timeRange: TimeRange; indexPatterns: string[]; limit: number; + agentId: string; }): Promise { return []; }, @@ -151,6 +154,7 @@ export function oneNodeWithPaginatedEvents(): { indices, ancestors, descendants, + agentId, }: { dataId: string; schema: ResolverSchema; @@ -158,6 +162,7 @@ export function oneNodeWithPaginatedEvents(): { indices: string[]; ancestors: number; descendants: number; + agentId: string; }): Promise { return mockTree.nodes; }, @@ -174,8 +179,10 @@ export function oneNodeWithPaginatedEvents(): { parent: 'process.parent.entity_id', ancestry: 'process.Ext.ancestry', name: 'process.name', + agentId: 'agent.id', }, id: metadata.entityIDs.origin, + agentId: 'mockedAgentId', }, ]; }, diff --git a/x-pack/plugins/security_solution/public/resolver/mocks/tree_fetcher_parameters.ts b/x-pack/plugins/security_solution/public/resolver/mocks/tree_fetcher_parameters.ts index daffa1c5e0b09..d80d07996d62d 100644 --- a/x-pack/plugins/security_solution/public/resolver/mocks/tree_fetcher_parameters.ts +++ b/x-pack/plugins/security_solution/public/resolver/mocks/tree_fetcher_parameters.ts @@ -15,5 +15,6 @@ export function mockTreeFetcherParameters(): TreeFetcherParameters { databaseDocumentID: '', indices: [], filters: {}, + agentId: '', }; } diff --git a/x-pack/plugins/security_solution/public/resolver/mocks/tree_schema.ts b/x-pack/plugins/security_solution/public/resolver/mocks/tree_schema.ts index e2d20cb6d5c23..201df86aeb654 100644 --- a/x-pack/plugins/security_solution/public/resolver/mocks/tree_schema.ts +++ b/x-pack/plugins/security_solution/public/resolver/mocks/tree_schema.ts @@ -16,6 +16,7 @@ const defaultProcessSchema = { id: 'process.entity_id', name: 'process.name', parent: 'process.parent.entity_id', + agentId: 'agent.id', }; /* Factory function returning the source and schema for the endpoint data source */ diff --git a/x-pack/plugins/security_solution/public/resolver/models/tree_fetcher_parameters.test.ts b/x-pack/plugins/security_solution/public/resolver/models/tree_fetcher_parameters.test.ts index 81ceda82157bd..6563d95d71417 100644 --- a/x-pack/plugins/security_solution/public/resolver/models/tree_fetcher_parameters.test.ts +++ b/x-pack/plugins/security_solution/public/resolver/models/tree_fetcher_parameters.test.ts @@ -8,61 +8,64 @@ import type { TreeFetcherParameters } from '../types'; import { equal } from './tree_fetcher_parameters'; + describe('TreeFetcherParameters#equal:', () => { const cases: Array<[TreeFetcherParameters, TreeFetcherParameters, boolean]> = [ // different databaseDocumentID [ - { databaseDocumentID: 'a', indices: [], filters: {} }, - { databaseDocumentID: 'b', indices: [], filters: {} }, + { databaseDocumentID: 'a', indices: [], filters: {}, agentId: '' }, + { databaseDocumentID: 'b', indices: [], filters: {}, agentId: '' }, false, ], // different indices length [ - { databaseDocumentID: 'a', indices: [''], filters: {} }, - { databaseDocumentID: 'a', indices: [], filters: {} }, + { databaseDocumentID: 'a', indices: [''], filters: {}, agentId: '' }, + { databaseDocumentID: 'a', indices: [], filters: {}, agentId: '' }, false, ], // same indices length, different databaseDocumentID [ - { databaseDocumentID: 'a', indices: [''], filters: {} }, - { databaseDocumentID: 'b', indices: [''], filters: {} }, + { databaseDocumentID: 'a', indices: [''], filters: {}, agentId: '' }, + { databaseDocumentID: 'b', indices: [''], filters: {}, agentId: '' }, false, ], // 1 item in `indices` [ - { databaseDocumentID: 'b', indices: [''], filters: {} }, - { databaseDocumentID: 'b', indices: [''], filters: {} }, + { databaseDocumentID: 'b', indices: [''], filters: {}, agentId: '' }, + { databaseDocumentID: 'b', indices: [''], filters: {}, agentId: '' }, true, ], // 2 item in `indices` [ - { databaseDocumentID: 'b', indices: ['1', '2'], filters: {} }, - { databaseDocumentID: 'b', indices: ['1', '2'], filters: {} }, + { databaseDocumentID: 'b', indices: ['1', '2'], filters: {}, agentId: '' }, + { databaseDocumentID: 'b', indices: ['1', '2'], filters: {}, agentId: '' }, true, ], // 2 item in `indices`, but order inversed [ - { databaseDocumentID: 'b', indices: ['2', '1'], filters: {} }, - { databaseDocumentID: 'b', indices: ['1', '2'], filters: {} }, + { databaseDocumentID: 'b', indices: ['2', '1'], filters: {}, agentId: '' }, + { databaseDocumentID: 'b', indices: ['1', '2'], filters: {}, agentId: '' }, true, ], // all parameters the same, except for the filters [ - { databaseDocumentID: 'b', indices: [], filters: {} }, + { databaseDocumentID: 'b', indices: [], filters: {}, agentId: '' }, { databaseDocumentID: 'b', indices: [], filters: { to: 'to', from: 'from' }, + agentId: '', }, false, ], // all parameters the same, except for the filters.to [ - { databaseDocumentID: 'b', indices: [], filters: { to: '100' } }, + { databaseDocumentID: 'b', indices: [], filters: { to: '100' }, agentId: '' }, { databaseDocumentID: 'b', indices: [], filters: { to: 'to' }, + agentId: '', }, false, ], @@ -72,8 +75,9 @@ describe('TreeFetcherParameters#equal:', () => { databaseDocumentID: 'b', indices: [], filters: { to: 'to' }, + agentId: '', }, - { databaseDocumentID: 'b', indices: [], filters: { to: '100' } }, + { databaseDocumentID: 'b', indices: [], filters: { to: '100' }, agentId: '' }, false, ], // all parameters the same @@ -82,11 +86,13 @@ describe('TreeFetcherParameters#equal:', () => { databaseDocumentID: 'b', indices: [], filters: { to: 'to', from: 'from' }, + agentId: '', }, { databaseDocumentID: 'b', indices: [], filters: { to: 'to', from: 'from' }, + agentId: '', }, true, ], @@ -96,11 +102,13 @@ describe('TreeFetcherParameters#equal:', () => { databaseDocumentID: 'b', indices: [], filters: { to: 'to' }, + agentId: '', }, { databaseDocumentID: 'b', indices: [], filters: { to: 'to' }, + agentId: '', }, true, ], diff --git a/x-pack/plugins/security_solution/public/resolver/store/data/action.ts b/x-pack/plugins/security_solution/public/resolver/store/data/action.ts index dc86fb810dee5..05f9efd748bd4 100644 --- a/x-pack/plugins/security_solution/public/resolver/store/data/action.ts +++ b/x-pack/plugins/security_solution/public/resolver/store/data/action.ts @@ -133,6 +133,8 @@ export const serverReturnedNodeEventsInCategory = actionCreator<{ * The category that `events` have in common. */ readonly eventCategory: string; + + readonly agentId: string; }>('SERVER_RETURNED_NODE_EVENTS_IN_CATEGORY'); /** diff --git a/x-pack/plugins/security_solution/public/resolver/store/data/node_events_in_category_model.ts b/x-pack/plugins/security_solution/public/resolver/store/data/node_events_in_category_model.ts index cddab8babd12d..5dabbd376c4c1 100644 --- a/x-pack/plugins/security_solution/public/resolver/store/data/node_events_in_category_model.ts +++ b/x-pack/plugins/security_solution/public/resolver/store/data/node_events_in_category_model.ts @@ -42,6 +42,7 @@ export function updatedWith( events: [...first.events, ...second.events], cursor: second.cursor, lastCursorRequested: null, + agentId: first.agentId, }; } else { return undefined; diff --git a/x-pack/plugins/security_solution/public/resolver/store/data/reducer.test.ts b/x-pack/plugins/security_solution/public/resolver/store/data/reducer.test.ts index a55a0cfd7fee5..d99ca6a808031 100644 --- a/x-pack/plugins/security_solution/public/resolver/store/data/reducer.test.ts +++ b/x-pack/plugins/security_solution/public/resolver/store/data/reducer.test.ts @@ -73,6 +73,7 @@ describe('Resolver Data Middleware', () => { databaseDocumentID: '', indices: [], filters: {}, + agentId: '', }, detectedBounds, }) diff --git a/x-pack/plugins/security_solution/public/resolver/store/data/reducer.ts b/x-pack/plugins/security_solution/public/resolver/store/data/reducer.ts index 4c289efd76b45..12733affeeb06 100644 --- a/x-pack/plugins/security_solution/public/resolver/store/data/reducer.ts +++ b/x-pack/plugins/security_solution/public/resolver/store/data/reducer.ts @@ -48,6 +48,7 @@ export const dataReducer = reducerWithInitialState(initialAnalyzerState) databaseDocumentID, indices, filters, + agentId: state.tree?.lastResponse?.parameters?.agentId || '', }, }; state.resolverComponentInstanceID = resolverComponentInstanceID; @@ -78,6 +79,7 @@ export const dataReducer = reducerWithInitialState(initialAnalyzerState) databaseDocumentID: parameters.databaseDocumentID, indices: parameters.indices, filters: parameters.filters, + agentId: parameters.agentId, }, }; return draft; @@ -104,6 +106,14 @@ export const dataReducer = reducerWithInitialState(initialAnalyzerState) /** Only handle this if we are expecting a response */ state.tree = { ...state.tree, + ...(state.tree?.currentParameters + ? { + currentParameters: { + ...state.tree.currentParameters, + agentId: parameters.agentId, + }, + } + : {}), /** * Store the last received data, as well as the databaseDocumentID it relates to. */ @@ -143,12 +153,12 @@ export const dataReducer = reducerWithInitialState(initialAnalyzerState) .withHandling( immerCase( serverReturnedNodeEventsInCategory, - (draft, { id, events, cursor, nodeID, eventCategory }) => { + (draft, { id, events, cursor, nodeID, eventCategory, agentId }) => { // The data in the action could be irrelevant if the panel view or parameters have changed since the corresponding request was made. In that case, ignore this action. const state: Draft = draft[id].data; if ( nodeEventsInCategoryModel.isRelevantToPanelViewAndParameters( - { events, cursor, nodeID, eventCategory }, + { events, cursor, nodeID, eventCategory, agentId }, selectors.panelViewAndParameters(state) ) ) { @@ -159,6 +169,7 @@ export const dataReducer = reducerWithInitialState(initialAnalyzerState) cursor, nodeID, eventCategory, + agentId, }); // The 'updatedWith' method will fail if the old and new data don't represent events from the same node and event category if (updated) { @@ -171,7 +182,7 @@ export const dataReducer = reducerWithInitialState(initialAnalyzerState) } } else { // There is no existing data, use the new data. - state.nodeEventsInCategory = { events, cursor, nodeID, eventCategory }; + state.nodeEventsInCategory = { events, cursor, nodeID, eventCategory, agentId }; } // else the action is stale, ignore it } diff --git a/x-pack/plugins/security_solution/public/resolver/store/data/selectors.test.ts b/x-pack/plugins/security_solution/public/resolver/store/data/selectors.test.ts index cfa0e752f6fea..8034bf361fddf 100644 --- a/x-pack/plugins/security_solution/public/resolver/store/data/selectors.test.ts +++ b/x-pack/plugins/security_solution/public/resolver/store/data/selectors.test.ts @@ -174,7 +174,7 @@ describe('data state', () => { has an error: false has more children: false has more ancestors: false - parameters to fetch: {\\"databaseDocumentID\\":\\"databaseDocumentID\\",\\"indices\\":[],\\"filters\\":{}} + parameters to fetch: {\\"databaseDocumentID\\":\\"databaseDocumentID\\",\\"indices\\":[],\\"filters\\":{},\\"agentId\\":\\"\\"} requires a pending request to be aborted: null" `); }); @@ -185,7 +185,7 @@ describe('data state', () => { actions = [ appRequestedResolverData({ id, - parameters: { databaseDocumentID, indices: [], filters: {} }, + parameters: { databaseDocumentID, indices: [], filters: {}, agentId: '' }, }), ]; }); @@ -204,7 +204,7 @@ describe('data state', () => { has more children: false has more ancestors: false parameters to fetch: null - requires a pending request to be aborted: {\\"databaseDocumentID\\":\\"databaseDocumentID\\",\\"indices\\":[],\\"filters\\":{}}" + requires a pending request to be aborted: {\\"databaseDocumentID\\":\\"databaseDocumentID\\",\\"indices\\":[],\\"filters\\":{},\\"agentId\\":\\"\\"}" `); }); }); @@ -226,7 +226,7 @@ describe('data state', () => { }), appRequestedResolverData({ id, - parameters: { databaseDocumentID, indices: [], filters: {} }, + parameters: { databaseDocumentID, indices: [], filters: {}, agentId: '' }, }), ]; }); @@ -251,7 +251,7 @@ describe('data state', () => { actions.push( serverFailedToReturnResolverData({ id, - parameters: { databaseDocumentID, indices: [], filters: {} }, + parameters: { databaseDocumentID, indices: [], filters: {}, agentId: '' }, }) ); }); @@ -294,7 +294,12 @@ describe('data state', () => { // this happens when the middleware starts the request appRequestedResolverData({ id, - parameters: { databaseDocumentID: firstDatabaseDocumentID, indices: [], filters: {} }, + parameters: { + databaseDocumentID: firstDatabaseDocumentID, + indices: [], + filters: {}, + agentId: '', + }, }), // receive a different databaseDocumentID. this should cause the middleware to abort the existing request and start a new one appReceivedNewExternalProperties({ @@ -331,8 +336,8 @@ describe('data state', () => { has an error: false has more children: false has more ancestors: false - parameters to fetch: {\\"databaseDocumentID\\":\\"second databaseDocumentID\\",\\"indices\\":[],\\"filters\\":{}} - requires a pending request to be aborted: {\\"databaseDocumentID\\":\\"first databaseDocumentID\\",\\"indices\\":[],\\"filters\\":{}}" + parameters to fetch: {\\"databaseDocumentID\\":\\"second databaseDocumentID\\",\\"indices\\":[],\\"filters\\":{},\\"agentId\\":\\"\\"} + requires a pending request to be aborted: {\\"databaseDocumentID\\":\\"first databaseDocumentID\\",\\"indices\\":[],\\"filters\\":{},\\"agentId\\":\\"\\"}" `); }); describe('and when the old request was aborted', () => { @@ -340,7 +345,12 @@ describe('data state', () => { actions.push( appAbortedResolverDataRequest({ id, - parameters: { databaseDocumentID: firstDatabaseDocumentID, indices: [], filters: {} }, + parameters: { + databaseDocumentID: firstDatabaseDocumentID, + indices: [], + filters: {}, + agentId: '', + }, }) ); }); @@ -361,7 +371,7 @@ describe('data state', () => { has an error: false has more children: false has more ancestors: false - parameters to fetch: {\\"databaseDocumentID\\":\\"second databaseDocumentID\\",\\"indices\\":[],\\"filters\\":{}} + parameters to fetch: {\\"databaseDocumentID\\":\\"second databaseDocumentID\\",\\"indices\\":[],\\"filters\\":{},\\"agentId\\":\\"\\"} requires a pending request to be aborted: null" `); }); @@ -374,6 +384,7 @@ describe('data state', () => { databaseDocumentID: secondDatabaseDocumentID, indices: [], filters: {}, + agentId: '', }, }) ); @@ -423,14 +434,14 @@ describe('data state', () => { }), appRequestedResolverData({ id, - parameters: { databaseDocumentID, indices: [], filters: {} }, + parameters: { databaseDocumentID, indices: [], filters: {}, agentId: '' }, }), serverReturnedResolverData({ id, result: resolverTree, dataSource, schema, - parameters: { databaseDocumentID, indices: [], filters: {} }, + parameters: { databaseDocumentID, indices: [], filters: {}, agentId: '' }, }), ]; }); @@ -461,6 +472,7 @@ describe('data state', () => { databaseDocumentID, indices: [], filters: timeRangeFilters, + agentId: '', }, }), serverReturnedResolverData({ @@ -472,6 +484,7 @@ describe('data state', () => { databaseDocumentID, indices: [], filters: timeRangeFilters, + agentId: '', }, }), ]; @@ -680,6 +693,7 @@ describe('data state', () => { databaseDocumentID: '', indices: ['someNonDefaultIndex'], filters: {}, + agentId: '', }, }), ]; @@ -709,6 +723,7 @@ describe('data state', () => { databaseDocumentID: '', indices: ['defaultIndex'], filters: {}, + agentId: '', }, }), appReceivedNewExternalProperties({ @@ -726,6 +741,7 @@ describe('data state', () => { databaseDocumentID: '', indices: ['someNonDefaultIndex', 'someOtherIndex'], filters: {}, + agentId: '', }, }), ]; diff --git a/x-pack/plugins/security_solution/public/resolver/store/data/selectors.ts b/x-pack/plugins/security_solution/public/resolver/store/data/selectors.ts index 9be9f28034b61..cda77c97d1ded 100644 --- a/x-pack/plugins/security_solution/public/resolver/store/data/selectors.ts +++ b/x-pack/plugins/security_solution/public/resolver/store/data/selectors.ts @@ -54,6 +54,10 @@ export function overriddenTimeBounds(state: DataState) { return state.overriddenTimeBounds; } +export function agentId(state: DataState): string { + return state.tree?.lastResponse?.parameters.agentId || ''; +} + /** * If a request was made and it threw an error or returned a failure response code. */ diff --git a/x-pack/plugins/security_solution/public/resolver/store/middleware/current_related_event_fetcher.ts b/x-pack/plugins/security_solution/public/resolver/store/middleware/current_related_event_fetcher.ts index 78d45fa5fcc74..cd6d3594ba8b0 100644 --- a/x-pack/plugins/security_solution/public/resolver/store/middleware/current_related_event_fetcher.ts +++ b/x-pack/plugins/security_solution/public/resolver/store/middleware/current_related_event_fetcher.ts @@ -54,6 +54,7 @@ export function CurrentRelatedEventFetcher( api.dispatch(appRequestedCurrentRelatedEventData({ id })); const detectedBounds = selectors.detectedBounds(state.analyzer[id]); + const agentId = selectors.agentId(state.analyzer[id]); const timeRangeFilters = detectedBounds !== undefined ? undefined : selectors.timeRangeFilters(state.analyzer[id]); let result: SafeResolverEvent | null = null; @@ -66,6 +67,7 @@ export function CurrentRelatedEventFetcher( winlogRecordID, indexPatterns: indices, timeRange: timeRangeFilters, + agentId, }); } catch (error) { api.dispatch(serverFailedToReturnCurrentRelatedEventData({ id })); diff --git a/x-pack/plugins/security_solution/public/resolver/store/middleware/node_data_fetcher.ts b/x-pack/plugins/security_solution/public/resolver/store/middleware/node_data_fetcher.ts index 532d8a0e4b6f9..5574a4c746226 100644 --- a/x-pack/plugins/security_solution/public/resolver/store/middleware/node_data_fetcher.ts +++ b/x-pack/plugins/security_solution/public/resolver/store/middleware/node_data_fetcher.ts @@ -61,6 +61,7 @@ export function NodeDataFetcher( let results: SafeResolverEvent[] | undefined; try { const detectedBounds = selectors.detectedBounds(state.analyzer[id]); + const agentId = selectors.agentId(state.analyzer[id]); const timeRangeFilters = detectedBounds !== undefined ? undefined : selectors.timeRangeFilters(state.analyzer[id]); results = await dataAccessLayer.nodeData({ @@ -68,6 +69,7 @@ export function NodeDataFetcher( timeRange: timeRangeFilters, indexPatterns: indices, limit: nodeDataLimit, + agentId, }); } catch (error) { /** diff --git a/x-pack/plugins/security_solution/public/resolver/store/middleware/related_events_fetcher.ts b/x-pack/plugins/security_solution/public/resolver/store/middleware/related_events_fetcher.ts index 8d468eff9f3f0..55f5958e0df53 100644 --- a/x-pack/plugins/security_solution/public/resolver/store/middleware/related_events_fetcher.ts +++ b/x-pack/plugins/security_solution/public/resolver/store/middleware/related_events_fetcher.ts @@ -37,6 +37,7 @@ export function RelatedEventsFetcher( const oldParams = last[id]; const detectedBounds = selectors.detectedBounds(state.analyzer[id]); + const agentId = selectors.agentId(state.analyzer[id]); const timeRangeFilters = detectedBounds !== undefined ? undefined : selectors.timeRangeFilters(state.analyzer[id]); // Update this each time before fetching data (or even if we don't fetch data) so that subsequent actions that call this (concurrently) will have up to date info. @@ -61,6 +62,7 @@ export function RelatedEventsFetcher( after: cursor, indexPatterns: indices, timeRange: timeRangeFilters, + agentId, }); } else { result = await dataAccessLayer.eventsWithEntityIDAndCategory({ @@ -68,6 +70,7 @@ export function RelatedEventsFetcher( category: eventCategory, indexPatterns: indices, timeRange: timeRangeFilters, + agentId, }); } } catch (error) { @@ -84,6 +87,7 @@ export function RelatedEventsFetcher( eventCategory, cursor: result.nextEvent, nodeID, + agentId, }) ); } diff --git a/x-pack/plugins/security_solution/public/resolver/store/middleware/resolver_tree_fetcher.ts b/x-pack/plugins/security_solution/public/resolver/store/middleware/resolver_tree_fetcher.ts index 08e57529bc6df..110185b1e7584 100644 --- a/x-pack/plugins/security_solution/public/resolver/store/middleware/resolver_tree_fetcher.ts +++ b/x-pack/plugins/security_solution/public/resolver/store/middleware/resolver_tree_fetcher.ts @@ -24,6 +24,7 @@ import { serverReturnedResolverData, } from '../data/action'; import type { State } from '../../../common/store/types'; + /** * A function that handles syncing ResolverTree data w/ the current entity ID. * This will make a request anytime the entityID changes (to something other than undefined.) @@ -42,7 +43,7 @@ export function ResolverTreeFetcher( return async (id: string) => { // const id = 'alerts-page'; const state = api.getState(); - const databaseParameters = selectors.treeParametersToFetch(state.analyzer[id]); + let databaseParameters = selectors.treeParametersToFetch(state.analyzer[id]); if (selectors.treeRequestParametersToAbort(state.analyzer[id]) && lastRequestAbortController) { lastRequestAbortController.abort(); // calling abort will cause an action to be fired @@ -51,9 +52,9 @@ export function ResolverTreeFetcher( let entityIDToFetch: string | undefined; let dataSource: string | undefined; let dataSourceSchema: ResolverSchema | undefined; + let dataSourceAgentId: string | undefined; let result: ResolverNode[] | undefined; const timeRangeFilters = selectors.timeRangeFilters(state.analyzer[id]); - // Inform the state that we've made the request. Without this, the middleware will try to make the request again // immediately. api.dispatch(appRequestedResolverData({ id, parameters: databaseParameters })); @@ -63,6 +64,7 @@ export function ResolverTreeFetcher( indices: databaseParameters.indices, signal: lastRequestAbortController.signal, }); + if (matchingEntities.length < 1) { // If no entity_id could be found for the _id, bail out with a failure. api.dispatch( @@ -73,8 +75,17 @@ export function ResolverTreeFetcher( ); return; } - ({ id: entityIDToFetch, schema: dataSourceSchema, name: dataSource } = matchingEntities[0]); + ({ + id: entityIDToFetch, + schema: dataSourceSchema, + name: dataSource, + agentId: dataSourceAgentId, + } = matchingEntities[0]); + databaseParameters = { + ...databaseParameters, + agentId: dataSourceAgentId ?? '', + }; result = await dataAccessLayer.resolverTree({ dataId: entityIDToFetch, schema: dataSourceSchema, @@ -82,6 +93,7 @@ export function ResolverTreeFetcher( indices: databaseParameters.indices, ancestors: ancestorsRequestAmount(dataSourceSchema), descendants: descendantsRequestAmount(), + agentId: databaseParameters.agentId, }); const resolverTree: NewResolverTree = { @@ -96,6 +108,7 @@ export function ResolverTreeFetcher( indices: databaseParameters.indices, ancestors: ancestorsRequestAmount(dataSourceSchema), descendants: descendantsRequestAmount(), + agentId: databaseParameters.agentId, }); if (unboundedTree.length > 0) { const timestamps = unboundedTree @@ -143,9 +156,19 @@ export function ResolverTreeFetcher( } catch (error) { // https://developer.mozilla.org/en-US/docs/Web/API/DOMException#exception-AbortError if (error instanceof DOMException && error.name === 'AbortError') { - api.dispatch(appAbortedResolverDataRequest({ id, parameters: databaseParameters })); + api.dispatch( + appAbortedResolverDataRequest({ + id, + parameters: databaseParameters, + }) + ); } else { - api.dispatch(serverFailedToReturnResolverData({ id, parameters: databaseParameters })); + api.dispatch( + serverFailedToReturnResolverData({ + id, + parameters: databaseParameters, + }) + ); } } } diff --git a/x-pack/plugins/security_solution/public/resolver/store/selectors.ts b/x-pack/plugins/security_solution/public/resolver/store/selectors.ts index 93843d9d0b6ae..3deccbe674d96 100644 --- a/x-pack/plugins/security_solution/public/resolver/store/selectors.ts +++ b/x-pack/plugins/security_solution/public/resolver/store/selectors.ts @@ -43,6 +43,8 @@ export const translation = composeSelectors(cameraStateSelector, cameraSelectors export const detectedBounds = composeSelectors(dataStateSelector, dataSelectors.detectedBounds); +export const agentId = composeSelectors(dataStateSelector, dataSelectors.agentId); + export const overriddenTimeBounds = composeSelectors( dataStateSelector, dataSelectors.overriddenTimeBounds diff --git a/x-pack/plugins/security_solution/public/resolver/types.ts b/x-pack/plugins/security_solution/public/resolver/types.ts index 7c21667df34bf..60ad9cec4c843 100644 --- a/x-pack/plugins/security_solution/public/resolver/types.ts +++ b/x-pack/plugins/security_solution/public/resolver/types.ts @@ -28,6 +28,7 @@ export interface AnalyzerState { export interface AnalyzerById { [id: string]: ResolverState; } + /** * Redux state for the Resolver feature. Properties on this interface are populated via multiple reducers using redux's `combineReducers`. */ @@ -200,6 +201,8 @@ export interface TreeFetcherParameters { indices: string[]; filters: TimeFilters; + + agentId: string; } /** @@ -236,6 +239,8 @@ export interface NodeEventsInCategoryState { parameters: PanelViewAndParameters; }; + agentId: string; + /** * Flag for showing an error message when fetching additional related events. */ @@ -520,6 +525,7 @@ export interface DurationDetails { duration: number | '<1'; durationType: DurationTypes; } + /** * Values shared between two vertices joined by an edge line. */ @@ -574,6 +580,7 @@ export type ProcessWithWidthMetadata = { */ interface ResizeObserverConstructor { prototype: ResizeObserver; + new (callback: ResizeObserverCallback): ResizeObserver; } @@ -597,10 +604,12 @@ export interface SideEffectors { * Use instead of the `ResizeObserver` global. */ ResizeObserver: ResizeObserverConstructor; + /** * Use this instead of the Clipboard API's `writeText` method. */ writeTextToClipboard(text: string): Promise; + /** * Use this instead of `Element.prototype.getBoundingClientRect` . */ @@ -698,10 +707,12 @@ export interface DataAccessLayer { entityID, timeRange, indexPatterns, + agentId, }: { entityID: string; timeRange?: TimeRange; indexPatterns: string[]; + agentId: string; }) => Promise; /** @@ -714,12 +725,14 @@ export interface DataAccessLayer { after, timeRange, indexPatterns, + agentId, }: { entityID: string; category: string; after?: string; timeRange?: TimeRange; indexPatterns: string[]; + agentId: string; }) => Promise; /** @@ -731,11 +744,13 @@ export interface DataAccessLayer { timeRange, indexPatterns, limit, + agentId, }: { ids: string[]; timeRange?: TimeRange; indexPatterns: string[]; limit: number; + agentId: string; }): Promise; /** @@ -749,6 +764,7 @@ export interface DataAccessLayer { timeRange, indexPatterns, winlogRecordID, + agentId, }: { nodeID: string; eventCategory: string[]; @@ -757,6 +773,7 @@ export interface DataAccessLayer { winlogRecordID: string; timeRange?: TimeRange; indexPatterns: string[]; + agentId: string; }) => Promise; /** @@ -769,6 +786,7 @@ export interface DataAccessLayer { indices, ancestors, descendants, + agentId, }: { dataId: string; schema: ResolverSchema; @@ -776,6 +794,7 @@ export interface DataAccessLayer { indices: string[]; ancestors: number; descendants: number; + agentId: string; }): Promise; /** diff --git a/x-pack/plugins/security_solution/public/resolver/view/clickthrough.test.tsx b/x-pack/plugins/security_solution/public/resolver/view/clickthrough.test.tsx index 8c53ebaf53307..afa016bb03b79 100644 --- a/x-pack/plugins/security_solution/public/resolver/view/clickthrough.test.tsx +++ b/x-pack/plugins/security_solution/public/resolver/view/clickthrough.test.tsx @@ -279,11 +279,13 @@ describe.skip('Resolver, when using a generated tree with 20 generations, 4 chil timeRange, indexPatterns, limit, + agentId, }: { ids: string[]; timeRange: TimeRange; indexPatterns: string[]; limit: number; + agentId: string; }): Promise => { if (throwError) { throw new Error( @@ -291,7 +293,7 @@ describe.skip('Resolver, when using a generated tree with 20 generations, 4 chil ); } - return generatorDAL.nodeData({ ids, timeRange, indexPatterns, limit }); + return generatorDAL.nodeData({ ids, timeRange, indexPatterns, limit, agentId }); }; // create a simulator using most of the generator's data access layer, but let's use our nodeDataError diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/properties/helpers.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/properties/helpers.tsx index a0293d3941279..1a217abd674e0 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/properties/helpers.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/properties/helpers.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { EuiBadge, EuiButtonIcon, EuiToolTip } from '@elastic/eui'; +import { EuiBadge, EuiButtonIcon, EuiFlexGroup, EuiFlexItem, EuiToolTip } from '@elastic/eui'; import React, { useCallback } from 'react'; import styled from 'styled-components'; @@ -20,15 +20,22 @@ const NotesCountBadge = styled(EuiBadge)` NotesCountBadge.displayName = 'NotesCountBadge'; -interface NotesButtonProps { - ariaLabel?: string; - isDisabled?: boolean; - showNotes: boolean; - toggleShowNotes: () => void | ((eventId: string) => void); - toolTip?: string; - timelineType: TimelineTypeLiteral; - eventId?: string; -} +export const NotificationDot = styled.span` + position: absolute; + display: block; + width: 6px; + height: 6px; + border-radius: 50%; + background-color: ${({ theme }) => theme.eui.euiColorDanger}; + top: 17%; + left: 52%; +`; + +const NotesButtonContainer = styled(EuiFlexGroup)` + position: relative; +`; + +export const NOTES_BUTTON_CLASS_NAME = 'notes-button'; interface SmallNotesButtonProps { ariaLabel?: string; @@ -36,12 +43,14 @@ interface SmallNotesButtonProps { toggleShowNotes: (eventId?: string) => void; timelineType: TimelineTypeLiteral; eventId?: string; + /** + * Number of notes. If > 0, then a red dot is shown in the top right corner of the icon. + */ + notesCount: number; } -export const NOTES_BUTTON_CLASS_NAME = 'notes-button'; - const SmallNotesButton = React.memo( - ({ ariaLabel = i18n.NOTES, isDisabled, toggleShowNotes, timelineType, eventId }) => { + ({ ariaLabel = i18n.NOTES, isDisabled, toggleShowNotes, timelineType, eventId, notesCount }) => { const isTemplate = timelineType === TimelineType.template; const onClick = useCallback(() => { if (eventId != null) { @@ -52,23 +61,52 @@ const SmallNotesButton = React.memo( }, [toggleShowNotes, eventId]); return ( - + + + {notesCount > 0 ? : null} + + + ); } ); SmallNotesButton.displayName = 'SmallNotesButton'; +interface NotesButtonProps { + ariaLabel?: string; + isDisabled?: boolean; + showNotes: boolean; + toggleShowNotes: () => void | ((eventId: string) => void); + toolTip?: string; + timelineType: TimelineTypeLiteral; + eventId?: string; + /** + * Number of notes associated with the event. + * Defaults to 0 + */ + notesCount?: number; +} + export const NotesButton = React.memo( - ({ ariaLabel, isDisabled, showNotes, timelineType, toggleShowNotes, toolTip, eventId }) => + ({ + ariaLabel, + isDisabled, + showNotes, + timelineType, + toggleShowNotes, + toolTip, + eventId, + notesCount = 0, + }) => showNotes ? ( ( toggleShowNotes={toggleShowNotes} timelineType={timelineType} eventId={eventId} + notesCount={notesCount} /> ) : ( @@ -85,6 +124,7 @@ export const NotesButton = React.memo( toggleShowNotes={toggleShowNotes} timelineType={timelineType} eventId={eventId} + notesCount={notesCount} /> ) diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/eql/index.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/eql/index.tsx index b9c8fd9edada5..38d2ade2d985c 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/eql/index.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/eql/index.tsx @@ -16,6 +16,11 @@ import { InPortal } from 'react-reverse-portal'; import type { EuiDataGridControlColumn } from '@elastic/eui'; import { DataLoadingState } from '@kbn/unified-data-table'; +import { useExpandableFlyoutApi } from '@kbn/expandable-flyout'; +import { + DocumentDetailsLeftPanelKey, + DocumentDetailsRightPanelKey, +} from '../../../../../flyout/document_details/shared/constants/panel_keys'; import { InputsModelId } from '../../../../../common/store/inputs/constants'; import type { ControlColumnProps } from '../../../../../../common/types'; import { useDeepEqualSelector } from '../../../../../common/hooks/use_selector'; @@ -57,6 +62,7 @@ import { UnifiedTimelineBody } from '../../body/unified_timeline_body'; import { EqlTabHeader } from './header'; import { useTimelineColumns } from '../shared/use_timeline_columns'; import { useTimelineControlColumn } from '../shared/use_timeline_control_columns'; +import { LeftPanelNotesTab } from '../../../../../flyout/document_details/left'; export type Props = TimelineTabCommonProps & PropsFromRedux; @@ -135,12 +141,54 @@ export const EqlTabContentComponent: React.FC = ({ timerangeKind, }); + const expandableFlyoutDisabled = useIsExperimentalFeatureEnabled('expandableFlyoutDisabled'); + const { openFlyout } = useExpandableFlyoutApi(); + const securitySolutionNotesEnabled = useIsExperimentalFeatureEnabled( + 'securitySolutionNotesEnabled' + ); + const onToggleShowNotes = useCallback( + (eventId?: string) => { + const indexName = selectedPatterns.join(','); + if (eventId && !expandableFlyoutDisabled && securitySolutionNotesEnabled) { + openFlyout({ + right: { + id: DocumentDetailsRightPanelKey, + params: { + id: eventId, + indexName, + scopeId: timelineId, + }, + }, + left: { + id: DocumentDetailsLeftPanelKey, + path: { + tab: LeftPanelNotesTab, + }, + params: { + id: eventId, + indexName, + scopeId: timelineId, + }, + }, + }); + } + }, + [ + expandableFlyoutDisabled, + openFlyout, + securitySolutionNotesEnabled, + selectedPatterns, + timelineId, + ] + ); + const leadingControlColumns = useTimelineControlColumn({ columns, sort: TIMELINE_NO_SORTING, timelineId, activeTab: TimelineTabs.eql, refetch, + onToggleShowNotes, }); const isQueryLoading = useMemo( diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/pinned/index.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/pinned/index.tsx index 27074cceb45b1..a49b63a5e57fb 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/pinned/index.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/pinned/index.tsx @@ -14,6 +14,11 @@ import { connect } from 'react-redux'; import deepEqual from 'fast-deep-equal'; import type { EuiDataGridControlColumn } from '@elastic/eui'; import { DataLoadingState } from '@kbn/unified-data-table'; +import { useExpandableFlyoutApi } from '@kbn/expandable-flyout'; +import { + DocumentDetailsLeftPanelKey, + DocumentDetailsRightPanelKey, +} from '../../../../../flyout/document_details/shared/constants/panel_keys'; import type { ControlColumnProps } from '../../../../../../common/types'; import { timelineActions, timelineSelectors } from '../../../../store'; import type { Direction } from '../../../../../../common/search_strategy'; @@ -46,6 +51,7 @@ import { import type { TimelineTabCommonProps } from '../shared/types'; import { useTimelineColumns } from '../shared/use_timeline_columns'; import { useTimelineControlColumn } from '../shared/use_timeline_control_columns'; +import { LeftPanelNotesTab } from '../../../../../flyout/document_details/left'; const ExitFullScreenContainer = styled.div` width: 180px; @@ -171,12 +177,54 @@ export const PinnedTabContentComponent: React.FC = ({ timerangeKind: undefined, }); + const expandableFlyoutDisabled = useIsExperimentalFeatureEnabled('expandableFlyoutDisabled'); + const { openFlyout } = useExpandableFlyoutApi(); + const securitySolutionNotesEnabled = useIsExperimentalFeatureEnabled( + 'securitySolutionNotesEnabled' + ); + const onToggleShowNotes = useCallback( + (eventId?: string) => { + const indexName = selectedPatterns.join(','); + if (eventId && !expandableFlyoutDisabled && securitySolutionNotesEnabled) { + openFlyout({ + right: { + id: DocumentDetailsRightPanelKey, + params: { + id: eventId, + indexName, + scopeId: timelineId, + }, + }, + left: { + id: DocumentDetailsLeftPanelKey, + path: { + tab: LeftPanelNotesTab, + }, + params: { + id: eventId, + indexName, + scopeId: timelineId, + }, + }, + }); + } + }, + [ + expandableFlyoutDisabled, + openFlyout, + securitySolutionNotesEnabled, + selectedPatterns, + timelineId, + ] + ); + const leadingControlColumns = useTimelineControlColumn({ columns, sort, timelineId, activeTab: TimelineTabs.pinned, refetch, + onToggleShowNotes, }); const isQueryLoading = useMemo( diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/query/index.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/query/index.tsx index 745cd04daaee5..443b290a53021 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/query/index.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/query/index.tsx @@ -14,6 +14,12 @@ import deepEqual from 'fast-deep-equal'; import type { EuiDataGridControlColumn } from '@elastic/eui'; import { getEsQueryConfig } from '@kbn/data-plugin/common'; import { DataLoadingState } from '@kbn/unified-data-table'; +import { useExpandableFlyoutApi } from '@kbn/expandable-flyout'; +import { + DocumentDetailsLeftPanelKey, + DocumentDetailsRightPanelKey, +} from '../../../../../flyout/document_details/shared/constants/panel_keys'; +import { LeftPanelNotesTab } from '../../../../../flyout/document_details/left'; import { useDeepEqualSelector } from '../../../../../common/hooks/use_selector'; import { useIsExperimentalFeatureEnabled } from '../../../../../common/hooks/use_experimental_features'; import { useTimelineDataFilters } from '../../../../containers/use_timeline_data_filters'; @@ -203,12 +209,54 @@ export const QueryTabContentComponent: React.FC = ({ timerangeKind, }); + const expandableFlyoutDisabled = useIsExperimentalFeatureEnabled('expandableFlyoutDisabled'); + const { openFlyout } = useExpandableFlyoutApi(); + const securitySolutionNotesEnabled = useIsExperimentalFeatureEnabled( + 'securitySolutionNotesEnabled' + ); + const onToggleShowNotes = useCallback( + (eventId?: string) => { + const indexName = selectedPatterns.join(','); + if (eventId && !expandableFlyoutDisabled && securitySolutionNotesEnabled) { + openFlyout({ + right: { + id: DocumentDetailsRightPanelKey, + params: { + id: eventId, + indexName, + scopeId: timelineId, + }, + }, + left: { + id: DocumentDetailsLeftPanelKey, + path: { + tab: LeftPanelNotesTab, + }, + params: { + id: eventId, + indexName, + scopeId: timelineId, + }, + }, + }); + } + }, + [ + expandableFlyoutDisabled, + openFlyout, + securitySolutionNotesEnabled, + selectedPatterns, + timelineId, + ] + ); + const leadingControlColumns = useTimelineControlColumn({ columns, sort, timelineId, activeTab: TimelineTabs.query, refetch, + onToggleShowNotes, }); useEffect(() => { 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 1edb154db295c..13a7e9045f20f 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 @@ -5,7 +5,7 @@ * 2.0. */ -import type { ComponentProps, FunctionComponent } from 'react'; +import type { ComponentProps, FunctionComponent, PropsWithChildren } from 'react'; import React, { useEffect } from 'react'; import QueryTabContent from '.'; import { defaultRowRenderers } from '../../body/renderers'; @@ -86,6 +86,16 @@ jest.mock('../../../../../common/lib/kibana'); // unified-field-list is reporting multiple analytics events jest.mock(`@kbn/ebt/client`); +const mockOpenFlyout = jest.fn(); +jest.mock('@kbn/expandable-flyout', () => { + return { + useExpandableFlyoutApi: () => ({ + openFlyout: mockOpenFlyout, + }), + TestProvider: ({ children }: PropsWithChildren<{}>) => <>{children}, + }; +}); + const TestComponent = (props: Partial>) => { const testComponentDefaultProps: ComponentProps = { timelineId: TimelineId.test, @@ -765,9 +775,19 @@ describe('query tab with unified timeline', () => { }); describe('row leading actions', () => { - it( - 'should be able to add notes', + // fix this with the new EUI flyout implementation for notes + it.skip( + 'should be able to add notes using EuiFlyout', async () => { + (useIsExperimentalFeatureEnabled as jest.Mock).mockImplementation( + jest.fn((feature: keyof ExperimentalFeatures) => { + if (feature === 'unifiedComponentsInTimelineEnabled') { + return true; + } + return allowedExperimentalValues[feature]; + }) + ); + renderTestComponents(); expect(await screen.findByTestId('discoverDocTable')).toBeVisible(); @@ -785,6 +805,38 @@ describe('query tab with unified timeline', () => { ); it( + 'should be able to add notes through expandable flyout', + async () => { + (useIsExperimentalFeatureEnabled as jest.Mock).mockImplementation( + jest.fn((feature: keyof ExperimentalFeatures) => { + if (feature === 'unifiedComponentsInTimelineEnabled') { + return true; + } + if (feature === 'securitySolutionNotesEnabled') { + return true; + } + return allowedExperimentalValues[feature]; + }) + ); + + renderTestComponents(); + expect(await screen.findByTestId('discoverDocTable')).toBeVisible(); + + await waitFor(() => { + expect(screen.getByTestId('timeline-notes-button-small')).not.toBeDisabled(); + }); + + fireEvent.click(screen.getByTestId('timeline-notes-button-small')); + + await waitFor(() => { + expect(mockOpenFlyout).toHaveBeenCalled(); + }); + }, + SPECIAL_TEST_TIMEOUT + ); + + // once the new EUI flyout for notes is implemented this test should be removed + it.skip( 'should be cancel adding notes', async () => { renderTestComponents(); diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/shared/use_timeline_control_columns.test.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/shared/use_timeline_control_columns.test.tsx index 7befceacb5449..ea6490bf18dd9 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/shared/use_timeline_control_columns.test.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/shared/use_timeline_control_columns.test.tsx @@ -51,6 +51,7 @@ describe('useTimelineColumns', () => { timelineId: TimelineId.test, activeTab: TimelineTabs.query, refetch: refetchMock, + onToggleShowNotes: jest.fn(), }), { wrapper: TestProviders, @@ -70,6 +71,7 @@ describe('useTimelineColumns', () => { timelineId: TimelineId.test, activeTab: TimelineTabs.query, refetch: refetchMock, + onToggleShowNotes: jest.fn(), }), { wrapper: TestProviders, @@ -90,6 +92,7 @@ describe('useTimelineColumns', () => { timelineId: TimelineId.test, activeTab: TimelineTabs.query, refetch: refetchMock, + onToggleShowNotes: jest.fn(), }), { wrapper: TestProviders, diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/shared/use_timeline_control_columns.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/shared/use_timeline_control_columns.tsx index 02791d85de022..f6d583572c937 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/shared/use_timeline_control_columns.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/shared/use_timeline_control_columns.tsx @@ -27,6 +27,7 @@ interface UseTimelineControlColumnArgs { timelineId: string; activeTab: TimelineTabs; refetch: () => void; + onToggleShowNotes: (eventId?: string) => void; } const EMPTY_STRING_ARRAY: string[] = []; @@ -39,6 +40,7 @@ export const useTimelineControlColumn = ({ timelineId, activeTab, refetch, + onToggleShowNotes, }: UseTimelineControlColumnArgs) => { const { browserFields } = useSourcererDataView(SourcererScopeName.timeline); @@ -95,6 +97,7 @@ export const useTimelineControlColumn = ({ showCheckboxes={false} setEventsLoading={noOp} setEventsDeleted={noOp} + onToggleShowNotes={onToggleShowNotes} /> ); }, @@ -106,14 +109,15 @@ export const useTimelineControlColumn = ({ })) as unknown as ColumnHeaderOptions[]; } }, [ - ACTION_BUTTON_COUNT, + unifiedComponentsInTimelineEnabled, UNIFIED_COMPONENTS_ACTION_BUTTON_COUNT, browserFields, localColumns, sort, - unifiedComponentsInTimelineEnabled, - timelineId, activeTab, + timelineId, refetch, + onToggleShowNotes, + ACTION_BUTTON_COUNT, ]); }; diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/unified_components/data_table/control_column_cell_render.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/unified_components/data_table/control_column_cell_render.tsx index c662a06cb0dc1..1dcd3ccd9db25 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/unified_components/data_table/control_column_cell_render.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/unified_components/data_table/control_column_cell_render.tsx @@ -35,6 +35,7 @@ export const ControlColumnCellRender = memo(function ControlColumnCellRender( {...props} ariaRowindex={rowIndex} columnValues="columnValues" + disableExpandAction eventIdToNoteIds={eventIdToNoteIds} isEventPinned={isPinned} isEventViewer={false} diff --git a/x-pack/plugins/security_solution/server/assistant/tools/attack_discovery/get_output_parser.test.ts b/x-pack/plugins/security_solution/server/assistant/tools/attack_discovery/get_output_parser.test.ts index 446611f87ea6a..5ad2cd11f817a 100644 --- a/x-pack/plugins/security_solution/server/assistant/tools/attack_discovery/get_output_parser.test.ts +++ b/x-pack/plugins/security_solution/server/assistant/tools/attack_discovery/get_output_parser.test.ts @@ -22,7 +22,7 @@ Your output will be parsed and type-checked according to the provided schema ins Here is the JSON Schema instance your output must adhere to. Include the enclosing markdown codeblock: \`\`\`json -{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"alertIds\":{\"type\":\"array\",\"items\":{\"type\":\"string\"},\"description\":\"The alert IDs that the insight is based on.\"},\"detailsMarkdown\":{\"type\":\"string\",\"description\":\"A detailed insight with markdown that always uses special {{ field.name fieldValue1 fieldValue2 fieldValueN }} syntax for field names and values from the source data. Examples of CORRECT syntax (includes field names and values): {{ host.name hostNameValue }} {{ user.name userNameValue }} {{ source.ip sourceIpValue }} Examples of INCORRECT syntax (bad, because the field names are not included): {{ hostNameValue }} {{ userNameValue }} {{ sourceIpValue }}\"},\"entitySummaryMarkdown\":{\"type\":\"string\",\"description\":\"A short (no more than a sentence) summary of the insight featuring only the host.name and user.name fields (when they are applicable), using the same {{ field.name fieldValue1 fieldValue2 fieldValueN }} syntax\"},\"mitreAttackTactics\":{\"type\":\"array\",\"items\":{\"type\":\"string\"},\"description\":\"An array of MITRE ATT&CK tactic for the insight, using one of the following values: Reconnaissance,Initial Access,Execution,Persistence,Privilege Escalation,Discovery,Lateral Movement,Command and Control,Exfiltration\"},\"summaryMarkdown\":{\"type\":\"string\",\"description\":\"A markdown summary of insight, using the same {{ field.name fieldValue1 fieldValue2 fieldValueN }} syntax\"},\"title\":{\"type\":\"string\",\"description\":\"A short, no more than 7 words, title for the insight, NOT formatted with special syntax or markdown. This must be as brief as possible.\"}},\"required\":[\"alertIds\",\"detailsMarkdown\",\"summaryMarkdown\",\"title\"],\"additionalProperties\":false},\"description\":\"Insights with markdown that always uses special {{ field.name fieldValue1 fieldValue2 fieldValueN }} syntax for field names and values from the source data. Examples of CORRECT syntax (includes field names and values): {{ host.name hostNameValue }} {{ user.name userNameValue }} {{ source.ip sourceIpValue }} Examples of INCORRECT syntax (bad, because the field names are not included): {{ hostNameValue }} {{ userNameValue }} {{ sourceIpValue }}\",\"$schema\":\"http://json-schema.org/draft-07/schema#\"} +{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"alertIds\":{\"type\":\"array\",\"items\":{\"type\":\"string\"},\"description\":\"The alert IDs that the insight is based on.\"},\"detailsMarkdown\":{\"type\":\"string\",\"description\":\"A detailed insight with markdown, where each markdown bullet contains a description of what happened that reads like a story of the attack as it played out and always uses special {{ field.name fieldValue1 fieldValue2 fieldValueN }} syntax for field names and values from the source data. Examples of CORRECT syntax (includes field names and values): {{ host.name hostNameValue }} {{ user.name userNameValue }} {{ source.ip sourceIpValue }} Examples of INCORRECT syntax (bad, because the field names are not included): {{ hostNameValue }} {{ userNameValue }} {{ sourceIpValue }}\"},\"entitySummaryMarkdown\":{\"type\":\"string\",\"description\":\"A short (no more than a sentence) summary of the insight featuring only the host.name and user.name fields (when they are applicable), using the same {{ field.name fieldValue1 fieldValue2 fieldValueN }} syntax\"},\"mitreAttackTactics\":{\"type\":\"array\",\"items\":{\"type\":\"string\"},\"description\":\"An array of MITRE ATT&CK tactic for the insight, using one of the following values: Reconnaissance,Initial Access,Execution,Persistence,Privilege Escalation,Discovery,Lateral Movement,Command and Control,Exfiltration\"},\"summaryMarkdown\":{\"type\":\"string\",\"description\":\"A markdown summary of insight, using the same {{ field.name fieldValue1 fieldValue2 fieldValueN }} syntax\"},\"title\":{\"type\":\"string\",\"description\":\"A short, no more than 7 words, title for the insight, NOT formatted with special syntax or markdown. This must be as brief as possible.\"}},\"required\":[\"alertIds\",\"detailsMarkdown\",\"summaryMarkdown\",\"title\"],\"additionalProperties\":false},\"description\":\"Insights with markdown that always uses special {{ field.name fieldValue1 fieldValue2 fieldValueN }} syntax for field names and values from the source data. Examples of CORRECT syntax (includes field names and values): {{ host.name hostNameValue }} {{ user.name userNameValue }} {{ source.ip sourceIpValue }} Examples of INCORRECT syntax (bad, because the field names are not included): {{ hostNameValue }} {{ userNameValue }} {{ sourceIpValue }}\",\"$schema\":\"http://json-schema.org/draft-07/schema#\"} \`\`\` `; diff --git a/x-pack/plugins/security_solution/server/assistant/tools/attack_discovery/get_output_parser.ts b/x-pack/plugins/security_solution/server/assistant/tools/attack_discovery/get_output_parser.ts index 1c839ffc64522..6a1893612c1fd 100644 --- a/x-pack/plugins/security_solution/server/assistant/tools/attack_discovery/get_output_parser.ts +++ b/x-pack/plugins/security_solution/server/assistant/tools/attack_discovery/get_output_parser.ts @@ -47,7 +47,7 @@ export const getOutputParser = () => detailsMarkdown: z .string() .describe( - `A detailed insight with markdown that always uses special ${SYNTAX} syntax for field names and values from the source data. ${GOOD_SYNTAX_EXAMPLES} ${BAD_SYNTAX_EXAMPLES}` + `A detailed insight with markdown, where each markdown bullet contains a description of what happened that reads like a story of the attack as it played out and always uses special ${SYNTAX} syntax for field names and values from the source data. ${GOOD_SYNTAX_EXAMPLES} ${BAD_SYNTAX_EXAMPLES}` ), entitySummaryMarkdown: z .string() diff --git a/x-pack/plugins/security_solution/server/endpoint/routes/resolver/entity/utils/build_resolver_entity.ts b/x-pack/plugins/security_solution/server/endpoint/routes/resolver/entity/utils/build_resolver_entity.ts index c1195aa11c400..7f8e4cbeb381a 100644 --- a/x-pack/plugins/security_solution/server/endpoint/routes/resolver/entity/utils/build_resolver_entity.ts +++ b/x-pack/plugins/security_solution/server/endpoint/routes/resolver/entity/utils/build_resolver_entity.ts @@ -23,6 +23,9 @@ export function resolverEntity( let foundSchema = true; // check that the constraint and id fields are defined and that the id field is not an empty string const id = getFieldAsString(hit._source, supportedSchema.schema.id); + const agentId = + supportedSchema.schema.agentId && + getFieldAsString(hit._source, supportedSchema.schema.agentId); for (const constraint of supportedSchema.constraints) { const fieldValue = getFieldAsString(hit._source, constraint.field); // track that all the constraints are true, if one of them is false then this schema is not valid so mark it @@ -40,6 +43,7 @@ export function resolverEntity( name: supportedSchema.name, schema: supportedSchema.schema, id, + ...(agentId ? { agentId } : {}), }); } } diff --git a/x-pack/plugins/security_solution/server/endpoint/routes/resolver/entity/utils/supported_schemas.ts b/x-pack/plugins/security_solution/server/endpoint/routes/resolver/entity/utils/supported_schemas.ts index ba3c9b64ea32c..fa50d587b99d4 100644 --- a/x-pack/plugins/security_solution/server/endpoint/routes/resolver/entity/utils/supported_schemas.ts +++ b/x-pack/plugins/security_solution/server/endpoint/routes/resolver/entity/utils/supported_schemas.ts @@ -64,6 +64,7 @@ export const getSupportedSchemas = ( parent: 'process.parent.entity_id', ancestry: 'process.Ext.ancestry', name: 'process.name', + agentId: 'agent.id', }, }, { diff --git a/x-pack/plugins/security_solution/server/endpoint/routes/resolver/events.ts b/x-pack/plugins/security_solution/server/endpoint/routes/resolver/events.ts index 7d6e4865c9160..8964b70df0c71 100644 --- a/x-pack/plugins/security_solution/server/endpoint/routes/resolver/events.ts +++ b/x-pack/plugins/security_solution/server/endpoint/routes/resolver/events.ts @@ -55,6 +55,7 @@ export function handleEvents( indexPatterns: body.indexPatterns, timeRange: body.timeRange, shouldExcludeColdAndFrozenTiers, + agentId: body.agentId, }); const results = await eventsQuery.search(eventsClient, body, alertsClient); return res.ok({ diff --git a/x-pack/plugins/security_solution/server/endpoint/routes/resolver/queries/events.ts b/x-pack/plugins/security_solution/server/endpoint/routes/resolver/queries/events.ts index 3b8d95fa1aa9e..bf0d04a19e753 100644 --- a/x-pack/plugins/security_solution/server/endpoint/routes/resolver/queries/events.ts +++ b/x-pack/plugins/security_solution/server/endpoint/routes/resolver/queries/events.ts @@ -19,14 +19,22 @@ import type { ResolverQueryParams } from '../tree/queries/base'; */ export class EventsQuery extends BaseResolverQuery { readonly pagination: PaginationBuilder; + constructor({ indexPatterns, timeRange, isInternalRequest, pagination, shouldExcludeColdAndFrozenTiers, + agentId, }: ResolverQueryParams & { pagination: PaginationBuilder }) { - super({ indexPatterns, timeRange, isInternalRequest, shouldExcludeColdAndFrozenTiers }); + super({ + indexPatterns, + timeRange, + isInternalRequest, + shouldExcludeColdAndFrozenTiers, + agentId, + }); this.pagination = pagination; } @@ -66,7 +74,10 @@ export class EventsQuery extends BaseResolverQuery { }; } - private alertsForProcessQuery(id?: JsonValue): { query: object; index: string } { + private alertsForProcessQuery( + id?: JsonValue, + agentId?: string + ): { query: object; index: string } { return { query: { bool: { @@ -74,6 +85,7 @@ export class EventsQuery extends BaseResolverQuery { { term: { 'process.entity_id': id }, }, + ...(this.schema.agentId && agentId ? [{ term: { 'agent.id': agentId } }] : []), ...this.getRangeFilter(), ], }, @@ -108,7 +120,7 @@ export class EventsQuery extends BaseResolverQuery { */ async search( client: IScopedClusterClient, - body: { filter?: string; eventID?: string; entityType?: string }, + body: { filter?: string; eventID?: string; entityType?: string; agentId?: string }, alertsClient: AlertsClient ): Promise { if (body.filter) { @@ -119,13 +131,13 @@ export class EventsQuery extends BaseResolverQuery { // @ts-expect-error @elastic/elasticsearch _source is optional return response.hits.hits.map((hit) => hit._source); } else { - const { eventID, entityType } = body; + const { eventID, entityType, agentId } = body; if (entityType === 'alertDetail') { const response = await alertsClient.find(this.alertDetailQuery(eventID)); // @ts-expect-error @elastic/elasticsearch _source is optional return response.hits.hits.map((hit) => hit._source); } else { - const response = await alertsClient.find(this.alertsForProcessQuery(eventID)); + const response = await alertsClient.find(this.alertsForProcessQuery(eventID, agentId)); // @ts-expect-error @elastic/elasticsearch _source is optional return response.hits.hits.map((hit) => hit._source); } diff --git a/x-pack/plugins/security_solution/server/endpoint/routes/resolver/tree/queries/base.ts b/x-pack/plugins/security_solution/server/endpoint/routes/resolver/tree/queries/base.ts index 34e8c463dc779..37a03bc170199 100644 --- a/x-pack/plugins/security_solution/server/endpoint/routes/resolver/tree/queries/base.ts +++ b/x-pack/plugins/security_solution/server/endpoint/routes/resolver/tree/queries/base.ts @@ -13,6 +13,7 @@ import { resolverFields } from '../utils'; export interface ResolverQueryParams { readonly schema?: ResolverSchema; + readonly agentId?: string; readonly indexPatterns: string | string[]; readonly isInternalRequest?: boolean; readonly shouldExcludeColdAndFrozenTiers?: boolean; @@ -25,6 +26,7 @@ export interface ResolverQueryParams { export class BaseResolverQuery implements ResolverQueryParams { readonly schema: ResolverSchema; + readonly agentId: string | undefined; readonly indexPatterns: string | string[]; readonly isInternalRequest?: boolean; readonly shouldExcludeColdAndFrozenTiers?: boolean; @@ -37,6 +39,7 @@ export class BaseResolverQuery implements ResolverQueryParams { timeRange, isInternalRequest, shouldExcludeColdAndFrozenTiers, + agentId, }: ResolverQueryParams) { const schemaOrDefault = schema ? schema @@ -50,6 +53,7 @@ export class BaseResolverQuery implements ResolverQueryParams { this.timeRange = timeRange; this.isInternalRequest = isInternalRequest; this.shouldExcludeColdAndFrozenTiers = shouldExcludeColdAndFrozenTiers; + this.agentId = agentId; } getColdAndFrozenTierFilter() { 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 58eda02ee9289..5f19beba4e71d 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 @@ -26,8 +26,16 @@ export class DescendantsQuery extends BaseResolverQuery { timeRange, isInternalRequest, shouldExcludeColdAndFrozenTiers, + agentId, }: ResolverQueryParams) { - super({ schema, indexPatterns, timeRange, isInternalRequest, shouldExcludeColdAndFrozenTiers }); + super({ + schema, + indexPatterns, + timeRange, + isInternalRequest, + shouldExcludeColdAndFrozenTiers, + agentId, + }); } private query(nodes: NodeID[], size: number): JsonObject { @@ -47,6 +55,9 @@ export class DescendantsQuery extends BaseResolverQuery { { terms: { [this.schema.parent]: nodes }, }, + ...(this.schema.agentId && this.agentId + ? [{ term: { 'agent.id': this.agentId } }] + : []), { exists: { field: this.schema.id, @@ -128,6 +139,9 @@ export class DescendantsQuery extends BaseResolverQuery { [ancestryField]: nodes, }, }, + ...(this.schema.agentId && this.agentId + ? [{ term: { 'agent.id': this.agentId } }] + : []), { exists: { field: this.schema.id, diff --git a/x-pack/plugins/security_solution/server/endpoint/routes/resolver/tree/queries/lifecycle.ts b/x-pack/plugins/security_solution/server/endpoint/routes/resolver/tree/queries/lifecycle.ts index ca1578e071626..8154c79ba621c 100644 --- a/x-pack/plugins/security_solution/server/endpoint/routes/resolver/tree/queries/lifecycle.ts +++ b/x-pack/plugins/security_solution/server/endpoint/routes/resolver/tree/queries/lifecycle.ts @@ -18,14 +18,23 @@ import { BaseResolverQuery } from './base'; */ export class LifecycleQuery extends BaseResolverQuery { declare readonly resolverFields: JsonValue[]; + constructor({ schema, indexPatterns, timeRange, isInternalRequest, shouldExcludeColdAndFrozenTiers, + agentId, }: ResolverQueryParams) { - super({ schema, indexPatterns, timeRange, isInternalRequest, shouldExcludeColdAndFrozenTiers }); + super({ + schema, + indexPatterns, + timeRange, + isInternalRequest, + shouldExcludeColdAndFrozenTiers, + agentId, + }); } private query(nodes: NodeID[]): JsonObject { @@ -45,6 +54,9 @@ export class LifecycleQuery extends BaseResolverQuery { { terms: { [this.schema.id]: nodes }, }, + ...(this.schema.agentId && this.agentId + ? [{ term: { 'agent.id': this.agentId } }] + : []), { exists: { field: this.schema.id, diff --git a/x-pack/plugins/security_solution/server/endpoint/routes/resolver/tree/queries/stats.ts b/x-pack/plugins/security_solution/server/endpoint/routes/resolver/tree/queries/stats.ts index d73acb5a86fe2..2fcdfae9eb958 100644 --- a/x-pack/plugins/security_solution/server/endpoint/routes/resolver/tree/queries/stats.ts +++ b/x-pack/plugins/security_solution/server/endpoint/routes/resolver/tree/queries/stats.ts @@ -32,8 +32,14 @@ interface CategoriesAgg extends AggBucket { * Builds a query for retrieving descendants of a node. */ export class StatsQuery extends BaseResolverQuery { - constructor({ schema, indexPatterns, timeRange, isInternalRequest }: ResolverQueryParams) { - super({ schema, indexPatterns, timeRange, isInternalRequest }); + constructor({ + schema, + indexPatterns, + timeRange, + isInternalRequest, + agentId, + }: ResolverQueryParams) { + super({ schema, indexPatterns, timeRange, isInternalRequest, agentId }); } private query(nodes: NodeID[]): JsonObject { @@ -46,6 +52,9 @@ export class StatsQuery extends BaseResolverQuery { { terms: { [this.schema.id]: nodes }, }, + ...(this.schema.agentId && this.agentId + ? [{ term: { 'agent.id': this.agentId } }] + : []), { term: { 'event.kind': 'event' }, }, diff --git a/x-pack/plugins/security_solution/server/endpoint/routes/resolver/tree/utils/fetch.test.ts b/x-pack/plugins/security_solution/server/endpoint/routes/resolver/tree/utils/fetch.test.ts index 13a10fc5f40a3..34e348a6132df 100644 --- a/x-pack/plugins/security_solution/server/endpoint/routes/resolver/tree/utils/fetch.test.ts +++ b/x-pack/plugins/security_solution/server/endpoint/routes/resolver/tree/utils/fetch.test.ts @@ -48,18 +48,21 @@ describe('fetcher test', () => { const schemaIDParent = { id: 'id', parent: 'parent', + agentId: 'agent.id', }; const schemaIDParentAncestry = { id: 'id', parent: 'parent', ancestry: 'ancestry', + agentId: 'agent.id', }; const schemaIDParentName = { id: 'id', parent: 'parent', name: 'name', + agentId: 'agent.id', }; let client: jest.Mocked; @@ -78,6 +81,7 @@ describe('fetcher test', () => { return []; }); const options: TreeOptions = { + agentId: 'agent-1', descendantLevels: 1, descendants: 5, ancestors: 0, @@ -88,6 +92,7 @@ describe('fetcher test', () => { schema: { id: '', parent: '', + agentId: '', }, indexPatterns: [''], nodes: ['a'], @@ -98,6 +103,7 @@ describe('fetcher test', () => { it('exists the loop when the options specify no descendants', async () => { const options: TreeOptions = { + agentId: 'agent-1', descendantLevels: 0, descendants: 0, ancestors: 0, @@ -108,6 +114,7 @@ describe('fetcher test', () => { schema: { id: '', parent: '', + agentId: '', }, indexPatterns: [''], nodes: ['a'], @@ -119,14 +126,14 @@ describe('fetcher test', () => { it('returns the correct results without the ancestry defined', async () => { /** - . - └── 0 - ├── 1 - │ └── 2 - └── 3 - ├── 4 - └── 5 - */ + . + └── 0 + ├── 1 + │ └── 2 + └── 3 + ├── 4 + └── 5 + */ const level1 = [ { id: '1', @@ -161,6 +168,7 @@ describe('fetcher test', () => { return level2; }); const options: TreeOptions = { + agentId: 'agent-1', descendantLevels: 2, descendants: 5, ancestors: 0, @@ -186,6 +194,7 @@ describe('fetcher test', () => { return []; }); const options: TreeOptions = { + agentId: 'agent-1', descendantLevels: 0, descendants: 0, ancestors: 5, @@ -196,6 +205,7 @@ describe('fetcher test', () => { schema: { id: '', parent: '', + agentId: '', }, indexPatterns: [''], nodes: ['a'], @@ -209,6 +219,7 @@ describe('fetcher test', () => { throw new Error('should not have called this'); }); const options: TreeOptions = { + agentId: 'agent-1', descendantLevels: 0, descendants: 0, ancestors: 0, @@ -219,6 +230,7 @@ describe('fetcher test', () => { schema: { id: '', parent: '', + agentId: '', }, indexPatterns: [''], nodes: ['a'], @@ -247,6 +259,7 @@ describe('fetcher test', () => { ]; }); const options: TreeOptions = { + agentId: 'agent-1', descendantLevels: 0, descendants: 0, ancestors: 2, @@ -290,6 +303,7 @@ describe('fetcher test', () => { ]; }); const options: TreeOptions = { + agentId: 'agent-1', descendantLevels: 0, descendants: 0, ancestors: 2, @@ -340,6 +354,7 @@ describe('fetcher test', () => { return [node1, node2]; }); const options: TreeOptions = { + agentId: 'agent-1', descendantLevels: 0, descendants: 0, ancestors: 3, @@ -361,11 +376,11 @@ describe('fetcher test', () => { describe('retrieving leaf nodes', () => { it('correctly identifies the leaf nodes in a response without the ancestry field', () => { /** - . - └── 0 - ├── 1 - ├── 2 - └── 3 + . + └── 0 + ├── 1 + ├── 2 + └── 3 */ const results = [ { @@ -381,16 +396,20 @@ describe('fetcher test', () => { parent: '0', }, ]; - const leaves = getLeafNodes(results, ['0'], { id: 'id', parent: 'parent' }); + const leaves = getLeafNodes(results, ['0'], { + id: 'id', + parent: 'parent', + agentId: 'agent.id', + }); expect(leaves).toStrictEqual(['1', '2', '3']); }); it('correctly ignores nodes without the proper fields', () => { /** - . - └── 0 - ├── 1 - ├── 2 + . + └── 0 + ├── 1 + ├── 2 */ const results = [ { @@ -406,7 +425,11 @@ describe('fetcher test', () => { parentNotReal: '0', }, ]; - const leaves = getLeafNodes(results, ['0'], { id: 'id', parent: 'parent' }); + const leaves = getLeafNodes(results, ['0'], { + id: 'id', + parent: 'parent', + agentId: 'agent.id', + }); expect(leaves).toStrictEqual(['1', '2']); }); @@ -425,17 +448,21 @@ describe('fetcher test', () => { parent: '0', }, ]; - const leaves = getLeafNodes(results, ['0'], { id: 'id', parent: 'parent' }); + const leaves = getLeafNodes(results, ['0'], { + id: 'id', + parent: 'parent', + agentId: 'agent.id', + }); expect(leaves).toStrictEqual([]); }); describe('with the ancestry field defined', () => { it('correctly identifies the leaf nodes in a response with the ancestry field', () => { /** - . - ├── 1 - │ └── 2 - └── 3 + . + ├── 1 + │ └── 2 + └── 3 */ const results = [ { @@ -458,16 +485,17 @@ describe('fetcher test', () => { id: 'id', parent: 'parent', ancestry: 'ancestry', + agentId: 'agent.id', }); expect(leaves).toStrictEqual(['2']); }); it('falls back to using parent field if it cannot find the ancestry field', () => { /** - . - ├── 1 - │ └── 2 - └── 3 + . + ├── 1 + │ └── 2 + └── 3 */ const results = [ { @@ -488,19 +516,20 @@ describe('fetcher test', () => { id: 'id', parent: 'parent', ancestry: 'ancestry', + agentId: 'agent.id', }); expect(leaves).toStrictEqual(['1', '3']); }); it('correctly identifies the leaf nodes with a tree with multiple leaves', () => { /** - . - └── 0 - ├── 1 - │ └── 2 - └── 3 - ├── 4 - └── 5 + . + └── 0 + ├── 1 + │ └── 2 + └── 3 + ├── 4 + └── 5 */ const results = [ { @@ -533,23 +562,24 @@ describe('fetcher test', () => { id: 'id', parent: 'parent', ancestry: 'ancestry', + agentId: 'agent.id', }); expect(leaves).toStrictEqual(['2', '4', '5']); }); it('correctly identifies the leaf nodes with multiple queried nodes', () => { /** - . - ├── 0 - │ ├── 1 - │ │ └── 2 - │ └── 3 - │ ├── 4 - │ └── 5 - └── a - └── b - ├── c - └── d + . + ├── 0 + │ ├── 1 + │ │ └── 2 + │ └── 3 + │ ├── 4 + │ └── 5 + └── a + └── b + ├── c + └── d */ const results = [ { @@ -597,21 +627,22 @@ describe('fetcher test', () => { id: 'id', parent: 'parent', ancestry: 'ancestry', + agentId: 'agent.id', }); expect(leaves).toStrictEqual(['2', '4', '5', 'c', 'd']); }); it('correctly identifies the leaf nodes with an unbalanced tree', () => { /** - . - ├── 0 - │ ├── 1 - │ │ └── 2 - │ └── 3 - │ ├── 4 - │ └── 5 - └── a - └── b + . + ├── 0 + │ ├── 1 + │ │ └── 2 + │ └── 3 + │ ├── 4 + │ └── 5 + └── a + └── b */ const results = [ { @@ -649,6 +680,7 @@ describe('fetcher test', () => { id: 'id', parent: 'parent', ancestry: 'ancestry', + agentId: 'agent.id', }); // the reason b is not identified here is because the ancestry array // size is 2, which means that if b had a descendant, then it would have been found @@ -661,32 +693,41 @@ describe('fetcher test', () => { describe('getIDField', () => { it('returns undefined if the field does not exist', () => { - expect(getIDField({}, { id: 'a', parent: 'b' })).toBeUndefined(); + expect(getIDField({}, { id: 'a', parent: 'b', agentId: 'c' })).toBeUndefined(); }); it('returns the first value if the field is an array', () => { - expect(getIDField({ 'a.b': ['1', '2'] }, { id: 'a.b', parent: 'b' })).toStrictEqual('1'); + expect( + getIDField({ 'a.b': ['1', '2'] }, { id: 'a.b', parent: 'b', agentId: 'c' }) + ).toStrictEqual('1'); }); }); describe('getParentField', () => { it('returns undefined if the field does not exist', () => { - expect(getParentField({}, { id: 'a', parent: 'b' })).toBeUndefined(); + expect(getParentField({}, { id: 'a', parent: 'b', agentId: 'c' })).toBeUndefined(); }); it('returns the first value if the field is an array', () => { - expect(getParentField({ 'a.b': ['1', '2'] }, { id: 'z', parent: 'a.b' })).toStrictEqual('1'); + expect( + getParentField({ 'a.b': ['1', '2'] }, { id: 'z', parent: 'a.b', agentId: 'c' }) + ).toStrictEqual('1'); }); }); describe('getAncestryAsArray', () => { it('returns an empty array if the field does not exist', () => { - expect(getAncestryAsArray({}, { id: 'a', parent: 'b', ancestry: 'z' })).toStrictEqual([]); + expect( + getAncestryAsArray({}, { id: 'a', parent: 'b', ancestry: 'z', agentId: 'c' }) + ).toStrictEqual([]); }); it('returns the full array if the field exists', () => { expect( - getAncestryAsArray({ 'a.b': ['1', '2'] }, { id: 'z', parent: 'f', ancestry: 'a.b' }) + getAncestryAsArray( + { 'a.b': ['1', '2'] }, + { id: 'z', parent: 'f', ancestry: 'a.b', agentId: 'c' } + ) ).toStrictEqual(['1', '2']); }); @@ -694,7 +735,7 @@ describe('fetcher test', () => { expect( getAncestryAsArray( { 'aParent.bParent': ['1', '2'], ancestry: [] }, - { id: 'z', parent: 'aParent.bParent', ancestry: 'ancestry' } + { id: 'z', parent: 'aParent.bParent', ancestry: 'ancestry', agentId: 'agent.id' } ) ).toStrictEqual(['1']); }); @@ -703,9 +744,107 @@ describe('fetcher test', () => { expect( getAncestryAsArray( { 'aParent.bParent': '1' }, - { id: 'z', parent: 'aParent.bParent', ancestry: 'ancestry' } + { id: 'z', parent: 'aParent.bParent', ancestry: 'ancestry', agentId: 'agent.id' } ) ).toStrictEqual(['1']); }); }); + + describe('agentIds', () => { + it('returns the correct results with different agentIds', async () => { + /** + . + └── 0 (agent-1) + │ ├── 1 (agent-1) + │ │ └── 2 (agent-1) + │ └── 3 (agent-2) + │ ├── 4 (agent-2) + │ └── 5 (agent-2) + */ + const level1Agent1 = [ + { + id: '1', + parent: '0', + 'agent.id': 'agent-1', + }, + ]; + const level1Agent2 = [ + { + id: '3', + parent: '0', + 'agent.id': 'agent-2', + }, + ]; + const level2Agent1 = [ + { + id: '2', + parent: '1', + 'agent.id': 'agent-1', + }, + ]; + const level2Agent2 = [ + { + id: '4', + parent: '3', + 'agent.id': 'agent-2', + }, + { + id: '5', + parent: '3', + 'agent.id': 'agent-2', + }, + ]; + + DescendantsQuery.prototype.search = jest + .fn() + .mockImplementationOnce(async () => { + return level1Agent1; + }) + .mockImplementationOnce(async () => { + return level2Agent1; + }) + .mockImplementationOnce(async () => { + return level1Agent2; + }) + .mockImplementationOnce(async () => { + return level2Agent2; + }); + + const optionsAgent1: TreeOptions = { + agentId: 'agent-1', + descendantLevels: 2, + descendants: 5, + ancestors: 0, + timeRange: { + from: '', + to: '', + }, + schema: schemaIDParent, + indexPatterns: [''], + nodes: ['0'], + }; + + const optionsAgent2: TreeOptions = { + agentId: 'agent-2', + descendantLevels: 2, + descendants: 5, + ancestors: 0, + timeRange: { + from: '', + to: '', + }, + schema: schemaIDParent, + indexPatterns: [''], + nodes: ['0'], + }; + + const fetcher = new Fetcher(client); + expect(await fetcher.tree(optionsAgent1)).toEqual( + formatResponse([...level1Agent1, ...level2Agent1], schemaIDParent) + ); + expect(await fetcher.tree(optionsAgent2)).toEqual( + formatResponse([...level1Agent2, ...level2Agent2], schemaIDParent) + ); + }); + }); }); diff --git a/x-pack/plugins/security_solution/server/endpoint/routes/resolver/tree/utils/fetch.ts b/x-pack/plugins/security_solution/server/endpoint/routes/resolver/tree/utils/fetch.ts index 42757767b944e..d9f3d26bf5c56 100644 --- a/x-pack/plugins/security_solution/server/endpoint/routes/resolver/tree/utils/fetch.ts +++ b/x-pack/plugins/security_solution/server/endpoint/routes/resolver/tree/utils/fetch.ts @@ -27,6 +27,7 @@ import { StatsQuery } from '../queries/stats'; * resolver tree. */ export interface TreeOptions { + agentId?: string; descendantLevels: number; descendants: number; ancestors: number; @@ -96,6 +97,7 @@ export class Fetcher { schema: options.schema, timeRange: options.timeRange, isInternalRequest, + agentId: options.agentId, }); const { eventStats, alertIds } = await query.search( @@ -171,6 +173,7 @@ export class Fetcher { timeRange: options.timeRange, isInternalRequest, shouldExcludeColdAndFrozenTiers: !!options.shouldExcludeColdAndFrozenTiers, + agentId: options.agentId, }); let nodes = options.nodes; @@ -222,6 +225,7 @@ export class Fetcher { timeRange: options.timeRange, isInternalRequest, shouldExcludeColdAndFrozenTiers: !!options.shouldExcludeColdAndFrozenTiers, + agentId: options.agentId, }); let nodes: NodeID[] = options.nodes; diff --git a/x-pack/plugins/security_solution/server/endpoint/routes/resolver/tree/utils/index.ts b/x-pack/plugins/security_solution/server/endpoint/routes/resolver/tree/utils/index.ts index bbc70c5e6f711..4ad645ba339c8 100644 --- a/x-pack/plugins/security_solution/server/endpoint/routes/resolver/tree/utils/index.ts +++ b/x-pack/plugins/security_solution/server/endpoint/routes/resolver/tree/utils/index.ts @@ -43,5 +43,8 @@ export function resolverFields(schema: ResolverSchema): Array<{ field: string }> if (schema.name) { filter.push({ field: schema.name }); } + if (schema.agentId) { + filter.push({ field: schema.agentId }); + } return filter; } diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_actions/bulk_actions_response.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_actions/bulk_actions_response.ts index 5485c06cc4a27..2bf14ccbf085e 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_actions/bulk_actions_response.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_actions/bulk_actions_response.ts @@ -16,7 +16,11 @@ import type { NormalizedRuleError, RuleDetailsInError, } from '../../../../../../../common/api/detection_engine'; -import type { BulkEditActionResponse } from '../../../../../../../common/api/detection_engine/rule_management'; +import type { + BulkActionType, + BulkEditActionResponse, +} from '../../../../../../../common/api/detection_engine/rule_management'; +import { BulkActionTypeEnum } from '../../../../../../../common/api/detection_engine/rule_management'; import type { BulkActionsDryRunErrCode } from '../../../../../../../common/constants'; import type { PromisePoolError } from '../../../../../../utils/promise_pool'; import type { RuleAlertType } from '../../../../rule_schema'; @@ -33,6 +37,7 @@ export type BulkActionError = export const buildBulkResponse = ( response: KibanaResponseFactory, { + bulkAction, isDryRun = false, errors = [], updated = [], @@ -40,6 +45,7 @@ export const buildBulkResponse = ( deleted = [], skipped = [], }: { + bulkAction?: BulkActionType; isDryRun?: boolean; errors?: BulkActionError[]; updated?: RuleAlertType[]; @@ -76,10 +82,17 @@ export const buildBulkResponse = ( }; if (numFailed > 0) { + let message = summary.succeeded > 0 ? 'Bulk edit partially failed' : 'Bulk edit failed'; + if (bulkAction === BulkActionTypeEnum.run) { + message = + summary.succeeded > 0 + ? 'Bulk manual rule run partially failed' + : 'Bulk manual rule run failed'; + } return response.custom({ headers: { 'content-type': 'application/json' }, body: { - message: summary.succeeded > 0 ? 'Bulk edit partially failed' : 'Bulk edit failed', + message, status_code: 500, attributes: { errors: normalizeErrorResponse(errors), diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_actions/bulk_schedule_rule_run.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_actions/bulk_schedule_rule_run.ts new file mode 100644 index 0000000000000..ec82056ac4e4c --- /dev/null +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_actions/bulk_schedule_rule_run.ts @@ -0,0 +1,101 @@ +/* + * 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 { BulkOperationError, RulesClient } from '@kbn/alerting-plugin/server'; +import type { ScheduleBackfillParams } from '@kbn/alerting-plugin/server/application/backfill/methods/schedule/types'; +import type { BulkManualRuleRun } from '../../../../../../../common/api/detection_engine'; +import type { ExperimentalFeatures } from '../../../../../../../common'; +import type { PromisePoolError } from '../../../../../../utils/promise_pool'; +import type { MlAuthz } from '../../../../../machine_learning/authz'; +import type { RuleAlertType } from '../../../../rule_schema'; +import { validateBulkScheduleBackfill } from '../../../logic/bulk_actions/validations'; + +interface BulkScheduleBackfillArgs { + rules: RuleAlertType[]; + isDryRun?: boolean; + rulesClient: RulesClient; + mlAuthz: MlAuthz; + runPayload: BulkManualRuleRun['run']; + experimentalFeatures: ExperimentalFeatures; +} + +interface BulkScheduleBackfillOutcome { + backfilled: RuleAlertType[]; + errors: Array | BulkOperationError>; +} + +export const bulkScheduleBackfill = async ({ + rules, + isDryRun, + rulesClient, + mlAuthz, + runPayload, + experimentalFeatures, +}: BulkScheduleBackfillArgs): Promise => { + const errors: Array | BulkOperationError> = []; + + // In the first step, we validate if it is possible to schedule backfill for the rules + const validatedRules: RuleAlertType[] = []; + await Promise.all( + rules.map(async (rule) => { + try { + await validateBulkScheduleBackfill({ + mlAuthz, + rule, + experimentalFeatures, + }); + validatedRules.push(rule); + } catch (error) { + errors.push({ item: rule, error }); + } + }) + ); + + if (isDryRun || validatedRules.length === 0) { + return { + backfilled: validatedRules, + errors, + }; + } + + // Then if it's not a dry run, we schedule backfill for the rules that passed the validation + const params: ScheduleBackfillParams = validatedRules.map(({ id }) => ({ + ruleId: id, + start: runPayload.start_date, + end: runPayload.end_date, + })); + + // Perform actual schedule using the rulesClient + const results = await rulesClient.scheduleBackfill(params); + return results.reduce( + (acc, backfillResult) => { + if ('error' in backfillResult) { + const ruleName = validatedRules.find( + (rule) => rule.id === backfillResult.error.rule.id + )?.name; + const backfillError = backfillResult.error; + const backfillRule = backfillError.rule; + const error = { + message: backfillError.message, + status: backfillError.status, + rule: { id: backfillRule.id, name: backfillRule.name ?? ruleName ?? '' }, + }; + acc.errors.push(error); + } else { + const backfillRule = validatedRules.find((rule) => rule.id === backfillResult.rule.id); + if (backfillRule) { + acc.backfilled.push(backfillRule); + } + } + return acc; + }, + { backfilled: [], errors } as { + backfilled: RuleAlertType[]; + errors: Array | BulkOperationError>; + } + ); +}; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_actions/route.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_actions/route.test.ts index 37ad3dc7d8487..fdacf11f683b1 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_actions/route.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_actions/route.test.ts @@ -518,7 +518,7 @@ describe('Perform bulk action route', () => { }); const result = server.validate(request); expect(result.badRequest).toHaveBeenCalledWith( - 'action: Invalid literal value, expected "delete", action: Invalid literal value, expected "disable", action: Invalid literal value, expected "enable", action: Invalid literal value, expected "export", action: Invalid literal value, expected "duplicate", and 2 more' + 'action: Invalid literal value, expected "delete", action: Invalid literal value, expected "disable", action: Invalid literal value, expected "enable", action: Invalid literal value, expected "export", action: Invalid literal value, expected "duplicate", and 4 more' ); }); @@ -530,7 +530,7 @@ describe('Perform bulk action route', () => { }); const result = server.validate(request); expect(result.badRequest).toHaveBeenCalledWith( - 'action: Invalid literal value, expected "delete", action: Invalid literal value, expected "disable", action: Invalid literal value, expected "enable", action: Invalid literal value, expected "export", action: Invalid literal value, expected "duplicate", and 2 more' + 'action: Invalid literal value, expected "delete", action: Invalid literal value, expected "disable", action: Invalid literal value, expected "enable", action: Invalid literal value, expected "export", action: Invalid literal value, expected "duplicate", and 4 more' ); }); @@ -564,7 +564,7 @@ describe('Perform bulk action route', () => { }); const result = server.validate(request); expect(result.badRequest).toHaveBeenCalledWith( - 'ids: Expected array, received string, action: Invalid literal value, expected "delete", ids: Expected array, received string, ids: Expected array, received string, action: Invalid literal value, expected "enable", and 7 more' + 'ids: Expected array, received string, action: Invalid literal value, expected "delete", ids: Expected array, received string, ids: Expected array, received string, action: Invalid literal value, expected "enable", and 10 more' ); }); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_actions/route.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_actions/route.ts index 1177d4363fe29..b2c6ae6e04468 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_actions/route.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_actions/route.ts @@ -41,6 +41,7 @@ import type { BulkActionError } from './bulk_actions_response'; import { buildBulkResponse } from './bulk_actions_response'; import { bulkEnableDisableRules } from './bulk_enable_disable_rules'; import { fetchRulesByQueryOrIds } from './fetch_rules_by_query_or_ids'; +import { bulkScheduleBackfill } from './bulk_schedule_rule_run'; export const MAX_RULES_TO_PROCESS_TOTAL = 10000; const MAX_ROUTE_CONCURRENCY = 5; @@ -322,6 +323,19 @@ export const performBulkActionRoute = ( .filter((rule): rule is RuleAlertType => rule !== null); break; } + + case BulkActionTypeEnum.run: { + const { backfilled, errors: bulkActionErrors } = await bulkScheduleBackfill({ + rules, + isDryRun, + rulesClient, + mlAuthz, + runPayload: body.run, + experimentalFeatures: config.experimentalFeatures, + }); + errors.push(...bulkActionErrors); + updated = backfilled.filter((rule): rule is RuleAlertType => rule !== null); + } } if (abortController.signal.aborted === true) { @@ -329,6 +343,7 @@ export const performBulkActionRoute = ( } return buildBulkResponse(response, { + bulkAction: body.action, updated, deleted, created, diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/bulk_actions/validations.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/bulk_actions/validations.ts index 092808cf1cc5c..c1614df4c299d 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/bulk_actions/validations.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/bulk_actions/validations.ts @@ -41,6 +41,10 @@ interface DryRunBulkEditBulkActionsValidationArgs { experimentalFeatures: ExperimentalFeatures; } +interface DryRunManualRuleRunBulkActionsValidationArgs extends BulkActionsValidationArgs { + experimentalFeatures: ExperimentalFeatures; +} + /** * throws ML authorization error wrapped with MACHINE_LEARNING_AUTH error code * @param mlAuthz - {@link MlAuthz} @@ -76,6 +80,27 @@ export const validateBulkDuplicateRule = async ({ rule, mlAuthz }: BulkActionsVa await throwMlAuthError(mlAuthz, rule.params.type); }; +/** + * runs validation for bulk schedule backfill for a single rule + * @param params - {@link DryRunManualRuleRunBulkActionsValidationArgs} + */ +export const validateBulkScheduleBackfill = async ({ + rule, + experimentalFeatures, +}: DryRunManualRuleRunBulkActionsValidationArgs) => { + // check whether "manual rule run" feature is enabled + await throwDryRunError( + () => + invariant(experimentalFeatures?.manualRuleRunEnabled, 'Manual rule run feature is disabled.'), + BulkActionsDryRunErrCode.MANUAL_RULE_RUN_FEATURE + ); + + await throwDryRunError( + () => invariant(rule.enabled, 'Cannot schedule manual rule run for a disabled rule'), + BulkActionsDryRunErrCode.MANUAL_RULE_RUN_DISABLED_RULE + ); +}; + /** * runs validation for bulk edit for a single rule * @param params - {@link BulkActionsValidationArgs} diff --git a/x-pack/plugins/security_solution/server/lib/telemetry/helpers.ts b/x-pack/plugins/security_solution/server/lib/telemetry/helpers.ts index d04731cf09f55..cb33d608ea0c9 100644 --- a/x-pack/plugins/security_solution/server/lib/telemetry/helpers.ts +++ b/x-pack/plugins/security_solution/server/lib/telemetry/helpers.ts @@ -399,7 +399,8 @@ export class TelemetryTimelineFetcher { entities[0].id, entities[0].schema, this.timeFrame.startOfDay, - this.timeFrame.endOfDay + this.timeFrame.endOfDay, + entities[0].agentId || '' ); const nodeIds = Array.isArray(tree) ? tree.map((node) => node?.id.toString()) : []; diff --git a/x-pack/plugins/security_solution/server/lib/telemetry/receiver.ts b/x-pack/plugins/security_solution/server/lib/telemetry/receiver.ts index 96734963a687c..2209c6f9dda9b 100644 --- a/x-pack/plugins/security_solution/server/lib/telemetry/receiver.ts +++ b/x-pack/plugins/security_solution/server/lib/telemetry/receiver.ts @@ -218,7 +218,8 @@ export interface ITelemetryReceiver { entityId: string, resolverSchema: ResolverSchema, startOfDay: string, - endOfDay: string + endOfDay: string, + agentId: string ): TreeResponse; fetchTimelineEvents( @@ -232,6 +233,7 @@ export interface ITelemetryReceiver { getExperimentalFeatures(): ExperimentalFeatures | undefined; setMaxPageSizeBytes(bytes: number): void; + setNumDocsToSample(n: number): void; } @@ -1034,7 +1036,8 @@ export class TelemetryReceiver implements ITelemetryReceiver { entityId: string, resolverSchema: ResolverSchema, startOfDay: string, - endOfDay: string + endOfDay: string, + agentId: string ): TreeResponse { if (this.processTreeFetcher === undefined || this.processTreeFetcher === null) { throw Error( @@ -1053,6 +1056,7 @@ export class TelemetryReceiver implements ITelemetryReceiver { nodes: [entityId], indexPatterns: [`${this.alertsIndex}*`, 'logs-*'], descendantLevels: 20, + agentId, }; return this.processTreeFetcher.tree(request, true); diff --git a/x-pack/plugins/security_solution/server/lib/timeline/routes/index.ts b/x-pack/plugins/security_solution/server/lib/timeline/routes/index.ts index 33a0b6f09d3e6..8fa7e7a8f31d6 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/routes/index.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/routes/index.ts @@ -24,7 +24,7 @@ import { getDraftTimelinesRoute } from './draft_timelines/get_draft_timelines'; import { cleanDraftTimelinesRoute } from './draft_timelines/clean_draft_timelines'; import { installPrepackedTimelinesRoute } from './prepackaged_timelines/install_prepackaged_timelines'; -import { persistNoteRoute, deleteNoteRoute } from './notes'; +import { persistNoteRoute, deleteNoteRoute, getNotesRoute } from './notes'; import { persistPinnedEventRoute } from './pinned_events'; @@ -51,5 +51,7 @@ export function registerTimelineRoutes( persistNoteRoute(router, config, security); deleteNoteRoute(router, config, security); + getNotesRoute(router, config, security); + persistPinnedEventRoute(router, config, security); } 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 d54df1c7830d0..f9476a14c2a08 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 @@ -46,15 +46,26 @@ export const deleteNoteRoute = ( try { const frameworkRequest = await buildFrameworkRequest(context, security, request); const noteId = request.body?.noteId ?? ''; + const noteIds = request.body?.noteIds ?? null; + if (noteIds != null) { + const res = await deleteNote({ + request: frameworkRequest, + noteIds, + }); - const res = await deleteNote({ - request: frameworkRequest, - noteId, - }); + return response.ok({ + body: { data: { persistNote: res } }, + }); + } else { + const res = await deleteNote({ + request: frameworkRequest, + noteIds: [noteId], + }); - return response.ok({ - body: { data: { persistNote: res } }, - }); + return response.ok({ + body: { data: { persistNote: res } }, + }); + } } 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 new file mode 100644 index 0000000000000..93d7794c059d1 --- /dev/null +++ b/x-pack/plugins/security_solution/server/lib/timeline/routes/notes/get_notes.test.ts @@ -0,0 +1,85 @@ +/* + * 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 { SecurityPluginSetup } from '@kbn/security-plugin/server'; +import { + serverMock, + requestContextMock, + createMockConfig, + requestMock, +} from '../../../detection_engine/routes/__mocks__'; +import { NOTE_URL } from '../../../../../common/constants'; +import type { getNotesPaginated } from '../../utils/common'; +import { mockGetCurrentUser } from '../../__mocks__/import_timelines'; + +const getAllNotesRequest = (query?: typeof getNotesPaginated) => + requestMock.create({ + method: 'get', + path: NOTE_URL, + query, + }); + +const createMockedNotes = (numberOfNotes: number) => { + return Array.from({ length: numberOfNotes }, (_, index) => { + return { + id: index + 1, + timelineId: 'timeline', + eventId: 'event', + note: `test note ${index}`, + created: 1280120812453, + createdBy: 'test', + updated: 108712801280, + updatedBy: 'test', + }; + }); +}; + +describe('get notes route', () => { + let server: ReturnType; + let securitySetup: SecurityPluginSetup; + let { context } = requestContextMock.createTools(); + let mockGetAllSavedNote: jest.Mock; + + beforeEach(() => { + jest.clearAllMocks(); + + server = serverMock.create(); + context = requestContextMock.createTools().context; + + securitySetup = { + authc: { + getCurrentUser: jest.fn().mockReturnValue(mockGetCurrentUser), + }, + authz: {}, + } as unknown as SecurityPluginSetup; + + mockGetAllSavedNote = jest.fn(); + jest.doMock('../../saved_object/notes', () => ({ + getAllSavedNote: mockGetAllSavedNote, + })); + const getNotesRoute = jest.requireActual('.').getNotesRoute; + getNotesRoute(server.router, createMockConfig(), securitySetup); + }); + + test('should return a list of notes and the count by default', async () => { + mockGetAllSavedNote.mockResolvedValue({ + notes: createMockedNotes(5), + totalCount: 5, + }); + + const response = await server.inject( + getAllNotesRequest(), + requestContextMock.convertContext(context) + ); + + expect(response.status).toEqual(200); + expect(response.body).toEqual({ + totalCount: 5, + notes: createMockedNotes(5), + }); + }); +}); 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 new file mode 100644 index 0000000000000..97aecc06ef198 --- /dev/null +++ b/x-pack/plugins/security_solution/server/lib/timeline/routes/notes/get_notes.ts @@ -0,0 +1,98 @@ +/* + * 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 { transformError } from '@kbn/securitysolution-es-utils'; +import type { SecuritySolutionPluginRouter } from '../../../../types'; +import { NOTE_URL } from '../../../../../common/constants'; + +import type { ConfigType } from '../../../..'; +import type { SetupPlugins } from '../../../../plugin'; + +import { buildSiemResponse } from '../../../detection_engine/routes/utils'; +import { buildFrameworkRequest, getNotesPaginated } from '../../utils/common'; +import { getAllSavedNote, MAX_UNASSOCIATED_NOTES } from '../../saved_object/notes'; +import { noteSavedObjectType } from '../../saved_object_mappings/notes'; + +export const getNotesRoute = ( + router: SecuritySolutionPluginRouter, + _: ConfigType, + security: SetupPlugins['security'] +) => { + router.versioned + .get({ + path: NOTE_URL, + options: { + tags: ['access:securitySolution'], + }, + access: 'public', + }) + .addVersion( + { + validate: { + request: { query: getNotesPaginated }, + }, + version: '2023-10-31', + }, + async (context, request, response) => { + try { + const queryParams = request.query; + const frameworkRequest = await buildFrameworkRequest(context, security, request); + const documentIds = queryParams.documentIds ?? null; + if (documentIds != null) { + if (Array.isArray(documentIds)) { + const docIdSearchString = documentIds?.join(' | '); + const options = { + type: noteSavedObjectType, + search: docIdSearchString, + page: 1, + perPage: MAX_UNASSOCIATED_NOTES, + }; + const res = await getAllSavedNote(frameworkRequest, options); + + return response.ok({ body: res ?? {} }); + } else { + const options = { + type: noteSavedObjectType, + search: documentIds, + page: 1, + perPage: MAX_UNASSOCIATED_NOTES, + }; + const res = await getAllSavedNote(frameworkRequest, options); + + return response.ok({ body: res ?? {} }); + } + } else { + const perPage = queryParams?.perPage ? parseInt(queryParams.perPage, 10) : 10; + const page = queryParams?.page ? parseInt(queryParams.page, 10) : 1; + const search = queryParams?.search; + const sortField = queryParams?.sortField; + const sortOrder = queryParams?.sortOrder; + const filter = queryParams?.filter; + const options = { + type: noteSavedObjectType, + perPage, + page, + search, + sortField, + sortOrder, + filter, + }; + const res = await getAllSavedNote(frameworkRequest, options); + return response.ok({ body: res ?? {} }); + } + } catch (err) { + const error = transformError(err); + const siemResponse = buildSiemResponse(response); + + return siemResponse.error({ + body: error.message, + statusCode: error.statusCode, + }); + } + } + ); +}; diff --git a/x-pack/plugins/security_solution/server/lib/timeline/routes/notes/index.ts b/x-pack/plugins/security_solution/server/lib/timeline/routes/notes/index.ts index 43d32c173ab1f..1b83f1eb6b465 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/routes/notes/index.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/routes/notes/index.ts @@ -7,3 +7,4 @@ export { persistNoteRoute } from './persist_note'; export { deleteNoteRoute } from './delete_note'; +export { getNotesRoute } from './get_notes'; 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 a6b502111f7cc..e4cf4b8a9c777 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 @@ -11,13 +11,13 @@ import type { SecuritySolutionPluginRouter } from '../../../../types'; import { NOTE_URL } from '../../../../../common/constants'; import type { SetupPlugins } from '../../../../plugin'; -import { buildRouteValidationWithExcess } from '../../../../utils/build_validation/route_validation'; +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 { persistNoteSchema } from '../../../../../common/api/timeline'; +import { persistNoteWithoutRefSchema } from '../../../../../common/api/timeline'; import { persistNote } from '../../saved_object/notes'; export const persistNoteRoute = ( @@ -36,7 +36,7 @@ export const persistNoteRoute = ( .addVersion( { validate: { - request: { body: buildRouteValidationWithExcess(persistNoteSchema) }, + request: { body: buildRouteValidation(persistNoteWithoutRefSchema) }, }, version: '2023-10-31', }, @@ -51,10 +51,7 @@ export const persistNoteRoute = ( const res = await persistNote({ request: frameworkRequest, noteId, - note: { - ...note, - timelineId: note.timelineId, - }, + note, overrideOwner: true, }); diff --git a/x-pack/plugins/security_solution/server/lib/timeline/saved_object/notes/saved_object.test.ts b/x-pack/plugins/security_solution/server/lib/timeline/saved_object/notes/saved_object.test.ts index fef377a91450d..ed5b198932768 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/saved_object/notes/saved_object.test.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/saved_object/notes/saved_object.test.ts @@ -6,11 +6,39 @@ */ import type { AuthenticatedUser } from '@kbn/security-plugin/common'; +import { coreMock, httpServerMock, savedObjectsClientMock } from '@kbn/core/server/mocks'; +import type { KibanaRequest, RequestHandlerContext, SavedObject } from '@kbn/core/server'; +import type { SavedObjectNoteWithoutExternalRefs } from '../../../../../common/types/timeline/note/saved_object'; +import type { FrameworkRequest } from '../../../framework'; +import { internalFrameworkRequest } from '../../../framework'; import type { Note } from '../../../../../common/api/timeline'; +import { requestContextMock } from '../../../detection_engine/routes/__mocks__/request_context'; +import { noteFieldsMigrator } from './field_migrator'; +import { pickSavedNote, persistNote, createNote, updateNote } from './saved_object'; -import { pickSavedNote } from './saved_object'; +jest.mock('uuid', () => ({ + v1: jest.fn().mockReturnValue('7ba7a520-03f4-11eb-9d9d-ffba20fabba8'), +})); -describe('saved_object', () => { +jest.mock('./saved_object', () => { + const originalModule = jest.requireActual('./saved_object'); + return { + ...originalModule, + createNote: jest.fn(originalModule.createNote), + updateNote: jest.fn(originalModule.updateNote), + persistNote: jest.fn(originalModule.persistNote), + }; +}); + +jest.mock('./field_migrator', () => ({ + noteFieldsMigrator: { + extractFieldsToReferences: jest.fn(), + populateFieldsFromReferences: jest.fn(), + populateFieldsFromReferencesForPatch: jest.fn(), + }, +})); + +describe('saved_object pick', () => { const mockDateNow = new Date('2020-04-03T23:00:00.000Z').valueOf(); const getMockSavedNote = (): Note => ({ noteId: '7ba7a520-03f4-11eb-9d9d-ffba20fabba8', @@ -125,3 +153,166 @@ describe('saved_object', () => { }); }); }); + +describe('persistNote', () => { + const mockDateNow = new Date('2020-04-03T23:00:00.000Z').valueOf(); + const mockMigratedAttributes = { + eventId: 'event1', + note: 'Test note', + created: 112089832019, + createdBy: 'user1', + updated: 120812001801, + updatedBy: 'user1', + }; + const mockReferences = [{ id: '', name: 'timeline', type: 'timeline' }]; + + const mockNoteSavedObject: SavedObject = { + attributes: mockMigratedAttributes, + type: 'siem-ui-timeline-note', + id: 'test-id', + references: [ + { + id: '', + name: 'timelineId', + type: 'siem-ui-timeline', + }, + ], + managed: false, + version: 'WzQ0ODEsMV0=', + namespaces: ['default'], + coreMigrationVersion: '8.8.0', + typeMigrationVersion: '8.0.0', + updated_at: '2024-06-25T22:56:01.354Z', + updated_by: 'u_mGBROF_q5bmFCATbLXAcCwKa0k8JvONAwSruelyKA5E_0', + created_at: '2024-06-25T22:56:01.354Z', + created_by: 'u_mGBROF_q5bmFCATbLXAcCwKa0k8JvONAwSruelyKA5E_0', + }; + const mockSavedObjectClient = savedObjectsClientMock.create(); + const core = coreMock.createRequestHandlerContext(); + const context = { + ...requestContextMock.create(), + core: { + ...core, + savedObjects: { + ...core.savedObjects, + client: mockSavedObjectClient, + }, + }, + resolve: jest.fn(), + } as unknown as RequestHandlerContext; + const mockNote = { eventId: 'id', note: 'test note', timelineId: '' }; + const mockRequest: FrameworkRequest = { + ...httpServerMock.createKibanaRequest< + KibanaRequest< + unknown, + unknown, + { note: { eventId: string; note: string; timelineId: string | null } } + >, + RequestHandlerContext, + AuthenticatedUser + >({ + body: { + note: mockNote, + }, + }), + [internalFrameworkRequest]: httpServerMock.createKibanaRequest(), + context, + user: { + username: 'test', + authentication_provider: { type: 'test', name: 'test' }, + full_name: 'test', + authentication_type: 'test', + authentication_realm: { type: 'test', name: 'test' }, + lookup_realm: { type: 'test', name: 'test' }, + enabled: true, + elastic_cloud_user: false, + roles: ['superuser'], + }, + }; + const mockNoteResponse = { + ...mockNote, + ...mockMigratedAttributes, + noteId: 'test-id', + version: 'WzQ0ODEsMV0=', + }; + beforeAll(() => { + Date = jest.fn(() => ({ + valueOf: jest.fn().mockReturnValue(mockDateNow), + })) as unknown as DateConstructor; + }); + beforeEach(() => { + jest.clearAllMocks(); + mockSavedObjectClient.get.mockResolvedValue(mockNoteSavedObject); + mockSavedObjectClient.create.mockResolvedValue(mockNoteSavedObject); + (noteFieldsMigrator.extractFieldsToReferences as jest.Mock).mockReturnValue({ + transformedFields: mockMigratedAttributes, + references: mockReferences, + }); + (noteFieldsMigrator.populateFieldsFromReferences as jest.Mock).mockReturnValue({ + ...mockNoteSavedObject, + attributes: { ...mockNoteSavedObject.attributes, timelineId: '' }, + }); + (noteFieldsMigrator.populateFieldsFromReferencesForPatch as jest.Mock).mockReturnValue({ + ...mockNoteSavedObject, + attributes: { ...mockNoteSavedObject.attributes, timelineId: '' }, + }); + }); + it('should call createNote when noteId is null', async () => { + mockSavedObjectClient.find.mockResolvedValue({ + total: 0, + saved_objects: [], + per_page: 0, + page: 0, + }); + + (createNote as jest.Mock).mockResolvedValue({ code: 200, message: 'success', note: mockNote }); + + const result = await persistNote({ request: mockRequest, noteId: null, note: mockNote }); + + expect(result).toEqual({ + code: 200, + message: 'success', + note: mockNoteResponse, + }); + }); + + it('should call updateNote when noteId is provided', async () => { + const noteId = 'test-id'; + mockSavedObjectClient.find.mockResolvedValue({ + total: 0, + saved_objects: [], + per_page: 0, + page: 0, + }); + + (updateNote as jest.Mock).mockResolvedValue({ code: 200, message: 'success', note: mockNote }); + + const result = await persistNote({ request: mockRequest, noteId, note: mockNote }); + + expect(result).toEqual({ code: 200, message: 'success', note: mockNoteResponse }); + }); + + it('should handle 403 errors', async () => { + mockSavedObjectClient.find.mockResolvedValue({ + total: 1001, + saved_objects: [], + per_page: 0, + page: 0, + }); + (createNote as jest.Mock).mockResolvedValue({ + code: 403, + message: 'Cannot create more than 1000 notes without associating them to a timeline', + note: mockNote, + }); + + const result = await persistNote({ request: mockRequest, noteId: null, note: mockNote }); + + expect(result.code).toBe(403); + expect(result.message).toBe( + 'Cannot create more than 1000 notes without associating them to a timeline' + ); + expect(result.note).toHaveProperty('noteId'); + expect(result.note).toHaveProperty('version', ''); + expect(result.note).toHaveProperty('timelineId', ''); + }); +}); 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 18b6e19dfcb00..ff277a4bea9e0 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 @@ -30,6 +30,8 @@ import { noteSavedObjectType } from '../../saved_object_mappings/notes'; import { timelineSavedObjectType } from '../../saved_object_mappings'; import { noteFieldsMigrator } from './field_migrator'; +export const MAX_UNASSOCIATED_NOTES = 1000; + export const deleteNotesByTimelineId = async (request: FrameworkRequest, timelineId: string) => { const options: SavedObjectsFindOptions = { type: noteSavedObjectType, @@ -49,14 +51,19 @@ export const deleteNotesByTimelineId = async (request: FrameworkRequest, timelin export const deleteNote = async ({ request, - noteId, + noteIds, }: { request: FrameworkRequest; - noteId: string; + noteIds: string[]; }) => { const savedObjectsClient = (await request.context.core).savedObjects.client; - - await savedObjectsClient.delete(noteSavedObjectType, noteId); + const noteObjects = noteIds.map((id) => { + return { + id, + type: noteSavedObjectType, + }; + }); + await savedObjectsClient.bulkDelete(noteObjects); }; export const getNote = async (request: FrameworkRequest, noteId: string): Promise => { @@ -83,7 +90,7 @@ export const persistNote = async ({ }: { request: FrameworkRequest; noteId: string | null; - note: BareNote; + note: BareNote | BareNoteWithoutExternalRefs; overrideOwner?: boolean; }): Promise => { try { @@ -116,7 +123,7 @@ export const persistNote = async ({ } }; -const createNote = async ({ +export const createNote = async ({ request, noteId, note, @@ -124,7 +131,7 @@ const createNote = async ({ }: { request: FrameworkRequest; noteId: string | null; - note: BareNote; + note: BareNote | BareNoteWithoutExternalRefs; overrideOwner?: boolean; }) => { const savedObjectsClient = (await request.context.core).savedObjects.client; @@ -136,7 +143,25 @@ const createNote = async ({ noteFieldsMigrator.extractFieldsToReferences({ data: noteWithCreator, }); - + if (references.length === 1 && references[0].id === '') { + // Limit unassociated events to 1000 + const notesCount = await savedObjectsClient.find({ + type: noteSavedObjectType, + hasReference: { type: timelineSavedObjectType, id: '' }, + }); + if (notesCount.total >= MAX_UNASSOCIATED_NOTES) { + return { + code: 403, + message: `Cannot create more than ${MAX_UNASSOCIATED_NOTES} notes without associating them to a timeline`, + note: { + ...note, + noteId: uuidv1(), + version: '', + timelineId: '', + }, + }; + } + } const noteAttributes: SavedObjectNoteWithoutExternalRefs = { eventId: migratedAttributes.eventId, note: migratedAttributes.note, @@ -166,7 +191,7 @@ const createNote = async ({ }; }; -const updateNote = async ({ +export const updateNote = async ({ request, noteId, note, @@ -174,7 +199,7 @@ const updateNote = async ({ }: { request: FrameworkRequest; noteId: string; - note: BareNote; + note: BareNote | BareNoteWithoutExternalRefs; overrideOwner?: boolean; }) => { const savedObjectsClient = (await request.context.core).savedObjects.client; @@ -233,7 +258,10 @@ const getSavedNote = async (request: FrameworkRequest, NoteId: string) => { return convertSavedObjectToSavedNote(populatedNote); }; -const getAllSavedNote = async (request: FrameworkRequest, options: SavedObjectsFindOptions) => { +export const getAllSavedNote = async ( + request: FrameworkRequest, + options: SavedObjectsFindOptions +) => { const savedObjectsClient = (await request.context.core).savedObjects.client; const savedObjects = await savedObjectsClient.find(options); @@ -247,14 +275,14 @@ const getAllSavedNote = async (request: FrameworkRequest, options: SavedObjectsF }; }; -export const convertSavedObjectToSavedNote = (savedObject: unknown): Note => - pipe( +export const convertSavedObjectToSavedNote = (savedObject: unknown): Note => { + return pipe( SavedObjectNoteRuntimeType.decode(savedObject), map((savedNote) => { return { noteId: savedNote.id, version: savedNote.version, - timelineId: savedNote.attributes.timelineId, + timelineId: savedNote.attributes.timelineId ?? '', eventId: savedNote.attributes.eventId, note: savedNote.attributes.note, created: savedNote.attributes.created, @@ -267,10 +295,11 @@ export const convertSavedObjectToSavedNote = (savedObject: unknown): Note => throw new Error(failure(errors).join('\n')); }, identity) ); +}; export const pickSavedNote = ( noteId: string | null, - savedNote: BareNote, + savedNote: BareNote | BareNoteWithoutExternalRefs, userInfo: AuthenticatedUser | null ) => { if (noteId == null) { 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 1cad9d3b2672f..d9b770c258319 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 @@ -17,6 +17,7 @@ import type { AuthenticatedUser } from '@kbn/security-plugin/server'; import { UNAUTHENTICATED_USER } from '../../../../../common/constants'; import type { Note, + BareNote, PinnedEvent, AllTimelinesResponse, ExportTimelineNotFoundError, @@ -610,13 +611,14 @@ export const copyTimeline = async ( const copiedNotes = Promise.all( notes.map((_note) => { + const newNote: BareNote = { + ..._note, + timelineId: newTimelineId, + }; return note.persistNote({ request, noteId: null, - note: { - ..._note, - timelineId: newTimelineId, - }, + note: newNote, overrideOwner: false, }); }) diff --git a/x-pack/plugins/security_solution/server/lib/timeline/utils/common.ts b/x-pack/plugins/security_solution/server/lib/timeline/utils/common.ts index 97b6ec743d109..b9f1aaafbf969 100644 --- a/x-pack/plugins/security_solution/server/lib/timeline/utils/common.ts +++ b/x-pack/plugins/security_solution/server/lib/timeline/utils/common.ts @@ -39,6 +39,16 @@ export const buildFrameworkRequest = async ( export const escapeHatch = schema.object({}, { unknowns: 'allow' }); +export const getNotesPaginated = schema.object({ + documentIds: schema.maybe(schema.oneOf([schema.arrayOf(schema.string()), schema.string()])), + page: schema.maybe(schema.string()), + perPage: schema.maybe(schema.string()), + search: schema.maybe(schema.string()), + sortField: schema.maybe(schema.string()), + sortOrder: schema.maybe(schema.oneOf([schema.literal('asc'), schema.literal('desc')])), + filter: schema.maybe(schema.string()), +}); + type ErrorFactory = (message: string) => Error; export const throwErrors = (createError: ErrorFactory) => (errors: rt.Errors) => { diff --git a/x-pack/plugins/stack_connectors/common/experimental_features.ts b/x-pack/plugins/stack_connectors/common/experimental_features.ts index dc4940d6dbd6a..495921a95c60e 100644 --- a/x-pack/plugins/stack_connectors/common/experimental_features.ts +++ b/x-pack/plugins/stack_connectors/common/experimental_features.ts @@ -14,7 +14,7 @@ export type ExperimentalFeatures = typeof allowedExperimentalValues; export const allowedExperimentalValues = Object.freeze({ isMustacheAutocompleteOn: false, sentinelOneConnectorOn: true, - crowdstrikeConnectorOn: false, + crowdstrikeConnectorOn: true, }); export type ExperimentalConfigKeys = Array; diff --git a/x-pack/plugins/stack_connectors/server/plugin.test.ts b/x-pack/plugins/stack_connectors/server/plugin.test.ts index cd8d59f3a9f60..ee99a4e4be297 100644 --- a/x-pack/plugins/stack_connectors/server/plugin.test.ts +++ b/x-pack/plugins/stack_connectors/server/plugin.test.ts @@ -131,7 +131,7 @@ describe('Stack Connectors Plugin', () => { name: 'Torq', }) ); - expect(actionsSetup.registerSubActionConnectorType).toHaveBeenCalledTimes(8); + expect(actionsSetup.registerSubActionConnectorType).toHaveBeenCalledTimes(9); expect(actionsSetup.registerSubActionConnectorType).toHaveBeenNthCalledWith( 1, expect.objectContaining({ @@ -181,6 +181,20 @@ describe('Stack Connectors Plugin', () => { name: 'IBM Resilient', }) ); + expect(actionsSetup.registerSubActionConnectorType).toHaveBeenNthCalledWith( + 8, + expect.objectContaining({ + id: '.sentinelone', + name: 'Sentinel One', + }) + ); + expect(actionsSetup.registerSubActionConnectorType).toHaveBeenNthCalledWith( + 9, + expect.objectContaining({ + id: '.crowdstrike', + name: 'CrowdStrike', + }) + ); }); }); }); diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 0c30130edc267..a1871e039fbb3 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -13331,10 +13331,8 @@ "xpack.elasticAssistant.assistant.connectors.connectorMissingCallout.conversationSettingsLink": "Paramètres de conversation", "xpack.elasticAssistant.assistant.connectors.connectorSelector.ariaLabel": "Sélecteur de conversation", "xpack.elasticAssistant.assistant.connectors.connectorSelector.newConnectorOptions": "Ajouter un nouveau connecteur...", - "xpack.elasticAssistant.assistant.connectors.connectorSelectorInline.connectorLabel": "Connecteur :", "xpack.elasticAssistant.assistant.connectors.connectorSelectorInline.connectorPlaceholder": "Sélectionner un connecteur", "xpack.elasticAssistant.assistant.connectors.preconfiguredTitle": "Préconfiguré", - "xpack.elasticAssistant.assistant.connectors.setup.complete": "Configuration du connecteur terminée !", "xpack.elasticAssistant.assistant.connectors.setup.skipTitle": "Cliquez pour ignorer...", "xpack.elasticAssistant.assistant.connectors.setup.timestampAtTitle": "à", "xpack.elasticAssistant.assistant.connectors.setup.userAssistantTitle": "Assistant", @@ -13503,7 +13501,6 @@ "xpack.elasticAssistant.connectors.models.modelSelector.placeholderText": "Sélectionnez ou saisissez pour créer une nouvelle...", "xpack.elasticAssistant.connectors.useLoadActionTypes.errorMessage": "Bienvenue sur votre assistant d’intelligence artificielle Elastic. Je suis votre portail 100 % open source vers votre vie Elastic. ", "xpack.elasticAssistant.connectors.useLoadConnectors.errorMessage": "Bienvenue sur votre assistant d’intelligence artificielle Elastic. Je suis votre portail 100 % open source vers votre vie Elastic. ", - "xpack.elasticAssistant.content.prompts.welcome.welcomeSecurityPrompt": "Bienvenue sur votre assistant d’intelligence artificielle Elastic. Je suis votre portail 100 % open source vers Elastic Security. ", "xpack.elasticAssistant.dataAnonymization.settings.anonymizationSettings.calloutParagraph1": "Les champs ci-dessous sont permis par défaut", "xpack.elasticAssistant.dataAnonymization.settings.anonymizationSettings.calloutParagraph2": "Activer optionnellement l’anonymisation pour ces champs", "xpack.elasticAssistant.dataAnonymization.settings.anonymizationSettings.calloutTitle": "Valeur par défaut de l'anonymisation", @@ -43907,7 +43904,6 @@ "aiAssistantManagementSelection.aiAssistantSelectionPage.observabilityLabel": "Assistant d'IA Elastic pour Observability", "aiAssistantManagementSelection.aiAssistantSettingsPage.descriptionTextLabel": "L'Assistant d'IA utilise l'IA générative pour aider votre équipe en expliquant les erreurs, en suggérant une résolution et en vous aidant à demander, analyser et visualiser vos données.", "aiAssistantManagementSelection.aiAssistantSettingsPage.h2.aIAssistantLabel": "Assistant d'intelligence artificielle", - "aiAssistantManagementSelection.aiAssistantSettingsPage.obsAssistant.documentationLinkLabel": "Documentation", "aiAssistantManagementSelection.app.description": "Gérer les Assistants d'IA.", "aiAssistantManagementSelection.app.title": "Assistants d'IA", "aiAssistantManagementSelection.app.titleBar": "Assistants d'IA", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 38cccd34c8e09..7b1fb5c238f52 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -13310,10 +13310,8 @@ "xpack.elasticAssistant.assistant.connectors.connectorMissingCallout.conversationSettingsLink": "会話設定", "xpack.elasticAssistant.assistant.connectors.connectorSelector.ariaLabel": "会話セレクター", "xpack.elasticAssistant.assistant.connectors.connectorSelector.newConnectorOptions": "新しいコネクターを追加...", - "xpack.elasticAssistant.assistant.connectors.connectorSelectorInline.connectorLabel": "コネクター:", "xpack.elasticAssistant.assistant.connectors.connectorSelectorInline.connectorPlaceholder": "コネクターを選択", "xpack.elasticAssistant.assistant.connectors.preconfiguredTitle": "構成済み", - "xpack.elasticAssistant.assistant.connectors.setup.complete": "コネクターのセットアップが完了しました!", "xpack.elasticAssistant.assistant.connectors.setup.skipTitle": "クリックしてスキップ....", "xpack.elasticAssistant.assistant.connectors.setup.timestampAtTitle": "に", "xpack.elasticAssistant.assistant.connectors.setup.userAssistantTitle": "アシスタント", @@ -13482,7 +13480,6 @@ "xpack.elasticAssistant.connectors.models.modelSelector.placeholderText": "選択するか、入力して新規作成...", "xpack.elasticAssistant.connectors.useLoadActionTypes.errorMessage": "Elastic AI Assistantへようこそ!Elasticを活用するための100%オープンソースのポータルです。", "xpack.elasticAssistant.connectors.useLoadConnectors.errorMessage": "Elastic AI Assistantへようこそ!Elasticを活用するための100%オープンソースのポータルです。", - "xpack.elasticAssistant.content.prompts.welcome.welcomeSecurityPrompt": "Elastic AI Assistantへようこそ!Elasticセキュリティを活用するための100%オープンソースのポータルです。", "xpack.elasticAssistant.dataAnonymization.settings.anonymizationSettings.calloutParagraph1": "このフィールドはデフォルトで許可されています", "xpack.elasticAssistant.dataAnonymization.settings.anonymizationSettings.calloutParagraph2": "任意で、これらのフィールドの匿名化を有効にします", "xpack.elasticAssistant.dataAnonymization.settings.anonymizationSettings.calloutTitle": "匿名化デフォルト", @@ -43883,7 +43880,6 @@ "aiAssistantManagementSelection.aiAssistantSelectionPage.observabilityLabel": "Elastic AI Assistant for Observability", "aiAssistantManagementSelection.aiAssistantSettingsPage.descriptionTextLabel": "AI Assistantは、生成AIを使用して、エラーを説明したり、改善策を提案したり、データのリクエスト、分析、可視化を支援したりすることで、チームを支援します。", "aiAssistantManagementSelection.aiAssistantSettingsPage.h2.aIAssistantLabel": "AI Assistant", - "aiAssistantManagementSelection.aiAssistantSettingsPage.obsAssistant.documentationLinkLabel": "ドキュメント", "aiAssistantManagementSelection.app.description": "AI Assistantを管理します。", "aiAssistantManagementSelection.app.title": "AI Assistant", "aiAssistantManagementSelection.app.titleBar": "AI Assistant", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 99c3441cddc6b..c783af0ea5060 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -13336,10 +13336,8 @@ "xpack.elasticAssistant.assistant.connectors.connectorMissingCallout.conversationSettingsLink": "对话设置", "xpack.elasticAssistant.assistant.connectors.connectorSelector.ariaLabel": "对话选择器", "xpack.elasticAssistant.assistant.connectors.connectorSelector.newConnectorOptions": "添加新连接器……", - "xpack.elasticAssistant.assistant.connectors.connectorSelectorInline.connectorLabel": "连接器:", "xpack.elasticAssistant.assistant.connectors.connectorSelectorInline.connectorPlaceholder": "选择连接器", "xpack.elasticAssistant.assistant.connectors.preconfiguredTitle": "预配置", - "xpack.elasticAssistant.assistant.connectors.setup.complete": "连接器设置完成!", "xpack.elasticAssistant.assistant.connectors.setup.skipTitle": "单击以跳过……", "xpack.elasticAssistant.assistant.connectors.setup.timestampAtTitle": "处于", "xpack.elasticAssistant.assistant.connectors.setup.userAssistantTitle": "助手", @@ -13508,7 +13506,6 @@ "xpack.elasticAssistant.connectors.models.modelSelector.placeholderText": "选择或键入以新建……", "xpack.elasticAssistant.connectors.useLoadActionTypes.errorMessage": "欢迎使用 Elastic AI 助手!我是您的 100% 开源门户,可帮助您熟练使用 Elastic。", "xpack.elasticAssistant.connectors.useLoadConnectors.errorMessage": "欢迎使用 Elastic AI 助手!我是您的 100% 开源门户,可帮助您熟练使用 Elastic。", - "xpack.elasticAssistant.content.prompts.welcome.welcomeSecurityPrompt": "欢迎使用 Elastic AI 助手!我是您的 100% 开源门户,可帮助您熟练使用 Elastic Security。", "xpack.elasticAssistant.dataAnonymization.settings.anonymizationSettings.calloutParagraph1": "默认允许使用以下字段", "xpack.elasticAssistant.dataAnonymization.settings.anonymizationSettings.calloutParagraph2": "(可选)对这些字段启用匿名处理", "xpack.elasticAssistant.dataAnonymization.settings.anonymizationSettings.calloutTitle": "匿名处理默认设置", @@ -43931,7 +43928,6 @@ "aiAssistantManagementSelection.aiAssistantSelectionPage.observabilityLabel": "适用于 Observability 的 Elastic AI 助手", "aiAssistantManagementSelection.aiAssistantSettingsPage.descriptionTextLabel": "通过解释错误,建议补救措施并帮助您请求、分析和可视化数据,AI 助手使用生成式 AI 来为您的团队提供帮助。", "aiAssistantManagementSelection.aiAssistantSettingsPage.h2.aIAssistantLabel": "AI 助手", - "aiAssistantManagementSelection.aiAssistantSettingsPage.obsAssistant.documentationLinkLabel": "文档", "aiAssistantManagementSelection.app.description": "管理您的 AI 助手。", "aiAssistantManagementSelection.app.title": "AI 助手", "aiAssistantManagementSelection.app.titleBar": "AI 助手", diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table_state.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table_state.tsx index 65353acf5c9a6..31f93378ef9a6 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table_state.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table_state.tsx @@ -78,7 +78,7 @@ export type AlertsTableStateProps = { pageSize?: number; browserFields?: BrowserFields; onUpdate?: (args: TableUpdateHandlerArgs) => void; - onLoaded?: () => void; + onLoaded?: (alerts: Alerts) => void; runtimeMappings?: MappingRuntimeFields; showAlertStatusWithFlapping?: boolean; toolbarVisibility?: EuiDataGridToolBarVisibilityOptions; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_fetch_alerts.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_fetch_alerts.tsx index 5a0a5efb18c32..c47c2d3207248 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_fetch_alerts.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_fetch_alerts.tsx @@ -36,7 +36,7 @@ export interface FetchAlertsArgs { pageIndex: number; pageSize: number; }; - onLoaded?: () => void; + onLoaded?: (alerts: Alerts) => void; onPageChange: (pagination: RuleRegistrySearchRequestPagination) => void; runtimeMappings?: MappingRuntimeFields; sort: SortCombinations[]; @@ -259,13 +259,13 @@ const useFetchAlerts = ({ totalAlerts, }); dispatch({ type: 'loading', loading: false }); - onLoaded?.(); + onLoaded?.(alerts); searchSubscription$.current.unsubscribe(); } }, error: (msg) => { dispatch({ type: 'loading', loading: false }); - onLoaded?.(); + onLoaded?.([]); data.search.showError(msg); searchSubscription$.current.unsubscribe(); }, diff --git a/x-pack/test/cloud_security_posture_functional/page_objects/add_cis_integration_form_page.ts b/x-pack/test/cloud_security_posture_functional/page_objects/add_cis_integration_form_page.ts index 1a566a346ad4e..0df5147574d28 100644 --- a/x-pack/test/cloud_security_posture_functional/page_objects/add_cis_integration_form_page.ts +++ b/x-pack/test/cloud_security_posture_functional/page_objects/add_cis_integration_form_page.ts @@ -31,6 +31,9 @@ export function AddCisIntegrationFormPageProvider({ getPostInstallCloudFormationModal: async () => { return await testSubjects.find('postInstallCloudFormationModal'); }, + showLaunchCloudFormationAgentlessButton: async () => { + return await testSubjects.exists('launchCloudFormationAgentlessButton'); + }, }; const cisGcp = { @@ -89,6 +92,9 @@ export function AddCisIntegrationFormPageProvider({ const fieldValue = (await (await testSubjects.find(field)).getAttribute(value)) ?? ''; return fieldValue; }, + showLaunchCloudShellAgentlessButton: async () => { + return await testSubjects.exists('launchGoogleCloudShellAgentlessButton'); + }, }; const isRadioButtonChecked = async (selector: string) => { @@ -113,6 +119,15 @@ export function AddCisIntegrationFormPageProvider({ await PageObjects.header.waitUntilLoadingHasFinished(); }; + const navigateToAddIntegrationCspmWithVersionPage = async (packageVersion: string) => { + await PageObjects.common.navigateToUrl( + 'fleet', + `integrations/cloud_security_posture-${packageVersion}/add-integration/cspm`, + { shouldUseHashForSubUrl: false } + ); + await PageObjects.header.waitUntilLoadingHasFinished(); + }; + const navigateToAddIntegrationCnvmPage = async () => { await PageObjects.common.navigateToUrl( 'fleet', // Defined in Security Solution plugin @@ -181,6 +196,13 @@ export function AddCisIntegrationFormPageProvider({ return await optionToBeClicked; }; + const clickAccordianButton = async (text: string) => { + await PageObjects.header.waitUntilLoadingHasFinished(); + const advancedAccordian = await testSubjects.find(text); + await advancedAccordian.scrollIntoView(); + await advancedAccordian.click(); + }; + const clickOptionButton = async (text: string) => { const optionToBeClicked = await findOptionInPage(text); await optionToBeClicked.scrollIntoView(); @@ -261,6 +283,7 @@ export function AddCisIntegrationFormPageProvider({ cisAws, cisGcp, navigateToAddIntegrationCspmPage, + navigateToAddIntegrationCspmWithVersionPage, navigateToAddIntegrationCnvmPage, navigateToAddIntegrationKspmPage, navigateToIntegrationCspList, @@ -277,6 +300,7 @@ export function AddCisIntegrationFormPageProvider({ clickOptionButton, clickSaveButton, clickSaveIntegrationButton, + clickAccordianButton, getPostInstallModal, fillInTextField, chooseDropDown, diff --git a/x-pack/test/functional/apps/index_lifecycle_management/home_page.ts b/x-pack/test/functional/apps/index_lifecycle_management/home_page.ts index 71056c2d836fc..8d32181210fcd 100644 --- a/x-pack/test/functional/apps/index_lifecycle_management/home_page.ts +++ b/x-pack/test/functional/apps/index_lifecycle_management/home_page.ts @@ -18,6 +18,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { const esClient = getService('es'); const security = getService('security'); const deployment = getService('deployment'); + const testSubjects = getService('testSubjects'); describe('Home page', function () { before(async () => { @@ -80,5 +81,19 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { expect(createdPolicy.length).to.be(1); }); + + it('Shows a prompt when trying to navigate away from the creation form when the form is dirty', async () => { + await pageObjects.indexLifecycleManagement.clickCreatePolicyButton(); + + await pageObjects.indexLifecycleManagement.fillNewPolicyForm({ + policyName, + }); + + // Try to navigate to another page + await testSubjects.click('logo'); + + // Since the form is now dirty it should trigger a confirmation prompt + expect(await testSubjects.exists('navigationBlockConfirmModal')).to.be(true); + }); }); }; diff --git a/x-pack/test/functional/apps/index_management/feature_controls/index_management_security.ts b/x-pack/test/functional/apps/index_management/feature_controls/index_management_security.ts index 7d94e7e3d85c8..4655b79890f41 100644 --- a/x-pack/test/functional/apps/index_management/feature_controls/index_management_security.ts +++ b/x-pack/test/functional/apps/index_management/feature_controls/index_management_security.ts @@ -66,7 +66,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { expect(sections).to.have.length(2); expect(sections[0]).to.eql({ sectionId: 'data', - sectionLinks: ['index_management', 'transform'], + sectionLinks: ['index_management', 'data_quality', 'transform'], }); }); }); diff --git a/x-pack/test/functional/page_objects/index_lifecycle_management_page.ts b/x-pack/test/functional/page_objects/index_lifecycle_management_page.ts index b9cfebfbbb40b..a0061dff067d1 100644 --- a/x-pack/test/functional/page_objects/index_lifecycle_management_page.ts +++ b/x-pack/test/functional/page_objects/index_lifecycle_management_page.ts @@ -27,6 +27,9 @@ export function IndexLifecycleManagementPageProvider({ getService }: FtrProvider async createPolicyButton() { return await testSubjects.find('createPolicyButton'); }, + async clickCreatePolicyButton() { + return await testSubjects.click('createPolicyButton'); + }, async fillNewPolicyForm(policy: Policy) { const { policyName, diff --git a/x-pack/test/rule_registry/security_and_spaces/tests/basic/get_browser_fields_by_feature_id.ts b/x-pack/test/rule_registry/security_and_spaces/tests/basic/get_browser_fields_by_feature_id.ts index fcf67163b2bbb..f922371edc492 100644 --- a/x-pack/test/rule_registry/security_and_spaces/tests/basic/get_browser_fields_by_feature_id.ts +++ b/x-pack/test/rule_registry/security_and_spaces/tests/basic/get_browser_fields_by_feature_id.ts @@ -47,11 +47,16 @@ export default ({ getService }: FtrProviderContext) => { ]); expect(Object.keys(resp.browserFields)).toEqual([ 'base', + 'agent', 'cloud', 'container', + 'error', 'host', 'kibana', + 'observer', 'orchestrator', + 'tls', + 'url', ]); }); @@ -64,11 +69,19 @@ export default ({ getService }: FtrProviderContext) => { ]); expect(Object.keys(resp.browserFields)).toEqual([ 'base', + 'agent', + 'anomaly', 'cloud', 'container', + 'error', 'host', 'kibana', + 'location', + 'monitor', + 'observer', 'orchestrator', + 'tls', + 'url', ]); }); diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_bulk_actions/trial_license_complete_tier/perform_bulk_action.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_bulk_actions/trial_license_complete_tier/perform_bulk_action.ts index 8a1bd6cf4ecfd..cd2c1358edf90 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_bulk_actions/trial_license_complete_tier/perform_bulk_action.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_bulk_actions/trial_license_complete_tier/perform_bulk_action.ts @@ -9,6 +9,7 @@ import expect from 'expect'; import { DETECTION_ENGINE_RULES_BULK_ACTION, DETECTION_ENGINE_RULES_URL, + MAX_MANUAL_RULE_RUN_LOOKBACK_WINDOW_DAYS, NOTIFICATION_THROTTLE_RULE, } from '@kbn/security-solution-plugin/common/constants'; import { @@ -20,6 +21,7 @@ import { EXCEPTION_LIST_ITEM_URL, EXCEPTION_LIST_URL } from '@kbn/securitysoluti import { getCreateExceptionListItemMinimalSchemaMock } from '@kbn/lists-plugin/common/schemas/request/create_exception_list_item_schema.mock'; import { AuthType } from '@kbn/stack-connectors-plugin/common/auth/constants'; import { BaseDefaultableFields } from '@kbn/security-solution-plugin/common/api/detection_engine'; +import moment from 'moment'; import { binaryToString, getSimpleMlRule, @@ -2401,6 +2403,378 @@ export default ({ getService }: FtrProviderContext): void => { }); }); + describe('manual rule run action', () => { + it('should return all existing and enabled rules as succeeded', async () => { + const intervalInMinutes = 25; + const interval = `${intervalInMinutes}m`; + await createRule( + supertest, + log, + getCustomQueryRuleParams({ + rule_id: 'rule-1', + enabled: true, + interval, + }) + ); + await createRule( + supertest, + log, + getCustomQueryRuleParams({ + rule_id: 'rule-2', + enabled: true, + interval, + }) + ); + + const endDate = moment(); + const startDate = endDate.clone().subtract(1, 'h'); + + const { body } = await securitySolutionApi + .performBulkAction({ + query: {}, + body: { + query: '', + action: BulkActionTypeEnum.run, + [BulkActionTypeEnum.run]: { + start_date: startDate.toISOString(), + end_date: endDate.toISOString(), + }, + }, + }) + .expect(200); + + expect(body.attributes.summary).toEqual({ + failed: 0, + skipped: 0, + succeeded: 2, + total: 2, + }); + expect(body.attributes.errors).toBeUndefined(); + }); + + it('should return 400 error when start date > end date', async () => { + const intervalInMinutes = 25; + const interval = `${intervalInMinutes}m`; + const createdRule1 = await createRule( + supertest, + log, + getCustomQueryRuleParams({ + rule_id: 'rule-1', + enabled: true, + interval, + }) + ); + const createdRule2 = await createRule( + supertest, + log, + getCustomQueryRuleParams({ + rule_id: 'rule-2', + enabled: true, + interval, + }) + ); + + const endDate = moment(); + const startDate = endDate.clone().subtract(1, 'h'); + + const { body } = await securitySolutionApi + .performBulkAction({ + query: {}, + body: { + ids: [createdRule1.id, createdRule2.id], + action: BulkActionTypeEnum.run, + [BulkActionTypeEnum.run]: { + start_date: endDate.toISOString(), + end_date: startDate.toISOString(), + }, + }, + }) + .expect(400); + + expect(body.message).toContain('[0]: Backfill end must be greater than backfill start'); + }); + + it('should return 400 error when start date = end date', async () => { + const intervalInMinutes = 25; + const interval = `${intervalInMinutes}m`; + const createdRule1 = await createRule( + supertest, + log, + getCustomQueryRuleParams({ + rule_id: 'rule-1', + enabled: true, + interval, + }) + ); + const createdRule2 = await createRule( + supertest, + log, + getCustomQueryRuleParams({ + rule_id: 'rule-2', + enabled: true, + interval, + }) + ); + + const endDate = moment().subtract(1, 'h'); + const startDate = endDate.clone(); + + const { body } = await securitySolutionApi + .performBulkAction({ + query: {}, + body: { + ids: [createdRule1.id, createdRule2.id], + action: BulkActionTypeEnum.run, + [BulkActionTypeEnum.run]: { + start_date: startDate.toISOString(), + end_date: endDate.toISOString(), + }, + }, + }) + .expect(400); + + expect(body.message).toContain('[0]: Backfill end must be greater than backfill start'); + }); + + it('should return 400 error when start date is in the future', async () => { + const intervalInMinutes = 25; + const interval = `${intervalInMinutes}m`; + const createdRule1 = await createRule( + supertest, + log, + getCustomQueryRuleParams({ + rule_id: 'rule-1', + enabled: true, + interval, + }) + ); + const createdRule2 = await createRule( + supertest, + log, + getCustomQueryRuleParams({ + rule_id: 'rule-2', + enabled: true, + interval, + }) + ); + + const startDate = moment().add(1, 'd'); + + const { body } = await securitySolutionApi + .performBulkAction({ + query: {}, + body: { + ids: [createdRule1.id, createdRule2.id], + action: BulkActionTypeEnum.run, + [BulkActionTypeEnum.run]: { start_date: startDate.toISOString() }, + }, + }) + .expect(400); + + expect(body.message).toContain('[0]: Backfill cannot be scheduled for the future'); + }); + + it('should return 400 error when end date is in the future', async () => { + const intervalInMinutes = 25; + const interval = `${intervalInMinutes}m`; + const createdRule1 = await createRule( + supertest, + log, + getCustomQueryRuleParams({ + rule_id: 'rule-1', + enabled: true, + interval, + }) + ); + const createdRule2 = await createRule( + supertest, + log, + getCustomQueryRuleParams({ + rule_id: 'rule-2', + enabled: true, + interval, + }) + ); + + const endDate = moment().add(1, 'd'); + const startDate = moment().subtract(1, 'd'); + + const { body } = await securitySolutionApi + .performBulkAction({ + query: {}, + body: { + ids: [createdRule1.id, createdRule2.id], + action: BulkActionTypeEnum.run, + [BulkActionTypeEnum.run]: { + start_date: startDate.toISOString(), + end_date: endDate.toISOString(), + }, + }, + }) + .expect(400); + + expect(body.message).toContain('[0]: Backfill cannot be scheduled for the future'); + }); + + it('should return 400 error when start date is far in the past', async () => { + const intervalInMinutes = 25; + const interval = `${intervalInMinutes}m`; + const createdRule1 = await createRule( + supertest, + log, + getCustomQueryRuleParams({ + rule_id: 'rule-1', + enabled: true, + interval, + }) + ); + const createdRule2 = await createRule( + supertest, + log, + getCustomQueryRuleParams({ + rule_id: 'rule-2', + enabled: true, + interval, + }) + ); + + const endDate = moment(); + const startDate = moment().subtract(MAX_MANUAL_RULE_RUN_LOOKBACK_WINDOW_DAYS + 1, 'd'); + + const { body } = await securitySolutionApi + .performBulkAction({ + query: {}, + body: { + ids: [createdRule1.id, createdRule2.id], + action: BulkActionTypeEnum.run, + [BulkActionTypeEnum.run]: { + start_date: startDate.toISOString(), + end_date: endDate.toISOString(), + }, + }, + }) + .expect(400); + + expect(body.message).toContain( + `[0]: Backfill cannot look back more than ${MAX_MANUAL_RULE_RUN_LOOKBACK_WINDOW_DAYS} days` + ); + }); + + it('should return 500 error if some rules do not exist', async () => { + const intervalInMinutes = 25; + const interval = `${intervalInMinutes}m`; + const createdRule1 = await createRule( + supertest, + log, + getCustomQueryRuleParams({ + rule_id: 'rule-1', + enabled: true, + interval, + }) + ); + + const endDate = moment(); + const startDate = endDate.clone().subtract(1, 'h'); + + const { body } = await securitySolutionApi + .performBulkAction({ + query: {}, + body: { + ids: [createdRule1.id, 'rule-2'], + action: BulkActionTypeEnum.run, + [BulkActionTypeEnum.run]: { + start_date: startDate.toISOString(), + end_date: endDate.toISOString(), + }, + }, + }) + .expect(500); + + expect(body.attributes.summary).toEqual({ + failed: 1, + skipped: 0, + succeeded: 1, + total: 2, + }); + + expect(body.attributes.errors).toHaveLength(1); + expect(body.attributes.errors[0]).toEqual({ + message: 'Rule not found', + status_code: 500, + rules: [ + { + id: 'rule-2', + }, + ], + }); + }); + + it('should return 500 error if some rules are disabled', async () => { + const intervalInMinutes = 25; + const interval = `${intervalInMinutes}m`; + const createdRule1 = await createRule( + supertest, + log, + getCustomQueryRuleParams({ + rule_id: 'rule-1', + enabled: false, + interval, + }) + ); + const createdRule2 = await createRule( + supertest, + log, + getCustomQueryRuleParams({ + rule_id: 'rule-2', + enabled: true, + interval, + }) + ); + + const endDate = moment(); + const startDate = endDate.clone().subtract(1, 'h'); + + const { body } = await securitySolutionApi + .performBulkAction({ + query: {}, + body: { + ids: [createdRule1.id, createdRule2.id], + action: BulkActionTypeEnum.run, + [BulkActionTypeEnum.run]: { + start_date: startDate.toISOString(), + end_date: endDate.toISOString(), + }, + }, + }) + .expect(500); + + expect(body.attributes.summary).toEqual({ + failed: 1, + skipped: 0, + succeeded: 1, + total: 2, + }); + + expect(body.attributes.errors).toHaveLength(1); + expect(body.attributes.errors).toEqual( + expect.arrayContaining([ + { + message: 'Cannot schedule manual rule run for a disabled rule', + status_code: 500, + err_code: 'MANUAL_RULE_RUN_DISABLED_RULE', + rules: [{ id: createdRule1.id, name: createdRule1.name }], + }, + ]) + ); + expect(body.attributes.results).toEqual({ + updated: [expect.objectContaining(createdRule2)], + created: [], + deleted: [], + skipped: [], + }); + }); + }); + describe('overwrite_data_views', () => { it('should add an index pattern to a rule and overwrite the data view when overwrite_data_views is true', async () => { const ruleId = 'ruleId'; diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_bulk_actions/trial_license_complete_tier/perform_bulk_action_dry_run.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_bulk_actions/trial_license_complete_tier/perform_bulk_action_dry_run.ts index 149af89f6a72a..c9eefd8bdbb65 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_bulk_actions/trial_license_complete_tier/perform_bulk_action_dry_run.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_bulk_actions/trial_license_complete_tier/perform_bulk_action_dry_run.ts @@ -9,7 +9,13 @@ import { BulkActionTypeEnum, BulkActionEditTypeEnum, } from '@kbn/security-solution-plugin/common/api/detection_engine/rule_management'; -import { getSimpleMlRule, getSimpleRule, installMockPrebuiltRules } from '../../../utils'; +import moment from 'moment'; +import { + getCustomQueryRuleParams, + getSimpleMlRule, + getSimpleRule, + installMockPrebuiltRules, +} from '../../../utils'; import { createRule, createAlertsIndex, @@ -289,5 +295,164 @@ export default ({ getService }: FtrProviderContext): void => { }); }); }); + + describe('schedule manual rule run action', () => { + it('should return all existing and enabled rules as succeeded', async () => { + const intervalInMinutes = 25; + const interval = `${intervalInMinutes}m`; + const createdRule1 = await createRule( + supertest, + log, + getCustomQueryRuleParams({ + rule_id: 'rule-1', + enabled: true, + interval, + }) + ); + const createdRule2 = await createRule( + supertest, + log, + getCustomQueryRuleParams({ + rule_id: 'rule-2', + enabled: true, + interval, + }) + ); + + const endDate = moment(); + const startDate = endDate.clone().subtract(1, 'h'); + + const { body } = await securitySolutionApi + .performBulkAction({ + query: { dry_run: true }, + body: { + ids: [createdRule1.id, createdRule2.id], + action: BulkActionTypeEnum.run, + [BulkActionTypeEnum.run]: { + start_date: startDate.toISOString(), + end_date: endDate.toISOString(), + }, + }, + }) + .expect(200); + + expect(body.attributes.summary).toEqual({ + failed: 0, + skipped: 0, + succeeded: 2, + total: 2, + }); + expect(body.attributes.errors).toBeUndefined(); + }); + + it('should return 500 error if some rules do not exist', async () => { + const intervalInMinutes = 25; + const interval = `${intervalInMinutes}m`; + const createdRule1 = await createRule( + supertest, + log, + getCustomQueryRuleParams({ + rule_id: 'rule-1', + enabled: true, + interval, + }) + ); + + const endDate = moment(); + const startDate = endDate.clone().subtract(1, 'h'); + + const { body } = await securitySolutionApi + .performBulkAction({ + query: { dry_run: true }, + body: { + ids: [createdRule1.id, 'rule-2'], + action: BulkActionTypeEnum.run, + [BulkActionTypeEnum.run]: { + start_date: startDate.toISOString(), + end_date: endDate.toISOString(), + }, + }, + }) + .expect(500); + + expect(body.attributes.summary).toEqual({ + failed: 1, + skipped: 0, + succeeded: 1, + total: 2, + }); + + expect(body.attributes.errors).toHaveLength(1); + expect(body.attributes.errors[0]).toEqual({ + message: 'Rule not found', + status_code: 500, + rules: [ + { + id: 'rule-2', + }, + ], + }); + }); + + it('should return 500 error if some rules are disabled', async () => { + const intervalInMinutes = 25; + const interval = `${intervalInMinutes}m`; + const createdRule1 = await createRule( + supertest, + log, + getCustomQueryRuleParams({ + rule_id: 'rule-1', + enabled: false, + interval, + }) + ); + const createdRule2 = await createRule( + supertest, + log, + getCustomQueryRuleParams({ + rule_id: 'rule-2', + enabled: true, + interval, + }) + ); + + const endDate = moment(); + const startDate = endDate.clone().subtract(1, 'h'); + + const { body } = await securitySolutionApi + .performBulkAction({ + query: { dry_run: true }, + body: { + ids: [createdRule1.id, createdRule2.id], + action: BulkActionTypeEnum.run, + [BulkActionTypeEnum.run]: { + start_date: startDate.toISOString(), + end_date: endDate.toISOString(), + }, + }, + }) + .expect(500); + + expect(body.attributes.summary).toEqual({ + failed: 1, + skipped: 0, + succeeded: 1, + total: 2, + }); + + expect(body.attributes.errors).toHaveLength(1); + expect(body.attributes.errors[0]).toEqual({ + err_code: 'MANUAL_RULE_RUN_DISABLED_RULE', + message: 'Cannot schedule manual rule run for a disabled rule', + status_code: 500, + rules: [ + { + id: createdRule1.id, + name: createdRule1.name, + }, + ], + }); + }); + }); }); }; diff --git a/x-pack/test/security_solution_api_integration/test_suites/security_solution_endpoint_api_int/apis/resolver/common.ts b/x-pack/test/security_solution_api_integration/test_suites/security_solution_endpoint_api_int/apis/resolver/common.ts index 88d31aea15813..4a9102638edb1 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/security_solution_endpoint_api_int/apis/resolver/common.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/security_solution_endpoint_api_int/apis/resolver/common.ts @@ -35,6 +35,7 @@ export const schemaWithAncestry: ResolverSchema = { ancestry: 'process.Ext.ancestry', id: 'process.entity_id', parent: 'process.parent.entity_id', + agentId: 'agent.id', }; /** @@ -43,6 +44,7 @@ export const schemaWithAncestry: ResolverSchema = { export const schemaWithoutAncestry: ResolverSchema = { id: 'process.entity_id', parent: 'process.parent.entity_id', + agentId: 'agent.id', }; /** @@ -52,6 +54,7 @@ export const schemaWithName: ResolverSchema = { id: 'process.entity_id', parent: 'process.parent.entity_id', name: 'process.name', + agentId: 'agent.id', }; const createLevels = ({ diff --git a/x-pack/test/security_solution_api_integration/test_suites/security_solution_endpoint_api_int/apis/resolver/entity.ts b/x-pack/test/security_solution_api_integration/test_suites/security_solution_endpoint_api_int/apis/resolver/entity.ts index 42b30ce18063f..31de9cce299dc 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/security_solution_endpoint_api_int/apis/resolver/entity.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/security_solution_endpoint_api_int/apis/resolver/entity.ts @@ -41,7 +41,7 @@ export default function ({ getService }: FtrProviderContext) { parent: 'process.parent.entity_id', name: 'process.name', }, - // this value is from the es archive + // this value comes from the es archive id: '{98da333e-2060-5fc9-2e01-000000003f00}', }, ]); @@ -84,9 +84,11 @@ export default function ({ getService }: FtrProviderContext) { parent: 'process.parent.entity_id', ancestry: 'process.Ext.ancestry', name: 'process.name', + agentId: 'agent.id', }, - // this value is from the es archive + // these values come from the es archive id: 'MTIwNWY1NWQtODRkYS00MzkxLWIyNWQtYTNkNGJmNDBmY2E1LTc1NTItMTMyNDM1NDY1MTQuNjI0MjgxMDA=', + agentId: '1205f55d-84da-4391-b25d-a3d4bf40fca5', }, ]); }); diff --git a/x-pack/test/security_solution_api_integration/test_suites/security_solution_endpoint_api_int/apis/resolver/entity_id.ts b/x-pack/test/security_solution_api_integration/test_suites/security_solution_endpoint_api_int/apis/resolver/entity_id.ts index 69359a7003369..ab2c96756f463 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/security_solution_endpoint_api_int/apis/resolver/entity_id.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/security_solution_endpoint_api_int/apis/resolver/entity_id.ts @@ -115,6 +115,7 @@ export default function ({ getService }: FtrProviderContext) { to: timestampAsDateSafeVersion(childWithEntityID)?.toISOString(), }, indexPatterns: ['logs-*'], + agentId: origin.agent?.id, }) .expect(200); expect(body.length).to.be(1); @@ -187,6 +188,7 @@ export default function ({ getService }: FtrProviderContext) { to: timestampAsDateSafeVersion(origin)?.toISOString(), }, indexPatterns: ['logs-*'], + agentId: origin.agent?.id, }) .expect(200); // the origin itself will be returned as part of the /tree request diff --git a/x-pack/test/security_solution_api_integration/test_suites/security_solution_endpoint_api_int/apis/resolver/tree.ts b/x-pack/test/security_solution_api_integration/test_suites/security_solution_endpoint_api_int/apis/resolver/tree.ts index 9707b430b0182..e161a5d00f4f4 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/security_solution_endpoint_api_int/apis/resolver/tree.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/security_solution_endpoint_api_int/apis/resolver/tree.ts @@ -30,9 +30,11 @@ export default function ({ getService }: FtrProviderContext) { { category: RelatedEventCategory.File, count: 1 }, { category: RelatedEventCategory.Registry, count: 1 }, ]; + const relatedAlerts = 4; let resolverTrees: GeneratedTrees; let tree: Tree; + let tree2: Tree; const treeOptions: Options = { ancestors: 5, relatedEvents: relatedEventsToGen, @@ -41,16 +43,15 @@ export default function ({ getService }: FtrProviderContext) { generations: 2, percentTerminated: 100, percentWithRelated: 100, - numTrees: 1, + numTrees: 2, alwaysGenMaxChildrenPerNode: true, ancestryArraySize: 2, }; - describe('@ess @serverless Resolver tree', function () { before(async () => { resolverTrees = await resolver.createTrees(treeOptions); - // we only requested a single alert so there's only 1 tree - tree = resolverTrees.trees[0]; + // we need tree2 for comparison tests + [tree, tree2] = resolverTrees.trees; }); after(async () => { await resolver.deleteData(resolverTrees); @@ -72,6 +73,7 @@ export default function ({ getService }: FtrProviderContext) { to: tree.endTime.toISOString(), }, indexPatterns: ['logs-*'], + agentId: tree.agentId, }) .expect(200); verifyTree({ @@ -97,6 +99,7 @@ export default function ({ getService }: FtrProviderContext) { to: tree.endTime.toISOString(), }, indexPatterns: ['logs-*'], + agentId: tree.agentId, }) .expect(200); expect(body).to.be.empty(); @@ -118,6 +121,7 @@ export default function ({ getService }: FtrProviderContext) { to: tree.endTime.toISOString(), }, indexPatterns: ['logs-*'], + agentId: tree.agentId, }) .expect(200); verifyTree({ @@ -143,6 +147,7 @@ export default function ({ getService }: FtrProviderContext) { to: tree.endTime.toISOString(), }, indexPatterns: ['logs-*'], + agentId: tree.agentId, }) .expect(200); verifyTree({ @@ -171,6 +176,7 @@ export default function ({ getService }: FtrProviderContext) { to: from, }, indexPatterns: ['logs-*'], + agentId: tree.agentId, }) .expect(200); verifyTree({ @@ -198,6 +204,7 @@ export default function ({ getService }: FtrProviderContext) { to: tree.endTime.toISOString(), }, indexPatterns: ['logs-*'], + agentId: tree.agentId, }) .expect(200); verifyTree({ @@ -234,6 +241,7 @@ export default function ({ getService }: FtrProviderContext) { to: tree.endTime.toISOString(), }, indexPatterns: ['logs-*'], + agentId: tree.agentId, }) .expect(200); verifyTree({ @@ -265,6 +273,7 @@ export default function ({ getService }: FtrProviderContext) { to: tree.endTime.toISOString(), }, indexPatterns: ['doesnotexist-*'], + agentId: tree.agentId, }) .expect(200); expect(body).to.be.empty(); @@ -287,6 +296,7 @@ export default function ({ getService }: FtrProviderContext) { to: tree.endTime.toISOString(), }, indexPatterns: ['logs-*'], + agentId: tree.agentId, }) .expect(200); verifyTree({ @@ -317,6 +327,7 @@ export default function ({ getService }: FtrProviderContext) { to: tree.endTime.toISOString(), }, indexPatterns: ['logs-*'], + agentId: tree.agentId, }) .expect(200); verifyTree({ @@ -346,6 +357,7 @@ export default function ({ getService }: FtrProviderContext) { to: tree.endTime.toISOString(), }, indexPatterns: ['logs-*'], + agentId: tree.agentId, }) .expect(200); expect(body).to.be.empty(); @@ -369,6 +381,7 @@ export default function ({ getService }: FtrProviderContext) { to: tree.endTime.toISOString(), }, indexPatterns: ['logs-*'], + agentId: tree.agentId, }) .expect(200); verifyTree({ @@ -402,6 +415,7 @@ export default function ({ getService }: FtrProviderContext) { to: tree.endTime.toISOString(), }, indexPatterns: ['logs-*'], + agentId: tree.agentId, }) .expect(200); verifyTree({ @@ -435,6 +449,7 @@ export default function ({ getService }: FtrProviderContext) { to: tree.endTime.toISOString(), }, indexPatterns: ['logs-*'], + agentId: tree.agentId, }) .expect(200); verifyTree({ @@ -472,6 +487,7 @@ export default function ({ getService }: FtrProviderContext) { to: tree.endTime.toISOString(), }, indexPatterns: ['logs-*'], + agentId: tree.agentId, }) .expect(200); verifyTree({ @@ -508,6 +524,7 @@ export default function ({ getService }: FtrProviderContext) { to: end, }, indexPatterns: ['logs-*'], + agentId: tree.agentId, }) .expect(200); verifyTree({ @@ -537,6 +554,7 @@ export default function ({ getService }: FtrProviderContext) { to: tree.endTime.toISOString(), }, indexPatterns: ['logs-*'], + agentId: tree.agentId, }) .expect(200); verifyTree({ @@ -575,6 +593,7 @@ export default function ({ getService }: FtrProviderContext) { to: tree.endTime.toISOString(), }, indexPatterns: ['logs-*'], + agentId: tree.agentId, }) .expect(200); verifyTree({ @@ -613,6 +632,7 @@ export default function ({ getService }: FtrProviderContext) { to: tree.endTime.toISOString(), }, indexPatterns: ['logs-*'], + agentId: tree.agentId, }) .expect(200); verifyTree({ @@ -651,6 +671,7 @@ export default function ({ getService }: FtrProviderContext) { to: tree.endTime.toISOString(), }, indexPatterns: ['logs-*'], + agentId: tree.agentId, }) .expect(200); expect(body).to.be.empty(); @@ -667,5 +688,136 @@ export default function ({ getService }: FtrProviderContext) { }); }); }); + describe('different agent.ids', () => { + it('should return correct nodes for tree1 and tree2 based on agent.id', async () => { + const { body: body1 }: { body: ResolverNode[] } = await supertest + .post('/api/endpoint/resolver/tree') + .set(HEADERS) + .send({ + descendants: 100, + descendantLevels: 10, + ancestors: 50, + schema: schemaWithAncestry, + nodes: [tree.origin.id], + timeRange: { + from: tree.startTime.toISOString(), + to: tree.endTime.toISOString(), + }, + indexPatterns: ['logs-*'], + agentId: tree.agentId, + }) + .expect(200); + verifyTree({ + expectations: [ + { + origin: tree.origin.id, + nodeExpectations: { descendants: 12, descendantLevels: 2, ancestors: 5 }, + }, + ], + response: body1, + schema: schemaWithAncestry, + genTree: tree, + relatedEventsCategories: relatedEventsToGen, + }); + + const { body: body2 }: { body: ResolverNode[] } = await supertest + .post('/api/endpoint/resolver/tree') + .set(HEADERS) + .send({ + descendants: 100, + descendantLevels: 10, + ancestors: 50, + schema: schemaWithAncestry, + nodes: [tree2.origin.id], + timeRange: { + from: tree2.startTime.toISOString(), + to: tree2.endTime.toISOString(), + }, + indexPatterns: ['logs-*'], + agentId: 'wrong-agent-id', + }) + .expect(200); + verifyTree({ + expectations: [ + { + origin: tree2.origin.id, + nodeExpectations: { descendants: 0, descendantLevels: 0, ancestors: 0 }, + }, + ], + response: body2, + schema: schemaWithAncestry, + genTree: tree2, + relatedEventsCategories: relatedEventsToGen, + }); + }); + }); + + describe('collision in process.entity_id', () => { + it('should handle process.entity_id collisions correctly', async () => { + const duplicateEntityId = tree.origin.id; + + const { body: body1 }: { body: ResolverNode[] } = await supertest + .post('/api/endpoint/resolver/tree') + .set(HEADERS) + .send({ + descendants: 100, + descendantLevels: 10, + ancestors: 50, + schema: schemaWithAncestry, + nodes: [duplicateEntityId], + timeRange: { + from: tree.startTime.toISOString(), + to: tree.endTime.toISOString(), + }, + indexPatterns: ['logs-*'], + agentId: tree.agentId, + }) + .expect(200); + + const { body: body2 }: { body: ResolverNode[] } = await supertest + .post('/api/endpoint/resolver/tree') + .set(HEADERS) + .send({ + descendants: 100, + descendantLevels: 10, + ancestors: 50, + schema: schemaWithAncestry, + nodes: [duplicateEntityId], + timeRange: { + from: tree2.startTime.toISOString(), + to: tree2.endTime.toISOString(), + }, + indexPatterns: ['logs-*'], + agentId: 'wrong-agent-id', + }) + .expect(200); + + verifyTree({ + expectations: [ + { + origin: duplicateEntityId, + nodeExpectations: { descendants: 12, descendantLevels: 2, ancestors: 5 }, + }, + ], + response: body1, + schema: schemaWithAncestry, + genTree: tree, + relatedEventsCategories: relatedEventsToGen, + }); + + verifyTree({ + expectations: [ + { + origin: duplicateEntityId, + nodeExpectations: { descendants: 0, descendantLevels: 0, ancestors: 0 }, + }, + ], + response: body2, + schema: schemaWithAncestry, + genTree: tree2, + relatedEventsCategories: relatedEventsToGen, + }); + }); + }); }); } diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/custom_query_rule.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/custom_query_rule.cy.ts index a40d635cd4bf9..36c84cdf93e2d 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/custom_query_rule.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/custom_query_rule.cy.ts @@ -61,7 +61,7 @@ describe('Create custom query rule', { tags: ['@ess', '@serverless'] }, () => { }); // FLAKEY - see https://github.com/elastic/kibana/issues/182891 - it('@skipInServerless Adds filter on define step', () => { + it('Adds filter on define step', { tags: ['@skipInServerless'] }, () => { visit(CREATE_RULE_URL); fillDefineCustomRule(rule); openAddFilterPopover(); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/machine_learning_rule.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/machine_learning_rule.cy.ts index 0f90e406682f3..57c0c39f8a8f9 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/machine_learning_rule.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/machine_learning_rule.cy.ts @@ -70,10 +70,10 @@ describe('Machine Learning rules', { tags: ['@ess', '@serverless'] }, () => { ); // ensure no ML jobs are started before the suite machineLearningJobIds.forEach((jobId) => forceStopAndCloseJob({ jobId })); - deleteAlertsAndRules(); }); beforeEach(() => { + deleteAlertsAndRules(); login(); visit(CREATE_RULE_URL); }); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_gaps/bulk_manual_rule_run.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_gaps/bulk_manual_rule_run.cy.ts new file mode 100644 index 0000000000000..17cde9485a13c --- /dev/null +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_gaps/bulk_manual_rule_run.cy.ts @@ -0,0 +1,79 @@ +/* + * 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 { scheduleManualRuleRunForSelectedRules } from '../../../../tasks/rules_bulk_actions'; +import { MODAL_ERROR_BODY, TOASTER_BODY } from '../../../../screens/alerts_detection_rules'; +import { visitRulesManagementTable } from '../../../../tasks/rules_management'; +import { + disableAutoRefresh, + clickErrorToastBtn, + selectAllRules, + selectRulesByName, +} from '../../../../tasks/alerts_detection_rules'; +import { getNewRule } from '../../../../objects/rule'; +import { deleteAlertsAndRules } from '../../../../tasks/api_calls/common'; +import { createRule } from '../../../../tasks/api_calls/rules'; +import { login } from '../../../../tasks/login'; + +// Currently FF are not supported on MKI environments, so this test should be skipped from MKI environments. +// Once `manualRuleRunEnabled` FF is removed, we can remove `@skipInServerlessMKI` as well +describe('Manual rule run', { tags: ['@ess', '@serverless', '@skipInServerlessMKI'] }, () => { + beforeEach(() => { + login(); + deleteAlertsAndRules(); + + const defaultValues = { enabled: true, interval: '5m', from: 'now-6m' }; + createRule(getNewRule({ rule_id: '1', name: 'Rule 1', ...defaultValues })); + createRule(getNewRule({ rule_id: '2', name: 'Rule 2', ...defaultValues })); + createRule(getNewRule({ rule_id: '3', name: 'Rule 3', ...defaultValues, enabled: false })); + createRule(getNewRule({ rule_id: '4', name: 'Rule 4', ...defaultValues })); + createRule(getNewRule({ rule_id: '5', name: 'Rule 5', ...defaultValues, enabled: false })); + + visitRulesManagementTable(); + disableAutoRefresh(); + }); + + it('schedule enabled rules', () => { + const enabledRules = ['Rule 1', 'Rule 2', 'Rule 4'] as const; + selectRulesByName(enabledRules); + + const enabledCount = enabledRules.length; + const disabledCount = 0; + scheduleManualRuleRunForSelectedRules(enabledCount, disabledCount); + + cy.contains(TOASTER_BODY, `Successfully scheduled manual rule run for ${enabledCount} rule`); + }); + + it('schedule enable rules and show warning about disabled rules', () => { + const enabledRules = ['Rule 1', 'Rule 2', 'Rule 4'] as const; + const disabledRules = ['Rule 3', 'Rule 5'] as const; + selectRulesByName([...enabledRules, ...disabledRules]); + + const enabledCount = enabledRules.length; + const disabledCount = disabledRules.length; + scheduleManualRuleRunForSelectedRules(enabledCount, disabledCount); + + cy.contains(TOASTER_BODY, `Successfully scheduled manual rule run for ${enabledCount} rule`); + }); + + it('schedule enable rules and show partial error for disabled rules when all rules are selected', () => { + selectAllRules(); + + const enabledCount = 3; + const disabledCount = 2; + scheduleManualRuleRunForSelectedRules(enabledCount, disabledCount); + + cy.contains( + TOASTER_BODY, + `${disabledCount} rules failed to schedule manual rule run.See the full error` + ); + + // on error toast button click display error that it is not possible to schedule manual rule run for disabled rules + clickErrorToastBtn(); + cy.contains(MODAL_ERROR_BODY, 'Cannot schedule manual rule run for a disabled rule'); + }); +}); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/prebuilt_rules/prebuilt_rules_preview.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/prebuilt_rules/prebuilt_rules_preview.cy.ts index 13af60594d103..4b4a9542ff1bc 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/prebuilt_rules/prebuilt_rules_preview.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/prebuilt_rules/prebuilt_rules_preview.cy.ts @@ -1143,111 +1143,96 @@ describe('Detection rules, Prebuilt Rules Installation and Update workflow', () }); }); - describe( - 'Viewing rule changes in per-field diff view', - { - tags: TEST_ENV_TAGS, - env: { - ftrConfig: { - kbnServerArgs: [ - `--xpack.securitySolution.enableExperimental=${JSON.stringify([ - 'perFieldPrebuiltRulesDiffingEnabled', - ])}`, - ], - }, - }, - }, - () => { - it('User can see changes in a side-by-side per-field diff view', () => { - clickRuleUpdatesTab(); + describe('Viewing rule changes in per-field diff view', { tags: TEST_ENV_TAGS }, () => { + it('User can see changes in a side-by-side per-field diff view', () => { + clickRuleUpdatesTab(); - openRuleUpdatePreview(OUTDATED_RULE_1['security-rule'].name); - assertSelectedPreviewTab(PREVIEW_TABS.UPDATES); // Should be open by default + openRuleUpdatePreview(OUTDATED_RULE_1['security-rule'].name); + assertSelectedPreviewTab(PREVIEW_TABS.UPDATES); // Should be open by default - cy.get(UPDATE_PREBUILT_RULE_PREVIEW).contains('Current rule').should('be.visible'); - cy.get(UPDATE_PREBUILT_RULE_PREVIEW).contains('Elastic update').should('be.visible'); + cy.get(UPDATE_PREBUILT_RULE_PREVIEW).contains('Current rule').should('be.visible'); + cy.get(UPDATE_PREBUILT_RULE_PREVIEW).contains('Elastic update').should('be.visible'); - cy.get(PER_FIELD_DIFF_WRAPPER).should('have.length', 2); + cy.get(PER_FIELD_DIFF_WRAPPER).should('have.length', 2); - /* Version should be the first field in the order */ - cy.get(PER_FIELD_DIFF_WRAPPER).first().contains('Version').should('be.visible'); - cy.get(PER_FIELD_DIFF_WRAPPER).first().contains('1').should('be.visible'); - cy.get(PER_FIELD_DIFF_WRAPPER).first().contains('2').should('be.visible'); + /* Version should be the first field in the order */ + cy.get(PER_FIELD_DIFF_WRAPPER).first().contains('Version').should('be.visible'); + cy.get(PER_FIELD_DIFF_WRAPPER).first().contains('1').should('be.visible'); + cy.get(PER_FIELD_DIFF_WRAPPER).first().contains('2').should('be.visible'); - cy.get(PER_FIELD_DIFF_WRAPPER).last().contains('Name').should('be.visible'); - cy.get(PER_FIELD_DIFF_WRAPPER).last().contains('Outdated rule 1').should('be.visible'); - cy.get(PER_FIELD_DIFF_WRAPPER).last().contains('Updated rule 1').should('be.visible'); - }); + cy.get(PER_FIELD_DIFF_WRAPPER).last().contains('Name').should('be.visible'); + cy.get(PER_FIELD_DIFF_WRAPPER).last().contains('Outdated rule 1').should('be.visible'); + cy.get(PER_FIELD_DIFF_WRAPPER).last().contains('Updated rule 1').should('be.visible'); + }); - it('User can switch between rules upgrades without closing flyout', () => { - clickRuleUpdatesTab(); + it('User can switch between rules upgrades without closing flyout', () => { + clickRuleUpdatesTab(); - openRuleUpdatePreview(OUTDATED_RULE_1['security-rule'].name); - assertSelectedPreviewTab(PREVIEW_TABS.UPDATES); // Should be open by default + openRuleUpdatePreview(OUTDATED_RULE_1['security-rule'].name); + assertSelectedPreviewTab(PREVIEW_TABS.UPDATES); // Should be open by default - /* Version should be the first field in the order */ - cy.get(PER_FIELD_DIFF_WRAPPER).first().contains('Version').should('be.visible'); - cy.get(PER_FIELD_DIFF_WRAPPER).first().contains('1').should('be.visible'); - cy.get(PER_FIELD_DIFF_WRAPPER).first().contains('2').should('be.visible'); + /* Version should be the first field in the order */ + cy.get(PER_FIELD_DIFF_WRAPPER).first().contains('Version').should('be.visible'); + cy.get(PER_FIELD_DIFF_WRAPPER).first().contains('1').should('be.visible'); + cy.get(PER_FIELD_DIFF_WRAPPER).first().contains('2').should('be.visible'); - cy.get(PER_FIELD_DIFF_WRAPPER).last().contains('Name').should('be.visible'); - cy.get(PER_FIELD_DIFF_WRAPPER).last().contains('Outdated rule 1').should('be.visible'); - cy.get(PER_FIELD_DIFF_WRAPPER).last().contains('Updated rule 1').should('be.visible'); + cy.get(PER_FIELD_DIFF_WRAPPER).last().contains('Name').should('be.visible'); + cy.get(PER_FIELD_DIFF_WRAPPER).last().contains('Outdated rule 1').should('be.visible'); + cy.get(PER_FIELD_DIFF_WRAPPER).last().contains('Updated rule 1').should('be.visible'); - /* Select another rule without closing the preview for the current rule */ - openRuleUpdatePreview(OUTDATED_RULE_2['security-rule'].name); + /* Select another rule without closing the preview for the current rule */ + openRuleUpdatePreview(OUTDATED_RULE_2['security-rule'].name); - /* Make sure the per-field diff is displayed for the newly selected rule */ - cy.get(PER_FIELD_DIFF_WRAPPER).last().contains('Name').should('be.visible'); - cy.get(UPDATE_PREBUILT_RULE_PREVIEW).contains('Outdated rule 2').should('be.visible'); - cy.get(UPDATE_PREBUILT_RULE_PREVIEW).contains('Updated rule 2').should('be.visible'); - cy.get(UPDATE_PREBUILT_RULE_PREVIEW).contains('Outdated rule 1').should('not.exist'); - cy.get(UPDATE_PREBUILT_RULE_PREVIEW).contains('Updated rule 1').should('not.exist'); + /* Make sure the per-field diff is displayed for the newly selected rule */ + cy.get(PER_FIELD_DIFF_WRAPPER).last().contains('Name').should('be.visible'); + cy.get(UPDATE_PREBUILT_RULE_PREVIEW).contains('Outdated rule 2').should('be.visible'); + cy.get(UPDATE_PREBUILT_RULE_PREVIEW).contains('Updated rule 2').should('be.visible'); + cy.get(UPDATE_PREBUILT_RULE_PREVIEW).contains('Outdated rule 1').should('not.exist'); + cy.get(UPDATE_PREBUILT_RULE_PREVIEW).contains('Updated rule 1').should('not.exist'); - cy.get(PER_FIELD_DIFF_WRAPPER).first().contains('Version').should('be.visible'); - cy.get(PER_FIELD_DIFF_WRAPPER).first().contains('1').should('be.visible'); - cy.get(PER_FIELD_DIFF_WRAPPER).first().contains('2').should('be.visible'); - }); + cy.get(PER_FIELD_DIFF_WRAPPER).first().contains('Version').should('be.visible'); + cy.get(PER_FIELD_DIFF_WRAPPER).first().contains('1').should('be.visible'); + cy.get(PER_FIELD_DIFF_WRAPPER).first().contains('2').should('be.visible'); + }); - it('User can see changes when updated rule is a different rule type', () => { - const OUTDATED_RULE_WITH_QUERY_TYPE = createRuleAssetSavedObject({ - name: 'Query rule', - rule_id: 'rule_id', - version: 1, - type: 'query', - language: 'kuery', - }); - const UPDATED_RULE_WITH_EQL_TYPE = createRuleAssetSavedObject({ - language: 'eql', - name: 'EQL rule', - rule_id: 'rule_id', - version: 2, - type: 'eql', - }); - /* Create a new rule and install it */ - createAndInstallMockedPrebuiltRules([OUTDATED_RULE_WITH_QUERY_TYPE]); - /* Create a second version of the rule, making it available for update */ - installPrebuiltRuleAssets([UPDATED_RULE_WITH_EQL_TYPE]); + it('User can see changes when updated rule is a different rule type', () => { + const OUTDATED_RULE_WITH_QUERY_TYPE = createRuleAssetSavedObject({ + name: 'Query rule', + rule_id: 'rule_id', + version: 1, + type: 'query', + language: 'kuery', + }); + const UPDATED_RULE_WITH_EQL_TYPE = createRuleAssetSavedObject({ + language: 'eql', + name: 'EQL rule', + rule_id: 'rule_id', + version: 2, + type: 'eql', + }); + /* Create a new rule and install it */ + createAndInstallMockedPrebuiltRules([OUTDATED_RULE_WITH_QUERY_TYPE]); + /* Create a second version of the rule, making it available for update */ + installPrebuiltRuleAssets([UPDATED_RULE_WITH_EQL_TYPE]); - cy.reload(); - clickRuleUpdatesTab(); + cy.reload(); + clickRuleUpdatesTab(); - openRuleUpdatePreview(OUTDATED_RULE_WITH_QUERY_TYPE['security-rule'].name); - assertSelectedPreviewTab(PREVIEW_TABS.UPDATES); // Should be open by default + openRuleUpdatePreview(OUTDATED_RULE_WITH_QUERY_TYPE['security-rule'].name); + assertSelectedPreviewTab(PREVIEW_TABS.UPDATES); // Should be open by default - cy.get(UPDATE_PREBUILT_RULE_PREVIEW).contains('Current rule').should('be.visible'); - cy.get(UPDATE_PREBUILT_RULE_PREVIEW).contains('Elastic update').should('be.visible'); + cy.get(UPDATE_PREBUILT_RULE_PREVIEW).contains('Current rule').should('be.visible'); + cy.get(UPDATE_PREBUILT_RULE_PREVIEW).contains('Elastic update').should('be.visible'); - cy.get(PER_FIELD_DIFF_WRAPPER).should('have.length', 5); + cy.get(PER_FIELD_DIFF_WRAPPER).should('have.length', 5); - cy.get(PER_FIELD_DIFF_DEFINITION_SECTION).contains('Type').should('be.visible'); - cy.get(PER_FIELD_DIFF_DEFINITION_SECTION).contains('query').should('be.visible'); - cy.get(PER_FIELD_DIFF_DEFINITION_SECTION).contains('eql').should('be.visible'); + cy.get(PER_FIELD_DIFF_DEFINITION_SECTION).contains('Type').should('be.visible'); + cy.get(PER_FIELD_DIFF_DEFINITION_SECTION).contains('query').should('be.visible'); + cy.get(PER_FIELD_DIFF_DEFINITION_SECTION).contains('eql').should('be.visible'); - cy.get(PER_FIELD_DIFF_DEFINITION_SECTION).contains('KQL query').should('exist'); - cy.get(PER_FIELD_DIFF_DEFINITION_SECTION).contains('EQL query').should('exist'); - }); - } - ); + cy.get(PER_FIELD_DIFF_DEFINITION_SECTION).contains('KQL query').should('exist'); + cy.get(PER_FIELD_DIFF_DEFINITION_SECTION).contains('EQL query').should('exist'); + }); + }); }); }); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/entity_analytics/dashboards/entity_analytics/new_risk_score.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/entity_analytics/dashboards/entity_analytics/new_risk_score.cy.ts index da59afaec941c..b704b67ad41d6 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/entity_analytics/dashboards/entity_analytics/new_risk_score.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/entity_analytics/dashboards/entity_analytics/new_risk_score.cy.ts @@ -78,8 +78,7 @@ describe('Entity Analytics Dashboard', { tags: ['@ess', '@serverless'] }, () => }); }); - // https://github.com/elastic/kibana/issues/179687 - describe('When risk engine is enabled', { tags: ['@skipInServerlessMKI'] }, () => { + describe('When risk engine is enabled', () => { beforeEach(() => { login(); mockRiskEngineEnabled(); @@ -151,7 +150,6 @@ describe('Entity Analytics Dashboard', { tags: ['@ess', '@serverless'] }, () => }); beforeEach(() => { - login(); visitWithTimeRange(ALERTS_URL); waitForAlertsToPopulate(); visitWithTimeRange(ENTITY_ANALYTICS_URL); @@ -244,7 +242,6 @@ describe('Entity Analytics Dashboard', { tags: ['@ess', '@serverless'] }, () => }); beforeEach(() => { - login(); visitWithTimeRange(ALERTS_URL); waitForAlertsToPopulate(); visitWithTimeRange(ENTITY_ANALYTICS_URL); diff --git a/x-pack/test/security_solution_cypress/cypress/screens/alerts_detection_rules.ts b/x-pack/test/security_solution_cypress/cypress/screens/alerts_detection_rules.ts index 403d4257687c2..2f59e9362f051 100644 --- a/x-pack/test/security_solution_cypress/cypress/screens/alerts_detection_rules.ts +++ b/x-pack/test/security_solution_cypress/cypress/screens/alerts_detection_rules.ts @@ -38,6 +38,9 @@ export const DUPLICATE_WITH_EXCEPTIONS_WITHOUT_EXPIRED_OPTION = export const DUPLICATE_WITHOUT_EXCEPTIONS_OPTION = '[data-test-subj="withoutExceptions"] label'; +export const CONFIRM_MANUAL_RULE_RUN_WARNING_BTN = + '[data-test-subj="bulkActionConfirmationModal"] [data-test-subj="confirmModalConfirmButton"]'; + export const RULE_SEARCH_FIELD = '[data-test-subj="ruleSearchField"]'; export const EXPORT_ACTION_BTN = '[data-test-subj="exportRuleAction"]'; diff --git a/x-pack/test/security_solution_cypress/cypress/screens/rules_bulk_actions.ts b/x-pack/test/security_solution_cypress/cypress/screens/rules_bulk_actions.ts index cdf458a1e9ad8..46a265f0632fe 100644 --- a/x-pack/test/security_solution_cypress/cypress/screens/rules_bulk_actions.ts +++ b/x-pack/test/security_solution_cypress/cypress/screens/rules_bulk_actions.ts @@ -115,3 +115,8 @@ export const DUPLICATE_RULE_BULK_BTN = '[data-test-subj="duplicateRuleBulk"]'; // EXPORT export const BULK_EXPORT_ACTION_BTN = '[data-test-subj="exportRuleBulk"]'; + +// SCHEDULE MANUAL RULE RUN +export const BULK_MANUAL_RULE_RUN_BTN = '[data-test-subj="scheduleRuleRunBulk"]'; + +export const BULK_MANUAL_RULE_RUN_WARNING_MODAL = '[data-test-subj="bulkActionConfirmationModal"]'; diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/alerts_detection_rules.ts b/x-pack/test/security_solution_cypress/cypress/tasks/alerts_detection_rules.ts index 7304a23f75e77..4be7fb43cd11e 100644 --- a/x-pack/test/security_solution_cypress/cypress/tasks/alerts_detection_rules.ts +++ b/x-pack/test/security_solution_cypress/cypress/tasks/alerts_detection_rules.ts @@ -214,7 +214,6 @@ export const filterByDisabledRules = () => { export const goToRuleDetailsOf = (ruleName: string) => { cy.contains(RULE_NAME, ruleName).click(); - cy.get(PAGE_CONTENT_SPINNER).should('be.visible'); cy.contains(RULE_NAME_HEADER, ruleName).should('be.visible'); cy.get(PAGE_CONTENT_SPINNER).should('not.exist'); }; diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/create_new_rule.ts b/x-pack/test/security_solution_cypress/cypress/tasks/create_new_rule.ts index e8be51d0d3731..65203d2594d07 100644 --- a/x-pack/test/security_solution_cypress/cypress/tasks/create_new_rule.ts +++ b/x-pack/test/security_solution_cypress/cypress/tasks/create_new_rule.ts @@ -802,13 +802,16 @@ export const continueFromDefineStep = () => { getDefineContinueButton().should('exist').click({ force: true }); }; +const optionsToComboboxText = (options: string[]) => { + return options.map((o) => `${o}{downArrow}{enter}{esc}`).join(''); +}; + export const fillDefineMachineLearningRule = (rule: MachineLearningRuleCreateProps) => { const jobsAsArray = isArray(rule.machine_learning_job_id) ? rule.machine_learning_job_id : [rule.machine_learning_job_id]; cy.get(MACHINE_LEARNING_DROPDOWN_INPUT).click({ force: true }); cy.get(MACHINE_LEARNING_DROPDOWN_INPUT).type(optionsToComboboxText(jobsAsArray)); - cy.get(ANOMALY_THRESHOLD_INPUT).type(`{selectall}${rule.anomaly_threshold}`, { force: true, }); @@ -908,14 +911,12 @@ export const enablesAndPopulatesThresholdSuppression = ( cy.get(ALERT_SUPPRESSION_DURATION_PER_TIME_INTERVAL).should('be.enabled').should('be.checked'); }; -const optionsToComboboxText = (options: string[]) => { - return options.map((o) => `${o}{downArrow}{enter}{esc}`).join(''); -}; - export const fillAlertSuppressionFields = (fields: string[]) => { cy.get(ALERT_SUPPRESSION_FIELDS_COMBO_BOX).should('not.be.disabled'); cy.get(ALERT_SUPPRESSION_FIELDS_COMBO_BOX).click(); - cy.get(ALERT_SUPPRESSION_FIELDS_COMBO_BOX).type(optionsToComboboxText(fields)); + fields.forEach((field) => { + cy.get(ALERT_SUPPRESSION_FIELDS_COMBO_BOX).type(`${field}{downArrow}{enter}{esc}`); + }); }; export const clearAlertSuppressionFields = () => { diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/rules_bulk_actions.ts b/x-pack/test/security_solution_cypress/cypress/tasks/rules_bulk_actions.ts index c74214c60fbac..fab3221fecb9d 100644 --- a/x-pack/test/security_solution_cypress/cypress/tasks/rules_bulk_actions.ts +++ b/x-pack/test/security_solution_cypress/cypress/tasks/rules_bulk_actions.ts @@ -10,10 +10,12 @@ import { recurse } from 'cypress-recurse'; import { CONFIRM_DELETE_RULE_BTN, CONFIRM_DUPLICATE_RULE, + CONFIRM_MANUAL_RULE_RUN_WARNING_BTN, DUPLICATE_WITHOUT_EXCEPTIONS_OPTION, DUPLICATE_WITH_EXCEPTIONS_OPTION, DUPLICATE_WITH_EXCEPTIONS_WITHOUT_EXPIRED_OPTION, MODAL_CONFIRMATION_BODY, + MODAL_CONFIRMATION_BTN, MODAL_CONFIRMATION_TITLE, RULES_TAGS_FILTER_BTN, TOASTER_BODY, @@ -49,6 +51,8 @@ import { RULES_BULK_EDIT_SCHEDULES_WARNING, RULES_BULK_EDIT_TAGS, RULES_BULK_EDIT_TIMELINE_TEMPLATES_SELECTOR, + BULK_MANUAL_RULE_RUN_BTN, + BULK_MANUAL_RULE_RUN_WARNING_MODAL, TAGS_RULE_BULK_MENU_ITEM, UPDATE_SCHEDULE_INTERVAL_INPUT, UPDATE_SCHEDULE_LOOKBACK_INPUT, @@ -429,3 +433,21 @@ export const waitForMixedRulesBulkEditModal = (customRulesCount: number) => { `This action can only be applied to ${customRulesCount} custom rules` ); }; + +// SCHEDULE MANUAL RULE RUN +export const scheduleManualRuleRunForSelectedRules = ( + enabledCount: number, + disabledCount: number +) => { + cy.log('Bulk schedule manual rule run for selected rules'); + cy.get(BULK_ACTIONS_BTN).click(); + cy.get(BULK_MANUAL_RULE_RUN_BTN).click(); + if (disabledCount > 0) { + cy.get(BULK_MANUAL_RULE_RUN_WARNING_MODAL).should( + 'have.text', + `This action can only be applied to ${enabledCount} custom rulesThis action can't be applied to the following rules in your selection:${disabledCount} rules (Cannot schedule manual rule run for disabled rules)CancelSchedule ${enabledCount} custom rules` + ); + cy.get(CONFIRM_MANUAL_RULE_RUN_WARNING_BTN).click(); + } + cy.get(MODAL_CONFIRMATION_BTN).click(); +}; diff --git a/x-pack/test_serverless/api_integration/test_suites/search/serverless_search/api_key.ts b/x-pack/test_serverless/api_integration/test_suites/search/serverless_search/api_key.ts index d22d6fc8360ce..f6f6c9a97bc35 100644 --- a/x-pack/test_serverless/api_integration/test_suites/search/serverless_search/api_key.ts +++ b/x-pack/test_serverless/api_integration/test_suites/search/serverless_search/api_key.ts @@ -6,24 +6,34 @@ */ import expect from 'expect'; -import { kibanaTestUser } from '@kbn/test'; +import { kibanaTestSuperuserServerless } from '@kbn/test'; import { SecurityApiKey } from '@elastic/elasticsearch/lib/api/types'; +import { RoleCredentials } from '../../../../shared/services'; import { FtrProviderContext } from '../../../ftr_provider_context'; const API_BASE_PATH = '/internal/serverless_search'; export default function ({ getService }: FtrProviderContext) { const svlCommonApi = getService('svlCommonApi'); - const supertest = getService('supertest'); + const supertestWithoutAuth = getService('supertestWithoutAuth'); + const svlUserManager = getService('svlUserManager'); const es = getService('es'); const log = getService('log'); + let roleAuthc: RoleCredentials; describe('API Key routes', function () { describe('GET api_keys', function () { + before(async () => { + roleAuthc = await svlUserManager.createApiKeyForRole('developer'); + }); + after(async () => { + await svlUserManager.invalidateApiKeyForRole(roleAuthc); + }); it('return apiKeys', async () => { - const { body } = await supertest + const { body } = await supertestWithoutAuth .get(`${API_BASE_PATH}/api_keys`) .set(svlCommonApi.getInternalRequestHeader()) + .set(roleAuthc.apiKeyHeader) .expect(200); expect(body).toBeDefined(); @@ -37,7 +47,9 @@ export default function ({ getService }: FtrProviderContext) { let apiKeys: SecurityApiKey[]; // Delete existing API keys try { - const apiKeysResult = await es.security.getApiKey({ username: kibanaTestUser.username }); + const apiKeysResult = await es.security.getApiKey({ + username: kibanaTestSuperuserServerless.username, + }); apiKeys = apiKeysResult.api_keys; } catch (err) { log.debug('[Setup error] error listing API keys'); @@ -54,18 +66,21 @@ export default function ({ getService }: FtrProviderContext) { }; before(async () => { await deleteAllApiKeys(); + roleAuthc = await svlUserManager.createApiKeyForRole('developer'); }); after(async () => { await deleteAllApiKeys(); + await svlUserManager.invalidateApiKeyForRole(roleAuthc); }); it('can create a key that expires', async () => { const createBody = { name: 'test-api-key-001', expiration: '60d', }; - const { body } = await supertest + const { body } = await supertestWithoutAuth .post(`${API_BASE_PATH}/api_key`) .set(svlCommonApi.getInternalRequestHeader()) + .set(roleAuthc.cookieHeader) .send(createBody) .expect(200); @@ -75,9 +90,10 @@ export default function ({ getService }: FtrProviderContext) { const createBody = { name: 'test-api-key-002', }; - const { body } = await supertest + const { body } = await supertestWithoutAuth .post(`${API_BASE_PATH}/api_key`) .set(svlCommonApi.getInternalRequestHeader()) + .set(roleAuthc.cookieHeader) .send(createBody) .expect(200); @@ -87,10 +103,11 @@ export default function ({ getService }: FtrProviderContext) { const createBody = { name: 'test-api-key-003', }; - const { body } = await supertest + const { body } = await supertestWithoutAuth .post(`${API_BASE_PATH}/api_key`) .set(svlCommonApi.getInternalRequestHeader()) .send(createBody) + .set(roleAuthc.cookieHeader) .expect(200); expect(body).toMatchObject({ diff --git a/x-pack/test_serverless/api_integration/test_suites/search/serverless_search/connectors.ts b/x-pack/test_serverless/api_integration/test_suites/search/serverless_search/connectors.ts index 4b82f944a9321..af657705d5743 100644 --- a/x-pack/test_serverless/api_integration/test_suites/search/serverless_search/connectors.ts +++ b/x-pack/test_serverless/api_integration/test_suites/search/serverless_search/connectors.ts @@ -6,20 +6,30 @@ */ import expect from 'expect'; +import { RoleCredentials } from '../../../../shared/services'; import { FtrProviderContext } from '../../../ftr_provider_context'; const API_BASE_PATH = '/internal/serverless_search'; export default function ({ getService }: FtrProviderContext) { const svlCommonApi = getService('svlCommonApi'); - const supertest = getService('supertest'); + const svlUserManager = getService('svlUserManager'); + const supertestWithoutAuth = getService('supertestWithoutAuth'); + let roleAuthc: RoleCredentials; describe('Connectors routes', function () { describe('GET connectors', function () { + before(async () => { + roleAuthc = await svlUserManager.createApiKeyForRole('viewer'); + }); + after(async () => { + await svlUserManager.invalidateApiKeyForRole(roleAuthc); + }); it('returns list of connectors', async () => { - const { body } = await supertest + const { body } = await supertestWithoutAuth .get(`${API_BASE_PATH}/connectors`) .set(svlCommonApi.getInternalRequestHeader()) + .set(roleAuthc.apiKeyHeader) .expect(200); expect(body.connectors).toBeDefined(); diff --git a/x-pack/test_serverless/api_integration/test_suites/search/serverless_search/indices.ts b/x-pack/test_serverless/api_integration/test_suites/search/serverless_search/indices.ts index a387f6e7e320e..6bb02a7d99a40 100644 --- a/x-pack/test_serverless/api_integration/test_suites/search/serverless_search/indices.ts +++ b/x-pack/test_serverless/api_integration/test_suites/search/serverless_search/indices.ts @@ -6,35 +6,47 @@ */ import expect from 'expect'; +import { RoleCredentials } from '../../../../shared/services'; import { FtrProviderContext } from '../../../ftr_provider_context'; const API_BASE_PATH = '/internal/serverless_search'; export default function ({ getService }: FtrProviderContext) { const svlCommonApi = getService('svlCommonApi'); - const supertest = getService('supertest'); + const supertestWithoutAuth = getService('supertestWithoutAuth'); + const svlUserManager = getService('svlUserManager'); + let roleAuthc: RoleCredentials; describe('Indices routes', function () { describe('GET indices', function () { + before(async () => { + roleAuthc = await svlUserManager.createApiKeyForRole('viewer'); + }); + after(async () => { + await svlUserManager.invalidateApiKeyForRole(roleAuthc); + }); it('has route', async () => { - const { body } = await supertest + const { body } = await supertestWithoutAuth .get(`${API_BASE_PATH}/indices`) .set(svlCommonApi.getInternalRequestHeader()) + .set(roleAuthc.apiKeyHeader) .expect(200); expect(body).toBeDefined(); }); it('accepts search_query', async () => { - await supertest + await supertestWithoutAuth .get(`${API_BASE_PATH}/indices`) .set(svlCommonApi.getInternalRequestHeader()) + .set(roleAuthc.apiKeyHeader) .query({ search_query: 'foo' }) .expect(200); }); it('accepts from & size', async () => { - await supertest + await supertestWithoutAuth .get(`${API_BASE_PATH}/indices`) .set(svlCommonApi.getInternalRequestHeader()) + .set(roleAuthc.apiKeyHeader) .query({ from: 0, size: 10 }) .expect(200); }); diff --git a/x-pack/test_serverless/functional/test_suites/search/advanced_settings.ts b/x-pack/test_serverless/functional/test_suites/search/advanced_settings.ts index 2f2b76b21edab..33ec373f8956a 100644 --- a/x-pack/test_serverless/functional/test_suites/search/advanced_settings.ts +++ b/x-pack/test_serverless/functional/test_suites/search/advanced_settings.ts @@ -18,7 +18,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { describe('Search advanced settings', function () { before(async () => { - await pageObjects.svlCommonPage.login(); + await pageObjects.svlCommonPage.loginWithRole('viewer'); await pageObjects.common.navigateToApp('settings'); }); diff --git a/x-pack/test_serverless/functional/test_suites/search/cases/attachment_framework.ts b/x-pack/test_serverless/functional/test_suites/search/cases/attachment_framework.ts index 044782083b292..831369311f942 100644 --- a/x-pack/test_serverless/functional/test_suites/search/cases/attachment_framework.ts +++ b/x-pack/test_serverless/functional/test_suites/search/cases/attachment_framework.ts @@ -20,7 +20,7 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { describe('persistable attachment', () => { before(async () => { - await svlCommonPage.login(); + await svlCommonPage.loginWithRole('developer'); }); after(async () => { diff --git a/x-pack/test_serverless/functional/test_suites/search/connectors/connectors_overview.ts b/x-pack/test_serverless/functional/test_suites/search/connectors/connectors_overview.ts index 5cbb06975b76b..dca1e694702a6 100644 --- a/x-pack/test_serverless/functional/test_suites/search/connectors/connectors_overview.ts +++ b/x-pack/test_serverless/functional/test_suites/search/connectors/connectors_overview.ts @@ -19,16 +19,12 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { const browser = getService('browser'); describe('connectors', function () { before(async () => { - await pageObjects.svlCommonPage.login(); + await pageObjects.svlCommonPage.loginWithRole('developer'); await pageObjects.svlCommonNavigation.sidenav.clickLink({ deepLinkId: 'serverlessConnectors', }); }); - after(async () => { - await pageObjects.svlCommonPage.forceLogout(); - }); - it('Connector app is loaded and has no connectors', async () => { await pageObjects.svlSearchConnectorsPage.connectorOverviewPage.expectConnectorOverviewPageComponentsToExist(); }); diff --git a/x-pack/test_serverless/functional/test_suites/search/console_notebooks.ts b/x-pack/test_serverless/functional/test_suites/search/console_notebooks.ts index 57790f3e58f7a..4eaab5ef16904 100644 --- a/x-pack/test_serverless/functional/test_suites/search/console_notebooks.ts +++ b/x-pack/test_serverless/functional/test_suites/search/console_notebooks.ts @@ -12,7 +12,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { describe('Console Notebooks', function () { before(async () => { - await pageObjects.svlCommonPage.login(); + await pageObjects.svlCommonPage.loginWithRole('viewer'); }); after(async () => { diff --git a/x-pack/test_serverless/functional/test_suites/search/dashboards/build_dashboard.ts b/x-pack/test_serverless/functional/test_suites/search/dashboards/build_dashboard.ts index ea76872a57876..c278eedcb27b6 100644 --- a/x-pack/test_serverless/functional/test_suites/search/dashboards/build_dashboard.ts +++ b/x-pack/test_serverless/functional/test_suites/search/dashboards/build_dashboard.ts @@ -28,7 +28,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { describe('Building a new dashboard', function () { before(async () => { - await PageObjects.svlCommonPage.login(); + await PageObjects.svlCommonPage.loginWithRole('admin'); await kibanaServer.savedObjects.cleanStandardList(); await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/logstash_functional'); await kibanaServer.importExport.load( @@ -46,7 +46,6 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { 'x-pack/test/functional/fixtures/kbn_archiver/lens/lens_basic.json' ); await kibanaServer.savedObjects.cleanStandardList(); - await PageObjects.svlCommonPage.forceLogout(); }); it('can add a lens panel by value', async () => { diff --git a/x-pack/test_serverless/functional/test_suites/search/dashboards/import_dashboard.ts b/x-pack/test_serverless/functional/test_suites/search/dashboards/import_dashboard.ts index 30d99d112e640..dbf1f653cc968 100644 --- a/x-pack/test_serverless/functional/test_suites/search/dashboards/import_dashboard.ts +++ b/x-pack/test_serverless/functional/test_suites/search/dashboards/import_dashboard.ts @@ -29,7 +29,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('Importing an existing dashboard', () => { before(async () => { - await PageObjects.svlCommonPage.login(); + await PageObjects.svlCommonPage.loginWithRole('developer'); await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/logstash_functional'); await kibanaServer.uiSettings.replace({}); }); @@ -37,7 +37,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { after(async () => { await esArchiver.unload('x-pack/test/functional/es_archives/logstash_functional'); await kibanaServer.savedObjects.cleanStandardList(); - await PageObjects.svlCommonPage.forceLogout(); }); it('should be able to import dashboard created in 8.11', async () => { diff --git a/x-pack/test_serverless/functional/test_suites/search/default_dataview.ts b/x-pack/test_serverless/functional/test_suites/search/default_dataview.ts index 1b32eaefc2061..e772c814389a5 100644 --- a/x-pack/test_serverless/functional/test_suites/search/default_dataview.ts +++ b/x-pack/test_serverless/functional/test_suites/search/default_dataview.ts @@ -16,7 +16,7 @@ export default function ({ getPageObject, getService }: FtrProviderContext) { describe('default dataView', function () { before(async () => { - await svlCommonPage.login(); + await svlCommonPage.loginWithRole('developer'); await svlSearchNavigation.navigateToLandingPage(); // re-create the default data view in case it has been cleaned up by another test @@ -27,10 +27,6 @@ export default function ({ getPageObject, getService }: FtrProviderContext) { }); }); - after(async () => { - await svlCommonPage.forceLogout(); - }); - it('should show discover but with no data', async () => { await svlCommonNavigation.sidenav.clickLink({ deepLinkId: 'discover' }); await testSubjects.existOrFail('~breadcrumb-deepLinkId-discover'); diff --git a/x-pack/test_serverless/functional/test_suites/search/index_management.ts b/x-pack/test_serverless/functional/test_suites/search/index_management.ts index 674688092350c..dc8d147c9d348 100644 --- a/x-pack/test_serverless/functional/test_suites/search/index_management.ts +++ b/x-pack/test_serverless/functional/test_suites/search/index_management.ts @@ -23,7 +23,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { before(async () => { await security.testUser.setRoles(['index_management_user']); // Navigate to the index management page - await pageObjects.svlCommonPage.login(); + await pageObjects.svlCommonPage.loginWithRole('developer'); await pageObjects.common.navigateToApp('indexManagement'); // Navigate to the indices tab await pageObjects.indexManagement.changeTabs('indicesTab'); diff --git a/x-pack/test_serverless/functional/test_suites/search/landing_page.ts b/x-pack/test_serverless/functional/test_suites/search/landing_page.ts index 04b6fbc166f16..5b148e72b35c9 100644 --- a/x-pack/test_serverless/functional/test_suites/search/landing_page.ts +++ b/x-pack/test_serverless/functional/test_suites/search/landing_page.ts @@ -19,11 +19,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { describe('landing page', function () { before(async () => { - await pageObjects.svlCommonPage.login(); - }); - - after(async () => { - await pageObjects.svlCommonPage.forceLogout(); + await pageObjects.svlCommonPage.loginWithRole('viewer'); }); it('has serverless side nav', async () => { diff --git a/x-pack/test_serverless/functional/test_suites/search/ml/search_bar_features.ts b/x-pack/test_serverless/functional/test_suites/search/ml/search_bar_features.ts index 177174b4675e4..f2d724549f5e7 100644 --- a/x-pack/test_serverless/functional/test_suites/search/ml/search_bar_features.ts +++ b/x-pack/test_serverless/functional/test_suites/search/ml/search_bar_features.ts @@ -41,11 +41,7 @@ export default function ({ getPageObjects }: FtrProviderContext) { describe('Search bar features', () => { before(async () => { - await PageObjects.svlCommonPage.login(); - }); - - after(async () => { - await PageObjects.svlCommonPage.forceLogout(); + await PageObjects.svlCommonPage.loginWithRole('developer'); }); describe('list features', () => { diff --git a/x-pack/test_serverless/functional/test_suites/search/ml/trained_models_list.ts b/x-pack/test_serverless/functional/test_suites/search/ml/trained_models_list.ts index cc2a98291923f..2617c95604798 100644 --- a/x-pack/test_serverless/functional/test_suites/search/ml/trained_models_list.ts +++ b/x-pack/test_serverless/functional/test_suites/search/ml/trained_models_list.ts @@ -12,14 +12,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('Trained models list', () => { before(async () => { - await PageObjects.svlCommonPage.login(); + await PageObjects.svlCommonPage.loginWithRole('viewer'); await ml.api.syncSavedObjects(); }); - after(async () => { - await PageObjects.svlCommonPage.forceLogout(); - }); - describe('page navigation', () => { it('renders trained models list', async () => { await ml.navigation.navigateToMl(); diff --git a/x-pack/test_serverless/functional/test_suites/search/navigation.ts b/x-pack/test_serverless/functional/test_suites/search/navigation.ts index 554a2e2b63c15..9476010f58f54 100644 --- a/x-pack/test_serverless/functional/test_suites/search/navigation.ts +++ b/x-pack/test_serverless/functional/test_suites/search/navigation.ts @@ -19,14 +19,9 @@ export default function ({ getPageObject, getService }: FtrProviderContext) { describe('navigation', function () { before(async () => { - await svlCommonPage.login(); + await svlCommonPage.loginWithRole('developer'); await svlSearchNavigation.navigateToLandingPage(); }); - - after(async () => { - await svlCommonPage.forceLogout(); - }); - it('navigate search sidenav & breadcrumbs', async () => { const expectNoPageReload = await svlCommonNavigation.createNoPageReloadCheck(); diff --git a/x-pack/test_serverless/functional/test_suites/search/pipelines.ts b/x-pack/test_serverless/functional/test_suites/search/pipelines.ts index c2e324edbbfae..6f7c52af51f83 100644 --- a/x-pack/test_serverless/functional/test_suites/search/pipelines.ts +++ b/x-pack/test_serverless/functional/test_suites/search/pipelines.ts @@ -17,16 +17,12 @@ export default function ({ getPageObjects }: FtrProviderContext) { ]); describe('ingest pipelines', function () { before(async () => { - await pageObjects.svlCommonPage.login(); + await pageObjects.svlCommonPage.loginWithRole('developer'); await pageObjects.svlCommonNavigation.sidenav.openSection('project_settings_project_nav'); await pageObjects.svlCommonNavigation.sidenav.clickLink({ deepLinkId: 'management' }); await pageObjects.svlManagementPage.clickIngestPipelinesManagementCard(); }); - after(async () => { - await pageObjects.svlCommonPage.forceLogout(); - }); - it('has embedded console', async () => { await testHasEmbeddedConsole(pageObjects); }); diff --git a/x-pack/test_serverless/functional/test_suites/search/rules/rule_details.ts b/x-pack/test_serverless/functional/test_suites/search/rules/rule_details.ts index d6b1059b7e791..b296dc6e4b8ca 100644 --- a/x-pack/test_serverless/functional/test_suites/search/rules/rule_details.ts +++ b/x-pack/test_serverless/functional/test_suites/search/rules/rule_details.ts @@ -75,11 +75,10 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { before(async () => { roleAuthc = await svlUserManager.createApiKeyForRole('admin'); internalReqHeader = svlCommonApi.getInternalRequestHeader(); - await svlCommonPage.login(); + await svlCommonPage.loginWithRole('viewer'); }); after(async () => { - await svlCommonPage.forceLogout(); await svlUserManager.invalidateApiKeyForRole(roleAuthc); }); diff --git a/x-pack/test_serverless/functional/test_suites/search/screenshot_creation/response_ops_docs/stack_connectors/connectors.ts b/x-pack/test_serverless/functional/test_suites/search/screenshot_creation/response_ops_docs/stack_connectors/connectors.ts index 8bfada9db1044..97ab2bcbc1a1f 100644 --- a/x-pack/test_serverless/functional/test_suites/search/screenshot_creation/response_ops_docs/stack_connectors/connectors.ts +++ b/x-pack/test_serverless/functional/test_suites/search/screenshot_creation/response_ops_docs/stack_connectors/connectors.ts @@ -17,7 +17,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('connectors', function () { before(async () => { - await pageObjects.svlCommonPage.login(); + await pageObjects.svlCommonPage.loginWithRole('viewer'); }); after(async () => { diff --git a/x-pack/test_serverless/functional/test_suites/search/search_homepage.ts b/x-pack/test_serverless/functional/test_suites/search/search_homepage.ts index 3138e0e7f0242..1f627921d1592 100644 --- a/x-pack/test_serverless/functional/test_suites/search/search_homepage.ts +++ b/x-pack/test_serverless/functional/test_suites/search/search_homepage.ts @@ -24,7 +24,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { // Enable Homepage Feature Flag await uiSettings.setUiSetting(roleAuthc, HOMEPAGE_FF_UI_SETTING, true); - await pageObjects.svlCommonPage.login(); + await pageObjects.svlCommonPage.loginWithRole('viewer'); }); after(async () => { @@ -32,8 +32,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { // Disable Homepage Feature Flag await uiSettings.deleteUISetting(roleAuthc, HOMEPAGE_FF_UI_SETTING); - - await pageObjects.svlCommonPage.forceLogout(); + await svlUserManager.invalidateApiKeyForRole(roleAuthc); }); it('has search homepage with Home sidenav', async () => { @@ -52,7 +51,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('has embedded dev console', async () => { - testHasEmbeddedConsole(pageObjects); + await testHasEmbeddedConsole(pageObjects); }); }); } diff --git a/x-pack/test_serverless/functional/test_suites/search/search_playground/playground_overview.ts b/x-pack/test_serverless/functional/test_suites/search/search_playground/playground_overview.ts index e114d339ec242..33e2e9883b38b 100644 --- a/x-pack/test_serverless/functional/test_suites/search/search_playground/playground_overview.ts +++ b/x-pack/test_serverless/functional/test_suites/search/search_playground/playground_overview.ts @@ -36,7 +36,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { before(async () => { proxy = await createLlmProxy(log); - await pageObjects.svlCommonPage.login(); + await pageObjects.svlCommonPage.loginWithRole('admin'); await pageObjects.svlCommonNavigation.sidenav.clickLink({ deepLinkId: 'searchPlayground', }); diff --git a/x-pack/test_serverless/functional/test_suites/security/config.cloud_security_posture.agentless.ts b/x-pack/test_serverless/functional/test_suites/security/config.cloud_security_posture.agentless.ts new file mode 100644 index 0000000000000..948a418279ac9 --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/security/config.cloud_security_posture.agentless.ts @@ -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 { CLOUD_CREDENTIALS_PACKAGE_VERSION } from '@kbn/cloud-security-posture-plugin/common/constants'; +import { createTestConfig } from '../../config.base'; + +export default createTestConfig({ + serverlessProject: 'security', + junit: { + reportName: 'Serverless Security Cloud Security Agentless Onboarding Functional Tests', + }, + kbnServerArgs: [ + `--xpack.fleet.packages.0.name=cloud_security_posture`, + `--xpack.fleet.packages.0.version=${CLOUD_CREDENTIALS_PACKAGE_VERSION}`, + + // Agentless Configuration based on Serverless Security Dev Yaml - config/serverless.security.dev.yml + `--xpack.fleet.enableExperimental.0=agentless`, + `--xpack.fleet.agentPolicies.0.id=agentless`, + `--xpack.fleet.agentPolicies.0.name=agentless`, + `--xpack.fleet.agentPolicies.0.package_policies=[]`, + `--xpack.cloud.serverless.project_id=some_fake_project_id`, + ], + // load tests in the index file + testFiles: [require.resolve('./ftr/cloud_security_posture/agentless')], +}); diff --git a/x-pack/test_serverless/functional/test_suites/security/config.cloud_security_posture.basic.ts b/x-pack/test_serverless/functional/test_suites/security/config.cloud_security_posture.basic.ts index 7063ec943dfba..ee788c7117f6f 100644 --- a/x-pack/test_serverless/functional/test_suites/security/config.cloud_security_posture.basic.ts +++ b/x-pack/test_serverless/functional/test_suites/security/config.cloud_security_posture.basic.ts @@ -6,6 +6,7 @@ */ import { CLOUD_SECURITY_PLUGIN_VERSION } from '@kbn/cloud-security-posture-plugin/common/constants'; + import { createTestConfig } from '../../config.base'; export default createTestConfig({ diff --git a/x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture/agentless/cis_integration_aws.ts b/x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture/agentless/cis_integration_aws.ts new file mode 100644 index 0000000000000..0bcc3afc50927 --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture/agentless/cis_integration_aws.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. + */ +const CIS_AWS_OPTION_TEST_ID = 'cisAwsTestId'; +const AWS_CREDENTIAL_SELECTOR = 'aws-credentials-type-selector'; +const SETUP_TECHNOLOGY_SELECTOR = 'setup-technology-selector'; +const SETUP_TECHNOLOGY_SELECTOR_ACCORDION_TEST_SUBJ = 'setup-technology-selector-accordion'; + +const AWS_SINGLE_ACCOUNT_TEST_ID = 'awsSingleTestId'; + +import { CLOUD_CREDENTIALS_PACKAGE_VERSION } from '@kbn/cloud-security-posture-plugin/common/constants'; +import expect from '@kbn/expect'; + +import type { FtrProviderContext } from '../../../../../ftr_provider_context'; +export default function ({ getPageObjects, getService }: FtrProviderContext) { + const pageObjects = getPageObjects([ + 'settings', + 'common', + 'svlCommonPage', + 'cisAddIntegration', + 'header', + ]); + + describe('Agentless CIS Integration Page', function () { + // TODO: we need to check if the tests are running on MKI. There is a suspicion that installing csp package via Kibana server args is not working on MKI. + this.tags(['skipMKI', 'cloud_security_posture_cis_integration']); + let cisIntegration: typeof pageObjects.cisAddIntegration; + let cisIntegrationAws: typeof pageObjects.cisAddIntegration.cisAws; + const previousPackageVersion = '1.9.0'; + + before(async () => { + await pageObjects.svlCommonPage.login(); + + cisIntegration = pageObjects.cisAddIntegration; + cisIntegrationAws = pageObjects.cisAddIntegration.cisAws; + }); + + after(async () => { + await pageObjects.svlCommonPage.forceLogout(); + }); + + describe('Agentless CIS_AWS Single Account Launch Cloud formation', () => { + it(`should show CIS_AWS Launch Cloud formation button when credentials selector is direct access keys and package version is ${CLOUD_CREDENTIALS_PACKAGE_VERSION}`, async () => { + await cisIntegration.navigateToAddIntegrationCspmWithVersionPage( + CLOUD_CREDENTIALS_PACKAGE_VERSION + ); + + await cisIntegration.clickOptionButton(CIS_AWS_OPTION_TEST_ID); + await cisIntegration.clickOptionButton(AWS_SINGLE_ACCOUNT_TEST_ID); + await cisIntegration.clickAccordianButton(SETUP_TECHNOLOGY_SELECTOR_ACCORDION_TEST_SUBJ); + await cisIntegration.clickOptionButton(SETUP_TECHNOLOGY_SELECTOR); + await cisIntegration.selectValue(SETUP_TECHNOLOGY_SELECTOR, 'agentless'); + await cisIntegration.clickOptionButton(AWS_CREDENTIAL_SELECTOR); + await cisIntegration.selectValue(AWS_CREDENTIAL_SELECTOR, 'direct_access_keys'); + + await pageObjects.header.waitUntilLoadingHasFinished(); + + expect( + (await cisIntegrationAws.showLaunchCloudFormationAgentlessButton()) !== undefined + ).to.be(true); + }); + + it(`should hide CIS_AWS Launch Cloud formation button when credentials selector is temporary keys and package version is less than ${previousPackageVersion}`, async () => { + await cisIntegration.navigateToAddIntegrationCspmWithVersionPage(previousPackageVersion); + + await cisIntegration.clickOptionButton(CIS_AWS_OPTION_TEST_ID); + await cisIntegration.clickOptionButton(AWS_SINGLE_ACCOUNT_TEST_ID); + await cisIntegration.clickAccordianButton(SETUP_TECHNOLOGY_SELECTOR_ACCORDION_TEST_SUBJ); + await cisIntegration.clickOptionButton(SETUP_TECHNOLOGY_SELECTOR); + await cisIntegration.selectValue(SETUP_TECHNOLOGY_SELECTOR, 'agent-based'); + await cisIntegration.clickOptionButton(AWS_CREDENTIAL_SELECTOR); + await cisIntegration.selectValue(AWS_CREDENTIAL_SELECTOR, 'temporary_keys'); + + await pageObjects.header.waitUntilLoadingHasFinished(); + + expect(await cisIntegrationAws.showLaunchCloudFormationAgentlessButton()).to.be(false); + }); + }); + + describe('Agentless CIS_AWS ORG Account Launch Cloud formation', () => { + it(`should show CIS_AWS Launch Cloud formation button when credentials selector is direct access keys and package version is ${CLOUD_CREDENTIALS_PACKAGE_VERSION}`, async () => { + await cisIntegration.navigateToAddIntegrationCspmWithVersionPage( + CLOUD_CREDENTIALS_PACKAGE_VERSION + ); + + await cisIntegration.clickOptionButton(CIS_AWS_OPTION_TEST_ID); + await cisIntegration.clickAccordianButton(SETUP_TECHNOLOGY_SELECTOR_ACCORDION_TEST_SUBJ); + await cisIntegration.clickOptionButton(SETUP_TECHNOLOGY_SELECTOR); + await cisIntegration.selectValue(SETUP_TECHNOLOGY_SELECTOR, 'agentless'); + await cisIntegration.clickOptionButton(AWS_CREDENTIAL_SELECTOR); + await cisIntegration.selectValue(AWS_CREDENTIAL_SELECTOR, 'direct_access_keys'); + + await pageObjects.header.waitUntilLoadingHasFinished(); + + expect(await cisIntegrationAws.showLaunchCloudFormationAgentlessButton()).to.be(true); + }); + + it(`should hide CIS_AWS Launch Cloud formation button when credentials selector is temporary keys and package version is less than ${previousPackageVersion}`, async () => { + await cisIntegration.navigateToAddIntegrationCspmWithVersionPage(previousPackageVersion); + + await cisIntegration.clickOptionButton(CIS_AWS_OPTION_TEST_ID); + await cisIntegration.clickAccordianButton(SETUP_TECHNOLOGY_SELECTOR_ACCORDION_TEST_SUBJ); + await cisIntegration.clickOptionButton(SETUP_TECHNOLOGY_SELECTOR); + await cisIntegration.selectValue(SETUP_TECHNOLOGY_SELECTOR, 'agentless'); + await cisIntegration.clickOptionButton(AWS_CREDENTIAL_SELECTOR); + await cisIntegration.selectValue(AWS_CREDENTIAL_SELECTOR, 'temporary_keys'); + + await pageObjects.header.waitUntilLoadingHasFinished(); + + expect(await cisIntegrationAws.showLaunchCloudFormationAgentlessButton()).to.be(false); + }); + }); + }); +} diff --git a/x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture/agentless/cis_integration_gcp.ts b/x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture/agentless/cis_integration_gcp.ts new file mode 100644 index 0000000000000..bf7f8eead771f --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture/agentless/cis_integration_gcp.ts @@ -0,0 +1,98 @@ +/* + * 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. + */ +const CIS_GCP_OPTION_TEST_ID = 'cisGcpTestId'; +const GCP_SINGLE_ACCOUNT_TEST_ID = 'gcpSingleAccountTestId'; +const SETUP_TECHNOLOGY_SELECTOR = 'setup-technology-selector'; +const SETUP_TECHNOLOGY_SELECTOR_ACCORDION_TEST_SUBJ = 'setup-technology-selector-accordion'; + +import expect from '@kbn/expect'; +import type { FtrProviderContext } from '../../../../../ftr_provider_context'; + +export default function ({ getPageObjects, getService }: FtrProviderContext) { + const pageObjects = getPageObjects(['common', 'svlCommonPage', 'cisAddIntegration', 'header']); + const agentlessPreReleaseVersion = '1.10.0-preview01'; + const previousPackageVersion = '1.9.0'; + + describe('Agentless CIS Integration Page', function () { + // TODO: we need to check if the tests are running on MKI. There is a suspicion that installing csp package via Kibana server args is not working on MKI. + this.tags(['skipMKI', 'cloud_security_posture_cis_integration']); + let cisIntegration: typeof pageObjects.cisAddIntegration; + let cisIntegrationGcp: typeof pageObjects.cisAddIntegration.cisGcp; + before(async () => { + await pageObjects.svlCommonPage.login(); + + cisIntegration = pageObjects.cisAddIntegration; + cisIntegrationGcp = pageObjects.cisAddIntegration.cisGcp; + }); + + after(async () => { + await pageObjects.svlCommonPage.forceLogout(); + }); + + describe('Agentless CIS_GCP Single Account Launch Cloud shell', () => { + it(`should show CIS_GCP Launch Cloud Shell button when package version is ${agentlessPreReleaseVersion}`, async () => { + await cisIntegration.navigateToAddIntegrationCspmWithVersionPage( + agentlessPreReleaseVersion + ); + + await cisIntegration.clickOptionButton(CIS_GCP_OPTION_TEST_ID); + await cisIntegration.clickOptionButton(GCP_SINGLE_ACCOUNT_TEST_ID); + await cisIntegration.clickAccordianButton(SETUP_TECHNOLOGY_SELECTOR_ACCORDION_TEST_SUBJ); + await cisIntegration.clickOptionButton(SETUP_TECHNOLOGY_SELECTOR); + await cisIntegration.selectValue(SETUP_TECHNOLOGY_SELECTOR, 'agentless'); + + await pageObjects.header.waitUntilLoadingHasFinished(); + + expect(await cisIntegrationGcp.showLaunchCloudShellAgentlessButton()).to.be(true); + }); + + it(`should hide CIS_GCP Launch Cloud Shell button when package version is less than ${agentlessPreReleaseVersion}`, async () => { + await cisIntegration.navigateToAddIntegrationCspmWithVersionPage(previousPackageVersion); + + await cisIntegration.clickOptionButton(CIS_GCP_OPTION_TEST_ID); + await cisIntegration.clickOptionButton(GCP_SINGLE_ACCOUNT_TEST_ID); + await cisIntegration.clickAccordianButton(SETUP_TECHNOLOGY_SELECTOR_ACCORDION_TEST_SUBJ); + await cisIntegration.clickOptionButton(SETUP_TECHNOLOGY_SELECTOR); + await cisIntegration.selectValue(SETUP_TECHNOLOGY_SELECTOR, 'agentless'); + + await pageObjects.header.waitUntilLoadingHasFinished(); + + expect(await cisIntegrationGcp.showLaunchCloudShellAgentlessButton()).to.be(false); + }); + }); + + describe('Agentless CIS_GCP ORG Account Launch Cloud Shell', () => { + it(`should show CIS_GCP Launch Cloud Shell button when package version is ${agentlessPreReleaseVersion}`, async () => { + await cisIntegration.navigateToAddIntegrationCspmWithVersionPage( + agentlessPreReleaseVersion + ); + + await cisIntegration.clickOptionButton(CIS_GCP_OPTION_TEST_ID); + await cisIntegration.clickAccordianButton(SETUP_TECHNOLOGY_SELECTOR_ACCORDION_TEST_SUBJ); + await cisIntegration.clickOptionButton(SETUP_TECHNOLOGY_SELECTOR); + await cisIntegration.selectValue(SETUP_TECHNOLOGY_SELECTOR, 'agentless'); + + await pageObjects.header.waitUntilLoadingHasFinished(); + + expect(await cisIntegrationGcp.showLaunchCloudShellAgentlessButton()).to.be(true); + }); + + it(`should hide CIS_GCP Launch Cloud shell button when package version is ${previousPackageVersion}`, async () => { + await cisIntegration.navigateToAddIntegrationCspmWithVersionPage(previousPackageVersion); + + await cisIntegration.clickOptionButton(CIS_GCP_OPTION_TEST_ID); + await cisIntegration.clickAccordianButton(SETUP_TECHNOLOGY_SELECTOR_ACCORDION_TEST_SUBJ); + await cisIntegration.clickOptionButton(SETUP_TECHNOLOGY_SELECTOR); + await cisIntegration.selectValue(SETUP_TECHNOLOGY_SELECTOR, 'agentless'); + + await pageObjects.header.waitUntilLoadingHasFinished(); + + expect(await cisIntegrationGcp.showLaunchCloudShellAgentlessButton()).to.be(false); + }); + }); + }); +} diff --git a/x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture/agentless/index.ts b/x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture/agentless/index.ts new file mode 100644 index 0000000000000..235757c508c16 --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture/agentless/index.ts @@ -0,0 +1,16 @@ +/* + * 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 ({ loadTestFile }: FtrProviderContext) { + describe('cloud_security_posture', function () { + this.tags(['cloud_security_posture_agentless']); + loadTestFile(require.resolve('./cis_integration_aws')); + loadTestFile(require.resolve('./cis_integration_gcp')); + }); +} diff --git a/yarn.lock b/yarn.lock index 79bdf61fcbbd0..9de08dc5d49d5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1627,29 +1627,29 @@ dependencies: tslib "^2.0.0" -"@elastic/apm-rum-core@^5.21.0": - version "5.21.0" - resolved "https://registry.yarnpkg.com/@elastic/apm-rum-core/-/apm-rum-core-5.21.0.tgz#0dc214b2c829c80a2cd07d37a250c89761fe8386" - integrity sha512-O2Sq1CPq2baG3z2RGtgyG+Hybli3rwq4oMOCMvUSiTiMKBPY1dRCfuebs6KpZsk3euoqykN+oTp0DPKeOI+XIg== +"@elastic/apm-rum-core@^5.21.0", "@elastic/apm-rum-core@^5.21.1": + version "5.21.1" + resolved "https://registry.yarnpkg.com/@elastic/apm-rum-core/-/apm-rum-core-5.21.1.tgz#ea6f2268629193962c194ae1d29971e2c5b2e531" + integrity sha512-/LyLhVdJ+zcsKogwq2AEYARc//RDXOoTHWPERLay4sCsvvxc4/GkkhhOC40CqI0oMu4kUAoJInQWZuCM7zCZRQ== dependencies: error-stack-parser "^1.3.5" opentracing "^0.14.3" promise-polyfill "^8.1.3" -"@elastic/apm-rum-react@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@elastic/apm-rum-react/-/apm-rum-react-2.0.2.tgz#5f73d41d462941f4d073ffaa118723987379548b" - integrity sha512-m0l982fLiImSxtuy8kKVXTnNl5wSMG3/TD3QokFQiYnVap+wjEULVm1HbS+dE4hjh9eVqCkuBiPu450a8lUs8g== +"@elastic/apm-rum-react@^2.0.3": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@elastic/apm-rum-react/-/apm-rum-react-2.0.3.tgz#6193464943ea80a74682373de2242490623111f6" + integrity sha512-oDdNz1GEZvy7R1CPOJWkXFRRHY5yNO3vRhUttDXqvXvRBEd1m7HosskHs/R/LjtoYghpAVrG+yzJGvDI9TSuxQ== dependencies: - "@elastic/apm-rum" "^5.16.0" + "@elastic/apm-rum" "^5.16.1" hoist-non-react-statics "^3.3.0" -"@elastic/apm-rum@^5.16.0": - version "5.16.0" - resolved "https://registry.yarnpkg.com/@elastic/apm-rum/-/apm-rum-5.16.0.tgz#bb9b00a866a48ec40c07ea742d241f835e8b5f9d" - integrity sha512-vNwRWDIccdu6iPDpCyrC3myRnpBzRH6wlAoOZjgSFJilQJMsymb8NzR1rkQmNEBca+frRuDCZabd+ylEZ47YBA== +"@elastic/apm-rum@^5.16.1": + version "5.16.1" + resolved "https://registry.yarnpkg.com/@elastic/apm-rum/-/apm-rum-5.16.1.tgz#59767f587a31293c17497ff86e05754627182be4" + integrity sha512-hxmhjLqF4EqEl2wVwxKU5p88jiwHPF//zqk97bm09vj5CQQ6HBtWkwIxQ5dvEEOnRwJinFEf9V2JibpamgzUWA== dependencies: - "@elastic/apm-rum-core" "^5.21.0" + "@elastic/apm-rum-core" "^5.21.1" "@elastic/app-search-javascript@^8.1.2": version "8.1.2" @@ -1743,10 +1743,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.1.0-backport.0": - version "95.1.0-backport.0" - resolved "https://registry.yarnpkg.com/@elastic/eui/-/eui-95.1.0-backport.0.tgz#effc5a536d7630a7bad7ff1aae817c8beab3cfef" - integrity sha512-0V5+7hGk4PyiR1qi1UA15RctQMJCCRDvCZSlgtisj5BLQ1fbfPbKUwr3oVqpx7gwhswDDP2jWWbk1OmUR1nnfg== +"@elastic/eui@95.2.0": + version "95.2.0" + resolved "https://registry.yarnpkg.com/@elastic/eui/-/eui-95.2.0.tgz#12204f9206f1432e17276264e08e48cd026913bf" + integrity sha512-DVIAqZHox5esbmoxnG3McTw0ppbatvH+ymXYjr3PNNTTnXzmcAGadQAA0ZIpx1/c3/YOZmh2LJWWowLl4wodzw== dependencies: "@hello-pangea/dnd" "^16.6.0" "@types/lodash" "^4.14.202" @@ -3214,12 +3214,12 @@ resolved "https://registry.yarnpkg.com/@juggle/resize-observer/-/resize-observer-3.4.0.tgz#08d6c5e20cf7e4cc02fd181c4b0c225cd31dbb60" integrity sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA== -"@kayahr/text-encoding@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@kayahr/text-encoding/-/text-encoding-1.2.0.tgz#9d75de6b40d7694e524c8ce39fc6e08994680746" - integrity sha512-61R84DjOQvO4bakOl4Vwuw0wU3FLbFtfUf4ApJquQ2+N3AY2VlN0j9te8rpGFHx2mzvhWKetyDgVZiLeU2/dhA== +"@kayahr/text-encoding@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@kayahr/text-encoding/-/text-encoding-1.3.0.tgz#90ae1007dc86d35a977cd709dfa9fe21cc2bc8c6" + integrity sha512-JjQVFXnN/ynXN+GDgpwNM+PJ4NwDFZwRolgSu4bYG1JKuRreVFY5uss5K/lsH6qY38+WgU7M40M2SHoiWQHKgQ== dependencies: - tslib "^2.5.2" + tslib "^2.6.2" "@kbn/aad-fixtures-plugin@link:x-pack/test/alerting_api_integration/common/plugins/aad": version "0.0.0" @@ -10633,10 +10633,10 @@ "@types/node" "*" form-data "^3.0.0" -"@types/node-forge@^1.3.10": - version "1.3.10" - resolved "https://registry.yarnpkg.com/@types/node-forge/-/node-forge-1.3.10.tgz#62a19d4f75a8b03290578c2b04f294b1a5a71b07" - integrity sha512-y6PJDYN4xYBxwd22l+OVH35N+1fCYWiuC3aiP2SlXVE6Lo7SS+rSx9r89hLxrP4pn6n1lBGhHJ12pj3F3Mpttw== +"@types/node-forge@^1.3.11": + version "1.3.11" + resolved "https://registry.yarnpkg.com/@types/node-forge/-/node-forge-1.3.11.tgz#0972ea538ddb0f4d9c2fa0ec5db5724773a604da" + integrity sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ== dependencies: "@types/node" "*" @@ -10984,11 +10984,12 @@ resolved "https://registry.yarnpkg.com/@types/seedrandom/-/seedrandom-2.4.28.tgz#9ce8fa048c1e8c85cb71d7fe4d704e000226036f" integrity sha512-SMA+fUwULwK7sd/ZJicUztiPs8F1yCPwF3O23Z9uQ32ME5Ha0NmDK9+QTsYE4O2tHXChzXomSWWeIhCnoN1LqA== -"@types/selenium-webdriver@^4.1.22": - version "4.1.22" - resolved "https://registry.yarnpkg.com/@types/selenium-webdriver/-/selenium-webdriver-4.1.22.tgz#344519b90727eb713e1ce6d2e0198eb0b4f8f316" - integrity sha512-MCL4l7q8dwxejr2Q2NXLyNwHWMPdlWE0Kpn6fFwJtvkJF7PTkG5jkvbH/X1IAAQxgt/L1dA8u2GtDeekvSKvOA== +"@types/selenium-webdriver@^4.1.23": + version "4.1.23" + resolved "https://registry.yarnpkg.com/@types/selenium-webdriver/-/selenium-webdriver-4.1.23.tgz#05a2794927db661f075ab443d5504b679b32f7f7" + integrity sha512-PgreEfCfafYLyTwvJTZvOspCq3JABnS51e+NSFFL5yoiMO7h04lWgLfr10NA7nl/yZbz4m76rBfOOdDfleb7pQ== dependencies: + "@types/node" "*" "@types/ws" "*" "@types/semver@^7", "@types/semver@^7.3.12": @@ -12158,7 +12159,7 @@ apidoc-light@^0.54.0: semver "^7.5.4" winston "^3.11.0" -apidoc-markdown@^7.3.0: +apidoc-markdown@^7.3.2: version "7.3.2" resolved "https://registry.yarnpkg.com/apidoc-markdown/-/apidoc-markdown-7.3.2.tgz#64c1ad45ba29dd57f376419a900cd59c786624a0" integrity sha512-0nOfTWSaFfbgJ673ztWiup5CKauuwmhg7hJ0jR7gb0TDK1RX3b0unl6soc8UVhdjYgrvRBRvujMUB/KUF5OG3Q== @@ -13948,10 +13949,10 @@ chrome-trace-event@^1.0.2: dependencies: tslib "^1.9.0" -chromedriver@^125.0.2: - version "125.0.2" - resolved "https://registry.yarnpkg.com/chromedriver/-/chromedriver-125.0.2.tgz#e8d399a8f45aa0958dd0a3662d9175d25520ec18" - integrity sha512-H2mIy3r//bIGVouQQrp2UzS93cjGCV2f+I6qNimAOyIiWkaKCiLEuDMQnuC21rewo/UuyOA8CDqa4a7RIT/8EQ== +chromedriver@^126.0.3: + version "126.0.4" + resolved "https://registry.yarnpkg.com/chromedriver/-/chromedriver-126.0.4.tgz#5c5e1f80c4269b55251c563cf47709154090135b" + integrity sha512-mIdJqdocfN/y9fl5BymIzM9WQLy64x078i5tS1jGFzbFAwXwXrj3zmA86Wf3R/hywPYpWqwXxFGBJHgqZTuGCA== dependencies: "@testim/chrome-version" "^1.1.4" axios "^1.6.7" @@ -14640,10 +14641,10 @@ core-js@^2.4.0, core-js@^2.5.0, core-js@^2.6.9: resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.9.tgz#6b4b214620c834152e179323727fc19741b084f2" integrity sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A== -core-js@^3.0.4, core-js@^3.32.1, core-js@^3.36.0, core-js@^3.6.5, core-js@^3.8.2, core-js@^3.8.3: - version "3.36.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.36.0.tgz#e752fa0b0b462a0787d56e9d73f80b0f7c0dde68" - integrity sha512-mt7+TUBbTFg5+GngsAxeKBTl5/VS0guFeJacYge9OmHb+m058UwwIm41SE9T4Den7ClatV57B6TYTuJ0CX1MAw== +core-js@^3.0.4, core-js@^3.32.1, core-js@^3.37.1, core-js@^3.6.5, core-js@^3.8.2, core-js@^3.8.3: + version "3.37.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.37.1.tgz#d21751ddb756518ac5a00e4d66499df981a62db9" + integrity sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw== core-util-is@1.0.2, core-util-is@^1.0.2, core-util-is@~1.0.0: version "1.0.2" @@ -18174,10 +18175,10 @@ formidable@^3.5.1: hexoid "^1.0.0" once "^1.4.0" -formik@^2.4.5: - version "2.4.5" - resolved "https://registry.yarnpkg.com/formik/-/formik-2.4.5.tgz#f899b5b7a6f103a8fabb679823e8fafc7e0ee1b4" - integrity sha512-Gxlht0TD3vVdzMDHwkiNZqJ7Mvg77xQNfmBRrNtvzcHZs72TJppSTDKHpImCMJZwcWPBJ8jSQQ95GJzXFf1nAQ== +formik@^2.4.6: + version "2.4.6" + resolved "https://registry.yarnpkg.com/formik/-/formik-2.4.6.tgz#4da75ca80f1a827ab35b08fd98d5a76e928c9686" + integrity sha512-A+2EI7U7aG296q2TLGvNapDNTZp1khVt5Vk0Q/fyfSROss0V/V6+txt2aJnwEos44IxTCW/LYAi/zgWzlevj+g== dependencies: "@types/hoist-non-react-statics" "^3.3.1" deepmerge "^2.1.1" @@ -21840,18 +21841,18 @@ launchdarkly-eventsource@2.0.3: resolved "https://registry.yarnpkg.com/launchdarkly-eventsource/-/launchdarkly-eventsource-2.0.3.tgz#8a7b8da5538153f438f7d452b1c87643d900f984" integrity sha512-VhFjppK7jXlcEKaS7bxdoibB5j01NKyeDR7a8XfssdDGNWCTsbF0/5IExSmPi44eDncPhkoPNxlSZhEZvrbD5w== -launchdarkly-js-client-sdk@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/launchdarkly-js-client-sdk/-/launchdarkly-js-client-sdk-3.3.0.tgz#33573b884438b63f1501039c4bf0b174694a06d0" - integrity sha512-Hb+EF/5m43jsKrkXLPrdklX5g+XUJiwJQlVfa4y+ZPEqSnP4w4GrFp+Iv5ftWCcRhhpQuw/rygoNZlL1e1vmgg== +launchdarkly-js-client-sdk@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/launchdarkly-js-client-sdk/-/launchdarkly-js-client-sdk-3.4.0.tgz#5b5959b548edac8a0f368eb40b079d942573d37b" + integrity sha512-3v1jKy1RECT0SG/3SGlyRO32vweoNxvWiJuIChRh/Zhk98cHpANuwameXVhwJ4WEDNZJTur73baaKAyatSP46A== dependencies: escape-string-regexp "^4.0.0" - launchdarkly-js-sdk-common "5.2.0" + launchdarkly-js-sdk-common "5.3.0" -launchdarkly-js-sdk-common@5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/launchdarkly-js-sdk-common/-/launchdarkly-js-sdk-common-5.2.0.tgz#be9fadc59786c060087a3b818d15af700faf0fd2" - integrity sha512-aLv2ZrUv229RIwLtFhdILu2aJS/fqGSJzTk4L/bCDZA8RuIh7PutI3ui/AJeNnzPzjKzdEQZw6wVhkVc84baog== +launchdarkly-js-sdk-common@5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/launchdarkly-js-sdk-common/-/launchdarkly-js-sdk-common-5.3.0.tgz#336a54843f5ba3541632e10014e49dff45d41674" + integrity sha512-NI5wFF8qhjtpRb4KelGdnwNIOf/boLlbLiseV7uf1jxSeoM/L30DAz87RT8VhYCSGCo4LedGILQFednI/MKFkA== dependencies: base64-js "^1.3.0" fast-deep-equal "^2.0.1" @@ -23977,10 +23978,10 @@ node-source-walk@^6.0.0, node-source-walk@^6.0.1, node-source-walk@^6.0.2: dependencies: "@babel/parser" "^7.21.8" -nodemailer@^6.9.9: - version "6.9.9" - resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-6.9.9.tgz#4549bfbf710cc6addec5064dd0f19874d24248d9" - integrity sha512-dexTll8zqQoVJEZPwQAKzxxtFn0qTnjdQTchoU6Re9BUUGBJiOy3YMn/0ShTW6J5M0dfQ1NeDeRTTl4oIWgQMA== +nodemailer@^6.9.14: + version "6.9.14" + resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-6.9.14.tgz#845fda981f9fd5ac264f4446af908a7c78027f75" + integrity sha512-Dobp/ebDKBvz91sbtRKhcznLThrKxKt97GI2FAlAyy+fk19j73Uz3sBXolVtmcXjaorivqsbbbjDY+Jkt4/bQA== nopt@^4.0.1: version "4.0.3" @@ -27032,10 +27033,10 @@ real-require@^0.2.0: resolved "https://registry.yarnpkg.com/real-require/-/real-require-0.2.0.tgz#209632dea1810be2ae063a6ac084fee7e33fba78" integrity sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg== -recast@^0.23.7: - version "0.23.7" - resolved "https://registry.yarnpkg.com/recast/-/recast-0.23.7.tgz#1e08f164e10402b075c904a2b01022b3da039c72" - integrity sha512-MpQlLZVpqbbxYcqEjwpRWo88sGvjOYoXptySz710RuddNMHx+wPkoNX6YyLZJlXAh5VZr1qmPrTwcTuFMh0Lag== +recast@^0.23.9: + version "0.23.9" + resolved "https://registry.yarnpkg.com/recast/-/recast-0.23.9.tgz#587c5d3a77c2cfcb0c18ccce6da4361528c2587b" + integrity sha512-Hx/BGIbwj+Des3+xy5uAtAbdCyqK9y9wbBcDFDYanLS9JnMqf7OeF87HQwUimE87OEc72mr6tkKUKMBBL+hF9Q== dependencies: ast-types "^0.16.1" esprima "~4.0.0" @@ -27540,10 +27541,10 @@ require-from-string@^2.0.2: resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== -require-in-the-middle@^7.0.1, require-in-the-middle@^7.1.1, require-in-the-middle@^7.2.1: - version "7.2.1" - resolved "https://registry.yarnpkg.com/require-in-the-middle/-/require-in-the-middle-7.2.1.tgz#0d1f5e86a69aa14322f5951b924f02ad75f70b6b" - integrity sha512-u5XngygsJ+XV2dBV/Pl4SrcNpUXQfmYmXtuFeHDXfzk4i4NnGnret6xKWkkJHjMHS/16yMV9pEAlAunqmjllkA== +require-in-the-middle@^7.0.1, require-in-the-middle@^7.1.1, require-in-the-middle@^7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/require-in-the-middle/-/require-in-the-middle-7.3.0.tgz#ce64a1083647dc07b3273b348357efac8a9945c9" + integrity sha512-nQFEv9gRw6SJAwWD2LrL0NmQvAcO7FBwJbwmr2ttPAacfy0xuiOjE5zt+zM4xDyuyvUaxBi/9gb2SoCyNEVJcw== dependencies: debug "^4.1.1" module-details-from-path "^1.0.3" @@ -28175,10 +28176,10 @@ select-hose@^2.0.0: resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= -selenium-webdriver@^4.21.0: - version "4.21.0" - resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-4.21.0.tgz#d38aebfc34770421a880afcfdb7bd8fe85ce9174" - integrity sha512-WaEJHZjOWNth1QG5FEpxpREER0qptZBMonFU6GtAqdCNLJVxbtC3E7oS/I/+Q1sf1W032Wg0Ebk+m46lANOXyQ== +selenium-webdriver@^4.22.0: + version "4.22.0" + resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-4.22.0.tgz#da9426aed5004ef16532010224b41a3a8b8dd132" + integrity sha512-GNbrkCHmy249ai885wgXqTfqL2lZnclUH/P8pwTDIqzyFxU3YhDiN7p/c9tMFA4NhgRdEBO2QCG+CWmG7xr/Mw== dependencies: jszip "^3.10.1" tmp "^0.2.3" @@ -30326,10 +30327,10 @@ totalist@^1.0.0: resolved "https://registry.yarnpkg.com/totalist/-/totalist-1.1.0.tgz#a4d65a3e546517701e3e5c37a47a70ac97fe56df" integrity sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g== -tough-cookie@^4.1.2, tough-cookie@^4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" - integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== +tough-cookie@^4.1.2, tough-cookie@^4.1.3, tough-cookie@^4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.4.tgz#945f1461b45b5a8c76821c33ea49c3ac192c1b36" + integrity sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag== dependencies: psl "^1.1.33" punycode "^2.1.1" @@ -30493,7 +30494,7 @@ tslib@2.5.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== -tslib@2.6.2, tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4.0, tslib@^2.5.0, tslib@^2.5.2, tslib@^2.6.2: +tslib@2.6.2, tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4.0, tslib@^2.5.0, tslib@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== @@ -30757,9 +30758,9 @@ undici@^5.21.2: "@fastify/busboy" "^2.0.0" undici@^6.12.0: - version "6.19.0" - resolved "https://registry.yarnpkg.com/undici/-/undici-6.19.0.tgz#99f6e7ab4e4116dbbedf4e734e8c267f926f20a4" - integrity sha512-9gGwbSLgYMjp4r6M5P9bhqhx1E+RyUIHqZE0r7BmrRoqroJUG6xlVu5TXH9DnwmCPLkcaVNrcYtxUE9d3InnyQ== + version "6.19.2" + resolved "https://registry.yarnpkg.com/undici/-/undici-6.19.2.tgz#231bc5de78d0dafb6260cf454b294576c2f3cd31" + integrity sha512-JfjKqIauur3Q6biAtHJ564e3bWa8VvT+7cSiOJHFbX4Erv6CLGDpg8z+Fmg/1OI/47RA+GI2QZaF48SSaLvyBA== unfetch@^4.2.0: version "4.2.0"