diff --git a/.buildkite/ftr_configs.yml b/.buildkite/ftr_configs.yml index 94753297ce85f..9404a7aab18c0 100644 --- a/.buildkite/ftr_configs.yml +++ b/.buildkite/ftr_configs.yml @@ -521,6 +521,8 @@ enabled: - x-pack/test/security_solution_api_integration/test_suites/detections_response/user_roles/trial_license_complete_tier/configs/serverless.config.ts - x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/configs/ess.config.ts - x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/configs/serverless.config.ts + - x-pack/test/security_solution_api_integration/test_suites/genai/invoke_ai/trial_license_complete_tier/configs/ess.config.ts + - x-pack/test/security_solution_api_integration/test_suites/genai/invoke_ai/trial_license_complete_tier/configs/serverless.config.ts - x-pack/test/security_solution_api_integration/test_suites/lists_and_exception_lists/exception_lists_items/trial_license_complete_tier/configs/ess.config.ts - x-pack/test/security_solution_api_integration/test_suites/lists_and_exception_lists/exception_lists_items/trial_license_complete_tier/configs/serverless.config.ts - x-pack/test/security_solution_api_integration/test_suites/lists_and_exception_lists/lists_items/trial_license_complete_tier/configs/ess.config.ts diff --git a/.buildkite/pipelines/emergency_release.yml b/.buildkite/pipelines/emergency_release.yml index 12ba39e7ce8c2..07ab52417f9a0 100644 --- a/.buildkite/pipelines/emergency_release.yml +++ b/.buildkite/pipelines/emergency_release.yml @@ -1,3 +1,18 @@ +env: + VERSION: ${BUILDKITE_COMMIT:0:12} + EMERGENCY_RELEASE_REMOTE_SERVICE_CONFIG: https://raw.githubusercontent.com/elastic/serverless-gitops/main/gen/gpctl/kibana/emergency.yaml + steps: - - label: Placeholder - command: echo "Hello!" + - label: ':label: Create tag' + command: .buildkite/scripts/serverless/create_deploy_tag/create_fix_tag.sh + if: build.branch =~ /^deploy-fix@.*\$/ + + - wait + + - label: ':argo: Emergency Release' + if: build.branch =~ /^deploy-fix@.*\$/ + trigger: gpctl-promote + build: + env: + REMOTE_SERVICE_CONFIG: "${EMERGENCY_RELEASE_REMOTE_SERVICE_CONFIG}" + SERVICE_COMMIT_HASH: "${VERSION}" diff --git a/.buildkite/pipelines/pull_request/base.yml b/.buildkite/pipelines/pull_request/base.yml index 25a373de87509..c9d755d5d94c8 100644 --- a/.buildkite/pipelines/pull_request/base.yml +++ b/.buildkite/pipelines/pull_request/base.yml @@ -96,7 +96,7 @@ steps: agents: queue: n2-4-spot key: build_api_docs - timeout_in_minutes: 60 + timeout_in_minutes: 90 retry: automatic: - exit_status: '-1' diff --git a/.buildkite/pipelines/pull_request/fips.yml b/.buildkite/pipelines/pull_request/fips.yml new file mode 100644 index 0000000000000..dac30490b3733 --- /dev/null +++ b/.buildkite/pipelines/pull_request/fips.yml @@ -0,0 +1,14 @@ +steps: + - command: .buildkite/scripts/steps/fips/build.sh + label: 'Build FIPS Image' + agents: + queue: n2-2-spot + depends_on: + - build + - quick_checks + timeout_in_minutes: 60 + soft_fail: true + retry: + automatic: + - exit_status: '-1' + limit: 3 diff --git a/.buildkite/pipelines/security_solution/api_integration.yml b/.buildkite/pipelines/security_solution/api_integration.yml index 5b3394c05ffc7..b0c7832b967d5 100644 --- a/.buildkite/pipelines/security_solution/api_integration.yml +++ b/.buildkite/pipelines/security_solution/api_integration.yml @@ -146,6 +146,17 @@ steps: - exit_status: "1" limit: 2 + - label: Running genai:qa:serverless + command: .buildkite/scripts/pipelines/security_solution_quality_gate/api_integration/api-integration-tests.sh genai:qa:serverless + key: genai:qa:serverless + agents: + queue: n2-4-spot + timeout_in_minutes: 120 + retry: + automatic: + - exit_status: "1" + limit: 2 + - label: Running prebuilt_rules_management:qa:serverless command: .buildkite/scripts/pipelines/security_solution_quality_gate/api_integration/api-integration-tests.sh prebuilt_rules_management:qa:serverless key: prebuilt_rules_management:qa:serverless diff --git a/.buildkite/scripts/build_kibana.sh b/.buildkite/scripts/build_kibana.sh index 66e53f80bdf5a..537bee3a290a2 100755 --- a/.buildkite/scripts/build_kibana.sh +++ b/.buildkite/scripts/build_kibana.sh @@ -31,6 +31,7 @@ if is_pr_with_label "ci:build-cloud-image"; then --docker-tag-qualifier="$GIT_COMMIT" \ --docker-push \ --skip-docker-ubi \ + --skip-docker-fips \ --skip-docker-ubuntu \ --skip-docker-serverless \ --skip-docker-contexts diff --git a/.buildkite/scripts/lifecycle/post_build.sh b/.buildkite/scripts/lifecycle/post_build.sh index b5bdfd751a6e3..446ca4b28c559 100755 --- a/.buildkite/scripts/lifecycle/post_build.sh +++ b/.buildkite/scripts/lifecycle/post_build.sh @@ -12,7 +12,7 @@ fi ts-node "$(dirname "${0}")/ci_stats_complete.ts" if [[ "${GITHUB_PR_NUMBER:-}" ]]; then - DOCS_CHANGES_URL="https://kibana_$GITHUB_PR_NUMBER}.docs-preview.app.elstc.co/diff" + DOCS_CHANGES_URL="https://kibana_bk_$GITHUB_PR_NUMBER}.docs-preview.app.elstc.co/diff" DOCS_CHANGES=$(curl --connect-timeout 10 -m 10 -sf "$DOCS_CHANGES_URL" || echo '') if [[ "$DOCS_CHANGES" && "$DOCS_CHANGES" != "There aren't any differences!" ]]; then diff --git a/.buildkite/scripts/pipelines/pull_request/pipeline.ts b/.buildkite/scripts/pipelines/pull_request/pipeline.ts index 07bd9472f5242..25539aecb0707 100644 --- a/.buildkite/scripts/pipelines/pull_request/pipeline.ts +++ b/.buildkite/scripts/pipelines/pull_request/pipeline.ts @@ -139,6 +139,10 @@ const uploadPipeline = (pipelineContent: string | object) => { pipeline.push(getPipeline('.buildkite/pipelines/pull_request/deploy_cloud.yml')); } + if (GITHUB_PR_LABELS.includes('ci:build-docker-fips')) { + pipeline.push(getPipeline('.buildkite/pipelines/pull_request/fips.yml')); + } + if ( GITHUB_PR_LABELS.includes('ci:project-deploy-elasticsearch') || GITHUB_PR_LABELS.includes('ci:project-deploy-observability') || diff --git a/.buildkite/scripts/serverless/create_deploy_tag/create_fix_tag.sh b/.buildkite/scripts/serverless/create_deploy_tag/create_fix_tag.sh new file mode 100755 index 0000000000000..ed1fab966ac49 --- /dev/null +++ b/.buildkite/scripts/serverless/create_deploy_tag/create_fix_tag.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +set -euo pipefail + +echo "--- Verify $BUILDKITE_COMMIT exists in $BUILDKITE_BRANCH" +# Step 1: Check if the commit is in the specific named branch +if git merge-base --is-ancestor $BUILDKITE_COMMIT $BUILDKITE_BRANCH; then + echo "Commit $BUILDKITE_COMMIT is part of the $BUILDKITE_BRANCH branch" + + # Step 2: Check if the commit is also part of any other branches + # This command lists all branches containing the commit and counts them + branches_containing_commit=$(git branch --contains $BUILDKITE_COMMIT | wc -l) + + # If the commit is in more than one branch, exit with non-zero + if [[ $branches_containing_commit -gt 1 ]]; then + echo "Error: Commit $BUILDKITE_COMMIT is part of multiple branches." + exit 1 + else + echo "Commit $BUILDKITE_COMMIT is uniquely part of the $BUILDKITE_BRANCH branch." + fi +else + echo "Commit $BUILDKITE_COMMIT is not part of the $BUILDKITE_BRANCH branch." + exit 1 +fi + +echo "--- Create tag $BUILDKITE_BRANCH" +git tag "$BUILDKITE_BRANCH" "$BUILDKITE_COMMIT" + +echo "--- Push tag $BUILDKITE_BRANCH" +git push origin tag "$BUILDKITE_BRANCH" diff --git a/.buildkite/scripts/steps/artifacts/docker_image.sh b/.buildkite/scripts/steps/artifacts/docker_image.sh index f6ed33bbce0d3..6e07cec0947ba 100755 --- a/.buildkite/scripts/steps/artifacts/docker_image.sh +++ b/.buildkite/scripts/steps/artifacts/docker_image.sh @@ -36,6 +36,7 @@ node scripts/build \ --docker-tag="$KIBANA_IMAGE_TAG" \ --skip-docker-ubuntu \ --skip-docker-ubi \ + --skip-docker-fips \ --skip-docker-cloud \ --skip-docker-contexts diff --git a/.buildkite/scripts/steps/cloud/build_and_deploy.sh b/.buildkite/scripts/steps/cloud/build_and_deploy.sh index 15de3aa8614b8..6a7a95f8eaf10 100755 --- a/.buildkite/scripts/steps/cloud/build_and_deploy.sh +++ b/.buildkite/scripts/steps/cloud/build_and_deploy.sh @@ -42,6 +42,7 @@ else --docker-tag-qualifier="$GIT_COMMIT" \ --docker-push \ --skip-docker-ubi \ + --skip-docker-fips \ --skip-docker-ubuntu \ --skip-docker-serverless \ --skip-docker-contexts diff --git a/.buildkite/scripts/steps/demo_env/kibana.sh b/.buildkite/scripts/steps/demo_env/kibana.sh index 0483c038aaac4..e8dacdfb94e53 100755 --- a/.buildkite/scripts/steps/demo_env/kibana.sh +++ b/.buildkite/scripts/steps/demo_env/kibana.sh @@ -9,7 +9,7 @@ source "$(dirname "${0}")/config.sh" export KIBANA_IMAGE="gcr.io/elastic-kibana-184716/demo/kibana:$DEPLOYMENT_NAME-$(git rev-parse HEAD)" echo '--- Build Kibana' -node scripts/build --debug --docker-images --example-plugins --skip-docker-ubi --skip-docker-cloud --skip-docker-serverless --skip-docker-contexts +node scripts/build --debug --docker-images --example-plugins --skip-docker-ubi --skip-docker-fips --skip-docker-cloud --skip-docker-serverless --skip-docker-contexts echo '--- Build Docker image with example plugins' cd target/example_plugins diff --git a/.buildkite/scripts/steps/fips/build.sh b/.buildkite/scripts/steps/fips/build.sh new file mode 100644 index 0000000000000..dcd3cc3b0bb2f --- /dev/null +++ b/.buildkite/scripts/steps/fips/build.sh @@ -0,0 +1,35 @@ +#!/usr/bin/env bash + +set -euo pipefail + +.buildkite/scripts/bootstrap.sh + +source .buildkite/scripts/common/util.sh +source .buildkite/scripts/steps/artifacts/env.sh + +echo "$KIBANA_DOCKER_PASSWORD" | docker login -u "$KIBANA_DOCKER_USERNAME" --password-stdin docker.elastic.co +mkdir -p target +download_artifact "kibana-$FULL_VERSION-linux-x86_64.tar.gz" ./target --build "${KIBANA_BUILD_ID:-$BUILDKITE_BUILD_ID}" + +echo "--- Build FIPS image" +node scripts/build \ + --skip-initialize \ + --skip-generic-folders \ + --skip-platform-folders \ + --skip-cdn-assets \ + --skip-archives \ + --docker-images \ + --docker-namespace="kibana-ci" \ + --docker-tag-qualifier="$BUILDKITE_COMMIT" \ + --docker-push \ + --skip-docker-ubi \ + --skip-docker-ubuntu \ + --skip-docker-cloud \ + --skip-docker-serverless \ + --skip-docker-contexts + +docker logout docker.elastic.co + +# Moving to `target/` first will keep `buildkite-agent` from including directories in the artifact name +cd "$KIBANA_DIR/target" +buildkite-agent artifact upload "./*docker-image*.tar.gz" diff --git a/.buildkite/scripts/steps/package_testing/build.sh b/.buildkite/scripts/steps/package_testing/build.sh index 892b8bf312d51..9cd03ac82ac0f 100755 --- a/.buildkite/scripts/steps/package_testing/build.sh +++ b/.buildkite/scripts/steps/package_testing/build.sh @@ -4,7 +4,7 @@ set -euo pipefail .buildkite/scripts/bootstrap.sh -node scripts/build --all-platforms --debug --skip-docker-cloud --skip-docker-serverless --skip-docker-ubi --skip-docker-contexts --skip-cdn-assets +node scripts/build --all-platforms --debug --skip-docker-cloud --skip-docker-serverless --skip-docker-ubi --skip-docker-fips --skip-docker-contexts --skip-cdn-assets DOCKER_FILE="kibana-$KIBANA_PKG_VERSION-SNAPSHOT-docker-image.tar.gz" diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 72f4dfddb686b..dcfce13388c7a 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -324,6 +324,7 @@ src/plugins/data_view_editor @elastic/kibana-data-discovery examples/data_view_field_editor_example @elastic/kibana-data-discovery src/plugins/data_view_field_editor @elastic/kibana-data-discovery src/plugins/data_view_management @elastic/kibana-data-discovery +packages/kbn-data-view-utils @elastic/kibana-data-discovery src/plugins/data_views @elastic/kibana-data-discovery x-pack/plugins/data_visualizer @elastic/ml-ui x-pack/plugins/dataset_quality @elastic/obs-ux-logs-team @@ -1500,6 +1501,9 @@ x-pack/plugins/security_solution/public/flyout/entity_details @elastic/security- x-pack/plugins/security_solution/common/api/entity_analytics @elastic/security-entity-analytics x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/risk_score @elastic/security-entity-analytics +## Security Solution sub teams - GenAI +x-pack/test/security_solution_api_integration/test_suites/genai @elastic/security-generative-ai + # Security Defend Workflows - OSQuery Ownership /x-pack/plugins/security_solution/common/api/detection_engine/model/rule_response_actions @elastic/security-defend-workflows /x-pack/plugins/security_solution/public/detection_engine/rule_response_actions @elastic/security-defend-workflows diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index 54037cd3edeb5..2e5a688aadf5c 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-02-07 +date: 2024-02-08 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 fb9947f139e12..c4f09f5856a44 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings'] --- import advancedSettingsObj from './advanced_settings.devdocs.json'; diff --git a/api_docs/ai_assistant_management_observability.mdx b/api_docs/ai_assistant_management_observability.mdx index 32558d156f587..fa3a76f742ff2 100644 --- a/api_docs/ai_assistant_management_observability.mdx +++ b/api_docs/ai_assistant_management_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiAssistantManagementObservability title: "aiAssistantManagementObservability" image: https://source.unsplash.com/400x175/?github description: API docs for the aiAssistantManagementObservability plugin -date: 2024-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiAssistantManagementObservability'] --- import aiAssistantManagementObservabilityObj from './ai_assistant_management_observability.devdocs.json'; diff --git a/api_docs/ai_assistant_management_selection.mdx b/api_docs/ai_assistant_management_selection.mdx index b83874aec8366..f03427a765ea1 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-02-07 +date: 2024-02-08 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 28e29c47bc22d..a2ecdca05e508 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-02-07 +date: 2024-02-08 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 5870a15f134ac..a7e39b0784003 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-02-07 +date: 2024-02-08 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 47b13e31ab939..cb88e4b523e3c 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-02-07 +date: 2024-02-08 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 55a18a78b6ad7..0db7c0441306c 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apmDataAccess'] --- import apmDataAccessObj from './apm_data_access.devdocs.json'; diff --git a/api_docs/asset_manager.mdx b/api_docs/asset_manager.mdx index 31fff0681b7e8..72dd300e3f6ab 100644 --- a/api_docs/asset_manager.mdx +++ b/api_docs/asset_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/assetManager title: "assetManager" image: https://source.unsplash.com/400x175/?github description: API docs for the assetManager plugin -date: 2024-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'assetManager'] --- import assetManagerObj from './asset_manager.devdocs.json'; diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index e4979db414c53..6e679de83bfc2 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-02-07 +date: 2024-02-08 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 fc66ffd30c496..b1eff88214d4e 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-02-07 +date: 2024-02-08 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 76e21cb4a00f4..6c8a7b48a899f 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-02-07 +date: 2024-02-08 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 ce1a79df312ba..b0b4dac09d20f 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-02-07 +date: 2024-02-08 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 03529c94a9eaa..6155cfbba8614 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-02-07 +date: 2024-02-08 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 f733add4b9991..d141f83ff45a9 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-02-07 +date: 2024-02-08 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 fcbf269d5375f..55a52449f1718 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-02-07 +date: 2024-02-08 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 bb51d1645f85e..93a43658a51fe 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-02-07 +date: 2024-02-08 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 e6d0c449ec1ad..5915c7ca85ded 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-02-07 +date: 2024-02-08 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 080f0d5cb0c3a..3114799838b01 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-02-07 +date: 2024-02-08 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 27b4958284e5a..527e60940783b 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-02-07 +date: 2024-02-08 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 dafa7bce29e1f..0588bc2a0bf97 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-02-07 +date: 2024-02-08 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 64d8ca3fd8e79..926346635e430 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-02-07 +date: 2024-02-08 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 4454a70238943..8e5c36fbc0747 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-02-07 +date: 2024-02-08 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 e82c5a1de3616..7d5bedf0444df 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-02-07 +date: 2024-02-08 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 4efbf0051269b..791ceaa540a1d 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboardEnhanced'] --- import dashboardEnhancedObj from './dashboard_enhanced.devdocs.json'; diff --git a/api_docs/data.mdx b/api_docs/data.mdx index 318245e38595a..0266dc6c63480 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data'] --- import dataObj from './data.devdocs.json'; diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx index 05e3acb062a50..6d57ee43cdb19 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.query'] --- import dataQueryObj from './data_query.devdocs.json'; diff --git a/api_docs/data_search.mdx b/api_docs/data_search.mdx index 736ab6888a419..6cf0ec8b332ee 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-02-07 +date: 2024-02-08 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 a702fe304577c..a986ac73a1a4a 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-02-07 +date: 2024-02-08 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 4d81b7a67b294..b51cccc090336 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-02-07 +date: 2024-02-08 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 500962ad0ea2b..2448185780faf 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewManagement'] --- import dataViewManagementObj from './data_view_management.devdocs.json'; diff --git a/api_docs/data_views.mdx b/api_docs/data_views.mdx index 2826aa5424d1e..84e6eae5ffd18 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViews'] --- import dataViewsObj from './data_views.devdocs.json'; diff --git a/api_docs/data_visualizer.mdx b/api_docs/data_visualizer.mdx index 27766dc46e00d..b09f9dd8a0a27 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-02-07 +date: 2024-02-08 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 285b2f4d7f7cb..27f53e5af8347 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-02-07 +date: 2024-02-08 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 4d3566baa5a61..a433ea47849f4 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index 6d81a57f9015d..3d5d34b7d900c 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index 1597b7565e31f..e41eae851ed2d 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index ebd0134451a37..359ab0e7288e9 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-02-07 +date: 2024-02-08 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 7e487fd29fae8..962b6c9db5e41 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-02-07 +date: 2024-02-08 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 214e4934f0546..db0763d64fdb3 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced'] --- import discoverEnhancedObj from './discover_enhanced.devdocs.json'; diff --git a/api_docs/ecs_data_quality_dashboard.mdx b/api_docs/ecs_data_quality_dashboard.mdx index 6a80d575ecbd8..0a9d3737f22cd 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ecsDataQualityDashboard'] --- import ecsDataQualityDashboardObj from './ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/elastic_assistant.mdx b/api_docs/elastic_assistant.mdx index a56158deb96f4..62ab029aa3e2f 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'elasticAssistant'] --- import elasticAssistantObj from './elastic_assistant.devdocs.json'; diff --git a/api_docs/embeddable.devdocs.json b/api_docs/embeddable.devdocs.json index cbd3e011180d6..fc380952c04d6 100644 --- a/api_docs/embeddable.devdocs.json +++ b/api_docs/embeddable.devdocs.json @@ -720,6 +720,52 @@ ], "returnComment": [] }, + { + "parentPluginId": "embeddable", + "id": "def-public.Container.addNewPanel", + "type": "Function", + "tags": [], + "label": "addNewPanel", + "description": [], + "signature": [ + "(panelPackage: ", + { + "pluginId": "@kbn/presentation-containers", + "scope": "common", + "docId": "kibKbnPresentationContainersPluginApi", + "section": "def-common.PanelPackage", + "text": "PanelPackage" + }, + ") => Promise" + ], + "path": "src/plugins/embeddable/public/lib/containers/container.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "embeddable", + "id": "def-public.Container.addNewPanel.$1", + "type": "Object", + "tags": [], + "label": "panelPackage", + "description": [], + "signature": [ + { + "pluginId": "@kbn/presentation-containers", + "scope": "common", + "docId": "kibKbnPresentationContainersPluginApi", + "section": "def-common.PanelPackage", + "text": "PanelPackage" + } + ], + "path": "src/plugins/embeddable/public/lib/containers/container.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, { "parentPluginId": "embeddable", "id": "def-public.Container.replacePanel", @@ -2557,7 +2603,15 @@ "section": "def-common.PublishesLastSavedState", "text": "PublishesLastSavedState" }, - " & { registerPanelApi: (panelId: string, panelApi: ApiType) => void; removePanel: (panelId: string) => void; canRemovePanels?: (() => boolean) | undefined; replacePanel: (idToRemove: string, newPanel: ", + " & { addNewPanel: (panel: ", + { + "pluginId": "@kbn/presentation-containers", + "scope": "common", + "docId": "kibKbnPresentationContainersPluginApi", + "section": "def-common.PanelPackage", + "text": "PanelPackage" + }, + ", displaySuccessMessage?: boolean | undefined) => Promise; registerPanelApi: (panelId: string, panelApi: ApiType) => void; removePanel: (panelId: string) => void; canRemovePanels?: (() => boolean) | undefined; replacePanel: (idToRemove: string, newPanel: ", { "pluginId": "@kbn/presentation-containers", "scope": "common", @@ -8970,6 +9024,54 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "embeddable", + "id": "def-public.registerSavedObjectToPanelMethod", + "type": "Function", + "tags": [], + "label": "registerSavedObjectToPanelMethod", + "description": [], + "signature": [ + "(savedObjectType: string, method: SavedObjectToPanelMethod) => void" + ], + "path": "src/plugins/embeddable/public/registry/saved_object_to_panel_methods.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "embeddable", + "id": "def-public.registerSavedObjectToPanelMethod.$1", + "type": "string", + "tags": [], + "label": "savedObjectType", + "description": [], + "signature": [ + "string" + ], + "path": "src/plugins/embeddable/public/registry/saved_object_to_panel_methods.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "embeddable", + "id": "def-public.registerSavedObjectToPanelMethod.$2", + "type": "Function", + "tags": [], + "label": "method", + "description": [], + "signature": [ + "SavedObjectToPanelMethod" + ], + "path": "src/plugins/embeddable/public/registry/saved_object_to_panel_methods.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "embeddable", "id": "def-public.runEmbeddableFactoryMigrations", @@ -13404,7 +13506,15 @@ "section": "def-common.PublishesLastSavedState", "text": "PublishesLastSavedState" }, - " & { registerPanelApi: (panelId: string, panelApi: ApiType) => void; removePanel: (panelId: string) => void; canRemovePanels?: (() => boolean) | undefined; replacePanel: (idToRemove: string, newPanel: ", + " & { addNewPanel: (panel: ", + { + "pluginId": "@kbn/presentation-containers", + "scope": "common", + "docId": "kibKbnPresentationContainersPluginApi", + "section": "def-common.PanelPackage", + "text": "PanelPackage" + }, + ", displaySuccessMessage?: boolean | undefined) => Promise; registerPanelApi: (panelId: string, panelApi: ApiType) => void; removePanel: (panelId: string) => void; canRemovePanels?: (() => boolean) | undefined; replacePanel: (idToRemove: string, newPanel: ", { "pluginId": "@kbn/presentation-containers", "scope": "common", diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx index 443871d9e9a13..e4757ac0fa026 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'embeddable'] --- import embeddableObj from './embeddable.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kib | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 557 | 1 | 452 | 8 | +| 562 | 1 | 457 | 8 | ## Client diff --git a/api_docs/embeddable_enhanced.mdx b/api_docs/embeddable_enhanced.mdx index 5d4a086ffa67c..edacdc9d052fa 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-02-07 +date: 2024-02-08 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 d6b88067724a5..53d150a26ef56 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-02-07 +date: 2024-02-08 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 976efc6f352f0..31ce75f352a2b 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'enterpriseSearch'] --- import enterpriseSearchObj from './enterprise_search.devdocs.json'; diff --git a/api_docs/es_ui_shared.mdx b/api_docs/es_ui_shared.mdx index 068973c413332..cebbea3aa42b1 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared'] --- import esUiSharedObj from './es_ui_shared.devdocs.json'; diff --git a/api_docs/event_annotation.mdx b/api_docs/event_annotation.mdx index 04ff788135c3b..cc9070788f35c 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-02-07 +date: 2024-02-08 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 678653f01675d..059381734ebd4 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-02-07 +date: 2024-02-08 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 68c65eed115f8..bc0599a12a058 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-02-07 +date: 2024-02-08 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 d848fea9dff05..0c5e1b26620d6 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-02-07 +date: 2024-02-08 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 5a4ab66af2adb..910ad5fcb79dc 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-02-07 +date: 2024-02-08 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 8e09a01529a53..6c9ac5adda786 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-02-07 +date: 2024-02-08 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 34a2a193157b5..192bc924a0157 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-02-07 +date: 2024-02-08 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 252a9498bf27f..b24dc2180c5ff 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-02-07 +date: 2024-02-08 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 dfd42386bd97f..847888ad3d734 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-02-07 +date: 2024-02-08 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 6b382f9dcd5de..05e169cdacb4f 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-02-07 +date: 2024-02-08 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 0c0dac7590506..b84b768bd7765 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-02-07 +date: 2024-02-08 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 8bf65ad0ab67b..e9741fccf718a 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-02-07 +date: 2024-02-08 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 e3f854290b85c..ef330144a3107 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-02-07 +date: 2024-02-08 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 e1ad44d967385..e29d8c3310626 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-02-07 +date: 2024-02-08 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 8c03e3179e3c0..951cb74b24a4b 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-02-07 +date: 2024-02-08 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 f6363210818fb..f8dd39ea344b2 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-02-07 +date: 2024-02-08 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 9872e1d9d71aa..6a8c5d756baeb 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-02-07 +date: 2024-02-08 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 b3e3fa39995d3..56fd7d9a3e9e2 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-02-07 +date: 2024-02-08 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 3d8ee32fce106..cce1d5fed656e 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-02-07 +date: 2024-02-08 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 6cf7b1fccd3d7..671764bec61f0 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldFormats'] --- import fieldFormatsObj from './field_formats.devdocs.json'; diff --git a/api_docs/file_upload.mdx b/api_docs/file_upload.mdx index a50d4e8e4735e..836a66f011251 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-02-07 +date: 2024-02-08 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 6bdc433a462bf..51c67ed1e825d 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'files'] --- import filesObj from './files.devdocs.json'; diff --git a/api_docs/files_management.mdx b/api_docs/files_management.mdx index bab8111ea9acd..9b30702e06533 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'filesManagement'] --- import filesManagementObj from './files_management.devdocs.json'; diff --git a/api_docs/fleet.mdx b/api_docs/fleet.mdx index e457af73948af..c9116c07c7ca6 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-02-07 +date: 2024-02-08 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 031e986467b92..80c2deb4cd624 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-02-07 +date: 2024-02-08 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 c68994c5fdf71..a4d1a189f4d6f 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-02-07 +date: 2024-02-08 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 f004aff979b57..2d95568af2c61 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-02-07 +date: 2024-02-08 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 561f830f5ed1a..58557d1df0f81 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-02-07 +date: 2024-02-08 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 f6cf3f300f557..605daf26ab6e8 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-02-07 +date: 2024-02-08 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 3f8c2ff001f18..84ce30e93ad1e 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-02-07 +date: 2024-02-08 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 302e477335d1c..4f031fef2daf0 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-02-07 +date: 2024-02-08 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 cf427bd90c527..1e230e88c34f0 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-02-07 +date: 2024-02-08 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 cdeab5a224d81..2df6572eec141 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inspector'] --- import inspectorObj from './inspector.devdocs.json'; diff --git a/api_docs/interactive_setup.mdx b/api_docs/interactive_setup.mdx index 9b1884dc2a44b..e8dd04b37bde9 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'interactiveSetup'] --- import interactiveSetupObj from './interactive_setup.devdocs.json'; diff --git a/api_docs/kbn_ace.mdx b/api_docs/kbn_ace.mdx index 8caec772965ee..1f8f965aae613 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-02-07 +date: 2024-02-08 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 88a29fe0597bd..0763ecf7f78ca 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-02-07 +date: 2024-02-08 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 3258abdd89ffc..c6126bde35517 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components'] --- import kbnAiopsComponentsObj from './kbn_aiops_components.devdocs.json'; diff --git a/api_docs/kbn_aiops_utils.mdx b/api_docs/kbn_aiops_utils.mdx index 93defed009bb1..2362583ae493e 100644 --- a/api_docs/kbn_aiops_utils.mdx +++ b/api_docs/kbn_aiops_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-utils title: "@kbn/aiops-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-utils plugin -date: 2024-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-utils'] --- import kbnAiopsUtilsObj from './kbn_aiops_utils.devdocs.json'; diff --git a/api_docs/kbn_alerting_api_integration_helpers.mdx b/api_docs/kbn_alerting_api_integration_helpers.mdx index 9a697b4d61449..adae00f67b092 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-02-07 +date: 2024-02-08 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_state_types.mdx b/api_docs/kbn_alerting_state_types.mdx index d0fee964360aa..6cf39a09235b2 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-02-07 +date: 2024-02-08 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 2071cb1dd96e4..dd559ffd26fe5 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-types'] --- import kbnAlertingTypesObj from './kbn_alerting_types.devdocs.json'; diff --git a/api_docs/kbn_alerts_as_data_utils.mdx b/api_docs/kbn_alerts_as_data_utils.mdx index 2fdfdd3238dad..0808269e690c2 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-02-07 +date: 2024-02-08 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 d7b8009e7e092..4456a7af94562 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-02-07 +date: 2024-02-08 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 fd4d432cbe617..2c154af34afe2 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics'] --- import kbnAnalyticsObj from './kbn_analytics.devdocs.json'; diff --git a/api_docs/kbn_analytics_client.mdx b/api_docs/kbn_analytics_client.mdx index 99db6e29b00f1..3a3ddaf341bb6 100644 --- a/api_docs/kbn_analytics_client.mdx +++ b/api_docs/kbn_analytics_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-client title: "@kbn/analytics-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-client plugin -date: 2024-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-client'] --- import kbnAnalyticsClientObj from './kbn_analytics_client.devdocs.json'; diff --git a/api_docs/kbn_analytics_collection_utils.mdx b/api_docs/kbn_analytics_collection_utils.mdx index f18fd4790af55..938d7d35faf27 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-collection-utils'] --- import kbnAnalyticsCollectionUtilsObj from './kbn_analytics_collection_utils.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx index bbaf361280b49..6429e4fd664f6 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-browser title: "@kbn/analytics-shippers-elastic-v3-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-browser plugin -date: 2024-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-browser'] --- import kbnAnalyticsShippersElasticV3BrowserObj from './kbn_analytics_shippers_elastic_v3_browser.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx index 613455dad34ae..1dd782b9c7090 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-common title: "@kbn/analytics-shippers-elastic-v3-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-common plugin -date: 2024-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-common'] --- import kbnAnalyticsShippersElasticV3CommonObj from './kbn_analytics_shippers_elastic_v3_common.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx index 8db8c8d132255..7dfc5486d4500 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-server title: "@kbn/analytics-shippers-elastic-v3-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-server plugin -date: 2024-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-server'] --- import kbnAnalyticsShippersElasticV3ServerObj from './kbn_analytics_shippers_elastic_v3_server.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_fullstory.mdx b/api_docs/kbn_analytics_shippers_fullstory.mdx index 964b428217d0e..96aa885356288 100644 --- a/api_docs/kbn_analytics_shippers_fullstory.mdx +++ b/api_docs/kbn_analytics_shippers_fullstory.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-fullstory title: "@kbn/analytics-shippers-fullstory" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-fullstory plugin -date: 2024-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-fullstory'] --- import kbnAnalyticsShippersFullstoryObj from './kbn_analytics_shippers_fullstory.devdocs.json'; diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index 00d58ccb6a74c..ed1531ec2001b 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-02-07 +date: 2024-02-08 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_synthtrace.mdx b/api_docs/kbn_apm_synthtrace.mdx index db071f9e01471..3e1e47dfb25ef 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-02-07 +date: 2024-02-08 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 6602bb36b7029..25d3e9cc79ec3 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-02-07 +date: 2024-02-08 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 14eceaf9f6c6e..0ac7a3a59f241 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-02-07 +date: 2024-02-08 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 8a2a7331cbbed..f75fe45564b3b 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-02-07 +date: 2024-02-08 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 e0f13dacf12e2..d46de8af8627c 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-02-07 +date: 2024-02-08 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 e88e9cf0f46af..602a8996070c3 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-02-07 +date: 2024-02-08 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 37bb79a8bfabb..f861e1c0050c4 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-02-07 +date: 2024-02-08 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 595ae33bf58d4..1767a5304bdc0 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-02-07 +date: 2024-02-08 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 8267f3c16f1d7..1ec35fd6fe8f5 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-02-07 +date: 2024-02-08 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 375e367a2ea51..b771c0d3d6920 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-02-07 +date: 2024-02-08 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 9c904d7307dc2..cd2a38645c91e 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-02-07 +date: 2024-02-08 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 1594dae51b9c8..0b55255cef877 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-02-07 +date: 2024-02-08 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 5e23c1379c324..58fb180401961 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-02-07 +date: 2024-02-08 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 d274a27de597c..b9335f88725a8 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-02-07 +date: 2024-02-08 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 e245c1d86e968..c9c712c09b190 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-02-07 +date: 2024-02-08 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 3817bba5764d9..320fcdf6a12d8 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-02-07 +date: 2024-02-08 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 42c0c32b12e51..6353e16c8bcfa 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-02-07 +date: 2024-02-08 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 5ba405fce4dbc..b500748561914 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-02-07 +date: 2024-02-08 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 89c8701f1916e..f675651096bce 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/coloring'] --- import kbnColoringObj from './kbn_coloring.devdocs.json'; diff --git a/api_docs/kbn_config.devdocs.json b/api_docs/kbn_config.devdocs.json index 1e255c294bc37..99fd12bd40eb3 100644 --- a/api_docs/kbn_config.devdocs.json +++ b/api_docs/kbn_config.devdocs.json @@ -39,7 +39,7 @@ "\nInformation about Kibana package (version, build number etc.)." ], "signature": [ - "{ readonly version: string; readonly branch: string; readonly buildNum: number; readonly buildSha: string; readonly buildDate: Date; readonly buildFlavor: ", + "{ readonly version: string; readonly branch: string; readonly buildNum: number; readonly buildSha: string; readonly buildShaShort: string; readonly buildDate: Date; readonly buildFlavor: ", { "pluginId": "@kbn/config", "scope": "common", @@ -964,6 +964,17 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "@kbn/config", + "id": "def-common.PackageInfo.buildShaShort", + "type": "string", + "tags": [], + "label": "buildShaShort", + "description": [], + "path": "packages/kbn-config/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "@kbn/config", "id": "def-common.PackageInfo.buildDate", diff --git a/api_docs/kbn_config.mdx b/api_docs/kbn_config.mdx index 673574632e619..352c9fbf5774d 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config'] --- import kbnConfigObj from './kbn_config.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 76 | 0 | 47 | 9 | +| 77 | 0 | 48 | 9 | ## Common diff --git a/api_docs/kbn_config_mocks.mdx b/api_docs/kbn_config_mocks.mdx index c35abb86a9578..b8fa2ab445158 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-02-07 +date: 2024-02-08 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 6ffdca2e390bb..9bf2e8798378d 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-02-07 +date: 2024-02-08 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 f1cef23fdb330..288b0cd8429f2 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-02-07 +date: 2024-02-08 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 e26f8646dc4f8..83f0afa466430 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-02-07 +date: 2024-02-08 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 b257e36ca7c58..29e3e3fb6e9de 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-02-07 +date: 2024-02-08 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 4300132ed29f1..3caf4dedb360d 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-02-07 +date: 2024-02-08 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 9df2310b6aece..43b3aa976cf31 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-02-07 +date: 2024-02-08 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_utils.mdx b/api_docs/kbn_content_management_utils.mdx index 6e5578f734936..0f4c9036bee49 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-02-07 +date: 2024-02-08 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.mdx b/api_docs/kbn_core_analytics_browser.mdx index c0ea027c1c7a3..5c4feb84eb1ba 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-02-07 +date: 2024-02-08 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 2cf554b3d1091..07136a907a3bf 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-02-07 +date: 2024-02-08 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 33672c6af029f..63258f3c47d15 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-02-07 +date: 2024-02-08 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.mdx b/api_docs/kbn_core_analytics_server.mdx index 164e19682cf6e..695d28c0134d8 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-02-07 +date: 2024-02-08 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 e85fd93334a5f..a2b32db67bddb 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-02-07 +date: 2024-02-08 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 0f6fe0dca69f7..244fcfaf34db5 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-02-07 +date: 2024-02-08 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 defdbfcf752d9..39ee36437db30 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-02-07 +date: 2024-02-08 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 e462b53bbe0ae..78467a9be966a 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-02-07 +date: 2024-02-08 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 554783ac18a77..c943b2ba31290 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-02-07 +date: 2024-02-08 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 b9a1be9ff7baf..9c6a61750d08a 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-02-07 +date: 2024-02-08 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 2cf86d87ee446..925f06201ac93 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-02-07 +date: 2024-02-08 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 c342f014d3371..007e706834014 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-02-07 +date: 2024-02-08 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 0f458ac648a85..822678a4634ca 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-02-07 +date: 2024-02-08 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 fb3409a1b72ae..de1c6e41bde19 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-02-07 +date: 2024-02-08 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 121a253b7fd34..487ca8516e901 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-02-07 +date: 2024-02-08 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 29d44218fba40..8f3d657ed031f 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-02-07 +date: 2024-02-08 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 e7d08297f3f01..13aaee49fb3d6 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-02-07 +date: 2024-02-08 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 5bd6809ec7fc5..87400852bf5ba 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-02-07 +date: 2024-02-08 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 9479895594b92..155e3d1ab32c1 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-02-07 +date: 2024-02-08 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 503f1dd752f27..cf9a67511dbd2 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-02-07 +date: 2024-02-08 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 40b5ec41d5b07..29018e77c93a7 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-02-07 +date: 2024-02-08 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 5c0687ba846e3..7e248c277a53a 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-02-07 +date: 2024-02-08 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 175d427be1336..c11368f3af3d9 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-02-07 +date: 2024-02-08 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 9c964617deece..4ae9332297a09 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-02-07 +date: 2024-02-08 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 31a20ae4eb4a8..2facaddb22fdc 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-02-07 +date: 2024-02-08 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 b58dcee47c56c..ab719f09e2c63 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-02-07 +date: 2024-02-08 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 3cc6dc60b7047..b2f84279964e6 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-02-07 +date: 2024-02-08 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 9143f421c163f..d70220d140f0e 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-02-07 +date: 2024-02-08 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 2255d80da4822..5d8aa78a7d4a6 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-02-07 +date: 2024-02-08 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 54bb7f13f99b4..6007871fbeb4f 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-02-07 +date: 2024-02-08 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 edaac85c0d9ed..b12a9b9373f49 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-02-07 +date: 2024-02-08 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 ae7f085a73371..fc28e7abd3ced 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-02-07 +date: 2024-02-08 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 fe2bc41f4598a..d8e9e2e70cb95 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-02-07 +date: 2024-02-08 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 ca9cf933ee7b0..06793bda57298 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-02-07 +date: 2024-02-08 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 063ad28cfb84f..97b6a368d6205 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-02-07 +date: 2024-02-08 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 721614015137b..06a9e3bc8b2aa 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-02-07 +date: 2024-02-08 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 3c4f18032a02d..484362bc9717c 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-02-07 +date: 2024-02-08 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 c313423616554..2b1496836fd14 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-02-07 +date: 2024-02-08 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 1665c11768fb1..da4db3f2e5a39 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-02-07 +date: 2024-02-08 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 5f563aad21268..4deae23e311bb 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-02-07 +date: 2024-02-08 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 aa05ee1e48aec..a96a8402e95b2 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-02-07 +date: 2024-02-08 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 4a47db4503d26..7dafc9670937a 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-02-07 +date: 2024-02-08 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 a535c44c1086a..00e21b7c8c4cd 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-02-07 +date: 2024-02-08 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 82ddfe913f043..61096379c1a35 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-02-07 +date: 2024-02-08 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 063206d392085..914a607ba4510 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-02-07 +date: 2024-02-08 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 2951f1f0ae58e..f9b7fc07ef57f 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-02-07 +date: 2024-02-08 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 62ca17a0e5ed4..f45c0e2ba281b 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-02-07 +date: 2024-02-08 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 8b13127936232..fe2b0d418efe9 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-02-07 +date: 2024-02-08 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 dd8d00c19a9ca..de245988d874d 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-02-07 +date: 2024-02-08 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 f27c008baf813..2e24c70d937cc 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-02-07 +date: 2024-02-08 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 c269780d72904..3eeefff838d59 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-02-07 +date: 2024-02-08 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 090d6a37c599a..6aa09d853c97b 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-02-07 +date: 2024-02-08 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 b9f02f7b80635..74f788fde9c4a 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-02-07 +date: 2024-02-08 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 72c15222edf16..4d9bad9a99e2a 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-02-07 +date: 2024-02-08 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 7084245ddd0c6..f3bcc14e633c8 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-02-07 +date: 2024-02-08 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 7079ebd6a73a8..5fc3117502e5c 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-02-07 +date: 2024-02-08 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 b22d1453c6f5b..1627580848aa5 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-02-07 +date: 2024-02-08 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 182e61b01ac29..df4b66973facb 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-02-07 +date: 2024-02-08 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 c5611f0d5ecbb..a612f81fdcfd3 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-02-07 +date: 2024-02-08 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 ec1a657fa1338..f2e5236be83a0 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-02-07 +date: 2024-02-08 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 b60018e61198c..f6eee4cf9a021 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-02-07 +date: 2024-02-08 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 efdf299352432..c376893e3d624 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-02-07 +date: 2024-02-08 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 22864c7ec1dbc..b362fe116e723 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-02-07 +date: 2024-02-08 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 6559762b2f80b..eeb0f260e6409 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-02-07 +date: 2024-02-08 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 6a4a7db0eaed2..d26c55f0fb0df 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-02-07 +date: 2024-02-08 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 9304825ba54e3..21c62de395267 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-02-07 +date: 2024-02-08 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 2cf5108285fca..d211d7411945e 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-02-07 +date: 2024-02-08 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 c41cdefa3da7f..4250092d3f05a 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-02-07 +date: 2024-02-08 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 9124cb698c653..08f56b9a1ac97 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-02-07 +date: 2024-02-08 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 9b8676b2df198..230ca9ab5e1f1 100644 --- a/api_docs/kbn_core_http_server.devdocs.json +++ b/api_docs/kbn_core_http_server.devdocs.json @@ -4108,6 +4108,10 @@ "plugin": "enterpriseSearch", "path": "x-pack/plugins/enterprise_search/server/routes/enterprise_search/connectors.ts" }, + { + "plugin": "enterpriseSearch", + "path": "x-pack/plugins/enterprise_search/server/routes/enterprise_search/connectors.ts" + }, { "plugin": "enterpriseSearch", "path": "x-pack/plugins/enterprise_search/server/routes/enterprise_search/crawler/crawler_multiple_schedules.ts" @@ -9777,6 +9781,42 @@ } ], "returnComment": [] + }, + { + "parentPluginId": "@kbn/core-http-server", + "id": "def-common.IStaticAssets.prependPublicUrl", + "type": "Function", + "tags": [ + "note" + ], + "label": "prependPublicUrl", + "description": [ + "\nWill return an href, either a path for or full URL with the provided path\nappended to the static assets public base path.\n\nUseful for instances were you need to render your own HTML page and link to\ncertain static assets.\n" + ], + "signature": [ + "(pathname: string) => string" + ], + "path": "packages/core/http/core-http-server/src/static_assets.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-http-server", + "id": "def-common.IStaticAssets.prependPublicUrl.$1", + "type": "string", + "tags": [], + "label": "pathname", + "description": [], + "signature": [ + "string" + ], + "path": "packages/core/http/core-http-server/src/static_assets.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] } ], "initialIsOpen": false diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index de2bc56895147..12f1edda40a9e 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server'] --- import kbnCoreHttpServerObj from './kbn_core_http_server.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 457 | 1 | 180 | 0 | +| 459 | 1 | 181 | 0 | ## Common diff --git a/api_docs/kbn_core_http_server_internal.devdocs.json b/api_docs/kbn_core_http_server_internal.devdocs.json index 7b138870b2d1e..1005e2432f164 100644 --- a/api_docs/kbn_core_http_server_internal.devdocs.json +++ b/api_docs/kbn_core_http_server_internal.devdocs.json @@ -619,16 +619,10 @@ "id": "def-common.HttpServer.Unnamed.$1", "type": "Object", "tags": [], - "label": "logger", + "label": "coreContext", "description": [], "signature": [ - { - "pluginId": "@kbn/logging", - "scope": "common", - "docId": "kibKbnLoggingPluginApi", - "section": "def-common.LoggerFactory", - "text": "LoggerFactory" - } + "CoreContext" ], "path": "packages/core/http/core-http-server-internal/src/http_server.ts", "deprecated": false, @@ -755,6 +749,247 @@ } ], "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-common.StaticAssets", + "type": "Class", + "tags": [], + "label": "StaticAssets", + "description": [ + "\nConvention is for trailing slashes in pathnames are stripped." + ], + "signature": [ + { + "pluginId": "@kbn/core-http-server-internal", + "scope": "common", + "docId": "kibKbnCoreHttpServerInternalPluginApi", + "section": "def-common.StaticAssets", + "text": "StaticAssets" + }, + " implements ", + { + "pluginId": "@kbn/core-http-server-internal", + "scope": "common", + "docId": "kibKbnCoreHttpServerInternalPluginApi", + "section": "def-common.InternalStaticAssets", + "text": "InternalStaticAssets" + } + ], + "path": "packages/core/http/core-http-server-internal/src/static_assets/static_assets.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-common.StaticAssets.Unnamed", + "type": "Function", + "tags": [], + "label": "Constructor", + "description": [], + "signature": [ + "any" + ], + "path": "packages/core/http/core-http-server-internal/src/static_assets/static_assets.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-common.StaticAssets.Unnamed.$1", + "type": "Object", + "tags": [], + "label": "{ basePath, cdnConfig, shaDigest }", + "description": [], + "signature": [ + "StaticAssetsParams" + ], + "path": "packages/core/http/core-http-server-internal/src/static_assets/static_assets.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-common.StaticAssets.getHrefBase", + "type": "Function", + "tags": [], + "label": "getHrefBase", + "description": [ + "\nReturns a href (hypertext reference) intended to be used as the base for constructing\nother hrefs to static assets." + ], + "signature": [ + "() => string" + ], + "path": "packages/core/http/core-http-server-internal/src/static_assets/static_assets.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-common.StaticAssets.getPluginAssetHref", + "type": "Function", + "tags": [], + "label": "getPluginAssetHref", + "description": [], + "signature": [ + "(pluginName: string, assetPath: string) => string" + ], + "path": "packages/core/http/core-http-server-internal/src/static_assets/static_assets.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-common.StaticAssets.getPluginAssetHref.$1", + "type": "string", + "tags": [], + "label": "pluginName", + "description": [], + "signature": [ + "string" + ], + "path": "packages/core/http/core-http-server-internal/src/static_assets/static_assets.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-common.StaticAssets.getPluginAssetHref.$2", + "type": "string", + "tags": [], + "label": "assetPath", + "description": [], + "signature": [ + "string" + ], + "path": "packages/core/http/core-http-server-internal/src/static_assets/static_assets.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-common.StaticAssets.prependServerPath", + "type": "Function", + "tags": [], + "label": "prependServerPath", + "description": [], + "signature": [ + "(path: string) => string" + ], + "path": "packages/core/http/core-http-server-internal/src/static_assets/static_assets.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-common.StaticAssets.prependServerPath.$1", + "type": "string", + "tags": [], + "label": "path", + "description": [], + "signature": [ + "string" + ], + "path": "packages/core/http/core-http-server-internal/src/static_assets/static_assets.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-common.StaticAssets.prependPublicUrl", + "type": "Function", + "tags": [], + "label": "prependPublicUrl", + "description": [], + "signature": [ + "(pathname: string) => string" + ], + "path": "packages/core/http/core-http-server-internal/src/static_assets/static_assets.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-common.StaticAssets.prependPublicUrl.$1", + "type": "string", + "tags": [], + "label": "pathname", + "description": [], + "signature": [ + "string" + ], + "path": "packages/core/http/core-http-server-internal/src/static_assets/static_assets.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-common.StaticAssets.getPluginServerPath", + "type": "Function", + "tags": [], + "label": "getPluginServerPath", + "description": [], + "signature": [ + "(pluginName: string, assetPath: string) => string" + ], + "path": "packages/core/http/core-http-server-internal/src/static_assets/static_assets.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-common.StaticAssets.getPluginServerPath.$1", + "type": "string", + "tags": [], + "label": "pluginName", + "description": [], + "signature": [ + "string" + ], + "path": "packages/core/http/core-http-server-internal/src/static_assets/static_assets.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-common.StaticAssets.getPluginServerPath.$2", + "type": "string", + "tags": [], + "label": "assetPath", + "description": [], + "signature": [ + "string" + ], + "path": "packages/core/http/core-http-server-internal/src/static_assets/static_assets.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + } + ], + "initialIsOpen": false } ], "functions": [ @@ -882,7 +1117,206 @@ "initialIsOpen": false } ], - "interfaces": [], + "interfaces": [ + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-common.InternalStaticAssets", + "type": "Interface", + "tags": [], + "label": "InternalStaticAssets", + "description": [], + "path": "packages/core/http/core-http-server-internal/src/static_assets/static_assets.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-common.InternalStaticAssets.getHrefBase", + "type": "Function", + "tags": [], + "label": "getHrefBase", + "description": [], + "signature": [ + "() => string" + ], + "path": "packages/core/http/core-http-server-internal/src/static_assets/static_assets.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-common.InternalStaticAssets.getPluginAssetHref", + "type": "Function", + "tags": [], + "label": "getPluginAssetHref", + "description": [ + "\nIntended for use by server code rendering UI or generating links to static assets\nthat will ultimately be called from the browser and must respect settings like\nserverBasePath" + ], + "signature": [ + "(pluginName: string, assetPath: string) => string" + ], + "path": "packages/core/http/core-http-server-internal/src/static_assets/static_assets.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-common.InternalStaticAssets.getPluginAssetHref.$1", + "type": "string", + "tags": [], + "label": "pluginName", + "description": [], + "signature": [ + "string" + ], + "path": "packages/core/http/core-http-server-internal/src/static_assets/static_assets.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-common.InternalStaticAssets.getPluginAssetHref.$2", + "type": "string", + "tags": [], + "label": "assetPath", + "description": [], + "signature": [ + "string" + ], + "path": "packages/core/http/core-http-server-internal/src/static_assets/static_assets.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-common.InternalStaticAssets.getPluginServerPath", + "type": "Function", + "tags": [], + "label": "getPluginServerPath", + "description": [ + "\nIntended for use by server code wanting to register static assets against Kibana\nas server paths" + ], + "signature": [ + "(pluginName: string, assetPath: string) => string" + ], + "path": "packages/core/http/core-http-server-internal/src/static_assets/static_assets.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-common.InternalStaticAssets.getPluginServerPath.$1", + "type": "string", + "tags": [], + "label": "pluginName", + "description": [], + "signature": [ + "string" + ], + "path": "packages/core/http/core-http-server-internal/src/static_assets/static_assets.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-common.InternalStaticAssets.getPluginServerPath.$2", + "type": "string", + "tags": [], + "label": "assetPath", + "description": [], + "signature": [ + "string" + ], + "path": "packages/core/http/core-http-server-internal/src/static_assets/static_assets.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-common.InternalStaticAssets.prependServerPath", + "type": "Function", + "tags": [], + "label": "prependServerPath", + "description": [ + "\nSimilar to getPluginServerPath, but not plugin-scoped" + ], + "signature": [ + "(pathname: string) => string" + ], + "path": "packages/core/http/core-http-server-internal/src/static_assets/static_assets.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-common.InternalStaticAssets.prependServerPath.$1", + "type": "string", + "tags": [], + "label": "pathname", + "description": [], + "signature": [ + "string" + ], + "path": "packages/core/http/core-http-server-internal/src/static_assets/static_assets.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-common.InternalStaticAssets.prependPublicUrl", + "type": "Function", + "tags": [ + "note" + ], + "label": "prependPublicUrl", + "description": [ + "\nWill append the given path segment to the configured public path.\n" + ], + "signature": [ + "(pathname: string) => string" + ], + "path": "packages/core/http/core-http-server-internal/src/static_assets/static_assets.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-common.InternalStaticAssets.prependPublicUrl.$1", + "type": "string", + "tags": [], + "label": "pathname", + "description": [], + "signature": [ + "string" + ], + "path": "packages/core/http/core-http-server-internal/src/static_assets/static_assets.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + } + ], + "initialIsOpen": false + } + ], "enums": [], "misc": [ { diff --git a/api_docs/kbn_core_http_server_internal.mdx b/api_docs/kbn_core_http_server_internal.mdx index 80085f910f5ee..82af6b2aefb75 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-internal'] --- import kbnCoreHttpServerInternalObj from './kbn_core_http_server_internal.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 58 | 0 | 52 | 9 | +| 84 | 0 | 72 | 9 | ## Common @@ -34,6 +34,9 @@ Contact [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core ### Classes +### Interfaces + + ### Consts, variables and types diff --git a/api_docs/kbn_core_http_server_mocks.devdocs.json b/api_docs/kbn_core_http_server_mocks.devdocs.json index e3dceb95217ad..753cf161395b9 100644 --- a/api_docs/kbn_core_http_server_mocks.devdocs.json +++ b/api_docs/kbn_core_http_server_mocks.devdocs.json @@ -673,7 +673,13 @@ "description": [], "signature": [ "{ staticAssets: ", - "InternalStaticAssets", + { + "pluginId": "@kbn/core-http-server-internal", + "scope": "common", + "docId": "kibKbnCoreHttpServerInternalPluginApi", + "section": "def-common.InternalStaticAssets", + "text": "InternalStaticAssets" + }, "; isListening: jest.MockInstance; basePath: ", { "pluginId": "@kbn/core-http-server", diff --git a/api_docs/kbn_core_http_server_mocks.mdx b/api_docs/kbn_core_http_server_mocks.mdx index 7a2b9c8ac1125..b2ae7d0501047 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-02-07 +date: 2024-02-08 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 d9c5d66a99bb1..fbfeee4e498df 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-02-07 +date: 2024-02-08 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 30c4af84e5a4f..07d9ee7b67473 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-02-07 +date: 2024-02-08 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 ba4733defd342..18fa18602d6a1 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-02-07 +date: 2024-02-08 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 4a15dc47c8167..850d7e006f30f 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-02-07 +date: 2024-02-08 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 6cf979f0261fa..0972b169c5a25 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-02-07 +date: 2024-02-08 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 4c587e63db3b5..2b50f03d992a4 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-02-07 +date: 2024-02-08 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 ab2a4d0be730b..42b46c147d31e 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-02-07 +date: 2024-02-08 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 806b69e27e05c..44c1b89989262 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-02-07 +date: 2024-02-08 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 68a98c7212262..e36ba5bb25295 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-02-07 +date: 2024-02-08 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 748950c569ab0..08f8b2d90a84f 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-02-07 +date: 2024-02-08 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 151e4ffa39980..f627928546900 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-02-07 +date: 2024-02-08 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 d64103a09a6cf..8189b61131732 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-02-07 +date: 2024-02-08 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 5a382a3192a55..a59624cb0fd83 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-02-07 +date: 2024-02-08 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 705c34f87bab2..2c3e194d00012 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-02-07 +date: 2024-02-08 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 4742b413aa6df..0032ef1fd1c51 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-02-07 +date: 2024-02-08 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 ca1e370734c6c..fffc8316e29ef 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-02-07 +date: 2024-02-08 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 85d427df7c711..a7649ca3c12c4 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-02-07 +date: 2024-02-08 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 0a4f67b9a7539..cb58b91d8279b 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-02-07 +date: 2024-02-08 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 df82765ea644e..a540b9c91e0fe 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-02-07 +date: 2024-02-08 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 d73f84ec7fd4e..e864cb1853d72 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-02-07 +date: 2024-02-08 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 e1e27f1cdf290..f1e1c04e375f0 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-02-07 +date: 2024-02-08 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 7eac5a6600a8b..9149c2a0260ce 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-02-07 +date: 2024-02-08 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 7d0b25e8fabd5..28b259f64a7e0 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-02-07 +date: 2024-02-08 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 4d7d6a2e2d222..c5f37a08e2077 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-02-07 +date: 2024-02-08 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 e7968c98c421a..d8c4209967acd 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-02-07 +date: 2024-02-08 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 562ac202418cf..29c98e37a41b4 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-02-07 +date: 2024-02-08 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 9f3cdd38409cb..4942c22792c4b 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-02-07 +date: 2024-02-08 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 8beea22f363c9..183059e2b9c44 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-02-07 +date: 2024-02-08 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 0c9fe7d2c3f1c..65d79f76f326b 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-02-07 +date: 2024-02-08 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 3607a652afbc4..f14305177173d 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-02-07 +date: 2024-02-08 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 eb3bea3079a57..68fbe4722aa42 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-02-07 +date: 2024-02-08 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 c7ed781fafece..de475e9439f19 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-02-07 +date: 2024-02-08 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 fbb9d03805dc6..aa25bdb614f52 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-02-07 +date: 2024-02-08 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 93bf10eaa2ea8..c40f4014e7dee 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-02-07 +date: 2024-02-08 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 d566c128b6962..dce50c7b8d4b4 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-02-07 +date: 2024-02-08 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 a6427417916f3..a4994bb77f7cf 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-02-07 +date: 2024-02-08 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 b8ad18194e5dd..773b22d72fcd4 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-02-07 +date: 2024-02-08 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 5263ad7d7c4d4..2fc858e27c4e1 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-02-07 +date: 2024-02-08 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 f2e104f8c13ff..02bff0d8eb5ba 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-02-07 +date: 2024-02-08 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 88c731a141f5d..37b5fc25c742d 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-02-07 +date: 2024-02-08 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 4e1d813cdd848..8b50f4429447b 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-02-07 +date: 2024-02-08 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 7d5928c49700c..34f73f83f0084 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-02-07 +date: 2024-02-08 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 1c53b5d415799..7e1df39b46b9e 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-02-07 +date: 2024-02-08 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 3323d8bd2395e..1cef382393e48 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-02-07 +date: 2024-02-08 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 66b77f3667e5b..c2f86bc71c50a 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-02-07 +date: 2024-02-08 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 d8043104507f9..849a6191f315c 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-02-07 +date: 2024-02-08 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 0d1c875736b9e..a2414bf2257d1 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-02-07 +date: 2024-02-08 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 633b52e220daf..a9556624a28db 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-02-07 +date: 2024-02-08 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 f2453ed77fac7..e819f6d63ee60 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-02-07 +date: 2024-02-08 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 ea082bd4f468c..72d3e66799c0e 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-02-07 +date: 2024-02-08 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 2e5d73970fad8..dde0423a7b1f0 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-02-07 +date: 2024-02-08 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 d3075162b50f8..fb21471738800 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-02-07 +date: 2024-02-08 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 5c0a58f6b910c..8f585e5ef712f 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-02-07 +date: 2024-02-08 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 be0edf30eb7d9..fdc82f9342200 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-02-07 +date: 2024-02-08 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 61823b55025d2..1de73758515db 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-02-07 +date: 2024-02-08 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 7737c3dfcdc86..d4a1266600e85 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-02-07 +date: 2024-02-08 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 550d257671bf0..75ddbd88cf648 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-02-07 +date: 2024-02-08 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 b95826689a525..cce430fed1399 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-02-07 +date: 2024-02-08 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 3f5db434d2fdc..72f69ff5d1f65 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-02-07 +date: 2024-02-08 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 e19262fe28b08..471aff347ea74 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-02-07 +date: 2024-02-08 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 90818591895ad..512129b09266e 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-02-07 +date: 2024-02-08 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_status_common.mdx b/api_docs/kbn_core_status_common.mdx index c33731667715a..5b8d798c407d0 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-02-07 +date: 2024-02-08 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 0f7ee0de49fc1..cce9d26f94913 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-02-07 +date: 2024-02-08 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 e7e419b29859d..7fd60d80240de 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-02-07 +date: 2024-02-08 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 8fdeb27e63cfc..463681e928ae6 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-02-07 +date: 2024-02-08 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 57d27b65f4fb6..dce6072b82290 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-02-07 +date: 2024-02-08 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 2f98bdd5ba8de..99627f59d3149 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-02-07 +date: 2024-02-08 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 41fc0ff7ffbf4..346820e660d43 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-02-07 +date: 2024-02-08 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 ff8569e7830bd..552509037b92f 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-02-07 +date: 2024-02-08 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 013ec2fe582f5..8adfff27843f4 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-02-07 +date: 2024-02-08 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 84474e2d8a5ae..3c59ed1ca2557 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-02-07 +date: 2024-02-08 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 a2454558d8774..a97bf61389c41 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-02-07 +date: 2024-02-08 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 f27753fd06fe2..47bd2019d6f23 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-02-07 +date: 2024-02-08 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 a4fc9aae34f53..546aa1e3ad155 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-02-07 +date: 2024-02-08 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 3602bf5858460..445a4607c33b7 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-02-07 +date: 2024-02-08 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 54aa3ab2c1eb4..bdc5bac248b26 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-02-07 +date: 2024-02-08 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 82fcc597ecee1..065d2b61009fd 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-02-07 +date: 2024-02-08 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 3697a60de41ca..fa9458171836b 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-02-07 +date: 2024-02-08 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 2087c10bd0b60..2424aa3084e03 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-02-07 +date: 2024-02-08 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 fa0d22c41b7ea..5519d8549a24d 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-02-07 +date: 2024-02-08 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 f863f1bd1bc91..0b9921e8b4b8e 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-02-07 +date: 2024-02-08 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 b34cbe38e1448..d49d7904218a5 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-02-07 +date: 2024-02-08 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 783abef87e491..0326c774328d4 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-02-07 +date: 2024-02-08 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 084adca5b3874..e740880bd1efa 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-02-07 +date: 2024-02-08 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_settings_server.mdx b/api_docs/kbn_core_user_settings_server.mdx index 778faf430744d..b5b1ce3403713 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-02-07 +date: 2024-02-08 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_internal.mdx b/api_docs/kbn_core_user_settings_server_internal.mdx index a5baffb865448..32551520e4e30 100644 --- a/api_docs/kbn_core_user_settings_server_internal.mdx +++ b/api_docs/kbn_core_user_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-internal title: "@kbn/core-user-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server-internal plugin -date: 2024-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server-internal'] --- import kbnCoreUserSettingsServerInternalObj from './kbn_core_user_settings_server_internal.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 5e971a65909aa..9c9d4ff2d66c9 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-02-07 +date: 2024-02-08 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 1e5c50e4a495f..52f35791bc0d8 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-02-07 +date: 2024-02-08 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 057726904409d..2b1aca5dd33a1 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-02-07 +date: 2024-02-08 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 2e0fce4a28662..d68ec3c8684c4 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-02-07 +date: 2024-02-08 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 7b8c477df7fb1..c434cfaa99173 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-02-07 +date: 2024-02-08 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 2589f904480fc..44523ffdea60f 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-02-07 +date: 2024-02-08 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 0bebaa9bbafd7..f0f5bcc9a6ab8 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-02-07 +date: 2024-02-08 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 36519191727ac..7bcd2e0327054 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-02-07 +date: 2024-02-08 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 f52ee34042612..a34fb29fe90da 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-02-07 +date: 2024-02-08 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.devdocs.json b/api_docs/kbn_data_view_utils.devdocs.json new file mode 100644 index 0000000000000..0bacfe7a0aa46 --- /dev/null +++ b/api_docs/kbn_data_view_utils.devdocs.json @@ -0,0 +1,45 @@ +{ + "id": "@kbn/data-view-utils", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "common": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [ + { + "parentPluginId": "@kbn/data-view-utils", + "id": "def-common.ESQL_TYPE", + "type": "string", + "tags": [], + "label": "ESQL_TYPE", + "description": [ + "\nESQL type constant" + ], + "signature": [ + "\"esql\"" + ], + "path": "packages/kbn-data-view-utils/src/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/kbn_data_view_utils.mdx b/api_docs/kbn_data_view_utils.mdx new file mode 100644 index 0000000000000..28e39104f298c --- /dev/null +++ b/api_docs/kbn_data_view_utils.mdx @@ -0,0 +1,30 @@ +--- +#### +#### This document is auto-generated and is meant to be viewed inside our experimental, new docs system. +#### Reach out in #docs-engineering for more info. +#### +id: kibKbnDataViewUtilsPluginApi +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-02-08 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-view-utils'] +--- +import kbnDataViewUtilsObj from './kbn_data_view_utils.devdocs.json'; + + + +Contact [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 1 | 0 | 0 | 0 | + +## Common + +### Consts, variables and types + + diff --git a/api_docs/kbn_datemath.mdx b/api_docs/kbn_datemath.mdx index 3cd087353772c..6ff71cdf16d4a 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-02-07 +date: 2024-02-08 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 1c18b0f38da18..00cc1d8fbbb53 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-02-07 +date: 2024-02-08 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 e06313d5e26b1..325a4b8832556 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-devtools'] --- import kbnDeeplinksDevtoolsObj from './kbn_deeplinks_devtools.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_management.mdx b/api_docs/kbn_deeplinks_management.mdx index 0110986c4236b..b9ac7bcaf6310 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-02-07 +date: 2024-02-08 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 72559ebe19e04..5ff4c557a9c95 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-02-07 +date: 2024-02-08 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 0a2ae4ff3d01f..679ebd3a0add7 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-02-07 +date: 2024-02-08 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 322e7f952dee2..ad3405da94a4b 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-search'] --- import kbnDeeplinksSearchObj from './kbn_deeplinks_search.devdocs.json'; diff --git a/api_docs/kbn_default_nav_analytics.mdx b/api_docs/kbn_default_nav_analytics.mdx index ec04c8d3098d2..4e1e2c5a71ea0 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-02-07 +date: 2024-02-08 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 242fb6d69d83d..e41a566fe8330 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-02-07 +date: 2024-02-08 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 9ec2da49f04a3..81289dd94896f 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-02-07 +date: 2024-02-08 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 d2ceda766c057..e6780c0a641ee 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-02-07 +date: 2024-02-08 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 68353954d9e68..52f072784425e 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-02-07 +date: 2024-02-08 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 9c17d43669d82..e0ca875007e2d 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-02-07 +date: 2024-02-08 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 380b09055b986..6ee34d508a935 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-02-07 +date: 2024-02-08 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 719e14e2f62fa..e2300f64cec1f 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-02-07 +date: 2024-02-08 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 39d3a3891f4a3..a294b1b364648 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-02-07 +date: 2024-02-08 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 dcfc6e4a6a4a5..6c0133256e1a6 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-02-07 +date: 2024-02-08 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 49bc90f53ca0f..5563163397c3f 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-02-07 +date: 2024-02-08 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 a019b3bb74be3..e561046d0a619 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dom-drag-drop'] --- import kbnDomDragDropObj from './kbn_dom_drag_drop.devdocs.json'; diff --git a/api_docs/kbn_ebt_tools.mdx b/api_docs/kbn_ebt_tools.mdx index 6282aa3edfae7..6a4d8f5d5c467 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ebt-tools'] --- import kbnEbtToolsObj from './kbn_ebt_tools.devdocs.json'; diff --git a/api_docs/kbn_ecs.mdx b/api_docs/kbn_ecs.mdx index 25e32dfe402b6..e55daa4491bd5 100644 --- a/api_docs/kbn_ecs.mdx +++ b/api_docs/kbn_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs title: "@kbn/ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs plugin -date: 2024-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs'] --- import kbnEcsObj from './kbn_ecs.devdocs.json'; diff --git a/api_docs/kbn_ecs_data_quality_dashboard.mdx b/api_docs/kbn_ecs_data_quality_dashboard.mdx index 41867eca525cb..0dbf96f3bb33a 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-02-07 +date: 2024-02-08 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 adfdd843f70ef..1938fa33966bf 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-agent-utils'] --- import kbnElasticAgentUtilsObj from './kbn_elastic_agent_utils.devdocs.json'; diff --git a/api_docs/kbn_elastic_assistant.mdx b/api_docs/kbn_elastic_assistant.mdx index ae338e411547c..51f32807cd412 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant'] --- import kbnElasticAssistantObj from './kbn_elastic_assistant.devdocs.json'; diff --git a/api_docs/kbn_elastic_assistant_common.mdx b/api_docs/kbn_elastic_assistant_common.mdx index 20aaa71760329..0042f37af440d 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant-common'] --- import kbnElasticAssistantCommonObj from './kbn_elastic_assistant_common.devdocs.json'; diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx index 8b252d558d159..6d5ec7bcc31ea 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-02-07 +date: 2024-02-08 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 efa1967e1ac98..0c03444a4d58d 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-02-07 +date: 2024-02-08 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 a25b94c269753..7fed094aab4ea 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-02-07 +date: 2024-02-08 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 b1d831e76150b..53a9a212ec39f 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-02-07 +date: 2024-02-08 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 48b0328864cff..43511f9acdd78 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-02-07 +date: 2024-02-08 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 b7e8a2218fdb7..63f4eb4749b36 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-02-07 +date: 2024-02-08 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_utils.mdx b/api_docs/kbn_esql_utils.mdx index 2a064b15d03b1..9c9bdd7bb241b 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-utils'] --- import kbnEsqlUtilsObj from './kbn_esql_utils.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_common.mdx b/api_docs/kbn_event_annotation_common.mdx index 72293fae53ab6..d7d786256db97 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-02-07 +date: 2024-02-08 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 6497854ede2bb..fda3348004c8d 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-02-07 +date: 2024-02-08 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 289cdd0a644da..4363ed3e4e425 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-02-07 +date: 2024-02-08 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 735ece03762c2..0218d7f7eaded 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-02-07 +date: 2024-02-08 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 8b6cc0a5b1f78..b3bfd9889784f 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-02-07 +date: 2024-02-08 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 2fea6be43d4c8..57f1805355cf4 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-02-07 +date: 2024-02-08 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_ftr_common_functional_services.mdx b/api_docs/kbn_ftr_common_functional_services.mdx index 3f128871c2abc..68f5fc6d85cc9 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-02-07 +date: 2024-02-08 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 160dcb36b94d2..eab2893cc20ce 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-02-07 +date: 2024-02-08 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 34509d60e8ec1..d51ef4b1f2f9f 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-02-07 +date: 2024-02-08 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 9913901a3f50a..65a4dd253a177 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-02-07 +date: 2024-02-08 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 eb4420f2bfce6..b5ad08a5e6b67 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv'] --- import kbnGenerateCsvObj from './kbn_generate_csv.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index 573755f508a8d..86cf924d9594a 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-02-07 +date: 2024-02-08 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 a084cd640a599..873becaaa3c6d 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-02-07 +date: 2024-02-08 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 ec6163cbb74fd..a58b35e04ece3 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-02-07 +date: 2024-02-08 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 cafa671eba423..0e97adc32653c 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-02-07 +date: 2024-02-08 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 93a390b1aaacc..065be3e64ed6f 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-02-07 +date: 2024-02-08 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 81df1c1ced89a..ccf93e82a0582 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-02-07 +date: 2024-02-08 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 120ce9b731142..5a53175fa1945 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-02-07 +date: 2024-02-08 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 751c1c5a7f700..66fc7bb0560f3 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-02-07 +date: 2024-02-08 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 bf7579288297a..1e39fcce2541b 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] --- import kbnImportResolverObj from './kbn_import_resolver.devdocs.json'; diff --git a/api_docs/kbn_infra_forge.mdx b/api_docs/kbn_infra_forge.mdx index 23fdabc43b592..aab201a3c8563 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-02-07 +date: 2024-02-08 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 8d076669808d0..012bb189e5ff8 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-02-07 +date: 2024-02-08 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 a5c74c37a920f..0f8b980a24240 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/io-ts-utils'] --- import kbnIoTsUtilsObj from './kbn_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx index 9a0baf4aa8c38..132d9f355ee3d 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-02-07 +date: 2024-02-08 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 262147a7a3e1c..3cd69c0fc4342 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-02-07 +date: 2024-02-08 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 0432233458377..3bcf9f12b6e30 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-ast'] --- import kbnJsonAstObj from './kbn_json_ast.devdocs.json'; diff --git a/api_docs/kbn_kibana_manifest_schema.mdx b/api_docs/kbn_kibana_manifest_schema.mdx index 9f12ba2aef382..ed78d6a9512fb 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-02-07 +date: 2024-02-08 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 08c19c2aef814..cb325cbe392e7 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-02-07 +date: 2024-02-08 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 03bb0eb192689..46c888808ca1a 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-02-07 +date: 2024-02-08 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 a9bc9f0fcc49a..6f06e654f12ac 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-02-07 +date: 2024-02-08 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 9dbe6ce120588..905c9ddcffe9e 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-02-07 +date: 2024-02-08 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 ce83ceb399c83..a228ab8dcffa2 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-02-07 +date: 2024-02-08 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 93d8f78ae67cb..0a00ed61adf2c 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-02-07 +date: 2024-02-08 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 958857f7ca63f..376460cea2fa2 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/managed-vscode-config'] --- import kbnManagedVscodeConfigObj from './kbn_managed_vscode_config.devdocs.json'; diff --git a/api_docs/kbn_management_cards_navigation.mdx b/api_docs/kbn_management_cards_navigation.mdx index 79cfc21a67898..59c942dba2995 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-02-07 +date: 2024-02-08 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 3cfca3b87651d..85ea9b96d8256 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-02-07 +date: 2024-02-08 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 332a136ca42bc..ff5d6dea8b50f 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-02-07 +date: 2024-02-08 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 e9f9ded87a480..90fb27b1e2bb9 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-02-07 +date: 2024-02-08 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 ebf02d9f74f45..edb11ca03ab36 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-02-07 +date: 2024-02-08 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 463c2a3a78974..e9faba609ea93 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-02-07 +date: 2024-02-08 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 faf8e0b173dd5..a0dac7eb74904 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-02-07 +date: 2024-02-08 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 c3f9577e72bbb..6dd9c686a2139 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-02-07 +date: 2024-02-08 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 ca62c84ccce54..e10a606cfd471 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-02-07 +date: 2024-02-08 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 0eaf07f4388ca..6b3eda5d4d11e 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-02-07 +date: 2024-02-08 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 b78b135f68c1e..0d06fa62e786f 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-02-07 +date: 2024-02-08 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 b120fd79c6b6e..faa06e322f0c6 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-02-07 +date: 2024-02-08 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 4c2fd9c354c46..9756652261749 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-02-07 +date: 2024-02-08 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 3156a0b5253b6..f07b3f23721e8 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-02-07 +date: 2024-02-08 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 65fa63b4b0fa3..08ac74052b564 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-02-07 +date: 2024-02-08 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 8f3c352f2bdc2..774067d7e36e4 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-02-07 +date: 2024-02-08 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 96fea890ba888..4680fe1735266 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-02-07 +date: 2024-02-08 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 371bb202c9add..0110e170d6d8c 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-02-07 +date: 2024-02-08 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 80c63d0937b1e..36d705f16e8d5 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-02-07 +date: 2024-02-08 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 442f2c67ec3a3..18b082154f11b 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-02-07 +date: 2024-02-08 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 2af285926a1b8..285e171db74c1 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-02-07 +date: 2024-02-08 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 bd2cdbfa3b20c..176825dee4909 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-02-07 +date: 2024-02-08 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 d38c3ca14864e..96654663d2dea 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-02-07 +date: 2024-02-08 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 aa4eccea26339..d510a01909ee2 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-02-07 +date: 2024-02-08 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 9a43b5dd01fdb..d8f360f77f5ed 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-02-07 +date: 2024-02-08 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 cc059d71e8c43..c84ce256821d1 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-02-07 +date: 2024-02-08 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 5ce23fd69cc05..5d6af66f4ba23 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-02-07 +date: 2024-02-08 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 6ede7c8561489..7da63204ac6ad 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-02-07 +date: 2024-02-08 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 8bfbfb5ac2ae2..a3bd012059125 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-02-07 +date: 2024-02-08 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 f7d711f7a4a72..391277b2a3e8e 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-02-07 +date: 2024-02-08 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 be07b8ea90149..c4fdf69dcbd0d 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-02-07 +date: 2024-02-08 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 9a40e0d51ef56..182b27b80693a 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-02-07 +date: 2024-02-08 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 11d18ded956dc..ebb6a2c6a8288 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-02-07 +date: 2024-02-08 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 273ba65c6eb28..817979a11aa55 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-02-07 +date: 2024-02-08 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 9fd0dcbb0d144..2ae01ab9f2ee5 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-02-07 +date: 2024-02-08 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 5d2919ca314a6..351b2223df9a1 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-02-07 +date: 2024-02-08 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_trained_models_utils.mdx b/api_docs/kbn_ml_trained_models_utils.mdx index 47fb2ddfcd116..071b1e8d92816 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-02-07 +date: 2024-02-08 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 d82e91afb17b9..f981f2a24364e 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-02-07 +date: 2024-02-08 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 7b6df5cca7723..b46b1794d4dc6 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-02-07 +date: 2024-02-08 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 03d0154309965..05675bd96a17d 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-02-07 +date: 2024-02-08 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 811e3a48e3bfb..b5dcc8f0fedbb 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-02-07 +date: 2024-02-08 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 bd7fc4c86ab04..c80254b71493d 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-02-07 +date: 2024-02-08 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 5ee6ac304825a..47543a13fa62d 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-02-07 +date: 2024-02-08 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 04a28191684b5..0d33b61044a5a 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-02-07 +date: 2024-02-08 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 8231ab4d5566e..330ea9dfda1d7 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-02-07 +date: 2024-02-08 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 b0bf138817dc0..03c0bcf965fec 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-02-07 +date: 2024-02-08 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 14b1f907daa3c..64095a40985f4 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-02-07 +date: 2024-02-08 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 981ee63b9fe7d..7567697ecd729 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-02-07 +date: 2024-02-08 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 71150e3489582..49238d50aae42 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-02-07 +date: 2024-02-08 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 ecb0af21bf21b..94df5b5c4ffb5 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-02-07 +date: 2024-02-08 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 84be618cee3f5..2acfa54ff357f 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-02-07 +date: 2024-02-08 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 a34bab2f85fc8..94248a84fd64d 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-02-07 +date: 2024-02-08 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 c712168992dcd..8fa09593837ee 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-02-07 +date: 2024-02-08 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 9c66e48a438a5..a3f2320baff97 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-02-07 +date: 2024-02-08 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 39dbef24ba4d8..3bcf0ddf1337d 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-helpers'] --- import kbnPluginHelpersObj from './kbn_plugin_helpers.devdocs.json'; diff --git a/api_docs/kbn_presentation_containers.devdocs.json b/api_docs/kbn_presentation_containers.devdocs.json index 333d1d5297a04..ddae3f2b0761a 100644 --- a/api_docs/kbn_presentation_containers.devdocs.json +++ b/api_docs/kbn_presentation_containers.devdocs.json @@ -681,12 +681,12 @@ { "parentPluginId": "@kbn/presentation-containers", "id": "def-common.PanelPackage.initialState", - "type": "Unknown", + "type": "Uncategorized", "tags": [], "label": "initialState", "description": [], "signature": [ - "unknown" + "object | undefined" ], "path": "packages/presentation/presentation_containers/interfaces/presentation_container.ts", "deprecated": false, @@ -957,7 +957,15 @@ "section": "def-common.PublishesLastSavedState", "text": "PublishesLastSavedState" }, - " & { registerPanelApi: (panelId: string, panelApi: ApiType) => void; removePanel: (panelId: string) => void; canRemovePanels?: (() => boolean) | undefined; replacePanel: (idToRemove: string, newPanel: ", + " & { addNewPanel: (panel: ", + { + "pluginId": "@kbn/presentation-containers", + "scope": "common", + "docId": "kibKbnPresentationContainersPluginApi", + "section": "def-common.PanelPackage", + "text": "PanelPackage" + }, + ", displaySuccessMessage?: boolean | undefined) => Promise; registerPanelApi: (panelId: string, panelApi: ApiType) => void; removePanel: (panelId: string) => void; canRemovePanels?: (() => boolean) | undefined; replacePanel: (idToRemove: string, newPanel: ", { "pluginId": "@kbn/presentation-containers", "scope": "common", diff --git a/api_docs/kbn_presentation_containers.mdx b/api_docs/kbn_presentation_containers.mdx index a44d44c1edeaa..3bd18d6afa2c9 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-containers'] --- import kbnPresentationContainersObj from './kbn_presentation_containers.devdocs.json'; diff --git a/api_docs/kbn_presentation_library.mdx b/api_docs/kbn_presentation_library.mdx index c151a8d335661..6c622d763a4e7 100644 --- a/api_docs/kbn_presentation_library.mdx +++ b/api_docs/kbn_presentation_library.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-presentation-library title: "@kbn/presentation-library" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/presentation-library plugin -date: 2024-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-library'] --- import kbnPresentationLibraryObj from './kbn_presentation_library.devdocs.json'; diff --git a/api_docs/kbn_presentation_publishing.devdocs.json b/api_docs/kbn_presentation_publishing.devdocs.json index c6f31a7062c72..26234c10076d9 100644 --- a/api_docs/kbn_presentation_publishing.devdocs.json +++ b/api_docs/kbn_presentation_publishing.devdocs.json @@ -2120,7 +2120,9 @@ "type": "Unknown", "tags": [], "label": "embeddable", - "description": [], + "description": [ + "\nTODO: once all actions are entirely decoupled from the embeddable system, this key should be renamed to \"api\"\nto reflect the fact that this context could contain any api." + ], "signature": [ "unknown" ], diff --git a/api_docs/kbn_presentation_publishing.mdx b/api_docs/kbn_presentation_publishing.mdx index 1a149f1ea300c..7e7196d62bf2d 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-publishing'] --- import kbnPresentationPublishingObj from './kbn_presentation_publishing.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kib | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 150 | 0 | 115 | 3 | +| 150 | 0 | 114 | 3 | ## Common diff --git a/api_docs/kbn_profiling_utils.mdx b/api_docs/kbn_profiling_utils.mdx index b8b1337aa4e64..34f387cf84709 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-02-07 +date: 2024-02-08 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 0501b7bf93dca..3f57ed02c9933 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-02-07 +date: 2024-02-08 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 c1caca7f748dd..3f790740f0cd1 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field'] --- import kbnReactFieldObj from './kbn_react_field.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_common.mdx b/api_docs/kbn_react_kibana_context_common.mdx index 69a9dae1a196b..486ef63511d1a 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-02-07 +date: 2024-02-08 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 740aa50508175..fdf93464c5e05 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-02-07 +date: 2024-02-08 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 5a735e4cf3de0..57ae6ed612015 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-02-07 +date: 2024-02-08 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 266795961f42c..1d1c69c0d89d2 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-02-07 +date: 2024-02-08 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 52e6c4cfd2c67..280bff6ef8090 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-02-07 +date: 2024-02-08 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 75c8572a39049..49bf6c3a2c3ac 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-02-07 +date: 2024-02-08 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 7a05363a52145..f0eaa388ddb2f 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-02-07 +date: 2024-02-08 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 1e894cf273c46..bd7cccacd1727 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-02-07 +date: 2024-02-08 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 bc95c05cf2a13..e9377fcac668f 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-02-07 +date: 2024-02-08 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 6261995e2152c..bd87e83a30dfa 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-02-07 +date: 2024-02-08 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 ffc494375b77a..762b1fecab40a 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-common'] --- import kbnReportingCommonObj from './kbn_reporting_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_csv.mdx b/api_docs/kbn_reporting_export_types_csv.mdx index 0925fa8008050..91959d82f64b0 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-02-07 +date: 2024-02-08 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 e9bf662be5cb9..c1962febea500 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-02-07 +date: 2024-02-08 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 0508c69fc9ff1..376668862c72e 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-02-07 +date: 2024-02-08 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 dd9a403c7bd88..67e0f71c7c96d 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-02-07 +date: 2024-02-08 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 00413562e36a2..9b14ad11f446f 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-02-07 +date: 2024-02-08 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 3703793a166bc..391dde6c3a857 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-02-07 +date: 2024-02-08 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 8920bec39bf6a..4832a30ad3cd2 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-02-07 +date: 2024-02-08 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 ad51a406bd919..ff59b8aca02ee 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-02-07 +date: 2024-02-08 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 916ad049b16d6..54d69eb52ce60 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-02-07 +date: 2024-02-08 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 437df4dce017d..e73a8f6a7a9c1 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/resizable-layout'] --- import kbnResizableLayoutObj from './kbn_resizable_layout.devdocs.json'; diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx index 5b05a13a7ee9c..fdb2f18b13f33 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_router_utils.mdx b/api_docs/kbn_router_utils.mdx index 1cef1db778563..b0ef1a9daa8a8 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-02-07 +date: 2024-02-08 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 9b4d6f908ac84..6912366076fa1 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-02-07 +date: 2024-02-08 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 27a4f1fb5ddfa..8ef629c666c19 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-02-07 +date: 2024-02-08 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 fe319b552d26e..04e814aafa245 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-02-07 +date: 2024-02-08 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 980026cb46f0e..9f1324396706f 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-02-07 +date: 2024-02-08 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 e0e95a1b88c2e..c10a612df9100 100644 --- a/api_docs/kbn_search_connectors.devdocs.json +++ b/api_docs/kbn_search_connectors.devdocs.json @@ -2171,7 +2171,7 @@ "text": "ElasticsearchClient" }, ", connectorId: string, serviceType: string) => Promise<", - "WriteResponseBase", + "Result", ">" ], "path": "packages/kbn-search-connectors/lib/update_connector_service_type.ts", diff --git a/api_docs/kbn_search_connectors.mdx b/api_docs/kbn_search_connectors.mdx index 5b48e6afa90ad..24aedb4a3b174 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-02-07 +date: 2024-02-08 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 7eaa6b747aa51..40f59bcfabf5d 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-02-07 +date: 2024-02-08 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 81dd1e0727bf8..1990cfdeb5163 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-02-07 +date: 2024-02-08 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 d1a8b19013b13..d1025cbf86dfd 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-response-warnings'] --- import kbnSearchResponseWarningsObj from './kbn_search_response_warnings.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_common.mdx b/api_docs/kbn_security_plugin_types_common.mdx index 26578a20ada2a..8bbb0930a8218 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-02-07 +date: 2024-02-08 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.mdx b/api_docs/kbn_security_plugin_types_public.mdx index 4cb43c5300c8a..118471660e70d 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-02-07 +date: 2024-02-08 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.mdx b/api_docs/kbn_security_plugin_types_server.mdx index 4a16025702cda..e61141b0b426d 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-02-07 +date: 2024-02-08 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 2114c9b358355..54e7340cc6579 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-02-07 +date: 2024-02-08 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 dccd3e8b2bc2f..6dbbe7716d967 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-02-07 +date: 2024-02-08 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 d5ab11ffa55e2..57f3d6f24ee87 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-02-07 +date: 2024-02-08 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 2e00413d1d20b..2d83c4bb266e9 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-02-07 +date: 2024-02-08 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 c5ed87981cbe5..35b773bd297f0 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-02-07 +date: 2024-02-08 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 053e4097ff49b..f683ceae72346 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-02-07 +date: 2024-02-08 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 42d769bea843e..cc3531d6cf540 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-02-07 +date: 2024-02-08 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 fe8b7c70ee53b..66e2708e164f5 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-02-07 +date: 2024-02-08 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 947265540f56c..d6cd59f427a39 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-02-07 +date: 2024-02-08 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_grouping.mdx b/api_docs/kbn_securitysolution_grouping.mdx index 9ec6d33ef6026..0af21b9b73ea4 100644 --- a/api_docs/kbn_securitysolution_grouping.mdx +++ b/api_docs/kbn_securitysolution_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-grouping title: "@kbn/securitysolution-grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-grouping plugin -date: 2024-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-grouping'] --- import kbnSecuritysolutionGroupingObj from './kbn_securitysolution_grouping.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx index 90c6011c58e2f..3ee2cecf5d408 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-02-07 +date: 2024-02-08 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 a20b15ca253a0..e991bd2333ada 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-02-07 +date: 2024-02-08 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 76787f54b5f51..e58c5f649e3aa 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-02-07 +date: 2024-02-08 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 7de1ceeb67481..571cdd7653e65 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-02-07 +date: 2024-02-08 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 fb562facd22b3..1568546f020a7 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-02-07 +date: 2024-02-08 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 3fc3a0250b1ef..94d99d3f48855 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-02-07 +date: 2024-02-08 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 1ad56da232f84..9b91fd6f84972 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-02-07 +date: 2024-02-08 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 35a6c48669d6e..568ae81bcf156 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-02-07 +date: 2024-02-08 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 154eb52d04636..bca66ee2fd246 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-02-07 +date: 2024-02-08 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 bf953c9cac540..4752383b3776e 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-02-07 +date: 2024-02-08 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 b45c9209aa460..f9901c6a12902 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-02-07 +date: 2024-02-08 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 cd737dcbce579..5eae52bb780a9 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-02-07 +date: 2024-02-08 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 e7a8d5fda8264..e8c3056a52793 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-02-07 +date: 2024-02-08 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 9d1746430fd3f..bee9f0812f016 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-02-07 +date: 2024-02-08 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 a2ea62bf8d8fa..cdbfd3d68e37b 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-02-07 +date: 2024-02-08 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 fd5b569a35d7a..2c96dd4d9b872 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-02-07 +date: 2024-02-08 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 e45f587b33064..75bd2722d6ab9 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-02-07 +date: 2024-02-08 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 7f941b99fd3cf..6b9fbf1de092d 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-02-07 +date: 2024-02-08 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 d8ed16116d305..d929e1e89989f 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-02-07 +date: 2024-02-08 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 2cd19490dc417..48df79ee00ea0 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-02-07 +date: 2024-02-08 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 a8621f5cfb8f7..f5d6ddd4b25f2 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-02-07 +date: 2024-02-08 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 84595af506bcc..53a2ac8605a49 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-02-07 +date: 2024-02-08 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 fc44947498518..20b99674a4571 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-02-07 +date: 2024-02-08 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 bbd7421273718..d2db7457735cc 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-02-07 +date: 2024-02-08 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 aaf383f2235d1..bbe9827527c08 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-02-07 +date: 2024-02-08 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 a2eea7464b583..ca2d51f33d433 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-02-07 +date: 2024-02-08 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 2b5147e127d02..72984a79628c9 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-02-07 +date: 2024-02-08 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 bf9ba0a0a3664..7306bfa692ba3 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-02-07 +date: 2024-02-08 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 f3945a4f9a574..e058d1c8b8290 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-02-07 +date: 2024-02-08 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 dfc1c7ce08e5b..992eb3e689b5d 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-02-07 +date: 2024-02-08 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 5409cc9b1feae..4e6ad6347430c 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-02-07 +date: 2024-02-08 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 89023f1950880..63a08508889d2 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-02-07 +date: 2024-02-08 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 7017e8b730be7..1795b1df6a204 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-02-07 +date: 2024-02-08 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 a0a1c1c5401e4..29af4c9c2e6a9 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-02-07 +date: 2024-02-08 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 389eac8a318c8..615fe97f99855 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-02-07 +date: 2024-02-08 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 2de007264f074..98bf551cc063e 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-02-07 +date: 2024-02-08 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 e2c7899816306..4672e3cadc3f3 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-02-07 +date: 2024-02-08 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 9614c2d9ec727..f224d4bbdbf58 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-02-07 +date: 2024-02-08 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 d429245466b1b..db23219fc66e7 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-02-07 +date: 2024-02-08 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 23cf080050d2c..8414d3ea81a5a 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-02-07 +date: 2024-02-08 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 5754df2b1c929..08600d4bc6105 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-02-07 +date: 2024-02-08 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 037c5534676af..72b4ed2b8bb39 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-02-07 +date: 2024-02-08 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 65c22c57b12c8..59cff789af06f 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-02-07 +date: 2024-02-08 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 7cff5aa8ac6c2..381ff98989c67 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-02-07 +date: 2024-02-08 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 2f92c76ede634..7f2c7e99f60da 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-02-07 +date: 2024-02-08 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 c03aa44c12731..d7ec3d8a1248c 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-02-07 +date: 2024-02-08 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 44b448913fc0c..f28cbb449f751 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-02-07 +date: 2024-02-08 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 ca2aa34d8d303..80319b95ccc12 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-02-07 +date: 2024-02-08 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 7b49d2bfa155e..c46e95f44d545 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-02-07 +date: 2024-02-08 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 0c964dc868dfa..1c8091f51f630 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-02-07 +date: 2024-02-08 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 3b98470178406..e9076403f55a5 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-02-07 +date: 2024-02-08 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 294dff1106e56..360b21120b24b 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-02-07 +date: 2024-02-08 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 ff2135568798d..8a3f7a4b769c4 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-02-07 +date: 2024-02-08 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 abedb63711b05..fccba7369485f 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-02-07 +date: 2024-02-08 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 9cd99643b0ad3..82de16bce0f07 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-02-07 +date: 2024-02-08 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 54a3934ef59d3..2d669881993a9 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-02-07 +date: 2024-02-08 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 72f3abd64678e..460a6f08b0aa0 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-02-07 +date: 2024-02-08 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 64487e494b695..a9a0565ebd1b5 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-02-07 +date: 2024-02-08 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_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx index 58db85c5e810e..137443224d0f9 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-02-07 +date: 2024-02-08 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 0fffc0c9814c6..5df4a1b683e46 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-02-07 +date: 2024-02-08 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 18d8ef1266998..2d26ddb0e327a 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-02-07 +date: 2024-02-08 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 ebd8ff3489b11..d53154842565a 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-02-07 +date: 2024-02-08 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 bfd29dc3cd15c..23b583fd3f147 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-02-07 +date: 2024-02-08 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 9e64640e19288..4b315de93040b 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-02-07 +date: 2024-02-08 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 1e4a273d61800..81cda58b60340 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-02-07 +date: 2024-02-08 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 5145a4afe06ca..e2a14e589aad0 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-02-07 +date: 2024-02-08 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 f5cd10097d9a1..75c1741fe9c68 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-02-07 +date: 2024-02-08 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 04687f3194fb1..3dbba0f9da53a 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-02-07 +date: 2024-02-08 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 53df9442b2958..644acddd8a2c7 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-02-07 +date: 2024-02-08 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 450a98bdd3cf2..e106e07806f97 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-02-07 +date: 2024-02-08 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 7128842bcddc3..b0fb3bb352a99 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/text-based-editor'] --- import kbnTextBasedEditorObj from './kbn_text_based_editor.devdocs.json'; diff --git a/api_docs/kbn_tooling_log.mdx b/api_docs/kbn_tooling_log.mdx index cd004a4ffae0e..622af471c1655 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-02-07 +date: 2024-02-08 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 e6650effde67f..fe430c80f73d0 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-02-07 +date: 2024-02-08 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_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx index e495faad72c9f..53416cc864850 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-02-07 +date: 2024-02-08 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 e81492896807a..621a40aae4f3e 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-02-07 +date: 2024-02-08 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 a233dedd0ea33..124335ac7e4ff 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-02-07 +date: 2024-02-08 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 1cdea5c282b87..315b924ee1a62 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-02-07 +date: 2024-02-08 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 5cec48c951d73..a79dace22912d 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-02-07 +date: 2024-02-08 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 65d7a7dffcffb..b2ca4078f000e 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-02-07 +date: 2024-02-08 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 af6d742fbbb6d..97aca7830d5fd 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-02-07 +date: 2024-02-08 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 29cf70e2bcb56..f391ea773eff5 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-02-07 +date: 2024-02-08 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 fc3bbc2c287d0..3abbb2ea45377 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-badge'] --- import kbnUnsavedChangesBadgeObj from './kbn_unsaved_changes_badge.devdocs.json'; diff --git a/api_docs/kbn_use_tracked_promise.mdx b/api_docs/kbn_use_tracked_promise.mdx index 2437fad6cddae..8ebfbe2031e54 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-02-07 +date: 2024-02-08 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 9b3f4b02f8afb..782d00d6fe62a 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-02-07 +date: 2024-02-08 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 fb19a2483463e..97ce29df9137f 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-02-07 +date: 2024-02-08 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 b88380e4f7779..90c8a0db6d324 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-02-07 +date: 2024-02-08 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 8b23ecd6fb0ba..be4a8165a1c63 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-02-07 +date: 2024-02-08 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 ee10e9585752b..eceeab039ad9e 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-02-07 +date: 2024-02-08 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 0b925c4d868ca..5e69d60e1e6e8 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-02-07 +date: 2024-02-08 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 e12fe7d8b0db4..6726f8c356c04 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-02-07 +date: 2024-02-08 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 eaaa54243e242..918b50bdfd850 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-02-07 +date: 2024-02-08 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 bae132683b884..9a13d897879e9 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-02-07 +date: 2024-02-08 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 eb1820b3150f3..b10842d919fd0 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-02-07 +date: 2024-02-08 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 ad7821e034e2a..fa15a93b184f3 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-02-07 +date: 2024-02-08 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 f4535a9e9d3fa..748135aea0663 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-02-07 +date: 2024-02-08 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 fd26049c8d620..70eafb707a20d 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-02-07 +date: 2024-02-08 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 b0464814b07d1..44ad4585cc74e 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-02-07 +date: 2024-02-08 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 58d2d9c9771b7..d89fdf7c99069 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-02-07 +date: 2024-02-08 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 0f1e4bf4e4cde..ed5b3c8507658 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-02-07 +date: 2024-02-08 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 ad5bad5f28d94..dd236acd18f20 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-02-07 +date: 2024-02-08 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 3d3f3edd5debd..b7300edc6bdbb 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'links'] --- import linksObj from './links.devdocs.json'; diff --git a/api_docs/lists.devdocs.json b/api_docs/lists.devdocs.json index 1dce5bcba81d2..f73f8677d149f 100644 --- a/api_docs/lists.devdocs.json +++ b/api_docs/lists.devdocs.json @@ -2800,6 +2800,42 @@ ], "returnComment": [] }, + { + "parentPluginId": "lists", + "id": "def-server.ListClient.getImportFilename", + "type": "Function", + "tags": [], + "label": "getImportFilename", + "description": [ + "\nGets the filename of the imported file" + ], + "signature": [ + "({ stream }: ", + "GetImportFilename", + ") => Promise" + ], + "path": "x-pack/plugins/lists/server/services/lists/list_client.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "lists", + "id": "def-server.ListClient.getImportFilename.$1", + "type": "Object", + "tags": [], + "label": "{ stream }", + "description": [], + "signature": [ + "GetImportFilename" + ], + "path": "x-pack/plugins/lists/server/services/lists/list_client.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, { "parentPluginId": "lists", "id": "def-server.ListClient.importListItemsToStream", diff --git a/api_docs/lists.mdx b/api_docs/lists.mdx index 5af85f966824c..95cd4b04df419 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/security-detection-engine](https://github.com/orgs/elastic/tea | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 224 | 0 | 96 | 51 | +| 226 | 0 | 97 | 52 | ## Client diff --git a/api_docs/logs_explorer.mdx b/api_docs/logs_explorer.mdx index 09de1f2649d93..385bc61ba95ec 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-02-07 +date: 2024-02-08 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 2679d57071b61..d2f8d50cc8f01 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-02-07 +date: 2024-02-08 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 f0162cca4a28f..fba676f19aecd 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-02-07 +date: 2024-02-08 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 a167d3a2f1c43..b08020847ad0f 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-02-07 +date: 2024-02-08 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 09130b89cd557..c31e0e69c8098 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-02-07 +date: 2024-02-08 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 4f41218ac4548..625ffebb489f3 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-02-07 +date: 2024-02-08 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 4e67147a05497..7e9e89ae9fe6c 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-02-07 +date: 2024-02-08 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 cc67220cd5dea..7926d1a9b9d7c 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-02-07 +date: 2024-02-08 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 10874e9c8b9cc..975e5081aa0c3 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-02-07 +date: 2024-02-08 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 f2a2a8830e3d1..7a6ccb760d179 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-02-07 +date: 2024-02-08 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 a789717fe52c1..f1e78a2a0d848 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-02-07 +date: 2024-02-08 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 5f0e641c2ef98..1ac248f0f8035 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-02-07 +date: 2024-02-08 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 151e94c5fae16..6b7425d854413 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-02-07 +date: 2024-02-08 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 096dac0cf4d67..134a6b479f43e 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-02-07 +date: 2024-02-08 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 04d5141c71f8a..00a2701daf52c 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-02-07 +date: 2024-02-08 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 a4fd4c7d0970d..f28cde02e43cd 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistant'] --- import observabilityAIAssistantObj from './observability_a_i_assistant.devdocs.json'; diff --git a/api_docs/observability_logs_explorer.mdx b/api_docs/observability_logs_explorer.mdx index d71b6d3b1369b..d47958c2a8078 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-02-07 +date: 2024-02-08 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 5a860c5feb077..ccd4ba146fa33 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityOnboarding'] --- import observabilityOnboardingObj from './observability_onboarding.devdocs.json'; diff --git a/api_docs/observability_shared.devdocs.json b/api_docs/observability_shared.devdocs.json index 6f23842fcb285..3d85c4cdca8b7 100644 --- a/api_docs/observability_shared.devdocs.json +++ b/api_docs/observability_shared.devdocs.json @@ -1297,6 +1297,53 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "observabilityShared", + "id": "def-public.TagsList", + "type": "Function", + "tags": [], + "label": "TagsList", + "description": [], + "signature": [ + "(props: ", + { + "pluginId": "observabilityShared", + "scope": "public", + "docId": "kibObservabilitySharedPluginApi", + "section": "def-public.TagsListProps", + "text": "TagsListProps" + }, + ") => JSX.Element" + ], + "path": "x-pack/plugins/observability_shared/public/components/tags_list/tags_list_lazy.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observabilityShared", + "id": "def-public.TagsList.$1", + "type": "Object", + "tags": [], + "label": "props", + "description": [], + "signature": [ + { + "pluginId": "observabilityShared", + "scope": "public", + "docId": "kibObservabilitySharedPluginApi", + "section": "def-public.TagsListProps", + "text": "TagsListProps" + } + ], + "path": "x-pack/plugins/observability_shared/public/components/tags_list/tags_list_lazy.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "observabilityShared", "id": "def-public.TechnicalPreviewBadge", @@ -2797,6 +2844,108 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "observabilityShared", + "id": "def-public.TagsListProps", + "type": "Interface", + "tags": [], + "label": "TagsListProps", + "description": [], + "path": "x-pack/plugins/observability_shared/public/components/tags_list/tags_list.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observabilityShared", + "id": "def-public.TagsListProps.onClick", + "type": "Function", + "tags": [], + "label": "onClick", + "description": [], + "signature": [ + "((tag: string) => void) | undefined" + ], + "path": "x-pack/plugins/observability_shared/public/components/tags_list/tags_list.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observabilityShared", + "id": "def-public.TagsListProps.onClick.$1", + "type": "string", + "tags": [], + "label": "tag", + "description": [], + "signature": [ + "string" + ], + "path": "x-pack/plugins/observability_shared/public/components/tags_list/tags_list.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "observabilityShared", + "id": "def-public.TagsListProps.tags", + "type": "Array", + "tags": [], + "label": "tags", + "description": [], + "signature": [ + "string[] | undefined" + ], + "path": "x-pack/plugins/observability_shared/public/components/tags_list/tags_list.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityShared", + "id": "def-public.TagsListProps.numberOfTagsToDisplay", + "type": "number", + "tags": [], + "label": "numberOfTagsToDisplay", + "description": [], + "signature": [ + "number | undefined" + ], + "path": "x-pack/plugins/observability_shared/public/components/tags_list/tags_list.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityShared", + "id": "def-public.TagsListProps.color", + "type": "string", + "tags": [], + "label": "color", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "x-pack/plugins/observability_shared/public/components/tags_list/tags_list.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityShared", + "id": "def-public.TagsListProps.ignoreEmpty", + "type": "CompoundType", + "tags": [], + "label": "ignoreEmpty", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "x-pack/plugins/observability_shared/public/components/tags_list/tags_list.tsx", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "observabilityShared", "id": "def-public.UXMetrics", diff --git a/api_docs/observability_shared.mdx b/api_docs/observability_shared.mdx index 4bc22a31b5e3d..6321d889038b1 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityShared'] --- import observabilitySharedObj from './observability_shared.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/observability-ui](https://github.com/orgs/elastic/teams/observ | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 321 | 1 | 316 | 19 | +| 330 | 1 | 325 | 19 | ## Client diff --git a/api_docs/osquery.mdx b/api_docs/osquery.mdx index 2fbd67b92f0fa..aabeb22ebcdc9 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-02-07 +date: 2024-02-08 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 1b44890f84450..e993b1aa9f688 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-02-07 +date: 2024-02-08 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 dd622bf6e51c6..721ce92b3aa70 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -15,13 +15,13 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Count | Plugins or Packages with a
public API | Number of teams | |--------------|----------|------------------------| -| 750 | 642 | 40 | +| 751 | 643 | 40 | ### Public API health stats | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 79725 | 228 | 68291 | 1734 | +| 79771 | 228 | 68327 | 1735 | ## Plugin Directory @@ -69,7 +69,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 37 | 0 | 35 | 2 | | | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | APIs used to assess the quality of data in Elasticsearch indexes | 2 | 0 | 0 | 0 | | | [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/security-generative-ai) | Server APIs for the Elastic AI Assistant | 41 | 0 | 27 | 0 | -| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds embeddables service to Kibana | 557 | 1 | 452 | 8 | +| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds embeddables service to Kibana | 562 | 1 | 457 | 8 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Extends embeddable plugin with more functionality | 14 | 0 | 14 | 0 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides encryption and decryption utilities for saved objects containing sensitive information. | 53 | 0 | 46 | 1 | | | [@elastic/enterprise-search-frontend](https://github.com/orgs/elastic/teams/enterprise-search-frontend) | Adds dashboards for discovering and managing Enterprise Search products. | 5 | 0 | 5 | 0 | @@ -124,7 +124,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 4 | 0 | 4 | 1 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 117 | 0 | 42 | 10 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | A dashboard panel for creating links to dashboards or external links. | 57 | 0 | 57 | 6 | -| | [@elastic/security-detection-engine](https://github.com/orgs/elastic/teams/security-detection-engine) | - | 224 | 0 | 96 | 51 | +| | [@elastic/security-detection-engine](https://github.com/orgs/elastic/teams/security-detection-engine) | - | 226 | 0 | 97 | 52 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | This plugin provides a LogsExplorer component using the Discover customization framework, offering several affordances specifically designed for log consumption. | 87 | 0 | 87 | 16 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | Exposes the shared components and APIs to access and visualize logs. | 302 | 0 | 276 | 32 | | logstash | [@elastic/logstash](https://github.com/orgs/elastic/teams/logstash) | - | 0 | 0 | 0 | 0 | @@ -144,7 +144,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 75 | 0 | 73 | 13 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | This plugin exposes and registers observability log consumption features. | 19 | 0 | 19 | 1 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 14 | 0 | 14 | 0 | -| | [@elastic/observability-ui](https://github.com/orgs/elastic/teams/observability-ui) | - | 321 | 1 | 316 | 19 | +| | [@elastic/observability-ui](https://github.com/orgs/elastic/teams/observability-ui) | - | 330 | 1 | 325 | 19 | | | [@elastic/security-defend-workflows](https://github.com/orgs/elastic/teams/security-defend-workflows) | - | 23 | 0 | 23 | 7 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 2 | 0 | 2 | 0 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds a standardized Presentation panel which allows any forward ref component to interface with various Kibana systems. | 11 | 0 | 11 | 3 | @@ -257,7 +257,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 2 | 0 | 2 | 0 | | | [@elastic/appex-qa](https://github.com/orgs/elastic/teams/appex-qa) | - | 8 | 0 | 4 | 0 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 211 | 0 | 174 | 8 | -| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 76 | 0 | 47 | 9 | +| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 77 | 0 | 48 | 9 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 24 | 0 | 24 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 140 | 3 | 137 | 18 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 10 | 0 | 8 | 4 | @@ -335,8 +335,8 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 7 | 0 | 7 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 27 | 7 | 27 | 2 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 13 | 0 | 13 | 1 | -| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 457 | 1 | 180 | 0 | -| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 58 | 0 | 52 | 9 | +| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 459 | 1 | 181 | 0 | +| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 84 | 0 | 72 | 9 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 44 | 0 | 43 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 4 | 0 | 2 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 3 | 0 | 3 | 0 | @@ -433,6 +433,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 26 | 0 | 26 | 0 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 14 | 0 | 9 | 0 | | | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | - | 80 | 0 | 80 | 1 | +| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 1 | 0 | 0 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 44 | 0 | 43 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 6 | 0 | 6 | 0 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 5 | 0 | 5 | 0 | @@ -556,7 +557,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 1 | 0 | 1 | 0 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | - | 42 | 0 | 40 | 0 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | - | 10 | 0 | 10 | 0 | -| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | - | 150 | 0 | 115 | 3 | +| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | - | 150 | 0 | 114 | 3 | | | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 156 | 0 | 45 | 0 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 13 | 0 | 7 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 22 | 0 | 9 | 0 | diff --git a/api_docs/presentation_panel.devdocs.json b/api_docs/presentation_panel.devdocs.json index 6368a6e57bc19..8c68c3a16831e 100644 --- a/api_docs/presentation_panel.devdocs.json +++ b/api_docs/presentation_panel.devdocs.json @@ -101,7 +101,15 @@ "section": "def-common.PublishesLastSavedState", "text": "PublishesLastSavedState" }, - " & { registerPanelApi: (panelId: string, panelApi: ApiType) => void; removePanel: (panelId: string) => void; canRemovePanels?: (() => boolean) | undefined; replacePanel: (idToRemove: string, newPanel: ", + " & { addNewPanel: (panel: ", + { + "pluginId": "@kbn/presentation-containers", + "scope": "common", + "docId": "kibKbnPresentationContainersPluginApi", + "section": "def-common.PanelPackage", + "text": "PanelPackage" + }, + ", displaySuccessMessage?: boolean | undefined) => Promise; registerPanelApi: (panelId: string, panelApi: ApiType) => void; removePanel: (panelId: string) => void; canRemovePanels?: (() => boolean) | undefined; replacePanel: (idToRemove: string, newPanel: ", { "pluginId": "@kbn/presentation-containers", "scope": "common", @@ -197,7 +205,15 @@ "section": "def-common.PublishesLastSavedState", "text": "PublishesLastSavedState" }, - " & { registerPanelApi: (panelId: string, panelApi: ApiType) => void; removePanel: (panelId: string) => void; canRemovePanels?: (() => boolean) | undefined; replacePanel: (idToRemove: string, newPanel: ", + " & { addNewPanel: (panel: ", + { + "pluginId": "@kbn/presentation-containers", + "scope": "common", + "docId": "kibKbnPresentationContainersPluginApi", + "section": "def-common.PanelPackage", + "text": "PanelPackage" + }, + ", displaySuccessMessage?: boolean | undefined) => Promise; registerPanelApi: (panelId: string, panelApi: ApiType) => void; removePanel: (panelId: string) => void; canRemovePanels?: (() => boolean) | undefined; replacePanel: (idToRemove: string, newPanel: ", { "pluginId": "@kbn/presentation-containers", "scope": "common", @@ -349,7 +365,15 @@ "section": "def-common.PublishesLastSavedState", "text": "PublishesLastSavedState" }, - " & { registerPanelApi: (panelId: string, panelApi: ApiType) => void; removePanel: (panelId: string) => void; canRemovePanels?: (() => boolean) | undefined; replacePanel: (idToRemove: string, newPanel: ", + " & { addNewPanel: (panel: ", + { + "pluginId": "@kbn/presentation-containers", + "scope": "common", + "docId": "kibKbnPresentationContainersPluginApi", + "section": "def-common.PanelPackage", + "text": "PanelPackage" + }, + ", displaySuccessMessage?: boolean | undefined) => Promise; registerPanelApi: (panelId: string, panelApi: ApiType) => void; removePanel: (panelId: string) => void; canRemovePanels?: (() => boolean) | undefined; replacePanel: (idToRemove: string, newPanel: ", { "pluginId": "@kbn/presentation-containers", "scope": "common", @@ -499,7 +523,15 @@ "section": "def-common.PublishesLastSavedState", "text": "PublishesLastSavedState" }, - " & { registerPanelApi: (panelId: string, panelApi: ApiType) => void; removePanel: (panelId: string) => void; canRemovePanels?: (() => boolean) | undefined; replacePanel: (idToRemove: string, newPanel: ", + " & { addNewPanel: (panel: ", + { + "pluginId": "@kbn/presentation-containers", + "scope": "common", + "docId": "kibKbnPresentationContainersPluginApi", + "section": "def-common.PanelPackage", + "text": "PanelPackage" + }, + ", displaySuccessMessage?: boolean | undefined) => Promise; registerPanelApi: (panelId: string, panelApi: ApiType) => void; removePanel: (panelId: string) => void; canRemovePanels?: (() => boolean) | undefined; replacePanel: (idToRemove: string, newPanel: ", { "pluginId": "@kbn/presentation-containers", "scope": "common", diff --git a/api_docs/presentation_panel.mdx b/api_docs/presentation_panel.mdx index b160f7e62ef3e..e3aee7f0bfb71 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-02-07 +date: 2024-02-08 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 92cce48e5f8d0..e405fca86a3d1 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-02-07 +date: 2024-02-08 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 69b5facaf15c9..d4cfe28b7e8aa 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-02-07 +date: 2024-02-08 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 d7592150f1268..0e56d9598fef2 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-02-07 +date: 2024-02-08 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 2ab200ba8cfe4..c55f1a935cf9e 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-02-07 +date: 2024-02-08 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 7d02e444371a7..d26e76e7ce488 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-02-07 +date: 2024-02-08 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 fce7892027c3a..ef919e8821540 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-02-07 +date: 2024-02-08 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 856e54fd3b9db..2e198ed3ddc25 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-02-07 +date: 2024-02-08 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 3a192e41075db..91d4e323253ab 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-02-07 +date: 2024-02-08 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 caad57d964dd0..4126438f28ced 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-02-07 +date: 2024-02-08 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 8b6746c496c96..e12526f9c89bc 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-02-07 +date: 2024-02-08 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 5856df267d933..1ebf4383f706f 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-02-07 +date: 2024-02-08 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 4c7268b2f1be4..beb0e74f46dd4 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-02-07 +date: 2024-02-08 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 e1140371d426d..e9ea1260a755d 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-02-07 +date: 2024-02-08 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 9d3c73292fb10..413055e82c1ce 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-02-07 +date: 2024-02-08 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 e8ff668a90b2f..07273e1cf9127 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-02-07 +date: 2024-02-08 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 58bdd6065c1ee..a8685fcc16fcd 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting'] --- import screenshottingObj from './screenshotting.devdocs.json'; diff --git a/api_docs/security.mdx b/api_docs/security.mdx index 840391e9b964b..3dca4d8a056eb 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-02-07 +date: 2024-02-08 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 6088d1fa3033f..a7ed38f454775 100644 --- a/api_docs/security_solution.devdocs.json +++ b/api_docs/security_solution.devdocs.json @@ -114,7 +114,7 @@ "label": "experimentalFeatures", "description": [], "signature": [ - "{ readonly tGridEnabled: boolean; readonly tGridEventRenderedViewEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly chartEmbeddablesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly insightsRelatedAlertsByProcessAncestry: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly assistantStreamingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutInCreateRuleEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyout: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly newHostDetailsFlyout: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly alertSuppressionForIndicatorMatchRuleEnabled: boolean; readonly entityAnalyticsAssetCriticalityEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly jsonPrebuiltRulesDiffingEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; }" + "{ readonly tGridEnabled: boolean; readonly tGridEventRenderedViewEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly chartEmbeddablesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly insightsRelatedAlertsByProcessAncestry: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly assistantStreamingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutInCreateRuleEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyout: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly newHostDetailsFlyout: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly alertSuppressionForIndicatorMatchRuleEnabled: boolean; readonly entityAnalyticsAssetCriticalityEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly jsonPrebuiltRulesDiffingEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; }" ], "path": "x-pack/plugins/security_solution/public/plugin.tsx", "deprecated": false, @@ -473,7 +473,7 @@ "label": "data", "description": [], "signature": [ - "({ type: \"eql\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; query: string; description: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"eql\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; data_view_id?: string | undefined; filters?: unknown[] | undefined; event_category_override?: string | undefined; tiebreaker_field?: string | undefined; timestamp_field?: string | undefined; } | { type: \"query\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; query: string; description: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; saved_id?: string | undefined; response_actions?: ({ params: { query?: string | undefined; ecs_mapping?: Zod.objectOutputType<{}, Zod.ZodObject<{ field: Zod.ZodOptional; value: Zod.ZodOptional]>>; }, \"strip\", Zod.ZodTypeAny, { field?: string | undefined; value?: string | string[] | undefined; }, { field?: string | undefined; value?: string | string[] | undefined; }>, \"strip\"> | undefined; queries?: { id: string; query: string; ecs_mapping?: Zod.objectOutputType<{}, Zod.ZodObject<{ field: Zod.ZodOptional; value: Zod.ZodOptional]>>; }, \"strip\", Zod.ZodTypeAny, { field?: string | undefined; value?: string | string[] | undefined; }, { field?: string | undefined; value?: string | string[] | undefined; }>, \"strip\"> | undefined; version?: string | undefined; platform?: string | undefined; removed?: boolean | undefined; snapshot?: boolean | undefined; }[] | undefined; pack_id?: string | undefined; saved_query_id?: string | undefined; timeout?: number | undefined; }; action_type_id: \".osquery\"; } | { params: { command: \"isolate\"; comment?: string | undefined; }; action_type_id: \".endpoint\"; })[] | undefined; alert_suppression?: { group_by: string[]; duration?: { value: number; unit: \"m\" | \"h\" | \"s\"; } | undefined; missing_fields_strategy?: \"doNotSuppress\" | \"suppress\" | undefined; } | undefined; } | { type: \"saved_query\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; description: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; saved_id: string; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; query?: string | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; response_actions?: ({ params: { query?: string | undefined; ecs_mapping?: Zod.objectOutputType<{}, Zod.ZodObject<{ field: Zod.ZodOptional; value: Zod.ZodOptional]>>; }, \"strip\", Zod.ZodTypeAny, { field?: string | undefined; value?: string | string[] | undefined; }, { field?: string | undefined; value?: string | string[] | undefined; }>, \"strip\"> | undefined; queries?: { id: string; query: string; ecs_mapping?: Zod.objectOutputType<{}, Zod.ZodObject<{ field: Zod.ZodOptional; value: Zod.ZodOptional]>>; }, \"strip\", Zod.ZodTypeAny, { field?: string | undefined; value?: string | string[] | undefined; }, { field?: string | undefined; value?: string | string[] | undefined; }>, \"strip\"> | undefined; version?: string | undefined; platform?: string | undefined; removed?: boolean | undefined; snapshot?: boolean | undefined; }[] | undefined; pack_id?: string | undefined; saved_query_id?: string | undefined; timeout?: number | undefined; }; action_type_id: \".osquery\"; } | { params: { command: \"isolate\"; comment?: string | undefined; }; action_type_id: \".endpoint\"; })[] | undefined; alert_suppression?: { group_by: string[]; duration?: { value: number; unit: \"m\" | \"h\" | \"s\"; } | undefined; missing_fields_strategy?: \"doNotSuppress\" | \"suppress\" | undefined; } | undefined; } | { type: \"threshold\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; query: string; description: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; threshold: { value: number; field: (string | string[]) & (string | string[] | undefined); cardinality?: { value: number; field: string; }[] | undefined; }; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; saved_id?: string | undefined; alert_suppression?: { duration: { value: number; unit: \"m\" | \"h\" | \"s\"; }; } | undefined; } | { type: \"threat_match\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; query: string; description: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; threat_query: string; threat_mapping: { entries: { type: \"mapping\"; value: string; field: string; }[]; }[]; threat_index: string[]; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; saved_id?: string | undefined; alert_suppression?: { group_by: string[]; duration?: { value: number; unit: \"m\" | \"h\" | \"s\"; } | undefined; missing_fields_strategy?: \"doNotSuppress\" | \"suppress\" | undefined; } | undefined; threat_filters?: unknown[] | undefined; threat_indicator_path?: string | undefined; threat_language?: \"lucene\" | \"kuery\" | undefined; concurrent_searches?: number | undefined; items_per_search?: number | undefined; } | { type: \"machine_learning\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; description: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; anomaly_threshold: number; machine_learning_job_id: (string | string[]) & (string | string[] | undefined); license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; } | { type: \"new_terms\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; query: string; description: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; new_terms_fields: string[]; history_window_start: string; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; } | { type: \"esql\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; query: string; description: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"esql\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; })[]" + "({ type: \"eql\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; query: string; description: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"eql\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; data_view_id?: string | undefined; filters?: unknown[] | undefined; event_category_override?: string | undefined; tiebreaker_field?: string | undefined; timestamp_field?: string | undefined; } | { type: \"query\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; query: string; description: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; saved_id?: string | undefined; response_actions?: ({ params: { query?: string | undefined; ecs_mapping?: Zod.objectOutputType<{}, Zod.ZodObject<{ field: Zod.ZodOptional; value: Zod.ZodOptional]>>; }, \"strip\", Zod.ZodTypeAny, { field?: string | undefined; value?: string | string[] | undefined; }, { field?: string | undefined; value?: string | string[] | undefined; }>, \"strip\"> | undefined; queries?: { id: string; query: string; ecs_mapping?: Zod.objectOutputType<{}, Zod.ZodObject<{ field: Zod.ZodOptional; value: Zod.ZodOptional]>>; }, \"strip\", Zod.ZodTypeAny, { field?: string | undefined; value?: string | string[] | undefined; }, { field?: string | undefined; value?: string | string[] | undefined; }>, \"strip\"> | undefined; version?: string | undefined; platform?: string | undefined; removed?: boolean | undefined; snapshot?: boolean | undefined; }[] | undefined; pack_id?: string | undefined; saved_query_id?: string | undefined; timeout?: number | undefined; }; action_type_id: \".osquery\"; } | { params: { command: \"isolate\"; comment?: string | undefined; } | { config: { field: string; overwrite: boolean; }; command: \"kill-process\" | \"suspend-process\"; comment?: string | undefined; }; action_type_id: \".endpoint\"; })[] | undefined; alert_suppression?: { group_by: string[]; duration?: { value: number; unit: \"m\" | \"h\" | \"s\"; } | undefined; missing_fields_strategy?: \"doNotSuppress\" | \"suppress\" | undefined; } | undefined; } | { type: \"saved_query\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; description: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; saved_id: string; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; query?: string | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; response_actions?: ({ params: { query?: string | undefined; ecs_mapping?: Zod.objectOutputType<{}, Zod.ZodObject<{ field: Zod.ZodOptional; value: Zod.ZodOptional]>>; }, \"strip\", Zod.ZodTypeAny, { field?: string | undefined; value?: string | string[] | undefined; }, { field?: string | undefined; value?: string | string[] | undefined; }>, \"strip\"> | undefined; queries?: { id: string; query: string; ecs_mapping?: Zod.objectOutputType<{}, Zod.ZodObject<{ field: Zod.ZodOptional; value: Zod.ZodOptional]>>; }, \"strip\", Zod.ZodTypeAny, { field?: string | undefined; value?: string | string[] | undefined; }, { field?: string | undefined; value?: string | string[] | undefined; }>, \"strip\"> | undefined; version?: string | undefined; platform?: string | undefined; removed?: boolean | undefined; snapshot?: boolean | undefined; }[] | undefined; pack_id?: string | undefined; saved_query_id?: string | undefined; timeout?: number | undefined; }; action_type_id: \".osquery\"; } | { params: { command: \"isolate\"; comment?: string | undefined; } | { config: { field: string; overwrite: boolean; }; command: \"kill-process\" | \"suspend-process\"; comment?: string | undefined; }; action_type_id: \".endpoint\"; })[] | undefined; alert_suppression?: { group_by: string[]; duration?: { value: number; unit: \"m\" | \"h\" | \"s\"; } | undefined; missing_fields_strategy?: \"doNotSuppress\" | \"suppress\" | undefined; } | undefined; } | { type: \"threshold\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; query: string; description: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; threshold: { value: number; field: (string | string[]) & (string | string[] | undefined); cardinality?: { value: number; field: string; }[] | undefined; }; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; saved_id?: string | undefined; alert_suppression?: { duration: { value: number; unit: \"m\" | \"h\" | \"s\"; }; } | undefined; } | { type: \"threat_match\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; query: string; description: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; threat_query: string; threat_mapping: { entries: { type: \"mapping\"; value: string; field: string; }[]; }[]; threat_index: string[]; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; saved_id?: string | undefined; alert_suppression?: { group_by: string[]; duration?: { value: number; unit: \"m\" | \"h\" | \"s\"; } | undefined; missing_fields_strategy?: \"doNotSuppress\" | \"suppress\" | undefined; } | undefined; threat_filters?: unknown[] | undefined; threat_indicator_path?: string | undefined; threat_language?: \"lucene\" | \"kuery\" | undefined; concurrent_searches?: number | undefined; items_per_search?: number | undefined; } | { type: \"machine_learning\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; description: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; anomaly_threshold: number; machine_learning_job_id: (string | string[]) & (string | string[] | undefined); license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; } | { type: \"new_terms\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; query: string; description: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; new_terms_fields: string[]; history_window_start: string; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; } | { type: \"esql\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; query: string; description: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"esql\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; })[]" ], "path": "x-pack/plugins/security_solution/public/detection_engine/rule_management/logic/types.ts", "deprecated": false, @@ -568,7 +568,7 @@ "\nExperimental flag needed to enable the link" ], "signature": [ - "\"assistantModelEvaluation\" | \"assistantStreamingEnabled\" | \"tGridEnabled\" | \"tGridEventRenderedViewEnabled\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"chartEmbeddablesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"insightsRelatedAlertsByProcessAncestry\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionsEnabled\" | \"endpointResponseActionsEnabled\" | \"responseActionUploadEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"alertsPageChartsEnabled\" | \"alertTypeEnabled\" | \"expandableFlyoutInCreateRuleEnabled\" | \"alertsPageFiltersEnabled\" | \"newUserDetailsFlyout\" | \"newUserDetailsFlyoutManagedUser\" | \"newHostDetailsFlyout\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"riskEnginePrivilegesRouteEnabled\" | \"alertSuppressionForIndicatorMatchRuleEnabled\" | \"entityAnalyticsAssetCriticalityEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"jsonPrebuiltRulesDiffingEnabled\" | \"timelineEsqlTabDisabled\" | undefined" + "\"assistantModelEvaluation\" | \"assistantStreamingEnabled\" | \"tGridEnabled\" | \"tGridEventRenderedViewEnabled\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"chartEmbeddablesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"insightsRelatedAlertsByProcessAncestry\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionsEnabled\" | \"endpointResponseActionsEnabled\" | \"responseActionUploadEnabled\" | \"automatedProcessActionsEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"alertsPageChartsEnabled\" | \"alertTypeEnabled\" | \"expandableFlyoutInCreateRuleEnabled\" | \"alertsPageFiltersEnabled\" | \"newUserDetailsFlyout\" | \"newUserDetailsFlyoutManagedUser\" | \"newHostDetailsFlyout\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"riskEnginePrivilegesRouteEnabled\" | \"alertSuppressionForIndicatorMatchRuleEnabled\" | \"entityAnalyticsAssetCriticalityEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"jsonPrebuiltRulesDiffingEnabled\" | \"timelineEsqlTabDisabled\" | undefined" ], "path": "x-pack/plugins/security_solution/public/common/links/types.ts", "deprecated": false, @@ -648,7 +648,7 @@ "\nExperimental flag needed to disable the link. Opposite of experimentalKey" ], "signature": [ - "\"assistantModelEvaluation\" | \"assistantStreamingEnabled\" | \"tGridEnabled\" | \"tGridEventRenderedViewEnabled\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"chartEmbeddablesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"insightsRelatedAlertsByProcessAncestry\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionsEnabled\" | \"endpointResponseActionsEnabled\" | \"responseActionUploadEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"alertsPageChartsEnabled\" | \"alertTypeEnabled\" | \"expandableFlyoutInCreateRuleEnabled\" | \"alertsPageFiltersEnabled\" | \"newUserDetailsFlyout\" | \"newUserDetailsFlyoutManagedUser\" | \"newHostDetailsFlyout\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"riskEnginePrivilegesRouteEnabled\" | \"alertSuppressionForIndicatorMatchRuleEnabled\" | \"entityAnalyticsAssetCriticalityEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"jsonPrebuiltRulesDiffingEnabled\" | \"timelineEsqlTabDisabled\" | undefined" + "\"assistantModelEvaluation\" | \"assistantStreamingEnabled\" | \"tGridEnabled\" | \"tGridEventRenderedViewEnabled\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"chartEmbeddablesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"insightsRelatedAlertsByProcessAncestry\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionsEnabled\" | \"endpointResponseActionsEnabled\" | \"responseActionUploadEnabled\" | \"automatedProcessActionsEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"alertsPageChartsEnabled\" | \"alertTypeEnabled\" | \"expandableFlyoutInCreateRuleEnabled\" | \"alertsPageFiltersEnabled\" | \"newUserDetailsFlyout\" | \"newUserDetailsFlyoutManagedUser\" | \"newHostDetailsFlyout\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"riskEnginePrivilegesRouteEnabled\" | \"alertSuppressionForIndicatorMatchRuleEnabled\" | \"entityAnalyticsAssetCriticalityEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"jsonPrebuiltRulesDiffingEnabled\" | \"timelineEsqlTabDisabled\" | undefined" ], "path": "x-pack/plugins/security_solution/public/common/links/types.ts", "deprecated": false, @@ -1986,7 +1986,7 @@ "label": "experimentalFeatures", "description": [], "signature": [ - "{ readonly tGridEnabled: boolean; readonly tGridEventRenderedViewEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly chartEmbeddablesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly insightsRelatedAlertsByProcessAncestry: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly assistantStreamingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutInCreateRuleEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyout: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly newHostDetailsFlyout: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly alertSuppressionForIndicatorMatchRuleEnabled: boolean; readonly entityAnalyticsAssetCriticalityEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly jsonPrebuiltRulesDiffingEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; }" + "{ readonly tGridEnabled: boolean; readonly tGridEventRenderedViewEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly chartEmbeddablesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly insightsRelatedAlertsByProcessAncestry: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly assistantStreamingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutInCreateRuleEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyout: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly newHostDetailsFlyout: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly alertSuppressionForIndicatorMatchRuleEnabled: boolean; readonly entityAnalyticsAssetCriticalityEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly jsonPrebuiltRulesDiffingEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; }" ], "path": "x-pack/plugins/security_solution/public/types.ts", "deprecated": false, @@ -3105,7 +3105,7 @@ "\nThe security solution generic experimental features" ], "signature": [ - "{ readonly tGridEnabled: boolean; readonly tGridEventRenderedViewEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly chartEmbeddablesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly insightsRelatedAlertsByProcessAncestry: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly assistantStreamingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutInCreateRuleEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyout: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly newHostDetailsFlyout: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly alertSuppressionForIndicatorMatchRuleEnabled: boolean; readonly entityAnalyticsAssetCriticalityEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly jsonPrebuiltRulesDiffingEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; }" + "{ readonly tGridEnabled: boolean; readonly tGridEventRenderedViewEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly chartEmbeddablesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly insightsRelatedAlertsByProcessAncestry: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly assistantStreamingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutInCreateRuleEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyout: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly newHostDetailsFlyout: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly alertSuppressionForIndicatorMatchRuleEnabled: boolean; readonly entityAnalyticsAssetCriticalityEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly jsonPrebuiltRulesDiffingEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; }" ], "path": "x-pack/plugins/security_solution/server/plugin_contract.ts", "deprecated": false, @@ -3281,7 +3281,7 @@ "label": "ExperimentalFeatures", "description": [], "signature": [ - "{ readonly tGridEnabled: boolean; readonly tGridEventRenderedViewEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly chartEmbeddablesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly insightsRelatedAlertsByProcessAncestry: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly assistantStreamingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutInCreateRuleEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyout: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly newHostDetailsFlyout: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly alertSuppressionForIndicatorMatchRuleEnabled: boolean; readonly entityAnalyticsAssetCriticalityEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly jsonPrebuiltRulesDiffingEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; }" + "{ readonly tGridEnabled: boolean; readonly tGridEventRenderedViewEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly chartEmbeddablesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly insightsRelatedAlertsByProcessAncestry: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly assistantStreamingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutInCreateRuleEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyout: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly newHostDetailsFlyout: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly alertSuppressionForIndicatorMatchRuleEnabled: boolean; readonly entityAnalyticsAssetCriticalityEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly jsonPrebuiltRulesDiffingEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; }" ], "path": "x-pack/plugins/security_solution/common/experimental_features.ts", "deprecated": false, @@ -3330,7 +3330,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 tGridEnabled: true; readonly tGridEventRenderedViewEnabled: true; readonly excludePoliciesInFilterEnabled: false; readonly kubernetesEnabled: true; readonly chartEmbeddablesEnabled: true; readonly donutChartEmbeddablesEnabled: false; readonly previewTelemetryUrlEnabled: false; readonly insightsRelatedAlertsByProcessAncestry: true; readonly extendedRuleExecutionLoggingEnabled: false; readonly assistantStreamingEnabled: false; readonly socTrendsEnabled: false; readonly responseActionsEnabled: true; readonly endpointResponseActionsEnabled: true; readonly responseActionUploadEnabled: true; readonly responseActionsSentinelOneV1Enabled: false; readonly alertsPageChartsEnabled: true; readonly alertTypeEnabled: false; readonly expandableFlyoutInCreateRuleEnabled: true; readonly alertsPageFiltersEnabled: true; readonly assistantModelEvaluation: false; readonly newUserDetailsFlyout: false; readonly newUserDetailsFlyoutManagedUser: false; readonly newHostDetailsFlyout: false; readonly riskScoringPersistence: true; readonly riskScoringRoutesEnabled: true; readonly esqlRulesDisabled: false; readonly protectionUpdatesEnabled: true; readonly disableTimelineSaveTour: false; readonly riskEnginePrivilegesRouteEnabled: true; readonly alertSuppressionForIndicatorMatchRuleEnabled: false; readonly entityAnalyticsAssetCriticalityEnabled: false; readonly sentinelOneDataInAnalyzerEnabled: false; readonly sentinelOneManualHostActionsEnabled: true; readonly jsonPrebuiltRulesDiffingEnabled: true; readonly timelineEsqlTabDisabled: false; }" + "{ readonly tGridEnabled: true; readonly tGridEventRenderedViewEnabled: true; readonly excludePoliciesInFilterEnabled: false; readonly kubernetesEnabled: true; readonly chartEmbeddablesEnabled: true; readonly donutChartEmbeddablesEnabled: false; readonly previewTelemetryUrlEnabled: false; readonly insightsRelatedAlertsByProcessAncestry: true; readonly extendedRuleExecutionLoggingEnabled: false; readonly assistantStreamingEnabled: false; readonly socTrendsEnabled: false; readonly responseActionsEnabled: true; readonly endpointResponseActionsEnabled: true; readonly responseActionUploadEnabled: true; readonly automatedProcessActionsEnabled: false; readonly responseActionsSentinelOneV1Enabled: false; readonly alertsPageChartsEnabled: true; readonly alertTypeEnabled: false; readonly expandableFlyoutInCreateRuleEnabled: true; readonly alertsPageFiltersEnabled: true; readonly assistantModelEvaluation: false; readonly newUserDetailsFlyout: false; readonly newUserDetailsFlyoutManagedUser: false; readonly newHostDetailsFlyout: false; readonly riskScoringPersistence: true; readonly riskScoringRoutesEnabled: true; readonly esqlRulesDisabled: false; readonly protectionUpdatesEnabled: true; readonly disableTimelineSaveTour: false; readonly riskEnginePrivilegesRouteEnabled: true; readonly alertSuppressionForIndicatorMatchRuleEnabled: false; readonly entityAnalyticsAssetCriticalityEnabled: false; readonly sentinelOneDataInAnalyzerEnabled: false; readonly sentinelOneManualHostActionsEnabled: true; readonly jsonPrebuiltRulesDiffingEnabled: true; readonly timelineEsqlTabDisabled: 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 cbd71985d822b..851069752f8ad 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-02-07 +date: 2024-02-08 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 63f3bd08ddb3d..7d6805ad32c9b 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-02-07 +date: 2024-02-08 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 d1494e047821a..6fb77f7079ab5 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-02-07 +date: 2024-02-08 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 0e198b2b7a0f2..09bf0ab95e78c 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-02-07 +date: 2024-02-08 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 23ea04c7f5720..80845375fa25e 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-02-07 +date: 2024-02-08 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 6dd06f6a0bb86..5f5879eeabe24 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-02-07 +date: 2024-02-08 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 d1bca6bdcf5cb..56946b555e2f2 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-02-07 +date: 2024-02-08 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 0c5fde709cbde..a8786c8438ef2 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share'] --- import shareObj from './share.devdocs.json'; diff --git a/api_docs/snapshot_restore.mdx b/api_docs/snapshot_restore.mdx index 98108ace67750..3fce052eddefb 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-02-07 +date: 2024-02-08 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 87ffc57960093..89ec19c9d8155 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-02-07 +date: 2024-02-08 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 6711616b95732..145306cf77dec 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-02-07 +date: 2024-02-08 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 d60f8893a3d5c..cef40b7b09a6a 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-02-07 +date: 2024-02-08 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 5f01b62427616..a151419fe32f7 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-02-07 +date: 2024-02-08 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 f452244c7ac53..b4fcc79079d2c 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-02-07 +date: 2024-02-08 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 e751675914deb..e1b5a553f14c0 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-02-07 +date: 2024-02-08 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 600f107c7adca..d65290e05ca4e 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-02-07 +date: 2024-02-08 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 00e30d5a67f71..09f984ea18369 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-02-07 +date: 2024-02-08 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 8d8f72de83698..e6dc10f5a9565 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-02-07 +date: 2024-02-08 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 b40240b83567d..72fe54da292e5 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'threatIntelligence'] --- import threatIntelligenceObj from './threat_intelligence.devdocs.json'; diff --git a/api_docs/timelines.mdx b/api_docs/timelines.mdx index ac0256289d207..51379efcc39aa 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'timelines'] --- import timelinesObj from './timelines.devdocs.json'; diff --git a/api_docs/transform.mdx b/api_docs/transform.mdx index f70b80d7700d2..a5efbd6742623 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'transform'] --- import transformObj from './transform.devdocs.json'; diff --git a/api_docs/triggers_actions_ui.mdx b/api_docs/triggers_actions_ui.mdx index 428f3e914ad3b..7f22a66a59803 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-02-07 +date: 2024-02-08 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 0f9cfba95dbed..1ef2d79fb3bc5 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-02-07 +date: 2024-02-08 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 bc657402727de..4c659d410fcbe 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-02-07 +date: 2024-02-08 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 636e1e8a71ad4..7e89032b71d6b 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-02-07 +date: 2024-02-08 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 dadf411df077c..9690c84929005 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-02-07 +date: 2024-02-08 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 8fa821d0bbc17..1465ebdda2291 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-02-07 +date: 2024-02-08 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 9b27d641f394c..90172fc462ad1 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-02-07 +date: 2024-02-08 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 272789745af97..79e7ca4b21364 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-02-07 +date: 2024-02-08 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 fafc955715cf7..9e90600856309 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-02-07 +date: 2024-02-08 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 8b1aaec03bc72..0d44be7793e6a 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-02-07 +date: 2024-02-08 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 e77e838c72039..36f67fe934a29 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-02-07 +date: 2024-02-08 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 822f8ed9ee93e..2b55d86ea4cb4 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-02-07 +date: 2024-02-08 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 5d28070a30b31..2c07f3ec3582e 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-02-07 +date: 2024-02-08 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 c546d638347cf..2feb7aa00cc8e 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-02-07 +date: 2024-02-08 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 94f494248c617..eb97b5b933dbc 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-02-07 +date: 2024-02-08 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 c61e06c24591d..600d5be2346b4 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-02-07 +date: 2024-02-08 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 5faa721b0b779..7fe24b693cb89 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-02-07 +date: 2024-02-08 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 335949c6de1d9..7ed7ba8f3f4fc 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-02-07 +date: 2024-02-08 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 0d1db20335a4c..ca95e9f9fa272 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-02-07 +date: 2024-02-08 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 35bf09c113d89..bbad04fca0ceb 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-02-07 +date: 2024-02-08 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 35458e93479c1..39c2e0ca0b9a7 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeXy'] --- import visTypeXyObj from './vis_type_xy.devdocs.json'; diff --git a/api_docs/visualizations.devdocs.json b/api_docs/visualizations.devdocs.json index 3978b9dbad73f..a6e2e2f68542e 100644 --- a/api_docs/visualizations.devdocs.json +++ b/api_docs/visualizations.devdocs.json @@ -6848,7 +6848,15 @@ "section": "def-common.PublishesLastSavedState", "text": "PublishesLastSavedState" }, - " & { registerPanelApi: (panelId: string, panelApi: ApiType) => void; removePanel: (panelId: string) => void; canRemovePanels?: (() => boolean) | undefined; replacePanel: (idToRemove: string, newPanel: ", + " & { addNewPanel: (panel: ", + { + "pluginId": "@kbn/presentation-containers", + "scope": "common", + "docId": "kibKbnPresentationContainersPluginApi", + "section": "def-common.PanelPackage", + "text": "PanelPackage" + }, + ", displaySuccessMessage?: boolean | undefined) => Promise; registerPanelApi: (panelId: string, panelApi: ApiType) => void; removePanel: (panelId: string) => void; canRemovePanels?: (() => boolean) | undefined; replacePanel: (idToRemove: string, newPanel: ", { "pluginId": "@kbn/presentation-containers", "scope": "common", diff --git a/api_docs/visualizations.mdx b/api_docs/visualizations.mdx index 0fba29839bcf9..186762e92bbc1 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-02-07 +date: 2024-02-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; diff --git a/dev_docs/tutorials/ci.mdx b/dev_docs/tutorials/ci.mdx index 2234143c32664..2c093169e8b3d 100644 --- a/dev_docs/tutorials/ci.mdx +++ b/dev_docs/tutorials/ci.mdx @@ -51,6 +51,10 @@ Build an archive that can be used to serve Kibana's static assets. Build cloud Docker images that can be used for testing deployments on Elastic Cloud. +#### `ci:build-docker-fips` + +Build Docker UBI x64 image with FIPS enabled. + #### `ci:build-os-packages` Build Docker images, and Debian and RPM packages. diff --git a/examples/embeddable_examples/public/migrations/migrations_embeddable_factory.ts b/examples/embeddable_examples/public/migrations/migrations_embeddable_factory.ts index fb96fbff77b35..3dea64a742161 100644 --- a/examples/embeddable_examples/public/migrations/migrations_embeddable_factory.ts +++ b/examples/embeddable_examples/public/migrations/migrations_embeddable_factory.ts @@ -62,7 +62,7 @@ export class SimpleEmbeddableFactoryDefinition public getDisplayName() { return i18n.translate('embeddableExamples.migrations.displayName', { - defaultMessage: 'hello world', + defaultMessage: 'simple migration embeddable', }); } } diff --git a/examples/embeddable_examples/public/plugin.ts b/examples/embeddable_examples/public/plugin.ts index 12e24526d2eb2..c94eef3107972 100644 --- a/examples/embeddable_examples/public/plugin.ts +++ b/examples/embeddable_examples/public/plugin.ts @@ -31,7 +31,8 @@ import { FilterDebuggerEmbeddableFactory, FilterDebuggerEmbeddableFactoryDefinition, } from './filter_debugger'; -import { registerMarkdownEditorEmbeddable } from './react_embeddables/eui_markdown_react_embeddable'; +import { registerMarkdownEditorEmbeddable } from './react_embeddables/eui_markdown/eui_markdown_react_embeddable'; +import { registerCreateEuiMarkdownAction } from './react_embeddables/eui_markdown/create_eui_markdown_action'; export interface EmbeddableExamplesSetupDependencies { embeddable: EmbeddableSetup; @@ -54,8 +55,6 @@ export interface EmbeddableExamplesStart { factories: ExampleEmbeddableFactories; } -registerMarkdownEditorEmbeddable(); - export class EmbeddableExamplesPlugin implements Plugin< @@ -71,6 +70,9 @@ export class EmbeddableExamplesPlugin core: CoreSetup, deps: EmbeddableExamplesSetupDependencies ) { + registerMarkdownEditorEmbeddable(); + registerCreateEuiMarkdownAction(deps.uiActions); + this.exampleEmbeddableFactories.getHelloWorldEmbeddableFactory = deps.embeddable.registerEmbeddableFactory( HELLO_WORLD_EMBEDDABLE, diff --git a/examples/embeddable_examples/public/react_embeddables/eui_markdown/constants.ts b/examples/embeddable_examples/public/react_embeddables/eui_markdown/constants.ts new file mode 100644 index 0000000000000..93227e28e211b --- /dev/null +++ b/examples/embeddable_examples/public/react_embeddables/eui_markdown/constants.ts @@ -0,0 +1,10 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export const EUI_MARKDOWN_ID = 'euiMarkdown'; +export const ADD_EUI_MARKDOWN_ACTION_ID = 'create_eui_markdown'; diff --git a/examples/embeddable_examples/public/react_embeddables/eui_markdown/create_eui_markdown_action.tsx b/examples/embeddable_examples/public/react_embeddables/eui_markdown/create_eui_markdown_action.tsx new file mode 100644 index 0000000000000..ef2bb9e5bd154 --- /dev/null +++ b/examples/embeddable_examples/public/react_embeddables/eui_markdown/create_eui_markdown_action.tsx @@ -0,0 +1,42 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { i18n } from '@kbn/i18n'; +import { apiIsPresentationContainer } from '@kbn/presentation-containers'; +import { EmbeddableApiContext } from '@kbn/presentation-publishing'; +import { IncompatibleActionError, UiActionsStart } from '@kbn/ui-actions-plugin/public'; +import { ADD_EUI_MARKDOWN_ACTION_ID, EUI_MARKDOWN_ID } from './constants'; + +// ----------------------------------------------------------------------------- +// Create and register an action which allows this embeddable to be created from +// the dashboard toolbar context menu. +// ----------------------------------------------------------------------------- +export const registerCreateEuiMarkdownAction = (uiActions: UiActionsStart) => { + uiActions.registerAction({ + id: ADD_EUI_MARKDOWN_ACTION_ID, + getIconType: () => 'editorCodeBlock', + isCompatible: async ({ embeddable }) => { + return apiIsPresentationContainer(embeddable); + }, + execute: async ({ embeddable }) => { + if (!apiIsPresentationContainer(embeddable)) throw new IncompatibleActionError(); + embeddable.addNewPanel( + { + panelType: EUI_MARKDOWN_ID, + initialState: { content: '# hello world!' }, + }, + true + ); + }, + getDisplayName: () => + i18n.translate('embeddableExamples.euiMarkdownEditor.ariaLabel', { + defaultMessage: 'EUI Markdown', + }), + }); + uiActions.attachAction('ADD_PANEL_TRIGGER', ADD_EUI_MARKDOWN_ACTION_ID); +}; diff --git a/examples/embeddable_examples/public/react_embeddables/eui_markdown/eui_markdown_react_embeddable.tsx b/examples/embeddable_examples/public/react_embeddables/eui_markdown/eui_markdown_react_embeddable.tsx new file mode 100644 index 0000000000000..c699ca5799967 --- /dev/null +++ b/examples/embeddable_examples/public/react_embeddables/eui_markdown/eui_markdown_react_embeddable.tsx @@ -0,0 +1,124 @@ +/* + * 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 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { EuiMarkdownEditor, EuiMarkdownFormat } from '@elastic/eui'; +import { css } from '@emotion/react'; +import { + initializeReactEmbeddableTitles, + initializeReactEmbeddableUuid, + ReactEmbeddableFactory, + RegisterReactEmbeddable, + registerReactEmbeddableFactory, + useReactEmbeddableApiHandle, + useReactEmbeddableUnsavedChanges, +} from '@kbn/embeddable-plugin/public'; +import { i18n } from '@kbn/i18n'; +import { useInheritedViewMode, useStateFromPublishingSubject } from '@kbn/presentation-publishing'; +import { euiThemeVars } from '@kbn/ui-theme'; +import React from 'react'; +import { BehaviorSubject } from 'rxjs'; +import { EUI_MARKDOWN_ID } from './constants'; +import { MarkdownEditorSerializedState, MarkdownEditorApi } from './types'; + +export const registerMarkdownEditorEmbeddable = () => { + const markdownEmbeddableFactory: ReactEmbeddableFactory< + MarkdownEditorSerializedState, + MarkdownEditorApi + > = { + deserializeState: (state) => { + /** + * Here we can run migrations and inject references. + */ + return state.rawState as MarkdownEditorSerializedState; + }, + getComponent: async (state, maybeId) => { + /** + * initialize state (source of truth) + */ + const uuid = initializeReactEmbeddableUuid(maybeId); + const { titlesApi, titleComparators, serializeTitles } = + initializeReactEmbeddableTitles(state); + const contentSubject = new BehaviorSubject(state.content); + + /** + * getComponent is async so you can async import the component or load a saved object here. + * the loading will be handed gracefully by the Presentation Container. + */ + + return RegisterReactEmbeddable((apiRef) => { + /** + * Unsaved changes logic is handled automatically by this hook. You only need to provide + * a subject, setter, and optional state comparator for each key in your state type. + */ + const { unsavedChanges, resetUnsavedChanges } = useReactEmbeddableUnsavedChanges( + uuid, + markdownEmbeddableFactory, + { + content: [contentSubject, (value) => contentSubject.next(value)], + ...titleComparators, + } + ); + + /** + * Publish the API. This is what gets forwarded to the Actions framework, and to whatever the + * parent of this embeddable is. + */ + const thisApi = useReactEmbeddableApiHandle( + { + ...titlesApi, + unsavedChanges, + resetUnsavedChanges, + serializeState: async () => { + return { + rawState: { + ...serializeTitles(), + content: contentSubject.getValue(), + }, + }; + }, + }, + apiRef, + uuid + ); + + // get state for rendering + const content = useStateFromPublishingSubject(contentSubject); + const viewMode = useInheritedViewMode(thisApi) ?? 'view'; + + return viewMode === 'edit' ? ( + contentSubject.next(value)} + aria-label={i18n.translate('embeddableExamples.euiMarkdownEditor.ariaLabel', { + defaultMessage: 'Dashboard markdown editor', + })} + height="full" + /> + ) : ( + + {content ?? ''} + + ); + }); + }, + }; + + /** + * Register the defined Embeddable Factory - notice that this isn't defined + * on the plugin. Instead, it's a simple imported function. I.E to register an + * embeddable, you only need the embeddable plugin in your requiredBundles + */ + registerReactEmbeddableFactory(EUI_MARKDOWN_ID, markdownEmbeddableFactory); +}; diff --git a/examples/embeddable_examples/public/react_embeddables/eui_markdown/types.ts b/examples/embeddable_examples/public/react_embeddables/eui_markdown/types.ts new file mode 100644 index 0000000000000..1e594ff61ba68 --- /dev/null +++ b/examples/embeddable_examples/public/react_embeddables/eui_markdown/types.ts @@ -0,0 +1,18 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { + DefaultEmbeddableApi, + SerializedReactEmbeddableTitles, +} from '@kbn/embeddable-plugin/public'; + +export type MarkdownEditorSerializedState = SerializedReactEmbeddableTitles & { + content: string; +}; + +export type MarkdownEditorApi = DefaultEmbeddableApi; diff --git a/examples/embeddable_examples/public/react_embeddables/eui_markdown_react_embeddable.tsx b/examples/embeddable_examples/public/react_embeddables/eui_markdown_react_embeddable.tsx deleted file mode 100644 index b525181f307a9..0000000000000 --- a/examples/embeddable_examples/public/react_embeddables/eui_markdown_react_embeddable.tsx +++ /dev/null @@ -1,143 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import { EuiMarkdownEditor, EuiMarkdownFormat } from '@elastic/eui'; -import { css } from '@emotion/react'; -import { euiThemeVars } from '@kbn/ui-theme'; -import { - ReactEmbeddableFactory, - RegisterReactEmbeddable, - registerReactEmbeddableFactory, - useReactEmbeddableApiHandle, - initializeReactEmbeddableUuid, - initializeReactEmbeddableTitles, - SerializedReactEmbeddableTitles, - DefaultEmbeddableApi, - useReactEmbeddableUnsavedChanges, -} from '@kbn/embeddable-plugin/public'; -import { i18n } from '@kbn/i18n'; -import { useInheritedViewMode, useStateFromPublishingSubject } from '@kbn/presentation-publishing'; -import React from 'react'; -import { BehaviorSubject } from 'rxjs'; - -// ----------------------------------------------------------------------------- -// Types for this embeddable -// ----------------------------------------------------------------------------- -type MarkdownEditorSerializedState = SerializedReactEmbeddableTitles & { - content: string; -}; - -type MarkdownEditorApi = DefaultEmbeddableApi; - -const type = 'euiMarkdown'; - -// ----------------------------------------------------------------------------- -// Define the Embeddable Factory -// ----------------------------------------------------------------------------- -const markdownEmbeddableFactory: ReactEmbeddableFactory< - MarkdownEditorSerializedState, - MarkdownEditorApi -> = { - // ----------------------------------------------------------------------------- - // Deserialize function - // ----------------------------------------------------------------------------- - deserializeState: (state) => { - // We could run migrations here. - // We should inject references here. References are given as state.references - - return state.rawState as MarkdownEditorSerializedState; - }, - - // ----------------------------------------------------------------------------- - // Register the Embeddable component - // ----------------------------------------------------------------------------- - getComponent: async (state, maybeId) => { - /** - * initialize state (source of truth) - */ - const uuid = initializeReactEmbeddableUuid(maybeId); - const { titlesApi, titleComparators, serializeTitles } = initializeReactEmbeddableTitles(state); - const contentSubject = new BehaviorSubject(state.content); - - /** - * getComponent is async so you can async import the component or load a saved object here. - * the loading will be handed gracefully by the Presentation Container. - */ - - return RegisterReactEmbeddable((apiRef) => { - /** - * Unsaved changes logic is handled automatically by this hook. You only need to provide - * a subject, setter, and optional state comparator for each key in your state type. - */ - const { unsavedChanges, resetUnsavedChanges } = useReactEmbeddableUnsavedChanges( - uuid, - markdownEmbeddableFactory, - { - content: [contentSubject, (value) => contentSubject.next(value)], - ...titleComparators, - } - ); - - /** - * Publish the API. This is what gets forwarded to the Actions framework, and to whatever the - * parent of this embeddable is. - */ - const thisApi = useReactEmbeddableApiHandle( - { - ...titlesApi, - unsavedChanges, - resetUnsavedChanges, - serializeState: async () => { - return { - rawState: { - ...serializeTitles(), - content: contentSubject.getValue(), - }, - }; - }, - }, - apiRef, - uuid - ); - - // get state for rendering - const content = useStateFromPublishingSubject(contentSubject); - const viewMode = useInheritedViewMode(thisApi) ?? 'view'; - - return viewMode === 'edit' ? ( - contentSubject.next(value)} - aria-label={i18n.translate('dashboard.test.markdownEditor.ariaLabel', { - defaultMessage: 'Dashboard markdown editor', - })} - height="full" - /> - ) : ( - - {content ?? ''} - - ); - }); - }, -}; - -// ----------------------------------------------------------------------------- -// Register the defined Embeddable Factory - notice that this isn't defined -// on the plugin. Instead, it's a simple imported function. I.E to register an -// Embeddable, you only need the embeddable plugin in your requiredBundles -// ----------------------------------------------------------------------------- -export const registerMarkdownEditorEmbeddable = () => - registerReactEmbeddableFactory(type, markdownEmbeddableFactory); diff --git a/examples/embeddable_examples/tsconfig.json b/examples/embeddable_examples/tsconfig.json index 0f22cccc94483..35f799c8c4e3a 100644 --- a/examples/embeddable_examples/tsconfig.json +++ b/examples/embeddable_examples/tsconfig.json @@ -20,6 +20,7 @@ "@kbn/presentation-publishing", "@kbn/ui-theme", "@kbn/i18n", - "@kbn/es-query" + "@kbn/es-query", + "@kbn/presentation-containers" ] } diff --git a/fleet_packages.json b/fleet_packages.json index 79722187a1b0d..836e65d0e95aa 100644 --- a/fleet_packages.json +++ b/fleet_packages.json @@ -52,7 +52,7 @@ }, { "name": "synthetics", - "version": "1.1.1" + "version": "1.2.1" }, { "name": "security_detection_engine", diff --git a/package.json b/package.json index 2c71bd4dd679f..ccd5182e04a55 100644 --- a/package.json +++ b/package.json @@ -376,6 +376,7 @@ "@kbn/data-view-field-editor-example-plugin": "link:examples/data_view_field_editor_example", "@kbn/data-view-field-editor-plugin": "link:src/plugins/data_view_field_editor", "@kbn/data-view-management-plugin": "link:src/plugins/data_view_management", + "@kbn/data-view-utils": "link:packages/kbn-data-view-utils", "@kbn/data-views-plugin": "link:src/plugins/data_views", "@kbn/data-visualizer-plugin": "link:x-pack/plugins/data_visualizer", "@kbn/dataset-quality-plugin": "link:x-pack/plugins/dataset_quality", diff --git a/packages/core/apps/core-apps-browser-internal/src/status/components/version_header.test.tsx b/packages/core/apps/core-apps-browser-internal/src/status/components/version_header.test.tsx index 8172b705a6ffe..e0eaf9b2144fa 100644 --- a/packages/core/apps/core-apps-browser-internal/src/status/components/version_header.test.tsx +++ b/packages/core/apps/core-apps-browser-internal/src/status/components/version_header.test.tsx @@ -17,6 +17,7 @@ const buildServerVersion = (parts: Partial = {}): ServerVersion = build_number: 9000, build_snapshot: false, build_date: '2023-05-15T23:12:09.000Z', + build_flavor: 'traditional', ...parts, }); diff --git a/packages/core/apps/core-apps-browser-internal/src/status/lib/load_status.test.ts b/packages/core/apps/core-apps-browser-internal/src/status/lib/load_status.test.ts index ed6cc186313f3..92aad0f460e70 100644 --- a/packages/core/apps/core-apps-browser-internal/src/status/lib/load_status.test.ts +++ b/packages/core/apps/core-apps-browser-internal/src/status/lib/load_status.test.ts @@ -21,6 +21,7 @@ const mockedResponse: StatusResponse = { build_number: 12, build_snapshot: false, build_date: '2023-05-15T23:12:09.000Z', + build_flavor: 'traditional', }, status: { overall: { diff --git a/packages/core/status/core-status-common-internal/src/status.ts b/packages/core/status/core-status-common-internal/src/status.ts index 806a3ac56b407..0a3f3ad770fe8 100644 --- a/packages/core/status/core-status-common-internal/src/status.ts +++ b/packages/core/status/core-status-common-internal/src/status.ts @@ -6,6 +6,7 @@ * Side Public License, v 1. */ +import type { BuildFlavor } from '@kbn/config'; import type { ServiceStatusLevelId, ServiceStatus, CoreStatus } from '@kbn/core-status-common'; import type { OpsMetrics } from '@kbn/core-metrics-server'; @@ -34,6 +35,7 @@ export interface ServerVersion { build_hash: string; build_number: number; build_snapshot: boolean; + build_flavor: BuildFlavor; build_date: string; } diff --git a/packages/core/status/core-status-common-internal/tsconfig.json b/packages/core/status/core-status-common-internal/tsconfig.json index c746e7133cd2c..7d31fa090eb0f 100644 --- a/packages/core/status/core-status-common-internal/tsconfig.json +++ b/packages/core/status/core-status-common-internal/tsconfig.json @@ -13,7 +13,8 @@ ], "kbn_references": [ "@kbn/core-status-common", - "@kbn/core-metrics-server" + "@kbn/core-metrics-server", + "@kbn/config" ], "exclude": [ "target/**/*", diff --git a/packages/core/status/core-status-server-internal/src/routes/status.ts b/packages/core/status/core-status-server-internal/src/routes/status.ts index 59c7aa23c51d4..1faa623467b58 100644 --- a/packages/core/status/core-status-server-internal/src/routes/status.ts +++ b/packages/core/status/core-status-server-internal/src/routes/status.ts @@ -156,7 +156,7 @@ const getFullStatusResponse = async ({ }; query: { v8format?: boolean; v7format?: boolean }; }): Promise => { - const { version, buildSha, buildNum, buildDate } = config.packageInfo; + const { version, buildSha, buildNum, buildDate, buildFlavor } = config.packageInfo; const versionWithoutSnapshot = version.replace(SNAPSHOT_POSTFIX, ''); let statusInfo: StatusInfo | LegacyStatusInfo; @@ -186,6 +186,7 @@ const getFullStatusResponse = async ({ build_hash: buildSha, build_number: buildNum, build_snapshot: SNAPSHOT_POSTFIX.test(version), + build_flavor: buildFlavor, build_date: buildDate.toISOString(), }, status: statusInfo, diff --git a/packages/kbn-data-view-utils/README.md b/packages/kbn-data-view-utils/README.md new file mode 100644 index 0000000000000..5912eae9f2b82 --- /dev/null +++ b/packages/kbn-data-view-utils/README.md @@ -0,0 +1,3 @@ +# @kbn/data-view-utils + +Data View utilities. \ No newline at end of file diff --git a/packages/kbn-data-view-utils/index.ts b/packages/kbn-data-view-utils/index.ts new file mode 100644 index 0000000000000..c78869a471cb0 --- /dev/null +++ b/packages/kbn-data-view-utils/index.ts @@ -0,0 +1,9 @@ +/* + * 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 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export * from './src/constants'; diff --git a/packages/kbn-data-view-utils/jest.config.js b/packages/kbn-data-view-utils/jest.config.js new file mode 100644 index 0000000000000..3c0a0a118baaf --- /dev/null +++ b/packages/kbn-data-view-utils/jest.config.js @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +module.exports = { + preset: '@kbn/test', + rootDir: '../..', + roots: ['/packages/kbn-data-view-utils'], +}; diff --git a/packages/kbn-data-view-utils/kibana.jsonc b/packages/kbn-data-view-utils/kibana.jsonc new file mode 100644 index 0000000000000..a5bd7b958e272 --- /dev/null +++ b/packages/kbn-data-view-utils/kibana.jsonc @@ -0,0 +1,5 @@ +{ + "type": "shared-common", + "id": "@kbn/data-view-utils", + "owner": "@elastic/kibana-data-discovery" +} diff --git a/packages/kbn-data-view-utils/package.json b/packages/kbn-data-view-utils/package.json new file mode 100644 index 0000000000000..1bcf593b4c438 --- /dev/null +++ b/packages/kbn-data-view-utils/package.json @@ -0,0 +1,7 @@ +{ + "name": "@kbn/data-view-utils", + "private": true, + "version": "1.0.0", + "license": "SSPL-1.0 OR Elastic License 2.0", + "sideEffects": false +} \ No newline at end of file diff --git a/packages/kbn-data-view-utils/src/constants.ts b/packages/kbn-data-view-utils/src/constants.ts new file mode 100644 index 0000000000000..81759978ef93c --- /dev/null +++ b/packages/kbn-data-view-utils/src/constants.ts @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +/** + * ESQL type constant + */ + +export const ESQL_TYPE = 'esql'; diff --git a/packages/kbn-data-view-utils/tsconfig.json b/packages/kbn-data-view-utils/tsconfig.json new file mode 100644 index 0000000000000..a41af0b7c5017 --- /dev/null +++ b/packages/kbn-data-view-utils/tsconfig.json @@ -0,0 +1,18 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types", + "types": [ + "jest", + "node", + "react" + ] + }, + "include": [ + "**/*.ts", + "**/*.tsx", + ], + "exclude": [ + "target/**/*" + ] +} diff --git a/packages/kbn-esql-utils/src/utils/get_esql_adhoc_dataview.ts b/packages/kbn-esql-utils/src/utils/get_esql_adhoc_dataview.ts index a1866526742cc..e1e599946ef59 100644 --- a/packages/kbn-esql-utils/src/utils/get_esql_adhoc_dataview.ts +++ b/packages/kbn-esql-utils/src/utils/get_esql_adhoc_dataview.ts @@ -6,6 +6,7 @@ * Side Public License, v 1. */ import type { DataViewsPublicPluginStart } from '@kbn/data-views-plugin/public'; +import { ESQL_TYPE } from '@kbn/data-view-utils'; // uses browser sha256 method with fallback if unavailable async function sha256(str: string) { @@ -32,6 +33,7 @@ export async function getESQLAdHocDataview( ) { return await dataViewsService.create({ title: indexPattern, + type: ESQL_TYPE, id: await sha256(`esql-${indexPattern}`), }); } diff --git a/packages/kbn-esql-utils/src/utils/query_parsing_helpers.test.ts b/packages/kbn-esql-utils/src/utils/query_parsing_helpers.test.ts index 8390e059b4db8..7820d6d9cf7d1 100644 --- a/packages/kbn-esql-utils/src/utils/query_parsing_helpers.test.ts +++ b/packages/kbn-esql-utils/src/utils/query_parsing_helpers.test.ts @@ -43,6 +43,11 @@ describe('sql/esql query helpers', () => { 'SELECT * FROM (SELECT woof, miaou FROM "logstash-1234!" GROUP BY woof)' ); expect(idxPattern8).toBe('logstash-1234!'); + + const idxPattern9 = getIndexPatternFromSQLQuery( + 'SELECT * FROM remote_cluster:logs-* WHERE field > 20' + ); + expect(idxPattern9).toBe('remote_cluster:logs-*'); }); }); @@ -71,6 +76,9 @@ describe('sql/esql query helpers', () => { const idxPattern9 = getIndexPatternFromESQLQuery('FROM foo-1, foo-2 [metadata _id]'); expect(idxPattern9).toBe('foo-1, foo-2'); + + const idxPattern10 = getIndexPatternFromESQLQuery('FROM foo-1, remote_cluster:foo-2, foo-3'); + expect(idxPattern10).toBe('foo-1, remote_cluster:foo-2, foo-3'); }); }); diff --git a/packages/kbn-esql-utils/src/utils/query_parsing_helpers.ts b/packages/kbn-esql-utils/src/utils/query_parsing_helpers.ts index 93e7ddbb6ffe9..6f96a0ae445e8 100644 --- a/packages/kbn-esql-utils/src/utils/query_parsing_helpers.ts +++ b/packages/kbn-esql-utils/src/utils/query_parsing_helpers.ts @@ -17,7 +17,7 @@ export function getIndexPatternFromSQLQuery(sqlQuery?: string): string { sql = `${splitFroms[fromsLength - 2]} FROM ${splitFroms[fromsLength - 1]}`; } // case insensitive match for the index pattern - const regex = new RegExp(/FROM\s+([\w*-.!@$^()~;]+)/, 'i'); + const regex = new RegExp(/FROM\s+([(\w*:)?\w*-.!@$^()~;]+)/, 'i'); const matches = sql?.match(regex); if (matches) { return matches[1]; @@ -34,7 +34,7 @@ export function getIndexPatternFromESQLQuery(esql?: string): string { } const parsedString = esql?.replaceAll('`', ''); // case insensitive match for the index pattern - const regex = new RegExp(/FROM\s+([\w*-.!@$^()~;\s]+)/, 'i'); + const regex = new RegExp(/FROM\s+([(\w*:)?\w*-.!@$^()~;\s]+)/, 'i'); const matches = parsedString?.match(regex); if (matches) { return matches[1]?.trim(); diff --git a/packages/kbn-esql-utils/tsconfig.json b/packages/kbn-esql-utils/tsconfig.json index 2fe775fb7d586..b604fa84c1de3 100644 --- a/packages/kbn-esql-utils/tsconfig.json +++ b/packages/kbn-esql-utils/tsconfig.json @@ -18,5 +18,6 @@ "kbn_references": [ "@kbn/data-views-plugin", "@kbn/crypto-browser", + "@kbn/data-view-utils", ] } diff --git a/packages/kbn-guided-onboarding/src/components/landing_page/guide/guide_card.tsx b/packages/kbn-guided-onboarding/src/components/landing_page/guide/guide_card.tsx index 1194fc5a8d259..a9ea5fbab5b6e 100644 --- a/packages/kbn-guided-onboarding/src/components/landing_page/guide/guide_card.tsx +++ b/packages/kbn-guided-onboarding/src/components/landing_page/guide/guide_card.tsx @@ -8,14 +8,7 @@ import React, { Fragment, useCallback, useState } from 'react'; -import { - EuiCard, - EuiFlexGroup, - EuiFlexItem, - EuiIcon, - EuiTextColor, - useEuiTheme, -} from '@elastic/eui'; +import { EuiCard, EuiFlexGroup, EuiIcon, EuiTextColor, useEuiTheme } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { css } from '@emotion/react'; @@ -138,7 +131,7 @@ export const GuideCard = ({ const cardCss = css` position: relative; - height: 125px; + height: 150px; width: 380px; .euiCard__top { margin-block-end: 8px; @@ -149,7 +142,7 @@ export const GuideCard = ({ } @media (min-width: 768px) and (max-width: 1210px) { max-width: 230px; - height: 175px; + height: 200px; justify-content: center; } `; @@ -175,16 +168,12 @@ export const GuideCard = ({ )} {isComplete && ( - - - - - - {i18n.translate('guidedOnboardingPackage.gettingStarted.cards.completeLabel', { - defaultMessage: 'Guide complete', - })} - - + + + {i18n.translate('guidedOnboardingPackage.gettingStarted.cards.completeLabel', { + defaultMessage: 'Guide complete', + })} + )} diff --git a/packages/kbn-language-documentation-popover/src/components/documentation_content.tsx b/packages/kbn-language-documentation-popover/src/components/documentation_content.tsx index 0f24e233a4f28..daf52aba46727 100644 --- a/packages/kbn-language-documentation-popover/src/components/documentation_content.tsx +++ b/packages/kbn-language-documentation-popover/src/components/documentation_content.tsx @@ -10,7 +10,6 @@ import { i18n } from '@kbn/i18n'; import { EuiFlexGroup, EuiFlexItem, - EuiLink, EuiPopoverTitle, EuiText, EuiListGroupItem, @@ -19,6 +18,7 @@ import { EuiFieldSearch, EuiHighlight, EuiSpacer, + EuiLink, } from '@elastic/eui'; import { elementToString } from '../utils/element_to_string'; @@ -38,9 +38,16 @@ interface DocumentationProps { sections?: LanguageDocumentationSections; // if sets to true, allows searching in the markdown description searchInDescription?: boolean; + // if set, a link will appear on the top right corner + linkToDocumentation?: string; } -function DocumentationContent({ language, sections, searchInDescription }: DocumentationProps) { +function DocumentationContent({ + language, + sections, + searchInDescription, + linkToDocumentation, +}: DocumentationProps) { const [selectedSection, setSelectedSection] = useState(); const scrollTargets = useRef>({}); @@ -83,10 +90,28 @@ function DocumentationContent({ language, sections, searchInDescription }: Docum paddingSize="m" data-test-subj="language-documentation-title" > - {i18n.translate('languageDocumentationPopover.header', { - defaultMessage: '{language} reference', - values: { language }, - })} + + + {i18n.translate('languageDocumentationPopover.header', { + defaultMessage: '{language} reference', + values: { language }, + })} + + {linkToDocumentation && ( + + + {i18n.translate('languageDocumentationPopover.documentationLinkLabel', { + defaultMessage: 'View full documentation', + })} + + + )} + ; searchInDescription?: boolean; + linkToDocumentation?: string; } function DocumentationPopover({ @@ -25,6 +32,7 @@ function DocumentationPopover({ sections, buttonProps, searchInDescription, + linkToDocumentation, }: DocumentationPopoverProps) { const [isHelpOpen, setIsHelpOpen] = useState(false); @@ -33,35 +41,42 @@ function DocumentationPopover({ }, [isHelpOpen]); return ( - setIsHelpOpen(false)} - button={ - - - - } + { + setIsHelpOpen(false); + }} > - - + setIsHelpOpen(false)} + button={ + + + + } + > + + + ); } diff --git a/packages/kbn-mock-idp-plugin/server/index.ts b/packages/kbn-mock-idp-plugin/server/index.ts index 81f6713e675fe..33e5556142155 100644 --- a/packages/kbn-mock-idp-plugin/server/index.ts +++ b/packages/kbn-mock-idp-plugin/server/index.ts @@ -6,5 +6,17 @@ * Side Public License, v 1. */ +import { offeringBasedSchema, schema } from '@kbn/config-schema'; + export type { CreateSAMLResponseParams } from './plugin'; export { plugin } from './plugin'; + +export const config = { + schema: schema.object({ + // The plugin should only be enabled in Serverless. + enabled: offeringBasedSchema({ + serverless: schema.boolean({ defaultValue: true }), + options: { defaultValue: false }, + }), + }), +}; diff --git a/packages/kbn-search-connectors/lib/delete_connector_secret.test.ts b/packages/kbn-search-connectors/lib/delete_connector_secret.test.ts new file mode 100644 index 0000000000000..164a37f3ccb57 --- /dev/null +++ b/packages/kbn-search-connectors/lib/delete_connector_secret.test.ts @@ -0,0 +1,39 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; + +import { deleteConnectorSecret } from './delete_connector_secret'; + +describe('deleteConnectorSecret lib function', () => { + const mockClient = { + transport: { + request: jest.fn(), + }, + }; + + beforeEach(() => { + jest.clearAllMocks(); + jest.useFakeTimers(); + }); + + it('should delete a connector secret', async () => { + mockClient.transport.request.mockImplementation(() => ({ + result: 'deleted', + })); + + await expect( + deleteConnectorSecret(mockClient as unknown as ElasticsearchClient, 'secret-id') + ).resolves.toEqual({ result: 'deleted' }); + expect(mockClient.transport.request).toHaveBeenCalledWith({ + method: 'DELETE', + path: '/_connector/_secret/secret-id', + }); + jest.useRealTimers(); + }); +}); diff --git a/packages/kbn-search-connectors/lib/delete_connector_secret.ts b/packages/kbn-search-connectors/lib/delete_connector_secret.ts new file mode 100644 index 0000000000000..d3ecbe8da73f5 --- /dev/null +++ b/packages/kbn-search-connectors/lib/delete_connector_secret.ts @@ -0,0 +1,17 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; +import { ConnectorsAPIUpdateResponse } from '../types/connectors_api'; + +export const deleteConnectorSecret = async (client: ElasticsearchClient, id: string) => { + return await client.transport.request({ + method: 'DELETE', + path: `/_connector/_secret/${id}`, + }); +}; diff --git a/packages/kbn-search-connectors/lib/index.ts b/packages/kbn-search-connectors/lib/index.ts index 3e929d5bc6834..e0a1caea66422 100644 --- a/packages/kbn-search-connectors/lib/index.ts +++ b/packages/kbn-search-connectors/lib/index.ts @@ -11,6 +11,7 @@ export * from './create_connector'; export * from './create_connector_document'; export * from './create_connector_secret'; export * from './delete_connector'; +export * from './delete_connector_secret'; export * from './fetch_connectors'; export * from './fetch_sync_jobs'; export * from './update_filtering'; diff --git a/packages/kbn-text-based-editor/src/text_based_languages_editor.tsx b/packages/kbn-text-based-editor/src/text_based_languages_editor.tsx index 146e020d4fe82..7bdfce427bc21 100644 --- a/packages/kbn-text-based-editor/src/text_based_languages_editor.tsx +++ b/packages/kbn-text-based-editor/src/text_based_languages_editor.tsx @@ -163,7 +163,8 @@ export const TextBasedLanguagesEditor = memo(function TextBasedLanguagesEditor({ const language = getAggregateQueryMode(query); const queryString: string = query[language] ?? ''; const kibana = useKibana(); - const { dataViews, expressions, indexManagementApiService, application } = kibana.services; + const { dataViews, expressions, indexManagementApiService, application, docLinks } = + kibana.services; const [code, setCode] = useState(queryString ?? ''); const [codeOneLiner, setCodeOneLiner] = useState(''); // To make server side errors less "sticky", register the state of the code when submitting @@ -680,6 +681,9 @@ export const TextBasedLanguagesEditor = memo(function TextBasedLanguagesEditor({ language={getLanguageDisplayName(String(language))} sections={documentationSections} searchInDescription + linkToDocumentation={ + language === 'esql' ? docLinks?.links?.query?.queryESQL : '' + } buttonProps={{ color: 'text', size: 's', @@ -815,6 +819,17 @@ export const TextBasedLanguagesEditor = memo(function TextBasedLanguagesEditor({ } }); + // this is fixing a bug between the EUIPopover and the monaco editor + // when the user clicks the editor, we force it to focus and the onDidFocusEditorText + // to fire, the timeout is needed because otherwise it refocuses on the popover icon + // and the user needs to click again the editor. + // IMPORTANT: The popover needs to be wrapped with the EuiOutsideClickDetector component. + editor.onMouseDown(() => { + setTimeout(() => { + editor.focus(); + }, 100); + }); + editor.onDidFocusEditorText(() => { onEditorFocus(); }); @@ -903,6 +918,9 @@ export const TextBasedLanguagesEditor = memo(function TextBasedLanguagesEditor({ language={ String(language) === 'esql' ? 'ES|QL' : String(language).toUpperCase() } + linkToDocumentation={ + language === 'esql' ? docLinks?.links?.query?.queryESQL : '' + } searchInDescription sections={documentationSections} buttonProps={{ diff --git a/packages/presentation/presentation_containers/interfaces/last_saved_state.ts b/packages/presentation/presentation_containers/interfaces/last_saved_state.ts index 0c7e83aef7bf3..7e9519dcbe315 100644 --- a/packages/presentation/presentation_containers/interfaces/last_saved_state.ts +++ b/packages/presentation/presentation_containers/interfaces/last_saved_state.ts @@ -30,7 +30,7 @@ export const getLastSavedStateSubjectForChild = StateType ): PublishingSubject | undefined => { if (!parentApi) return; - const fetchUnsavedChanges = (): StateType | undefined => { + const fetchLastSavedState = (): StateType | undefined => { if (!apiPublishesLastSavedState(parentApi)) return; const rawLastSavedState = parentApi.getLastSavedStateForChild(childId); if (rawLastSavedState === undefined) return; @@ -39,11 +39,11 @@ export const getLastSavedStateSubjectForChild = (fetchUnsavedChanges()); + const lastSavedStateForChild = new BehaviorSubject(fetchLastSavedState()); if (!apiPublishesLastSavedState(parentApi)) return; parentApi.lastSavedState .pipe( - map(() => fetchUnsavedChanges()), + map(() => fetchLastSavedState()), filter((rawLastSavedState) => rawLastSavedState !== undefined) ) .subscribe(lastSavedStateForChild); diff --git a/packages/presentation/presentation_containers/interfaces/presentation_container.ts b/packages/presentation/presentation_containers/interfaces/presentation_container.ts index c5c558dfe6227..a92c5af7cbd0a 100644 --- a/packages/presentation/presentation_containers/interfaces/presentation_container.ts +++ b/packages/presentation/presentation_containers/interfaces/presentation_container.ts @@ -11,11 +11,15 @@ import { PublishesLastSavedState } from './last_saved_state'; export interface PanelPackage { panelType: string; - initialState: unknown; + initialState?: object; } export type PresentationContainer = Partial & PublishesLastSavedState & { + addNewPanel: ( + panel: PanelPackage, + displaySuccessMessage?: boolean + ) => Promise; registerPanelApi: ( panelId: string, panelApi: ApiType @@ -31,7 +35,8 @@ export const apiIsPresentationContainer = ( return Boolean( (unknownApi as PresentationContainer)?.removePanel !== undefined && (unknownApi as PresentationContainer)?.registerPanelApi !== undefined && - (unknownApi as PresentationContainer)?.replacePanel !== undefined + (unknownApi as PresentationContainer)?.replacePanel !== undefined && + (unknownApi as PresentationContainer)?.addNewPanel !== undefined ); }; diff --git a/packages/presentation/presentation_containers/mocks.ts b/packages/presentation/presentation_containers/mocks.ts index 5ac45fc6049c2..6d4610075c9d5 100644 --- a/packages/presentation/presentation_containers/mocks.ts +++ b/packages/presentation/presentation_containers/mocks.ts @@ -11,9 +11,10 @@ import { PresentationContainer } from './interfaces/presentation_container'; export const getMockPresentationContainer = (): PresentationContainer => { return { - registerPanelApi: jest.fn(), removePanel: jest.fn(), + addNewPanel: jest.fn(), replacePanel: jest.fn(), + registerPanelApi: jest.fn(), lastSavedState: new Subject(), getLastSavedStateForChild: jest.fn(), }; diff --git a/packages/presentation/presentation_publishing/index.ts b/packages/presentation/presentation_publishing/index.ts index 61209d6635729..80d2c5870efbe 100644 --- a/packages/presentation/presentation_publishing/index.ts +++ b/packages/presentation/presentation_publishing/index.ts @@ -7,6 +7,10 @@ */ export interface EmbeddableApiContext { + /** + * TODO: once all actions are entirely decoupled from the embeddable system, this key should be renamed to "api" + * to reflect the fact that this context could contain any api. + */ embeddable: unknown; } diff --git a/src/cli/serve/serve.js b/src/cli/serve/serve.js index 82dafb1ea3a12..ef1092ad892c0 100644 --- a/src/cli/serve/serve.js +++ b/src/cli/serve/serve.js @@ -112,12 +112,11 @@ export function applyConfigOverrides(rawConfig, opts, extraCliOptions) { if (opts.serverless) { setServerlessKibanaDevServiceAccountIfPossible(get, set, opts); - // Load mock identity provider plugin and configure realm if supported (ES only supports SAML when run with SSL) + // Configure realm if supported (ES only supports SAML when run with SSL) if (opts.ssl && MOCK_IDP_PLUGIN_SUPPORTED) { // Ensure the plugin is loaded in dynamically to exclude from production build // eslint-disable-next-line import/no-dynamic-require const { MOCK_IDP_REALM_NAME } = require(MOCK_IDP_PLUGIN_PATH); - const pluginPath = resolve(require.resolve(MOCK_IDP_PLUGIN_PATH), '..'); if (has('server.basePath')) { console.log( @@ -126,7 +125,6 @@ export function applyConfigOverrides(rawConfig, opts, extraCliOptions) { _.unset(rawConfig, 'server.basePath'); } - set('plugins.paths', _.compact([].concat(get('plugins.paths'), pluginPath))); set(`xpack.security.authc.providers.saml.${MOCK_IDP_REALM_NAME}`, { order: Number.MAX_SAFE_INTEGER, realm: MOCK_IDP_REALM_NAME, diff --git a/src/core/server/integration_tests/status/routes/status.test.ts b/src/core/server/integration_tests/status/routes/status.test.ts index 755b9fc9b46f6..29a55743dd0d5 100644 --- a/src/core/server/integration_tests/status/routes/status.test.ts +++ b/src/core/server/integration_tests/status/routes/status.test.ts @@ -210,6 +210,7 @@ describe('GET /api/status', () => { build_number: 1234, build_snapshot: true, build_date: new Date('2023-05-15T23:12:09.000Z').toISOString(), + build_flavor: 'traditional', }); const metricsMockValue = await firstValueFrom(metrics.getOpsMetrics$()); expect(result.body.metrics).toEqual({ diff --git a/src/dev/build/args.test.ts b/src/dev/build/args.test.ts index e379ae02ceba3..1bb50cf3cd9c1 100644 --- a/src/dev/build/args.test.ts +++ b/src/dev/build/args.test.ts @@ -33,6 +33,7 @@ it('build default and oss dist for current platform, without packages, by defaul "createDebPackage": false, "createDockerCloud": false, "createDockerContexts": true, + "createDockerFIPS": false, "createDockerServerless": false, "createDockerUBI": false, "createDockerUbuntu": false, @@ -72,6 +73,7 @@ it('builds packages if --all-platforms is passed', () => { "createDebPackage": true, "createDockerCloud": true, "createDockerContexts": true, + "createDockerFIPS": true, "createDockerServerless": true, "createDockerUBI": true, "createDockerUbuntu": true, @@ -111,6 +113,7 @@ it('limits packages if --rpm passed with --all-platforms', () => { "createDebPackage": false, "createDockerCloud": false, "createDockerContexts": true, + "createDockerFIPS": false, "createDockerServerless": false, "createDockerUBI": false, "createDockerUbuntu": false, @@ -150,6 +153,7 @@ it('limits packages if --deb passed with --all-platforms', () => { "createDebPackage": true, "createDockerCloud": false, "createDockerContexts": true, + "createDockerFIPS": false, "createDockerServerless": false, "createDockerUBI": false, "createDockerUbuntu": false, @@ -190,6 +194,7 @@ it('limits packages if --docker passed with --all-platforms', () => { "createDebPackage": false, "createDockerCloud": true, "createDockerContexts": true, + "createDockerFIPS": true, "createDockerServerless": true, "createDockerUBI": true, "createDockerUbuntu": true, @@ -237,6 +242,7 @@ it('limits packages if --docker passed with --skip-docker-ubi and --all-platform "createDebPackage": false, "createDockerCloud": true, "createDockerContexts": true, + "createDockerFIPS": true, "createDockerServerless": true, "createDockerUBI": false, "createDockerUbuntu": true, @@ -277,6 +283,7 @@ it('limits packages if --all-platforms passed with --skip-docker-ubuntu', () => "createDebPackage": true, "createDockerCloud": true, "createDockerContexts": true, + "createDockerFIPS": true, "createDockerServerless": true, "createDockerUBI": true, "createDockerUbuntu": false, @@ -305,3 +312,44 @@ it('limits packages if --all-platforms passed with --skip-docker-ubuntu', () => } `); }); + +it('limits packages if --all-platforms passed with --skip-docker-fips', () => { + expect(readCliArgs(['node', 'scripts/build', '--all-platforms', '--skip-docker-fips'])) + .toMatchInlineSnapshot(` + Object { + "buildOptions": Object { + "buildCanvasShareableRuntime": true, + "createArchives": true, + "createCdnAssets": true, + "createDebPackage": true, + "createDockerCloud": true, + "createDockerContexts": true, + "createDockerFIPS": false, + "createDockerServerless": true, + "createDockerUBI": true, + "createDockerUbuntu": true, + "createGenericFolders": true, + "createPlatformFolders": true, + "createRpmPackage": true, + "dockerContextUseLocalArtifact": null, + "dockerCrossCompile": false, + "dockerNamespace": null, + "dockerPush": false, + "dockerTag": null, + "dockerTagQualifier": null, + "downloadCloudDependencies": true, + "downloadFreshNode": true, + "eprRegistry": "snapshot", + "initialize": true, + "isRelease": false, + "targetAllPlatforms": true, + "versionQualifier": "", + "withExamplePlugins": false, + "withTestPlugins": false, + }, + "log": , + "showHelp": false, + "unknownFlags": Array [], + } + `); +}); diff --git a/src/dev/build/args.ts b/src/dev/build/args.ts index 8f16d5ce571c0..0996a8688ef22 100644 --- a/src/dev/build/args.ts +++ b/src/dev/build/args.ts @@ -33,6 +33,7 @@ export function readCliArgs(argv: string[]) { 'skip-docker-ubuntu', 'skip-docker-cloud', 'skip-docker-serverless', + 'skip-docker-fips', 'release', 'skip-node-download', 'skip-cloud-dependencies-download', @@ -143,6 +144,7 @@ export function readCliArgs(argv: string[]) { isOsPackageDesired('docker-images') && !Boolean(flags['skip-docker-serverless']), createDockerUBI: isOsPackageDesired('docker-images') && !Boolean(flags['skip-docker-ubi']), createDockerContexts: !Boolean(flags['skip-docker-contexts']), + createDockerFIPS: isOsPackageDesired('docker-images') && !Boolean(flags['skip-docker-fips']), targetAllPlatforms: Boolean(flags['all-platforms']), eprRegistry: flags['epr-registry'], buildCanvasShareableRuntime: !Boolean(flags['skip-canvas-shareable-runtime']), diff --git a/src/dev/build/build_distributables.ts b/src/dev/build/build_distributables.ts index b324780e15672..ab9731e4ba112 100644 --- a/src/dev/build/build_distributables.ts +++ b/src/dev/build/build_distributables.ts @@ -34,6 +34,7 @@ export interface BuildOptions { createDockerCloud: boolean; createDockerServerless: boolean; createDockerContexts: boolean; + createDockerFIPS: boolean; versionQualifier: string | undefined; targetAllPlatforms: boolean; withExamplePlugins: boolean; @@ -163,6 +164,11 @@ export async function buildDistributables(log: ToolingLog, options: BuildOptions await run(Tasks.CreateDockerServerless); } + if (options.createDockerFIPS) { + // control w/ --docker-images or --skip-docker-fips or --skip-os-packages + await run(Tasks.CreateDockerFIPS); + } + if (options.createDockerContexts) { // control w/ --skip-docker-contexts await run(Tasks.CreateDockerContexts); diff --git a/src/dev/build/cli.ts b/src/dev/build/cli.ts index 09fd081136786..9a967e1cc85c9 100644 --- a/src/dev/build/cli.ts +++ b/src/dev/build/cli.ts @@ -45,6 +45,7 @@ if (showHelp) { --skip-canvas-shareable-runtime {dim Don't build the Canvas shareable runtime} --skip-docker-ubi {dim Don't build the docker ubi image} --skip-docker-ubuntu {dim Don't build the docker ubuntu 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} --skip-node-download {dim Reuse existing downloads of node.js} 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 7cb9697364c75..e623dd86b9d6f 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 @@ -137,6 +137,20 @@ export const CreateDockerCloud: Task = { }, }; +export const CreateDockerFIPS: Task = { + description: 'Creating Docker FIPS image', + + async run(config, log, build) { + await runDockerGenerator(config, log, build, { + architecture: 'x64', + baseImage: 'ubi', + context: false, + image: true, + fips: true, + }); + }, +}; + export const CreateDockerContexts: Task = { description: 'Creating Docker build contexts', @@ -170,5 +184,11 @@ export const CreateDockerContexts: Task = { context: true, image: false, }); + await runDockerGenerator(config, log, build, { + baseImage: 'ubi', + context: true, + image: false, + fips: true, + }); }, }; diff --git a/src/dev/build/tasks/os_packages/docker_generator/bundle_dockerfiles.ts b/src/dev/build/tasks/os_packages/docker_generator/bundle_dockerfiles.ts index 7df5b21bd562a..0dac00084df0e 100644 --- a/src/dev/build/tasks/os_packages/docker_generator/bundle_dockerfiles.ts +++ b/src/dev/build/tasks/os_packages/docker_generator/bundle_dockerfiles.ts @@ -54,6 +54,12 @@ export async function bundleDockerFiles(config: Config, log: ToolingLog, scope: await write(resolve(dockerFilesBuildDir, template), output); } } + if (scope.fips) { + await copyAll( + resolve(scope.dockerBuildDir, 'openssl'), + resolve(dockerFilesBuildDir, 'openssl') + ); + } // Compress dockerfiles dir created inside // docker build dir as output it as a target diff --git a/src/dev/build/tasks/os_packages/docker_generator/resources/fips/openssl/nodejs.cnf b/src/dev/build/tasks/os_packages/docker_generator/resources/fips/openssl/nodejs.cnf new file mode 100644 index 0000000000000..bd8fece6674d7 --- /dev/null +++ b/src/dev/build/tasks/os_packages/docker_generator/resources/fips/openssl/nodejs.cnf @@ -0,0 +1,28 @@ +########################################################################## +## ## +## This OpenSSL config is only loaded when running Kibana in FIPS mode. ## +## ## +## See: ## +## https://github.com/openssl/openssl/blob/openssl-3.0/README-FIPS.md ## +## https://www.openssl.org/docs/man3.0/man7/fips_module.html ## +## ## +########################################################################## + +nodejs_conf = nodejs_init +.include /usr/local/ssl/fipsmodule.cnf + +[nodejs_init] +providers = provider_sect +alg_section = algorithm_sect + +[provider_sect] +default = default_sect +# The fips section name should match the section name inside the +# included fipsmodule.cnf. +fips = fips_sect + +[default_sect] +activate = 1 + +[algorithm_sect] +default_properties = fips=yes \ No newline at end of file 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 16c48ad492187..cf2ddd34913b8 100644 --- a/src/dev/build/tasks/os_packages/docker_generator/run.ts +++ b/src/dev/build/tasks/os_packages/docker_generator/run.ts @@ -36,6 +36,7 @@ export async function runDockerGenerator( cloud?: boolean; serverless?: boolean; dockerBuildDate?: string; + fips?: boolean; } ) { let baseImageName = ''; @@ -47,6 +48,7 @@ export async function runDockerGenerator( if (flags.ironbank) imageFlavor += '-ironbank'; if (flags.cloud) imageFlavor += '-cloud'; if (flags.serverless) imageFlavor += '-serverless'; + if (flags.fips) imageFlavor += '-fips'; // General docker var config const license = 'Elastic License'; @@ -111,6 +113,7 @@ export async function runDockerGenerator( architecture: flags.architecture, revision: config.getBuildSha(), publicArtifactSubdomain, + fips: flags.fips, }; type HostArchitectureToDocker = Record; @@ -148,6 +151,14 @@ export async function runDockerGenerator( dockerBuildDir ); + // Copy fips related resources + if (flags.fips) { + await copyAll( + config.resolveFromRepo('src/dev/build/tasks/os_packages/docker_generator/resources/fips'), + dockerBuildDir + ); + } + // Build docker image into the target folder // In order to do this we just call the file we // created from the templates/build_docker_sh.template.js 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 edd0aed87e281..7734c347edfaa 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 @@ -33,4 +33,5 @@ export interface TemplateContext { ironbank?: boolean; revision: string; architecture?: string; + fips?: 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 25f4345ffbcc3..b02efe3f5b5b3 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 @@ -61,7 +61,7 @@ EXPOSE 5601 RUN for iter in {1..10}; do \ {{packageManager}} update --setopt=tsflags=nodocs -y && \ {{packageManager}} install --setopt=tsflags=nodocs -y \ - fontconfig freetype shadow-utils nss findutils && \ + fontconfig freetype shadow-utils nss findutils {{#fips}}perl make gcc tar {{/fips}}&& \ {{packageManager}} clean all && exit_code=0 && break || exit_code=$? && echo "{{packageManager}} error: retry $iter in 10s" && \ sleep 10; \ done; \ @@ -112,6 +112,37 @@ COPY --from=builder --chown=1000:0 /usr/share/kibana /usr/share/kibana COPY --from=builder --chown=0:0 /opt /opt {{/cloud}} WORKDIR /usr/share/kibana +{{#fips}} + +# OpenSSL requires specific versions that are FIPS certified. Further, the FIPS modules +# need to be compiled on the machine to pass its own self validation on startup. +# +# See: +# https://github.com/openssl/openssl/blob/openssl-3.0/README-FIPS.md +# https://www.openssl.org/docs/man3.0/man7/fips_module.html + +# Ideally we would handle this in the builder step, but make is installing over the OS version +# of OpenSSL and requires linking of many submodules. +RUN set -e ; \ + curl --retry 8 -S -L -O https://www.openssl.org/source/openssl-3.0.8.tar.gz ; \ + curl --retry 8 -S -L -O https://www.openssl.org/source/openssl-3.0.8.tar.gz.sha256 ; \ + echo "$(cat openssl-3.0.8.tar.gz.sha256) openssl-3.0.8.tar.gz" | sha256sum -c ; \ + tar -zxf openssl-3.0.8.tar.gz ; \ + rm -rf openssl-3.0.8.tar* ; \ + cd /usr/share/kibana/openssl-3.0.8 ; \ + ./Configure enable-fips ; \ + make -j $(nproc) ; \ + make install ; \ + ldconfig /usr/local/lib64/ ; \ + chown -R 1000:0 /usr/share/kibana/openssl-3.0.8 + +# Enable FIPS for Kibana only. In the future we can override OS wide with ENV OPENSSL_CONF +RUN echo -e '\n--enable-fips' >> config/node.options +RUN echo '--openssl-config=/usr/share/kibana/openssl-3.0.8/nodejs.cnf' >> config/node.options +COPY --chown=1000:0 openssl/nodejs.cnf /usr/share/kibana/openssl-3.0.8/nodejs.cnf +ENV OPENSSL_MODULES=/usr/local/lib64/ossl-modules + +{{/fips}} RUN ln -s /usr/share/kibana /opt/kibana {{! Please notify @elastic/kibana-security if you want to remove or change this environment variable. }} @@ -127,7 +158,7 @@ COPY --chown=1000:0 config/serverless.es.yml /usr/share/kibana/config/serverless COPY --chown=1000:0 config/serverless.oblt.yml /usr/share/kibana/config/serverless.oblt.yml COPY --chown=1000:0 config/serverless.security.yml /usr/share/kibana/config/serverless.security.yml # Supportability enhancement: enable capturing heap snapshots. See https://nodejs.org/api/cli.html#--heapsnapshot-signalsignal -RUN echo '\n--heapsnapshot-signal=SIGUSR2' >> config/node.options +RUN echo -e '\n--heapsnapshot-signal=SIGUSR2' >> config/node.options RUN echo '--diagnostic-dir=./data' >> config/node.options {{/serverless}} {{^opensslLegacyProvider}} 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 57fc4d93a760a..dd35323808d51 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 @@ -19,7 +19,7 @@ function generator(options: TemplateContext) { packageManager: options.baseImage === 'ubi' ? 'microdnf' : 'apt-get', ubi: options.baseImage === 'ubi', ubuntu: options.baseImage === 'ubuntu', - opensslLegacyProvider: !(options.cloud || options.serverless), + opensslLegacyProvider: !(options.cloud || options.serverless || options.fips), ...options, }); } diff --git a/src/plugins/dashboard/public/dashboard_app/top_nav/add_panel_action_menu_items.test.ts b/src/plugins/dashboard/public/dashboard_app/top_nav/add_panel_action_menu_items.test.ts index 024a7518aba0c..aa8474a0879cc 100644 --- a/src/plugins/dashboard/public/dashboard_app/top_nav/add_panel_action_menu_items.test.ts +++ b/src/plugins/dashboard/public/dashboard_app/top_nav/add_panel_action_menu_items.test.ts @@ -6,6 +6,7 @@ * Side Public License, v 1. */ +import { getMockPresentationContainer } from '@kbn/presentation-containers/mocks'; import { getAddPanelActionMenuItems } from './add_panel_action_menu_items'; describe('getAddPanelActionMenuItems', () => { @@ -21,7 +22,11 @@ describe('getAddPanelActionMenuItems', () => { execute: jest.fn(), }, ]; - const items = getAddPanelActionMenuItems(registeredActions, jest.fn(), jest.fn(), jest.fn()); + const items = getAddPanelActionMenuItems( + getMockPresentationContainer(), + registeredActions, + jest.fn() + ); expect(items).toStrictEqual([ { 'data-test-subj': 'create-action-Action name', @@ -34,7 +39,7 @@ describe('getAddPanelActionMenuItems', () => { }); it('returns empty array if no actions have been registered', async () => { - const items = getAddPanelActionMenuItems([], jest.fn(), jest.fn(), jest.fn()); + const items = getAddPanelActionMenuItems(getMockPresentationContainer(), [], jest.fn()); expect(items).toStrictEqual([]); }); }); diff --git a/src/plugins/dashboard/public/dashboard_app/top_nav/add_panel_action_menu_items.ts b/src/plugins/dashboard/public/dashboard_app/top_nav/add_panel_action_menu_items.ts index 3df8343887982..a6435579ff286 100644 --- a/src/plugins/dashboard/public/dashboard_app/top_nav/add_panel_action_menu_items.ts +++ b/src/plugins/dashboard/public/dashboard_app/top_nav/add_panel_action_menu_items.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ import type { ActionExecutionContext, Action } from '@kbn/ui-actions-plugin/public'; -import type { EmbeddableFactory } from '@kbn/embeddable-plugin/public'; +import { PresentationContainer } from '@kbn/presentation-containers'; import { addPanelMenuTrigger } from '../../triggers'; const onAddPanelActionClick = @@ -27,16 +27,14 @@ const onAddPanelActionClick = }; export const getAddPanelActionMenuItems = ( + api: PresentationContainer, actions: Array> | undefined, - createNewEmbeddable: (embeddableFactory: EmbeddableFactory) => void, - deleteEmbeddable: (embeddableId: string) => void, closePopover: () => void ) => { return ( actions?.map((item) => { const context = { - createNewEmbeddable, - deleteEmbeddable, + embeddable: api, trigger: addPanelMenuTrigger, }; const actionName = item.getDisplayName(context); diff --git a/src/plugins/dashboard/public/dashboard_app/top_nav/dashboard_editing_toolbar.tsx b/src/plugins/dashboard/public/dashboard_app/top_nav/dashboard_editing_toolbar.tsx index e39e227da0643..579d6d17d3a94 100644 --- a/src/plugins/dashboard/public/dashboard_app/top_nav/dashboard_editing_toolbar.tsx +++ b/src/plugins/dashboard/public/dashboard_app/top_nav/dashboard_editing_toolbar.tsx @@ -11,9 +11,7 @@ import { METRIC_TYPE } from '@kbn/analytics'; import { useEuiTheme } from '@elastic/eui'; import { AddFromLibraryButton, Toolbar, ToolbarButton } from '@kbn/shared-ux-button-toolbar'; -import { EmbeddableFactory, EmbeddableInput } from '@kbn/embeddable-plugin/public'; import { BaseVisType, VisTypeAlias } from '@kbn/visualizations-plugin/public'; -import { isExplicitInputWithAttributes } from '@kbn/embeddable-plugin/public'; import { getCreateVisualizationButtonTitle } from '../_dashboard_app_strings'; import { EditorMenu } from './editor_menu'; @@ -21,13 +19,11 @@ import { useDashboardAPI } from '../dashboard_app'; import { pluginServices } from '../../services/plugin_services'; import { ControlsToolbarButton } from './controls_toolbar_button'; import { DASHBOARD_UI_METRIC_ID } from '../../dashboard_constants'; -import { dashboardReplacePanelActionStrings } from '../../dashboard_actions/_dashboard_actions_strings'; export function DashboardEditingToolbar({ isDisabled }: { isDisabled?: boolean }) { const { usageCollection, data: { search }, - notifications: { toasts }, embeddable: { getStateTransfer }, visualizations: { getAliases: getVisTypeAliases }, } = pluginServices.getServices(); @@ -85,74 +81,9 @@ export function DashboardEditingToolbar({ isDisabled }: { isDisabled?: boolean } * initialInput: Optional, use it in case you want to pass your own input to the factory * dismissNotification: Optional, if not passed a toast will appear in the dashboard */ - const createNewEmbeddable = useCallback( - async ( - embeddableFactory: EmbeddableFactory, - initialInput?: Partial, - dismissNotification?: boolean - ) => { - if (trackUiMetric) { - trackUiMetric(METRIC_TYPE.CLICK, embeddableFactory.type); - } - - let explicitInput: Partial; - let attributes: unknown; - try { - if (initialInput) { - explicitInput = initialInput; - } else { - const explicitInputReturn = await embeddableFactory.getExplicitInput( - undefined, - dashboard - ); - if (isExplicitInputWithAttributes(explicitInputReturn)) { - explicitInput = explicitInputReturn.newInput; - attributes = explicitInputReturn.attributes; - } else { - explicitInput = explicitInputReturn; - } - } - } catch (e) { - // error likely means user canceled embeddable creation - return; - } - - const newEmbeddable = await dashboard.addNewEmbeddable( - embeddableFactory.type, - explicitInput, - attributes - ); - - if (newEmbeddable) { - dashboard.setScrollToPanelId(newEmbeddable.id); - dashboard.setHighlightPanelId(newEmbeddable.id); - - if (!dismissNotification) { - toasts.addSuccess({ - title: dashboardReplacePanelActionStrings.getSuccessMessage(newEmbeddable.getTitle()), - 'data-test-subj': 'addEmbeddableToDashboardSuccess', - }); - } - } - return newEmbeddable; - }, - [trackUiMetric, dashboard, toasts] - ); - - const deleteEmbeddable = useCallback( - (embeddableId: string) => { - dashboard.removeEmbeddable(embeddableId); - }, - [dashboard] - ); const extraButtons = [ - , + , dashboard.addFromLibrary()} size="s" diff --git a/src/plugins/dashboard/public/dashboard_app/top_nav/editor_menu.tsx b/src/plugins/dashboard/public/dashboard_app/top_nav/editor_menu.tsx index 050b3ed818877..7df2dec31ae90 100644 --- a/src/plugins/dashboard/public/dashboard_app/top_nav/editor_menu.tsx +++ b/src/plugins/dashboard/public/dashboard_app/top_nav/editor_menu.tsx @@ -17,25 +17,15 @@ import { useEuiTheme, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import { ToolbarPopover } from '@kbn/shared-ux-button-toolbar'; import type { Action } from '@kbn/ui-actions-plugin/public'; +import { ToolbarPopover } from '@kbn/shared-ux-button-toolbar'; +import { PresentationContainer } from '@kbn/presentation-containers'; import { type BaseVisType, VisGroups, type VisTypeAlias } from '@kbn/visualizations-plugin/public'; import type { EmbeddableFactory } from '@kbn/embeddable-plugin/public'; import { pluginServices } from '../../services/plugin_services'; import { DASHBOARD_APP_ID } from '../../dashboard_constants'; import { ADD_PANEL_TRIGGER } from '../../triggers'; import { getAddPanelActionMenuItems } from './add_panel_action_menu_items'; - -interface Props { - isDisabled?: boolean; - /** Handler for creating new visualization of a specified type */ - createNewVisType: (visType: BaseVisType | VisTypeAlias) => () => void; - /** Handler for creating a new embeddable of a specified type */ - createNewEmbeddable: (embeddableFactory: EmbeddableFactory) => void; - /** Handler for deleting an embeddable */ - deleteEmbeddable: (embeddableId: string) => void; -} - interface FactoryGroup { id: string; appName: string; @@ -51,10 +41,14 @@ interface UnwrappedEmbeddableFactory { export const EditorMenu = ({ createNewVisType, - createNewEmbeddable, - deleteEmbeddable, isDisabled, -}: Props) => { + api, +}: { + api: PresentationContainer; + isDisabled?: boolean; + /** Handler for creating new visualization of a specified type */ + createNewVisType: (visType: BaseVisType | VisTypeAlias) => () => void; +}) => { const isMounted = useRef(false); const { embeddable, @@ -148,16 +142,15 @@ export const EditorMenu = ({ // Retrieve ADD_PANEL_TRIGGER actions useEffect(() => { async function loadPanelActions() { - const registeredActions = await uiActions?.getTriggerCompatibleActions?.( - ADD_PANEL_TRIGGER, - {} - ); + const registeredActions = await uiActions?.getTriggerCompatibleActions?.(ADD_PANEL_TRIGGER, { + embeddable: api, + }); if (isMounted.current) { setAddPanelActions(registeredActions); } } loadPanelActions(); - }, [uiActions]); + }, [uiActions, api]); factories.forEach(({ factory }) => { const { grouping } = factory; @@ -249,7 +242,7 @@ export const EditorMenu = ({ toolTipContent, onClick: async () => { closePopover(); - createNewEmbeddable(factory); + api.addNewPanel({ panelType: factory.type }, true); }, 'data-test-subj': `createNew-${factory.type}`, }; @@ -274,12 +267,7 @@ export const EditorMenu = ({ })), ...promotedVisTypes.map(getVisTypeMenuItem), - ...getAddPanelActionMenuItems( - addPanelActions, - createNewEmbeddable, - deleteEmbeddable, - closePopover - ), + ...getAddPanelActionMenuItems(api, addPanelActions, closePopover), ]; if (aggsBasedVisTypes.length > 0) { initialPanelItems.push({ diff --git a/src/plugins/dashboard/public/dashboard_container/embeddable/api/run_save_functions.tsx b/src/plugins/dashboard/public/dashboard_container/embeddable/api/run_save_functions.tsx index 66c52f14a0002..75fd959c8e571 100644 --- a/src/plugins/dashboard/public/dashboard_container/embeddable/api/run_save_functions.tsx +++ b/src/plugins/dashboard/public/dashboard_container/embeddable/api/run_save_functions.tsx @@ -14,7 +14,9 @@ import { showSaveModal } from '@kbn/saved-objects-plugin/public'; import { cloneDeep } from 'lodash'; import React from 'react'; import { batch } from 'react-redux'; -import { DashboardContainerInput } from '../../../../common'; + +import { EmbeddableInput, isReferenceOrValueEmbeddable } from '@kbn/embeddable-plugin/public'; +import { DashboardContainerInput, DashboardPanelMap } from '../../../../common'; import { DASHBOARD_CONTENT_ID, SAVED_OBJECT_POST_TIME } from '../../../dashboard_constants'; import { SaveDashboardReturn, @@ -185,7 +187,8 @@ export async function runQuickSave(this: DashboardContainer) { if (managed) return; const nextPanels = await serializeAllPanelState(this); - let stateToSave: SavedDashboardInput = { ...currentState, panels: nextPanels }; + const dashboardStateToSave: DashboardContainerInput = { ...currentState, panels: nextPanels }; + let stateToSave: SavedDashboardInput = dashboardStateToSave; let persistableControlGroupInput: PersistableControlGroupInput | undefined; if (this.controlGroup) { persistableControlGroupInput = this.controlGroup.getPersistableInput(); @@ -198,7 +201,7 @@ export async function runQuickSave(this: DashboardContainer) { saveOptions: {}, }); - this.dispatch.setLastSavedInput(currentState); + this.dispatch.setLastSavedInput(dashboardStateToSave); this.lastSavedState.next(); if (this.controlGroup && persistableControlGroupInput) { this.controlGroup.dispatch.setLastSavedInput(persistableControlGroupInput); @@ -241,12 +244,38 @@ export async function runClone(this: DashboardContainer) { }; } + const isManaged = this.getState().componentState.managed; + const newPanels = await (async () => { + if (!isManaged) return currentState.panels; + + // this is a managed dashboard - unlink all by reference embeddables on clone + const unlinkedPanels: DashboardPanelMap = {}; + for (const [panelId, panel] of Object.entries(currentState.panels)) { + const child = this.getChild(panelId); + if ( + child && + isReferenceOrValueEmbeddable(child) && + child.inputIsRefType(child.getInput() as EmbeddableInput) + ) { + const valueTypeInput = await child.getInputAsValueType(); + unlinkedPanels[panelId] = { + ...panel, + explicitInput: valueTypeInput, + }; + continue; + } + unlinkedPanels[panelId] = panel; + } + return unlinkedPanels; + })(); + const saveResult = await saveDashboardState({ saveOptions: { saveAsCopy: true, }, currentState: { ...stateToSave, + panels: newPanels, title: newTitle, }, }); diff --git a/src/plugins/dashboard/public/dashboard_container/embeddable/dashboard_container.tsx b/src/plugins/dashboard/public/dashboard_container/embeddable/dashboard_container.tsx index 600ee15da2221..e58e8597500dd 100644 --- a/src/plugins/dashboard/public/dashboard_container/embeddable/dashboard_container.tsx +++ b/src/plugins/dashboard/public/dashboard_container/embeddable/dashboard_container.tsx @@ -6,6 +6,7 @@ * Side Public License, v 1. */ +import { v4 } from 'uuid'; import { omit } from 'lodash'; import React, { createContext, useContext } from 'react'; import ReactDOM from 'react-dom'; @@ -20,6 +21,8 @@ import type { DataView } from '@kbn/data-views-plugin/public'; import { reportPerformanceMetricEvent } from '@kbn/ebt-tools'; import { Container, + EmbeddableFactoryNotFoundError, + isExplicitInputWithAttributes, DefaultEmbeddableApi, PanelNotFoundError, ReactEmbeddableParentContext, @@ -30,8 +33,9 @@ import { type EmbeddableOutput, type IEmbeddable, } from '@kbn/embeddable-plugin/public'; -import type { Filter, Query, TimeRange } from '@kbn/es-query'; +import { METRIC_TYPE } from '@kbn/analytics'; import { I18nProvider } from '@kbn/i18n-react'; +import type { Filter, Query, TimeRange } from '@kbn/es-query'; import { KibanaThemeProvider } from '@kbn/kibana-react-plugin/public'; import { PanelPackage } from '@kbn/presentation-containers'; import { ReduxEmbeddableTools, ReduxToolsPackage } from '@kbn/presentation-util-plugin/public'; @@ -40,7 +44,13 @@ import { ExitFullScreenButtonKibanaProvider } from '@kbn/shared-ux-button-exit-f import { DashboardLocatorParams, DASHBOARD_CONTAINER_TYPE } from '../..'; import { DashboardContainerInput, DashboardPanelState } from '../../../common'; -import { DASHBOARD_APP_ID, DASHBOARD_LOADED_EVENT } from '../../dashboard_constants'; +import { + DASHBOARD_APP_ID, + DASHBOARD_LOADED_EVENT, + DASHBOARD_UI_METRIC_ID, + DEFAULT_PANEL_HEIGHT, + DEFAULT_PANEL_WIDTH, +} from '../../dashboard_constants'; import { DashboardAnalyticsService } from '../../services/analytics/types'; import { DashboardCapabilitiesService } from '../../services/dashboard_capabilities/types'; import { pluginServices } from '../../services/plugin_services'; @@ -70,6 +80,8 @@ import { dashboardTypeDisplayLowercase, dashboardTypeDisplayName, } from './dashboard_container_factory'; +import { dashboardReplacePanelActionStrings } from '../../dashboard_actions/_dashboard_actions_strings'; +import { panelPlacementStrategies } from '../component/panel_placement/place_new_panel_strategies'; export interface InheritedChildInput { filters: Filter[]; @@ -142,6 +154,9 @@ export class DashboardContainer private chrome; private customBranding; + private trackPanelAddMetric: + | ((type: string, eventNames: string | string[], count?: number | undefined) => void) + | undefined; // new embeddable framework public reactEmbeddableChildren: BehaviorSubject<{ [key: string]: DefaultEmbeddableApi }> = new BehaviorSubject<{ [key: string]: DefaultEmbeddableApi }>({}); @@ -156,9 +171,9 @@ export class DashboardContainer initialComponentState?: DashboardPublicState ) { const { + usageCollection, embeddable: { getEmbeddableFactory }, } = pluginServices.getServices(); - super( { ...initialInput, @@ -168,6 +183,11 @@ export class DashboardContainer parent ); + this.trackPanelAddMetric = usageCollection.reportUiCounter?.bind( + usageCollection, + DASHBOARD_UI_METRIC_ID + ); + ({ analytics: this.analyticsService, settings: { @@ -396,6 +416,88 @@ export class DashboardContainer return newId; } + public async addNewPanel( + panelPackage: PanelPackage, + displaySuccessMessage?: boolean + ) { + const { + notifications: { toasts }, + embeddable: { getEmbeddableFactory }, + } = pluginServices.getServices(); + + const onSuccess = (id?: string, title?: string) => { + if (!displaySuccessMessage) return; + toasts.addSuccess({ + title: dashboardReplacePanelActionStrings.getSuccessMessage(title), + 'data-test-subj': 'addEmbeddableToDashboardSuccess', + }); + this.setScrollToPanelId(id); + this.setHighlightPanelId(id); + }; + + if (this.trackPanelAddMetric) { + this.trackPanelAddMetric(METRIC_TYPE.CLICK, panelPackage.panelType); + } + if (reactEmbeddableRegistryHasKey(panelPackage.panelType)) { + const newId = v4(); + const { newPanelPlacement, otherPanels } = panelPlacementStrategies.findTopLeftMostOpenSpace({ + currentPanels: this.getInput().panels, + height: DEFAULT_PANEL_HEIGHT, + width: DEFAULT_PANEL_WIDTH, + }); + const newPanel: DashboardPanelState = { + type: panelPackage.panelType, + gridData: { + ...newPanelPlacement, + i: newId, + }, + explicitInput: { + ...panelPackage.initialState, + id: newId, + }, + }; + this.updateInput({ panels: { ...otherPanels, [newId]: newPanel } }); + onSuccess(newId, newPanel.explicitInput.title); + return; + } + + const embeddableFactory = getEmbeddableFactory(panelPackage.panelType); + if (!embeddableFactory) { + throw new EmbeddableFactoryNotFoundError(panelPackage.panelType); + } + const initialInput = panelPackage.initialState as Partial; + + let explicitInput: Partial; + let attributes: unknown; + try { + if (initialInput) { + explicitInput = initialInput; + } else { + const explicitInputReturn = await embeddableFactory.getExplicitInput(undefined, this); + if (isExplicitInputWithAttributes(explicitInputReturn)) { + explicitInput = explicitInputReturn.newInput; + attributes = explicitInputReturn.attributes; + } else { + explicitInput = explicitInputReturn; + } + } + } catch (e) { + // error likely means user canceled embeddable creation + return; + } + + const newEmbeddable = await this.addNewEmbeddable( + embeddableFactory.type, + explicitInput, + attributes + ); + + if (newEmbeddable) { + onSuccess(newEmbeddable.id, newEmbeddable.getTitle()); + } + return newEmbeddable as ApiType; + } + public getDashboardPanelFromId = async (panelId: string) => { const panel = this.getInput().panels[panelId]; if (reactEmbeddableRegistryHasKey(panel.type)) { diff --git a/src/plugins/data/server/search/strategies/ese_search/ese_search_strategy.ts b/src/plugins/data/server/search/strategies/ese_search/ese_search_strategy.ts index 174f9924f1cc7..bcf8a3fafcf16 100644 --- a/src/plugins/data/server/search/strategies/ese_search/ese_search_strategy.ts +++ b/src/plugins/data/server/search/strategies/ese_search/ese_search_strategy.ts @@ -13,7 +13,7 @@ import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { firstValueFrom, from } from 'rxjs'; import { getKbnServerError } from '@kbn/kibana-utils-plugin/server'; import { IAsyncSearchRequestParams } from '../..'; -import { getKbnSearchError, KbnSearchError } from '../../report_search_error'; +import { getKbnSearchError } from '../../report_search_error'; import type { ISearchStrategy, SearchStrategyDependencies } from '../../types'; import type { IAsyncSearchOptions, @@ -170,14 +170,11 @@ export const enhancedEsSearchStrategyProvider = ( */ search: (request, options: IAsyncSearchOptions, deps) => { logger.debug(`search ${JSON.stringify(request.params) || request.id}`); - if (request.indexType && request.indexType !== 'rollup') { - throw new KbnSearchError('Unknown indexType', 400); - } - if (request.indexType === undefined || !deps.rollupsEnabled) { - return asyncSearch(request, options, deps); - } else { + if (request.indexType === 'rollup' && deps.rollupsEnabled) { return from(rollupSearch(request, options, deps)); + } else { + return asyncSearch(request, options, deps); } }, /** diff --git a/src/plugins/data_views/docs/openapi/bundled.json b/src/plugins/data_views/docs/openapi/bundled.json index 52912da70f307..3b435603f7d34 100644 --- a/src/plugins/data_views/docs/openapi/bundled.json +++ b/src/plugins/data_views/docs/openapi/bundled.json @@ -32,7 +32,7 @@ } ], "paths": { - "/api/data_views": { + "/s/{spaceId}/api/data_views": { "get": { "summary": "Retrieves a list of all data views.", "operationId": "getAllDataViews", @@ -40,6 +40,11 @@ "tags": [ "data views" ], + "parameters": [ + { + "$ref": "#/components/parameters/space_id" + } + ], "responses": { "200": { "description": "Indicates a successful call.", @@ -97,7 +102,7 @@ } } }, - "/api/data_views/data_view": { + "/s/{spaceId}/api/data_views/data_view": { "post": { "summary": "Creates a data view.", "operationId": "createDataView", @@ -108,6 +113,9 @@ "parameters": [ { "$ref": "#/components/parameters/kbn_xsrf" + }, + { + "$ref": "#/components/parameters/space_id" } ], "requestBody": { @@ -149,7 +157,7 @@ } } }, - "/api/data_views/data_view/{viewId}": { + "/s/{spaceId}/api/data_views/data_view/{viewId}": { "get": { "summary": "Retrieves a single data view by identifier.", "operationId": "getDataView", @@ -160,6 +168,9 @@ "parameters": [ { "$ref": "#/components/parameters/view_id" + }, + { + "$ref": "#/components/parameters/space_id" } ], "responses": { @@ -203,6 +214,9 @@ }, { "$ref": "#/components/parameters/view_id" + }, + { + "$ref": "#/components/parameters/space_id" } ], "responses": { @@ -234,6 +248,9 @@ }, { "$ref": "#/components/parameters/view_id" + }, + { + "$ref": "#/components/parameters/space_id" } ], "requestBody": { @@ -275,7 +292,129 @@ } } }, - "/api/data_views/data_view/{viewId}/fields": { + "/s/{spaceId}/api/data_views/default": { + "get": { + "summary": "Retrieves the default data view identifier.", + "operationId": "getDefaultDataView", + "description": "This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.\n", + "tags": [ + "data views" + ], + "parameters": [ + { + "$ref": "#/components/parameters/space_id" + } + ], + "responses": { + "200": { + "description": "Indicates a successful call.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data_view_id": { + "type": "string" + } + } + }, + "examples": { + "getDefaultDataViewResponse": { + "$ref": "#/components/examples/get_default_data_view_response" + } + } + } + } + }, + "400": { + "description": "Bad request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/400_response" + } + } + } + } + } + }, + "post": { + "summary": "Sets the default data view identifier.", + "operationId": "setDefaultDatailView", + "description": "This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.\n", + "tags": [ + "data views" + ], + "parameters": [ + { + "$ref": "#/components/parameters/kbn_xsrf" + }, + { + "$ref": "#/components/parameters/space_id" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "data_view_id" + ], + "properties": { + "data_view_id": { + "type": [ + "string", + "null" + ], + "description": "The data view identifier. NOTE: The API does not validate whether it is a valid identifier. Use `null` to unset the default data view.\n" + }, + "force": { + "type": "boolean", + "description": "Update an existing default data view identifier.", + "default": false + } + } + }, + "examples": { + "setDefaultDataViewRequest": { + "$ref": "#/components/examples/set_default_data_view_request" + } + } + } + } + }, + "responses": { + "200": { + "description": "Indicates a successful call.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "acknowledged": { + "type": "boolean" + } + } + } + } + } + }, + "400": { + "description": "Bad request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/400_response" + } + } + } + } + } + } + }, + "/s/{spaceId}/api/data_views/data_view/{viewId}/fields": { "post": { "summary": "Update fields presentation metadata such as count, customLabel and format.", "operationId": "updateFieldsMetadata", @@ -289,6 +428,9 @@ }, { "$ref": "#/components/parameters/view_id" + }, + { + "$ref": "#/components/parameters/space_id" } ], "requestBody": { @@ -344,7 +486,7 @@ } } }, - "/api/data_views/data_view/{viewId}/runtime_field": { + "/s/{spaceId}/api/data_views/data_view/{viewId}/runtime_field": { "post": { "summary": "Creates a runtime field.", "operationId": "createRuntimeField", @@ -358,6 +500,9 @@ }, { "$ref": "#/components/parameters/view_id" + }, + { + "$ref": "#/components/parameters/space_id" } ], "requestBody": { @@ -401,6 +546,9 @@ { "$ref": "#/components/parameters/kbn_xsrf" }, + { + "$ref": "#/components/parameters/space_id" + }, { "name": "viewId", "in": "path", @@ -480,7 +628,7 @@ } } }, - "/api/data_views/data_view/{viewId}/runtime_field/{fieldName}": { + "/s/{spaceId}/api/data_views/data_view/{viewId}/runtime_field/{fieldName}": { "get": { "summary": "Retrieves a runtime field.", "operationId": "getRuntimeField", @@ -494,6 +642,9 @@ }, { "$ref": "#/components/parameters/view_id" + }, + { + "$ref": "#/components/parameters/space_id" } ], "responses": { @@ -548,6 +699,9 @@ }, { "$ref": "#/components/parameters/view_id" + }, + { + "$ref": "#/components/parameters/space_id" } ], "responses": { @@ -579,6 +733,9 @@ }, { "$ref": "#/components/parameters/view_id" + }, + { + "$ref": "#/components/parameters/space_id" } ], "requestBody": { @@ -621,120 +778,6 @@ } } } - }, - "/api/data_views/default": { - "get": { - "summary": "Retrieves the default data view identifier.", - "operationId": "getDefaultDataView", - "description": "This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.\n", - "tags": [ - "data views" - ], - "responses": { - "200": { - "description": "Indicates a successful call.", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data_view_id": { - "type": "string" - } - } - }, - "examples": { - "getDefaultDataViewResponse": { - "$ref": "#/components/examples/get_default_data_view_response" - } - } - } - } - }, - "400": { - "description": "Bad request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/400_response" - } - } - } - } - } - }, - "post": { - "summary": "Sets the default data view identifier.", - "operationId": "setDefaultDatailView", - "description": "This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.\n", - "tags": [ - "data views" - ], - "parameters": [ - { - "$ref": "#/components/parameters/kbn_xsrf" - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "required": [ - "data_view_id" - ], - "properties": { - "data_view_id": { - "type": [ - "string", - "null" - ], - "description": "The data view identifier. NOTE: The API does not validate whether it is a valid identifier. Use `null` to unset the default data view.\n" - }, - "force": { - "type": "boolean", - "description": "Update an existing default data view identifier.", - "default": false - } - } - }, - "examples": { - "setDefaultDataViewRequest": { - "$ref": "#/components/examples/set_default_data_view_request" - } - } - } - } - }, - "responses": { - "200": { - "description": "Indicates a successful call.", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "acknowledged": { - "type": "boolean" - } - } - } - } - } - }, - "400": { - "description": "Bad request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/400_response" - } - } - } - } - } - } } }, "components": { @@ -750,6 +793,49 @@ "description": "e.g. Authorization: ApiKey base64AccessApiKey" } }, + "parameters": { + "space_id": { + "in": "path", + "name": "spaceId", + "description": "An identifier for the space. If `/s/` and the identifier are omitted from the path, the default space is used.", + "required": true, + "schema": { + "type": "string", + "examples": [ + "default" + ] + } + }, + "kbn_xsrf": { + "schema": { + "type": "string" + }, + "in": "header", + "name": "kbn-xsrf", + "description": "Cross-site request forgery protection", + "required": true + }, + "view_id": { + "in": "path", + "name": "viewId", + "description": "An identifier for the data view.", + "required": true, + "schema": { + "type": "string", + "example": "ff959d40-b880-11e8-a6d9-e546fe2bba5f" + } + }, + "field_name": { + "in": "path", + "name": "fieldName", + "description": "The name of the runtime field.", + "required": true, + "schema": { + "type": "string", + "example": "hour_of_day" + } + } + }, "examples": { "get_data_views_response": { "summary": "The get all data views API returns a list of data views.", @@ -1969,6 +2055,19 @@ "refresh_fields": true } }, + "get_default_data_view_response": { + "summary": "The get default data view API returns the default data view identifier.", + "value": { + "data_view_id": "ff959d40-b880-11e8-a6d9-e546fe2bba5f" + } + }, + "set_default_data_view_request": { + "summary": "Set the default data view identifier.", + "value": { + "data_view_id": "ff959d40-b880-11e8-a6d9-e546fe2bba5f", + "force": true + } + }, "update_field_metadata_request": { "summary": "Set popularity count for field foo.", "value": { @@ -2629,19 +2728,6 @@ } } } - }, - "get_default_data_view_response": { - "summary": "The get default data view API returns the default data view identifier.", - "value": { - "data_view_id": "ff959d40-b880-11e8-a6d9-e546fe2bba5f" - } - }, - "set_default_data_view_request": { - "summary": "Set the default data view identifier.", - "value": { - "data_view_id": "ff959d40-b880-11e8-a6d9-e546fe2bba5f", - "force": true - } } }, "schemas": { @@ -2914,37 +3000,6 @@ } } } - }, - "parameters": { - "kbn_xsrf": { - "schema": { - "type": "string" - }, - "in": "header", - "name": "kbn-xsrf", - "description": "Cross-site request forgery protection", - "required": true - }, - "view_id": { - "in": "path", - "name": "viewId", - "description": "An identifier for the data view.", - "required": true, - "schema": { - "type": "string", - "example": "ff959d40-b880-11e8-a6d9-e546fe2bba5f" - } - }, - "field_name": { - "in": "path", - "name": "fieldName", - "description": "The name of the runtime field.", - "required": true, - "schema": { - "type": "string", - "example": "hour_of_day" - } - } } } } \ No newline at end of file diff --git a/src/plugins/data_views/docs/openapi/bundled.yaml b/src/plugins/data_views/docs/openapi/bundled.yaml index a0afe1e93a8ef..5f8ce9d8c18f7 100644 --- a/src/plugins/data_views/docs/openapi/bundled.yaml +++ b/src/plugins/data_views/docs/openapi/bundled.yaml @@ -17,7 +17,7 @@ tags: - name: data views description: Data view APIs enable you to manage data views, formerly known as Kibana index patterns. paths: - /api/data_views: + /s/{spaceId}/api/data_views: get: summary: Retrieves a list of all data views. operationId: getAllDataViews @@ -25,6 +25,8 @@ paths: This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. tags: - data views + parameters: + - $ref: '#/components/parameters/space_id' responses: '200': description: Indicates a successful call. @@ -59,7 +61,7 @@ paths: application/json: schema: $ref: '#/components/schemas/400_response' - /api/data_views/data_view: + /s/{spaceId}/api/data_views/data_view: post: summary: Creates a data view. operationId: createDataView @@ -69,6 +71,7 @@ paths: - data views parameters: - $ref: '#/components/parameters/kbn_xsrf' + - $ref: '#/components/parameters/space_id' requestBody: required: true content: @@ -91,7 +94,7 @@ paths: application/json: schema: $ref: '#/components/schemas/400_response' - /api/data_views/data_view/{viewId}: + /s/{spaceId}/api/data_views/data_view/{viewId}: get: summary: Retrieves a single data view by identifier. operationId: getDataView @@ -101,6 +104,7 @@ paths: - data views parameters: - $ref: '#/components/parameters/view_id' + - $ref: '#/components/parameters/space_id' responses: '200': description: Indicates a successful call. @@ -127,6 +131,7 @@ paths: parameters: - $ref: '#/components/parameters/kbn_xsrf' - $ref: '#/components/parameters/view_id' + - $ref: '#/components/parameters/space_id' responses: '204': description: Indicates a successful call. @@ -146,6 +151,7 @@ paths: parameters: - $ref: '#/components/parameters/kbn_xsrf' - $ref: '#/components/parameters/view_id' + - $ref: '#/components/parameters/space_id' requestBody: required: true content: @@ -168,7 +174,84 @@ paths: application/json: schema: $ref: '#/components/schemas/400_response' - /api/data_views/data_view/{viewId}/fields: + /s/{spaceId}/api/data_views/default: + get: + summary: Retrieves the default data view identifier. + operationId: getDefaultDataView + description: | + This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. + tags: + - data views + parameters: + - $ref: '#/components/parameters/space_id' + responses: + '200': + description: Indicates a successful call. + content: + application/json: + schema: + type: object + properties: + data_view_id: + type: string + examples: + getDefaultDataViewResponse: + $ref: '#/components/examples/get_default_data_view_response' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/400_response' + post: + summary: Sets the default data view identifier. + operationId: setDefaultDatailView + description: | + This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. + tags: + - data views + parameters: + - $ref: '#/components/parameters/kbn_xsrf' + - $ref: '#/components/parameters/space_id' + requestBody: + required: true + content: + application/json: + schema: + type: object + required: + - data_view_id + properties: + data_view_id: + type: + - string + - 'null' + description: | + The data view identifier. NOTE: The API does not validate whether it is a valid identifier. Use `null` to unset the default data view. + force: + type: boolean + description: Update an existing default data view identifier. + default: false + examples: + setDefaultDataViewRequest: + $ref: '#/components/examples/set_default_data_view_request' + responses: + '200': + description: Indicates a successful call. + content: + application/json: + schema: + type: object + properties: + acknowledged: + type: boolean + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/400_response' + /s/{spaceId}/api/data_views/data_view/{viewId}/fields: post: summary: Update fields presentation metadata such as count, customLabel and format. operationId: updateFieldsMetadata @@ -179,6 +262,7 @@ paths: parameters: - $ref: '#/components/parameters/kbn_xsrf' - $ref: '#/components/parameters/view_id' + - $ref: '#/components/parameters/space_id' requestBody: required: true content: @@ -210,7 +294,7 @@ paths: application/json: schema: $ref: '#/components/schemas/400_response' - /api/data_views/data_view/{viewId}/runtime_field: + /s/{spaceId}/api/data_views/data_view/{viewId}/runtime_field: post: summary: Creates a runtime field. operationId: createRuntimeField @@ -221,6 +305,7 @@ paths: parameters: - $ref: '#/components/parameters/kbn_xsrf' - $ref: '#/components/parameters/view_id' + - $ref: '#/components/parameters/space_id' requestBody: required: true content: @@ -251,6 +336,7 @@ paths: - data views parameters: - $ref: '#/components/parameters/kbn_xsrf' + - $ref: '#/components/parameters/space_id' - name: viewId in: path description: | @@ -302,7 +388,7 @@ paths: application/json: schema: $ref: '#/components/schemas/400_response' - /api/data_views/data_view/{viewId}/runtime_field/{fieldName}: + /s/{spaceId}/api/data_views/data_view/{viewId}/runtime_field/{fieldName}: get: summary: Retrieves a runtime field. operationId: getRuntimeField @@ -313,6 +399,7 @@ paths: parameters: - $ref: '#/components/parameters/field_name' - $ref: '#/components/parameters/view_id' + - $ref: '#/components/parameters/space_id' responses: '200': description: Indicates a successful call. @@ -346,6 +433,7 @@ paths: parameters: - $ref: '#/components/parameters/field_name' - $ref: '#/components/parameters/view_id' + - $ref: '#/components/parameters/space_id' responses: '200': description: Indicates a successful call. @@ -365,6 +453,7 @@ paths: parameters: - $ref: '#/components/parameters/field_name' - $ref: '#/components/parameters/view_id' + - $ref: '#/components/parameters/space_id' requestBody: required: true content: @@ -395,80 +484,6 @@ paths: application/json: schema: $ref: '#/components/schemas/400_response' - /api/data_views/default: - get: - summary: Retrieves the default data view identifier. - operationId: getDefaultDataView - description: | - This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. - tags: - - data views - responses: - '200': - description: Indicates a successful call. - content: - application/json: - schema: - type: object - properties: - data_view_id: - type: string - examples: - getDefaultDataViewResponse: - $ref: '#/components/examples/get_default_data_view_response' - '400': - description: Bad request - content: - application/json: - schema: - $ref: '#/components/schemas/400_response' - post: - summary: Sets the default data view identifier. - operationId: setDefaultDatailView - description: | - This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. - tags: - - data views - parameters: - - $ref: '#/components/parameters/kbn_xsrf' - requestBody: - required: true - content: - application/json: - schema: - type: object - required: - - data_view_id - properties: - data_view_id: - type: - - string - - 'null' - description: | - The data view identifier. NOTE: The API does not validate whether it is a valid identifier. Use `null` to unset the default data view. - force: - type: boolean - description: Update an existing default data view identifier. - default: false - examples: - setDefaultDataViewRequest: - $ref: '#/components/examples/set_default_data_view_request' - responses: - '200': - description: Indicates a successful call. - content: - application/json: - schema: - type: object - properties: - acknowledged: - type: boolean - '400': - description: Bad request - content: - application/json: - schema: - $ref: '#/components/schemas/400_response' components: securitySchemes: basicAuth: @@ -479,6 +494,39 @@ components: in: header name: Authorization description: 'e.g. Authorization: ApiKey base64AccessApiKey' + parameters: + space_id: + in: path + name: spaceId + description: An identifier for the space. If `/s/` and the identifier are omitted from the path, the default space is used. + required: true + schema: + type: string + examples: + - default + kbn_xsrf: + schema: + type: string + in: header + name: kbn-xsrf + description: Cross-site request forgery protection + required: true + view_id: + in: path + name: viewId + description: An identifier for the data view. + required: true + schema: + type: string + example: ff959d40-b880-11e8-a6d9-e546fe2bba5f + field_name: + in: path + name: fieldName + description: The name of the runtime field. + required: true + schema: + type: string + example: hour_of_day examples: get_data_views_response: summary: The get all data views API returns a list of data views. @@ -1447,6 +1495,15 @@ components: allowNoIndex: false name: Kibana Sample Data eCommerce refresh_fields: true + get_default_data_view_response: + summary: The get default data view API returns the default data view identifier. + value: + data_view_id: ff959d40-b880-11e8-a6d9-e546fe2bba5f + set_default_data_view_request: + summary: Set the default data view identifier. + value: + data_view_id: ff959d40-b880-11e8-a6d9-e546fe2bba5f + force: true update_field_metadata_request: summary: Set popularity count for field foo. value: @@ -1973,15 +2030,6 @@ components: runtimeField: script: source: emit(doc["bar"].value) - get_default_data_view_response: - summary: The get default data view API returns the default data view identifier. - value: - data_view_id: ff959d40-b880-11e8-a6d9-e546fe2bba5f - set_default_data_view_request: - summary: Set the default data view identifier. - value: - data_view_id: ff959d40-b880-11e8-a6d9-e546fe2bba5f - force: true schemas: 400_response: title: Bad request @@ -2171,27 +2219,3 @@ components: type: boolean description: Reloads the data view fields after the data view is updated. default: false - parameters: - kbn_xsrf: - schema: - type: string - in: header - name: kbn-xsrf - description: Cross-site request forgery protection - required: true - view_id: - in: path - name: viewId - description: An identifier for the data view. - required: true - schema: - type: string - example: ff959d40-b880-11e8-a6d9-e546fe2bba5f - field_name: - in: path - name: fieldName - description: The name of the runtime field. - required: true - schema: - type: string - example: hour_of_day diff --git a/src/plugins/data_views/docs/openapi/components/parameters/space_id.yaml b/src/plugins/data_views/docs/openapi/components/parameters/space_id.yaml new file mode 100644 index 0000000000000..45787e844caec --- /dev/null +++ b/src/plugins/data_views/docs/openapi/components/parameters/space_id.yaml @@ -0,0 +1,8 @@ +in: path +name: spaceId +description: An identifier for the space. If `/s/` and the identifier are omitted from the path, the default space is used. +required: true +schema: + type: string + examples: + - default diff --git a/src/plugins/data_views/docs/openapi/entrypoint.yaml b/src/plugins/data_views/docs/openapi/entrypoint.yaml index 697fd554dae8c..86d76dbfa42d4 100644 --- a/src/plugins/data_views/docs/openapi/entrypoint.yaml +++ b/src/plugins/data_views/docs/openapi/entrypoint.yaml @@ -15,35 +15,35 @@ servers: - url: / paths: # Default space - '/api/data_views': - $ref: 'paths/api@data_views.yaml' - '/api/data_views/data_view': - $ref: 'paths/api@data_views@data_view.yaml' - '/api/data_views/data_view/{viewId}': - $ref: 'paths/api@data_views@data_view@{viewid}.yaml' - '/api/data_views/data_view/{viewId}/fields': - $ref: 'paths/api@data_views@data_view@{viewid}@fields.yaml' - '/api/data_views/data_view/{viewId}/runtime_field': - $ref: 'paths/api@data_views@data_view@{viewid}@runtime_field.yaml' - '/api/data_views/data_view/{viewId}/runtime_field/{fieldName}': - $ref: 'paths/api@data_views@data_view@{viewid}@runtime_field@{fieldname}.yaml' - '/api/data_views/default': - $ref: 'paths/api@data_views@default.yaml' + # '/api/data_views': + # $ref: 'paths/api@data_views.yaml' + # '/api/data_views/data_view': + # $ref: 'paths/api@data_views@data_view.yaml' + # '/api/data_views/data_view/{viewId}': + # $ref: 'paths/api@data_views@data_view@{viewid}.yaml' + # '/api/data_views/data_view/{viewId}/fields': + # $ref: 'paths/api@data_views@data_view@{viewid}@fields.yaml' + # '/api/data_views/data_view/{viewId}/runtime_field': + # $ref: 'paths/api@data_views@data_view@{viewid}@runtime_field.yaml' + # '/api/data_views/data_view/{viewId}/runtime_field/{fieldName}': + # $ref: 'paths/api@data_views@data_view@{viewid}@runtime_field@{fieldname}.yaml' + # '/api/data_views/default': + # $ref: 'paths/api@data_views@default.yaml' # Non-default space -# '/s/{spaceId}/api/data_views': -# $ref: 'paths/s@{spaceid}@api@data_views.yaml' -# '/s/{spaceId}/api/data_views/data_view': -# $ref: 'paths/s@{spaceid}@api@data_views@data_view.yaml' -# '/s/{spaceId}/api/data_views/data_view/{viewId}': -# $ref: 'paths/s@{spaceid}@api@data_views@data_view@{viewid}.yaml' -# '/s/{spaceId}/api/data_views/default': -# $ref: 'paths/s@{spaceid}@api@data_views@default.yaml' -# '/s/{spaceId}/api/data_views/data_view/{viewId}/fields': -# $ref: 'paths/s@{spaceid}@api@data_views@data_view@{viewid}@fields.yaml' -# '/s/{spaceId}/api/data_views/data_view/{viewId}/runtime_field': -# $ref: 'paths/s@{spaceid}@api@data_views@data_view@{viewid}@runtime_field.yaml' -# '/s/{spaceId}/api/data_views/data_view/{viewId}/runtime_field/{fieldName}': -# $ref: 'paths/s@{spaceid}@api@data_views@data_view@{viewid}@runtime_field@{fieldname}.yaml' + '/s/{spaceId}/api/data_views': + $ref: 'paths/s@{spaceid}@api@data_views.yaml' + '/s/{spaceId}/api/data_views/data_view': + $ref: 'paths/s@{spaceid}@api@data_views@data_view.yaml' + '/s/{spaceId}/api/data_views/data_view/{viewId}': + $ref: 'paths/s@{spaceid}@api@data_views@data_view@{viewid}.yaml' + '/s/{spaceId}/api/data_views/default': + $ref: 'paths/s@{spaceid}@api@data_views@default.yaml' + '/s/{spaceId}/api/data_views/data_view/{viewId}/fields': + $ref: 'paths/s@{spaceid}@api@data_views@data_view@{viewid}@fields.yaml' + '/s/{spaceId}/api/data_views/data_view/{viewId}/runtime_field': + $ref: 'paths/s@{spaceid}@api@data_views@data_view@{viewid}@runtime_field.yaml' + '/s/{spaceId}/api/data_views/data_view/{viewId}/runtime_field/{fieldName}': + $ref: 'paths/s@{spaceid}@api@data_views@data_view@{viewid}@runtime_field@{fieldname}.yaml' components: securitySchemes: basicAuth: diff --git a/src/plugins/data_views/docs/openapi/paths/api@data_views.yaml b/src/plugins/data_views/docs/openapi/paths/s@{spaceid}@api@data_views.yaml similarity index 95% rename from src/plugins/data_views/docs/openapi/paths/api@data_views.yaml rename to src/plugins/data_views/docs/openapi/paths/s@{spaceid}@api@data_views.yaml index e36f914e55e54..b51fd231e4332 100644 --- a/src/plugins/data_views/docs/openapi/paths/api@data_views.yaml +++ b/src/plugins/data_views/docs/openapi/paths/s@{spaceid}@api@data_views.yaml @@ -5,6 +5,8 @@ get: This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. tags: - data views + parameters: + - $ref: '../components/parameters/space_id.yaml' responses: '200': description: Indicates a successful call. diff --git a/src/plugins/data_views/docs/openapi/paths/api@data_views@data_view.yaml b/src/plugins/data_views/docs/openapi/paths/s@{spaceid}@api@data_views@data_view.yaml similarity index 95% rename from src/plugins/data_views/docs/openapi/paths/api@data_views@data_view.yaml rename to src/plugins/data_views/docs/openapi/paths/s@{spaceid}@api@data_views@data_view.yaml index 32a7e0b5c42dc..230427f30187d 100644 --- a/src/plugins/data_views/docs/openapi/paths/api@data_views@data_view.yaml +++ b/src/plugins/data_views/docs/openapi/paths/s@{spaceid}@api@data_views@data_view.yaml @@ -7,6 +7,7 @@ post: - data views parameters: - $ref: '../components/headers/kbn_xsrf.yaml' + - $ref: '../components/parameters/space_id.yaml' requestBody: required: true content: @@ -29,4 +30,3 @@ post: application/json: schema: $ref: '../components/schemas/400_response.yaml' - diff --git a/src/plugins/data_views/docs/openapi/paths/api@data_views@data_view@{viewid}.yaml b/src/plugins/data_views/docs/openapi/paths/s@{spaceid}@api@data_views@data_view@{viewid}.yaml similarity index 94% rename from src/plugins/data_views/docs/openapi/paths/api@data_views@data_view@{viewid}.yaml rename to src/plugins/data_views/docs/openapi/paths/s@{spaceid}@api@data_views@data_view@{viewid}.yaml index e239978f39f87..157899bcb578f 100644 --- a/src/plugins/data_views/docs/openapi/paths/api@data_views@data_view@{viewid}.yaml +++ b/src/plugins/data_views/docs/openapi/paths/s@{spaceid}@api@data_views@data_view@{viewid}.yaml @@ -7,6 +7,7 @@ get: - data views parameters: - $ref: '../components/parameters/view_id.yaml' + - $ref: '../components/parameters/space_id.yaml' responses: '200': description: Indicates a successful call. @@ -35,6 +36,7 @@ delete: parameters: - $ref: '../components/headers/kbn_xsrf.yaml' - $ref: '../components/parameters/view_id.yaml' + - $ref: '../components/parameters/space_id.yaml' responses: '204': description: Indicates a successful call. @@ -55,6 +57,7 @@ post: parameters: - $ref: '../components/headers/kbn_xsrf.yaml' - $ref: '../components/parameters/view_id.yaml' + - $ref: '../components/parameters/space_id.yaml' requestBody: required: true content: diff --git a/src/plugins/data_views/docs/openapi/paths/api@data_views@data_view@{viewid}@fields.yaml b/src/plugins/data_views/docs/openapi/paths/s@{spaceid}@api@data_views@data_view@{viewid}@fields.yaml similarity index 92% rename from src/plugins/data_views/docs/openapi/paths/api@data_views@data_view@{viewid}@fields.yaml rename to src/plugins/data_views/docs/openapi/paths/s@{spaceid}@api@data_views@data_view@{viewid}@fields.yaml index 62bce25d96cd9..5e7911e6b7aec 100644 --- a/src/plugins/data_views/docs/openapi/paths/api@data_views@data_view@{viewid}@fields.yaml +++ b/src/plugins/data_views/docs/openapi/paths/s@{spaceid}@api@data_views@data_view@{viewid}@fields.yaml @@ -8,6 +8,7 @@ post: parameters: - $ref: '../components/headers/kbn_xsrf.yaml' - $ref: '../components/parameters/view_id.yaml' + - $ref: '../components/parameters/space_id.yaml' requestBody: required: true content: @@ -38,4 +39,4 @@ post: content: application/json: schema: - $ref: '../components/schemas/400_response.yaml' \ No newline at end of file + $ref: '../components/schemas/400_response.yaml' diff --git a/src/plugins/data_views/docs/openapi/paths/api@data_views@data_view@{viewid}@runtime_field.yaml b/src/plugins/data_views/docs/openapi/paths/s@{spaceid}@api@data_views@data_view@{viewid}@runtime_field.yaml similarity index 96% rename from src/plugins/data_views/docs/openapi/paths/api@data_views@data_view@{viewid}@runtime_field.yaml rename to src/plugins/data_views/docs/openapi/paths/s@{spaceid}@api@data_views@data_view@{viewid}@runtime_field.yaml index 04f836cae94fe..dcc2783a82afa 100644 --- a/src/plugins/data_views/docs/openapi/paths/api@data_views@data_view@{viewid}@runtime_field.yaml +++ b/src/plugins/data_views/docs/openapi/paths/s@{spaceid}@api@data_views@data_view@{viewid}@runtime_field.yaml @@ -8,6 +8,7 @@ post: parameters: - $ref: '../components/headers/kbn_xsrf.yaml' - $ref: '../components/parameters/view_id.yaml' + - $ref: '../components/parameters/space_id.yaml' requestBody: required: true content: @@ -39,6 +40,7 @@ put: - data views parameters: - $ref: '../components/headers/kbn_xsrf.yaml' + - $ref: '../components/parameters/space_id.yaml' - name: viewId in: path description: | diff --git a/src/plugins/data_views/docs/openapi/paths/api@data_views@data_view@{viewid}@runtime_field@{fieldname}.yaml b/src/plugins/data_views/docs/openapi/paths/s@{spaceid}@api@data_views@data_view@{viewid}@runtime_field@{fieldname}.yaml similarity index 95% rename from src/plugins/data_views/docs/openapi/paths/api@data_views@data_view@{viewid}@runtime_field@{fieldname}.yaml rename to src/plugins/data_views/docs/openapi/paths/s@{spaceid}@api@data_views@data_view@{viewid}@runtime_field@{fieldname}.yaml index 2f6a452d351a4..7508613089a47 100644 --- a/src/plugins/data_views/docs/openapi/paths/api@data_views@data_view@{viewid}@runtime_field@{fieldname}.yaml +++ b/src/plugins/data_views/docs/openapi/paths/s@{spaceid}@api@data_views@data_view@{viewid}@runtime_field@{fieldname}.yaml @@ -8,6 +8,7 @@ get: parameters: - $ref: '../components/parameters/field_name.yaml' - $ref: '../components/parameters/view_id.yaml' + - $ref: '../components/parameters/space_id.yaml' responses: '200': description: Indicates a successful call. @@ -42,6 +43,7 @@ delete: parameters: - $ref: '../components/parameters/field_name.yaml' - $ref: '../components/parameters/view_id.yaml' + - $ref: '../components/parameters/space_id.yaml' responses: '200': description: Indicates a successful call. @@ -62,6 +64,7 @@ post: parameters: - $ref: '../components/parameters/field_name.yaml' - $ref: '../components/parameters/view_id.yaml' + - $ref: '../components/parameters/space_id.yaml' requestBody: required: true content: diff --git a/src/plugins/data_views/docs/openapi/paths/api@data_views@default.yaml b/src/plugins/data_views/docs/openapi/paths/s@{spaceid}@api@data_views@default.yaml similarity index 95% rename from src/plugins/data_views/docs/openapi/paths/api@data_views@default.yaml rename to src/plugins/data_views/docs/openapi/paths/s@{spaceid}@api@data_views@default.yaml index 83e616b635973..6664e1fc45f97 100644 --- a/src/plugins/data_views/docs/openapi/paths/api@data_views@default.yaml +++ b/src/plugins/data_views/docs/openapi/paths/s@{spaceid}@api@data_views@default.yaml @@ -5,6 +5,8 @@ get: This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. tags: - data views + parameters: + - $ref: '../components/parameters/space_id.yaml' responses: '200': description: Indicates a successful call. @@ -33,6 +35,7 @@ post: - data views parameters: - $ref: '../components/headers/kbn_xsrf.yaml' + - $ref: '../components/parameters/space_id.yaml' requestBody: required: true content: diff --git a/src/plugins/embeddable/public/add_panel_flyout/add_panel_flyout.test.tsx b/src/plugins/embeddable/public/add_panel_flyout/add_panel_flyout.test.tsx index a39f4ee95f15b..3b8052c88a798 100644 --- a/src/plugins/embeddable/public/add_panel_flyout/add_panel_flyout.test.tsx +++ b/src/plugins/embeddable/public/add_panel_flyout/add_panel_flyout.test.tsx @@ -68,7 +68,7 @@ describe('add panel flyout', () => { getEmbeddableFactory: embeddableStart.getEmbeddableFactory, } ); - container.addNewEmbeddable = jest.fn(); + container.addNewEmbeddable = jest.fn().mockResolvedValue({ id: 'foo' }); }); test('add panel flyout renders SavedObjectFinder', async () => { diff --git a/src/plugins/embeddable/public/add_panel_flyout/add_panel_flyout.tsx b/src/plugins/embeddable/public/add_panel_flyout/add_panel_flyout.tsx index f0554fed61782..a407fb025e2c8 100644 --- a/src/plugins/embeddable/public/add_panel_flyout/add_panel_flyout.tsx +++ b/src/plugins/embeddable/public/add_panel_flyout/add_panel_flyout.tsx @@ -32,6 +32,7 @@ import { SavedObjectEmbeddableInput, EmbeddableFactoryNotFoundError, } from '../lib'; +import { savedObjectToPanel } from '../registry/saved_object_to_panel_methods'; type FactoryMap = { [key: string]: EmbeddableFactory }; @@ -101,12 +102,30 @@ export const AddPanelFlyout = ({ throw new EmbeddableFactoryNotFoundError(type); } - const embeddable = await container.addNewEmbeddable( - factoryForSavedObjectType.type, - { savedObjectId: id }, - savedObject.attributes - ); - onAddPanel?.(embeddable.id); + let embeddableId: string; + + if (savedObjectToPanel[type]) { + // this panel type has a custom method for converting saved objects to panels + const panel = savedObjectToPanel[type](savedObject); + + const { id: _embeddableId } = await container.addNewEmbeddable( + factoryForSavedObjectType.type, + panel, + savedObject.attributes + ); + + embeddableId = _embeddableId; + } else { + const { id: _embeddableId } = await container.addNewEmbeddable( + factoryForSavedObjectType.type, + { savedObjectId: id }, + savedObject.attributes + ); + + embeddableId = _embeddableId; + } + + onAddPanel?.(embeddableId); showSuccessToast(name); runAddTelemetry(container.type, factoryForSavedObjectType, savedObject); @@ -136,6 +155,14 @@ export const AddPanelFlyout = ({ noItemsMessage={i18n.translate('embeddableApi.addPanel.noMatchingObjectsMessage', { defaultMessage: 'No matching objects found.', })} + getTooltipText={(item) => { + return item.managed + ? i18n.translate('embeddableApi.addPanel.managedPanelTooltip', { + defaultMessage: + 'This panel is managed by Elastic. It can be added but will be unlinked from the library.', + }) + : undefined; + }} /> diff --git a/src/plugins/embeddable/public/index.ts b/src/plugins/embeddable/public/index.ts index 5f9254ae11748..2eec70d591db3 100644 --- a/src/plugins/embeddable/public/index.ts +++ b/src/plugins/embeddable/public/index.ts @@ -113,6 +113,8 @@ export { serializeReactEmbeddableTitles, } from './react_embeddable_system'; +export { registerSavedObjectToPanelMethod } from './registry/saved_object_to_panel_methods'; + export function plugin(initializerContext: PluginInitializerContext) { return new EmbeddablePublicPlugin(initializerContext); } diff --git a/src/plugins/embeddable/public/lib/containers/container.ts b/src/plugins/embeddable/public/lib/containers/container.ts index d039bd5b80f89..9f3ac0f8d38a4 100644 --- a/src/plugins/embeddable/public/lib/containers/container.ts +++ b/src/plugins/embeddable/public/lib/containers/container.ts @@ -131,6 +131,16 @@ export abstract class Container< this.removeEmbeddable(id); } + public async addNewPanel( + panelPackage: PanelPackage + ): Promise { + const newEmbeddable = await this.addNewEmbeddable( + panelPackage.panelType, + panelPackage.initialState as Partial + ); + return newEmbeddable as ApiType; + } + public async replacePanel(idToRemove: string, { panelType, initialState }: PanelPackage) { return await this.replaceEmbeddable( idToRemove, diff --git a/src/plugins/embeddable/public/registry/saved_object_to_panel_methods.ts b/src/plugins/embeddable/public/registry/saved_object_to_panel_methods.ts new file mode 100644 index 0000000000000..2d996666d4042 --- /dev/null +++ b/src/plugins/embeddable/public/registry/saved_object_to_panel_methods.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 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { SavedObjectCommon } from '@kbn/saved-objects-finder-plugin/common'; + +type SavedObjectToPanelMethod = ( + savedObject: SavedObjectCommon +) => { savedObjectId: string } | Partial; + +export const savedObjectToPanel: Record> = {}; + +export const registerSavedObjectToPanelMethod = ( + savedObjectType: string, + method: SavedObjectToPanelMethod +) => { + savedObjectToPanel[savedObjectType] = method; +}; diff --git a/src/plugins/saved_objects_finder/public/finder/saved_object_finder.test.tsx b/src/plugins/saved_objects_finder/public/finder/saved_object_finder.test.tsx index 8ac5715263e30..c3e143ddbac42 100644 --- a/src/plugins/saved_objects_finder/public/finder/saved_object_finder.test.tsx +++ b/src/plugins/saved_objects_finder/public/finder/saved_object_finder.test.tsx @@ -9,7 +9,12 @@ const nextTick = () => new Promise((res) => process.nextTick(res)); import lodash from 'lodash'; -jest.spyOn(lodash, 'debounce').mockImplementation((fn: any) => fn); +import { render, screen } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +jest.spyOn(lodash, 'debounce').mockImplementation((fn: any) => { + fn.cancel = jest.fn(); + return fn; +}); import { EuiInMemoryTable, EuiLink, @@ -962,4 +967,36 @@ describe('SavedObjectsFinder', () => { expect(findTestSubject(wrapper, 'tableHeaderCell_references_2')).toHaveLength(0); }); }); + + it('should add a tooltip when text is provided', async () => { + (contentClient.mSearch as any as jest.SpyInstance).mockResolvedValue({ + hits: [doc, doc2, doc3], + }); + + const tooltipText = 'This is a tooltip'; + + render( + (item.id === doc3.id ? tooltipText : undefined)} + /> + ); + + const assertTooltip = async (linkTitle: string, show: boolean) => { + const elem = await screen.findByText(linkTitle); + userEvent.hover(elem); + + const tooltip = screen.queryByText(tooltipText); + if (show) { + expect(tooltip).toBeInTheDocument(); + } else { + expect(tooltip).toBeNull(); + } + }; + + assertTooltip(doc.attributes.title, false); + assertTooltip(doc2.attributes.title, false); + assertTooltip(doc3.attributes.title, true); + }); }); diff --git a/src/plugins/saved_objects_finder/public/finder/saved_object_finder.tsx b/src/plugins/saved_objects_finder/public/finder/saved_object_finder.tsx index d660a8bf2857a..034f63083be1d 100644 --- a/src/plugins/saved_objects_finder/public/finder/saved_object_finder.tsx +++ b/src/plugins/saved_objects_finder/public/finder/saved_object_finder.tsx @@ -77,6 +77,7 @@ interface BaseSavedObjectFinder { leftChildren?: ReactElement | ReactElement[]; children?: ReactElement | ReactElement[]; helpText?: string; + getTooltipText?: (item: SavedObjectFinderItem) => string | undefined; } interface SavedObjectFinderFixedPage extends BaseSavedObjectFinder { @@ -288,7 +289,7 @@ export class SavedObjectFinderUi extends React.Component< ? currentSavedObjectMetaData.getTooltipForSavedObject(item.simple) : `${item.name} (${currentSavedObjectMetaData!.name})`; - return ( + const link = ( ); + + const tooltipText = this.props.getTooltipText?.(item); + + return tooltipText ? ( + + {link} + + ) : ( + link + ); }, }, ...(tagColumn ? [tagColumn] : []), diff --git a/src/plugins/saved_search/public/plugin.ts b/src/plugins/saved_search/public/plugin.ts index 8e8dd697cc55c..5b2d1e4e79fbf 100644 --- a/src/plugins/saved_search/public/plugin.ts +++ b/src/plugins/saved_search/public/plugin.ts @@ -17,13 +17,14 @@ import type { ContentManagementPublicStart, } from '@kbn/content-management-plugin/public'; import type { SOWithMetadata } from '@kbn/content-management-utils'; -import type { EmbeddableStart } from '@kbn/embeddable-plugin/public'; +import { EmbeddableStart, registerSavedObjectToPanelMethod } from '@kbn/embeddable-plugin/public'; import { getSavedSearch, saveSavedSearch, SaveSavedSearchOptions, getNewSavedSearch, SavedSearchUnwrapResult, + SearchByValueInput, } from './services/saved_searches'; import { SavedSearch, SavedSearchAttributes } from '../common/types'; import { SavedSearchType, LATEST_VERSION } from '../common'; @@ -35,6 +36,7 @@ import { getSavedSearchAttributeService, toSavedSearch, } from './services/saved_searches'; +import { savedObjectToEmbeddableAttributes } from './services/saved_searches/saved_search_attribute_service'; /** * Saved search plugin public Setup contract @@ -115,6 +117,19 @@ export class SavedSearchPublicPlugin expressions.registerType(kibanaContext); + registerSavedObjectToPanelMethod( + SavedSearchType, + (savedObject) => { + if (!savedObject.managed) { + return { savedObjectId: savedObject.id }; + } + + return { + attributes: savedObjectToEmbeddableAttributes(savedObject), + }; + } + ); + return {}; } diff --git a/src/plugins/saved_search/public/services/saved_searches/saved_search_attribute_service.ts b/src/plugins/saved_search/public/services/saved_searches/saved_search_attribute_service.ts index aff78e18b6bd1..726853d26ebe4 100644 --- a/src/plugins/saved_search/public/services/saved_searches/saved_search_attribute_service.ts +++ b/src/plugins/saved_search/public/services/saved_searches/saved_search_attribute_service.ts @@ -9,6 +9,8 @@ import type { AttributeService, EmbeddableStart } from '@kbn/embeddable-plugin/public'; import type { OnSaveProps } from '@kbn/saved-objects-plugin/public'; import { SEARCH_EMBEDDABLE_TYPE } from '@kbn/discover-utils'; +import { SavedObjectCommon } from '@kbn/saved-objects-finder-plugin/common'; +import { SavedSearchAttributes } from '../../../common'; import type { SavedSearch, SavedSearchByValueAttributes, @@ -41,6 +43,13 @@ export type SavedSearchAttributeService = AttributeService< SavedSearchUnwrapMetaInfo >; +export const savedObjectToEmbeddableAttributes = ( + savedObject: SavedObjectCommon +) => ({ + ...savedObject.attributes, + references: savedObject.references, +}); + export function getSavedSearchAttributeService( services: SavedSearchesServiceDeps & { embeddable: EmbeddableStart; @@ -67,10 +76,7 @@ export function getSavedSearchAttributeService( const so = await getSearchSavedObject(savedObjectId, createGetSavedSearchDeps(services)); return { - attributes: { - ...so.item.attributes, - references: so.item.references, - }, + attributes: savedObjectToEmbeddableAttributes(so.item), metaInfo: { sharingSavedObjectProps: so.meta, managed: so.item.managed, diff --git a/src/plugins/saved_search/tsconfig.json b/src/plugins/saved_search/tsconfig.json index b1aa1679469ee..c4ea0eaf4d5bc 100644 --- a/src/plugins/saved_search/tsconfig.json +++ b/src/plugins/saved_search/tsconfig.json @@ -32,6 +32,7 @@ "@kbn/logging", "@kbn/core-plugins-server", "@kbn/utility-types", + "@kbn/saved-objects-finder-plugin", ], "exclude": [ "target/**/*", diff --git a/src/plugins/visualizations/public/plugin.ts b/src/plugins/visualizations/public/plugin.ts index cd840302ff01d..594ea6ca9488a 100644 --- a/src/plugins/visualizations/public/plugin.ts +++ b/src/plugins/visualizations/public/plugin.ts @@ -47,7 +47,11 @@ import type { UsageCollectionStart } from '@kbn/usage-collection-plugin/public'; import type { DataPublicPluginSetup, DataPublicPluginStart } from '@kbn/data-plugin/public'; import type { DataViewsPublicPluginStart } from '@kbn/data-views-plugin/public'; import type { ExpressionsSetup, ExpressionsStart } from '@kbn/expressions-plugin/public'; -import type { EmbeddableSetup, EmbeddableStart } from '@kbn/embeddable-plugin/public'; +import { + EmbeddableSetup, + EmbeddableStart, + registerSavedObjectToPanelMethod, +} from '@kbn/embeddable-plugin/public'; import type { SavedObjectTaggingOssPluginStart } from '@kbn/saved-objects-tagging-oss-plugin/public'; import type { NavigationPublicPluginStart as NavigationStart } from '@kbn/navigation-plugin/public'; import type { SharePluginSetup, SharePluginStart } from '@kbn/share-plugin/public'; @@ -112,8 +116,14 @@ import { } from './services'; import { VisualizeConstants } from '../common/constants'; import { EditInLensAction } from './actions/edit_in_lens_action'; -import { ListingViewRegistry } from './types'; -import { LATEST_VERSION, CONTENT_ID } from '../common/content_management'; +import { ListingViewRegistry, SerializedVis } from './types'; +import { + LATEST_VERSION, + CONTENT_ID, + VisualizationSavedObjectAttributes, +} from '../common/content_management'; +import { SerializedVisData } from '../common'; +import { VisualizeByValueInput } from './embeddable/visualize_embeddable'; /** * Interface for this plugin's returned setup/start contracts. @@ -397,6 +407,37 @@ export class VisualizationsPlugin name: 'Visualize Library', }); + registerSavedObjectToPanelMethod( + CONTENT_ID, + (savedObject) => { + const visState = savedObject.attributes.visState; + + // not sure if visState actually is ever undefined, but following the type + if (!savedObject.managed || !visState) { + return { + savedObjectId: savedObject.id, + }; + } + + // data is not always defined, so I added a default value since the extract + // routine in the embeddable factory expects it to be there + const savedVis = JSON.parse(visState) as Omit & { + data?: SerializedVisData; + }; + + if (!savedVis.data) { + savedVis.data = { + searchSource: {}, + aggs: [], + }; + } + + return { + savedVis: savedVis as SerializedVis, // now we're sure we have "data" prop + }; + } + ); + return { ...this.types.setup(), visEditorsRegistry, diff --git a/test/functional/apps/management/data_views/_data_view_create_delete.ts b/test/functional/apps/management/data_views/_data_view_create_delete.ts index e3bc2240887ad..651dbce7ada02 100644 --- a/test/functional/apps/management/data_views/_data_view_create_delete.ts +++ b/test/functional/apps/management/data_views/_data_view_create_delete.ts @@ -20,7 +20,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const es = getService('es'); const PageObjects = getPageObjects(['settings', 'common', 'header']); - describe('creating and deleting default data view', function describeIndexTests() { + // FLAKY: https://github.com/elastic/kibana/issues/174066 + describe.skip('creating and deleting default data view', function describeIndexTests() { before(async function () { await esArchiver.emptyKibanaIndex(); await esArchiver.loadIfNeeded( diff --git a/test/functional/fixtures/kbn_archiver/managed_content.json b/test/functional/fixtures/kbn_archiver/managed_content.json index 9e46c515d6b8b..d2cafbe0c842e 100644 --- a/test/functional/fixtures/kbn_archiver/managed_content.json +++ b/test/functional/fixtures/kbn_archiver/managed_content.json @@ -1,17 +1,19 @@ {"attributes":{"allowHidden":false,"fieldAttrs":"{}","fieldFormatMap":"{}","fields":"[]","name":"logstash-*","runtimeFieldMap":"{}","sourceFilters":"[]","timeFieldName":"@timestamp","title":"logstash-*"},"coreMigrationVersion":"8.8.0","created_at":"2024-01-18T17:35:58.606Z","id":"5f863f70-4728-4e8d-b441-db08f8c33b28","managed":false,"references":[],"type":"index-pattern","typeMigrationVersion":"8.0.0","updated_at":"2024-01-18T17:35:58.606Z","version":"WzI4LDFd"} -{"attributes":{"description":"","state":{"adHocDataViews":{},"datasourceStates":{"formBased":{"layers":{"e633b1af-3ab4-4bf5-8faa-fefde06c4a4a":{"columnOrder":["f2555a1a-6f93-43fd-bc63-acdfadd47729","d229daf9-9658-4579-99af-01d8adb2f25f"],"columns":{"d229daf9-9658-4579-99af-01d8adb2f25f":{"dataType":"number","isBucketed":false,"label":"Median of bytes","operationType":"median","params":{"emptyAsNull":true},"scale":"ratio","sourceField":"bytes"},"f2555a1a-6f93-43fd-bc63-acdfadd47729":{"dataType":"date","isBucketed":true,"label":"@timestamp","operationType":"date_histogram","params":{"dropPartials":false,"includeEmptyRows":true,"interval":"auto"},"scale":"interval","sourceField":"@timestamp"}},"incompleteColumns":{},"sampling":1}}},"indexpattern":{"layers":{}},"textBased":{"layers":{}}},"filters":[],"internalReferences":[],"query":{"language":"kuery","query":""},"visualization":{"axisTitlesVisibilitySettings":{"x":true,"yLeft":true,"yRight":true},"fittingFunction":"None","gridlinesVisibilitySettings":{"x":true,"yLeft":true,"yRight":true},"labelsOrientation":{"x":0,"yLeft":0,"yRight":0},"layers":[{"accessors":["d229daf9-9658-4579-99af-01d8adb2f25f"],"layerId":"e633b1af-3ab4-4bf5-8faa-fefde06c4a4a","layerType":"data","position":"top","seriesType":"bar_stacked","showGridlines":false,"xAccessor":"f2555a1a-6f93-43fd-bc63-acdfadd47729"}],"legend":{"isVisible":true,"position":"right"},"preferredSeriesType":"bar_stacked","tickLabelsVisibilitySettings":{"x":true,"yLeft":true,"yRight":true},"valueLabels":"hide"}},"title":"Lens vis (managed)","visualizationType":"lnsXY"},"coreMigrationVersion":"8.8.0","created_at":"2024-01-18T17:42:12.920Z","id":"managed-36db-4a3b-a4ba-7a64ab8f130b","managed":true,"references":[{"id":"5f863f70-4728-4e8d-b441-db08f8c33b28","name":"indexpattern-datasource-layer-e633b1af-3ab4-4bf5-8faa-fefde06c4a4a","type":"index-pattern"}],"type":"lens","typeMigrationVersion":"8.9.0","updated_at":"2024-01-18T17:42:12.920Z","version":"WzQ1LDFd"} +{"attributes":{"description":"","state":{"adHocDataViews":{},"datasourceStates":{"formBased":{"layers":{"e633b1af-3ab4-4bf5-8faa-fefde06c4a4a":{"columnOrder":["f2555a1a-6f93-43fd-bc63-acdfadd47729","d229daf9-9658-4579-99af-01d8adb2f25f"],"columns":{"d229daf9-9658-4579-99af-01d8adb2f25f":{"dataType":"number","isBucketed":false,"label":"Median of bytes","operationType":"median","params":{"emptyAsNull":true},"scale":"ratio","sourceField":"bytes"},"f2555a1a-6f93-43fd-bc63-acdfadd47729":{"dataType":"date","isBucketed":true,"label":"@timestamp","operationType":"date_histogram","params":{"dropPartials":false,"includeEmptyRows":true,"interval":"auto"},"scale":"interval","sourceField":"@timestamp"}},"incompleteColumns":{},"sampling":1}}},"indexpattern":{"layers":{}},"textBased":{"layers":{}}},"filters":[],"internalReferences":[],"query":{"language":"kuery","query":""},"visualization":{"axisTitlesVisibilitySettings":{"x":true,"yLeft":true,"yRight":true},"fittingFunction":"None","gridlinesVisibilitySettings":{"x":true,"yLeft":true,"yRight":true},"labelsOrientation":{"x":0,"yLeft":0,"yRight":0},"layers":[{"accessors":["d229daf9-9658-4579-99af-01d8adb2f25f"],"layerId":"e633b1af-3ab4-4bf5-8faa-fefde06c4a4a","layerType":"data","position":"top","seriesType":"bar_stacked","showGridlines":false,"xAccessor":"f2555a1a-6f93-43fd-bc63-acdfadd47729"}],"legend":{"isVisible":true,"position":"right"},"preferredSeriesType":"bar_stacked","tickLabelsVisibilitySettings":{"x":true,"yLeft":true,"yRight":true},"valueLabels":"hide"}},"title":"Managed lens vis","visualizationType":"lnsXY"},"coreMigrationVersion":"8.8.0","created_at":"2024-01-18T17:42:12.920Z","id":"managed-36db-4a3b-a4ba-7a64ab8f130b","managed":true,"references":[{"id":"5f863f70-4728-4e8d-b441-db08f8c33b28","name":"indexpattern-datasource-layer-e633b1af-3ab4-4bf5-8faa-fefde06c4a4a","type":"index-pattern"}],"type":"lens","typeMigrationVersion":"8.9.0","updated_at":"2024-01-18T17:42:12.920Z","version":"WzQ1LDFd"} -{"attributes":{"description":"","state":{"adHocDataViews":{},"datasourceStates":{"formBased":{"layers":{"e633b1af-3ab4-4bf5-8faa-fefde06c4a4a":{"columnOrder":["f2555a1a-6f93-43fd-bc63-acdfadd47729","d229daf9-9658-4579-99af-01d8adb2f25f"],"columns":{"d229daf9-9658-4579-99af-01d8adb2f25f":{"dataType":"number","isBucketed":false,"label":"Median of bytes","operationType":"median","params":{"emptyAsNull":true},"scale":"ratio","sourceField":"bytes"},"f2555a1a-6f93-43fd-bc63-acdfadd47729":{"dataType":"date","isBucketed":true,"label":"@timestamp","operationType":"date_histogram","params":{"dropPartials":false,"includeEmptyRows":true,"interval":"auto"},"scale":"interval","sourceField":"@timestamp"}},"incompleteColumns":{},"sampling":1}}},"indexpattern":{"layers":{}},"textBased":{"layers":{}}},"filters":[],"internalReferences":[],"query":{"language":"kuery","query":""},"visualization":{"axisTitlesVisibilitySettings":{"x":true,"yLeft":true,"yRight":true},"fittingFunction":"None","gridlinesVisibilitySettings":{"x":true,"yLeft":true,"yRight":true},"labelsOrientation":{"x":0,"yLeft":0,"yRight":0},"layers":[{"accessors":["d229daf9-9658-4579-99af-01d8adb2f25f"],"layerId":"e633b1af-3ab4-4bf5-8faa-fefde06c4a4a","layerType":"data","position":"top","seriesType":"bar_stacked","showGridlines":false,"xAccessor":"f2555a1a-6f93-43fd-bc63-acdfadd47729"}],"legend":{"isVisible":true,"position":"right"},"preferredSeriesType":"bar_stacked","tickLabelsVisibilitySettings":{"x":true,"yLeft":true,"yRight":true},"valueLabels":"hide"}},"title":"Lens vis (unmanaged)","visualizationType":"lnsXY"},"coreMigrationVersion":"8.8.0","created_at":"2024-01-18T17:42:12.920Z","id":"unmanaged-36db-4a3b-a4ba-7a64ab8f130b","managed":false,"references":[{"id":"5f863f70-4728-4e8d-b441-db08f8c33b28","name":"indexpattern-datasource-layer-e633b1af-3ab4-4bf5-8faa-fefde06c4a4a","type":"index-pattern"}],"type":"lens","typeMigrationVersion":"8.9.0","updated_at":"2024-01-18T17:42:12.920Z","version":"WzQ1LDFd"} +{"attributes":{"description":"","state":{"adHocDataViews":{},"datasourceStates":{"formBased":{"layers":{"e633b1af-3ab4-4bf5-8faa-fefde06c4a4a":{"columnOrder":["f2555a1a-6f93-43fd-bc63-acdfadd47729","d229daf9-9658-4579-99af-01d8adb2f25f"],"columns":{"d229daf9-9658-4579-99af-01d8adb2f25f":{"dataType":"number","isBucketed":false,"label":"Median of bytes","operationType":"median","params":{"emptyAsNull":true},"scale":"ratio","sourceField":"bytes"},"f2555a1a-6f93-43fd-bc63-acdfadd47729":{"dataType":"date","isBucketed":true,"label":"@timestamp","operationType":"date_histogram","params":{"dropPartials":false,"includeEmptyRows":true,"interval":"auto"},"scale":"interval","sourceField":"@timestamp"}},"incompleteColumns":{},"sampling":1}}},"indexpattern":{"layers":{}},"textBased":{"layers":{}}},"filters":[],"internalReferences":[],"query":{"language":"kuery","query":""},"visualization":{"axisTitlesVisibilitySettings":{"x":true,"yLeft":true,"yRight":true},"fittingFunction":"None","gridlinesVisibilitySettings":{"x":true,"yLeft":true,"yRight":true},"labelsOrientation":{"x":0,"yLeft":0,"yRight":0},"layers":[{"accessors":["d229daf9-9658-4579-99af-01d8adb2f25f"],"layerId":"e633b1af-3ab4-4bf5-8faa-fefde06c4a4a","layerType":"data","position":"top","seriesType":"bar_stacked","showGridlines":false,"xAccessor":"f2555a1a-6f93-43fd-bc63-acdfadd47729"}],"legend":{"isVisible":true,"position":"right"},"preferredSeriesType":"bar_stacked","tickLabelsVisibilitySettings":{"x":true,"yLeft":true,"yRight":true},"valueLabels":"hide"}},"title":"Unmanaged lens vis","visualizationType":"lnsXY"},"coreMigrationVersion":"8.8.0","created_at":"2024-01-18T17:42:12.920Z","id":"unmanaged-36db-4a3b-a4ba-7a64ab8f130b","managed":false,"references":[{"id":"5f863f70-4728-4e8d-b441-db08f8c33b28","name":"indexpattern-datasource-layer-e633b1af-3ab4-4bf5-8faa-fefde06c4a4a","type":"index-pattern"}],"type":"lens","typeMigrationVersion":"8.9.0","updated_at":"2024-01-18T17:42:12.920Z","version":"WzQ1LDFd"} -{"attributes":{"columns":["@tags","clientip"],"description":"","grid":{},"hideChart":false,"isTextBasedQuery":false,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"agent.raw:\\\"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)\\\" \",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}"},"sort":[["@timestamp","desc"]],"timeRestore":false,"title":"Saved search","usesAdHocDataView":false},"coreMigrationVersion":"8.8.0","created_at":"2024-01-22T18:11:05.016Z","id":"managed-3d62-4113-ac7c-de2e20a68fbc","managed":true,"references":[{"id":"5f863f70-4728-4e8d-b441-db08f8c33b28","name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern"}],"type":"search","typeMigrationVersion":"8.0.0","updated_at":"2024-01-22T18:11:05.016Z","version":"WzIzLDFd"} +{"attributes":{"columns":["@tags","clientip"],"description":"","grid":{},"hideChart":false,"isTextBasedQuery":false,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"agent.raw:\\\"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)\\\" \",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}"},"sort":[["@timestamp","desc"]],"timeRestore":false,"title":"Managed saved search","usesAdHocDataView":false},"coreMigrationVersion":"8.8.0","created_at":"2024-01-22T18:11:05.016Z","id":"managed-3d62-4113-ac7c-de2e20a68fbc","managed":true,"references":[{"id":"5f863f70-4728-4e8d-b441-db08f8c33b28","name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern"}],"type":"search","typeMigrationVersion":"8.0.0","updated_at":"2024-01-22T18:11:05.016Z","version":"WzIzLDFd"} -{"attributes":{"columns":["@tags","clientip"],"description":"","grid":{},"hideChart":false,"isTextBasedQuery":false,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"agent.raw:\\\"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)\\\" \",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}"},"sort":[["@timestamp","desc"]],"timeRestore":false,"title":"Saved search","usesAdHocDataView":false},"coreMigrationVersion":"8.8.0","created_at":"2024-01-22T18:11:05.016Z","id":"unmanaged-3d62-4113-ac7c-de2e20a68fbc","managed":false,"references":[{"id":"5f863f70-4728-4e8d-b441-db08f8c33b28","name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern"}],"type":"search","typeMigrationVersion":"8.0.0","updated_at":"2024-01-22T18:11:05.016Z","version":"WzIzLDFd"} +{"attributes":{"columns":["@tags","clientip"],"description":"","grid":{},"hideChart":false,"isTextBasedQuery":false,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"agent.raw:\\\"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)\\\" \",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}"},"sort":[["@timestamp","desc"]],"timeRestore":false,"title":"Unmanaged saved search","usesAdHocDataView":false},"coreMigrationVersion":"8.8.0","created_at":"2024-01-22T18:11:05.016Z","id":"unmanaged-3d62-4113-ac7c-de2e20a68fbc","managed":false,"references":[{"id":"5f863f70-4728-4e8d-b441-db08f8c33b28","name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern"}],"type":"search","typeMigrationVersion":"8.0.0","updated_at":"2024-01-22T18:11:05.016Z","version":"WzIzLDFd"} -{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}"},"title":"Legacy visualization","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"Legacy visualization\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"1a14d0ad-0d74-4470-a189-8f040cddc1a1\",\"type\":\"timeseries\",\"series\":[{\"id\":\"daa8bbf7-86cc-4394-b249-be48da9f7351\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"metrics\":[{\"id\":\"795375d9-1aa6-454d-9b23-687e69f3382c\",\"type\":\"count\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"default\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"override_index_pattern\":0,\"series_drop_last_bucket\":0}],\"time_field\":\"\",\"use_kibana_indexes\":true,\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"truncate_legend\":1,\"max_lines_legend\":1,\"show_grid\":1,\"tooltip_mode\":\"show_all\",\"drop_last_bucket\":0,\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}"},"coreMigrationVersion":"8.8.0","created_at":"2024-01-24T18:53:06.818Z","id":"managed-feb9-4ba6-9538-1b8f67fb4f57","managed":true,"references":[{"id":"5f863f70-4728-4e8d-b441-db08f8c33b28","name":"metrics_0_index_pattern","type":"index-pattern"}],"type":"visualization","typeMigrationVersion":"8.5.0","updated_at":"2024-01-24T18:53:06.818Z","version":"WzEzLDFd"} +{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}"},"title":"Managed legacy visualization","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"Legacy visualization\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"1a14d0ad-0d74-4470-a189-8f040cddc1a1\",\"type\":\"timeseries\",\"series\":[{\"id\":\"daa8bbf7-86cc-4394-b249-be48da9f7351\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"metrics\":[{\"id\":\"795375d9-1aa6-454d-9b23-687e69f3382c\",\"type\":\"count\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"default\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"override_index_pattern\":0,\"series_drop_last_bucket\":0}],\"time_field\":\"\",\"use_kibana_indexes\":true,\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"truncate_legend\":1,\"max_lines_legend\":1,\"show_grid\":1,\"tooltip_mode\":\"show_all\",\"drop_last_bucket\":0,\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}"},"coreMigrationVersion":"8.8.0","created_at":"2024-01-24T18:53:06.818Z","id":"managed-feb9-4ba6-9538-1b8f67fb4f57","managed":true,"references":[{"id":"5f863f70-4728-4e8d-b441-db08f8c33b28","name":"metrics_0_index_pattern","type":"index-pattern"}],"type":"visualization","typeMigrationVersion":"8.5.0","updated_at":"2024-01-24T18:53:06.818Z","version":"WzEzLDFd"} -{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}"},"title":"Legacy visualization","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"Legacy visualization\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"1a14d0ad-0d74-4470-a189-8f040cddc1a1\",\"type\":\"timeseries\",\"series\":[{\"id\":\"daa8bbf7-86cc-4394-b249-be48da9f7351\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"metrics\":[{\"id\":\"795375d9-1aa6-454d-9b23-687e69f3382c\",\"type\":\"count\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"default\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"override_index_pattern\":0,\"series_drop_last_bucket\":0}],\"time_field\":\"\",\"use_kibana_indexes\":true,\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"truncate_legend\":1,\"max_lines_legend\":1,\"show_grid\":1,\"tooltip_mode\":\"show_all\",\"drop_last_bucket\":0,\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}"},"coreMigrationVersion":"8.8.0","created_at":"2024-01-24T18:53:06.818Z","id":"unmanaged-feb9-4ba6-9538-1b8f67fb4f57","managed":false,"references":[{"id":"5f863f70-4728-4e8d-b441-db08f8c33b28","name":"metrics_0_index_pattern","type":"index-pattern"}],"type":"visualization","typeMigrationVersion":"8.5.0","updated_at":"2024-01-24T18:53:06.818Z","version":"WzEzLDFd"} +{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}"},"title":"Unmanaged legacy visualization","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"Legacy visualization\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"1a14d0ad-0d74-4470-a189-8f040cddc1a1\",\"type\":\"timeseries\",\"series\":[{\"id\":\"daa8bbf7-86cc-4394-b249-be48da9f7351\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"palette\":{\"type\":\"palette\",\"name\":\"default\"},\"metrics\":[{\"id\":\"795375d9-1aa6-454d-9b23-687e69f3382c\",\"type\":\"count\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"default\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"override_index_pattern\":0,\"series_drop_last_bucket\":0}],\"time_field\":\"\",\"use_kibana_indexes\":true,\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"truncate_legend\":1,\"max_lines_legend\":1,\"show_grid\":1,\"tooltip_mode\":\"show_all\",\"drop_last_bucket\":0,\"index_pattern_ref_name\":\"metrics_0_index_pattern\"}}"},"coreMigrationVersion":"8.8.0","created_at":"2024-01-24T18:53:06.818Z","id":"unmanaged-feb9-4ba6-9538-1b8f67fb4f57","managed":false,"references":[{"id":"5f863f70-4728-4e8d-b441-db08f8c33b28","name":"metrics_0_index_pattern","type":"index-pattern"}],"type":"visualization","typeMigrationVersion":"8.5.0","updated_at":"2024-01-24T18:53:06.818Z","version":"WzEzLDFd"} -{"attributes":{"description":"","layerListJSON":"[{\"locale\":\"autoselect\",\"sourceDescriptor\":{\"type\":\"EMS_TMS\",\"isAutoSelect\":true,\"lightModeDefault\":\"road_map_desaturated\"},\"id\":\"5ff9c98e-e0d3-4aff-ac98-b33c191496b4\",\"label\":null,\"minZoom\":0,\"maxZoom\":24,\"alpha\":1,\"visible\":true,\"style\":{\"type\":\"EMS_VECTOR_TILE\",\"color\":\"\"},\"includeInFitToBounds\":true,\"type\":\"EMS_VECTOR_TILE\"}]","mapStateJSON":"{\"adHocDataViews\":[],\"zoom\":1.4,\"center\":{\"lon\":0,\"lat\":19.94277},\"timeFilters\":{\"from\":\"now-15m\",\"to\":\"now\"},\"refreshConfig\":{\"isPaused\":true,\"interval\":60000},\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filters\":[],\"settings\":{\"autoFitToDataBounds\":false,\"backgroundColor\":\"#ffffff\",\"customIcons\":[],\"disableInteractive\":false,\"disableTooltipControl\":false,\"hideToolbarOverlay\":false,\"hideLayerControl\":false,\"hideViewControl\":false,\"initialLocation\":\"LAST_SAVED_LOCATION\",\"fixedLocation\":{\"lat\":0,\"lon\":0,\"zoom\":2},\"browserLocation\":{\"zoom\":2},\"keydownScrollZoom\":false,\"maxZoom\":24,\"minZoom\":0,\"showScaleControl\":false,\"showSpatialFilters\":true,\"showTimesliderToggleButton\":true,\"spatialFiltersAlpa\":0.3,\"spatialFiltersFillColor\":\"#DA8B45\",\"spatialFiltersLineColor\":\"#DA8B45\"}}","title":"Map","uiStateJSON":"{\"isLayerTOCOpen\":true,\"openTOCDetails\":[]}"},"coreMigrationVersion":"8.8.0","created_at":"2024-01-24T18:22:40.360Z","id":"managed-d7ab-46eb-a807-8fed28ed8566","managed":true,"references":[],"type":"map","typeMigrationVersion":"8.4.0","updated_at":"2024-01-24T18:23:07.090Z","version":"WzEyLDFd"} +{"attributes":{"description":"","layerListJSON":"[{\"locale\":\"autoselect\",\"sourceDescriptor\":{\"type\":\"EMS_TMS\",\"isAutoSelect\":true,\"lightModeDefault\":\"road_map_desaturated\"},\"id\":\"5ff9c98e-e0d3-4aff-ac98-b33c191496b4\",\"label\":null,\"minZoom\":0,\"maxZoom\":24,\"alpha\":1,\"visible\":true,\"style\":{\"type\":\"EMS_VECTOR_TILE\",\"color\":\"\"},\"includeInFitToBounds\":true,\"type\":\"EMS_VECTOR_TILE\"}]","mapStateJSON":"{\"adHocDataViews\":[],\"zoom\":1.4,\"center\":{\"lon\":0,\"lat\":19.94277},\"timeFilters\":{\"from\":\"now-15m\",\"to\":\"now\"},\"refreshConfig\":{\"isPaused\":true,\"interval\":60000},\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filters\":[],\"settings\":{\"autoFitToDataBounds\":false,\"backgroundColor\":\"#ffffff\",\"customIcons\":[],\"disableInteractive\":false,\"disableTooltipControl\":false,\"hideToolbarOverlay\":false,\"hideLayerControl\":false,\"hideViewControl\":false,\"initialLocation\":\"LAST_SAVED_LOCATION\",\"fixedLocation\":{\"lat\":0,\"lon\":0,\"zoom\":2},\"browserLocation\":{\"zoom\":2},\"keydownScrollZoom\":false,\"maxZoom\":24,\"minZoom\":0,\"showScaleControl\":false,\"showSpatialFilters\":true,\"showTimesliderToggleButton\":true,\"spatialFiltersAlpa\":0.3,\"spatialFiltersFillColor\":\"#DA8B45\",\"spatialFiltersLineColor\":\"#DA8B45\"}}","title":"Managed map","uiStateJSON":"{\"isLayerTOCOpen\":true,\"openTOCDetails\":[]}"},"coreMigrationVersion":"8.8.0","created_at":"2024-01-24T18:22:40.360Z","id":"managed-d7ab-46eb-a807-8fed28ed8566","managed":true,"references":[],"type":"map","typeMigrationVersion":"8.4.0","updated_at":"2024-01-24T18:23:07.090Z","version":"WzEyLDFd"} -{"attributes":{"description":"","layerListJSON":"[{\"locale\":\"autoselect\",\"sourceDescriptor\":{\"type\":\"EMS_TMS\",\"isAutoSelect\":true,\"lightModeDefault\":\"road_map_desaturated\"},\"id\":\"5ff9c98e-e0d3-4aff-ac98-b33c191496b4\",\"label\":null,\"minZoom\":0,\"maxZoom\":24,\"alpha\":1,\"visible\":true,\"style\":{\"type\":\"EMS_VECTOR_TILE\",\"color\":\"\"},\"includeInFitToBounds\":true,\"type\":\"EMS_VECTOR_TILE\"}]","mapStateJSON":"{\"adHocDataViews\":[],\"zoom\":1.4,\"center\":{\"lon\":0,\"lat\":19.94277},\"timeFilters\":{\"from\":\"now-15m\",\"to\":\"now\"},\"refreshConfig\":{\"isPaused\":true,\"interval\":60000},\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filters\":[],\"settings\":{\"autoFitToDataBounds\":false,\"backgroundColor\":\"#ffffff\",\"customIcons\":[],\"disableInteractive\":false,\"disableTooltipControl\":false,\"hideToolbarOverlay\":false,\"hideLayerControl\":false,\"hideViewControl\":false,\"initialLocation\":\"LAST_SAVED_LOCATION\",\"fixedLocation\":{\"lat\":0,\"lon\":0,\"zoom\":2},\"browserLocation\":{\"zoom\":2},\"keydownScrollZoom\":false,\"maxZoom\":24,\"minZoom\":0,\"showScaleControl\":false,\"showSpatialFilters\":true,\"showTimesliderToggleButton\":true,\"spatialFiltersAlpa\":0.3,\"spatialFiltersFillColor\":\"#DA8B45\",\"spatialFiltersLineColor\":\"#DA8B45\"}}","title":"Map","uiStateJSON":"{\"isLayerTOCOpen\":true,\"openTOCDetails\":[]}"},"coreMigrationVersion":"8.8.0","created_at":"2024-01-24T18:22:40.360Z","id":"unmanaged-d7ab-46eb-a807-8fed28ed8566","managed":false,"references":[],"type":"map","typeMigrationVersion":"8.4.0","updated_at":"2024-01-24T18:23:07.090Z","version":"WzEyLDFd"} +{"attributes":{"description":"","layerListJSON":"[{\"locale\":\"autoselect\",\"sourceDescriptor\":{\"type\":\"EMS_TMS\",\"isAutoSelect\":true,\"lightModeDefault\":\"road_map_desaturated\"},\"id\":\"5ff9c98e-e0d3-4aff-ac98-b33c191496b4\",\"label\":null,\"minZoom\":0,\"maxZoom\":24,\"alpha\":1,\"visible\":true,\"style\":{\"type\":\"EMS_VECTOR_TILE\",\"color\":\"\"},\"includeInFitToBounds\":true,\"type\":\"EMS_VECTOR_TILE\"}]","mapStateJSON":"{\"adHocDataViews\":[],\"zoom\":1.4,\"center\":{\"lon\":0,\"lat\":19.94277},\"timeFilters\":{\"from\":\"now-15m\",\"to\":\"now\"},\"refreshConfig\":{\"isPaused\":true,\"interval\":60000},\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filters\":[],\"settings\":{\"autoFitToDataBounds\":false,\"backgroundColor\":\"#ffffff\",\"customIcons\":[],\"disableInteractive\":false,\"disableTooltipControl\":false,\"hideToolbarOverlay\":false,\"hideLayerControl\":false,\"hideViewControl\":false,\"initialLocation\":\"LAST_SAVED_LOCATION\",\"fixedLocation\":{\"lat\":0,\"lon\":0,\"zoom\":2},\"browserLocation\":{\"zoom\":2},\"keydownScrollZoom\":false,\"maxZoom\":24,\"minZoom\":0,\"showScaleControl\":false,\"showSpatialFilters\":true,\"showTimesliderToggleButton\":true,\"spatialFiltersAlpa\":0.3,\"spatialFiltersFillColor\":\"#DA8B45\",\"spatialFiltersLineColor\":\"#DA8B45\"}}","title":"Unmanaged map","uiStateJSON":"{\"isLayerTOCOpen\":true,\"openTOCDetails\":[]}"},"coreMigrationVersion":"8.8.0","created_at":"2024-01-24T18:22:40.360Z","id":"unmanaged-d7ab-46eb-a807-8fed28ed8566","managed":false,"references":[],"type":"map","typeMigrationVersion":"8.4.0","updated_at":"2024-01-24T18:23:07.090Z","version":"WzEyLDFd"} + +{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}"},"optionsJSON":"{\"useMargins\":true,\"syncColors\":false,\"syncCursor\":true,\"syncTooltips\":false,\"hidePanelTitles\":false}","panelsJSON":"[{\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":0,\"w\":24,\"h\":15,\"i\":\"536c52e4-ecf1-4cde-9323-cc1c3de1fdd2\"},\"panelIndex\":\"536c52e4-ecf1-4cde-9323-cc1c3de1fdd2\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_536c52e4-ecf1-4cde-9323-cc1c3de1fdd2\"},{\"type\":\"lens\",\"gridData\":{\"x\":24,\"y\":0,\"w\":24,\"h\":15,\"i\":\"f19bd0df-03e7-4181-9adf-e3b3b4c97e19\"},\"panelIndex\":\"f19bd0df-03e7-4181-9adf-e3b3b4c97e19\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_f19bd0df-03e7-4181-9adf-e3b3b4c97e19\"},{\"type\":\"map\",\"gridData\":{\"x\":0,\"y\":15,\"w\":24,\"h\":15,\"i\":\"26f25c71-2b7c-4540-8c1c-c003b5657978\"},\"panelIndex\":\"26f25c71-2b7c-4540-8c1c-c003b5657978\",\"embeddableConfig\":{\"mapCenter\":{\"lat\":19.94277,\"lon\":0,\"zoom\":1.4},\"mapBuffer\":{\"minLon\":-180,\"minLat\":-66.51326,\"maxLon\":180,\"maxLat\":66.51326},\"isLayerTOCOpen\":true,\"openTOCDetails\":[],\"hiddenLayers\":[],\"enhancements\":{}},\"panelRefName\":\"panel_26f25c71-2b7c-4540-8c1c-c003b5657978\"},{\"type\":\"search\",\"gridData\":{\"x\":24,\"y\":15,\"w\":24,\"h\":15,\"i\":\"d7e33257-de57-40cb-9171-3dd739dd1875\"},\"panelIndex\":\"d7e33257-de57-40cb-9171-3dd739dd1875\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_d7e33257-de57-40cb-9171-3dd739dd1875\"}]","timeRestore":false,"title":"Managed dashboard with by-ref panels","version":1},"coreMigrationVersion":"8.8.0","created_at":"2024-01-31T21:57:49.102Z","id":"c44c86f9-b105-4a9c-9a24-449a58a827f3","managed":true,"references":[{"id":"managed-feb9-4ba6-9538-1b8f67fb4f57","name":"536c52e4-ecf1-4cde-9323-cc1c3de1fdd2:panel_536c52e4-ecf1-4cde-9323-cc1c3de1fdd2","type":"visualization"},{"id":"managed-36db-4a3b-a4ba-7a64ab8f130b","name":"f19bd0df-03e7-4181-9adf-e3b3b4c97e19:panel_f19bd0df-03e7-4181-9adf-e3b3b4c97e19","type":"lens"},{"id":"managed-d7ab-46eb-a807-8fed28ed8566","name":"26f25c71-2b7c-4540-8c1c-c003b5657978:panel_26f25c71-2b7c-4540-8c1c-c003b5657978","type":"map"},{"id":"managed-3d62-4113-ac7c-de2e20a68fbc","name":"d7e33257-de57-40cb-9171-3dd739dd1875:panel_d7e33257-de57-40cb-9171-3dd739dd1875","type":"search"}],"type":"dashboard","typeMigrationVersion":"8.9.0","updated_at":"2024-01-31T21:57:49.102Z","version":"WzEwOSwxXQ=="} diff --git a/test/functional/services/dashboard/add_panel.ts b/test/functional/services/dashboard/add_panel.ts index 65adf6dee5359..5b16c6af9ca20 100644 --- a/test/functional/services/dashboard/add_panel.ts +++ b/test/functional/services/dashboard/add_panel.ts @@ -230,22 +230,41 @@ export class DashboardAddPanelService extends FtrService { return this.addEmbeddable(vizName, 'Visualization'); } - async addEmbeddable(embeddableName: string, embeddableType: string) { + async addEmbeddable( + embeddableName: string, + embeddableType?: string, + closePanelWhenComplete: boolean = true + ) { this.log.debug( `DashboardAddPanel.addEmbeddable, name: ${embeddableName}, type: ${embeddableType}` ); await this.ensureAddPanelIsShowing(); - await this.savedObjectsFinder.toggleFilter(embeddableType); - await this.savedObjectsFinder.filterEmbeddableNames(`"${embeddableName.replace('-', ' ')}"`); + await this.savedObjectsFinder.filterEmbeddableNames( + `${embeddableType ? 'type:(' + embeddableType + ') ' : ''}"${embeddableName.replace( + '-', + ' ' + )}"` + ); await this.testSubjects.click(`savedObjectTitle${embeddableName.split(' ').join('-')}`); await this.testSubjects.exists('addObjectToDashboardSuccess'); - await this.closeAddPanel(); + if (closePanelWhenComplete) { + await this.closeAddPanel(); + } // close "Added successfully" toast await this.common.clearAllToasts(); return embeddableName; } + async addEmbeddables(embeddables: Array<{ name: string; type?: string }>) { + const addedEmbeddables: string[] = []; + for (const { name, type } of embeddables) { + addedEmbeddables.push(await this.addEmbeddable(name, type, false)); + } + await this.closeAddPanel(); + return addedEmbeddables; + } + async panelAddLinkExists(name: string) { this.log.debug(`DashboardAddPanel.panelAddLinkExists(${name})`); await this.ensureAddPanelIsShowing(); diff --git a/test/functional/services/dashboard/panel_settings.ts b/test/functional/services/dashboard/panel_settings.ts index 36bd01b1fad0d..11b817b176b6e 100644 --- a/test/functional/services/dashboard/panel_settings.ts +++ b/test/functional/services/dashboard/panel_settings.ts @@ -64,6 +64,10 @@ export function DashboardCustomizePanelProvider({ getService, getPageObject }: F ); } }); + + await retry.waitFor('superDatePickerToggleQuickMenuButton to be present', async () => { + return Boolean(await this.findDatePickerQuickMenuButton()); + }); } public async disableCustomTimeRange() { diff --git a/tsconfig.base.json b/tsconfig.base.json index 3c6be26411d88..bb1f7b7877026 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -642,6 +642,8 @@ "@kbn/data-view-field-editor-plugin/*": ["src/plugins/data_view_field_editor/*"], "@kbn/data-view-management-plugin": ["src/plugins/data_view_management"], "@kbn/data-view-management-plugin/*": ["src/plugins/data_view_management/*"], + "@kbn/data-view-utils": ["packages/kbn-data-view-utils"], + "@kbn/data-view-utils/*": ["packages/kbn-data-view-utils/*"], "@kbn/data-views-plugin": ["src/plugins/data_views"], "@kbn/data-views-plugin/*": ["src/plugins/data_views/*"], "@kbn/data-visualizer-plugin": ["x-pack/plugins/data_visualizer"], diff --git a/x-pack/plugins/alerting/server/alerts_service/lib/set_alerts_to_untracked.ts b/x-pack/plugins/alerting/server/alerts_service/lib/set_alerts_to_untracked.ts index 4b1e67baaba91..d0e02fb8b1783 100644 --- a/x-pack/plugins/alerting/server/alerts_service/lib/set_alerts_to_untracked.ts +++ b/x-pack/plugins/alerting/server/alerts_service/lib/set_alerts_to_untracked.ts @@ -18,6 +18,7 @@ import { ALERT_STATUS_UNTRACKED, ALERT_TIME_RANGE, ALERT_UUID, + AlertStatus, } from '@kbn/rule-data-utils'; export interface SetAlertsToUntrackedOpts { @@ -39,20 +40,15 @@ interface ConsumersAndRuleTypesAggregation { }; } -export async function setAlertsToUntracked({ - logger, - esClient, - indices, +const getQuery = ({ ruleIds = [], - alertUuids = [], // OPTIONAL - If no alertUuids are passed, untrack ALL ids by default, - ensureAuthorized, + alertUuids = [], + alertStatus, }: { - logger: Logger; - esClient: ElasticsearchClient; -} & SetAlertsToUntrackedOpts): Promise { - if (isEmpty(ruleIds) && isEmpty(alertUuids)) - throw new Error('Must provide either ruleIds or alertUuids'); - + ruleIds?: string[]; + alertUuids?: string[]; + alertStatus: AlertStatus; +}) => { const shouldMatchRules: Array<{ term: Record }> = ruleIds.map( (ruleId) => ({ term: { @@ -71,12 +67,12 @@ export async function setAlertsToUntracked({ const statusTerms: Array<{ term: Record }> = [ { term: { - [ALERT_STATUS]: { value: ALERT_STATUS_ACTIVE }, + [ALERT_STATUS]: { value: alertStatus }, }, }, ]; - const must = [ + return [ ...statusTerms, { bool: { @@ -90,6 +86,21 @@ export async function setAlertsToUntracked({ }, }, ]; +}; + +export async function setAlertsToUntracked({ + logger, + esClient, + indices, + ruleIds = [], + alertUuids = [], // OPTIONAL - If no alertUuids are passed, untrack ALL ids by default, + ensureAuthorized, +}: { + logger: Logger; + esClient: ElasticsearchClient; +} & SetAlertsToUntrackedOpts): Promise { + if (isEmpty(ruleIds) && isEmpty(alertUuids)) + throw new Error('Must provide either ruleIds or alertUuids'); if (ensureAuthorized) { // Fetch all rule type IDs and rule consumers, then run the provided ensureAuthorized check for each of them @@ -100,7 +111,11 @@ export async function setAlertsToUntracked({ size: 0, query: { bool: { - must, + must: getQuery({ + ruleIds, + alertUuids, + alertStatus: ALERT_STATUS_ACTIVE, + }), }, }, aggs: { @@ -141,7 +156,11 @@ export async function setAlertsToUntracked({ }, query: { bool: { - must, + must: getQuery({ + ruleIds, + alertUuids, + alertStatus: ALERT_STATUS_ACTIVE, + }), }, }, }, @@ -169,7 +188,11 @@ export async function setAlertsToUntracked({ size: total, query: { bool: { - must, + must: getQuery({ + ruleIds, + alertUuids, + alertStatus: ALERT_STATUS_UNTRACKED, + }), }, }, }, diff --git a/x-pack/plugins/alerting/server/integration_tests/__snapshots__/serverless_upgrade_and_rollback_checks.test.ts.snap b/x-pack/plugins/alerting/server/integration_tests/__snapshots__/serverless_upgrade_and_rollback_checks.test.ts.snap index f799fada643f3..70ffc475d01d6 100644 --- a/x-pack/plugins/alerting/server/integration_tests/__snapshots__/serverless_upgrade_and_rollback_checks.test.ts.snap +++ b/x-pack/plugins/alerting/server/integration_tests/__snapshots__/serverless_upgrade_and_rollback_checks.test.ts.snap @@ -7219,20 +7219,60 @@ Object { "type": "string", }, "params": Object { - "additionalProperties": false, - "properties": Object { - "command": Object { - "const": "isolate", - "type": "string", + "anyOf": Array [ + Object { + "additionalProperties": false, + "properties": Object { + "command": Object { + "const": "isolate", + "type": "string", + }, + "comment": Object { + "type": "string", + }, + }, + "required": Array [ + "command", + ], + "type": "object", }, - "comment": Object { - "type": "string", + Object { + "additionalProperties": false, + "properties": Object { + "command": Object { + "enum": Array [ + "kill-process", + "suspend-process", + ], + "type": "string", + }, + "comment": Object { + "type": "string", + }, + "config": Object { + "additionalProperties": false, + "properties": Object { + "field": Object { + "type": "string", + }, + "overwrite": Object { + "default": true, + "type": "boolean", + }, + }, + "required": Array [ + "field", + ], + "type": "object", + }, + }, + "required": Array [ + "command", + "config", + ], + "type": "object", }, - }, - "required": Array [ - "command", ], - "type": "object", }, }, "required": Array [ @@ -7857,20 +7897,60 @@ Object { "type": "string", }, "params": Object { - "additionalProperties": false, - "properties": Object { - "command": Object { - "const": "isolate", - "type": "string", + "anyOf": Array [ + Object { + "additionalProperties": false, + "properties": Object { + "command": Object { + "const": "isolate", + "type": "string", + }, + "comment": Object { + "type": "string", + }, + }, + "required": Array [ + "command", + ], + "type": "object", }, - "comment": Object { - "type": "string", + Object { + "additionalProperties": false, + "properties": Object { + "command": Object { + "enum": Array [ + "kill-process", + "suspend-process", + ], + "type": "string", + }, + "comment": Object { + "type": "string", + }, + "config": Object { + "additionalProperties": false, + "properties": Object { + "field": Object { + "type": "string", + }, + "overwrite": Object { + "default": true, + "type": "boolean", + }, + }, + "required": Array [ + "field", + ], + "type": "object", + }, + }, + "required": Array [ + "command", + "config", + ], + "type": "object", }, - }, - "required": Array [ - "command", ], - "type": "object", }, }, "required": Array [ diff --git a/x-pack/plugins/apm/public/components/app/dependency_detail_operations/dependency_detail_operations_list/index.tsx b/x-pack/plugins/apm/public/components/app/dependency_detail_operations/dependency_detail_operations_list/index.tsx index 35516c1da58fd..7b7a4089172bf 100644 --- a/x-pack/plugins/apm/public/components/app/dependency_detail_operations/dependency_detail_operations_list/index.tsx +++ b/x-pack/plugins/apm/public/components/app/dependency_detail_operations/dependency_detail_operations_list/index.tsx @@ -63,7 +63,8 @@ export function DependencyDetailOperationsList() { const { core } = useApmPluginContext(); - const breakpoints = useBreakpoints(); + const { isLarge } = useBreakpoints(); + const shouldShowSparkPlots = !isLarge; const { start, end } = useTimeRange({ rangeFrom, @@ -147,7 +148,7 @@ export function DependencyDetailOperationsList() { render: (_, { spanName }) => , }, ...getSpanMetricColumns({ - breakpoints, + shouldShowSparkPlots, comparisonFetchStatus: comparisonStatsFetch.status, }), ]; diff --git a/x-pack/plugins/apm/public/components/app/mobile/service_overview/index.tsx b/x-pack/plugins/apm/public/components/app/mobile/service_overview/index.tsx index 55104eefaa071..dd0e2cd9968cc 100644 --- a/x-pack/plugins/apm/public/components/app/mobile/service_overview/index.tsx +++ b/x-pack/plugins/apm/public/components/app/mobile/service_overview/index.tsx @@ -193,7 +193,6 @@ export function MobileServiceOverview() { kuery={kueryWithMobileFilters} environment={environment} fixedHeight={true} - isSingleColumn={isSingleColumn} start={start} end={end} showPerPageOptions={false} diff --git a/x-pack/plugins/apm/public/components/app/service_overview/index.tsx b/x-pack/plugins/apm/public/components/app/service_overview/index.tsx index 4b2ab0ad6c3a8..743843c825210 100644 --- a/x-pack/plugins/apm/public/components/app/service_overview/index.tsx +++ b/x-pack/plugins/apm/public/components/app/service_overview/index.tsx @@ -135,11 +135,11 @@ export function ServiceOverview() { kuery={kuery} environment={environment} fixedHeight={true} - isSingleColumn={isSingleColumn} start={start} end={end} showPerPageOptions={false} numberOfTransactionsPerPage={5} + showSparkPlots={!isSingleColumn} /> @@ -209,6 +209,7 @@ export function ServiceOverview() { )} } + showSparkPlots={!isSingleColumn} /> diff --git a/x-pack/plugins/apm/public/components/app/service_overview/service_overview_dependencies_table/index.tsx b/x-pack/plugins/apm/public/components/app/service_overview/service_overview_dependencies_table/index.tsx index f95905dd3dc57..e8c9dffa375b0 100644 --- a/x-pack/plugins/apm/public/components/app/service_overview/service_overview_dependencies_table/index.tsx +++ b/x-pack/plugins/apm/public/components/app/service_overview/service_overview_dependencies_table/index.tsx @@ -24,12 +24,14 @@ interface ServiceOverviewDependenciesTableProps { fixedHeight?: boolean; link?: ReactNode; showPerPageOptions?: boolean; + showSparkPlots?: boolean; } export function ServiceOverviewDependenciesTable({ fixedHeight, link, showPerPageOptions = true, + showSparkPlots, }: ServiceOverviewDependenciesTableProps) { const { query: { @@ -171,6 +173,7 @@ export function ServiceOverviewDependenciesTable({ link={link} showPerPageOptions={showPerPageOptions} initialPageSize={5} + showSparkPlots={showSparkPlots} /> ); } diff --git a/x-pack/plugins/apm/public/components/shared/dependencies_table/get_span_metric_columns.tsx b/x-pack/plugins/apm/public/components/shared/dependencies_table/get_span_metric_columns.tsx index d477e7269cace..07d1b75ffb238 100644 --- a/x-pack/plugins/apm/public/components/shared/dependencies_table/get_span_metric_columns.tsx +++ b/x-pack/plugins/apm/public/components/shared/dependencies_table/get_span_metric_columns.tsx @@ -13,7 +13,6 @@ import { RIGHT_ALIGNMENT, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import { Breakpoints } from '../../../hooks/use_breakpoints'; import { ChartType, getTimeSeriesColor, @@ -53,14 +52,12 @@ export interface SpanMetricGroup { } export function getSpanMetricColumns({ - breakpoints, comparisonFetchStatus, + shouldShowSparkPlots, }: { - breakpoints: Breakpoints; comparisonFetchStatus: FETCH_STATUS; + shouldShowSparkPlots: boolean; }): Array> { - const { isLarge } = breakpoints; - const shouldShowSparkPlots = !isLarge; const isLoading = isPending(comparisonFetchStatus); return [ diff --git a/x-pack/plugins/apm/public/components/shared/dependencies_table/index.tsx b/x-pack/plugins/apm/public/components/shared/dependencies_table/index.tsx index c4d1a0bdaffe1..dec4f35327e57 100644 --- a/x-pack/plugins/apm/public/components/shared/dependencies_table/index.tsx +++ b/x-pack/plugins/apm/public/components/shared/dependencies_table/index.tsx @@ -38,6 +38,7 @@ interface Props { status: FETCH_STATUS; compact?: boolean; showPerPageOptions?: boolean; + showSparkPlots?: boolean; } type FormattedSpanMetricGroup = SpanMetricGroup & { @@ -56,10 +57,11 @@ export function DependenciesTable(props: Props) { compact = true, showPerPageOptions = true, initialPageSize, + showSparkPlots, } = props; - // SparkPlots should be hidden if we're in two-column view and size XL (1200px) - const breakpoints = useBreakpoints(); + const { isLarge } = useBreakpoints(); + const shouldShowSparkPlots = showSparkPlots ?? !isLarge; const items: FormattedSpanMetricGroup[] = dependencies.map((dependency) => ({ name: dependency.name, @@ -95,7 +97,7 @@ export function DependenciesTable(props: Props) { width: '30%', }, ...getSpanMetricColumns({ - breakpoints, + shouldShowSparkPlots, comparisonFetchStatus: status, }), ]; diff --git a/x-pack/plugins/apm/public/components/shared/transactions_table/index.tsx b/x-pack/plugins/apm/public/components/shared/transactions_table/index.tsx index e4553dfee073a..0d9621efd18c8 100644 --- a/x-pack/plugins/apm/public/components/shared/transactions_table/index.tsx +++ b/x-pack/plugins/apm/public/components/shared/transactions_table/index.tsx @@ -48,7 +48,6 @@ const INITIAL_STATE: ApiResponse & { requestId: string } = { interface Props { hideTitle?: boolean; hideViewTransactionsLink?: boolean; - isSingleColumn?: boolean; numberOfTransactionsPerPage?: number; showPerPageOptions?: boolean; showMaxTransactionGroupsExceededWarning?: boolean; @@ -58,13 +57,13 @@ interface Props { start: string; end: string; saveTableOptionsToUrl?: boolean; + showSparkPlots?: boolean; } export function TransactionsTable({ fixedHeight = false, hideViewTransactionsLink = false, hideTitle = false, - isSingleColumn = true, numberOfTransactionsPerPage = 10, showPerPageOptions = true, showMaxTransactionGroupsExceededWarning = false, @@ -73,6 +72,7 @@ export function TransactionsTable({ start, end, saveTableOptionsToUrl = false, + showSparkPlots, }: Props) { const { link } = useApmRouter(); @@ -94,9 +94,8 @@ export function TransactionsTable({ latencyAggregationTypeFromQuery ); - // SparkPlots should be hidden if we're in two-column view and size XL (1200px) - const { isXl } = useBreakpoints(); - const shouldShowSparkPlots = isSingleColumn || !isXl; + const { isLarge } = useBreakpoints(); + const shouldShowSparkPlots = showSparkPlots ?? !isLarge; const { transactionType, serviceName } = useApmServiceContext(); const [searchQuery, setSearchQueryDebounced] = useStateDebounced(''); diff --git a/x-pack/plugins/cases/public/components/configure_cases/index.test.tsx b/x-pack/plugins/cases/public/components/configure_cases/index.test.tsx index e2db3717c009d..ba3e7850533c9 100644 --- a/x-pack/plugins/cases/public/components/configure_cases/index.test.tsx +++ b/x-pack/plugins/cases/public/components/configure_cases/index.test.tsx @@ -750,6 +750,7 @@ describe('ConfigureCases', () => { type: customFieldsConfigurationMock[0].type, label: `${customFieldsConfigurationMock[0].label}!!`, required: !customFieldsConfigurationMock[0].required, + defaultValue: customFieldsConfigurationMock[0].defaultValue, }, { ...customFieldsConfigurationMock[1] }, { ...customFieldsConfigurationMock[2] }, diff --git a/x-pack/plugins/cases/public/components/custom_fields/flyout.test.tsx b/x-pack/plugins/cases/public/components/custom_fields/flyout.test.tsx index 3a25009450df7..508f124a7746c 100644 --- a/x-pack/plugins/cases/public/components/custom_fields/flyout.test.tsx +++ b/x-pack/plugins/cases/public/components/custom_fields/flyout.test.tsx @@ -108,6 +108,27 @@ describe('CustomFieldFlyout ', () => { }); }); + it('calls onSaveField with correct params when a custom field is NOT required and has a default value', async () => { + appMockRender.render(); + + userEvent.paste(await screen.findByTestId('custom-field-label-input'), 'Summary'); + userEvent.paste( + await screen.findByTestId('text-custom-field-default-value'), + 'Default value' + ); + userEvent.click(await screen.findByTestId('custom-field-flyout-save')); + + await waitFor(() => { + expect(props.onSaveField).toBeCalledWith({ + key: expect.anything(), + label: 'Summary', + required: false, + type: CustomFieldTypes.TEXT, + defaultValue: 'Default value', + }); + }); + }); + it('calls onSaveField with the correct params when a custom field is required', async () => { appMockRender.render(); @@ -202,6 +223,7 @@ describe('CustomFieldFlyout ', () => { label: 'Summary', required: false, type: CustomFieldTypes.TOGGLE, + defaultValue: false, }); }); }); diff --git a/x-pack/plugins/cases/public/components/custom_fields/form_fields.test.tsx b/x-pack/plugins/cases/public/components/custom_fields/form_fields.test.tsx index 6c392a1ee7d7d..51f5f6dbddea6 100644 --- a/x-pack/plugins/cases/public/components/custom_fields/form_fields.test.tsx +++ b/x-pack/plugins/cases/public/components/custom_fields/form_fields.test.tsx @@ -65,6 +65,7 @@ describe('FormFields ', () => { { label: 'hello', type: CustomFieldTypes.TOGGLE, + defaultValue: false, }, true ); diff --git a/x-pack/plugins/cases/public/components/custom_fields/text/configure.test.tsx b/x-pack/plugins/cases/public/components/custom_fields/text/configure.test.tsx index 5d9d7166db270..455163f225a2b 100644 --- a/x-pack/plugins/cases/public/components/custom_fields/text/configure.test.tsx +++ b/x-pack/plugins/cases/public/components/custom_fields/text/configure.test.tsx @@ -44,6 +44,27 @@ describe('Configure ', () => { }); }); + it('updates field options with default value correctly when not required', async () => { + render( + + + + ); + + userEvent.paste(await screen.findByTestId('text-custom-field-default-value'), 'Default value'); + userEvent.click(await screen.findByTestId('form-test-component-submit-button')); + + await waitFor(() => { + // data, isValid + expect(onSubmit).toBeCalledWith( + { + defaultValue: 'Default value', + }, + true + ); + }); + }); + it('updates field options correctly when required', async () => { render( diff --git a/x-pack/plugins/cases/public/components/custom_fields/text/configure.tsx b/x-pack/plugins/cases/public/components/custom_fields/text/configure.tsx index 1253640d91b79..2ec61a4b80529 100644 --- a/x-pack/plugins/cases/public/components/custom_fields/text/configure.tsx +++ b/x-pack/plugins/cases/public/components/custom_fields/text/configure.tsx @@ -6,7 +6,7 @@ */ import React from 'react'; -import { UseField, useFormData } from '@kbn/es-ui-shared-plugin/static/forms/hook_form_lib'; +import { UseField } from '@kbn/es-ui-shared-plugin/static/forms/hook_form_lib'; import { CheckBoxField, TextField } from '@kbn/es-ui-shared-plugin/static/forms/components'; import type { CaseCustomFieldText } from '../../../../common/types/domain'; import type { CustomFieldType } from '../types'; @@ -14,7 +14,6 @@ import { getTextFieldConfig } from './config'; import * as i18n from '../translations'; const ConfigureComponent: CustomFieldType['Configure'] = () => { - const [{ required }] = useFormData<{ required: boolean }>(); const config = getTextFieldConfig({ required: false, label: i18n.DEFAULT_VALUE.toLocaleLowerCase(), @@ -34,19 +33,17 @@ const ConfigureComponent: CustomFieldType['Configure'] = () }, }} /> - {required && ( - - )} + ); }; diff --git a/x-pack/plugins/cases/public/components/custom_fields/toggle/configure.test.tsx b/x-pack/plugins/cases/public/components/custom_fields/toggle/configure.test.tsx index 8153ca64a789c..77f1bde4e7b55 100644 --- a/x-pack/plugins/cases/public/components/custom_fields/toggle/configure.test.tsx +++ b/x-pack/plugins/cases/public/components/custom_fields/toggle/configure.test.tsx @@ -41,7 +41,12 @@ describe('Configure ', () => { await waitFor(() => { // data, isValid - expect(onSubmit).toBeCalledWith({}, true); + expect(onSubmit).toBeCalledWith( + { + defaultValue: false, + }, + true + ); }); }); diff --git a/x-pack/plugins/cases/public/components/custom_fields/toggle/configure.tsx b/x-pack/plugins/cases/public/components/custom_fields/toggle/configure.tsx index 83645ae185f1d..7b5980c2276ec 100644 --- a/x-pack/plugins/cases/public/components/custom_fields/toggle/configure.tsx +++ b/x-pack/plugins/cases/public/components/custom_fields/toggle/configure.tsx @@ -6,15 +6,13 @@ */ import React from 'react'; -import { UseField, useFormData } from '@kbn/es-ui-shared-plugin/static/forms/hook_form_lib'; +import { UseField } from '@kbn/es-ui-shared-plugin/static/forms/hook_form_lib'; import { CheckBoxField, ToggleField } from '@kbn/es-ui-shared-plugin/static/forms/components'; import type { CaseCustomFieldToggle } from '../../../../common/types/domain'; import type { CustomFieldType } from '../types'; import * as i18n from '../translations'; const ConfigureComponent: CustomFieldType['Configure'] = () => { - const [{ required }] = useFormData<{ required: boolean }>(); - return ( <> ['Configure'] = }, }} /> - {required && ( - - )} + ); }; diff --git a/x-pack/plugins/cases/server/client/cases/utils.test.ts b/x-pack/plugins/cases/server/client/cases/utils.test.ts index a1c070eb08d1f..c6c9f1063df60 100644 --- a/x-pack/plugins/cases/server/client/cases/utils.test.ts +++ b/x-pack/plugins/cases/server/client/cases/utils.test.ts @@ -1418,7 +1418,7 @@ describe('utils', () => { ).toEqual(customFields); }); - it('does not use default value for optional custom fields', () => { + it('uses the default value for optional custom fields', () => { expect( fillMissingCustomFields({ customFields: [], @@ -1430,8 +1430,8 @@ describe('utils', () => { ], }) ).toEqual([ - { ...customFields[0], value: null }, - { ...customFields[1], value: null }, + { ...customFields[0], value: 'default value' }, + { ...customFields[1], value: true }, ]); }); diff --git a/x-pack/plugins/cases/server/client/cases/utils.ts b/x-pack/plugins/cases/server/client/cases/utils.ts index b304159b928aa..a7f596a0f9c9e 100644 --- a/x-pack/plugins/cases/server/client/cases/utils.ts +++ b/x-pack/plugins/cases/server/client/cases/utils.ts @@ -473,11 +473,7 @@ export const fillMissingCustomFields = ({ // only populate with the default value required custom fields missing from the request for (const confCustomField of customFieldsConfiguration) { if (!customFieldsKeys.has(confCustomField.key)) { - if ( - confCustomField.required && - confCustomField?.defaultValue !== null && - confCustomField?.defaultValue !== undefined - ) { + if (confCustomField?.defaultValue !== null && confCustomField?.defaultValue !== undefined) { missingCustomFields.push({ key: confCustomField.key, type: confCustomField.type, diff --git a/x-pack/plugins/cases/server/client/configure/client.test.ts b/x-pack/plugins/cases/server/client/configure/client.test.ts index 2e3c2a6899f91..b5958c44de080 100644 --- a/x-pack/plugins/cases/server/client/configure/client.test.ts +++ b/x-pack/plugins/cases/server/client/configure/client.test.ts @@ -346,30 +346,6 @@ describe('client', () => { 'Failed to get patch configure in route: Error: Invalid custom field types in request for the following labels: "text label"' ); }); - - it('throws when an optional custom field has a default value', async () => { - await expect( - update( - 'test-id', - { - version: 'test-version', - customFields: [ - { - key: 'extra_default', - label: 'text label', - type: CustomFieldTypes.TEXT, - required: false, - defaultValue: 'foobar', - }, - ], - }, - clientArgs, - casesClientInternal - ) - ).rejects.toThrow( - 'Failed to get patch configure in route: Error: The following optional custom fields try to define a default value: "text label"' - ); - }); }); describe('create', () => { @@ -431,28 +407,5 @@ describe('client', () => { 'Failed to create case configuration: Error: Invalid duplicated custom field keys in request: duplicated_key' ); }); - - it('throws when an optional custom field has a default value', async () => { - await expect( - create( - { - ...baseRequest, - customFields: [ - { - key: 'extra_default', - label: 'text label', - type: CustomFieldTypes.TEXT, - required: false, - defaultValue: 'foobar', - }, - ], - }, - clientArgs, - casesClientInternal - ) - ).rejects.toThrow( - 'Failed to create case configuration: Error: The following optional custom fields try to define a default value: "text label"' - ); - }); }); }); diff --git a/x-pack/plugins/cases/server/client/configure/client.ts b/x-pack/plugins/cases/server/client/configure/client.ts index 41a9dd9326c24..1261f1061a371 100644 --- a/x-pack/plugins/cases/server/client/configure/client.ts +++ b/x-pack/plugins/cases/server/client/configure/client.ts @@ -49,10 +49,7 @@ import { updateMappings } from './update_mappings'; import { decodeOrThrow } from '../../../common/api/runtime_types'; import { ConfigurationRt, ConfigurationsRt } from '../../../common/types/domain'; import { validateDuplicatedCustomFieldKeysInRequest } from '../validators'; -import { - validateCustomFieldTypesInRequest, - validateOptionalCustomFieldsInRequest, -} from './validators'; +import { validateCustomFieldTypesInRequest } from './validators'; /** * Defines the internal helper functions. @@ -256,7 +253,6 @@ export async function update( const request = decodeWithExcessOrThrow(ConfigurationPatchRequestRt)(req); validateDuplicatedCustomFieldKeysInRequest({ requestCustomFields: request.customFields }); - validateOptionalCustomFieldsInRequest({ requestCustomFields: request.customFields }); const { version, ...queryWithoutVersion } = request; @@ -372,9 +368,6 @@ export async function create( validateDuplicatedCustomFieldKeysInRequest({ requestCustomFields: validatedConfigurationRequest.customFields, }); - validateOptionalCustomFieldsInRequest({ - requestCustomFields: validatedConfigurationRequest.customFields, - }); let error = null; diff --git a/x-pack/plugins/cases/server/client/configure/validators.test.ts b/x-pack/plugins/cases/server/client/configure/validators.test.ts index d1d41bfe1bb62..0f8e20505fb39 100644 --- a/x-pack/plugins/cases/server/client/configure/validators.test.ts +++ b/x-pack/plugins/cases/server/client/configure/validators.test.ts @@ -6,10 +6,7 @@ */ import { CustomFieldTypes } from '../../../common/types/domain'; -import { - validateCustomFieldTypesInRequest, - validateOptionalCustomFieldsInRequest, -} from './validators'; +import { validateCustomFieldTypesInRequest } from './validators'; describe('validators', () => { describe('validateCustomFieldTypesInRequest', () => { @@ -72,73 +69,4 @@ describe('validators', () => { ).not.toThrow(); }); }); - - describe('validateOptionalCustomFieldsInRequest', () => { - it('does not throw an error for properly constructed optional custom fields', () => { - expect(() => - validateOptionalCustomFieldsInRequest({ - requestCustomFields: [ - { key: '1', required: false, label: 'label 1' }, - { key: '2', required: false, label: 'label 2' }, - ], - }) - ).not.toThrow(); - }); - - it('does not throw an error for required custom fields with default values', () => { - expect(() => - validateOptionalCustomFieldsInRequest({ - requestCustomFields: [ - { key: '1', required: true, defaultValue: false, label: 'label 1' }, - { key: '2', required: true, defaultValue: 'foobar', label: 'label 2' }, - ], - }) - ).not.toThrow(); - }); - - it('throws an error even if the default value has the correct type', () => { - expect(() => - validateOptionalCustomFieldsInRequest({ - requestCustomFields: [ - { key: '1', required: false, defaultValue: false, label: 'label 1' }, - { key: '2', required: false, defaultValue: 'foobar', label: 'label 2' }, - ], - }) - ).toThrowErrorMatchingInlineSnapshot( - `"The following optional custom fields try to define a default value: \\"label 1\\", \\"label 2\\""` - ); - }); - - it('throws an error for other falsy defaultValues (null)', () => { - expect(() => - validateOptionalCustomFieldsInRequest({ - requestCustomFields: [ - { key: '1', required: false, defaultValue: null, label: 'label 1' }, - ], - }) - ).toThrowErrorMatchingInlineSnapshot( - `"The following optional custom fields try to define a default value: \\"label 1\\""` - ); - }); - - it('throws an error for other falsy defaultValues (0)', () => { - expect(() => - validateOptionalCustomFieldsInRequest({ - requestCustomFields: [{ key: '1', required: false, defaultValue: 0, label: 'label 1' }], - }) - ).toThrowErrorMatchingInlineSnapshot( - `"The following optional custom fields try to define a default value: \\"label 1\\""` - ); - }); - - it('throws an error for other falsy defaultValues (empty string)', () => { - expect(() => - validateOptionalCustomFieldsInRequest({ - requestCustomFields: [{ key: '1', required: false, defaultValue: '', label: 'label 1' }], - }) - ).toThrowErrorMatchingInlineSnapshot( - `"The following optional custom fields try to define a default value: \\"label 1\\""` - ); - }); - }); }); diff --git a/x-pack/plugins/cases/server/client/configure/validators.ts b/x-pack/plugins/cases/server/client/configure/validators.ts index ca3a175e40579..c5929065c631b 100644 --- a/x-pack/plugins/cases/server/client/configure/validators.ts +++ b/x-pack/plugins/cases/server/client/configure/validators.ts @@ -38,37 +38,3 @@ export const validateCustomFieldTypesInRequest = ({ ); } }; - -/** - * Throws an error if any optional custom field defines a default value. - */ -export const validateOptionalCustomFieldsInRequest = ({ - requestCustomFields, -}: { - requestCustomFields?: Array<{ - key: string; - required: boolean; - defaultValue?: unknown; - label: string; - }>; -}) => { - if (!Array.isArray(requestCustomFields)) { - return; - } - - const invalidFields: string[] = []; - - requestCustomFields.forEach((requestField) => { - if (!requestField.required && requestField.defaultValue !== undefined) { - invalidFields.push(`"${requestField.label}"`); - } - }); - - if (invalidFields.length > 0) { - throw Boom.badRequest( - `The following optional custom fields try to define a default value: ${invalidFields.join( - ', ' - )}` - ); - } -}; diff --git a/x-pack/plugins/data_visualizer/common/types/test_grok_pattern.ts b/x-pack/plugins/data_visualizer/common/types/test_grok_pattern.ts new file mode 100644 index 0000000000000..65ae4a89988de --- /dev/null +++ b/x-pack/plugins/data_visualizer/common/types/test_grok_pattern.ts @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export interface TestGrokPatternResponse { + matches: Array<{ + matched: boolean; + fields: Record>; + }>; +} diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_contents/field_badge.tsx b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_contents/field_badge.tsx new file mode 100644 index 0000000000000..981b2195c3065 --- /dev/null +++ b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_contents/field_badge.tsx @@ -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 React, { FC } from 'react'; +import { EuiBadge, EuiFlexGroup, EuiFlexItem, EuiToolTip } from '@elastic/eui'; +import { FieldIcon } from '@kbn/react-field'; +import { i18n } from '@kbn/i18n'; +import { getSupportedFieldType } from '../../../common/components/fields_stats_grid/get_field_names'; +import { useCurrentEuiTheme } from '../../../common/hooks/use_current_eui_theme'; + +interface Props { + type: string | undefined; + value: string; + name: string; +} + +export const FieldBadge: FC = ({ type, value, name }) => { + const { euiColorLightestShade, euiColorLightShade } = useCurrentEuiTheme(); + const supportedType = getSupportedFieldType(type ?? 'unknown'); + const tooltip = type + ? i18n.translate('xpack.dataVisualizer.file.fileContents.fieldBadge.tooltip', { + defaultMessage: 'Type: {type}', + values: { type: supportedType }, + }) + : undefined; + return ( + + + + + + + {value} + + + + ); +}; diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_contents/file_contents.tsx b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_contents/file_contents.tsx index 21c50a7f293b6..789d73888bf35 100644 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_contents/file_contents.tsx +++ b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_contents/file_contents.tsx @@ -5,52 +5,150 @@ * 2.0. */ +import React, { FC, useEffect, useState, useMemo } from 'react'; import { FormattedMessage } from '@kbn/i18n-react'; -import React, { FC } from 'react'; -import { EuiTitle, EuiSpacer } from '@elastic/eui'; +import { + EuiTitle, + EuiSpacer, + EuiHorizontalRule, + EuiFlexGroup, + EuiFlexItem, + EuiSwitch, +} from '@elastic/eui'; -import { JsonEditor, EDITOR_MODE } from '../json_editor'; +import type { FindFileStructureResponse } from '@kbn/file-upload-plugin/common'; +import useMountedState from 'react-use/lib/useMountedState'; +import { i18n } from '@kbn/i18n'; +import { EDITOR_MODE, JsonEditor } from '../json_editor'; +import { useGrokHighlighter } from './use_text_parser'; +import { LINE_LIMIT } from './grok_highlighter'; interface Props { data: string; format: string; numberOfLines: number; + semiStructureTextData: SemiStructureTextData | null; } -export const FileContents: FC = ({ data, format, numberOfLines }) => { +interface SemiStructureTextData { + grokPattern?: string; + multilineStartPattern?: string; + excludeLinesPattern?: string; + sampleStart: string; + mappings: FindFileStructureResponse['mappings']; + ecsCompatibility?: string; +} + +function semiStructureTextDataGuard( + semiStructureTextData: SemiStructureTextData | null +): semiStructureTextData is SemiStructureTextData { + return ( + semiStructureTextData !== null && + semiStructureTextData.grokPattern !== undefined && + semiStructureTextData.multilineStartPattern !== undefined + ); +} + +export const FileContents: FC = ({ data, format, numberOfLines, semiStructureTextData }) => { let mode = EDITOR_MODE.TEXT; if (format === EDITOR_MODE.JSON) { mode = EDITOR_MODE.JSON; } + const isMounted = useMountedState(); + const grokHighlighter = useGrokHighlighter(); + + const [isSemiStructureTextData, setIsSemiStructureTextData] = useState( + semiStructureTextDataGuard(semiStructureTextData) + ); + const formattedData = useMemo( + () => limitByNumberOfLines(data, numberOfLines), + [data, numberOfLines] + ); + + const [highlightedLines, setHighlightedLines] = useState(null); + const [showHighlights, setShowHighlights] = useState(isSemiStructureTextData); + + useEffect(() => { + if (isSemiStructureTextData === false) { + return; + } + const { grokPattern, multilineStartPattern, excludeLinesPattern, mappings, ecsCompatibility } = + semiStructureTextData!; - const formattedData = limitByNumberOfLines(data, numberOfLines); + grokHighlighter( + data, + grokPattern!, + mappings, + ecsCompatibility, + multilineStartPattern!, + excludeLinesPattern + ) + .then((docs) => { + if (isMounted()) { + setHighlightedLines(docs); + } + }) + .catch((e) => { + if (isMounted()) { + setHighlightedLines(null); + setIsSemiStructureTextData(false); + } + }); + }, [data, semiStructureTextData, grokHighlighter, isSemiStructureTextData, isMounted]); return ( - - -

- -

-
- -
- -
+ <> + + + +

+ +

+
+
+ {isSemiStructureTextData ? ( + + setShowHighlights(!showHighlights)} + /> + + ) : null} +
+ + + + - -
+ {highlightedLines === null || showHighlights === false ? ( + + ) : ( + <> + {highlightedLines.map((line, i) => ( + <> + {line} + {i === highlightedLines.length - 1 ? null : } + + ))} + + )} + ); }; diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_contents/grok_highlighter.ts b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_contents/grok_highlighter.ts new file mode 100644 index 0000000000000..7be566a5a91b0 --- /dev/null +++ b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_contents/grok_highlighter.ts @@ -0,0 +1,103 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { MessageImporter } from '@kbn/file-upload-plugin/public'; +import type { HttpSetup } from '@kbn/core/public'; +import type { ImportFactoryOptions } from '@kbn/file-upload-plugin/public/importer'; +import type { FindFileStructureResponse } from '@kbn/file-upload-plugin/common'; +import type { TestGrokPatternResponse } from '../../../../../common/types/test_grok_pattern'; + +export const LINE_LIMIT = 5; + +type HighlightedLine = Array<{ + word: string; + field?: { + type: string; + name: string; + }; +}>; + +export class GrokHighlighter extends MessageImporter { + constructor(options: ImportFactoryOptions, private http: HttpSetup) { + super(options); + } + + public async createLines( + text: string, + grokPattern: string, + mappings: FindFileStructureResponse['mappings'], + ecsCompatibility: string | undefined + ): Promise { + const docs = this._createDocs(text, false, LINE_LIMIT); + const lines = docs.docs.map((doc) => doc.message); + const matches = await this.testGrokPattern(lines, grokPattern, ecsCompatibility); + + return lines.map((line, index) => { + const { matched, fields } = matches[index]; + if (matched === false) { + return [ + { + word: line, + }, + ]; + } + const sortedFields = Object.entries(fields) + .map(([fieldName, [{ match, offset, length }]]) => { + let type = mappings.properties[fieldName]?.type; + if (type === undefined && fieldName === 'timestamp') { + // it's possible that the timestamp field is not mapped as `timestamp` + // but instead as `@timestamp` + type = mappings.properties['@timestamp']?.type; + } + return { + name: fieldName, + match, + offset, + length, + type, + }; + }) + .sort((a, b) => a.offset - b.offset); + + let offset = 0; + const highlightedLine: HighlightedLine = []; + for (const field of sortedFields) { + highlightedLine.push({ word: line.substring(offset, field.offset) }); + highlightedLine.push({ + word: field.match, + field: { + type: field.type, + name: field.name, + }, + }); + offset = field.offset + field.length; + } + highlightedLine.push({ word: line.substring(offset) }); + return highlightedLine; + }); + } + + private async testGrokPattern( + lines: string[], + grokPattern: string, + ecsCompatibility: string | undefined + ) { + const { matches } = await this.http.fetch( + '/internal/data_visualizer/test_grok_pattern', + { + method: 'POST', + version: '1', + body: JSON.stringify({ + grokPattern, + text: lines, + ecsCompatibility, + }), + } + ); + return matches; + } +} diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_contents/use_text_parser.tsx b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_contents/use_text_parser.tsx new file mode 100644 index 0000000000000..183f3ca727d3a --- /dev/null +++ b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_contents/use_text_parser.tsx @@ -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 React, { useMemo } from 'react'; +import { EuiText } from '@elastic/eui'; +import type { FindFileStructureResponse } from '@kbn/file-upload-plugin/common'; +import { FieldBadge } from './field_badge'; +import { useDataVisualizerKibana } from '../../../kibana_context'; +import { useCurrentEuiTheme } from '../../../common/hooks/use_current_eui_theme'; +import { GrokHighlighter } from './grok_highlighter'; + +export function useGrokHighlighter() { + const { + services: { http }, + } = useDataVisualizerKibana(); + const { euiSizeL } = useCurrentEuiTheme(); + + const createLines = useMemo( + () => + async ( + text: string, + grokPattern: string, + mappings: FindFileStructureResponse['mappings'], + ecsCompatibility: string | undefined, + multilineStartPattern: string, + excludeLinesPattern: string | undefined + ) => { + const grokHighlighter = new GrokHighlighter( + { multilineStartPattern, excludeLinesPattern }, + http + ); + const lines = await grokHighlighter.createLines( + text, + grokPattern, + mappings, + ecsCompatibility + ); + + return lines.map((line) => { + const formattedWords: JSX.Element[] = []; + for (const { word, field } of line) { + if (field) { + formattedWords.push(); + } else { + formattedWords.push({word}); + } + } + return ( + + {formattedWords} + + ); + }); + }, + [euiSizeL, http] + ); + + return createLines; +} diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/results_view/results_view.tsx b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/results_view/results_view.tsx index 26a727a7a922e..855df5855536a 100644 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/results_view/results_view.tsx +++ b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/results_view/results_view.tsx @@ -20,6 +20,7 @@ import { } from '@elastic/eui'; import { FindFileStructureResponse } from '@kbn/file-upload-plugin/common'; +import { FILE_FORMATS } from '../../../../../common/constants'; import { FileContents } from '../file_contents'; import { AnalysisSummary } from '../analysis_summary'; import { FieldsStatsGrid } from '../../../common/components/fields_stats_grid'; @@ -48,6 +49,17 @@ export const ResultsView: FC = ({ onCancel, disableImport, }) => { + const semiStructureTextData = + results.format === FILE_FORMATS.SEMI_STRUCTURED_TEXT + ? { + grokPattern: results.grok_pattern, + multilineStartPattern: results.multiline_start_pattern, + sampleStart: results.sample_start, + excludeLinesPattern: results.exclude_lines_pattern, + mappings: results.mappings, + ecsCompatibility: results.ecs_compatibility, + } + : null; return ( @@ -77,6 +89,7 @@ export const ResultsView: FC = ({ data={data} format={results.format} numberOfLines={results.num_lines_analyzed} + semiStructureTextData={semiStructureTextData} /> diff --git a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/search_strategy/requests/get_string_field_stats.ts b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/search_strategy/requests/get_string_field_stats.ts index f3b70085de33f..3796d4424f41e 100644 --- a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/search_strategy/requests/get_string_field_stats.ts +++ b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/search_strategy/requests/get_string_field_stats.ts @@ -83,6 +83,7 @@ export const fetchStringFieldsStats = ( ), map((resp) => { if (!isIKibanaSearchResponse(resp)) return resp; + const aggregations = resp.rawResponse.aggregations; const aggsPath = ['sample']; @@ -97,7 +98,9 @@ export const fetchStringFieldsStats = ( const { topValuesSampleSize, topValues } = processTopValues( fieldAgg, - get(aggregations, ['sample', 'doc_count']) + get(aggregations, ['sample', 'probability']) < 1 + ? get(aggregations, ['sample', 'doc_count']) + : undefined ); const stats = { fieldName: field.fieldName, diff --git a/x-pack/plugins/data_visualizer/server/index.ts b/x-pack/plugins/data_visualizer/server/index.ts index 1f15b498f8777..17db3c1abb603 100644 --- a/x-pack/plugins/data_visualizer/server/index.ts +++ b/x-pack/plugins/data_visualizer/server/index.ts @@ -9,5 +9,5 @@ import { PluginInitializerContext } from '@kbn/core/server'; export const plugin = async (initializerContext: PluginInitializerContext) => { const { DataVisualizerPlugin } = await import('./plugin'); - return new DataVisualizerPlugin(); + return new DataVisualizerPlugin(initializerContext); }; diff --git a/x-pack/plugins/data_visualizer/server/plugin.ts b/x-pack/plugins/data_visualizer/server/plugin.ts index 5f16df8b5ffb7..0e70f756f9b21 100644 --- a/x-pack/plugins/data_visualizer/server/plugin.ts +++ b/x-pack/plugins/data_visualizer/server/plugin.ts @@ -5,18 +5,30 @@ * 2.0. */ -import { CoreSetup, CoreStart, Plugin } from '@kbn/core/server'; -import { StartDeps, SetupDeps } from './types'; +import type { + CoreSetup, + CoreStart, + Plugin, + Logger, + PluginInitializerContext, +} from '@kbn/core/server'; +import type { StartDeps, SetupDeps } from './types'; import { registerWithCustomIntegrations } from './register_custom_integration'; +import { routes } from './routes'; export class DataVisualizerPlugin implements Plugin { - constructor() {} + private readonly _logger: Logger; + + constructor(initializerContext: PluginInitializerContext) { + this._logger = initializerContext.logger.get(); + } setup(coreSetup: CoreSetup, plugins: SetupDeps) { // home-plugin required if (plugins.home && plugins.customIntegrations) { registerWithCustomIntegrations(plugins.customIntegrations); } + routes(coreSetup, this._logger); } start(core: CoreStart) {} diff --git a/x-pack/plugins/data_visualizer/server/routes.ts b/x-pack/plugins/data_visualizer/server/routes.ts new file mode 100644 index 0000000000000..c4e286f9671d1 --- /dev/null +++ b/x-pack/plugins/data_visualizer/server/routes.ts @@ -0,0 +1,69 @@ +/* + * 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 { CoreSetup, Logger } from '@kbn/core/server'; +import { schema } from '@kbn/config-schema'; +import type { StartDeps } from './types'; +import { wrapError } from './utils/error_wrapper'; +import type { TestGrokPatternResponse } from '../common/types/test_grok_pattern'; + +/** + * @apiGroup DataVisualizer + * + * @api {post} /internal/data_visualizer/test_grok_pattern Tests a grok pattern against a sample of text + * @apiName testGrokPattern + * @apiDescription Tests a grok pattern against a sample of text and return the positions of the fields + */ +export function routes(coreSetup: CoreSetup, logger: Logger) { + const router = coreSetup.http.createRouter(); + + router.versioned + .post({ + path: '/internal/data_visualizer/test_grok_pattern', + access: 'internal', + options: { + tags: ['access:fileUpload:analyzeFile'], + }, + }) + .addVersion( + { + version: '1', + validate: { + request: { + body: schema.object({ + grokPattern: schema.string(), + text: schema.arrayOf(schema.string()), + ecsCompatibility: schema.maybe(schema.string()), + }), + }, + }, + }, + async (context, request, response) => { + try { + const esClient = (await context.core).elasticsearch.client; + const body = await esClient.asInternalUser.transport.request({ + method: 'GET', + path: `/_text_structure/test_grok_pattern`, + body: { + grok_pattern: request.body.grokPattern, + text: request.body.text, + }, + ...(request.body.ecsCompatibility + ? { + querystring: { ecs_compatibility: request.body.ecsCompatibility }, + } + : {}), + }); + + return response.ok({ body }); + } catch (e) { + logger.warn(`Unable to test grok pattern ${e.message}`); + return response.customError(wrapError(e)); + } + } + ); +} diff --git a/x-pack/plugins/data_visualizer/tsconfig.json b/x-pack/plugins/data_visualizer/tsconfig.json index af962ac08b6e8..aad960d856da3 100644 --- a/x-pack/plugins/data_visualizer/tsconfig.json +++ b/x-pack/plugins/data_visualizer/tsconfig.json @@ -17,20 +17,28 @@ "@kbn/aiops-utils", "@kbn/charts-plugin", "@kbn/cloud-plugin", + "@kbn/code-editor", + "@kbn/config-schema", "@kbn/core-execution-context-common", + "@kbn/core-notifications-browser", "@kbn/core", "@kbn/custom-integrations-plugin", "@kbn/data-plugin", + "@kbn/data-service", "@kbn/data-view-field-editor-plugin", "@kbn/data-views-plugin", "@kbn/datemath", "@kbn/discover-plugin", + "@kbn/ebt-tools", "@kbn/embeddable-plugin", "@kbn/embeddable-plugin", "@kbn/es-query", + "@kbn/es-types", "@kbn/es-ui-shared-plugin", + "@kbn/esql-utils", "@kbn/field-formats-plugin", "@kbn/field-types", + "@kbn/field-utils", "@kbn/file-upload-plugin", "@kbn/home-plugin", "@kbn/i18n-react", @@ -41,41 +49,34 @@ "@kbn/maps-plugin", "@kbn/ml-agg-utils", "@kbn/ml-cancellable-search", + "@kbn/ml-chi2test", + "@kbn/ml-data-grid", "@kbn/ml-date-picker", + "@kbn/ml-error-utils", + "@kbn/ml-in-memory-table", "@kbn/ml-is-defined", "@kbn/ml-is-populated-object", + "@kbn/ml-kibana-theme", "@kbn/ml-local-storage", "@kbn/ml-nested-property", "@kbn/ml-number-utils", "@kbn/ml-query-utils", + "@kbn/ml-random-sampler-utils", + "@kbn/ml-string-hash", "@kbn/ml-url-state", - "@kbn/ml-data-grid", - "@kbn/ml-error-utils", - "@kbn/ml-kibana-theme", - "@kbn/ml-in-memory-table", "@kbn/react-field", "@kbn/rison", "@kbn/saved-search-plugin", "@kbn/security-plugin", "@kbn/share-plugin", "@kbn/test-jest-helpers", + "@kbn/text-based-languages", "@kbn/ui-actions-plugin", + "@kbn/ui-theme", "@kbn/unified-search-plugin", "@kbn/usage-collection-plugin", "@kbn/utility-types", - "@kbn/ml-string-hash", - "@kbn/ml-random-sampler-utils", - "@kbn/data-service", - "@kbn/core-notifications-browser", - "@kbn/ebt-tools", - "@kbn/ml-chi2test", - "@kbn/field-utils", - "@kbn/visualization-utils", - "@kbn/text-based-languages", - "@kbn/code-editor", - "@kbn/es-types", - "@kbn/ui-theme", - "@kbn/esql-utils" + "@kbn/visualization-utils" ], "exclude": [ "target/**/*", diff --git a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/connectors.ts b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/connectors.ts index 39657c97c6202..4226e4326ce0a 100644 --- a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/connectors.ts +++ b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/connectors.ts @@ -9,6 +9,7 @@ import { schema } from '@kbn/config-schema'; import { i18n } from '@kbn/i18n'; import { deleteConnectorById, + deleteConnectorSecret, fetchConnectorById, fetchConnectors, fetchSyncJobs, @@ -589,18 +590,25 @@ export function registerConnectorRoutes({ router, log }: RouteDependencies) { const { shouldDeleteIndex } = request.query; let connectorResponse; - let indexNameToDelete; try { - if (shouldDeleteIndex) { - const connector = await fetchConnectorById(client.asCurrentUser, connectorId); - indexNameToDelete = connector?.value.index_name; - } + const connector = await fetchConnectorById(client.asCurrentUser, connectorId); + const indexNameToDelete = shouldDeleteIndex ? connector?.value.index_name : null; + const apiKeyId = connector?.value.api_key_id; + const secretId = connector?.value.api_key_secret_id; + connectorResponse = await deleteConnectorById(client.asCurrentUser, connectorId); + if (indexNameToDelete) { await deleteIndexPipelines(client, indexNameToDelete); await deleteAccessControlIndex(client, indexNameToDelete); await client.asCurrentUser.indices.delete({ index: indexNameToDelete }); } + if (apiKeyId) { + await client.asCurrentUser.security.invalidateApiKey({ ids: [apiKeyId] }); + } + if (secretId) { + await deleteConnectorSecret(client.asCurrentUser, secretId); + } } catch (error) { if (isResourceNotFoundException(error)) { return createError({ diff --git a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/indices.ts b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/indices.ts index d96130fb02472..fdbeca1e82ff9 100644 --- a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/indices.ts +++ b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/indices.ts @@ -14,7 +14,7 @@ import { schema } from '@kbn/config-schema'; import { i18n } from '@kbn/i18n'; -import { deleteConnectorById } from '@kbn/search-connectors'; +import { deleteConnectorById, deleteConnectorSecret } from '@kbn/search-connectors'; import { fetchConnectorByIndexName, fetchConnectors, @@ -204,6 +204,12 @@ export function registerIndexRoutes({ if (connector) { await deleteConnectorById(client.asCurrentUser, connector.id); + if (connector.api_key_id) { + await client.asCurrentUser.security.invalidateApiKey({ ids: [connector.api_key_id] }); + } + if (connector.api_key_secret_id) { + await deleteConnectorSecret(client.asCurrentUser, connector.api_key_secret_id); + } } await deleteIndexPipelines(client, indexName); diff --git a/x-pack/plugins/lens/public/embeddable/expression_wrapper.tsx b/x-pack/plugins/lens/public/embeddable/expression_wrapper.tsx index d28d6fd3b527e..8540058683c11 100644 --- a/x-pack/plugins/lens/public/embeddable/expression_wrapper.tsx +++ b/x-pack/plugins/lens/public/embeddable/expression_wrapper.tsx @@ -46,7 +46,6 @@ export interface ExpressionWrapperProps { executionContext?: KibanaExecutionContext; lensInspector: LensInspector; noPadding?: boolean; - shouldUseSizeTransitionVeil?: boolean; abortController?: AbortController; } @@ -73,7 +72,6 @@ export function ExpressionWrapper({ executionContext, lensInspector, noPadding, - shouldUseSizeTransitionVeil, abortController, }: ExpressionWrapperProps) { if (!expression) return null; @@ -97,7 +95,6 @@ export function ExpressionWrapper({ syncCursor={syncCursor} executionContext={executionContext} abortController={abortController} - shouldUseSizeTransitionVeil={shouldUseSizeTransitionVeil ?? true} renderError={(errorMessage, error) => { const messages = getOriginalRequestErrorMessages(error || null); addUserMessages(messages); diff --git a/x-pack/plugins/lens/public/lens_attribute_service.ts b/x-pack/plugins/lens/public/lens_attribute_service.ts index c63d9c1dd5c3d..69b76669695fe 100644 --- a/x-pack/plugins/lens/public/lens_attribute_service.ts +++ b/x-pack/plugins/lens/public/lens_attribute_service.ts @@ -8,7 +8,9 @@ import type { CoreStart } from '@kbn/core/public'; import type { AttributeService } from '@kbn/embeddable-plugin/public'; import { OnSaveProps } from '@kbn/saved-objects-plugin/public'; +import { SavedObjectCommon } from '@kbn/saved-objects-finder-plugin/common'; import type { LensPluginStartDependencies } from './plugin'; +import type { LensSavedObjectAttributes as LensSavedObjectAttributesWithoutReferences } from '../common/content_management'; import type { LensSavedObjectAttributes, LensByValueInput, @@ -26,6 +28,16 @@ export type LensAttributeService = AttributeService< LensUnwrapMetaInfo >; +export const savedObjectToEmbeddableAttributes = ( + savedObject: SavedObjectCommon +): LensSavedObjectAttributes => { + return { + ...savedObject.attributes, + state: savedObject.attributes.state as LensSavedObjectAttributes['state'], + references: savedObject.references, + }; +}; + export function getLensAttributeService( core: CoreStart, startDependencies: LensPluginStartDependencies @@ -51,11 +63,7 @@ export function getLensAttributeService( item: savedObject, meta: { outcome, aliasTargetId, aliasPurpose }, } = await savedObjectStore.load(savedObjectId); - const { attributes, references, id } = savedObject; - const document = { - ...attributes, - references, - }; + const { id } = savedObject; const sharingSavedObjectProps = { aliasTargetId, @@ -65,10 +73,7 @@ export function getLensAttributeService( }; return { - attributes: { - ...document, - state: document.state as LensSavedObjectAttributes['state'], - }, + attributes: savedObjectToEmbeddableAttributes(savedObject), metaInfo: { sharingSavedObjectProps, managed: savedObject.managed, diff --git a/x-pack/plugins/lens/public/loader.test.tsx b/x-pack/plugins/lens/public/loader.test.tsx deleted file mode 100644 index 936edaa59f6bd..0000000000000 --- a/x-pack/plugins/lens/public/loader.test.tsx +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React from 'react'; -import { EuiProgress } from '@elastic/eui'; -import { Loader } from './loader'; -import { mount } from 'enzyme'; -import { act } from 'react-dom/test-utils'; - -describe('loader', () => { - it('shows a loading indicator when loading', async () => { - const load = jest.fn(() => Promise.resolve()); - const inst = mount(); - expect(inst.find(EuiProgress).length).toEqual(1); - - await act(async () => load()); - inst.update(); - expect(inst.find(EuiProgress).length).toEqual(0); - }); - - it('hides loading indicator when failed', async () => { - const load = jest.fn(() => Promise.reject()); - const inst = mount(); - expect(inst.find(EuiProgress).length).toEqual(1); - - await act(async () => Promise.resolve()); - inst.update(); - - expect(inst.find(EuiProgress).length).toEqual(0); - }); - - it('does not run load in parallel', async () => { - let count = 0; - let ranInParallel = false; - const load = jest.fn(() => { - if (count) { - ranInParallel = true; - } - ++count; - return Promise.resolve().then(() => --count); - }); - const inst = mount(); - - await act(async () => { - inst.setProps({ loadDeps: ['foo'] }); - }); - - inst.update(); - - await Promise.resolve(); - inst.update(); - - expect(load).toHaveBeenCalledTimes(2); - expect(ranInParallel).toBeFalsy(); - }); -}); diff --git a/x-pack/plugins/lens/public/loader.tsx b/x-pack/plugins/lens/public/loader.tsx deleted file mode 100644 index 2c274a2ff4501..0000000000000 --- a/x-pack/plugins/lens/public/loader.tsx +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React, { useState, useEffect, useRef } from 'react'; -import { EuiProgress } from '@elastic/eui'; - -/** - * Executes the specified load function any time loadDeps changes. Ensures the load - * function is never run in parallel. Shows a loading indicator while loading. - */ -export function Loader(props: { load: () => Promise; loadDeps: unknown[] }) { - const [isProcessing, setIsProcessing] = useState(false); - const prevRequest = useRef | undefined>(undefined); - const nextRequest = useRef<(() => void) | undefined>(undefined); - - useEffect( - function performLoad() { - if (prevRequest.current) { - nextRequest.current = performLoad; - return; - } - - setIsProcessing(true); - prevRequest.current = props - .load() - .catch(() => {}) - .then(() => { - const reload = nextRequest.current; - prevRequest.current = undefined; - nextRequest.current = undefined; - - if (reload) { - reload(); - } else { - setIsProcessing(false); - } - }); - }, - // eslint-disable-next-line react-hooks/exhaustive-deps - props.loadDeps - ); - - if (!isProcessing) { - return null; - } - - return ; -} diff --git a/x-pack/plugins/lens/public/plugin.ts b/x-pack/plugins/lens/public/plugin.ts index 61ffb1d0686d0..663a5d8b574c2 100644 --- a/x-pack/plugins/lens/public/plugin.ts +++ b/x-pack/plugins/lens/public/plugin.ts @@ -64,6 +64,7 @@ import { } from '@kbn/content-management-plugin/public'; import { i18n } from '@kbn/i18n'; import type { ServerlessPluginStart } from '@kbn/serverless/public'; +import { registerSavedObjectToPanelMethod } from '@kbn/embeddable-plugin/public'; import type { EditorFrameService as EditorFrameServiceType } from './editor_frame_service'; import type { FormBasedDatasource as FormBasedDatasourceType, @@ -117,7 +118,7 @@ import { visualizeTSVBAction } from './trigger_actions/visualize_tsvb_actions'; import { visualizeAggBasedVisAction } from './trigger_actions/visualize_agg_based_vis_actions'; import { visualizeDashboardVisualizePanelction } from './trigger_actions/dashboard_visualize_panel_actions'; -import type { LensEmbeddableInput } from './embeddable'; +import type { LensByValueInput, LensEmbeddableInput } from './embeddable'; import { EmbeddableFactory, LensEmbeddableStartServices } from './embeddable/embeddable_factory'; import { EmbeddableComponent, getEmbeddableComponent } from './embeddable/embeddable_component'; import { getSaveModalComponent } from './app_plugin/shared/saved_modal_lazy'; @@ -130,8 +131,13 @@ import { ChartInfoApi } from './chart_info_api'; import { type LensAppLocator, LensAppLocatorDefinition } from '../common/locator/locator'; import { downloadCsvShareProvider } from './app_plugin/csv_download_provider/csv_download_provider'; -import { CONTENT_ID, LATEST_VERSION } from '../common/content_management'; +import { + CONTENT_ID, + LATEST_VERSION, + LensSavedObjectAttributes, +} from '../common/content_management'; import type { EditLensConfigurationProps } from './app_plugin/shared/edit_on_the_fly/get_edit_lens_configuration'; +import { savedObjectToEmbeddableAttributes } from './lens_attribute_service'; export type { SaveProps } from './app_plugin'; @@ -424,6 +430,21 @@ export class LensPlugin { () => startServices().plugins.data.nowProvider.get() ); + registerSavedObjectToPanelMethod( + CONTENT_ID, + (savedObject) => { + if (!savedObject.managed) { + return { savedObjectId: savedObject.id }; + } + + const panel = { + attributes: savedObjectToEmbeddableAttributes(savedObject), + }; + + return panel; + } + ); + const getPresentationUtilContext = () => startServices().plugins.presentationUtil.ContextProvider; diff --git a/x-pack/plugins/lens/public/state_management/lens_slice.ts b/x-pack/plugins/lens/public/state_management/lens_slice.ts index 309efeb8ea827..b7b02bdbc934b 100644 --- a/x-pack/plugins/lens/public/state_management/lens_slice.ts +++ b/x-pack/plugins/lens/public/state_management/lens_slice.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { createAction, createReducer, current, PayloadAction } from '@reduxjs/toolkit'; +import { createAction, createReducer, current } from '@reduxjs/toolkit'; import { VisualizeFieldContext } from '@kbn/ui-actions-plugin/public'; import { mapValues, uniq } from 'lodash'; import { Filter, Query } from '@kbn/es-query'; @@ -320,986 +320,813 @@ export const lensActions = { export const makeLensReducer = (storeDeps: LensStoreDeps) => { const { datasourceMap, visualizationMap } = storeDeps; - return createReducer(initialState, { - [setState.type]: (state, { payload }: PayloadAction>) => { - return { - ...state, - ...payload, - }; - }, - [setExecutionContext.type]: (state, { payload }: PayloadAction) => { - return { - ...state, - ...payload, - }; - }, - [initExisting.type]: (state, { payload }: PayloadAction>) => { - return { - ...state, - ...payload, - }; - }, - [onActiveDataChange.type]: ( - state, - { payload: { activeData } }: PayloadAction<{ activeData: TableInspectorAdapter }> - ) => { - return { - ...state, - activeData, - }; - }, - [setSaveable.type]: (state, { payload }: PayloadAction) => { - return { - ...state, - isSaveable: payload, - }; - }, - [enableAutoApply.type]: (state) => { - state.autoApplyDisabled = false; - }, - [disableAutoApply.type]: (state) => { - state.autoApplyDisabled = true; - state.changesApplied = true; - }, - [applyChanges.type]: (state) => { - if (typeof state.applyChangesCounter === 'undefined') { - state.applyChangesCounter = 0; - } - state.applyChangesCounter!++; - }, - [setChangesApplied.type]: (state, { payload: applied }) => { - state.changesApplied = applied; - }, - [cloneLayer.type]: ( - state, - { - payload: { layerId, newLayerId }, - }: { - payload: { - layerId: string; - newLayerId: string; + return createReducer(initialState, (builder) => { + builder + .addCase(setState, (state, { payload }) => { + return { + ...state, + ...payload, }; - } - ) => { - const clonedIDsMap = new Map(); - - const getNewId = (prevId: string) => { - const inMapValue = clonedIDsMap.get(prevId); - if (!inMapValue) { - const newId = generateId(); - clonedIDsMap.set(prevId, newId); - return newId; + }) + .addCase(setExecutionContext, (state, { payload }) => { + return { + ...state, + ...payload, + }; + }) + .addCase(initExisting, (state, { payload }) => { + return { + ...state, + ...payload, + }; + }) + .addCase(onActiveDataChange, (state, { payload: { activeData } }) => { + return { + ...state, + activeData, + }; + }) + .addCase(setSaveable, (state, { payload }) => { + return { + ...state, + isSaveable: payload, + }; + }) + .addCase(enableAutoApply, (state) => { + state.autoApplyDisabled = false; + }) + .addCase(disableAutoApply, (state) => { + state.autoApplyDisabled = true; + state.changesApplied = true; + }) + .addCase(applyChanges, (state) => { + if (typeof state.applyChangesCounter === 'undefined') { + state.applyChangesCounter = 0; } - return inMapValue; - }; + state.applyChangesCounter++; + }) + .addCase(setChangesApplied, (state, { payload: applied }) => { + state.changesApplied = applied; + }) + .addCase(cloneLayer, (state, { payload: { layerId, newLayerId } }) => { + const clonedIDsMap = new Map(); + + const getNewId = (prevId: string) => { + const inMapValue = clonedIDsMap.get(prevId); + if (!inMapValue) { + const newId = generateId(); + clonedIDsMap.set(prevId, newId); + return newId; + } + return inMapValue; + }; - if (!state.activeDatasourceId || !state.visualization.activeId) { - return state; - } + if (!state.activeDatasourceId || !state.visualization.activeId) { + return state; + } - state.datasourceStates = mapValues(state.datasourceStates, (datasourceState, datasourceId) => - datasourceId - ? { - ...datasourceState, - state: datasourceMap[datasourceId].cloneLayer( - datasourceState.state, - layerId, - newLayerId, - getNewId - ), - } - : datasourceState - ); - state.visualization.state = visualizationMap[state.visualization.activeId].cloneLayer!( - state.visualization.state, - layerId, - newLayerId, - clonedIDsMap - ); - }, - [removeOrClearLayer.type]: ( - state, - { - payload: { visualizationId, layerId, layerIds }, - }: { - payload: { - visualizationId: string; - layerId: string; - layerIds: string[]; - }; - } - ) => { - const activeVisualization = visualizationMap[visualizationId]; - const activeDataSource = datasourceMap[state.activeDatasourceId!]; - const isOnlyLayer = - getRemoveOperation( - activeVisualization, + state.datasourceStates = mapValues( + state.datasourceStates, + (datasourceState, datasourceId) => + datasourceId + ? { + ...datasourceState, + state: datasourceMap[datasourceId].cloneLayer( + datasourceState.state, + layerId, + newLayerId, + getNewId + ), + } + : datasourceState + ); + state.visualization.state = visualizationMap[state.visualization.activeId].cloneLayer!( state.visualization.state, layerId, - layerIds.length - ) === 'clear'; + newLayerId, + clonedIDsMap + ); + }) + .addCase(removeOrClearLayer, (state, { payload: { visualizationId, layerId, layerIds } }) => { + const activeVisualization = visualizationMap[visualizationId]; + const activeDataSource = datasourceMap[state.activeDatasourceId!]; + const isOnlyLayer = + getRemoveOperation( + activeVisualization, + state.visualization.state, + layerId, + layerIds.length + ) === 'clear'; - let removedLayerIds: string[] = []; + let removedLayerIds: string[] = []; - state.datasourceStates = mapValues( - state.datasourceStates, - (datasourceState, datasourceId) => { - const datasource = datasourceMap[datasourceId!]; + state.datasourceStates = mapValues( + state.datasourceStates, + (datasourceState, datasourceId) => { + const datasource = datasourceMap[datasourceId!]; - const { newState, removedLayerIds: removedLayerIdsForThisDatasource } = isOnlyLayer - ? datasource.clearLayer(datasourceState.state, layerId) - : datasource.removeLayer(datasourceState.state, layerId); + const { newState, removedLayerIds: removedLayerIdsForThisDatasource } = isOnlyLayer + ? datasource.clearLayer(datasourceState.state, layerId) + : datasource.removeLayer(datasourceState.state, layerId); - removedLayerIds = [...removedLayerIds, ...removedLayerIdsForThisDatasource]; + removedLayerIds = [...removedLayerIds, ...removedLayerIdsForThisDatasource]; - return { - ...datasourceState, - ...(datasourceId === state.activeDatasourceId && { - state: newState, - }), - }; - } - ); - state.stagedPreview = undefined; - // reuse the activeDatasource current dataView id for the moment - const currentDataViewsId = activeDataSource.getUsedDataView( - state.datasourceStates[state.activeDatasourceId!].state - ); - - if (isOnlyLayer || !activeVisualization.removeLayer) { - state.visualization.state = activeVisualization.clearLayer( - state.visualization.state, - layerId, - currentDataViewsId + return { + ...datasourceState, + ...(datasourceId === state.activeDatasourceId && { + state: newState, + }), + }; + } + ); + state.stagedPreview = undefined; + // reuse the activeDatasource current dataView id for the moment + const currentDataViewsId = activeDataSource.getUsedDataView( + state.datasourceStates[state.activeDatasourceId!].state ); - } - uniq(removedLayerIds).forEach( - (removedId) => - (state.visualization.state = activeVisualization.removeLayer?.( + if (isOnlyLayer || !activeVisualization.removeLayer) { + state.visualization.state = activeVisualization.clearLayer( state.visualization.state, - removedId - )) - ); - }, - [changeIndexPattern.type]: ( - state, - { - payload, - }: { - payload: { - visualizationIds?: string; - datasourceIds?: string; - layerId?: string; - indexPatternId: string; - dataViews: Pick; - }; - } - ) => { - const { visualizationIds, datasourceIds, layerId, indexPatternId, dataViews } = payload; - const newIndexPatternRefs = [...state.dataViews.indexPatternRefs]; - const availableRefs = new Set(newIndexPatternRefs.map((ref) => ref.id)); - // check for missing refs - Object.values(dataViews.indexPatterns || {}).forEach((indexPattern) => { - if (!availableRefs.has(indexPattern.id)) { - newIndexPatternRefs.push({ - id: indexPattern.id!, - name: indexPattern.name, - title: indexPattern.title, - }); - } - }); - const newState: Partial = { - dataViews: { - ...state.dataViews, - indexPatterns: dataViews.indexPatterns, - indexPatternRefs: newIndexPatternRefs, - }, - }; - if (visualizationIds?.length) { - for (const visualizationId of visualizationIds) { - const activeVisualization = - visualizationId && - state.visualization.activeId === visualizationId && - visualizationMap[visualizationId]; - if (activeVisualization && layerId && activeVisualization?.onIndexPatternChange) { - newState.visualization = { - ...state.visualization, - state: activeVisualization.onIndexPatternChange( - state.visualization.state, - indexPatternId, - layerId - ), - }; - } + layerId, + currentDataViewsId + ); } - } - if (datasourceIds?.length) { - newState.datasourceStates = { ...state.datasourceStates }; - const frame = selectFramePublicAPI( - { lens: { ...current(state), dataViews: newState.dataViews! } }, - datasourceMap - ); - const datasourceLayers = frame.datasourceLayers; - for (const datasourceId of datasourceIds) { - const activeDatasource = datasourceId && datasourceMap[datasourceId]; - if (activeDatasource && activeDatasource?.onIndexPatternChange) { - newState.datasourceStates = { - ...newState.datasourceStates, - [datasourceId]: { - isLoading: false, - state: activeDatasource.onIndexPatternChange( - newState.datasourceStates[datasourceId].state, - dataViews.indexPatterns, + uniq(removedLayerIds).forEach( + (removedId) => + (state.visualization.state = activeVisualization.removeLayer?.( + state.visualization.state, + removedId + )) + ); + }) + .addCase(changeIndexPattern, (state, { payload }) => { + const { visualizationIds, datasourceIds, layerId, indexPatternId, dataViews } = payload; + if (!dataViews.indexPatterns) { + throw new Error('Invariant: indexPatterns should be defined'); + } + const newIndexPatternRefs = [...state.dataViews.indexPatternRefs]; + const availableRefs = new Set(newIndexPatternRefs.map((ref) => ref.id)); + // check for missing refs + Object.values(dataViews.indexPatterns || {}).forEach((indexPattern) => { + if (!availableRefs.has(indexPattern.id)) { + newIndexPatternRefs.push({ + id: indexPattern.id!, + name: indexPattern.name, + title: indexPattern.title, + }); + } + }); + const newState: Partial = { + dataViews: { + ...state.dataViews, + indexPatterns: dataViews.indexPatterns, + indexPatternRefs: newIndexPatternRefs, + }, + }; + if (visualizationIds?.length) { + for (const visualizationId of visualizationIds) { + const activeVisualization = + visualizationId && + state.visualization.activeId === visualizationId && + visualizationMap[visualizationId]; + if (activeVisualization && layerId && activeVisualization?.onIndexPatternChange) { + newState.visualization = { + ...state.visualization, + state: activeVisualization.onIndexPatternChange( + state.visualization.state, indexPatternId, layerId ), - }, - }; - // Update the visualization columns - if (layerId && state.visualization.activeId) { - const nextPublicAPI = activeDatasource.getPublicAPI({ - state: newState.datasourceStates[datasourceId].state, - layerId, - indexPatterns: dataViews.indexPatterns, - }); - const nextTable = new Set( - nextPublicAPI.getTableSpec().map(({ columnId }) => columnId) - ); - const datasourcePublicAPI = datasourceLayers[layerId]; - if (datasourcePublicAPI) { - const removed = datasourcePublicAPI - .getTableSpec() - .map(({ columnId }) => columnId) - .filter((columnId) => !nextTable.has(columnId)); - const activeVisualization = visualizationMap[state.visualization.activeId]; - let nextVisState = (newState.visualization || state.visualization).state; - removed.forEach((columnId) => { - nextVisState = activeVisualization.removeDimension({ - layerId, - columnId, - prevState: nextVisState, - frame, - }); + }; + } + } + } + if (datasourceIds?.length) { + newState.datasourceStates = { ...state.datasourceStates }; + const frame = selectFramePublicAPI( + { lens: { ...current(state), dataViews: newState.dataViews! } }, + datasourceMap + ); + const datasourceLayers = frame.datasourceLayers; + + for (const datasourceId of datasourceIds) { + const activeDatasource = datasourceId && datasourceMap[datasourceId]; + if (activeDatasource && activeDatasource?.onIndexPatternChange) { + newState.datasourceStates = { + ...newState.datasourceStates, + [datasourceId]: { + isLoading: false, + state: activeDatasource.onIndexPatternChange( + newState.datasourceStates[datasourceId].state, + dataViews.indexPatterns, + indexPatternId, + layerId + ), + }, + }; + // Update the visualization columns + if (layerId && state.visualization.activeId) { + const nextPublicAPI = activeDatasource.getPublicAPI({ + state: newState.datasourceStates[datasourceId].state, + layerId, + indexPatterns: dataViews.indexPatterns, }); - newState.visualization = { - ...state.visualization, - state: nextVisState, - }; + const nextTable = new Set( + nextPublicAPI.getTableSpec().map(({ columnId }) => columnId) + ); + const datasourcePublicAPI = datasourceLayers[layerId]; + if (datasourcePublicAPI) { + const removed = datasourcePublicAPI + .getTableSpec() + .map(({ columnId }) => columnId) + .filter((columnId) => !nextTable.has(columnId)); + const activeVisualization = visualizationMap[state.visualization.activeId]; + let nextVisState = (newState.visualization || state.visualization).state; + removed.forEach((columnId) => { + nextVisState = activeVisualization.removeDimension({ + layerId, + columnId, + prevState: nextVisState, + frame, + }); + }); + newState.visualization = { + ...state.visualization, + state: nextVisState, + }; + } } } } } - } - return { ...state, ...newState }; - }, - [updateIndexPatterns.type]: (state, { payload }: { payload: Partial }) => { - return { - ...state, - dataViews: { ...state.dataViews, ...payload }, - }; - }, - [replaceIndexpattern.type]: ( - state, - { payload }: { payload: { newIndexPattern: IndexPattern; oldId: string } } - ) => { - state.dataViews.indexPatterns[payload.newIndexPattern.id] = payload.newIndexPattern; - delete state.dataViews.indexPatterns[payload.oldId]; - state.dataViews.indexPatternRefs = state.dataViews.indexPatternRefs.filter( - (r) => r.id !== payload.oldId - ); - state.dataViews.indexPatternRefs.push({ - id: payload.newIndexPattern.id, - title: payload.newIndexPattern.title, - name: payload.newIndexPattern.name, - }); - const visualization = visualizationMap[state.visualization.activeId!]; - state.visualization.state = - visualization.onIndexPatternRename?.( - state.visualization.state, - payload.oldId, - payload.newIndexPattern.id - ) ?? state.visualization.state; - - Object.entries(state.datasourceStates).forEach(([datasourceId, datasourceState]) => { - const datasource = datasourceMap[datasourceId]; - state.datasourceStates[datasourceId].state = - datasource?.onIndexPatternRename?.( - datasourceState.state, - payload.oldId, - payload.newIndexPattern.id! - ) ?? datasourceState.state; - }); - }, - [updateDatasourceState.type]: ( - state, - { - payload, - }: { - payload: { - newDatasourceState: unknown; - datasourceId: string; - clearStagedPreview?: boolean; - dontSyncLinkedDimensions: boolean; + return { ...state, ...newState }; + }) + .addCase(updateIndexPatterns, (state, { payload }) => { + return { + ...state, + dataViews: { ...state.dataViews, ...payload }, }; - } - ) => { - if (payload.clearStagedPreview) { - state.stagedPreview = undefined; - } + }) + .addCase(replaceIndexpattern, (state, { payload }) => { + state.dataViews.indexPatterns[payload.newIndexPattern.id] = payload.newIndexPattern; + delete state.dataViews.indexPatterns[payload.oldId]; + state.dataViews.indexPatternRefs = state.dataViews.indexPatternRefs.filter( + (r) => r.id !== payload.oldId + ); + state.dataViews.indexPatternRefs.push({ + id: payload.newIndexPattern.id, + title: payload.newIndexPattern.title, + name: payload.newIndexPattern.name, + }); + const visualization = visualizationMap[state.visualization.activeId!]; + state.visualization.state = + visualization.onIndexPatternRename?.( + state.visualization.state, + payload.oldId, + payload.newIndexPattern.id + ) ?? state.visualization.state; + + Object.entries(state.datasourceStates).forEach(([datasourceId, datasourceState]) => { + const datasource = datasourceMap[datasourceId]; + state.datasourceStates[datasourceId].state = + datasource?.onIndexPatternRename?.( + datasourceState.state, + payload.oldId, + payload.newIndexPattern.id! + ) ?? datasourceState.state; + }); + }) + .addCase(updateDatasourceState, (state, { payload }) => { + if (payload.clearStagedPreview) { + state.stagedPreview = undefined; + } - state.datasourceStates[payload.datasourceId] = { - state: payload.newDatasourceState, - isLoading: false, - }; + state.datasourceStates[payload.datasourceId] = { + state: payload.newDatasourceState, + isLoading: false, + }; - if (payload.dontSyncLinkedDimensions) { - return; - } + if (payload.dontSyncLinkedDimensions) { + return; + } - const currentState = current(state); + const currentState = current(state); - const { - datasourceState: syncedDatasourceState, - visualizationState: syncedVisualizationState, - } = syncLinkedDimensions(currentState, visualizationMap, datasourceMap, payload.datasourceId); + const { + datasourceState: syncedDatasourceState, + visualizationState: syncedVisualizationState, + } = syncLinkedDimensions( + currentState, + visualizationMap, + datasourceMap, + payload.datasourceId + ); - state.visualization.state = syncedVisualizationState; - state.datasourceStates[payload.datasourceId].state = syncedDatasourceState; - }, - [updateVisualizationState.type]: ( - state, - { - payload, - }: { - payload: { - visualizationId: string; - newState: unknown; - dontSyncLinkedDimensions?: boolean; - }; - } - ) => { - if (!state.visualization.activeId) { - throw new Error('Invariant: visualization state got updated without active visualization'); - } - // This is a safeguard that prevents us from accidentally updating the - // wrong visualization. This occurs in some cases due to the uncoordinated - // way we manage state across plugins. - if (state.visualization.activeId !== payload.visualizationId) { - return state; - } + state.visualization.state = syncedVisualizationState; + state.datasourceStates[payload.datasourceId].state = syncedDatasourceState; + }) + .addCase(updateVisualizationState, (state, { payload }) => { + if (!state.visualization.activeId) { + throw new Error( + 'Invariant: visualization state got updated without active visualization' + ); + } + // This is a safeguard that prevents us from accidentally updating the + // wrong visualization. This occurs in some cases due to the uncoordinated + // way we manage state across plugins. + if (state.visualization.activeId !== payload.visualizationId) { + return state; + } - state.visualization.state = payload.newState; + state.visualization.state = payload.newState; - if (!state.activeDatasourceId) { - return; - } + if (!state.activeDatasourceId) { + return; + } - if (payload.dontSyncLinkedDimensions) { - return; - } + if (payload.dontSyncLinkedDimensions) { + return; + } - // TODO - consolidate into applySyncLinkedDimensions - const { - datasourceState: syncedDatasourceState, - visualizationState: syncedVisualizationState, - } = syncLinkedDimensions(current(state), visualizationMap, datasourceMap); + // TODO - consolidate into applySyncLinkedDimensions + const { + datasourceState: syncedDatasourceState, + visualizationState: syncedVisualizationState, + } = syncLinkedDimensions(current(state), visualizationMap, datasourceMap); - state.datasourceStates[state.activeDatasourceId].state = syncedDatasourceState; - state.visualization.state = syncedVisualizationState; - }, + state.datasourceStates[state.activeDatasourceId].state = syncedDatasourceState; + state.visualization.state = syncedVisualizationState; + }) - [switchVisualization.type]: ( - state, - { - payload, - }: { - payload: { - suggestion: { - newVisualizationId: string; - visualizationState: unknown; - datasourceState?: unknown; - datasourceId?: string; - }; - clearStagedPreview?: boolean; - }; - } - ) => { - const { newVisualizationId, visualizationState, datasourceState, datasourceId } = - payload.suggestion; - return { - ...state, - datasourceStates: datasourceId - ? { - ...state.datasourceStates, - [datasourceId]: { - ...state.datasourceStates[datasourceId], - state: datasourceState, + .addCase(switchVisualization, (state, { payload }) => { + const { newVisualizationId, visualizationState, datasourceState, datasourceId } = + payload.suggestion; + return { + ...state, + datasourceStates: datasourceId + ? { + ...state.datasourceStates, + [datasourceId]: { + ...state.datasourceStates[datasourceId], + state: datasourceState, + }, + } + : state.datasourceStates, + visualization: { + ...state.visualization, + activeId: newVisualizationId, + state: visualizationState, + }, + stagedPreview: payload.clearStagedPreview + ? undefined + : state.stagedPreview || { + datasourceStates: state.datasourceStates, + visualization: state.visualization, + activeData: state.activeData, }, - } - : state.datasourceStates, - visualization: { - ...state.visualization, - activeId: newVisualizationId, - state: visualizationState, - }, - stagedPreview: payload.clearStagedPreview - ? undefined - : state.stagedPreview || { - datasourceStates: state.datasourceStates, - visualization: state.visualization, - activeData: state.activeData, - }, - }; - }, - [rollbackSuggestion.type]: (state) => { - return { - ...state, - ...(state.stagedPreview || {}), - stagedPreview: undefined, - }; - }, - [setToggleFullscreen.type]: (state) => { - return { ...state, isFullscreenDatasource: !state.isFullscreenDatasource }; - }, - [submitSuggestion.type]: (state) => { - return { - ...state, - stagedPreview: undefined, - }; - }, - [switchDatasource.type]: ( - state, - { - payload, - }: { - payload: { - newDatasourceId: string; }; - } - ) => { - return { - ...state, - datasourceStates: { - ...state.datasourceStates, - [payload.newDatasourceId]: state.datasourceStates[payload.newDatasourceId] || { - state: null, - isLoading: true, + }) + .addCase(rollbackSuggestion, (state) => { + return { + ...state, + ...(state.stagedPreview || {}), + stagedPreview: undefined, + }; + }) + .addCase(setToggleFullscreen, (state) => { + return { ...state, isFullscreenDatasource: !state.isFullscreenDatasource }; + }) + .addCase(submitSuggestion, (state) => { + return { + ...state, + stagedPreview: undefined, + }; + }) + .addCase(switchDatasource, (state, { payload }) => { + return { + ...state, + datasourceStates: { + ...state.datasourceStates, + [payload.newDatasourceId]: state.datasourceStates[payload.newDatasourceId] || { + state: null, + isLoading: true, + }, }, - }, - activeDatasourceId: payload.newDatasourceId, - }; - }, - [switchAndCleanDatasource.type]: ( - state, - { - payload, - }: { - payload: { - newDatasourceId: string; - visualizationId?: string; - currentIndexPatternId?: string; + activeDatasourceId: payload.newDatasourceId, }; - } - ) => { - const activeVisualization = - payload.visualizationId && visualizationMap[payload.visualizationId]; - const visualization = state.visualization; - let newVizState = visualization.state; - const ids: string[] = []; - if (activeVisualization && activeVisualization.getLayerIds) { - const layerIds = activeVisualization.getLayerIds(visualization.state); - ids.push(...Object.values(layerIds)); - newVizState = activeVisualization.initialize(() => ids[0]); - } - const currentVizId = ids[0]; + }) + .addCase(switchAndCleanDatasource, (state, { payload }) => { + const activeVisualization = + payload.visualizationId && visualizationMap[payload.visualizationId]; + const visualization = state.visualization; + let newVizState = visualization.state; + const ids: string[] = []; + if (activeVisualization && activeVisualization.getLayerIds) { + const layerIds = activeVisualization.getLayerIds(visualization.state); + ids.push(...Object.values(layerIds)); + newVizState = activeVisualization.initialize(() => ids[0]); + } + const currentVizId = ids[0]; - const datasourceState = current(state).datasourceStates[payload.newDatasourceId] - ? current(state).datasourceStates[payload.newDatasourceId]?.state - : datasourceMap[payload.newDatasourceId].createEmptyLayer( - payload.currentIndexPatternId ?? '' - ); - const updatedState = datasourceMap[payload.newDatasourceId].insertLayer( - datasourceState, - currentVizId - ); + const datasourceState = current(state).datasourceStates[payload.newDatasourceId] + ? current(state).datasourceStates[payload.newDatasourceId]?.state + : datasourceMap[payload.newDatasourceId].createEmptyLayer( + payload.currentIndexPatternId ?? '' + ); + const updatedState = datasourceMap[payload.newDatasourceId].insertLayer( + datasourceState, + currentVizId + ); - return { - ...state, - datasourceStates: { - [payload.newDatasourceId]: { - state: updatedState, - isLoading: false, - }, - }, - activeDatasourceId: payload.newDatasourceId, - visualization: { - ...visualization, - state: newVizState, - }, - }; - }, - [navigateAway.type]: (state) => state, - [loadInitial.type]: ( - state, - payload: PayloadAction<{ - initialInput?: LensEmbeddableInput; - redirectCallback?: (savedObjectId?: string) => void; - history?: History; - inlineEditing?: boolean; - }> - ) => state, - [initEmpty.type]: ( - state, - { - payload, - }: { - payload: { - newState: Partial; - initialContext: VisualizeFieldContext | VisualizeEditorContext | undefined; - layerId: string; - }; - } - ) => { - const newState = { - ...state, - ...payload.newState, - }; - const suggestion: Suggestion | undefined = getVisualizeFieldSuggestions({ - datasourceMap, - datasourceStates: newState.datasourceStates, - visualizationMap, - visualizeTriggerFieldContext: payload.initialContext, - dataViews: newState.dataViews, - }); - if (suggestion) { return { - ...newState, + ...state, datasourceStates: { - ...newState.datasourceStates, - [suggestion.datasourceId!]: { - ...newState.datasourceStates[suggestion.datasourceId!], - state: suggestion.datasourceState, + [payload.newDatasourceId]: { + state: updatedState, + isLoading: false, }, }, + activeDatasourceId: payload.newDatasourceId, visualization: { - ...newState.visualization, - activeId: suggestion.visualizationId, - state: suggestion.visualizationState, + ...visualization, + state: newVizState, }, - stagedPreview: undefined, }; - } + }) + .addCase(navigateAway, (state) => state) + .addCase(loadInitial, (state, payload) => state) + .addCase(initEmpty, (state, { payload }) => { + const newState = { + ...state, + ...payload.newState, + }; + const suggestion: Suggestion | undefined = getVisualizeFieldSuggestions({ + datasourceMap, + datasourceStates: newState.datasourceStates, + visualizationMap, + visualizeTriggerFieldContext: payload.initialContext, + dataViews: newState.dataViews, + }); + if (suggestion) { + return { + ...newState, + datasourceStates: { + ...newState.datasourceStates, + [suggestion.datasourceId!]: { + ...newState.datasourceStates[suggestion.datasourceId!], + state: suggestion.datasourceState, + }, + }, + visualization: { + ...newState.visualization, + activeId: suggestion.visualizationId, + state: suggestion.visualizationState, + }, + stagedPreview: undefined, + }; + } - const visualization = newState.visualization; + const visualization = newState.visualization; - if (!visualization.activeId) { - throw new Error('Invariant: visualization state got updated without active visualization'); - } + if (!visualization.activeId) { + throw new Error( + 'Invariant: visualization state got updated without active visualization' + ); + } - const activeVisualization = visualizationMap[visualization.activeId]; - if (visualization.state === null && activeVisualization) { - const activeDatasourceId = getInitialDatasourceId(datasourceMap)!; - const newVisState = activeVisualization.initialize(() => payload.layerId); - const activeDatasource = datasourceMap[activeDatasourceId]; + const activeVisualization = visualizationMap[visualization.activeId]; + if (visualization.state === null && activeVisualization) { + const activeDatasourceId = getInitialDatasourceId(datasourceMap)!; + const newVisState = activeVisualization.initialize(() => payload.layerId); + const activeDatasource = datasourceMap[activeDatasourceId]; + return { + ...newState, + activeDatasourceId, + datasourceStates: { + ...newState.datasourceStates, + [activeDatasourceId]: { + ...newState.datasourceStates[activeDatasourceId], + state: activeDatasource.insertLayer( + newState.datasourceStates[activeDatasourceId]?.state, + payload.layerId + ), + }, + }, + visualization: { + ...visualization, + state: newVisState, + }, + }; + } + return newState; + }) + .addCase(editVisualizationAction, (state, { payload }) => { + if (!state.visualization.activeId) { + throw new Error( + 'Invariant: visualization state got updated without active visualization' + ); + } + // This is a safeguard that prevents us from accidentally updating the + // wrong visualization. This occurs in some cases due to the uncoordinated + // way we manage state across plugins. + if (state.visualization.activeId !== payload.visualizationId) { + return state; + } + const activeVisualization = visualizationMap[payload.visualizationId]; + if (activeVisualization?.onEditAction) { + state.visualization.state = activeVisualization.onEditAction( + state.visualization.state, + payload.event + ); + } + }) + .addCase(insertLayer, (state, { payload }) => { + const updater = datasourceMap[payload.datasourceId].insertLayer; return { - ...newState, - activeDatasourceId, + ...state, datasourceStates: { - ...newState.datasourceStates, - [activeDatasourceId]: { - ...newState.datasourceStates[activeDatasourceId], - state: activeDatasource.insertLayer( - newState.datasourceStates[activeDatasourceId]?.state, + ...state.datasourceStates, + [payload.datasourceId]: { + ...state.datasourceStates[payload.datasourceId], + state: updater( + current(state).datasourceStates[payload.datasourceId].state, payload.layerId ), }, }, - visualization: { - ...visualization, - state: newVisState, - }, - }; - } - return newState; - }, - [editVisualizationAction.type]: ( - state, - { - payload, - }: { - payload: { - visualizationId: string; - event: LensEditEvent; }; - } - ) => { - if (!state.visualization.activeId) { - throw new Error('Invariant: visualization state got updated without active visualization'); - } - // This is a safeguard that prevents us from accidentally updating the - // wrong visualization. This occurs in some cases due to the uncoordinated - // way we manage state across plugins. - if (state.visualization.activeId !== payload.visualizationId) { - return state; - } - const activeVisualization = visualizationMap[payload.visualizationId]; - if (activeVisualization?.onEditAction) { - state.visualization.state = activeVisualization.onEditAction( - state.visualization.state, - payload.event - ); - } - }, - [insertLayer.type]: ( - state, - { - payload, - }: { - payload: { - layerId: string; - datasourceId: string; - }; - } - ) => { - const updater = datasourceMap[payload.datasourceId].insertLayer; - return { - ...state, - datasourceStates: { - ...state.datasourceStates, - [payload.datasourceId]: { - ...state.datasourceStates[payload.datasourceId], - state: updater( - current(state).datasourceStates[payload.datasourceId].state, - payload.layerId - ), - }, - }, - }; - }, - [removeLayers.type]: ( - state, - { - payload: { visualizationId, layerIds }, - }: { - payload: { - visualizationId: VisualizationState['activeId']; - layerIds: string[]; - }; - } - ) => { - if (!state.visualization.activeId) { - throw new Error('Invariant: visualization state got updated without active visualization'); - } - - const activeVisualization = visualizationId && visualizationMap[visualizationId]; - - // This is a safeguard that prevents us from accidentally updating the - // wrong visualization. This occurs in some cases due to the uncoordinated - // way we manage state across plugins. - if ( - state.visualization.activeId === visualizationId && - activeVisualization && - activeVisualization.removeLayer && - state.visualization.state - ) { - const updater = layerIds.reduce( - (acc, layerId) => - activeVisualization.removeLayer ? activeVisualization.removeLayer(acc, layerId) : acc, - state.visualization.state - ); + }) + .addCase(removeLayers, (state, { payload: { visualizationId, layerIds } }) => { + if (!state.visualization.activeId) { + throw new Error( + 'Invariant: visualization state got updated without active visualization' + ); + } - state.visualization.state = - typeof updater === 'function' ? updater(current(state.visualization.state)) : updater; - } + const activeVisualization = visualizationId && visualizationMap[visualizationId]; - layerIds.forEach((layerId) => { - const [layerDatasourceId] = - Object.entries(datasourceMap).find(([datasourceId, datasource]) => { - return ( - state.datasourceStates[datasourceId] && - datasource.getLayers(state.datasourceStates[datasourceId].state).includes(layerId) - ); - }) ?? []; - if (layerDatasourceId) { - const { newState } = datasourceMap[layerDatasourceId].removeLayer( - current(state).datasourceStates[layerDatasourceId].state, - layerId + // This is a safeguard that prevents us from accidentally updating the + // wrong visualization. This occurs in some cases due to the uncoordinated + // way we manage state across plugins. + if ( + state.visualization.activeId === visualizationId && + activeVisualization && + activeVisualization.removeLayer && + state.visualization.state + ) { + const updater = layerIds.reduce( + (acc, layerId) => + activeVisualization.removeLayer ? activeVisualization.removeLayer(acc, layerId) : acc, + state.visualization.state ); - state.datasourceStates[layerDatasourceId].state = newState; - // TODO - call removeLayer for any extra (linked) layers removed by the datasource - } - }); - }, - [addLayer.type]: ( - state, - { - payload: { layerId, layerType, extraArg, ignoreInitialValues }, - }: { - payload: { - layerId: string; - layerType: LayerType; - extraArg: unknown; - ignoreInitialValues: boolean; - }; - } - ) => { - if (!state.activeDatasourceId || !state.visualization.activeId) { - return state; - } + state.visualization.state = + typeof updater === 'function' ? updater(current(state.visualization.state)) : updater; + } - const activeVisualization = visualizationMap[state.visualization.activeId]; - const activeDatasource = datasourceMap[state.activeDatasourceId]; - // reuse the active datasource dataView id for the new layer - const currentDataViewsId = activeDatasource.getUsedDataView( - state.datasourceStates[state.activeDatasourceId!].state - ); - const visualizationState = activeVisualization.appendLayer!( - state.visualization.state, - layerId, - layerType, - currentDataViewsId, - extraArg - ); + layerIds.forEach((layerId) => { + const [layerDatasourceId] = + Object.entries(datasourceMap).find(([datasourceId, datasource]) => { + return ( + state.datasourceStates[datasourceId] && + datasource.getLayers(state.datasourceStates[datasourceId].state).includes(layerId) + ); + }) ?? []; + if (layerDatasourceId) { + const { newState } = datasourceMap[layerDatasourceId].removeLayer( + current(state).datasourceStates[layerDatasourceId].state, + layerId + ); + state.datasourceStates[layerDatasourceId].state = newState; + // TODO - call removeLayer for any extra (linked) layers removed by the datasource + } + }); + }) - const framePublicAPI = selectFramePublicAPI({ lens: current(state) }, datasourceMap); + .addCase( + addLayer, + (state, { payload: { layerId, layerType, extraArg, ignoreInitialValues } }) => { + if (!state.activeDatasourceId || !state.visualization.activeId) { + return state; + } - const { noDatasource } = - activeVisualization - .getSupportedLayers(visualizationState, framePublicAPI) - .find(({ type }) => type === layerType) || {}; - - const layersToLinkTo = - activeVisualization.getLayersToLinkTo?.(visualizationState, layerId) ?? []; - - const datasourceState = - !noDatasource && activeDatasource - ? activeDatasource.insertLayer( - state.datasourceStates[state.activeDatasourceId].state, - layerId, - layersToLinkTo - ) - : state.datasourceStates[state.activeDatasourceId].state; - - const { activeDatasourceState, activeVisualizationState } = ignoreInitialValues - ? { activeDatasourceState: datasourceState, activeVisualizationState: visualizationState } - : addInitialValueIfAvailable({ - datasourceState, - visualizationState, - framePublicAPI, - activeVisualization, - activeDatasource, + const activeVisualization = visualizationMap[state.visualization.activeId]; + const activeDatasource = datasourceMap[state.activeDatasourceId]; + // reuse the active datasource dataView id for the new layer + const currentDataViewsId = activeDatasource.getUsedDataView( + state.datasourceStates[state.activeDatasourceId!].state + ); + const visualizationState = activeVisualization.appendLayer!( + state.visualization.state, layerId, layerType, - }); + currentDataViewsId, + extraArg + ); - state.visualization.state = activeVisualizationState; - state.datasourceStates[state.activeDatasourceId].state = activeDatasourceState; - state.stagedPreview = undefined; + const framePublicAPI = selectFramePublicAPI({ lens: current(state) }, datasourceMap); + + const { noDatasource } = + activeVisualization + .getSupportedLayers(visualizationState, framePublicAPI) + .find(({ type }) => type === layerType) || {}; + + const layersToLinkTo = + activeVisualization.getLayersToLinkTo?.(visualizationState, layerId) ?? []; + + const datasourceState = + !noDatasource && activeDatasource + ? activeDatasource.insertLayer( + state.datasourceStates[state.activeDatasourceId].state, + layerId, + layersToLinkTo + ) + : state.datasourceStates[state.activeDatasourceId].state; + + const { activeDatasourceState, activeVisualizationState } = ignoreInitialValues + ? { + activeDatasourceState: datasourceState, + activeVisualizationState: visualizationState, + } + : addInitialValueIfAvailable({ + datasourceState, + visualizationState, + framePublicAPI, + activeVisualization, + activeDatasource, + layerId, + layerType, + }); - const { - datasourceState: syncedDatasourceState, - visualizationState: syncedVisualizationState, - } = syncLinkedDimensions(current(state), visualizationMap, datasourceMap); + state.visualization.state = activeVisualizationState; + state.datasourceStates[state.activeDatasourceId].state = activeDatasourceState; + state.stagedPreview = undefined; - state.datasourceStates[state.activeDatasourceId].state = syncedDatasourceState; - state.visualization.state = syncedVisualizationState; - }, - [onDropToDimension.type]: ( - state, - { - payload: { source, target, dropType }, - }: { - payload: { - source: DragDropIdentifier; - target: DragDropOperation; - dropType: DropType; - }; - } - ) => { - if (!state.visualization.activeId) { - return state; - } + const { + datasourceState: syncedDatasourceState, + visualizationState: syncedVisualizationState, + } = syncLinkedDimensions(current(state), visualizationMap, datasourceMap); - const activeVisualization = visualizationMap[state.visualization.activeId]; - const framePublicAPI = selectFramePublicAPI({ lens: current(state) }, datasourceMap); + state.datasourceStates[state.activeDatasourceId].state = syncedDatasourceState; + state.visualization.state = syncedVisualizationState; + } + ) + .addCase(onDropToDimension, (state, { payload: { source, target, dropType } }) => { + if (!state.visualization.activeId) { + return state; + } - const { groups } = activeVisualization.getConfiguration({ - layerId: target.layerId, - frame: framePublicAPI, - state: state.visualization.state, - }); + const activeVisualization = visualizationMap[state.visualization.activeId]; + const framePublicAPI = selectFramePublicAPI({ lens: current(state) }, datasourceMap); - const [layerDatasourceId, layerDatasource] = - Object.entries(datasourceMap).find( - ([datasourceId, datasource]) => - state.datasourceStates[datasourceId] && - datasource - .getLayers(state.datasourceStates[datasourceId].state) - .includes(target.layerId) - ) || []; - - let newDatasourceState; - - if (layerDatasource && layerDatasourceId) { - newDatasourceState = layerDatasource?.onDrop({ - state: state.datasourceStates[layerDatasourceId].state, - source, - target: { - ...(target as unknown as DragDropOperation), - filterOperations: - groups.find(({ groupId: gId }) => gId === target.groupId)?.filterOperations || - Boolean, - }, - targetLayerDimensionGroups: groups, - dropType, - indexPatterns: framePublicAPI.dataViews.indexPatterns, + const { groups } = activeVisualization.getConfiguration({ + layerId: target.layerId, + frame: framePublicAPI, + state: state.visualization.state, }); - if (!newDatasourceState) { - return; + + const [layerDatasourceId, layerDatasource] = + Object.entries(datasourceMap).find( + ([datasourceId, datasource]) => + state.datasourceStates[datasourceId] && + datasource + .getLayers(state.datasourceStates[datasourceId].state) + .includes(target.layerId) + ) || []; + + let newDatasourceState; + + if (layerDatasource && layerDatasourceId) { + newDatasourceState = layerDatasource?.onDrop({ + state: state.datasourceStates[layerDatasourceId].state, + source, + target: { + ...(target as unknown as DragDropOperation), + filterOperations: + groups.find(({ groupId: gId }) => gId === target.groupId)?.filterOperations || + Boolean, + }, + targetLayerDimensionGroups: groups, + dropType, + indexPatterns: framePublicAPI.dataViews.indexPatterns, + }); + if (!newDatasourceState) { + return; + } + state.datasourceStates[layerDatasourceId].state = newDatasourceState; } - state.datasourceStates[layerDatasourceId].state = newDatasourceState; - } - activeVisualization.onDrop = activeVisualization.onDrop?.bind(activeVisualization); - const newVisualizationState = (activeVisualization.onDrop || onDropForVisualization)?.( - { - prevState: state.visualization.state, - frame: framePublicAPI, - target, - source, - dropType, - group: groups.find(({ groupId: gId }) => gId === target.groupId), - }, - activeVisualization - ); - state.visualization.state = newVisualizationState; + activeVisualization.onDrop = activeVisualization.onDrop?.bind(activeVisualization); + const newVisualizationState = (activeVisualization.onDrop || onDropForVisualization)?.( + { + prevState: state.visualization.state, + frame: framePublicAPI, + target, + source, + dropType, + group: groups.find(({ groupId: gId }) => gId === target.groupId), + }, + activeVisualization + ); + state.visualization.state = newVisualizationState; - if (layerDatasourceId) { - const { - datasourceState: syncedDatasourceState, - visualizationState: syncedVisualizationState, - } = syncLinkedDimensions(current(state), visualizationMap, datasourceMap); + if (layerDatasourceId) { + const { + datasourceState: syncedDatasourceState, + visualizationState: syncedVisualizationState, + } = syncLinkedDimensions(current(state), visualizationMap, datasourceMap); - state.datasourceStates[layerDatasourceId].state = syncedDatasourceState; - state.visualization.state = syncedVisualizationState; - } - state.stagedPreview = undefined; - }, - [setLayerDefaultDimension.type]: ( - state, - { - payload: { layerId, columnId, groupId }, - }: { - payload: { - layerId: string; - columnId: string; - groupId: string; - }; - } - ) => { - if (!state.activeDatasourceId || !state.visualization.activeId) { - return state; - } + state.datasourceStates[layerDatasourceId].state = syncedDatasourceState; + state.visualization.state = syncedVisualizationState; + } + state.stagedPreview = undefined; + }) + .addCase(setLayerDefaultDimension, (state, { payload: { layerId, columnId, groupId } }) => { + if (!state.activeDatasourceId || !state.visualization.activeId) { + return state; + } - const activeDatasource = datasourceMap[state.activeDatasourceId]; - const activeVisualization = visualizationMap[state.visualization.activeId]; - const layerType = - activeVisualization.getLayerType(layerId, state.visualization.state) || LayerTypes.DATA; - const { activeDatasourceState, activeVisualizationState } = addInitialValueIfAvailable({ - datasourceState: state.datasourceStates[state.activeDatasourceId].state, - visualizationState: state.visualization.state, - framePublicAPI: selectFramePublicAPI({ lens: current(state) }, datasourceMap), - activeVisualization, - activeDatasource, - layerId, - layerType, - columnId, - groupId, - }); + const activeDatasource = datasourceMap[state.activeDatasourceId]; + const activeVisualization = visualizationMap[state.visualization.activeId]; + const layerType = + activeVisualization.getLayerType(layerId, state.visualization.state) || LayerTypes.DATA; + const { activeDatasourceState, activeVisualizationState } = addInitialValueIfAvailable({ + datasourceState: state.datasourceStates[state.activeDatasourceId].state, + visualizationState: state.visualization.state, + framePublicAPI: selectFramePublicAPI({ lens: current(state) }, datasourceMap), + activeVisualization, + activeDatasource, + layerId, + layerType, + columnId, + groupId, + }); - state.visualization.state = activeVisualizationState; - state.datasourceStates[state.activeDatasourceId].state = activeDatasourceState; - }, - [removeDimension.type]: ( - state, - { - payload: { layerId, columnId, datasourceId }, - }: { - payload: { - layerId: string; - columnId: string; - datasourceId?: string; - }; - } - ) => { - if (!state.visualization.activeId) { - return state; - } + state.visualization.state = activeVisualizationState; + state.datasourceStates[state.activeDatasourceId].state = activeDatasourceState; + }) + .addCase(removeDimension, (state, { payload: { layerId, columnId, datasourceId } }) => { + if (!state.visualization.activeId) { + return state; + } - const activeVisualization = visualizationMap[state.visualization.activeId]; + const activeVisualization = visualizationMap[state.visualization.activeId]; - const links = activeVisualization.getLinkedDimensions?.(state.visualization.state); + const links = activeVisualization.getLinkedDimensions?.(state.visualization.state); - const linkedDimensions = links - ?.filter(({ from: { columnId: fromId } }) => columnId === fromId) - ?.map(({ to }) => to); + const linkedDimensions = links + ?.filter(({ from: { columnId: fromId } }) => columnId === fromId) + ?.map(({ to }) => to); - const datasource = datasourceId ? datasourceMap[datasourceId] : undefined; + const datasource = datasourceId ? datasourceMap[datasourceId] : undefined; - const frame = selectFramePublicAPI({ lens: current(state) }, datasourceMap); + const frame = selectFramePublicAPI({ lens: current(state) }, datasourceMap); - const remove = (dimensionProps: { layerId: string; columnId: string }) => { - if (datasource && datasourceId) { - let datasourceState; + const remove = (dimensionProps: { layerId: string; columnId: string }) => { + if (datasource && datasourceId) { + let datasourceState; + try { + datasourceState = current(state.datasourceStates[datasourceId].state); + } catch { + datasourceState = state.datasourceStates[datasourceId].state; + } + state.datasourceStates[datasourceId].state = datasource?.removeColumn({ + layerId: dimensionProps.layerId, + columnId: dimensionProps.columnId, + prevState: datasourceState, + indexPatterns: frame.dataViews.indexPatterns, + }); + } + + let visualizationState; try { - datasourceState = current(state.datasourceStates[datasourceId].state); + visualizationState = current(state.visualization.state); } catch { - datasourceState = state.datasourceStates[datasourceId].state; + visualizationState = state.visualization.state; } - state.datasourceStates[datasourceId].state = datasource?.removeColumn({ + state.visualization.state = activeVisualization.removeDimension({ layerId: dimensionProps.layerId, columnId: dimensionProps.columnId, - prevState: datasourceState, - indexPatterns: frame.dataViews.indexPatterns, + prevState: visualizationState, + frame, }); - } - - let visualizationState; - try { - visualizationState = current(state.visualization.state); - } catch { - visualizationState = state.visualization.state; - } - state.visualization.state = activeVisualization.removeDimension({ - layerId: dimensionProps.layerId, - columnId: dimensionProps.columnId, - prevState: visualizationState, - frame, - }); - }; + }; - remove({ layerId, columnId }); + remove({ layerId, columnId }); - linkedDimensions?.forEach( - (linkedDimension) => - linkedDimension.columnId && // if there's no columnId, there's no dimension to remove - remove({ columnId: linkedDimension.columnId, layerId: linkedDimension.layerId }) - ); - }, - [registerLibraryAnnotationGroup.type]: ( - state, - { - payload: { group, id }, - }: { - payload: { group: EventAnnotationGroupConfig; id: string }; - } - ) => { - state.annotationGroups[id] = group; - }, + linkedDimensions?.forEach( + (linkedDimension) => + linkedDimension.columnId && // if there's no columnId, there's no dimension to remove + remove({ columnId: linkedDimension.columnId, layerId: linkedDimension.layerId }) + ); + }) + .addCase(registerLibraryAnnotationGroup, (state, { payload: { group, id } }) => { + state.annotationGroups[id] = group; + }) + .addDefaultCase((state) => state); }); }; diff --git a/x-pack/plugins/lens/public/trigger_actions/open_lens_config/create_action.test.tsx b/x-pack/plugins/lens/public/trigger_actions/open_lens_config/create_action.test.tsx index 9a06fea94cd98..27372f10ce973 100644 --- a/x-pack/plugins/lens/public/trigger_actions/open_lens_config/create_action.test.tsx +++ b/x-pack/plugins/lens/public/trigger_actions/open_lens_config/create_action.test.tsx @@ -8,16 +8,20 @@ import type { CoreStart } from '@kbn/core/public'; import { coreMock } from '@kbn/core/public/mocks'; import type { LensPluginStartDependencies } from '../../plugin'; import { createMockStartDependencies } from '../../editor_frame_service/mocks'; +import { getMockPresentationContainer } from '@kbn/presentation-containers/mocks'; import { CreateESQLPanelAction } from './create_action'; describe('create Lens panel action', () => { const core = coreMock.createStart(); const mockStartDependencies = createMockStartDependencies() as unknown as LensPluginStartDependencies; + const mockPresentationContainer = getMockPresentationContainer(); describe('compatibility check', () => { it('is incompatible if ui setting for ES|QL is off', async () => { const configurablePanelAction = new CreateESQLPanelAction(mockStartDependencies, core); - const isCompatible = await configurablePanelAction.isCompatible(); + const isCompatible = await configurablePanelAction.isCompatible({ + embeddable: mockPresentationContainer, + }); expect(isCompatible).toBeFalsy(); }); @@ -33,7 +37,9 @@ describe('create Lens panel action', () => { }, } as CoreStart; const createESQLAction = new CreateESQLPanelAction(mockStartDependencies, updatedCore); - const isCompatible = await createESQLAction.isCompatible(); + const isCompatible = await createESQLAction.isCompatible({ + embeddable: mockPresentationContainer, + }); expect(isCompatible).toBeTruthy(); }); diff --git a/x-pack/plugins/lens/public/trigger_actions/open_lens_config/create_action.tsx b/x-pack/plugins/lens/public/trigger_actions/open_lens_config/create_action.tsx index aa33a629c3969..07301f2394130 100644 --- a/x-pack/plugins/lens/public/trigger_actions/open_lens_config/create_action.tsx +++ b/x-pack/plugins/lens/public/trigger_actions/open_lens_config/create_action.tsx @@ -6,29 +6,16 @@ */ import { i18n } from '@kbn/i18n'; import type { CoreStart } from '@kbn/core/public'; -import { Action } from '@kbn/ui-actions-plugin/public'; -import type { - EmbeddableFactory, - EmbeddableInput, - IEmbeddable, -} from '@kbn/embeddable-plugin/public'; +import { Action, IncompatibleActionError } from '@kbn/ui-actions-plugin/public'; +import { EmbeddableApiContext } from '@kbn/presentation-publishing'; +import { apiIsPresentationContainer } from '@kbn/presentation-containers'; import type { LensPluginStartDependencies } from '../../plugin'; const ACTION_CREATE_ESQL_CHART = 'ACTION_CREATE_ESQL_CHART'; -interface Context { - createNewEmbeddable: ( - embeddableFactory: EmbeddableFactory, - initialInput?: Partial, - dismissNotification?: boolean - ) => Promise; - deleteEmbeddable: (embeddableId: string) => void; - initialInput?: Partial; -} - export const getAsyncHelpers = async () => await import('../../async_services'); -export class CreateESQLPanelAction implements Action { +export class CreateESQLPanelAction implements Action { public type = ACTION_CREATE_ESQL_CHART; public id = ACTION_CREATE_ESQL_CHART; public order = 50; @@ -49,19 +36,20 @@ export class CreateESQLPanelAction implements Action { return 'esqlVis'; } - public async isCompatible() { + public async isCompatible({ embeddable }: EmbeddableApiContext) { + if (!apiIsPresentationContainer(embeddable)) return false; // compatible only when ES|QL advanced setting is enabled const { isCreateActionCompatible } = await getAsyncHelpers(); return isCreateActionCompatible(this.core); } - public async execute({ createNewEmbeddable, deleteEmbeddable }: Context) { + public async execute({ embeddable }: EmbeddableApiContext) { + if (!apiIsPresentationContainer(embeddable)) throw new IncompatibleActionError(); const { executeCreateAction } = await getAsyncHelpers(); executeCreateAction({ deps: this.startDependencies, core: this.core, - createNewEmbeddable, - deleteEmbeddable, + api: embeddable, }); } } diff --git a/x-pack/plugins/lens/public/trigger_actions/open_lens_config/create_action_helpers.ts b/x-pack/plugins/lens/public/trigger_actions/open_lens_config/create_action_helpers.ts index e213d0d388b76..49ce940743e70 100644 --- a/x-pack/plugins/lens/public/trigger_actions/open_lens_config/create_action_helpers.ts +++ b/x-pack/plugins/lens/public/trigger_actions/open_lens_config/create_action_helpers.ts @@ -6,13 +6,9 @@ */ import { createGetterSetter } from '@kbn/kibana-utils-plugin/common'; import type { CoreStart } from '@kbn/core/public'; -import type { - EmbeddableFactory, - EmbeddableInput, - IEmbeddable, -} from '@kbn/embeddable-plugin/public'; import { getLensAttributesFromSuggestion } from '@kbn/visualization-utils'; import { IncompatibleActionError } from '@kbn/ui-actions-plugin/public'; +import { PresentationContainer } from '@kbn/presentation-containers'; import { getESQLAdHocDataview, getIndexForESQLQuery } from '@kbn/esql-utils'; import type { Datasource, Visualization } from '../../types'; import type { LensPluginStartDependencies } from '../../plugin'; @@ -20,6 +16,7 @@ import { fetchDataFromAggregateQuery } from '../../datasources/text_based/fetch_ import { suggestionsApi } from '../../lens_suggestions_api'; import { generateId } from '../../id_generator'; import { executeEditAction } from './edit_action_helpers'; +import { Embeddable } from '../../embeddable'; // datasourceMap and visualizationMap setters/getters export const [getVisualizationMap, setVisualizationMap] = createGetterSetter< @@ -37,17 +34,11 @@ export function isCreateActionCompatible(core: CoreStart) { export async function executeCreateAction({ deps, core, - createNewEmbeddable, - deleteEmbeddable, + api, }: { deps: LensPluginStartDependencies; core: CoreStart; - createNewEmbeddable: ( - embeddableFactory: EmbeddableFactory, - initialInput?: Partial, - dismissNotification?: boolean - ) => Promise; - deleteEmbeddable: (embeddableId: string) => void; + api: PresentationContainer; }) { const isCompatibleAction = isCreateActionCompatible(core); const defaultDataView = await deps.dataViews.getDefaultDataView({ @@ -110,20 +101,17 @@ export async function executeCreateAction({ dataView, }); - const input = { - attributes: attrs, - id: generateId(), - }; - const embeddableStart = deps.embeddable; - const factory = embeddableStart.getEmbeddableFactory('lens'); - if (!factory) { - return undefined; - } - const embeddable = await createNewEmbeddable(factory, input, true); + const embeddable = await api.addNewPanel({ + panelType: 'lens', + initialState: { + attributes: attrs, + id: generateId(), + }, + }); // open the flyout if embeddable has been created successfully if (embeddable) { const deletePanel = () => { - deleteEmbeddable(embeddable.id); + api.removePanel(embeddable.id); }; executeEditAction({ diff --git a/x-pack/plugins/lens/public/visualizations/datatable/visualization.test.tsx b/x-pack/plugins/lens/public/visualizations/datatable/visualization.test.tsx index dda07ef2c41c8..963e471e912f7 100644 --- a/x-pack/plugins/lens/public/visualizations/datatable/visualization.test.tsx +++ b/x-pack/plugins/lens/public/visualizations/datatable/visualization.test.tsx @@ -7,7 +7,13 @@ import { Ast } from '@kbn/interpreter'; import { buildExpression } from '@kbn/expressions-plugin/public'; -import { createMockDatasource, createMockFramePublicAPI, DatasourceMock } from '../../mocks'; +import { + createMockDatasource, + createMockFramePublicAPI, + DatasourceMock, + generateActiveData, +} from '../../mocks'; +import faker from 'faker'; import { DatatableVisualizationState, getDatatableVisualization } from './visualization'; import { Operation, @@ -15,6 +21,7 @@ import { FramePublicAPI, TableSuggestionColumn, VisualizationDimensionGroupConfig, + VisualizationConfigProps, } from '../../types'; import { chartPluginMock } from '@kbn/charts-plugin/public/mocks'; import { LayerTypes } from '@kbn/expression-xy-plugin/public'; @@ -408,6 +415,68 @@ describe('Datatable Visualization', () => { ).toEqual([{ columnId: 'c' }, { columnId: 'b' }]); }); + describe('with palette', () => { + let params: VisualizationConfigProps; + beforeEach(() => { + const datasource = createMockDatasource('test'); + datasource.publicAPIMock.getTableSpec.mockReturnValue([{ columnId: 'b', fields: [] }]); + params = { + layerId: 'a', + state: { + layerId: 'a', + layerType: LayerTypes.DATA, + columns: [ + { + columnId: 'b', + palette: { + type: 'palette' as const, + name: '', + params: { stops: [{ color: 'blue', stop: 0 }] }, + }, + }, + ], + }, + frame: { + ...mockFrame(), + activeData: generateActiveData([ + { + id: 'a', + rows: Array(3).fill({ + b: faker.random.number(), + }), + }, + ]), + datasourceLayers: { a: datasource.publicAPIMock }, + }, + }; + }); + + it('does include palette for accessor config if the values are numeric and palette exists', () => { + expect(datatableVisualization.getConfiguration(params).groups[2].accessors).toEqual([ + { columnId: 'b', palette: ['blue'], triggerIconType: 'colorBy' }, + ]); + }); + it('does not include palette for accessor config if the values are not numeric and palette exists', () => { + params.frame.activeData = generateActiveData([ + { + id: 'a', + rows: Array(3).fill({ + b: faker.random.word(), + }), + }, + ]); + expect(datatableVisualization.getConfiguration(params).groups[2].accessors).toEqual([ + { columnId: 'b' }, + ]); + }); + it('does not include palette for accessor config if the values are numeric but palette exists', () => { + params.state.columns[0].palette = undefined; + expect(datatableVisualization.getConfiguration(params).groups[2].accessors).toEqual([ + { columnId: 'b' }, + ]); + }); + }); + it('should compute the groups correctly for text based languages', () => { const datasource = createMockDatasource('textBased', { isTextBasedLanguage: jest.fn(() => true), diff --git a/x-pack/plugins/lens/public/visualizations/datatable/visualization.tsx b/x-pack/plugins/lens/public/visualizations/datatable/visualization.tsx index fe3e331d03714..05e05279567e5 100644 --- a/x-pack/plugins/lens/public/visualizations/datatable/visualization.tsx +++ b/x-pack/plugins/lens/public/visualizations/datatable/visualization.tsx @@ -14,6 +14,7 @@ import { VIS_EVENT_TO_TRIGGER } from '@kbn/visualizations-plugin/public'; import { IconChartDatatable } from '@kbn/chart-icons'; import { LayerTypes } from '@kbn/expression-xy-plugin/public'; import { buildExpression, buildExpressionFunction } from '@kbn/expressions-plugin/common'; +import { isNumericFieldForDatatable } from '../../../common/expressions/datatable/utils'; import type { FormBasedPersistedState } from '../../datasources/form_based/types'; import type { SuggestionRequest, @@ -315,16 +316,20 @@ export const getDatatableVisualization = ({ .map((accessor) => { const columnConfig = columnMap[accessor]; const stops = columnConfig?.palette?.params?.stops; + const isNumeric = Boolean( + accessor && isNumericFieldForDatatable(frame.activeData?.[state.layerId], accessor) + ); const hasColoring = Boolean(columnConfig?.colorMode !== 'none' && stops); return { columnId: accessor, triggerIconType: columnConfig?.hidden ? 'invisible' - : hasColoring + : hasColoring && isNumeric ? 'colorBy' : undefined, - palette: hasColoring && stops ? stops.map(({ color }) => color) : undefined, + palette: + hasColoring && isNumeric && stops ? stops.map(({ color }) => color) : undefined, }; }), supportsMoreColumns: true, diff --git a/x-pack/plugins/lens/tsconfig.json b/x-pack/plugins/lens/tsconfig.json index 779aa6886b05e..73883bc849e27 100644 --- a/x-pack/plugins/lens/tsconfig.json +++ b/x-pack/plugins/lens/tsconfig.json @@ -109,7 +109,8 @@ "@kbn/text-based-editor", "@kbn/managed-content-badge", "@kbn/sort-predicates", - "@kbn/presentation-publishing" + "@kbn/presentation-publishing", + "@kbn/saved-objects-finder-plugin" ], "exclude": ["target/**/*"] } diff --git a/x-pack/plugins/maps/public/classes/sources/esql_source/convert_to_geojson.ts b/x-pack/plugins/maps/public/classes/sources/esql_source/convert_to_geojson.ts index 3940cd9102c54..a446f976b5677 100644 --- a/x-pack/plugins/maps/public/classes/sources/esql_source/convert_to_geojson.ts +++ b/x-pack/plugins/maps/public/classes/sources/esql_source/convert_to_geojson.ts @@ -9,14 +9,19 @@ import { parse } from 'wellknown'; import { Feature, FeatureCollection, GeoJsonProperties } from 'geojson'; import type { ESQLSearchReponse } from '@kbn/es-types'; -import { getGeometryColumnIndex } from './esql_utils'; +import { EMPTY_FEATURE_COLLECTION } from '../../../../common/constants'; +import { isGeometryColumn } from './esql_utils'; export function convertToGeoJson(resp: ESQLSearchReponse): FeatureCollection { - const geometryIndex = getGeometryColumnIndex(resp.columns); + const geometryColumnIndex = resp.columns.findIndex(isGeometryColumn); + if (geometryColumnIndex === -1) { + return EMPTY_FEATURE_COLLECTION; + } + const features: Feature[] = []; for (let i = 0; i < resp.values.length; i++) { const hit = resp.values[i]; - const wkt = hit[geometryIndex]; + const wkt = hit[geometryColumnIndex]; if (!wkt) { continue; } @@ -25,7 +30,7 @@ export function convertToGeoJson(resp: ESQLSearchReponse): FeatureCollection { const properties: GeoJsonProperties = {}; for (let j = 0; j < hit.length; j++) { // do not store geometry in properties - if (j === geometryIndex) { + if (j === geometryColumnIndex) { continue; } properties[resp.columns[j].name] = hit[j] as unknown; diff --git a/x-pack/plugins/maps/public/classes/sources/esql_source/esql_source.tsx b/x-pack/plugins/maps/public/classes/sources/esql_source/esql_source.tsx index be5cdea7c7fbf..d438a714beb40 100644 --- a/x-pack/plugins/maps/public/classes/sources/esql_source/esql_source.tsx +++ b/x-pack/plugins/maps/public/classes/sources/esql_source/esql_source.tsx @@ -13,8 +13,8 @@ import { v4 as uuidv4 } from 'uuid'; import { Adapters } from '@kbn/inspector-plugin/common/adapters'; import { getIndexPatternFromESQLQuery, getLimitFromESQLQuery } from '@kbn/esql-utils'; import { buildEsQuery } from '@kbn/es-query'; -import type { BoolQuery, Filter, Query } from '@kbn/es-query'; -import type { ESQLSearchReponse } from '@kbn/es-types'; +import type { Filter, Query } from '@kbn/es-query'; +import type { ESQLSearchParams, ESQLSearchReponse } from '@kbn/es-types'; import { getEsQueryConfig } from '@kbn/data-service/src/es_query'; import { getTime } from '@kbn/data-plugin/public'; import { FIELD_ORIGIN, SOURCE_TYPES, VECTOR_SHAPE_TYPE } from '../../../../common/constants'; @@ -32,12 +32,7 @@ import type { IField } from '../../fields/field'; import { InlineField } from '../../fields/inline_field'; import { getData, getUiSettings } from '../../../kibana_services'; import { convertToGeoJson } from './convert_to_geojson'; -import { - getFieldType, - getGeometryColumnIndex, - ESQL_GEO_POINT_TYPE, - ESQL_GEO_SHAPE_TYPE, -} from './esql_utils'; +import { getFieldType, isGeometryColumn, ESQL_GEO_SHAPE_TYPE } from './esql_utils'; import { UpdateSourceEditor } from './update_source_editor'; type ESQLSourceSyncMeta = Pick< @@ -128,16 +123,8 @@ export class ESQLSource extends AbstractVectorSource implements IVectorSource { } async getSupportedShapeTypes() { - let geomtryColumnType = ESQL_GEO_POINT_TYPE; - try { - const index = getGeometryColumnIndex(this._descriptor.columns); - if (index > -1) { - geomtryColumnType = this._descriptor.columns[index].type; - } - } catch (error) { - // errors for missing geometry columns surfaced in UI by data loading - } - return geomtryColumnType === ESQL_GEO_SHAPE_TYPE + const index = this._descriptor.columns.findIndex(isGeometryColumn); + return index !== -1 && this._descriptor.columns[index].type === ESQL_GEO_SHAPE_TYPE ? [VECTOR_SHAPE_TYPE.POINT, VECTOR_SHAPE_TYPE.LINE, VECTOR_SHAPE_TYPE.POLYGON] : [VECTOR_SHAPE_TYPE.POINT]; } @@ -154,8 +141,9 @@ export class ESQLSource extends AbstractVectorSource implements IVectorSource { inspectorAdapters: Adapters ): Promise { const limit = getLimitFromESQLQuery(this._descriptor.esql); - const params: { query: string; filter?: { bool: BoolQuery } } = { + const params: ESQLSearchParams = { query: this._descriptor.esql, + dropNullColumns: true, }; const query: Query[] = []; diff --git a/x-pack/plugins/maps/public/classes/sources/esql_source/esql_utils.ts b/x-pack/plugins/maps/public/classes/sources/esql_source/esql_utils.ts index 7a4b5048c820a..c247170874ba3 100644 --- a/x-pack/plugins/maps/public/classes/sources/esql_source/esql_utils.ts +++ b/x-pack/plugins/maps/public/classes/sources/esql_source/esql_utils.ts @@ -8,7 +8,7 @@ import { i18n } from '@kbn/i18n'; import { lastValueFrom } from 'rxjs'; import { getIndexPatternFromESQLQuery } from '@kbn/esql-utils'; -import type { ESQLColumn } from '@kbn/es-types'; +import type { ESQLColumn, ESQLSearchReponse } from '@kbn/es-types'; import { ES_GEO_FIELD_TYPE } from '../../../../common/constants'; import { getData, getIndexPatternService } from '../../../kibana_services'; @@ -22,13 +22,6 @@ export const ESQL_GEO_POINT_TYPE = 'geo_point'; // ESQL_GEO_SHAPE_TYPE is a column type from an ESQL response export const ESQL_GEO_SHAPE_TYPE = 'geo_shape'; -const NO_GEOMETRY_COLUMN_ERROR_MSG = i18n.translate( - 'xpack.maps.source.esql.noGeometryColumnErrorMsg', - { - defaultMessage: 'Elasticsearch ES|QL query does not have a geometry column.', - } -); - export function isGeometryColumn(column: ESQLColumn) { return [ESQL_GEO_POINT_TYPE, ESQL_GEO_SHAPE_TYPE].includes(column.type); } @@ -36,7 +29,11 @@ export function isGeometryColumn(column: ESQLColumn) { export function verifyGeometryColumn(columns: ESQLColumn[]) { const geometryColumns = columns.filter(isGeometryColumn); if (geometryColumns.length === 0) { - throw new Error(NO_GEOMETRY_COLUMN_ERROR_MSG); + throw new Error( + i18n.translate('xpack.maps.source.esql.noGeometryColumnErrorMsg', { + defaultMessage: 'Elasticsearch ES|QL query does not have a geometry column.', + }) + ); } if (geometryColumns.length > 1) { @@ -51,14 +48,6 @@ export function verifyGeometryColumn(columns: ESQLColumn[]) { } } -export function getGeometryColumnIndex(columns: ESQLColumn[]) { - const index = columns.findIndex(isGeometryColumn); - if (index === -1) { - throw new Error(NO_GEOMETRY_COLUMN_ERROR_MSG); - } - return index; -} - export async function getESQLMeta(esql: string) { const fields = await getFields(esql); return { @@ -104,7 +93,8 @@ async function getColumns(esql: string) { ) ); - return (resp.rawResponse as unknown as { columns: ESQLColumn[] }).columns; + const searchResponse = resp.rawResponse as unknown as ESQLSearchReponse; + return searchResponse.all_columns ? searchResponse.all_columns : searchResponse.columns; } catch (error) { throw new Error( i18n.translate('xpack.maps.source.esql.getColumnsErrorMsg', { diff --git a/x-pack/plugins/maps/public/map_attribute_service.ts b/x-pack/plugins/maps/public/map_attribute_service.ts index 6cc226b72dc4b..5f07f3954eecd 100644 --- a/x-pack/plugins/maps/public/map_attribute_service.ts +++ b/x-pack/plugins/maps/public/map_attribute_service.ts @@ -9,6 +9,7 @@ import { SavedObjectReference } from '@kbn/core/types'; import type { ResolvedSimpleSavedObject } from '@kbn/core/public'; import { AttributeService } from '@kbn/embeddable-plugin/public'; import type { OnSaveProps } from '@kbn/saved-objects-plugin/public'; +import { SavedObjectCommon } from '@kbn/saved-objects-finder-plugin/common'; import type { MapAttributes } from '../common/content_management'; import { MAP_EMBEDDABLE_NAME, MAP_SAVED_OBJECT_TYPE } from '../common/constants'; import { getCoreOverlays, getEmbeddableService } from './kibana_services'; @@ -39,6 +40,17 @@ export type MapAttributeService = AttributeService< MapUnwrapMetaInfo >; +export const savedObjectToEmbeddableAttributes = ( + savedObject: SavedObjectCommon +) => { + const { attributes } = injectReferences(savedObject); + + return { + ...attributes, + references: savedObject.references, + }; +}; + let mapAttributeService: MapAttributeService | null = null; export function getMapAttributeService(): MapAttributeService { @@ -90,12 +102,8 @@ export function getMapAttributeService(): MapAttributeService { throw savedObject.error; } - const { attributes } = injectReferences(savedObject); return { - attributes: { - ...attributes, - references: savedObject.references, - }, + attributes: savedObjectToEmbeddableAttributes(savedObject), metaInfo: { sharingSavedObjectProps: { aliasTargetId, diff --git a/x-pack/plugins/maps/public/plugin.ts b/x-pack/plugins/maps/public/plugin.ts index 4e654f9e5c641..351f49fcfd077 100644 --- a/x-pack/plugins/maps/public/plugin.ts +++ b/x-pack/plugins/maps/public/plugin.ts @@ -25,7 +25,11 @@ import type { HomePublicPluginSetup } from '@kbn/home-plugin/public'; import type { VisualizationsSetup, VisualizationsStart } from '@kbn/visualizations-plugin/public'; import type { Plugin as ExpressionsPublicPlugin } from '@kbn/expressions-plugin/public'; import { VISUALIZE_GEO_FIELD_TRIGGER } from '@kbn/ui-actions-plugin/public'; -import type { EmbeddableSetup, EmbeddableStart } from '@kbn/embeddable-plugin/public'; +import { + EmbeddableSetup, + EmbeddableStart, + registerSavedObjectToPanelMethod, +} from '@kbn/embeddable-plugin/public'; import { CONTEXT_MENU_TRIGGER } from '@kbn/embeddable-plugin/public'; import type { SharePluginSetup, SharePluginStart } from '@kbn/share-plugin/public'; import type { MapsEmsPluginPublicStart } from '@kbn/maps-ems-plugin/public'; @@ -82,7 +86,9 @@ import { MapInspectorView } from './inspector/map_adapter/map_inspector_view'; import { VectorTileInspectorView } from './inspector/vector_tile_adapter/vector_tile_inspector_view'; import { setupLensChoroplethChart } from './lens'; -import { CONTENT_ID, LATEST_VERSION } from '../common/content_management'; +import { CONTENT_ID, LATEST_VERSION, MapAttributes } from '../common/content_management'; +import { savedObjectToEmbeddableAttributes } from './map_attribute_service'; +import { MapByValueInput } from './embeddable'; export interface MapsPluginSetupDependencies { cloud?: CloudSetup; @@ -214,6 +220,16 @@ export class MapsPlugin name: APP_NAME, }); + registerSavedObjectToPanelMethod(CONTENT_ID, (savedObject) => { + if (!savedObject.managed) { + return { savedObjectId: savedObject.id }; + } + + return { + attributes: savedObjectToEmbeddableAttributes(savedObject), + }; + }); + setupLensChoroplethChart(core, plugins.expressions, plugins.lens); // register wrapper around legacy tile_map and region_map visualizations diff --git a/x-pack/plugins/maps/tsconfig.json b/x-pack/plugins/maps/tsconfig.json index 8dcb5e3db7a26..27cdf35bfb949 100644 --- a/x-pack/plugins/maps/tsconfig.json +++ b/x-pack/plugins/maps/tsconfig.json @@ -85,6 +85,7 @@ "@kbn/code-editor", "@kbn/managed-content-badge", "@kbn/presentation-publishing", + "@kbn/saved-objects-finder-plugin", "@kbn/esql-utils", ], "exclude": [ diff --git a/x-pack/plugins/observability/public/components/alerts_table/common/render_cell_value.tsx b/x-pack/plugins/observability/public/components/alerts_table/common/render_cell_value.tsx index 3bde70900d334..d68b11115396e 100644 --- a/x-pack/plugins/observability/public/components/alerts_table/common/render_cell_value.tsx +++ b/x-pack/plugins/observability/public/components/alerts_table/common/render_cell_value.tsx @@ -100,11 +100,12 @@ export const getRenderCellValue = ({ case ALERT_SEVERITY: return ; case ALERT_EVALUATION_VALUE: - const values = getMappedNonEcsValue({ + const valuesField = getMappedNonEcsValue({ data, fieldName: ALERT_EVALUATION_VALUES, }); - return values ? values : value; + const values = getRenderValue(valuesField); + return valuesField ? values : value; case ALERT_REASON: const dataFieldEs = data.reduce((acc, d) => ({ ...acc, [d.field]: d.value }), {}); const alert = parseAlert(observabilityRuleTypeRegistry)(dataFieldEs); diff --git a/x-pack/plugins/observability/public/pages/slos/components/badges/slo_badges.tsx b/x-pack/plugins/observability/public/pages/slos/components/badges/slo_badges.tsx index 9ff1e3c14a2b2..d801bd848ce9b 100644 --- a/x-pack/plugins/observability/public/pages/slos/components/badges/slo_badges.tsx +++ b/x-pack/plugins/observability/public/pages/slos/components/badges/slo_badges.tsx @@ -10,6 +10,7 @@ import { EuiFlexGroup, EuiSkeletonRectangle } from '@elastic/eui'; import { SLOWithSummaryResponse } from '@kbn/slo-schema'; import { Rule } from '@kbn/triggers-actions-ui-plugin/public'; +import { SloTagsList } from '../common/slo_tags_list'; import { SloIndicatorTypeBadge } from './slo_indicator_type_badge'; import { SloStatusBadge } from '../../../../components/slo/slo_status_badge'; import { SloActiveAlertsBadge } from '../../../../components/slo/slo_status_badge/slo_active_alerts_badge'; @@ -41,11 +42,12 @@ export function SloBadges({ ) : ( <> + - + )} diff --git a/x-pack/plugins/observability/public/pages/slos/components/badges/slo_indicator_type_badge.tsx b/x-pack/plugins/observability/public/pages/slos/components/badges/slo_indicator_type_badge.tsx index 60fceb4481b91..bf33f22e25221 100644 --- a/x-pack/plugins/observability/public/pages/slos/components/badges/slo_indicator_type_badge.tsx +++ b/x-pack/plugins/observability/public/pages/slos/components/badges/slo_indicator_type_badge.tsx @@ -15,6 +15,7 @@ import { } from '@kbn/slo-schema'; import { euiLightVars } from '@kbn/ui-theme'; import React from 'react'; +import { useUrlSearchState } from '../../hooks/use_url_search_state'; import { useKibana } from '../../../../utils/kibana_react'; import { convertSliApmParamsToApmAppDeeplinkUrl } from '../../../../utils/slo/convert_sli_apm_params_to_apm_app_deeplink_url'; import { toIndicatorTypeLabel } from '../../../../utils/slo/labels'; @@ -30,6 +31,8 @@ export function SloIndicatorTypeBadge({ slo, color }: Props) { http: { basePath }, } = useKibana().services; + const { onStateChange } = useUrlSearchState(); + const handleNavigateToApm = () => { const url = convertSliApmParamsToApmAppDeeplinkUrl(slo); if (url) { @@ -40,7 +43,21 @@ export function SloIndicatorTypeBadge({ slo, color }: Props) { return ( <> - + { + onStateChange({ + kqlQuery: `slo.indicator.type: ${slo.indicator.type}`, + }); + }} + onClickAriaLabel={i18n.translate( + 'xpack.observability.slo.indicatorTypeBadge.clickToFilter', + { + defaultMessage: 'Click to filter by {indicatorType} SLOs', + values: { indicatorType: toIndicatorTypeLabel(slo.indicator.type) }, + } + )} + > {toIndicatorTypeLabel(slo.indicator.type)} diff --git a/x-pack/plugins/observability/public/pages/slos/components/card_view/slo_card_item_badges.tsx b/x-pack/plugins/observability/public/pages/slos/components/card_view/slo_card_item_badges.tsx index 1fec95eb98f73..66effe39c48bc 100644 --- a/x-pack/plugins/observability/public/pages/slos/components/card_view/slo_card_item_badges.tsx +++ b/x-pack/plugins/observability/public/pages/slos/components/card_view/slo_card_item_badges.tsx @@ -6,10 +6,12 @@ */ import { SLOWithSummaryResponse } from '@kbn/slo-schema'; -import React from 'react'; +import React, { useCallback } from 'react'; import { Rule } from '@kbn/triggers-actions-ui-plugin/public'; import styled from 'styled-components'; import { EuiFlexGroup } from '@elastic/eui'; +import { SloTagsList } from '../common/slo_tags_list'; +import { useUrlSearchState } from '../../hooks/use_url_search_state'; import { LoadingBadges } from '../badges/slo_badges'; import { SloIndicatorTypeBadge } from '../badges/slo_indicator_type_badge'; import { SloTimeWindowBadge } from '../badges/slo_time_window_badge'; @@ -31,6 +33,16 @@ const Container = styled.div` `; export function SloCardItemBadges({ slo, activeAlerts, rules, handleCreateRule }: Props) { + const { onStateChange } = useUrlSearchState(); + + const onTagClick = useCallback( + (tag: string) => { + onStateChange({ + kqlQuery: `slo.tags: "${tag}"`, + }); + }, + [onStateChange] + ); return ( @@ -42,6 +54,13 @@ export function SloCardItemBadges({ slo, activeAlerts, rules, handleCreateRule } + )} diff --git a/x-pack/plugins/observability/public/pages/slos/components/card_view/slos_card_view.tsx b/x-pack/plugins/observability/public/pages/slos/components/card_view/slos_card_view.tsx index 0829fce91a937..8397a8ce99472 100644 --- a/x-pack/plugins/observability/public/pages/slos/components/card_view/slos_card_view.tsx +++ b/x-pack/plugins/observability/public/pages/slos/components/card_view/slos_card_view.tsx @@ -29,14 +29,14 @@ export interface Props { const useColumns = () => { const isMobile = useIsWithinBreakpoints(['xs', 's']); const isMedium = useIsWithinBreakpoints(['m']); - const isLarge = useIsWithinBreakpoints(['l', 'xl']); + const isXLarge = useIsWithinBreakpoints(['xl']); switch (true) { case isMobile: return 1; case isMedium: return 3; - case isLarge: + case isXLarge: return 4; default: return 3; diff --git a/x-pack/plugins/observability/public/pages/slos/components/common/slo_tags_list.tsx b/x-pack/plugins/observability/public/pages/slos/components/common/slo_tags_list.tsx new file mode 100644 index 0000000000000..66a415a8946ad --- /dev/null +++ b/x-pack/plugins/observability/public/pages/slos/components/common/slo_tags_list.tsx @@ -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 React, { useCallback } from 'react'; +import { TagsList } from '@kbn/observability-shared-plugin/public'; +import type { TagsListProps } from '@kbn/observability-shared-plugin/public'; +import { useUrlSearchState } from '../../hooks/use_url_search_state'; + +export function SloTagsList(props: TagsListProps) { + const { onStateChange } = useUrlSearchState(); + + const onTagClick = useCallback( + (tag: string) => { + onStateChange({ + kqlQuery: `slo.tags: "${tag}"`, + }); + }, + [onStateChange] + ); + + return ; +} diff --git a/x-pack/plugins/observability/public/pages/slos/components/compact_view/slo_list_compact_view.tsx b/x-pack/plugins/observability/public/pages/slos/components/compact_view/slo_list_compact_view.tsx index 177be6f062923..3a07bc3ac08b6 100644 --- a/x-pack/plugins/observability/public/pages/slos/components/compact_view/slo_list_compact_view.tsx +++ b/x-pack/plugins/observability/public/pages/slos/components/compact_view/slo_list_compact_view.tsx @@ -19,6 +19,7 @@ import { i18n } from '@kbn/i18n'; import { ALL_VALUE, SLOWithSummaryResponse } from '@kbn/slo-schema'; import { useQueryClient } from '@tanstack/react-query'; import React, { useState } from 'react'; +import { SloTagsList } from '../common/slo_tags_list'; import { useCloneSlo } from '../../../../hooks/slo/use_clone_slo'; import { rulesLocatorID, sloFeatureId } from '../../../../../common'; import { SLO_BURN_RATE_RULE_TYPE_ID } from '../../../../../common/constants'; @@ -233,7 +234,7 @@ export function SloListCompactView({ sloList, loading, error }: Props) { { field: 'name', name: 'Name', - width: '20%', + width: '15%', truncateText: { lines: 2 }, 'data-test-subj': 'sloItem', render: (_, slo: SLOWithSummaryResponse) => { @@ -258,6 +259,11 @@ export function SloListCompactView({ sloList, loading, error }: Props) { ); }, }, + { + field: 'tags', + name: 'Tags', + render: (tags: string[]) => , + }, { field: 'instance', name: 'Instance', @@ -379,6 +385,7 @@ export function SloListCompactView({ sloList, loading, error }: Props) { columns={columns} loading={loading} noItemsMessage={loading ? LOADING_SLOS_LABEL : NO_SLOS_FOUND} + tableLayout="auto" /> {sloToAddRule ? ( { - storeState({ page: pageNumber }); + onStateChange({ page: pageNumber }); }; if (isLoading) { @@ -84,7 +84,7 @@ export function GroupView({ kqlQuery, sloView, sort, direction, groupBy }: Props itemsPerPage={perPage} itemsPerPageOptions={[10, 25, 50, 100]} onChangeItemsPerPage={(newPerPage) => { - storeState({ perPage: newPerPage }); + onStateChange({ perPage: newPerPage }); }} /> diff --git a/x-pack/plugins/observability/public/pages/slos/components/slo_list.tsx b/x-pack/plugins/observability/public/pages/slos/components/slo_list.tsx index 2f2d466699c1f..19617273659b1 100644 --- a/x-pack/plugins/observability/public/pages/slos/components/slo_list.tsx +++ b/x-pack/plugins/observability/public/pages/slos/components/slo_list.tsx @@ -15,7 +15,7 @@ import { ToggleSLOView } from './toggle_slo_view'; import { GroupView } from './grouped_slos/group_view'; export function SloList() { - const { state, store: storeState } = useUrlSearchState(); + const { state, onStateChange: storeState } = useUrlSearchState(); const { view, page, perPage, kqlQuery, filters, tagsFilter, statusFilter, groupBy } = state; const { diff --git a/x-pack/plugins/observability/public/pages/slos/components/slo_list_search_bar.tsx b/x-pack/plugins/observability/public/pages/slos/components/slo_list_search_bar.tsx index 74c47aec2924f..42ece861e3542 100644 --- a/x-pack/plugins/observability/public/pages/slos/components/slo_list_search_bar.tsx +++ b/x-pack/plugins/observability/public/pages/slos/components/slo_list_search_bar.tsx @@ -30,7 +30,7 @@ export type Item = EuiSelectableOption & { export type ViewMode = 'default' | 'compact'; export function SloListSearchBar() { - const { state, store: storeState } = useUrlSearchState(); + const { state, onStateChange: onChange } = useUrlSearchState(); const { kqlQuery, filters } = state; const containerRef = React.useRef(null); @@ -47,7 +47,7 @@ export function SloListSearchBar() { }); const onStateChange = (newState: Partial) => { - storeState({ page: 0, ...newState }); + onChange({ page: 0, ...newState }); }; const { diff --git a/x-pack/plugins/observability/public/pages/slos/hooks/use_url_search_state.ts b/x-pack/plugins/observability/public/pages/slos/hooks/use_url_search_state.ts index 6bf82aa8db2c8..12154ffd49dd0 100644 --- a/x-pack/plugins/observability/public/pages/slos/hooks/use_url_search_state.ts +++ b/x-pack/plugins/observability/public/pages/slos/hooks/use_url_search_state.ts @@ -46,7 +46,7 @@ export const DEFAULT_STATE = { export function useUrlSearchState(): { state: SearchState; - store: (state: Partial) => Promise; + onStateChange: (state: Partial) => Promise; } { const [state, setState] = useState(DEFAULT_STATE); const history = useHistory(); @@ -77,7 +77,7 @@ export function useUrlSearchState(): { }, [urlStateStorage]); return { state: deepmerge(DEFAULT_STATE, state), - store: (newState: Partial) => + onStateChange: (newState: Partial) => urlStateStorage.current?.set( SLO_LIST_SEARCH_URL_STORAGE_KEY, { ...state, ...newState }, diff --git a/x-pack/plugins/observability/public/pages/slos/slos.test.tsx b/x-pack/plugins/observability/public/pages/slos/slos.test.tsx index 6605eab36b5d7..5b7576fc49a18 100644 --- a/x-pack/plugins/observability/public/pages/slos/slos.test.tsx +++ b/x-pack/plugins/observability/public/pages/slos/slos.test.tsx @@ -21,6 +21,7 @@ import { useDeleteSlo } from '../../hooks/slo/use_delete_slo'; import { useFetchHistoricalSummary } from '../../hooks/slo/use_fetch_historical_summary'; import { useFetchSloList } from '../../hooks/slo/use_fetch_slo_list'; import { useLicense } from '../../hooks/use_license'; +import { TagsList } from '@kbn/observability-shared-plugin/public'; import { useKibana } from '../../utils/kibana_react'; import { render } from '../../utils/test_helper'; import { SlosPage } from './slos'; @@ -46,6 +47,8 @@ const useCreateSloMock = useCreateSlo as jest.Mock; const useDeleteSloMock = useDeleteSlo as jest.Mock; const useFetchHistoricalSummaryMock = useFetchHistoricalSummary as jest.Mock; const useCapabilitiesMock = useCapabilities as jest.Mock; +const TagsListMock = TagsList as jest.Mock; +TagsListMock.mockReturnValue(
Tags list
); const mockCreateSlo = jest.fn(); const mockDeleteSlo = jest.fn(); diff --git a/x-pack/plugins/observability/server/lib/rules/custom_threshold/custom_threshold_executor.test.ts b/x-pack/plugins/observability/server/lib/rules/custom_threshold/custom_threshold_executor.test.ts index 9e3eab1e8a054..51fc7e7227cdf 100644 --- a/x-pack/plugins/observability/server/lib/rules/custom_threshold/custom_threshold_executor.test.ts +++ b/x-pack/plugins/observability/server/lib/rules/custom_threshold/custom_threshold_executor.test.ts @@ -75,11 +75,13 @@ const mockOptions = { previousStartedAt: null, params: { searchConfiguration: { + index: {}, query: { query: mockQuery, language: 'kuery', }, }, + alertOnNoData: true, }, state: { wrapped: initialRuleState, @@ -573,6 +575,7 @@ describe('The custom threshold alert type', () => { }, ], searchConfiguration: { + index: {}, query: { query: filterQuery, language: 'kuery', diff --git a/x-pack/plugins/observability/server/lib/rules/custom_threshold/custom_threshold_executor.ts b/x-pack/plugins/observability/server/lib/rules/custom_threshold/custom_threshold_executor.ts index 39dbade62ce62..b59c3f532daea 100644 --- a/x-pack/plugins/observability/server/lib/rules/custom_threshold/custom_threshold_executor.ts +++ b/x-pack/plugins/observability/server/lib/rules/custom_threshold/custom_threshold_executor.ts @@ -10,6 +10,7 @@ import { LogsExplorerLocatorParams } from '@kbn/deeplinks-observability'; import { ALERT_ACTION_GROUP, ALERT_EVALUATION_VALUES, + ALERT_EVALUATION_THRESHOLD, ALERT_REASON, ALERT_GROUP, } from '@kbn/rule-data-utils'; @@ -17,13 +18,14 @@ import { LocatorPublic } from '@kbn/share-plugin/common'; import { RecoveredActionGroup } from '@kbn/alerting-plugin/common'; import { IBasePath, Logger } from '@kbn/core/server'; import { LifecycleRuleExecutor } from '@kbn/rule-registry-plugin/server'; +import { getEvaluationValues, getThreshold } from './lib/get_values'; import { AlertsLocatorParams, getAlertUrl } from '../../../../common'; import { getViewInAppUrl } from '../../../../common/custom_threshold_rule/get_view_in_app_url'; import { ObservabilityConfig } from '../../..'; import { FIRED_ACTIONS_ID, NO_DATA_ACTIONS_ID, UNGROUPED_FACTORY_KEY } from './constants'; import { AlertStates, - CustomThresholdRuleParams, + CustomThresholdRuleTypeParams, CustomThresholdRuleTypeState, CustomThresholdAlertState, CustomThresholdAlertContext, @@ -66,7 +68,7 @@ export const createCustomThresholdExecutor = ({ config: ObservabilityConfig; locators: CustomThresholdLocators; }): LifecycleRuleExecutor< - CustomThresholdRuleParams, + CustomThresholdRuleTypeParams, CustomThresholdRuleTypeState, CustomThresholdAlertState, CustomThresholdAlertContext, @@ -108,6 +110,7 @@ export const createCustomThresholdExecutor = ({ actionGroup, additionalContext, evaluationValues, + threshold, group ) => alertWithLifecycle({ @@ -116,6 +119,7 @@ export const createCustomThresholdExecutor = ({ [ALERT_REASON]: reason, [ALERT_ACTION_GROUP]: actionGroup, [ALERT_EVALUATION_VALUES]: evaluationValues, + [ALERT_EVALUATION_THRESHOLD]: threshold, [ALERT_GROUP]: group, ...flattenAdditionalContext(additionalContext), }, @@ -139,7 +143,7 @@ export const createCustomThresholdExecutor = ({ ? state.missingGroups : []; - const initialSearchSource = await searchSourceClient.create(params.searchConfiguration!); + const initialSearchSource = await searchSourceClient.create(params.searchConfiguration); const dataView = initialSearchSource.getField('index')!; const { id: dataViewId, timeFieldName } = dataView; const dataViewIndexPattern = dataView.getIndexPattern(); @@ -241,6 +245,8 @@ export const createCustomThresholdExecutor = ({ if (reason) { const timestamp = startedAt.toISOString(); + const threshold = getThreshold(criteria); + const evaluationValues = getEvaluationValues(alertResults, group); const actionGroupId: CustomThresholdActionGroup = nextState === AlertStates.OK ? RecoveredActionGroup.id @@ -258,19 +264,13 @@ export const createCustomThresholdExecutor = ({ new Set([...(additionalContext.tags ?? []), ...options.rule.tags]) ); - const evaluationValues = alertResults.reduce((acc: Array, result) => { - if (result[group]) { - acc.push(result[group].currentValue); - } - return acc; - }, []); - const alert = alertFactory( `${group}`, reason, actionGroupId, additionalContext, evaluationValues, + threshold, groupByKeysObjectMapping[group] ); const alertUuid = getAlertUuid(group); diff --git a/x-pack/plugins/observability/server/lib/rules/custom_threshold/lib/get_values.test.ts b/x-pack/plugins/observability/server/lib/rules/custom_threshold/lib/get_values.test.ts new file mode 100644 index 0000000000000..ddf2b7b1b1a45 --- /dev/null +++ b/x-pack/plugins/observability/server/lib/rules/custom_threshold/lib/get_values.test.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 { alertResultsMultipleConditions } from '../mocks/custom_threshold_alert_result'; +import { criteriaMultipleConditions } from '../mocks/custom_threshold_metric_params'; +import { getEvaluationValues, getThreshold } from './get_values'; + +describe('getValue helpers', () => { + describe('getThreshold', () => { + test('should return threshold for one condition', () => { + expect(getThreshold([criteriaMultipleConditions[1]])).toEqual([4, 5]); + }); + + test('should return threshold for multiple conditions', () => { + expect(getThreshold(criteriaMultipleConditions)).toEqual([1, 2, 4, 5]); + }); + }); + + describe('getEvaluationValues', () => { + test('should return evaluation values ', () => { + expect(getEvaluationValues(alertResultsMultipleConditions, '*')).toEqual([1.0, 3.0]); + }); + }); +}); diff --git a/x-pack/plugins/observability/server/lib/rules/custom_threshold/lib/get_values.ts b/x-pack/plugins/observability/server/lib/rules/custom_threshold/lib/get_values.ts new file mode 100644 index 0000000000000..13c0cabb9b590 --- /dev/null +++ b/x-pack/plugins/observability/server/lib/rules/custom_threshold/lib/get_values.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 { CustomMetricExpressionParams } from '../../../../../common/custom_threshold_rule/types'; +import { Evaluation } from './evaluate_rule'; + +export const getEvaluationValues = ( + alertResults: Array>, + group: string +): Array => { + return alertResults.reduce((acc: Array, result) => { + if (result[group]) { + acc.push(result[group].currentValue); + } + return acc; + }, []); +}; + +export const getThreshold = (criteria: CustomMetricExpressionParams[]): number[] => { + const threshold = criteria.map((c) => c.threshold); + + return threshold.reduce((acc: number[], t) => { + return acc.concat(...t); + }, []); +}; diff --git a/x-pack/plugins/observability/server/lib/rules/custom_threshold/mocks/custom_threshold_alert_result.ts b/x-pack/plugins/observability/server/lib/rules/custom_threshold/mocks/custom_threshold_alert_result.ts new file mode 100644 index 0000000000000..b8ab169b7a90d --- /dev/null +++ b/x-pack/plugins/observability/server/lib/rules/custom_threshold/mocks/custom_threshold_alert_result.ts @@ -0,0 +1,54 @@ +/* + * 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 { + Aggregators, + Comparator, + CustomMetricExpressionParams, +} from '../../../../../common/custom_threshold_rule/types'; +import { Evaluation } from '../lib/evaluate_rule'; + +const customThresholdNonCountCriterion: CustomMetricExpressionParams = { + comparator: Comparator.GT, + metrics: [ + { + aggType: Aggregators.AVERAGE, + name: 'A', + field: 'test.metric.1', + }, + ], + timeSize: 1, + timeUnit: 'm', + threshold: [0], +}; + +export const alertResultsMultipleConditions: Array> = [ + { + '*': { + ...customThresholdNonCountCriterion, + comparator: Comparator.GT, + threshold: [0.75], + currentValue: 1.0, + timestamp: new Date().toISOString(), + shouldFire: true, + isNoData: false, + bucketKey: { groupBy0: '*' }, + }, + }, + { + '*': { + ...customThresholdNonCountCriterion, + comparator: Comparator.GT, + threshold: [0.75], + currentValue: 3.0, + timestamp: new Date().toISOString(), + shouldFire: true, + isNoData: false, + bucketKey: { groupBy0: '*' }, + }, + }, +]; diff --git a/x-pack/plugins/observability/server/lib/rules/custom_threshold/mocks/custom_threshold_metric_params.ts b/x-pack/plugins/observability/server/lib/rules/custom_threshold/mocks/custom_threshold_metric_params.ts new file mode 100644 index 0000000000000..9d09c90859659 --- /dev/null +++ b/x-pack/plugins/observability/server/lib/rules/custom_threshold/mocks/custom_threshold_metric_params.ts @@ -0,0 +1,51 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { + Aggregators, + Comparator, + CustomMetricExpressionParams, +} from '../../../../../common/custom_threshold_rule/types'; + +export const criteriaMultipleConditions: CustomMetricExpressionParams[] = [ + { + metrics: [ + { + name: 'A', + aggType: Aggregators.AVERAGE, + field: 'system.is.a.good.puppy.dog', + }, + { + name: 'B', + aggType: Aggregators.AVERAGE, + field: 'system.is.a.bad.kitty', + }, + ], + timeUnit: 'm', + timeSize: 1, + threshold: [1, 2], + comparator: Comparator.GT, + }, + { + metrics: [ + { + name: 'A', + aggType: Aggregators.AVERAGE, + field: 'system.is.a.good.puppy.dog', + }, + { + name: 'B', + aggType: Aggregators.AVERAGE, + field: 'system.is.a.bad.kitty', + }, + ], + timeUnit: 'm', + timeSize: 1, + threshold: [4, 5], + comparator: Comparator.GT, + }, +]; diff --git a/x-pack/plugins/observability/server/lib/rules/custom_threshold/types.ts b/x-pack/plugins/observability/server/lib/rules/custom_threshold/types.ts index 97881f55d8d32..f688088d6b816 100644 --- a/x-pack/plugins/observability/server/lib/rules/custom_threshold/types.ts +++ b/x-pack/plugins/observability/server/lib/rules/custom_threshold/types.ts @@ -14,6 +14,8 @@ import { } from '@kbn/alerting-plugin/common'; import { Alert } from '@kbn/alerting-plugin/server'; import { TypeOf } from '@kbn/config-schema'; +import { DataViewSpec } from '@kbn/data-views-plugin/common'; +import { CustomMetricExpressionParams } from '../../../../common/custom_threshold_rule/types'; import { FIRED_ACTIONS_ID, NO_DATA_ACTIONS_ID, FIRED_ACTION, NO_DATA_ACTION } from './constants'; import { MissingGroupsRecord } from './lib/check_missing_group'; import { AdditionalContext } from './utils'; @@ -28,13 +30,22 @@ export enum AlertStates { // Executor types export type SearchConfigurationType = TypeOf; +export type RuleTypeParams = Record; + +export interface CustomThresholdRuleTypeParams extends RuleTypeParams { + criteria: CustomMetricExpressionParams[]; + // Index will be a data view spec after extracting references + searchConfiguration: Omit & { index: DataViewSpec }; + groupBy?: string | string[]; + alertOnNoData: boolean; + alertOnGroupDisappear?: boolean; +} -export type CustomThresholdRuleParams = Record; export type CustomThresholdRuleTypeState = RuleTypeState & { lastRunTimestamp?: number; missingGroups?: Array; groupBy?: string | string[]; - searchConfiguration?: SearchConfigurationType; + searchConfiguration?: Omit & { index: DataViewSpec }; }; export type CustomThresholdAlertState = AlertState; // no specific instance state used export type CustomThresholdAlertContext = AlertContext & { @@ -64,6 +75,7 @@ export type CustomThresholdAlertFactory = ( actionGroup: CustomThresholdActionGroup, additionalContext?: AdditionalContext | null, evaluationValues?: Array, + threshold?: Array, group?: Group ) => CustomThresholdAlert; diff --git a/x-pack/plugins/observability_ai_assistant/public/components/action_menu_item/action_menu_item.tsx b/x-pack/plugins/observability_ai_assistant/public/components/action_menu_item/action_menu_item.tsx index f11f2c8b56bc6..c357d9d22e8f6 100644 --- a/x-pack/plugins/observability_ai_assistant/public/components/action_menu_item/action_menu_item.tsx +++ b/x-pack/plugins/observability_ai_assistant/public/components/action_menu_item/action_menu_item.tsx @@ -4,7 +4,7 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import React, { useMemo, useState } from 'react'; +import React, { useEffect, useMemo, useState } from 'react'; import { EuiFlexGroup, EuiFlexItem, EuiHeaderLink, EuiLoadingSpinner } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { ObservabilityAIAssistantChatServiceProvider } from '../../context/observability_ai_assistant_chat_service_provider'; @@ -30,6 +30,20 @@ export function ObservabilityAIAssistantActionMenuItem() { const initialMessages = useMemo(() => [], []); + useEffect(() => { + const keyboardListener = (event: KeyboardEvent) => { + if (event.ctrlKey && event.code === 'Semicolon') { + setIsOpen(true); + } + }; + + window.addEventListener('keypress', keyboardListener); + + return () => { + window.removeEventListener('keypress', keyboardListener); + }; + }, []); + if (!service.isEnabled()) { return null; } diff --git a/x-pack/plugins/observability_ai_assistant/public/components/chat/chat_actions_menu.tsx b/x-pack/plugins/observability_ai_assistant/public/components/chat/chat_actions_menu.tsx index 4186f2c70c04d..f9635f5808072 100644 --- a/x-pack/plugins/observability_ai_assistant/public/components/chat/chat_actions_menu.tsx +++ b/x-pack/plugins/observability_ai_assistant/public/components/chat/chat_actions_menu.tsx @@ -7,7 +7,7 @@ import React, { useState } from 'react'; import { i18n } from '@kbn/i18n'; -import { EuiButtonIcon, EuiContextMenu, EuiPanel, EuiPopover } from '@elastic/eui'; +import { EuiButtonIcon, EuiContextMenu, EuiPanel, EuiPopover, EuiToolTip } from '@elastic/eui'; import { useKibana } from '../../hooks/use_kibana'; import { useObservabilityAIAssistantRouter } from '../../hooks/use_observability_ai_assistant_router'; import { getSettingsHref } from '../../utils/get_settings_href'; @@ -52,16 +52,24 @@ export function ChatActionsMenu({ + display="block" + > + + } panelPaddingSize="none" closePopover={toggleActionsMenu} diff --git a/x-pack/plugins/observability_ai_assistant/public/components/chat/chat_body.tsx b/x-pack/plugins/observability_ai_assistant/public/components/chat/chat_body.tsx index 373e35641ff8f..8ed26d71acc58 100644 --- a/x-pack/plugins/observability_ai_assistant/public/components/chat/chat_body.tsx +++ b/x-pack/plugins/observability_ai_assistant/public/components/chat/chat_body.tsx @@ -43,6 +43,7 @@ import { import { ASSISTANT_SETUP_TITLE, EMPTY_CONVERSATION_TITLE, UPGRADE_LICENSE_TITLE } from '../../i18n'; import type { StartedFrom } from '../../utils/get_timeline_items_from_conversation'; import { TELEMETRY, sendEvent } from '../../analytics'; +import { FlyoutWidthMode } from './chat_flyout'; const fullHeightClassName = css` height: 100%; @@ -93,27 +94,31 @@ const animClassName = css` const PADDING_AND_BORDER = 32; export function ChatBody({ - initialTitle, - initialMessages, - initialConversationId, + chatFlyoutSecondSlotHandler, connectors, - knowledgeBase, currentUser, + flyoutWidthMode, + initialConversationId, + initialMessages, + initialTitle, + knowledgeBase, showLinkToConversationsApp, startedFrom, - chatFlyoutSecondSlotHandler, onConversationUpdate, + onToggleFlyoutWidthMode, }: { + chatFlyoutSecondSlotHandler?: ChatFlyoutSecondSlotHandler; + connectors: UseGenAIConnectorsResult; + currentUser?: Pick; + flyoutWidthMode?: FlyoutWidthMode; initialTitle?: string; initialMessages?: Message[]; initialConversationId?: string; - connectors: UseGenAIConnectorsResult; knowledgeBase: UseKnowledgeBaseResult; - currentUser?: Pick; showLinkToConversationsApp: boolean; startedFrom?: StartedFrom; - chatFlyoutSecondSlotHandler?: ChatFlyoutSecondSlotHandler; onConversationUpdate: (conversation: { conversation: Conversation['conversation'] }) => void; + onToggleFlyoutWidthMode?: (flyoutWidthMode: FlyoutWidthMode) => void; }) { const license = useLicense(); const hasCorrectLicense = license?.hasAtLeast('enterprise'); @@ -455,6 +460,7 @@ export function ChatBody({ ? conversation.value.conversation.id : undefined } + flyoutWidthMode={flyoutWidthMode} licenseInvalid={!hasCorrectLicense && !initialConversationId} loading={isLoading} showLinkToConversationsApp={showLinkToConversationsApp} @@ -463,6 +469,7 @@ export function ChatBody({ onSaveTitle={(newTitle) => { saveTitle(newTitle); }} + onToggleFlyoutWidthMode={onToggleFlyoutWidthMode} /> diff --git a/x-pack/plugins/observability_ai_assistant/public/components/chat/chat_flyout.tsx b/x-pack/plugins/observability_ai_assistant/public/components/chat/chat_flyout.tsx index 83c1496befa4f..6823153397ca4 100644 --- a/x-pack/plugins/observability_ai_assistant/public/components/chat/chat_flyout.tsx +++ b/x-pack/plugins/observability_ai_assistant/public/components/chat/chat_flyout.tsx @@ -9,7 +9,15 @@ import ReactDOM from 'react-dom'; import { i18n } from '@kbn/i18n'; import { v4 } from 'uuid'; import { css } from '@emotion/css'; -import { EuiButtonIcon, EuiFlexGroup, EuiFlexItem, EuiFlyout, useEuiTheme } from '@elastic/eui'; +import { + EuiButtonIcon, + EuiFlexGroup, + EuiFlexItem, + EuiFlyout, + EuiPopover, + EuiToolTip, + useEuiTheme, +} from '@elastic/eui'; import { useForceUpdate } from '../../hooks/use_force_update'; import { useCurrentUser } from '../../hooks/use_current_user'; import { useGenAIConnectors } from '../../hooks/use_genai_connectors'; @@ -25,6 +33,8 @@ const CONVERSATIONS_SIDEBAR_WIDTH_COLLAPSED = 34; const SIDEBAR_WIDTH = 400; +export type FlyoutWidthMode = 'side' | 'full'; + export function ChatFlyout({ initialTitle, initialMessages, @@ -48,26 +58,36 @@ export function ChatFlyout({ const [conversationId, setConversationId] = useState(undefined); - const [expanded, setExpanded] = useState(false); + const [flyoutWidthMode, setFlyoutWidthMode] = useState('side'); + + const [conversationsExpanded, setConversationsExpanded] = useState(false); + const [secondSlotContainer, setSecondSlotContainer] = useState(null); const [isSecondSlotVisible, setIsSecondSlotVisible] = useState(false); const sidebarClass = css` - max-width: ${expanded ? CONVERSATIONS_SIDEBAR_WIDTH : CONVERSATIONS_SIDEBAR_WIDTH_COLLAPSED}px; - min-width: ${expanded ? CONVERSATIONS_SIDEBAR_WIDTH : CONVERSATIONS_SIDEBAR_WIDTH_COLLAPSED}px; + max-width: ${conversationsExpanded + ? CONVERSATIONS_SIDEBAR_WIDTH + : CONVERSATIONS_SIDEBAR_WIDTH_COLLAPSED}px; + min-width: ${conversationsExpanded + ? CONVERSATIONS_SIDEBAR_WIDTH + : CONVERSATIONS_SIDEBAR_WIDTH_COLLAPSED}px; border-right: solid 1px ${euiTheme.border.color}; `; - const expandButtonClassName = css` + const expandButtonContainerClassName = css` position: absolute; margin-top: 16px; - margin-left: ${expanded + margin-left: ${conversationsExpanded ? CONVERSATIONS_SIDEBAR_WIDTH - CONVERSATIONS_SIDEBAR_WIDTH_COLLAPSED : 5}px; - padding: ${euiTheme.size.s}; z-index: 1; `; + const expandButtonClassName = css` + color: ${euiTheme.colors.primary}; + `; + const containerClassName = css` height: 100%; `; @@ -79,10 +99,9 @@ export function ChatFlyout({ const newChatButtonClassName = css` position: absolute; bottom: 31px; - margin-left: ${expanded + margin-left: ${conversationsExpanded ? CONVERSATIONS_SIDEBAR_WIDTH - CONVERSATIONS_SIDEBAR_WIDTH_COLLAPSED : 5}px; - padding: ${euiTheme.size.s}; z-index: 1; `; @@ -110,12 +129,20 @@ export function ChatFlyout({ } }; + const handleToggleFlyoutWidthMode = (newFlyoutWidthMode: FlyoutWidthMode) => { + setFlyoutWidthMode(newFlyoutWidthMode); + }; + return isOpen ? ( { onClose(); @@ -127,19 +154,40 @@ export function ChatFlyout({ > - setExpanded(!expanded)} + + setConversationsExpanded(!conversationsExpanded)} + /> + + } /> - {expanded ? ( + {conversationsExpanded ? ( ) : ( - + + + } className={newChatButtonClassName} - data-test-subj="observabilityAiAssistantNewChatFlyoutButton" - iconType="plusInCircle" - onClick={handleClickNewChat} /> )} @@ -163,21 +224,23 @@ export function ChatFlyout({ { setConversationId(conversation.conversation.id); }} - chatFlyoutSecondSlotHandler={{ - container: secondSlotContainer, - setVisibility: setIsSecondSlotVisible, - }} - showLinkToConversationsApp + onToggleFlyoutWidthMode={handleToggleFlyoutWidthMode} /> @@ -204,10 +267,15 @@ export function ChatFlyout({ const getFlyoutWidth = ({ expanded, isSecondSlotVisible, + flyoutWidthMode, }: { expanded: boolean; isSecondSlotVisible: boolean; + flyoutWidthMode?: FlyoutWidthMode; }) => { + if (flyoutWidthMode === 'full') { + return '100%'; + } if (!expanded && !isSecondSlotVisible) { return '40vw'; } diff --git a/x-pack/plugins/observability_ai_assistant/public/components/chat/chat_header.tsx b/x-pack/plugins/observability_ai_assistant/public/components/chat/chat_header.tsx index cd4dc0d824590..de8a80928207b 100644 --- a/x-pack/plugins/observability_ai_assistant/public/components/chat/chat_header.tsx +++ b/x-pack/plugins/observability_ai_assistant/public/components/chat/chat_header.tsx @@ -6,11 +6,14 @@ */ import React, { useEffect, useState } from 'react'; import { + EuiButtonIcon, EuiFlexGroup, EuiFlexItem, EuiInlineEditTitle, EuiLoadingSpinner, EuiPanel, + EuiPopover, + EuiToolTip, useEuiTheme, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; @@ -18,6 +21,8 @@ import { css } from '@emotion/css'; import { AssistantAvatar } from '../assistant_avatar'; import { ChatActionsMenu } from './chat_actions_menu'; import type { UseGenAIConnectorsResult } from '../../hooks/use_genai_connectors'; +import type { FlyoutWidthMode } from './chat_flyout'; +import { useObservabilityAIAssistantRouter } from '../../hooks/use_observability_ai_assistant_router'; // needed to prevent InlineTextEdit component from expanding container const minWidthClassName = css` @@ -30,36 +35,54 @@ const chatHeaderClassName = css` `; export function ChatHeader({ - title, - loading, - licenseInvalid, connectors, conversationId, + flyoutWidthMode, + licenseInvalid, + loading, showLinkToConversationsApp, + title, onCopyConversation, onSaveTitle, + onToggleFlyoutWidthMode, }: { - title: string; - loading: boolean; - licenseInvalid: boolean; connectors: UseGenAIConnectorsResult; conversationId?: string; + flyoutWidthMode?: FlyoutWidthMode; + licenseInvalid: boolean; + loading: boolean; showLinkToConversationsApp: boolean; + title: string; onCopyConversation: () => void; onSaveTitle: (title: string) => void; + onToggleFlyoutWidthMode?: (newFlyoutWidthMode: FlyoutWidthMode) => void; }) { const theme = useEuiTheme(); + const router = useObservabilityAIAssistantRouter(); + const [newTitle, setNewTitle] = useState(title); useEffect(() => { setNewTitle(title); }, [title]); - const chatActionsMenuWrapper = css` - position: absolute; - right: 46px; - `; + const handleToggleFlyoutWidthMode = () => { + onToggleFlyoutWidthMode?.(flyoutWidthMode === 'side' ? 'full' : 'side'); + }; + + const handleNavigateToConversations = () => { + if (conversationId) { + router.navigateToConversationsApp('/conversations/{conversationId}', { + path: { + conversationId, + }, + query: {}, + }); + } else { + router.navigateToConversationsApp('/conversations/new', { path: {}, query: {} }); + } + }; return ( - - + + + + {flyoutWidthMode && onToggleFlyoutWidthMode ? ( + <> + + + + + } + /> + + + + + + + } + /> + + + ) : null} + + + + +
diff --git a/x-pack/plugins/observability_ai_assistant/public/components/insight/actions_menu.tsx b/x-pack/plugins/observability_ai_assistant/public/components/insight/actions_menu.tsx new file mode 100644 index 0000000000000..2cddc557ee1b6 --- /dev/null +++ b/x-pack/plugins/observability_ai_assistant/public/components/insight/actions_menu.tsx @@ -0,0 +1,96 @@ +/* + * 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, { useState } from 'react'; +import { EuiButtonIcon, EuiContextMenu, EuiPanel, EuiPopover } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { UseGenAIConnectorsResult } from '../../hooks/use_genai_connectors'; +import { ConnectorSelectorBase } from '../connector_selector/connector_selector_base'; + +export function ActionsMenu({ + connectors, + onEditPrompt, +}: { + connectors: UseGenAIConnectorsResult; + onEditPrompt: () => void; +}) { + const [isPopoverOpen, setPopover] = useState(false); + + const onButtonClick = () => { + setPopover(!isPopoverOpen); + }; + + const closePopover = () => { + setPopover(false); + }; + + const panels = [ + { + id: 0, + title: 'Actions', + items: [ + { + name: ( +
+ {i18n.translate('xpack.observabilityAiAssistant.insight.actions.connector', { + defaultMessage: 'Connector', + })}{' '} + + {connectors.connectors?.find(({ id }) => id === connectors.selectedConnector)?.name} + +
+ ), + icon: 'wrench', + panel: 1, + }, + { + name: i18n.translate('xpack.observabilityAiAssistant.insight.actions.editPrompt', { + defaultMessage: 'Edit prompt', + }), + icon: 'documentEdit', + onClick: () => { + onEditPrompt(); + closePopover(); + }, + }, + ], + }, + { + id: 1, + title: i18n.translate('xpack.observabilityAiAssistant.insight.actions.connector', { + defaultMessage: 'Connector', + }), + content: ( + + + + ), + }, + ]; + + const button = ( + + ); + + return ( + + + + ); +} diff --git a/x-pack/plugins/observability_ai_assistant/public/components/insight/insight.tsx b/x-pack/plugins/observability_ai_assistant/public/components/insight/insight.tsx index bfe01db7fb49f..2d57ff92cd5bc 100644 --- a/x-pack/plugins/observability_ai_assistant/public/components/insight/insight.tsx +++ b/x-pack/plugins/observability_ai_assistant/public/components/insight/insight.tsx @@ -4,8 +4,18 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; -import { last } from 'lodash'; +import { + EuiHorizontalRule, + EuiButtonEmpty, + EuiButtonIcon, + EuiFlexGroup, + EuiFlexItem, + EuiSpacer, + EuiText, + EuiTextArea, +} from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { cloneDeep, last } from 'lodash'; import React, { useEffect, useRef, useState } from 'react'; import { MessageRole, type Message } from '../../../common/types'; import { sendEvent, TELEMETRY } from '../../analytics'; @@ -21,12 +31,16 @@ import { RegenerateResponseButton } from '../buttons/regenerate_response_button' import { StartChatButton } from '../buttons/start_chat_button'; import { StopGeneratingButton } from '../buttons/stop_generating_button'; import { ChatFlyout } from '../chat/chat_flyout'; -import { ConnectorSelectorBase } from '../connector_selector/connector_selector_base'; import { FeedbackButtons } from '../feedback_buttons'; import { MessagePanel } from '../message_panel/message_panel'; import { MessageText } from '../message_panel/message_text'; import { MissingCredentialsCallout } from '../missing_credentials_callout'; import { InsightBase } from './insight_base'; +import { ActionsMenu } from './actions_menu'; + +function getLastMessageOfType(messages: Message[], role: MessageRole) { + return last(messages.filter((msg) => msg.message.role === role)); +} function ChatContent({ title: defaultTitle, @@ -48,9 +62,7 @@ function ChatContent({ persist: false, }); - const lastAssistantResponse = last( - messages.filter((message) => message.message.role === MessageRole.Assistant) - ); + const lastAssistantResponse = getLastMessageOfType(messages, MessageRole.Assistant); useEffect(() => { next(initialMessagesRef.current); @@ -122,6 +134,63 @@ function ChatContent({ ); } +function PromptEdit({ + initialPrompt, + onSend, + onCancel, +}: { + initialPrompt: string; + onSend: (updatedPrompt: string) => void; + onCancel: () => void; +}) { + const [prompt, setPrompt] = useState(initialPrompt); + + return ( + + + { + if (textarea) { + setTimeout(() => textarea.focus()); + } + }} + fullWidth={true} + defaultValue={prompt} + onChange={(ev) => { + setPrompt(ev.target.value); + }} + /> + + + + + + onSend(prompt)} + /> + + + ); +} + export interface InsightProps { messages: Message[]; title: string; @@ -129,7 +198,11 @@ export interface InsightProps { } export function Insight({ messages, title, dataTestSubj }: InsightProps) { + const [initialMessages, setInitialMessages] = useState(messages); + const [isEditingPrompt, setEditingPrompt] = useState(false); + const [isInsightOpen, setInsightOpen] = useState(false); const [hasOpened, setHasOpened] = useState(false); + const [isPromptUpdated, setIsPromptUpdated] = useState(false); const connectors = useGenAIConnectors(); @@ -142,18 +215,85 @@ export function Insight({ messages, title, dataTestSubj }: InsightProps) { [service] ); + const handleSend = (newPrompt: string) => { + const clonedMessages = cloneDeep(messages); + const userMessage = getLastMessageOfType(clonedMessages, MessageRole.User); + if (!userMessage) return false; + + userMessage.message.content = newPrompt; + setIsPromptUpdated(true); + setInitialMessages(clonedMessages); + setEditingPrompt(false); + return true; + }; + + const handleCancel = () => { + setEditingPrompt(false); + setInsightOpen(false); + setHasOpened(false); + }; + const { services: { http }, } = useKibana(); let children: React.ReactNode = null; - if (hasOpened && connectors.selectedConnector) { + if ( + connectors.selectedConnector && + ((!isInsightOpen && hasOpened) || (isInsightOpen && !isEditingPrompt)) + ) { children = ( - + {isPromptUpdated ? ( + <> + + + + {i18n.translate('xpack.observabilityAiAssistant.insightModifiedPrompt', { + defaultMessage: 'This insight has been modified.', + })} + + + + { + setIsPromptUpdated(false); + setHasOpened(false); + setInsightOpen(false); + setInitialMessages(messages); + }} + > + + {i18n.translate('xpack.observabilityAiAssistant.resetDefaultPrompt', { + defaultMessage: 'Reset to default', + })} + + + + + + + + + ) : null} + + + + ); + } else if (isEditingPrompt) { + children = ( + ); } else if (!connectors.loading && !connectors.connectors?.length) { @@ -166,11 +306,24 @@ export function Insight({ messages, title, dataTestSubj }: InsightProps) { { - setHasOpened((prevHasOpened) => prevHasOpened || isOpen); + setHasOpened((prevHasOpened) => { + if (isEditingPrompt) return false; + return prevHasOpened || isOpen; + }); + setInsightOpen(isOpen); }} - controls={} + controls={ + { + setEditingPrompt(true); + setInsightOpen(true); + }} + /> + } loading={connectors.loading || chatService.loading} dataTestSubj={dataTestSubj} + isOpen={isInsightOpen} > {chatService.value ? ( diff --git a/x-pack/plugins/observability_ai_assistant/public/components/insight/insight_base.stories.tsx b/x-pack/plugins/observability_ai_assistant/public/components/insight/insight_base.stories.tsx index f34bb0ce3034d..b0a09caa805ae 100644 --- a/x-pack/plugins/observability_ai_assistant/public/components/insight/insight_base.stories.tsx +++ b/x-pack/plugins/observability_ai_assistant/public/components/insight/insight_base.stories.tsx @@ -12,12 +12,12 @@ import { FindActionResult } from '@kbn/actions-plugin/server'; import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import { InsightBase as Component, InsightBaseProps } from './insight_base'; import { KibanaReactStorybookDecorator } from '../../utils/storybook_decorator'; -import { ConnectorSelectorBase } from '../connector_selector/connector_selector_base'; import { MessagePanel } from '../message_panel/message_panel'; import { MessageText } from '../message_panel/message_text'; import { FeedbackButtons } from '../feedback_buttons'; import { RegenerateResponseButton } from '../buttons/regenerate_response_button'; import { StartChatButton } from '../buttons/start_chat_button'; +import { ActionsMenu } from './actions_menu'; export default { component: Component, @@ -37,17 +37,18 @@ const defaultProps: InsightBaseProps = { ], loading: false, controls: ( - {}} - reloadConnectors={() => {}} + ] as FindActionResult[], + selectedConnector: 'gpt-4', + loading: false, + selectConnector: () => {}, + reloadConnectors: () => {}, + }} + onEditPrompt={() => {}} /> ), onToggle: () => {}, @@ -87,6 +88,7 @@ Morbi non faucibus massa. Aliquam sed augue in eros ornare luctus sit amet cursu } /> ), + isOpen: false, }; export const Insight = Template.bind({}); diff --git a/x-pack/plugins/observability_ai_assistant/public/components/insight/insight_base.tsx b/x-pack/plugins/observability_ai_assistant/public/components/insight/insight_base.tsx index 702ce9296c132..62310b2aed555 100644 --- a/x-pack/plugins/observability_ai_assistant/public/components/insight/insight_base.tsx +++ b/x-pack/plugins/observability_ai_assistant/public/components/insight/insight_base.tsx @@ -12,6 +12,7 @@ import { EuiContextMenuPanel, EuiFlexGroup, EuiFlexItem, + EuiIconTip, EuiPanel, EuiPopover, EuiSpacer, @@ -30,6 +31,7 @@ export interface InsightBaseProps { actions?: Array<{ id: string; label: string; icon?: string; handler: () => void }>; onToggle: (isOpen: boolean) => void; children: React.ReactNode; + isOpen: boolean; loading?: boolean; dataTestSubj?: string; } @@ -44,6 +46,7 @@ export function InsightBase({ actions, onToggle, loading, + isOpen, dataTestSubj = 'obsAiAssistantInsightButton', }: InsightBaseProps) { const { euiTheme } = useEuiTheme(); @@ -66,10 +69,19 @@ export function InsightBase({ - -
{title}
-
+ + +
{title}
+
+ +
{description} @@ -78,6 +90,7 @@ export function InsightBase({ } isLoading={loading} isDisabled={loading} + forceState={isOpen ? 'open' : 'closed'} extraAction={ actions?.length || controls ? ( diff --git a/x-pack/plugins/observability_ai_assistant/public/hooks/use_observability_ai_assistant_router.ts b/x-pack/plugins/observability_ai_assistant/public/hooks/use_observability_ai_assistant_router.ts index 160a4835d0ffb..afdae21c91a8d 100644 --- a/x-pack/plugins/observability_ai_assistant/public/hooks/use_observability_ai_assistant_router.ts +++ b/x-pack/plugins/observability_ai_assistant/public/hooks/use_observability_ai_assistant_router.ts @@ -21,13 +21,20 @@ interface StatefulObservabilityAIAssistantRouter extends ObservabilityAIAssistan path: T, ...params: TypeAsArgs> ): void; + navigateToConversationsApp>( + path: T, + ...params: TypeAsArgs> + ): void; } export function useObservabilityAIAssistantRouter(): StatefulObservabilityAIAssistantRouter { const history = useHistory(); const { - services: { http }, + services: { + http, + application: { navigateToApp }, + }, } = useKibana(); const link = (...args: any[]) => { @@ -43,6 +50,32 @@ export function useObservabilityAIAssistantRouter(): StatefulObservabilityAIAssi history.push(next); }, + navigateToConversationsApp: (path, ...args) => { + const [_, route, routeParam] = path.split('/'); + + const sanitized = routeParam.replace('{', '').replace('}', ''); + + const pathKey = args[0]?.path; + + if (typeof pathKey !== 'object') { + return; + } + + if (Object.keys(pathKey).length === 0) { + navigateToApp('observabilityAIAssistant', { + path: route, + }); + return; + } + + if (Object.keys(pathKey).length === 1) { + navigateToApp('observabilityAIAssistant', { + // @ts-expect-error + path: `${route}/${pathKey[sanitized]}`, + }); + return; + } + }, replace: (path, ...args) => { const next = link(path, ...args); history.replace(next); @@ -51,6 +84,6 @@ export function useObservabilityAIAssistantRouter(): StatefulObservabilityAIAssi return http.basePath.prepend('/app/observabilityAIAssistant' + link(path, ...args)); }, }), - [http, history] + [history, navigateToApp, http.basePath] ); } diff --git a/x-pack/plugins/observability_ai_assistant/server/functions/recall.ts b/x-pack/plugins/observability_ai_assistant/server/functions/recall.ts index 7e966fa0e5508..ee0fae1f91ed1 100644 --- a/x-pack/plugins/observability_ai_assistant/server/functions/recall.ts +++ b/x-pack/plugins/observability_ai_assistant/server/functions/recall.ts @@ -15,6 +15,7 @@ import { FunctionRegistrationParameters } from '.'; import { MessageRole, type Message } from '../../common/types'; import { concatenateChatCompletionChunks } from '../../common/utils/concatenate_chat_completion_chunks'; import type { ObservabilityAIAssistantClient } from '../service/client'; +import { RespondFunctionResources } from '../service/types'; export function registerRecallFunction({ client, @@ -95,10 +96,6 @@ export function registerRecallFunction({ queries, }); - resources.logger.debug(`Received ${suggestions.length} suggestions`); - - resources.logger.debug(JSON.stringify(suggestions, null, 2)); - if (suggestions.length === 0) { return { content: [] as unknown as Serializable, @@ -113,11 +110,9 @@ export function registerRecallFunction({ client, connectorId, signal, + resources, }); - resources.logger.debug(`Received ${relevantDocuments.length} relevant documents`); - resources.logger.debug(JSON.stringify(relevantDocuments, null, 2)); - return { content: relevantDocuments as unknown as Serializable, }; @@ -177,6 +172,7 @@ async function scoreSuggestions({ client, connectorId, signal, + resources, }: { suggestions: Awaited>; systemMessage: Message; @@ -185,7 +181,10 @@ async function scoreSuggestions({ client: ObservabilityAIAssistantClient; connectorId: string; signal: AbortSignal; + resources: RespondFunctionResources; }) { + resources.logger.debug(`Suggestions: ${JSON.stringify(suggestions, null, 2)}`); + const systemMessageExtension = dedent(`You have the function called score available to help you inform the user about how relevant you think a given document is to the conversation. Please give a score between 1 and 7, fractions are allowed. @@ -262,6 +261,8 @@ async function scoreSuggestions({ scoreFunctionRequest.message.function_call.arguments ); + resources.logger.debug(`Scores: ${JSON.stringify(scores, null, 2)}`); + if (scores.length === 0) { return []; } @@ -279,5 +280,10 @@ async function scoreSuggestions({ relevantDocumentIds.includes(suggestion.id) ); + resources.logger.debug( + `Found ${relevantDocumentIds.length} relevant suggestions from the knowledge base. ${scores.length} suggestions were considered in total.` + ); + resources.logger.debug(`Relevant documents: ${JSON.stringify(relevantDocuments, null, 2)}`); + return relevantDocuments; } diff --git a/x-pack/plugins/observability_ai_assistant/server/service/client/index.ts b/x-pack/plugins/observability_ai_assistant/server/service/client/index.ts index 76749e75daed1..f3ab3e917979b 100644 --- a/x-pack/plugins/observability_ai_assistant/server/service/client/index.ts +++ b/x-pack/plugins/observability_ai_assistant/server/service/client/index.ts @@ -320,6 +320,10 @@ export class ObservabilityAIAssistantClient { }, }; + this.dependencies.logger.debug( + `Function response: ${JSON.stringify(functionResponseMessage, null, 2)}` + ); + nextMessages = nextMessages.concat(functionResponseMessage); subscriber.next({ @@ -357,6 +361,8 @@ export class ObservabilityAIAssistantClient { return await next(nextMessages); } + this.dependencies.logger.debug(`Conversation: ${JSON.stringify(nextMessages, null, 2)}`); + if (!persist) { subscriber.complete(); return; diff --git a/x-pack/plugins/observability_ai_assistant/server/service/knowledge_base_service/index.ts b/x-pack/plugins/observability_ai_assistant/server/service/knowledge_base_service/index.ts index 9442985602e98..6783f972f6b4c 100644 --- a/x-pack/plugins/observability_ai_assistant/server/service/knowledge_base_service/index.ts +++ b/x-pack/plugins/observability_ai_assistant/server/service/knowledge_base_service/index.ts @@ -436,6 +436,7 @@ export class KnowledgeBaseService { }): Promise<{ entries: RecalledEntry[]; }> => { + this.dependencies.logger.debug(`Recalling entries from KB for queries: "${queries}"`); const modelId = await this.dependencies.getModelId(); const [documentsFromKb, documentsFromConnectors] = await Promise.all([ @@ -482,10 +483,9 @@ export class KnowledgeBaseService { } } - if (returnedEntries.length <= sortedEntries.length) { - this.dependencies.logger.debug( - `Dropped ${sortedEntries.length - returnedEntries.length} entries because of token limit` - ); + const droppedEntries = sortedEntries.length - returnedEntries.length; + if (droppedEntries > 0) { + this.dependencies.logger.info(`Dropped ${droppedEntries} entries because of token limit`); } return { diff --git a/x-pack/plugins/observability_shared/public/components/load_when_in_view/get_load_when_in_view_lazy.tsx b/x-pack/plugins/observability_shared/public/components/load_when_in_view/get_load_when_in_view_lazy.tsx index eb83b2682f341..b1cba9b58e182 100644 --- a/x-pack/plugins/observability_shared/public/components/load_when_in_view/get_load_when_in_view_lazy.tsx +++ b/x-pack/plugins/observability_shared/public/components/load_when_in_view/get_load_when_in_view_lazy.tsx @@ -7,7 +7,7 @@ import React, { lazy, Suspense } from 'react'; import { EuiLoadingSpinner } from '@elastic/eui'; -import { LoadWhenInViewProps } from './load_when_in_view'; +import type { LoadWhenInViewProps } from './load_when_in_view'; const LoadWhenInViewLazy = lazy(() => import('./load_when_in_view')); diff --git a/x-pack/plugins/observability_shared/public/components/tags_list/tags_list.tsx b/x-pack/plugins/observability_shared/public/components/tags_list/tags_list.tsx new file mode 100644 index 0000000000000..6599a1eec32ff --- /dev/null +++ b/x-pack/plugins/observability_shared/public/components/tags_list/tags_list.tsx @@ -0,0 +1,136 @@ +/* + * 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, { useState } from 'react'; +import { EuiBadge, EuiFlexGroup, EuiFlexItem, EuiText, EuiToolTip } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { EuiBadgeProps } from '@elastic/eui/src/components/badge/badge'; + +export interface TagsListProps { + onClick?: (tag: string) => void; + tags?: string[]; + numberOfTagsToDisplay?: number; + color?: EuiBadgeProps['color']; + ignoreEmpty?: boolean; +} + +const getFilterLabel = (tag: string) => { + return i18n.translate('xpack.observabilityShared.getFilterLabel.filter', { + defaultMessage: 'Click to filter list with tag {tag}', + values: { + tag, + }, + }); +}; + +const TagsList = ({ + ignoreEmpty, + tags, + numberOfTagsToDisplay = 3, + onClick, + color = 'hollow', +}: TagsListProps) => { + const [toDisplay, setToDisplay] = useState(numberOfTagsToDisplay); + + if (!tags || tags.length === 0) { + if (ignoreEmpty) { + return null; + } + return ( + + {i18n.translate('xpack.observabilityShared.tagsList.TextLabel', { defaultMessage: '--' })} + + ); + } + + const tagsToDisplay = tags.slice(0, toDisplay); + + return ( + + {tagsToDisplay.map((tag) => ( + // filtering only makes sense in monitor list, where we have summary + + {onClick ? ( + { + onClick(tag); + }} + onClickAriaLabel={getFilterLabel(tag)} + color={color} + className="eui-textTruncate" + style={{ maxWidth: 120 }} + > + {tag} + + ) : ( + + {tag} + + )} + + ))} + {tags.length > toDisplay && ( + + + {tags.slice(toDisplay, tags.length).map((tag) => ( + + {tag} + + ))} + + } + > + { + setToDisplay(tags.length); + }} + onClickAriaLabel={EXPAND_TAGS_LABEL} + > + +{tags.length - toDisplay} + + + + )} + {toDisplay > 3 && ( + + + { + setToDisplay(3); + }} + onClickAriaLabel={COLLAPSE_TAGS_LABEL} + > + -{tags.length - 3} + + + + )} + + ); +}; + +// eslint-disable-next-line import/no-default-export +export default TagsList; + +const EXPAND_TAGS_LABEL = i18n.translate('xpack.observabilityShared.tagsList.expand', { + defaultMessage: 'Click to view remaining tags', +}); + +const COLLAPSE_TAGS_LABEL = i18n.translate('xpack.observabilityShared.tagsList.collapse', { + defaultMessage: 'Click to collapse tags', +}); diff --git a/x-pack/plugins/observability_shared/public/components/tags_list/tags_list_lazy.tsx b/x-pack/plugins/observability_shared/public/components/tags_list/tags_list_lazy.tsx new file mode 100644 index 0000000000000..6e161cda52686 --- /dev/null +++ b/x-pack/plugins/observability_shared/public/components/tags_list/tags_list_lazy.tsx @@ -0,0 +1,20 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { lazy, Suspense } from 'react'; +import { EuiLoadingSpinner } from '@elastic/eui'; +import type { TagsListProps } from './tags_list'; + +const TagsListLazy = lazy(() => import('./tags_list')); + +export function TagsList(props: TagsListProps) { + return ( + }> + + + ); +} diff --git a/x-pack/plugins/observability_shared/public/index.ts b/x-pack/plugins/observability_shared/public/index.ts index 3c9d2fe5a8eec..9b4ef62271697 100644 --- a/x-pack/plugins/observability_shared/public/index.ts +++ b/x-pack/plugins/observability_shared/public/index.ts @@ -35,6 +35,8 @@ export { } from './components/section/section'; export type { SectionLinkProps } from './components/section/section'; export { LoadWhenInView } from './components/load_when_in_view/get_load_when_in_view_lazy'; +export { TagsList } from './components/tags_list/tags_list_lazy'; +export type { TagsListProps } from './components/tags_list/tags_list'; export { TechnicalPreviewBadge } from './components/technical_preview_badge/technical_preview_badge'; diff --git a/x-pack/plugins/profiling/server/lib/setup/README.md b/x-pack/plugins/profiling/server/lib/setup/README.md index b1eb7dc241075..dfab97d508c74 100644 --- a/x-pack/plugins/profiling/server/lib/setup/README.md +++ b/x-pack/plugins/profiling/server/lib/setup/README.md @@ -26,7 +26,7 @@ Build and push a Kibana image with the latest changes. Choose a unique identifier for the build, then: ``` -node scripts/build --docker-images --skip-docker-ubi --skip-docker-ubuntu +node scripts/build --docker-images --skip-docker-ubi --skip-docker-ubuntu --skip-docker-fips docker tag docker.elastic.co/kibana-ci/kibana-cloud:8.7.0-SNAPSHOT docker.elastic.co/observability-ci/kibana: docker push docker.elastic.co/observability-ci/kibana: ``` diff --git a/x-pack/plugins/security_solution/common/api/detection_engine/model/rule_response_actions/response_actions.gen.ts b/x-pack/plugins/security_solution/common/api/detection_engine/model/rule_response_actions/response_actions.gen.ts index c7a1295c1e8c3..172b95101be2b 100644 --- a/x-pack/plugins/security_solution/common/api/detection_engine/model/rule_response_actions/response_actions.gen.ts +++ b/x-pack/plugins/security_solution/common/api/detection_engine/model/rule_response_actions/response_actions.gen.ts @@ -81,22 +81,38 @@ export const RuleResponseOsqueryAction = z.object({ params: OsqueryParamsCamelCase, }); -export type EndpointParams = z.infer; -export const EndpointParams = z.object({ +export type DefaultParams = z.infer; +export const DefaultParams = z.object({ command: z.literal('isolate'), comment: z.string().optional(), }); +export type ProcessesParams = z.infer; +export const ProcessesParams = z.object({ + command: z.enum(['kill-process', 'suspend-process']), + comment: z.string().optional(), + config: z.object({ + /** + * Field to use instead of process.pid + */ + field: z.string(), + /** + * Whether to overwrite field with process.pid + */ + overwrite: z.boolean().optional().default(true), + }), +}); + export type EndpointResponseAction = z.infer; export const EndpointResponseAction = z.object({ action_type_id: z.literal('.endpoint'), - params: EndpointParams, + params: z.union([DefaultParams, ProcessesParams]), }); export type RuleResponseEndpointAction = z.infer; export const RuleResponseEndpointAction = z.object({ actionTypeId: z.literal('.endpoint'), - params: EndpointParams, + params: z.union([DefaultParams, ProcessesParams]), }); export type ResponseAction = z.infer; diff --git a/x-pack/plugins/security_solution/common/api/detection_engine/model/rule_response_actions/response_actions.schema.yaml b/x-pack/plugins/security_solution/common/api/detection_engine/model/rule_response_actions/response_actions.schema.yaml index 3e4b37e115add..751a1efee8fa8 100644 --- a/x-pack/plugins/security_solution/common/api/detection_engine/model/rule_response_actions/response_actions.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/detection_engine/model/rule_response_actions/response_actions.schema.yaml @@ -2,7 +2,7 @@ openapi: 3.0.0 info: title: Response Actions Schema version: 'not applicable' -paths: {} +paths: { } components: x-codegen-enabled: true schemas: @@ -113,7 +113,7 @@ components: - actionTypeId - params - EndpointParams: + DefaultParams: type: object properties: command: @@ -125,6 +125,32 @@ components: required: - command + ProcessesParams: + type: object + properties: + command: + type: string + enum: + - kill-process + - suspend-process + comment: + type: string + config: + required: + - field + type: object + properties: + field: + type: string + description: Field to use instead of process.pid + overwrite: + type: boolean + description: Whether to overwrite field with process.pid + default: true + required: + - command + - config + EndpointResponseAction: type: object properties: @@ -133,7 +159,9 @@ components: enum: - .endpoint params: - $ref: '#/components/schemas/EndpointParams' + oneOf: + - $ref: '#/components/schemas/DefaultParams' + - $ref: '#/components/schemas/ProcessesParams' required: - action_type_id - params @@ -147,7 +175,9 @@ components: enum: - .endpoint params: - $ref: '#/components/schemas/EndpointParams' + oneOf: + - $ref: '#/components/schemas/DefaultParams' + - $ref: '#/components/schemas/ProcessesParams' required: - actionTypeId - params diff --git a/x-pack/plugins/security_solution/common/api/detection_engine/model/rule_schema_legacy/response_actions.ts b/x-pack/plugins/security_solution/common/api/detection_engine/model/rule_schema_legacy/response_actions.ts index 8f176a9908041..e4164c6d2bb04 100644 --- a/x-pack/plugins/security_solution/common/api/detection_engine/model/rule_schema_legacy/response_actions.ts +++ b/x-pack/plugins/security_solution/common/api/detection_engine/model/rule_schema_legacy/response_actions.ts @@ -6,7 +6,6 @@ */ import { arrayQueries, ecsMapping } from '@kbn/osquery-io-ts-types'; import * as t from 'io-ts'; -import { ENABLED_AUTOMATED_RESPONSE_ACTION_COMMANDS } from '../../../../endpoint/service/response_actions/constants'; // to enable using RESPONSE_ACTION_API_COMMANDS_NAMES as a type function keyObject(arr: T): { [K in T[number]]: null } { @@ -15,7 +14,9 @@ function keyObject(arr: T): { [K in T[number]]: nul export type EndpointParams = t.TypeOf; export const EndpointParams = t.type({ - command: t.keyof(keyObject(ENABLED_AUTOMATED_RESPONSE_ACTION_COMMANDS)), + // TODO: TC- change these when we go GA with automated process actions + command: t.keyof(keyObject(['isolate', 'kill-process', 'suspend-process'])), + // command: t.keyof(keyObject(ENABLED_AUTOMATED_RESPONSE_ACTION_COMMANDS)), comment: t.union([t.string, t.undefined]), }); diff --git a/x-pack/plugins/security_solution/common/constants.ts b/x-pack/plugins/security_solution/common/constants.ts index 4acadbd8e39ea..cf9e5ed8ba61f 100644 --- a/x-pack/plugins/security_solution/common/constants.ts +++ b/x-pack/plugins/security_solution/common/constants.ts @@ -8,6 +8,7 @@ import { RuleNotifyWhen } from '@kbn/alerting-plugin/common'; import type { AddOptionsListControlProps } from '@kbn/controls-plugin/public'; import * as i18n from './translations'; + export { SecurityPageName } from '@kbn/security-solution-navigation'; /** @@ -338,12 +339,12 @@ export const ALERTS_AS_DATA_FIND_URL = `${ALERTS_AS_DATA_URL}/find` as const; export const UNAUTHENTICATED_USER = 'Unauthenticated' as const; /** - Licensing requirements + Licensing requirements */ export const MINIMUM_ML_LICENSE = 'platinum' as const; /** - Machine Learning constants + Machine Learning constants */ export const ML_GROUP_ID = 'security' as const; export const LEGACY_ML_GROUP_ID = 'siem' as const; @@ -519,3 +520,8 @@ export const DEFAULT_ALERT_TAGS_VALUE = [ * Max length for the comments within security solution */ export const MAX_COMMENT_LENGTH = 30000 as const; + +/** + * Cases external attachment IDs + */ +export const CASE_ATTACHMENT_ENDPOINT_TYPE_ID = 'endpoint' as const; diff --git a/x-pack/plugins/security_solution/common/endpoint/data_generators/endpoint_rule_alert_generator.ts b/x-pack/plugins/security_solution/common/endpoint/data_generators/endpoint_rule_alert_generator.ts index 1b74ae55f6289..e89cb996f261f 100644 --- a/x-pack/plugins/security_solution/common/endpoint/data_generators/endpoint_rule_alert_generator.ts +++ b/x-pack/plugins/security_solution/common/endpoint/data_generators/endpoint_rule_alert_generator.ts @@ -287,6 +287,28 @@ export class EndpointRuleAlertGenerator extends BaseDataGenerator { comment: 'test', }, }, + { + params: { + command: 'suspend-process', + comment: 'Suspend host', + config: { + field: 'entity_id', + overwrite: false, + }, + }, + action_type_id: '.endpoint', + }, + { + params: { + command: 'kill-process', + comment: 'Kill host', + config: { + field: '', + overwrite: true, + }, + }, + action_type_id: '.endpoint', + }, ], rule_id: ELASTIC_SECURITY_RULE_ID, rule_name_override: 'message', diff --git a/x-pack/plugins/security_solution/common/endpoint/data_loaders/index_endpoint_fleet_actions.ts b/x-pack/plugins/security_solution/common/endpoint/data_loaders/index_endpoint_fleet_actions.ts index f94f148765ba5..5eb2cebcc3f8e 100644 --- a/x-pack/plugins/security_solution/common/endpoint/data_loaders/index_endpoint_fleet_actions.ts +++ b/x-pack/plugins/security_solution/common/endpoint/data_loaders/index_endpoint_fleet_actions.ts @@ -9,6 +9,7 @@ import type { Client } from '@elastic/elasticsearch'; import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { AGENT_ACTIONS_INDEX, AGENT_ACTIONS_RESULTS_INDEX } from '@kbn/fleet-plugin/common'; import type { BulkRequest } from '@elastic/elasticsearch/lib/api/types'; +import type { ResponseActionsApiCommandNames } from '../service/response_actions/constants'; import { EndpointError } from '../errors'; import { usageTracker } from './usage_tracker'; import type { @@ -117,6 +118,15 @@ interface BuildIEndpointAndFleetActionsBulkOperationsResponse operations: Required['operations']; } +const getAutomatedActionsSample = (): Array<{ + command: ResponseActionsApiCommandNames; + config?: { overwrite: boolean }; +}> => [ + { command: 'isolate' }, + { command: 'suspend-process', config: { overwrite: true } }, + { command: 'kill-process', config: { overwrite: true } }, +]; + export const buildIEndpointAndFleetActionsBulkOperations = ({ endpoints, count = 1, @@ -138,13 +148,14 @@ export const buildIEndpointAndFleetActionsBulkOperations = ({ for (const endpoint of endpoints) { const agentId = endpoint.elastic.agent.id; + const automatedActions = getAutomatedActionsSample(); for (let i = 0; i < count; i++) { // start with endpoint action const logsEndpointAction: LogsEndpointAction = endpointActionGenerator.generate({ EndpointActions: { data: { comment: 'data generator: this host is bad', - ...(alertIds ? { command: 'isolate' } : {}), + ...(alertIds ? automatedActions[i] : {}), }, }, }); diff --git a/x-pack/plugins/security_solution/common/endpoint/service/response_actions/constants.ts b/x-pack/plugins/security_solution/common/endpoint/service/response_actions/constants.ts index 6f8daab94e186..e8de7fc1c9122 100644 --- a/x-pack/plugins/security_solution/common/endpoint/service/response_actions/constants.ts +++ b/x-pack/plugins/security_solution/common/endpoint/service/response_actions/constants.ts @@ -31,7 +31,12 @@ export const RESPONSE_ACTION_API_COMMANDS_NAMES = [ export type ResponseActionsApiCommandNames = typeof RESPONSE_ACTION_API_COMMANDS_NAMES[number]; -export const ENABLED_AUTOMATED_RESPONSE_ACTION_COMMANDS = ['isolate'] as const; +export const ENABLED_AUTOMATED_RESPONSE_ACTION_COMMANDS: ResponseActionsApiCommandNames[] = [ + 'isolate', + // TODO: TC- Uncomment these when we go GA with automated process actions + // 'kill-process', + // 'suspend-process' +]; export type EnabledAutomatedResponseActionsCommands = typeof ENABLED_AUTOMATED_RESPONSE_ACTION_COMMANDS[number]; diff --git a/x-pack/plugins/security_solution/common/experimental_features.ts b/x-pack/plugins/security_solution/common/experimental_features.ts index bed4a958b16b4..e7c5cf104b7c7 100644 --- a/x-pack/plugins/security_solution/common/experimental_features.ts +++ b/x-pack/plugins/security_solution/common/experimental_features.ts @@ -70,6 +70,11 @@ export const allowedExperimentalValues = Object.freeze({ */ responseActionUploadEnabled: true, + /* + * Enables Automated Endpoint Process actions + */ + automatedProcessActionsEnabled: false, + /** * Enables the ability to send Response actions to SentinelOne */ diff --git a/x-pack/plugins/security_solution/public/cases/attachments/external_reference.tsx b/x-pack/plugins/security_solution/public/cases/attachments/external_reference.tsx new file mode 100644 index 0000000000000..3a96cfec14897 --- /dev/null +++ b/x-pack/plugins/security_solution/public/cases/attachments/external_reference.tsx @@ -0,0 +1,32 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { EuiAvatar } from '@elastic/eui'; +import type { ExternalReferenceAttachmentType } from '@kbn/cases-plugin/public/client/attachment_framework/types'; +import { getLazyExternalChildrenContent } from './lazy_external_reference_children_content'; +import { CASE_ATTACHMENT_ENDPOINT_TYPE_ID } from '../../../common/constants'; +import { getLazyExternalEventContent } from './lazy_external_reference_content'; +import type { IExternalReferenceMetaDataProps } from './types'; + +export const getExternalReferenceAttachmentEndpointRegular = + (): ExternalReferenceAttachmentType => ({ + id: CASE_ATTACHMENT_ENDPOINT_TYPE_ID, + displayName: 'Endpoint', + // @ts-expect-error: TS2322 figure out types for children lazyExotic + getAttachmentViewObject: (props: IExternalReferenceMetaDataProps) => { + const iconType = props.externalReferenceMetadata?.command === 'isolate' ? 'lock' : 'lockOpen'; + return { + type: 'regular', + event: getLazyExternalEventContent(props), + timelineAvatar: ( + + ), + children: getLazyExternalChildrenContent, + }; + }, + }); diff --git a/x-pack/plugins/security_solution/public/cases/attachments/external_reference_children.test.tsx b/x-pack/plugins/security_solution/public/cases/attachments/external_reference_children.test.tsx new file mode 100644 index 0000000000000..e542e74a1f702 --- /dev/null +++ b/x-pack/plugins/security_solution/public/cases/attachments/external_reference_children.test.tsx @@ -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 React from 'react'; +import { render } from '@testing-library/react'; +import AttachmentContentChildren from './external_reference_children'; + +describe('AttachmentContentChildren', () => { + const defaultProps = { + command: 'isolate', + comment: 'Test comment', + targets: [ + { + endpointId: 'endpoint-1', + hostname: 'host-1', + agentType: 'endpoint' as const, + }, + ], + }; + + it('renders markdown content when comment exists', () => { + const props = { + externalReferenceMetadata: { + ...defaultProps, + }, + }; + const { getByText } = render(); + expect(getByText('Test comment')).toBeInTheDocument(); + }); + + it('does not render when comment is empty', () => { + const props = { + externalReferenceMetadata: { + ...defaultProps, + comment: '', + }, + }; + const { container } = render(); + expect(container.firstChild).toBeNull(); + }); + + it('does not render when comment is only whitespace', () => { + const props = { + externalReferenceMetadata: { + ...defaultProps, + comment: ' ', + }, + }; + + const { container } = render(); + expect(container.firstChild).toBeNull(); + }); +}); diff --git a/x-pack/plugins/security_solution/public/cases/attachments/external_reference_children.tsx b/x-pack/plugins/security_solution/public/cases/attachments/external_reference_children.tsx new file mode 100644 index 0000000000000..57e03fd66aa39 --- /dev/null +++ b/x-pack/plugins/security_solution/public/cases/attachments/external_reference_children.tsx @@ -0,0 +1,32 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; + +import styled from 'styled-components'; +import { EuiMarkdownFormat } from '@elastic/eui'; +import type { IExternalReferenceMetaDataProps } from './types'; + +export const ContentWrapper = styled.div` + padding: ${({ theme }) => `${theme.eui?.euiSizeM} ${theme.eui?.euiSizeL}`}; + text-overflow: ellipsis; + word-break: break-word; + display: -webkit-box; + -webkit-box-orient: vertical; +`; + +const AttachmentContentChildren = ({ + externalReferenceMetadata: { comment }, +}: IExternalReferenceMetaDataProps) => { + return comment.trim().length > 0 ? ( + + {comment} + + ) : null; +}; +// eslint-disable-next-line import/no-default-export +export { AttachmentContentChildren as default }; diff --git a/x-pack/plugins/security_solution/public/cases/attachments/external_reference_event.test.tsx b/x-pack/plugins/security_solution/public/cases/attachments/external_reference_event.test.tsx new file mode 100644 index 0000000000000..4e5c504cd50c9 --- /dev/null +++ b/x-pack/plugins/security_solution/public/cases/attachments/external_reference_event.test.tsx @@ -0,0 +1,88 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { render, fireEvent } from '@testing-library/react'; + +import AttachmentContentEvent from './external_reference_event'; +import { useNavigation } from '@kbn/security-solution-navigation/src/navigation'; + +jest.mock('@kbn/security-solution-navigation/src/navigation', () => { + return { + useNavigation: jest.fn(), + }; +}); + +describe('AttachmentContentEvent', () => { + const mockNavigateTo = jest.fn(); + + const mockUseNavigation = useNavigation as jest.Mocked; + (mockUseNavigation as jest.Mock).mockReturnValue({ + getAppUrl: jest.fn(), + navigateTo: mockNavigateTo, + }); + + const defaultProps = { + externalReferenceMetadata: { + command: 'isolate', + comment: 'test comment', + targets: [ + { + endpointId: 'endpoint-1', + hostname: 'host-1', + agentType: 'endpoint' as const, + }, + ], + }, + }; + + it('renders the expected text based on the command', () => { + const { getByText, getByTestId, rerender } = render( + + ); + + expect(getByText('submitted isolate request on host')).toBeInTheDocument(); + expect(getByTestId('actions-link-endpoint-1')).toHaveTextContent('host-1'); + + rerender( + + ); + + expect(getByText('submitted release request on host')).toBeInTheDocument(); + expect(getByTestId('actions-link-endpoint-1')).toHaveTextContent('host-1'); + }); + + it('navigates on link click', () => { + const { getByTestId } = render(); + + fireEvent.click(getByTestId('actions-link-endpoint-1')); + + expect(mockNavigateTo).toHaveBeenCalled(); + }); + + it('builds endpoint details URL correctly', () => { + const mockGetAppUrl = jest.fn().mockReturnValue('http://app.url'); + (mockUseNavigation as jest.Mock).mockReturnValue({ + getAppUrl: mockGetAppUrl, + }); + + render(); + + expect(mockGetAppUrl).toHaveBeenNthCalledWith(1, { + path: '/administration/endpoints?selected_endpoint=endpoint-1&show=activity_log', + }); + expect(mockGetAppUrl).toHaveBeenNthCalledWith(2, { + path: '/hosts/name/host-1', + }); + }); +}); diff --git a/x-pack/plugins/security_solution/public/cases/attachments/external_reference_event.tsx b/x-pack/plugins/security_solution/public/cases/attachments/external_reference_event.tsx new file mode 100644 index 0000000000000..1cb1910a9b1b9 --- /dev/null +++ b/x-pack/plugins/security_solution/public/cases/attachments/external_reference_event.tsx @@ -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 { EuiLink } from '@elastic/eui'; +import { useNavigation } from '@kbn/security-solution-navigation/src/navigation'; +import React, { useCallback, useMemo } from 'react'; + +import { ISOLATED_HOST, RELEASED_HOST, OTHER_ENDPOINTS } from '../pages/translations'; +import type { IExternalReferenceMetaDataProps } from './types'; +import { getEndpointDetailsPath } from '../../management/common/routing'; + +const AttachmentContentEvent = ({ + externalReferenceMetadata: { command, targets }, +}: IExternalReferenceMetaDataProps) => { + const { getAppUrl, navigateTo } = useNavigation(); + + const endpointDetailsHref = getAppUrl({ + path: getEndpointDetailsPath({ + name: 'endpointActivityLog', + selected_endpoint: targets[0].endpointId, + }), + }); + const hostsDetailsHref = getAppUrl({ + path: `/hosts/name/${targets[0].hostname}`, + }); + + const actionText = useMemo(() => { + return command === 'isolate' ? `${ISOLATED_HOST} ` : `${RELEASED_HOST} `; + }, [command]); + + const linkHref = useMemo( + () => (targets[0].agentType === 'endpoint' ? endpointDetailsHref : hostsDetailsHref), + [endpointDetailsHref, hostsDetailsHref, targets] + ); + + const onLinkClick = useCallback( + (ev: React.MouseEvent) => { + ev.preventDefault(); + return navigateTo({ url: linkHref }); + }, + [navigateTo, linkHref] + ); + + return ( + <> + {actionText} + {/* eslint-disable-next-line @elastic/eui/href-or-on-click */} + + {targets[0].hostname} + + {targets.length > 1 && OTHER_ENDPOINTS(targets.length - 1)} + + ); +}; + +// eslint-disable-next-line import/no-default-export +export { AttachmentContentEvent as default }; diff --git a/x-pack/plugins/security_solution/public/cases/attachments/lazy_external_reference_children_content.tsx b/x-pack/plugins/security_solution/public/cases/attachments/lazy_external_reference_children_content.tsx new file mode 100644 index 0000000000000..b88eeddf2b6bc --- /dev/null +++ b/x-pack/plugins/security_solution/public/cases/attachments/lazy_external_reference_children_content.tsx @@ -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 React, { lazy, Suspense } from 'react'; +import type { IExternalReferenceMetaDataProps } from './types'; + +const AttachmentContent = lazy(() => import('./external_reference_children')); + +export const getLazyExternalChildrenContent = (props: IExternalReferenceMetaDataProps) => { + return ( + + + + ); +}; diff --git a/x-pack/plugins/security_solution/public/cases/attachments/lazy_external_reference_content.tsx b/x-pack/plugins/security_solution/public/cases/attachments/lazy_external_reference_content.tsx new file mode 100644 index 0000000000000..cbcf2dade0a8e --- /dev/null +++ b/x-pack/plugins/security_solution/public/cases/attachments/lazy_external_reference_content.tsx @@ -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 React, { lazy, Suspense } from 'react'; +import type { IExternalReferenceMetaDataProps } from './types'; + +const AttachmentContent = lazy(() => import('./external_reference_event')); + +export const getLazyExternalEventContent = (props: IExternalReferenceMetaDataProps) => { + return ( + + + + ); +}; diff --git a/x-pack/plugins/security_solution/public/cases/attachments/types.ts b/x-pack/plugins/security_solution/public/cases/attachments/types.ts new file mode 100644 index 0000000000000..341b21a7576e4 --- /dev/null +++ b/x-pack/plugins/security_solution/public/cases/attachments/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 type { ResponseActionAgentType } from '../../../common/endpoint/service/response_actions/constants'; + +export interface IExternalReferenceMetaDataProps { + externalReferenceMetadata: { + comment: ExternalReferenceCommentType; + command: ExternalReferenceCommandType; + targets: ExternalReferenceTargetsType; + }; +} + +type ExternalReferenceTargetsType = Array<{ + endpointId: string; + hostname: string; + agentType: ResponseActionAgentType; +}>; +type ExternalReferenceCommentType = string; +type ExternalReferenceCommandType = string; diff --git a/x-pack/plugins/security_solution/public/cases/pages/translations.ts b/x-pack/plugins/security_solution/public/cases/pages/translations.ts index d6f33d2a90ffa..776b7acc11898 100644 --- a/x-pack/plugins/security_solution/public/cases/pages/translations.ts +++ b/x-pack/plugins/security_solution/public/cases/pages/translations.ts @@ -10,3 +10,17 @@ import { i18n } from '@kbn/i18n'; export const PAGE_TITLE = i18n.translate('xpack.securitySolution.cases.pageTitle', { defaultMessage: 'Cases', }); + +export const ISOLATED_HOST = i18n.translate('xpack.securitySolution.caseView.isolatedHost', { + defaultMessage: 'submitted isolate request on host', +}); + +export const RELEASED_HOST = i18n.translate('xpack.securitySolution.caseView.releasedHost', { + defaultMessage: 'submitted release request on host', +}); + +export const OTHER_ENDPOINTS = (endpoints: number): string => + i18n.translate('xpack.securitySolution.caseView.otherEndpoints', { + values: { endpoints }, + defaultMessage: ` and {endpoints} {endpoints, plural, =1 {other} other {others}}`, + }); diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_response_actions/endpoint/action_type_field.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_response_actions/endpoint/action_type_field.tsx index fa40754f222c4..60857e4b5c49a 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_response_actions/endpoint/action_type_field.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_response_actions/endpoint/action_type_field.tsx @@ -13,6 +13,7 @@ import { SuperSelectField } from '@kbn/es-ui-shared-plugin/static/forms/componen import { fieldValidators } from '@kbn/es-ui-shared-plugin/static/forms/helpers'; import { FormattedMessage } from '@kbn/i18n-react'; import { EuiLink } from '@elastic/eui'; +import { useIsExperimentalFeatureEnabled } from '../../../common/hooks/use_experimental_features'; import { getRbacControl } from '../../../../common/endpoint/service/response_actions/utils'; import { useKibana } from '../../../common/lib/kibana'; import { CHOOSE_FROM_THE_LIST, LEARN_MORE } from './translations'; @@ -44,14 +45,29 @@ const ActionTypeFieldComponent = ({ }, } = useKibana().services; + const automatedProcessActionsEnabled = useIsExperimentalFeatureEnabled( + 'automatedProcessActionsEnabled' + ); + + const enabledActions = useMemo( + () => + [ + ...ENABLED_AUTOMATED_RESPONSE_ACTION_COMMANDS, + ...(automatedProcessActionsEnabled ? ['kill-process', 'suspend-process'] : []), + ] as ['isolate', 'kill-process', 'suspend-process'], + [automatedProcessActionsEnabled] + ); + const fieldOptions = useMemo( () => - ENABLED_AUTOMATED_RESPONSE_ACTION_COMMANDS.map((name) => { + enabledActions.map((name) => { const missingRbac = !getRbacControl({ commandName: RESPONSE_ACTION_API_COMMAND_TO_CONSOLE_COMMAND_MAP[name], privileges: endpointPrivileges, }); - const commandAlreadyExists = map(data.responseActions, 'params.command').includes(name); + const currentActions = map(data.responseActions, 'params.command'); + // we enable just one instance of each action + const commandAlreadyExists = currentActions.includes(name); const isDisabled = commandAlreadyExists || missingRbac; return { @@ -62,7 +78,7 @@ const ActionTypeFieldComponent = ({ 'data-test-subj': `command-type-${name}`, }; }), - [data.responseActions, endpointPrivileges] + [data.responseActions, enabledActions, endpointPrivileges] ); return ( diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_response_actions/endpoint/callout.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_response_actions/endpoint/callout.tsx index 07dbb0c9f2cbf..3468743f5d9d7 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_response_actions/endpoint/callout.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_response_actions/endpoint/callout.tsx @@ -71,6 +71,31 @@ const EndpointActionCalloutComponent = ({ basePath, editDisabled }: EndpointCall ); } + if (currentCommand === 'kill-process' || currentCommand === 'suspend-process') { + return ( + <> + + + } + > + + + + + + + ); + } return <>; }; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_response_actions/endpoint/config_fields.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_response_actions/endpoint/config_fields.tsx new file mode 100644 index 0000000000000..e59fb52425d94 --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_response_actions/endpoint/config_fields.tsx @@ -0,0 +1,56 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { useFormData } from '@kbn/es-ui-shared-plugin/static/forms/hook_form_lib'; +import { EuiSpacer } from '@elastic/eui'; +import { get } from 'lodash'; +import { OverwriteField } from './overwrite_process_field'; +import { FieldNameField } from './field_name'; + +interface AdditionalConfigFieldProps { + basePath: string; + disabled: boolean; + readDefaultValueOnForm: boolean; +} + +export const ConfigFieldsComponent = ({ + basePath, + disabled, + readDefaultValueOnForm, +}: AdditionalConfigFieldProps) => { + const commandPath = `${basePath}.command`; + const overWritePath = `${basePath}.config.overwrite`; + const [data] = useFormData({ watch: [commandPath, overWritePath] }); + const currentCommand = get(data, commandPath); + const currentOverwrite = get(data, overWritePath); + + if (currentCommand === 'kill-process' || currentCommand === 'suspend-process') { + return ( + <> + + + + + + + ); + } + + return null; +}; + +export const ConfigFields = React.memo(ConfigFieldsComponent); diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_response_actions/endpoint/endpoint_response_action.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_response_actions/endpoint/endpoint_response_action.tsx index 940cab8eb1b8b..84518ac097481 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_response_actions/endpoint/endpoint_response_action.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_response_actions/endpoint/endpoint_response_action.tsx @@ -6,6 +6,7 @@ */ import React from 'react'; +import { ConfigFields } from './config_fields'; import type { ArrayItem } from '../../../shared_imports'; import { CommentField } from './comment_field'; import { ActionTypeField } from './action_type_field'; @@ -29,6 +30,12 @@ export const EndpointResponseAction = React.memo((props: EndpointResponseActionP + + ({ + label: ecs.field, + value: ecs, +})); + +const SINGLE_SELECTION = Object.freeze({ asPlainText: true }); + +const FIELD_LABEL: string = 'Custom field name'; +const FieldNameFieldComponent = ({ + path, + disabled, + readDefaultValueOnForm, + isRequired, +}: FieldNameFieldProps) => { + const [data] = useFormData(); + const fieldValue = get(data, path); + const context = useFormContext(); + + const currentFieldNameField = context.getFields()[path]; + + useEffect(() => { + // hackish way to clear errors on this field - because we base this validation on the value of overwrite toggle + if (currentFieldNameField && !isRequired) { + currentFieldNameField?.clearErrors(); + } + }, [currentFieldNameField, isRequired]); + + const renderEntityIdNote = useMemo(() => { + const contains = fieldValue?.includes('entity_id'); + if (contains) { + return ( + + ); + } + return null; + }, [fieldValue]); + + const CONFIG = useMemo(() => { + return { + label: FIELD_LABEL, + helpText: renderEntityIdNote, + validations: [ + { + validator: ({ value }: { value: string }) => { + if (isRequired && value === '') { + return { + code: 'ERR_FIELD_MISSING', + path, + message: i18n.translate( + 'xpack.securitySolution.responseActions.endpoint.validations.fieldNameIsRequiredErrorMessage', + { + defaultMessage: + '{field} is a required field when process.pid toggle is turned off', + values: { field: FIELD_LABEL }, + } + ), + }; + } + }, + }, + ], + }; + }, [isRequired, path, renderEntityIdNote]); + + const optionsAsComboBoxOptions = useMemo(() => { + return ECSSchemaOptions.map(({ label }) => ({ + label, + value: label, + })); + }, []); + + return ( + <> + path={path} readDefaultValueOnForm={readDefaultValueOnForm} config={CONFIG}> + {(field) => { + const { value, setValue } = field; + const { isInvalid, errorMessage } = getFieldValidityAndErrorMessage(field); + + const valueInList = !!optionsAsComboBoxOptions.find((option) => option.label === value); + return ( + + { + if (newValue.length === 0) { + // Don't allow clearing the type. One must always be selected + return; + } + setValue(newValue[0].label); + }} + data-test-subj="config-custom-field-name" + /> + + ); + }} + + + + ); +}; +export const FieldNameField = React.memo(FieldNameFieldComponent); diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_response_actions/endpoint/overwrite_process_field.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_response_actions/endpoint/overwrite_process_field.tsx new file mode 100644 index 0000000000000..143bd78e339d7 --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_response_actions/endpoint/overwrite_process_field.tsx @@ -0,0 +1,46 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import React, { useMemo } from 'react'; +import { UseField } from '@kbn/es-ui-shared-plugin/static/forms/hook_form_lib'; +import { ToggleField } from '@kbn/es-ui-shared-plugin/static/forms/components'; +import { i18n } from '@kbn/i18n'; + +interface OverwriteFieldProps { + path: string; + disabled: boolean; + readDefaultValueOnForm: boolean; +} + +const OverwriteFieldComponent = ({ + path, + disabled, + readDefaultValueOnForm, +}: OverwriteFieldProps) => { + const CONFIG = useMemo(() => { + return { + defaultValue: true, + label: i18n.translate('xpack.securitySolution.responseActions.endpoint.overwriteFieldLabel', { + defaultMessage: 'Use process.pid as process identifier', + }), + }; + }, []); + + return ( + + ); +}; + +export const OverwriteField = React.memo(OverwriteFieldComponent); diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_response_actions/endpoint/utils.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_response_actions/endpoint/utils.tsx index 58f8dd2e3548e..a07fd84bf4430 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_response_actions/endpoint/utils.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_response_actions/endpoint/utils.tsx @@ -6,7 +6,7 @@ */ import type { ReactNode } from 'react'; import React from 'react'; -import { EuiText, EuiTitle, EuiSpacer, EuiToolTip } from '@elastic/eui'; +import { EuiText, EuiSpacer, EuiToolTip } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import type { EnabledAutomatedResponseActionsCommands } from '../../../../common/endpoint/service/response_actions/constants'; @@ -20,11 +20,11 @@ const EndpointActionTextComponent = ({ name, isDisabled }: EndpointActionTextPro const content = ( <> - - {title} - + + {title} + - {description} + {description} ); if (isDisabled) { @@ -62,6 +62,48 @@ const useGetCommandText = ( /> ), }; + case 'kill-process': + return { + title: ( + + ), + description: ( + + ), + tooltip: ( + + ), + }; + case 'suspend-process': + return { + title: ( + + ), + description: ( + + ), + tooltip: ( + + ), + }; default: return { title: '', diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_response_actions/endpoint/v.8.10.0_process.json b/x-pack/plugins/security_solution/public/detection_engine/rule_response_actions/endpoint/v.8.10.0_process.json new file mode 100644 index 0000000000000..986a60ba6d48f --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_response_actions/endpoint/v.8.10.0_process.json @@ -0,0 +1,122 @@ +[ + { + "field": "process.entity_id", + "description": "Unique identifier for the process." + }, + { + "field": "process.entry_leader.entity_id", + "description": "Unique identifier for the process." + }, + { + "field": "process.entry_leader.parent.entity_id", + "description": "Unique identifier for the process." + }, + { + "field": "process.entry_leader.parent.pid", + "description": "Process id." + }, + { + "field": "process.entry_leader.parent.session_leader.entity_id", + "description": "Unique identifier for the process." + }, + { + "field": "process.entry_leader.parent.session_leader.pid", + "description": "Process id." + }, + { + "field": "process.entry_leader.parent.session_leader.vpid", + "description": "Virtual process id." + }, + { + "field": "process.entry_leader.parent.vpid", + "description": "Virtual process id." + }, + { + "field": "process.entry_leader.pid", + "description": "Process id." + }, + { + "field": "process.entry_leader.vpid", + "description": "Virtual process id." + }, + { + "field": "process.group_leader.entity_id", + "description": "Unique identifier for the process." + }, + { + "field": "process.group_leader.pid", + "description": "Process id." + }, + { + "field": "process.group_leader.vpid", + "description": "Virtual process id." + }, + { + "field": "process.parent.entity_id", + "description": "Unique identifier for the process." + }, + { + "field": "process.parent.group_leader.entity_id", + "description": "Unique identifier for the process." + }, + { + "field": "process.parent.group_leader.pid", + "description": "Process id." + }, + { + "field": "process.parent.group_leader.vpid", + "description": "Virtual process id." + }, + { + "field": "process.parent.pid", + "description": "Process id." + }, + { + "field": "process.parent.vpid", + "description": "Virtual process id." + }, + { + "field": "process.pid", + "description": "Process id." + }, + { + "field": "process.session_leader.entity_id", + "description": "Unique identifier for the process." + }, + { + "field": "process.session_leader.parent.entity_id", + "description": "Unique identifier for the process." + }, + { + "field": "process.session_leader.parent.pid", + "description": "Process id." + }, + { + "field": "process.session_leader.parent.session_leader.entity_id", + "description": "Unique identifier for the process." + }, + { + "field": "process.session_leader.parent.session_leader.pid", + "description": "Process id." + }, + { + "field": "process.session_leader.parent.session_leader.vpid", + "description": "Virtual process id." + }, + { + "field": "process.session_leader.parent.vpid", + "description": "Virtual process id." + }, + { + "field": "process.session_leader.pid", + "description": "Process id." + }, + { + "field": "process.session_leader.vpid", + "description": "Virtual process id." + }, + { + "field": "process.vpid", + "description": "Virtual process id." + } +] diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_response_actions/response_actions_form.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_response_actions/response_actions_form.tsx index cefff7db70467..31b5f16c1a037 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_response_actions/response_actions_form.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_response_actions/response_actions_form.tsx @@ -53,14 +53,24 @@ export const ResponseActionsForm = ({ const fieldErrors = reduce>( map(items, 'path'), (acc, path) => { - if (fields[`${path}.params`]?.errors?.length) { - acc.push({ - type: upperFirst((fields[`${path}.actionTypeId`].value as string).substring(1)), - errors: map(fields[`${path}.params`].errors, 'message'), - }); - return acc; - } + map(fields, (_, name) => { + const paramsPath = `${path}.params`; + + if (name.includes(paramsPath)) { + if (fields[name]?.errors?.length) { + const responseActionType = upperFirst( + (fields[`${path}.actionTypeId`].value as string).substring(1) + ); + acc.push({ + type: responseActionType, + errors: map(fields[name].errors, 'message'), + }); + } + return acc; + } + return acc; + }); return acc; }, [] diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_response_actions/use_supported_response_action_types.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_response_actions/use_supported_response_action_types.tsx index 1d1346f9090c2..aed3d0302f05c 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_response_actions/use_supported_response_action_types.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_response_actions/use_supported_response_action_types.tsx @@ -17,8 +17,8 @@ export const useSupportedResponseActionTypes = () => { >(); const isEndpointEnabled = useIsExperimentalFeatureEnabled('endpointResponseActionsEnabled'); - const { canIsolateHost } = useUserPrivileges().endpointPrivileges; - + const { canIsolateHost, canKillProcess, canSuspendProcess } = + useUserPrivileges().endpointPrivileges; const enabledFeatures = useMemo( () => ({ endpoint: isEndpointEnabled, @@ -28,9 +28,9 @@ export const useSupportedResponseActionTypes = () => { const userHasPermissionsToExecute = useMemo( () => ({ - endpoint: canIsolateHost, + endpoint: canIsolateHost || canKillProcess || canSuspendProcess, }), - [canIsolateHost] + [canIsolateHost, canKillProcess, canSuspendProcess] ); useEffect(() => { 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 1948434b39c9f..38261547f8d27 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 @@ -11,7 +11,7 @@ import { closeAllToasts } from '../../tasks/toasts'; import { toggleRuleOffAndOn, visitRuleAlerts } from '../../tasks/isolate'; import { cleanupRule, loadRule } from '../../tasks/api_fixtures'; import { login } from '../../tasks/login'; -import { disableExpandableFlyoutAdvancedSettings, loadPage } from '../../tasks/common'; +import { loadPage } from '../../tasks/common'; import type { IndexedFleetEndpointPolicyResponse } from '../../../../../common/endpoint/data_loaders/index_fleet_endpoint_policy'; import { createAgentPolicyTask, getEndpointIntegrationVersion } from '../../tasks/fleet'; import { changeAlertsFilter } from '../../tasks/alerts'; @@ -23,14 +23,16 @@ import { enableAllPolicyProtections } from '../../tasks/endpoint_policy'; describe( 'Automated Response Actions', { - tags: [ - '@ess', - '@serverless', - // Not supported in serverless! - // The `disableExpandableFlyoutAdvancedSettings()` fails because the API - // `internal/kibana/settings` is not accessible in serverless - '@brokenInServerless', - ], + tags: ['@ess', '@serverless'], + env: { + ftrConfig: { + kbnServerArgs: [ + `--xpack.securitySolution.enableExperimental=${JSON.stringify([ + 'automatedProcessActionsEnabled', + ])}`, + ], + }, + }, }, () => { let indexedPolicy: IndexedFleetEndpointPolicyResponse; @@ -67,16 +69,11 @@ describe( } }); - const hostname = new URL(Cypress.env('FLEET_SERVER_URL')).port; - const fleetHostname = `dev-fleet-server.${hostname}`; - beforeEach(() => { login(); - disableExpandableFlyoutAdvancedSettings(); }); - // FLAKY: https://github.com/elastic/kibana/issues/169828 - describe.skip('From alerts', () => { + describe('From alerts', () => { let ruleId: string; let ruleName: string; @@ -102,18 +99,14 @@ describe( visitRuleAlerts(ruleName); closeAllToasts(); - changeAlertsFilter('event.category: "file"'); - cy.getByTestSubj('expand-event').first().click(); - cy.getByTestSubj('responseActionsViewTab').click(); - cy.getByTestSubj('response-actions-notification').should('not.have.text', '0'); - - cy.getByTestSubj(`response-results-${createdHost.hostname}-details-tray`) - .should('contain', 'isolate completed successfully') - .and('contain', createdHost.hostname); + changeAlertsFilter('process.name: "sshd"'); + cy.getByTestSubj('expand-event').eq(0).click(); + cy.getByTestSubj('securitySolutionFlyoutNavigationExpandDetailButton').click(); + cy.getByTestSubj('securitySolutionFlyoutResponseTab').click(); - cy.getByTestSubj(`response-results-${fleetHostname}-details-tray`) - .should('contain', 'The host does not have Elastic Defend integration installed') - .and('contain', 'dev-fleet-server'); + cy.contains(/isolate is pending|isolate completed successfully/g); + cy.contains(/kill-process is pending|kill-process completed successfully/g); + cy.contains('The action was called with a non-existing event field name: entity_id'); }); }); } diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/automated_response_actions/form.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/automated_response_actions/form.cy.ts index 27458ef09e15b..4fa0bb3b0c2e0 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/automated_response_actions/form.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/automated_response_actions/form.cy.ts @@ -17,22 +17,26 @@ import { cleanupRule, generateRandomStringName, loadRule } from '../../tasks/api import { ResponseActionTypesEnum } from '../../../../../common/api/detection_engine'; import { login, ROLE } from '../../tasks/login'; +export const RESPONSE_ACTIONS_ERRORS = 'response-actions-error'; + describe( 'Form', { - tags: [ - '@ess', - '@serverless', - - // Not supported in serverless! Test suite uses custom roles - '@brokenInServerless', - ], + tags: ['@ess', '@serverless'], + env: { + ftrConfig: { + kbnServerArgs: [ + `--xpack.securitySolution.enableExperimental=${JSON.stringify([ + 'automatedProcessActionsEnabled', + ])}`, + ], + }, + }, }, () => { - // FLAKY: https://github.com/elastic/kibana/issues/169334 - describe.skip('User with no access can not create an endpoint response action', () => { + describe('User with no access can not create an endpoint response action', () => { beforeEach(() => { - login(ROLE.endpoint_response_actions_no_access); + login(ROLE.rule_author); }); it('no endpoint response action option during rule creation', () => { @@ -43,11 +47,12 @@ describe( describe('User with access can create and save an endpoint response action', () => { const testedCommand = 'isolate'; + const secondTestedCommand = 'suspend-process'; let ruleId: string; const [ruleName, ruleDescription] = generateRandomStringName(2); beforeEach(() => { - login(ROLE.endpoint_response_actions_access); + login(ROLE.soc_manager); }); afterEach(() => { if (ruleId) { @@ -75,20 +80,53 @@ describe( }); cy.getByTestSubj(`command-type-${testedCommand}`).should('not.have.attr', 'disabled'); cy.getByTestSubj(`command-type-${testedCommand}`).click(); + + addEndpointResponseAction(); + focusAndOpenCommandDropdown(1); + cy.getByTestSubj(`command-type-${secondTestedCommand}`).click(); + cy.getByTestSubj('config-overwrite-toggle').click(); + cy.getByTestSubj('config-custom-field-name').should('have.value', ''); + cy.intercept('POST', '/api/detection_engine/rules', (request) => { - const result = { + const isolateResult = { action_type_id: ResponseActionTypesEnum['.endpoint'], params: { command: testedCommand, comment: 'example1', }, }; - expect(request.body.response_actions[0]).to.deep.equal(result); + const processResult = { + action_type_id: ResponseActionTypesEnum['.endpoint'], + params: { + command: secondTestedCommand, + comment: 'example1', + config: { + field: 'process.entity_id', + overwrite: false, + }, + }, + }; + expect(request.body.response_actions[0]).to.deep.equal(isolateResult); + expect(request.body.response_actions[1]).to.deep.equal(processResult); request.continue((response) => { ruleId = response.body.id; response.send(response.body); }); }); + cy.getByTestSubj(RESPONSE_ACTIONS_ERRORS).should('not.exist'); + + cy.getByTestSubj('create-enabled-false').click(); + + cy.getByTestSubj(RESPONSE_ACTIONS_ERRORS).within(() => { + cy.contains( + 'Custom field name is a required field when process.pid toggle is turned off' + ); + }); + + cy.getByTestSubj(`response-actions-list-item-1`).within(() => { + cy.getByTestSubj('config-custom-field-name').type('process.entity_id{downArrow}{enter}'); + }); + cy.getByTestSubj('create-enabled-false').click(); cy.contains(`${ruleName} was created`); }); @@ -97,11 +135,11 @@ describe( describe('User with access can edit and delete an endpoint response action', () => { let ruleId: string; let ruleName: string; - const testedCommand = 'isolate'; - const newDescription = 'Example isolate host description'; + const newDescription = 'Example suspend process description'; + const secondTestedCommand = 'suspend-process'; beforeEach(() => { - login(ROLE.endpoint_response_actions_access); + login(ROLE.soc_manager); loadRule().then((res) => { ruleId = res.id; ruleName = res.name; @@ -115,24 +153,30 @@ describe( visitRuleActions(ruleId); cy.getByTestSubj('edit-rule-actions-tab').click(); - cy.getByTestSubj(`response-actions-list-item-0`).within(() => { - cy.getByTestSubj('input').should('have.value', 'Isolate host'); - cy.getByTestSubj('input').should('have.value', 'Isolate host'); + cy.getByTestSubj(`response-actions-list-item-1`).within(() => { + cy.getByTestSubj('input').should('have.value', 'Suspend host'); cy.getByTestSubj('input').type(`{selectall}{backspace}${newDescription}`); - cy.getByTestSubj('commandTypeField').click(); + cy.getByTestSubj('config-overwrite-toggle').click(); + cy.getByTestSubj('config-custom-field-name').should('have.value', ''); + cy.getByTestSubj('config-overwrite-toggle').click(); + cy.getByTestSubj('config-custom-field-name').type('process.entity_id{downArrow}{enter}'); }); - validateAvailableCommands(); + cy.intercept('PUT', '/api/detection_engine/rules').as('updateResponseAction'); cy.getByTestSubj('ruleEditSubmitButton').click(); cy.wait('@updateResponseAction').should(({ request }) => { const query = { - action_type_id: ResponseActionTypesEnum['.endpoint'], params: { - command: testedCommand, + command: secondTestedCommand, comment: newDescription, + config: { + field: 'process.entity_id', + overwrite: false, + }, }, + action_type_id: ResponseActionTypesEnum['.endpoint'], }; - expect(request.body.response_actions[0]).to.deep.equal(query); + expect(request.body.response_actions[1]).to.deep.equal(query); }); cy.contains(`${ruleName} was saved`).should('exist'); }); @@ -147,7 +191,7 @@ describe( cy.intercept('PUT', '/api/detection_engine/rules').as('deleteResponseAction'); cy.getByTestSubj('ruleEditSubmitButton').click(); cy.wait('@deleteResponseAction').should(({ request }) => { - expect(request.body.response_actions).to.be.equal(undefined); + expect(request.body.response_actions.length).to.be.equal(2); }); cy.contains(`${ruleName} was saved`).should('exist'); }); @@ -157,9 +201,10 @@ describe( const [ruleName, ruleDescription] = generateRandomStringName(2); beforeEach(() => { - login(ROLE.endpoint_response_actions_no_access); + login(ROLE.rule_author); }); + // let currentUrl it('response actions are disabled', () => { fillUpNewRule(ruleName, ruleDescription); cy.getByTestSubj('response-actions-wrapper').within(() => { @@ -174,7 +219,7 @@ describe( let ruleId: string; beforeEach(() => { - login(ROLE.endpoint_response_actions_no_access); + login(ROLE.rule_author); loadRule().then((res) => { ruleId = res.id; }); @@ -200,8 +245,8 @@ describe( // Try removing action cy.getByTestSubj('remove-response-action').click({ force: true }); }); - cy.getByTestSubj(`response-actions-list-item-0`).should('exist'); - tryAddingDisabledResponseAction(1); + cy.getByTestSubj(`response-actions-list-item-2`).should('exist'); + tryAddingDisabledResponseAction(3); }); }); } diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/automated_response_actions/no_license.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/automated_response_actions/no_license.cy.ts index d1449672bed26..d120459b64ea3 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/automated_response_actions/no_license.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/automated_response_actions/no_license.cy.ts @@ -6,7 +6,6 @@ */ import { navigateToAlertsList } from '../../screens/alerts'; -import { disableExpandableFlyoutAdvancedSettings } from '../../tasks/common'; import { closeAllToasts } from '../../tasks/toasts'; import { fillUpNewRule } from '../../tasks/response_actions'; import { login, ROLE } from '../../tasks/login'; @@ -39,7 +38,6 @@ describe('No License', { tags: '@ess', env: { ftrConfig: { license: 'basic' } } const [endpointAgentId, endpointHostname] = generateRandomStringName(2); beforeEach(() => { login(); - disableExpandableFlyoutAdvancedSettings(); indexEndpointRuleAlerts({ endpointAgentId, endpointHostname, @@ -73,8 +71,8 @@ describe('No License', { tags: '@ess', env: { ftrConfig: { license: 'basic' } } navigateToAlertsList(`query=(language:kuery,query:'agent.id: "${endpointAgentId}" ')`); closeAllToasts(); cy.getByTestSubj('expand-event').first().click(); - cy.getByTestSubj('response-actions-notification').should('not.have.text', '0'); - cy.getByTestSubj('responseActionsViewTab').click(); + cy.getByTestSubj('securitySolutionFlyoutNavigationExpandDetailButton').click(); + cy.getByTestSubj('securitySolutionFlyoutResponseTab').click(); cy.contains('Permission denied'); cy.contains( 'To access these results, ask your administrator for Elastic Defend Kibana privileges.' diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/automated_response_actions/results.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/automated_response_actions/results.cy.ts index 10272e5600583..344c4b0b3bd21 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/automated_response_actions/results.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/automated_response_actions/results.cy.ts @@ -5,9 +5,8 @@ * 2.0. */ -import { disableExpandableFlyoutAdvancedSettings } from '../../tasks/common'; +import { navigateToAlertsList } from '../../screens/alerts'; import { generateRandomStringName } from '../../tasks/utils'; -import { APP_ALERTS_PATH } from '../../../../../common/constants'; import { closeAllToasts } from '../../tasks/toasts'; import { indexEndpointHosts } from '../../tasks/index_endpoint_hosts'; import type { ReturnTypeFromChainable } from '../../types'; @@ -50,57 +49,36 @@ describe('Results', { tags: ['@ess', '@serverless'] }, () => { } }); - describe( - 'see results when has RBAC', - { - // Not supported in serverless! - // The `disableExpandableFlyoutAdvancedSettings()` fails because the API - // `internal/kibana/settings` is not accessible in serverless - tags: ['@brokenInServerless'], - }, - () => { - before(() => { - login(ROLE.endpoint_response_actions_access); - disableExpandableFlyoutAdvancedSettings(); - }); + describe('see results when has RBAC', () => { + before(() => { + login(ROLE.soc_manager); + }); - it('see endpoint action', () => { - cy.visit(APP_ALERTS_PATH); - closeAllToasts(); - cy.getByTestSubj('expand-event').first().click(); - cy.getByTestSubj('response-actions-notification').should('not.have.text', '0'); - cy.getByTestSubj('responseActionsViewTab').click(); - cy.getByTestSubj('endpoint-results-comment'); - cy.contains(/isolate is pending|isolate completed successfully/g); - }); - } - ); - describe( - 'do not see results results when does not have RBAC', - { - // Not supported in serverless! - // The `disableExpandableFlyoutAdvancedSettings()` fails because the API - // `internal/kibana/settings` is not accessible in serverless - tags: ['@brokenInServerless'], - }, - () => { - before(() => { - login(ROLE.endpoint_response_actions_no_access); - disableExpandableFlyoutAdvancedSettings(); - }); + it('see endpoint action', () => { + navigateToAlertsList(`query=(language:kuery,query:'_id: ${alertData?.alerts[0]._id}')`); + closeAllToasts(); + cy.getByTestSubj('expand-event').first().click(); + cy.getByTestSubj('securitySolutionFlyoutNavigationExpandDetailButton').click(); + cy.getByTestSubj('securitySolutionFlyoutResponseTab').click(); + cy.contains(/isolate is pending|isolate completed successfully/g); + }); + }); + describe('do not see results results when does not have RBAC', () => { + before(() => { + login(ROLE.t1_analyst); + }); - it('show the permission denied callout', () => { - cy.visit(APP_ALERTS_PATH); - closeAllToasts(); + it('show the permission denied callout', () => { + navigateToAlertsList(`query=(language:kuery,query:'_id: ${alertData?.alerts[0]._id}')`); + closeAllToasts(); - cy.getByTestSubj('expand-event').first().click(); - cy.getByTestSubj('response-actions-notification').should('not.have.text', '0'); - cy.getByTestSubj('responseActionsViewTab').click(); - cy.contains('Permission denied'); - cy.contains( - 'To access these results, ask your administrator for Elastic Defend Kibana privileges.' - ); - }); - } - ); + cy.getByTestSubj('expand-event').first().click(); + cy.getByTestSubj('securitySolutionFlyoutNavigationExpandDetailButton').click(); + cy.getByTestSubj('securitySolutionFlyoutResponseTab').click(); + cy.contains('Permission denied'); + cy.contains( + 'To access these results, ask your administrator for Elastic Defend Kibana privileges.' + ); + }); + }); }); diff --git a/x-pack/plugins/security_solution/public/management/cypress/tasks/api_fixtures.ts b/x-pack/plugins/security_solution/public/management/cypress/tasks/api_fixtures.ts index c948062c994c0..1bd0e5652b442 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/tasks/api_fixtures.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/tasks/api_fixtures.ts @@ -69,6 +69,28 @@ export const loadRule = (body = {}, includeResponseActions = true) => params: { command: 'isolate', comment: 'Isolate host' }, action_type_id: '.endpoint', }, + { + params: { + command: 'suspend-process', + comment: 'Suspend host', + config: { + field: 'entity_id', + overwrite: false, + }, + }, + action_type_id: '.endpoint', + }, + { + params: { + command: 'kill-process', + comment: 'Kill host', + config: { + field: '', + overwrite: true, + }, + }, + action_type_id: '.endpoint', + }, ], } : {}), diff --git a/x-pack/plugins/security_solution/public/management/cypress/tasks/response_actions.ts b/x-pack/plugins/security_solution/public/management/cypress/tasks/response_actions.ts index 126d637f07edb..a03d5a2ed483d 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/tasks/response_actions.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/tasks/response_actions.ts @@ -25,11 +25,19 @@ import type { ResponseActionsApiCommandNames } from '../../../../common/endpoint import { ENABLED_AUTOMATED_RESPONSE_ACTION_COMMANDS } from '../../../../common/endpoint/service/response_actions/constants'; export const validateAvailableCommands = () => { - cy.get('[data-test-subj^="command-type"]').should( - 'have.length', - ENABLED_AUTOMATED_RESPONSE_ACTION_COMMANDS.length - ); - ENABLED_AUTOMATED_RESPONSE_ACTION_COMMANDS.forEach((command) => { + // TODO: TC- use ENABLED_AUTOMATED_RESPONSE_ACTION_COMMANDS when we go GA with automated process actions + const config = Cypress.config(); + const automatedActionsPAttern = /automatedProcessActionsEnabled/; + const automatedProcessActionsEnabled = + config.env.ftrConfig.kbnServerArgs[0].match(automatedActionsPAttern); + + const enabledActions = [ + ...ENABLED_AUTOMATED_RESPONSE_ACTION_COMMANDS, + ...(automatedProcessActionsEnabled ? ['kill-process', 'suspend-process'] : []), + ]; + + cy.get('[data-test-subj^="command-type"]').should('have.length', enabledActions.length); + enabledActions.forEach((command) => { cy.getByTestSubj(`command-type-${command}`); }); }; diff --git a/x-pack/plugins/security_solution/public/management/hooks/response_actions/use_get_automated_action_list.ts b/x-pack/plugins/security_solution/public/management/hooks/response_actions/use_get_automated_action_list.ts index 03828cba319c2..27b46eddeb042 100644 --- a/x-pack/plugins/security_solution/public/management/hooks/response_actions/use_get_automated_action_list.ts +++ b/x-pack/plugins/security_solution/public/management/hooks/response_actions/use_get_automated_action_list.ts @@ -151,7 +151,7 @@ const combineResponse = ( return { id: action.EndpointActions.action_id, - agents: action.agent.id as string[], + agents: Array.isArray(action.agent.id) ? action.agent.id : [action.agent.id], agentType: 'endpoint', parameters, ...(alertId?.length ? { alertIds: alertId } : {}), @@ -169,7 +169,7 @@ const combineResponse = ( completedAt: responseData?.completedAt, isCompleted: !!responseData?.isCompleted, isExpired: !!responseData?.isExpired, - wasSuccessful: !!responseData?.isCompleted, + wasSuccessful: responseData.status === 'successful', status: responseData.status, agentState: {}, errors: action.error ? [action.error.message as string] : undefined, diff --git a/x-pack/plugins/security_solution/public/plugin.tsx b/x-pack/plugins/security_solution/public/plugin.tsx index b5e69d9eeada3..edda193f502fc 100644 --- a/x-pack/plugins/security_solution/public/plugin.tsx +++ b/x-pack/plugins/security_solution/public/plugin.tsx @@ -59,6 +59,7 @@ import type { SecurityAppStore } from './common/store/types'; import { PluginContract } from './plugin_contract'; import { TopValuesPopoverService } from './app/components/top_values_popover/top_values_popover_service'; import { parseConfigSettings, type ConfigSettings } from '../common/config_settings'; +import { getExternalReferenceAttachmentEndpointRegular } from './cases/attachments/external_reference'; export class Plugin implements IPlugin { /** @@ -108,6 +109,7 @@ export class Plugin implements IPlugin(); private storage = new Storage(localStorage); @@ -272,6 +274,10 @@ export class Plugin implements IPlugin { id: '123-456', }, }, + agent: { + id: '123-456', + }, + host: { + hostname: 'test-host', + }, }, ]), }); @@ -1215,6 +1221,12 @@ describe('Response actions', () => { id: '123-456', }, }, + agent: { + id: '123-456', + }, + host: { + hostname: 'test-host', + }, }, ]), }); diff --git a/x-pack/plugins/security_solution/server/endpoint/services/actions/clients/endpoint_actions_client.ts b/x-pack/plugins/security_solution/server/endpoint/services/actions/clients/endpoint_actions_client.ts index 2acc6dec8f2a2..9e3c158033835 100644 --- a/x-pack/plugins/security_solution/server/endpoint/services/actions/clients/endpoint_actions_client.ts +++ b/x-pack/plugins/security_solution/server/endpoint/services/actions/clients/endpoint_actions_client.ts @@ -5,13 +5,11 @@ * 2.0. */ -import { stringify } from '../../../utils/stringify'; import type { HapiReadableStream } from '../../../../types'; import type { ResponseActionsApiCommandNames, ResponseActionAgentType, } from '../../../../../common/endpoint/service/response_actions/constants'; -import { updateCases } from '../create/update_cases'; import type { CreateActionPayload } from '../create/types'; import type { ExecuteActionRequestBody, @@ -36,6 +34,8 @@ import type { ResponseActionUploadOutputContent, ResponseActionUploadParameters, SuspendProcessActionOutputContent, + ImmutableObject, + HostMetadataInterface, } from '../../../../../common/endpoint/types'; export class EndpointActionsClient extends ResponseActionsClientImpl { @@ -80,16 +80,19 @@ export class EndpointActionsClient extends ResponseActionsClientImpl { .getActionCreateService() .createAction(createPayload, agentIds.valid); - try { - await updateCases({ - casesClient: this.options.casesClient, - endpointData: agentIds.hosts, - createActionPayload: createPayload, - }); - } catch (err) { - // failures during update of cases should not cause the response action to fail. Just log error - this.log.warn(`failed to update cases: ${err.message}\n${stringify(err)}`); - } + await this.updateCases({ + command, + comment: options.comment, + caseIds: options.case_ids, + alertIds: options.alert_ids, + actionId: response.id, + hosts: agentIds.hosts.map((endpoint: ImmutableObject) => { + return { + hostId: endpoint.agent.id, + hostname: endpoint.host.hostname, + }; + }), + }); return response as TResponse; } diff --git a/x-pack/plugins/security_solution/server/endpoint/services/actions/clients/lib/base_response_actions_client.test.ts b/x-pack/plugins/security_solution/server/endpoint/services/actions/clients/lib/base_response_actions_client.test.ts index aaceb2d6aef75..f23bafe0f22a0 100644 --- a/x-pack/plugins/security_solution/server/endpoint/services/actions/clients/lib/base_response_actions_client.test.ts +++ b/x-pack/plugins/security_solution/server/endpoint/services/actions/clients/lib/base_response_actions_client.test.ts @@ -120,6 +120,7 @@ describe('ResponseActionsClientImpl base class', () => { caseIds: ['case-999'], alertIds: [KNOWN_ALERT_ID_1, KNOWN_ALERT_ID_2, KNOWN_ALERT_ID_3], comment: 'this is a case comment', + actionId: 'action-123', hosts: [ { hostId: '1-2-3', @@ -201,76 +202,29 @@ describe('ResponseActionsClientImpl base class', () => { expect(casesClient.attachments.bulkCreate).toHaveBeenLastCalledWith({ attachments: [ { - actions: { - targets: [ - { - endpointId: '1-2-3', - hostname: 'foo-one', - }, - { - endpointId: '4-5-6', - hostname: 'foo-two', - }, - ], - type: 'isolate', - }, - comment: 'this is a case comment', + externalReferenceAttachmentTypeId: 'endpoint', + externalReferenceId: 'action-123', owner: 'securitySolution', - type: 'actions', - }, - { - actions: { - targets: [ - { - endpointId: '1-2-3', - hostname: 'foo-one', - }, - { - endpointId: '4-5-6', - hostname: 'foo-two', - }, - ], - type: 'isolate', - }, - comment: 'this is a case comment', - owner: 'securitySolution', - type: 'actions', - }, - { - actions: { - targets: [ - { - endpointId: '1-2-3', - hostname: 'foo-one', - }, - { - endpointId: '4-5-6', - hostname: 'foo-two', - }, - ], - type: 'isolate', + externalReferenceStorage: { + type: 'elasticSearchDoc', }, - comment: 'this is a case comment', - owner: 'securitySolution', - type: 'actions', - }, - { - actions: { + type: 'externalReference', + externalReferenceMetadata: { + command: 'isolate', + comment: 'this is a case comment', targets: [ { endpointId: '1-2-3', hostname: 'foo-one', + agentType: 'endpoint', }, { endpointId: '4-5-6', hostname: 'foo-two', + agentType: 'endpoint', }, ], - type: 'isolate', }, - comment: 'this is a case comment', - owner: 'securitySolution', - type: 'actions', }, ], caseId: 'case-3', @@ -280,7 +234,7 @@ describe('ResponseActionsClientImpl base class', () => { it('should not error if update to a case fails', async () => { (casesClient.attachments.bulkCreate as jest.Mock).mockImplementation(async (options) => { if (options.caseId === 'case-2') { - throw new Error('update filed to case-2'); + throw new Error('update failed to case-2'); } }); await baseClassMock.updateCases(updateCasesOptions); diff --git a/x-pack/plugins/security_solution/server/endpoint/services/actions/clients/lib/base_response_actions_client.ts b/x-pack/plugins/security_solution/server/endpoint/services/actions/clients/lib/base_response_actions_client.ts index 68e8db5fa1e69..356b9f129f79e 100644 --- a/x-pack/plugins/security_solution/server/endpoint/services/actions/clients/lib/base_response_actions_client.ts +++ b/x-pack/plugins/security_solution/server/endpoint/services/actions/clients/lib/base_response_actions_client.ts @@ -9,8 +9,9 @@ import type { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; import type { CasesClient } from '@kbn/cases-plugin/server'; import type { Logger } from '@kbn/logging'; import { v4 as uuidv4 } from 'uuid'; -import { AttachmentType } from '@kbn/cases-plugin/common'; -import type { BulkCreateArgs } from '@kbn/cases-plugin/server/client/attachments/types'; +import { AttachmentType, ExternalReferenceStorageType } from '@kbn/cases-plugin/common'; +import type { CaseAttachments } from '@kbn/cases-plugin/public/types'; + import type { EndpointAppContextService } from '../../../../endpoint_app_context_services'; import { APP_ID } from '../../../../../../common'; import type { @@ -57,6 +58,8 @@ import type { } from '../../../../../../common/api/endpoint'; import type { CreateActionPayload } from '../../create/types'; import { stringify } from '../../../../utils/stringify'; +import { CASE_ATTACHMENT_ENDPOINT_TYPE_ID } from '../../../../../../common/constants'; +import { EMPTY_COMMENT } from '../../../../utils/translations'; export interface ResponseActionsClientOptions { endpointService: EndpointAppContextService; @@ -79,6 +82,8 @@ export interface ResponseActionsClientUpdateCasesOptions { alertIds?: string[]; /** Comment to include in the Case attachment */ comment?: string; + /** The id of the action that was taken */ + actionId: string; } export type ResponseActionsClientWriteActionRequestToEndpointIndexOptions = @@ -119,6 +124,7 @@ export abstract class ResponseActionsClientImpl implements ResponseActionsClient caseIds = [], alertIds = [], comment = '', + actionId, }: ResponseActionsClientUpdateCasesOptions): Promise { if (caseIds.length === 0 && alertIds.length === 0) { this.log.debug(`Nothing to do. 'caseIds' and 'alertIds' are empty`); @@ -166,32 +172,43 @@ export abstract class ResponseActionsClientImpl implements ResponseActionsClient this.log.debug(`Updating cases:\n${stringify(allCases)}`); - // Create an attachment for each case that includes info. about the response actions taken against the hosts - const attachments = allCases.map(() => ({ - type: AttachmentType.actions, - comment, - actions: { - targets: hosts.map(({ hostId: endpointId, hostname }) => ({ endpointId, hostname })), - type: command, + const attachments: CaseAttachments = [ + { + type: AttachmentType.externalReference, + externalReferenceId: actionId, + externalReferenceStorage: { + type: ExternalReferenceStorageType.elasticSearchDoc, + }, + externalReferenceAttachmentTypeId: CASE_ATTACHMENT_ENDPOINT_TYPE_ID, + externalReferenceMetadata: { + targets: hosts.map(({ hostId: endpointId, hostname }) => { + return { + endpointId, + hostname, + agentType: this.agentType, + }; + }), + command, + comment: comment || EMPTY_COMMENT, + }, + owner: APP_ID, }, - owner: APP_ID, - })) as BulkCreateArgs['attachments']; + ]; const casesUpdateResponse = await Promise.all( - allCases.map((caseId) => - casesClient.attachments - .bulkCreate({ + allCases.map(async (caseId) => { + try { + return await casesClient.attachments.bulkCreate({ caseId, attachments, - }) - .catch((err) => { - // Log any error, BUT: do not fail execution - this.log.warn( - `Attempt to update case ID [${caseId}] failed: ${err.message}\n${stringify(err)}` - ); - return null; - }) - ) + }); + } catch (err) { + this.log.warn( + `Attempt to update case ID [${caseId}] failed: ${err.message}\n${stringify(err)}` + ); + return null; + } + }) ); this.log.debug(`Update to cases done:\n${stringify(casesUpdateResponse)}`); diff --git a/x-pack/plugins/security_solution/server/endpoint/services/actions/clients/sentinelone/sentinel_one_actions_client.ts b/x-pack/plugins/security_solution/server/endpoint/services/actions/clients/sentinelone/sentinel_one_actions_client.ts index d196232e83916..dfac74fc8a407 100644 --- a/x-pack/plugins/security_solution/server/endpoint/services/actions/clients/sentinelone/sentinel_one_actions_client.ts +++ b/x-pack/plugins/security_solution/server/endpoint/services/actions/clients/sentinelone/sentinel_one_actions_client.ts @@ -182,11 +182,10 @@ export class SentinelOneActionsClient extends ResponseActionsClientImpl { await this.validateRequest(options); await this.sendAction(SUB_ACTION.ISOLATE_HOST, { uuid: options.endpoint_ids[0] }); - const reqIndexOptions: ResponseActionsClientWriteActionRequestToEndpointIndexOptions = { + const actionRequestDoc = await this.writeActionRequestToEndpointIndex({ ...options, command: 'isolate', - }; - const actionRequestDoc = await this.writeActionRequestToEndpointIndex(reqIndexOptions); + }); await this.writeActionResponseToEndpointIndex({ actionId: actionRequestDoc.EndpointActions.action_id, agentId: actionRequestDoc.agent.id, @@ -194,6 +193,19 @@ export class SentinelOneActionsClient extends ResponseActionsClientImpl { command: actionRequestDoc.EndpointActions.data.command, }, }); + await this.updateCases({ + command: 'isolate', + caseIds: options.case_ids, + alertIds: options.alert_ids, + hosts: options.endpoint_ids.map((agentId) => { + return { + hostId: agentId, + hostname: actionRequestDoc.EndpointActions.data.hosts?.[agentId].name ?? '', + }; + }), + comment: options.comment, + actionId: actionRequestDoc.EndpointActions.action_id, + }); return this.fetchActionDetails(actionRequestDoc.EndpointActions.action_id); } @@ -216,6 +228,19 @@ export class SentinelOneActionsClient extends ResponseActionsClientImpl { command: actionRequestDoc.EndpointActions.data.command, }, }); + await this.updateCases({ + command: 'unisolate', + caseIds: options.case_ids, + alertIds: options.alert_ids, + hosts: options.endpoint_ids.map((agentId) => { + return { + hostId: agentId, + hostname: actionRequestDoc.EndpointActions.data.hosts?.[agentId].name ?? '', + }; + }), + comment: options.comment, + actionId: actionRequestDoc.EndpointActions.action_id, + }); return this.fetchActionDetails(actionRequestDoc.EndpointActions.action_id); } diff --git a/x-pack/plugins/security_solution/server/endpoint/services/actions/create/action_errors.ts b/x-pack/plugins/security_solution/server/endpoint/services/actions/create/action_errors.ts index bb17cb2c5ac8a..8f68072e95707 100644 --- a/x-pack/plugins/security_solution/server/endpoint/services/actions/create/action_errors.ts +++ b/x-pack/plugins/security_solution/server/endpoint/services/actions/create/action_errors.ts @@ -7,17 +7,19 @@ import type { LicenseType } from '@kbn/licensing-plugin/common/types'; import type { EcsError } from '@kbn/ecs'; -import { validateAgents, validateEndpointLicense } from './validate'; +import { validateAgents, validateAlertError, validateEndpointLicense } from './validate'; import type { LicenseService } from '../../../../../common/license/license'; export const addErrorsToActionIfAny = ({ agents, licenseService, minimumLicenseRequired = 'basic', + error, }: { agents: string[]; licenseService: LicenseService; minimumLicenseRequired: LicenseType; + error?: string; }): | { error: { @@ -28,7 +30,8 @@ export const addErrorsToActionIfAny = ({ | undefined => { const licenseError = validateEndpointLicense(licenseService, minimumLicenseRequired); const agentsError = validateAgents(agents); - const alertActionError = licenseError || agentsError; + const actionError = validateAlertError(error); + const alertActionError = licenseError || agentsError || actionError; if (alertActionError) { return { diff --git a/x-pack/plugins/security_solution/server/endpoint/services/actions/create/update_cases.ts b/x-pack/plugins/security_solution/server/endpoint/services/actions/create/update_cases.ts deleted file mode 100644 index 7032a0d7b4725..0000000000000 --- a/x-pack/plugins/security_solution/server/endpoint/services/actions/create/update_cases.ts +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import type { GetRelatedCasesByAlertResponse } from '@kbn/cases-plugin/common'; -import { AttachmentType } from '@kbn/cases-plugin/common'; -import type { CasesClient } from '@kbn/cases-plugin/server'; -import type { BulkCreateArgs } from '@kbn/cases-plugin/server/client/attachments/types'; -import { i18n } from '@kbn/i18n'; -import { APP_ID } from '../../../../../common'; -import type { - ImmutableObject, - HostMetadataInterface, - HostMetadata, -} from '../../../../../common/endpoint/types'; -import type { CreateActionPayload } from './types'; - -export const updateCases = async ({ - casesClient, - createActionPayload, - endpointData, -}: { - casesClient?: CasesClient; - createActionPayload: CreateActionPayload; - endpointData: Array>; -}): Promise => { - if (!casesClient) { - return; - } - // convert any alert IDs into cases - let caseIDs: string[] = createActionPayload.case_ids?.slice() || []; - if (createActionPayload.alert_ids && createActionPayload.alert_ids.length > 0) { - const newIDs: string[][] = await Promise.all( - createActionPayload.alert_ids.map(async (alertID: string) => { - const cases: GetRelatedCasesByAlertResponse = await casesClient.cases.getCasesByAlertID({ - alertID, - options: { owner: APP_ID }, - }); - return cases.map((caseInfo): string => { - return caseInfo.id; - }); - }) - ); - caseIDs = caseIDs.concat(...newIDs); - } - caseIDs = [...new Set(caseIDs)]; - - // Update all cases with a comment - if (caseIDs.length > 0) { - const targets = endpointData.map((endpoint: HostMetadata) => ({ - hostname: endpoint.host.hostname, - endpointId: endpoint.agent.id, - })); - - const attachments = caseIDs.map(() => ({ - type: AttachmentType.actions, - comment: createActionPayload.comment || EMPTY_COMMENT, - actions: { - targets, - type: createActionPayload.command, - }, - owner: APP_ID, - })) as BulkCreateArgs['attachments']; - - await Promise.all( - caseIDs.map((caseId) => - casesClient.attachments.bulkCreate({ - caseId, - attachments, - }) - ) - ); - } -}; - -export const EMPTY_COMMENT = i18n.translate( - 'xpack.securitySolution.endpoint.updateCases.emptyComment', - { - defaultMessage: 'No comment provided', - } -); diff --git a/x-pack/plugins/security_solution/server/endpoint/services/actions/create/validate.ts b/x-pack/plugins/security_solution/server/endpoint/services/actions/create/validate.ts index 5a6fd84989109..cb831021501c3 100644 --- a/x-pack/plugins/security_solution/server/endpoint/services/actions/create/validate.ts +++ b/x-pack/plugins/security_solution/server/endpoint/services/actions/create/validate.ts @@ -9,7 +9,10 @@ import { i18n } from '@kbn/i18n'; import type { LicenseType } from '@kbn/licensing-plugin/server'; import type { LicenseService } from '../../../../../common/license'; -export const validateEndpointLicense = (license: LicenseService, licenseType: LicenseType) => { +export const validateEndpointLicense = ( + license: LicenseService, + licenseType: LicenseType +): string | undefined => { const hasEnterpriseLicense = license.isAtLeast(licenseType); if (!hasEnterpriseLicense) { @@ -17,12 +20,18 @@ export const validateEndpointLicense = (license: LicenseService, licenseType: Li } }; -export const validateAgents = (agents: string[]) => { +export const validateAgents = (agents: string[]): string | undefined => { if (!agents.length) { return HOST_NOT_ENROLLED; } }; +export const validateAlertError = (field?: string): string | undefined => { + if (field) { + return FIELD_NOT_EXIST(field); + } +}; + export const LICENSE_TOO_LOW = i18n.translate( 'xpack.securitySolution.responseActionsList.error.licenseTooLow', { @@ -36,3 +45,9 @@ export const HOST_NOT_ENROLLED = i18n.translate( defaultMessage: 'The host does not have Elastic Defend integration installed', } ); + +export const FIELD_NOT_EXIST = (field: string): string => + i18n.translate('xpack.securitySolution.responseActionsList.error.nonExistingFieldName', { + defaultMessage: 'The action was called with a non-existing event field name: {field}', + values: { field }, + }); diff --git a/x-pack/plugins/security_solution/server/endpoint/services/actions/create/write_action_to_indices.ts b/x-pack/plugins/security_solution/server/endpoint/services/actions/create/write_action_to_indices.ts index a0626b2e4d883..3e86e8fa9625c 100644 --- a/x-pack/plugins/security_solution/server/endpoint/services/actions/create/write_action_to_indices.ts +++ b/x-pack/plugins/security_solution/server/endpoint/services/actions/create/write_action_to_indices.ts @@ -72,6 +72,7 @@ export const writeActionToIndices = async ({ agents, licenseService, minimumLicenseRequired, + error: payload.error, }), ...addRuleInfoToAction(payload), }; diff --git a/x-pack/plugins/security_solution/server/endpoint/utils/translations.ts b/x-pack/plugins/security_solution/server/endpoint/utils/translations.ts new file mode 100644 index 0000000000000..1b904bf49af15 --- /dev/null +++ b/x-pack/plugins/security_solution/server/endpoint/utils/translations.ts @@ -0,0 +1,15 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; + +export const EMPTY_COMMENT = i18n.translate( + 'xpack.securitySolution.endpoint.updateCases.emptyComment', + { + defaultMessage: 'No comment provided', + } +); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/create_rule/route.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/create_rule/route.test.ts index f45f005c7c34b..5abdc9b4904e4 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/create_rule/route.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/create_rule/route.test.ts @@ -181,11 +181,12 @@ describe('Create rule route', () => { // @ts-expect-error We're writting to a read only property just for the purpose of the test clients.config.experimentalFeatures.endpointResponseActionsEnabled = true; }); - const getResponseAction = (command: string = 'isolate') => ({ + const getResponseAction = (command: string = 'isolate', config?: object) => ({ action_type_id: '.endpoint', params: { command, comment: '', + ...(config ? { config } : {}), }, }); const defaultAction = getResponseAction(); @@ -224,8 +225,38 @@ describe('Create rule route', () => { 'User is not authorized to change isolate response actions' ); }); + test('pass when provided with process action', async () => { + const processAction = getResponseAction('kill-process', { overwrite: true, field: '' }); + + const request = requestMock.create({ + method: 'post', + path: DETECTION_ENGINE_RULES_URL, + body: { + ...getCreateRulesSchemaMock(), + response_actions: [processAction], + }, + }); + const result = await server.validate(request); + expect(result.badRequest).not.toHaveBeenCalled(); + }); test('fails when provided with an unsupported command', async () => { - const wrongAction = getResponseAction('processes'); + const wrongAction = getResponseAction('execute'); + + const request = requestMock.create({ + method: 'post', + path: DETECTION_ENGINE_RULES_URL, + body: { + ...getCreateRulesSchemaMock(), + response_actions: [wrongAction], + }, + }); + const result = await server.validate(request); + expect(result.badRequest).toHaveBeenCalledWith( + `response_actions.0.action_type_id: Invalid literal value, expected \".osquery\", response_actions.0.params.command: Invalid literal value, expected \"isolate\", response_actions.0.params.command: Invalid enum value. Expected 'kill-process' | 'suspend-process', received 'execute', response_actions.0.params.config: Required` + ); + }); + test('fails when provided with payload missing data', async () => { + const wrongAction = getResponseAction('kill-process', { overwrite: true }); const request = requestMock.create({ method: 'post', @@ -237,7 +268,7 @@ describe('Create rule route', () => { }); const result = await server.validate(request); expect(result.badRequest).toHaveBeenCalledWith( - 'response_actions.0.action_type_id: Invalid literal value, expected ".osquery", response_actions.0.params.command: Invalid literal value, expected "isolate"' + `response_actions.0.action_type_id: Invalid literal value, expected \".osquery\", response_actions.0.params.command: Invalid literal value, expected \"isolate\", response_actions.0.params.config.field: Required` ); }); }); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/update_rule/route.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/update_rule/route.test.ts index 6bdafa76fd9b6..4eea0dc1797d5 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/update_rule/route.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/update_rule/route.test.ts @@ -23,7 +23,7 @@ import { getUpdateRulesSchemaMock, } from '../../../../../../../common/api/detection_engine/model/rule_schema/mocks'; import { getQueryRuleParams } from '../../../../rule_schema/mocks'; -import { ResponseActionTypesEnum } from '../../../../../../../common/api/detection_engine/model/rule_response_actions'; +import { ResponseActionTypesEnum } from '../../../../../../../common/api/detection_engine'; jest.mock('../../../../../machine_learning/authz'); @@ -189,11 +189,12 @@ describe('Update rule route', () => { // @ts-expect-error We're writting to a read only property just for the purpose of the test clients.config.experimentalFeatures.endpointResponseActionsEnabled = true; }); - const getResponseAction = (command: string = 'isolate') => ({ + const getResponseAction = (command: string = 'isolate', config?: object) => ({ action_type_id: '.endpoint', params: { command, comment: '', + ...(config ? { config } : {}), }, }); const defaultAction = getResponseAction(); @@ -249,6 +250,7 @@ describe('Update rule route', () => { params: { command: 'isolate', comment: '', + config: undefined, }, }, ], @@ -272,7 +274,7 @@ describe('Update rule route', () => { ); }); test('fails when provided with an unsupported command', async () => { - const wrongAction = getResponseAction('processes'); + const wrongAction = getResponseAction('execute'); const request = requestMock.create({ method: 'post', @@ -284,7 +286,23 @@ describe('Update rule route', () => { }); const result = await server.validate(request); expect(result.badRequest).toHaveBeenCalledWith( - `response_actions.0.action_type_id: Invalid literal value, expected \".osquery\", response_actions.0.params.command: Invalid literal value, expected \"isolate\"` + `response_actions.0.action_type_id: Invalid literal value, expected \".osquery\", response_actions.0.params.command: Invalid literal value, expected \"isolate\", response_actions.0.params.command: Invalid enum value. Expected 'kill-process' | 'suspend-process', received 'execute', response_actions.0.params.config: Required` + ); + }); + test('fails when provided with payload missing data', async () => { + const wrongAction = getResponseAction('kill-process', { overwrite: true }); + + const request = requestMock.create({ + method: 'post', + path: DETECTION_ENGINE_RULES_URL, + body: { + ...getCreateRulesSchemaMock(), + response_actions: [wrongAction], + }, + }); + const result = await server.validate(request); + expect(result.badRequest).toHaveBeenCalledWith( + `response_actions.0.action_type_id: Invalid literal value, expected \".osquery\", response_actions.0.params.command: Invalid literal value, expected \"isolate\", response_actions.0.params.config.field: Required` ); }); }); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_response_actions/endpoint_params_type_guards.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_response_actions/endpoint_params_type_guards.ts new file mode 100644 index 0000000000000..d1dbb9c7d4958 --- /dev/null +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_response_actions/endpoint_params_type_guards.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 type { + DefaultParams, + ProcessesParams, + RuleResponseEndpointAction, +} from '../../../../common/api/detection_engine'; + +export const isIsolateAction = ( + params: RuleResponseEndpointAction['params'] +): params is DefaultParams => { + return params.command === 'isolate'; +}; + +export const isProcessesAction = ( + params: RuleResponseEndpointAction['params'] +): params is ProcessesParams => { + return params.command === 'kill-process' || params.command === 'suspend-process'; +}; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_response_actions/endpoint_response_action.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_response_actions/endpoint_response_action.ts index f6c3161921934..b6aa53bb32ff6 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_response_actions/endpoint_response_action.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_response_actions/endpoint_response_action.ts @@ -5,48 +5,81 @@ * 2.0. */ -import { each, map, uniq } from 'lodash'; import { ALERT_RULE_NAME, ALERT_RULE_UUID } from '@kbn/rule-data-utils'; -import type { ResponseActionAlerts } from './types'; +import { each } from 'lodash'; + +import type { ExperimentalFeatures } from '../../../../common'; +import { isIsolateAction, isProcessesAction } from './endpoint_params_type_guards'; +import type { RuleResponseEndpointAction } from '../../../../common/api/detection_engine'; import type { EndpointAppContextService } from '../../../endpoint/endpoint_app_context_services'; -import type { RuleResponseEndpointAction } from '../../../../common/api/detection_engine/model/rule_response_actions'; +import { getProcessAlerts, getIsolateAlerts, getErrorProcessAlerts } from './utils'; + +import type { ResponseActionAlerts, AlertsAction } from './types'; export const endpointResponseAction = ( responseAction: RuleResponseEndpointAction, endpointAppContextService: EndpointAppContextService, - { alerts }: ResponseActionAlerts + { alerts }: ResponseActionAlerts, + experimentalFeatures: ExperimentalFeatures ) => { const { comment, command } = responseAction.params; + const commonData = { comment, command, rule_id: alerts[0][ALERT_RULE_UUID], rule_name: alerts[0][ALERT_RULE_NAME], + agent_type: 'endpoint' as const, }; - const agentIds = uniq(map(alerts, 'agent.id')); - const alertIds = map(alerts, '_id'); - const hosts = alerts.reduce>((acc, alert) => { - if (alert.agent?.name && !acc[alert.agent.id]) { - acc[alert.agent.id] = alert.agent.name; - } - return acc; - }, {}); - return Promise.all( - each(agentIds, async (agent) => - endpointAppContextService.getActionCreateService().createActionFromAlert( + if (isIsolateAction(responseAction.params)) { + const alertsPerAgent = getIsolateAlerts(alerts); + each(alertsPerAgent, (actionPayload) => { + return endpointAppContextService.getActionCreateService().createActionFromAlert( { - hosts: { - [agent]: { - name: hosts[agent], - }, - }, - endpoint_ids: [agent], - alert_ids: alertIds, + ...actionPayload, ...commonData, }, - [agent] - ) - ) - ); + actionPayload.endpoint_ids + ); + }); + } + + const automatedProcessActionsEnabled = experimentalFeatures?.automatedProcessActionsEnabled; + + if (automatedProcessActionsEnabled) { + const createProcessActionFromAlerts = ( + actionAlerts: Record> + ) => { + const createAction = async (alert: AlertsAction) => { + const { hosts, parameters, error } = alert; + + const actionData = { + hosts, + endpoint_ids: alert.endpoint_ids, + alert_ids: alert.alert_ids, + error, + parameters, + ...commonData, + }; + + return endpointAppContextService + .getActionCreateService() + .createActionFromAlert(actionData, alert.endpoint_ids); + }; + return each(actionAlerts, (actionPerAgent) => { + return each(actionPerAgent, createAction); + }); + }; + + if (isProcessesAction(responseAction.params)) { + const foundFields = getProcessAlerts(alerts, responseAction.params.config); + const notFoundField = getErrorProcessAlerts(alerts, responseAction.params.config); + + const processActions = createProcessActionFromAlerts(foundFields); + const processActionsWithError = createProcessActionFromAlerts(notFoundField); + + return Promise.all([processActions, processActionsWithError]); + } + } }; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_response_actions/schedule_notification_response_actions.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_response_actions/schedule_notification_response_actions.test.ts index 672434bfc94d0..927ba3cbe4a46 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_response_actions/schedule_notification_response_actions.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_response_actions/schedule_notification_response_actions.test.ts @@ -6,105 +6,213 @@ */ import { getScheduleNotificationResponseActionsService } from './schedule_notification_response_actions'; -import type { RuleResponseAction } from '../../../../common/api/detection_engine/model/rule_response_actions'; -import { ResponseActionTypesEnum } from '../../../../common/api/detection_engine/model/rule_response_actions'; +import type { RuleResponseAction } from '../../../../common/api/detection_engine'; +import { ResponseActionTypesEnum } from '../../../../common/api/detection_engine'; +import { ALERT_RULE_NAME, ALERT_RULE_UUID } from '@kbn/rule-data-utils'; describe('ScheduleNotificationResponseActions', () => { - const signalOne = { agent: { id: 'agent-id-1' }, _id: 'alert-id-1', user: { id: 'S-1-5-20' } }; - const signalTwo = { agent: { id: 'agent-id-2' }, _id: 'alert-id-2' }; - const signals = [signalOne, signalTwo]; - const defaultQueryParams = { - ecsMapping: { testField: { field: 'testField', value: 'testValue' } }, - savedQueryId: 'testSavedQueryId', - query: undefined, - queries: [], - packId: undefined, - }; - const defaultPackParams = { - packId: 'testPackId', - queries: [], - query: undefined, - ecsMapping: { testField: { field: 'testField', value: 'testValue' } }, - savedQueryId: undefined, - }; - const defaultQueries = { - ecs_mapping: undefined, - platform: 'windows', - version: '1.0.0', - snapshot: true, - removed: false, + const signalOne = { + agent: { id: 'agent-id-1' }, + _id: 'alert-id-1', + user: { id: 'S-1-5-20' }, + process: { + pid: 123, + }, + [ALERT_RULE_UUID]: 'rule-id-1', + [ALERT_RULE_NAME]: 'rule-name-1', }; + const signalTwo = { agent: { id: 'agent-id-2' }, _id: 'alert-id-2' }; + const getSignals = () => [signalOne, signalTwo]; - const defaultResultParams = { - agent_ids: ['agent-id-1', 'agent-id-2'], - alert_ids: ['alert-id-1', 'alert-id-2'], - }; - const defaultQueryResultParams = { - ...defaultResultParams, - ecs_mapping: { testField: { field: 'testField', value: 'testValue' } }, - ecsMapping: undefined, - saved_query_id: 'testSavedQueryId', - savedQueryId: undefined, - queries: [], - }; - const defaultPackResultParams = { - ...defaultResultParams, - query: undefined, - saved_query_id: undefined, - ecs_mapping: { testField: { field: 'testField', value: 'testValue' } }, - }; const osqueryActionMock = { create: jest.fn(), stop: jest.fn(), }; - const endpointActionMock = jest.fn(); - + const endpointActionMock = { + getActionCreateService: jest.fn().mockReturnValue({ + createActionFromAlert: jest.fn(), + }), + }; const scheduleNotificationResponseActions = getScheduleNotificationResponseActionsService({ osqueryCreateActionService: osqueryActionMock, endpointAppContextService: endpointActionMock as never, + experimentalFeatures: { + automatedProcessActionsEnabled: true, + endpointResponseActionsEnabled: true, + } as never, }); - const simpleQuery = 'select * from uptime'; - it('should handle osquery response actions with query', async () => { - const responseActions: RuleResponseAction[] = [ - { - actionTypeId: ResponseActionTypesEnum['.osquery'], - params: { - ...defaultQueryParams, - query: simpleQuery, + describe('Osquery', () => { + const simpleQuery = 'select * from uptime'; + const defaultQueryParams = { + ecsMapping: { testField: { field: 'testField', value: 'testValue' } }, + savedQueryId: 'testSavedQueryId', + query: undefined, + queries: [], + packId: undefined, + }; + const defaultPackParams = { + packId: 'testPackId', + queries: [], + query: undefined, + ecsMapping: { testField: { field: 'testField', value: 'testValue' } }, + savedQueryId: undefined, + }; + const defaultQueries = { + ecs_mapping: undefined, + platform: 'windows', + version: '1.0.0', + snapshot: true, + removed: false, + }; + + const defaultResultParams = { + agent_ids: ['agent-id-1', 'agent-id-2'], + alert_ids: ['alert-id-1', 'alert-id-2'], + }; + const defaultQueryResultParams = { + ...defaultResultParams, + ecs_mapping: { testField: { field: 'testField', value: 'testValue' } }, + ecsMapping: undefined, + saved_query_id: 'testSavedQueryId', + savedQueryId: undefined, + queries: [], + }; + const defaultPackResultParams = { + ...defaultResultParams, + query: undefined, + saved_query_id: undefined, + ecs_mapping: { testField: { field: 'testField', value: 'testValue' } }, + }; + it('should handle osquery response actions with query', async () => { + const signals = getSignals(); + const responseActions: RuleResponseAction[] = [ + { + actionTypeId: ResponseActionTypesEnum['.osquery'], + params: { + ...defaultQueryParams, + query: simpleQuery, + }, }, - }, - ]; - scheduleNotificationResponseActions({ signals, responseActions }); + ]; + scheduleNotificationResponseActions({ signals, responseActions }); - expect(osqueryActionMock.create).toHaveBeenCalledWith({ - ...defaultQueryResultParams, - query: simpleQuery, + expect(osqueryActionMock.create).toHaveBeenCalledWith({ + ...defaultQueryResultParams, + query: simpleQuery, + }); + }); + + it('should handle osquery response actions with packs', async () => { + const signals = getSignals(); + + const responseActions: RuleResponseAction[] = [ + { + actionTypeId: ResponseActionTypesEnum['.osquery'], + params: { + ...defaultPackParams, + queries: [ + { + ...defaultQueries, + id: 'query-1', + query: simpleQuery, + }, + ], + packId: 'testPackId', + }, + }, + ]; + scheduleNotificationResponseActions({ signals, responseActions }); + + expect(osqueryActionMock.create).toHaveBeenCalledWith({ + ...defaultPackResultParams, + queries: [{ ...defaultQueries, id: 'query-1', query: simpleQuery }], + }); }); - // }); - it('should handle osquery response actions with packs', async () => { - const responseActions: RuleResponseAction[] = [ - { - actionTypeId: ResponseActionTypesEnum['.osquery'], - params: { - ...defaultPackParams, - queries: [ - { - ...defaultQueries, - id: 'query-1', - query: simpleQuery, + describe('Endpoint', () => { + it('should handle endpoint isolate actions', async () => { + const signals = getSignals(); + + const responseActions: RuleResponseAction[] = [ + { + actionTypeId: ResponseActionTypesEnum['.endpoint'], + params: { + command: 'isolate', + comment: 'test isolate comment', + }, + }, + ]; + scheduleNotificationResponseActions({ signals, responseActions }); + + expect( + endpointActionMock.getActionCreateService().createActionFromAlert + ).toHaveBeenCalledTimes(signals.length); + expect( + endpointActionMock.getActionCreateService().createActionFromAlert + ).toHaveBeenCalledWith( + { + alert_ids: ['alert-id-1'], + command: 'isolate', + comment: 'test isolate comment', + endpoint_ids: ['agent-id-1'], + agent_type: 'endpoint', + hosts: { + 'agent-id-1': { + id: 'agent-id-1', + name: '', }, - ], - packId: 'testPackId', + }, + rule_id: 'rule-id-1', + rule_name: 'rule-name-1', }, - }, - ]; - scheduleNotificationResponseActions({ signals, responseActions }); + ['agent-id-1'] + ); + }); + it('should handle endpoint kill-process actions', async () => { + const signals = getSignals(); + const responseActions: RuleResponseAction[] = [ + { + actionTypeId: ResponseActionTypesEnum['.endpoint'], + params: { + command: 'kill-process', + comment: 'test process comment', + config: { + overwrite: true, + field: '', + }, + }, + }, + ]; + scheduleNotificationResponseActions({ + signals, + responseActions, + }); - expect(osqueryActionMock.create).toHaveBeenCalledWith({ - ...defaultPackResultParams, - queries: [{ ...defaultQueries, id: 'query-1', query: simpleQuery }], + expect( + endpointActionMock.getActionCreateService().createActionFromAlert + ).toHaveBeenCalledWith( + { + agent_type: 'endpoint', + alert_ids: ['alert-id-1'], + command: 'kill-process', + comment: 'test process comment', + endpoint_ids: ['agent-id-1'], + error: undefined, + hosts: { + 'agent-id-1': { + id: 'agent-id-1', + name: undefined, + }, + }, + parameters: { + pid: 123, + }, + rule_id: 'rule-id-1', + rule_name: 'rule-name-1', + }, + ['agent-id-1'] + ); }); }); }); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_response_actions/schedule_notification_response_actions.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_response_actions/schedule_notification_response_actions.ts index a02fafe69d8f6..f05df335c7424 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_response_actions/schedule_notification_response_actions.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_response_actions/schedule_notification_response_actions.ts @@ -6,23 +6,26 @@ */ import { each } from 'lodash'; +import type { ExperimentalFeatures } from '../../../../common'; import type { EndpointAppContextService } from '../../../endpoint/endpoint_app_context_services'; import type { SetupPlugins } from '../../../plugin_contract'; import { ResponseActionTypesEnum } from '../../../../common/api/detection_engine/model/rule_response_actions'; import { osqueryResponseAction } from './osquery_response_action'; import { endpointResponseAction } from './endpoint_response_action'; import type { ScheduleNotificationActions } from '../rule_types/types'; -import type { Alert, AlertWithAgent } from './types'; +import type { AlertWithAgent, Alert } from './types'; interface ScheduleNotificationResponseActionsService { endpointAppContextService: EndpointAppContextService; osqueryCreateActionService?: SetupPlugins['osquery']['createActionService']; + experimentalFeatures: ExperimentalFeatures; } export const getScheduleNotificationResponseActionsService = ({ osqueryCreateActionService, endpointAppContextService, + experimentalFeatures, }: ScheduleNotificationResponseActionsService) => ({ signals, responseActions }: ScheduleNotificationActions) => { const alerts = (signals as Alert[]).filter((alert) => alert.agent?.id) as AlertWithAgent[]; @@ -37,9 +40,14 @@ export const getScheduleNotificationResponseActionsService = }); } if (responseAction.actionTypeId === ResponseActionTypesEnum['.endpoint']) { - endpointResponseAction(responseAction, endpointAppContextService, { - alerts, - }); + endpointResponseAction( + responseAction, + endpointAppContextService, + { + alerts, + }, + experimentalFeatures + ); } }); }; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_response_actions/types.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_response_actions/types.ts index 5f1cee8d2a9ba..1ab3b8018bf1d 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_response_actions/types.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_response_actions/types.ts @@ -6,11 +6,17 @@ */ import type { ParsedTechnicalFields } from '@kbn/rule-registry-plugin/common'; +import type { CreateActionPayload } from '../../../endpoint/services/actions/create/types'; export type Alert = ParsedTechnicalFields & { _id: string; agent?: AlertAgent; - process?: { pid: string }; + host?: { + name: string; + }; + process?: { + pid: string; + }; }; export interface AlertAgent { @@ -25,3 +31,8 @@ export interface AlertWithAgent extends Alert { export interface ResponseActionAlerts { alerts: AlertWithAgent[]; } + +export type AlertsAction = Pick< + CreateActionPayload, + 'alert_ids' | 'endpoint_ids' | 'hosts' | 'parameters' | 'error' +>; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_response_actions/utils.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_response_actions/utils.test.ts new file mode 100644 index 0000000000000..0cb3962ab35fc --- /dev/null +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_response_actions/utils.test.ts @@ -0,0 +1,242 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { getErrorProcessAlerts, getIsolateAlerts, getProcessAlerts } from './utils'; +import type { AlertWithAgent } from './types'; + +const getSampleAlerts = (): AlertWithAgent[] => { + const alert = { + _id: 'alert1', + process: { + pid: 1, + }, + agent: { + name: 'jammy-1', + id: 'agent-id-1', + }, + }; + const alert2 = { + _id: 'alert2', + process: { + pid: 2, + }, + agent: { + name: 'jammy-2', + id: 'agent-id-2', + }, + }; + const alert3 = { + _id: 'alert3', + process: { + pid: 2, + }, + agent: { + name: 'jammy-1', + id: 'agent-id-1', + }, + }; + const alert4 = { + _id: 'alert4', + agent: { + name: 'jammy-1', + id: 'agent-id-1', + }, + }; + const alert5 = { + _id: 'alert5', + process: { + entity_id: 2, + }, + agent: { + name: 'jammy-1', + id: 'agent-id-1', + }, + }; + // Casted as unknown first because we do not need all the data to test the functionality + return [alert, alert2, alert3, alert4, alert5] as unknown as AlertWithAgent[]; +}; +describe('EndpointResponseActionsUtils', () => { + describe('getIsolateAlerts', () => { + const alerts = getSampleAlerts(); + it('should return proper number of actions divided per agents with specified alert_ids', async () => { + const isolateAlerts = getIsolateAlerts(alerts); + + const result = { + 'agent-id-1': { + alert_ids: ['alert1', 'alert3', 'alert4', 'alert5'], + endpoint_ids: ['agent-id-1'], + hosts: { + 'agent-id-1': { + id: 'agent-id-1', + name: 'jammy-1', + }, + }, + }, + 'agent-id-2': { + alert_ids: ['alert2'], + endpoint_ids: ['agent-id-2'], + hosts: { + 'agent-id-2': { + id: 'agent-id-2', + name: 'jammy-2', + }, + }, + }, + }; + expect(isolateAlerts).toEqual(result); + }); + }); + describe('getProcessAlerts', () => { + const alerts = getSampleAlerts(); + + it('should return actions that are valid based on default field (pid)', async () => { + const processAlerts = getProcessAlerts(alerts, { + overwrite: true, + field: '', + }); + + const result = { + 'agent-id-1': { + '1': { + alert_ids: ['alert1'], + endpoint_ids: ['agent-id-1'], + hosts: { + 'agent-id-1': { + id: 'agent-id-1', + name: 'jammy-1', + }, + }, + parameters: { + pid: 1, + }, + }, + '2': { + alert_ids: ['alert3'], + endpoint_ids: ['agent-id-1'], + hosts: { + 'agent-id-1': { + id: 'agent-id-1', + name: 'jammy-1', + }, + }, + parameters: { + pid: 2, + }, + }, + }, + 'agent-id-2': { + '2': { + alert_ids: ['alert2'], + endpoint_ids: ['agent-id-2'], + hosts: { + 'agent-id-2': { + id: 'agent-id-2', + name: 'jammy-2', + }, + }, + parameters: { + pid: 2, + }, + }, + }, + }; + expect(processAlerts).toEqual(result); + }); + + it('should return actions that do not have value from default field (pid)', async () => { + const processAlerts = getProcessAlerts(alerts, { + overwrite: false, + field: 'process.entity_id', + }); + + const result = { + 'agent-id-1': { + '2': { + alert_ids: ['alert5'], + endpoint_ids: ['agent-id-1'], + hosts: { + 'agent-id-1': { + id: 'agent-id-1', + name: 'jammy-1', + }, + }, + parameters: { + entity_id: 2, + }, + }, + }, + }; + expect(processAlerts).toEqual(result); + }); + }); + describe('getErrorProcessAlerts', () => { + const alerts = getSampleAlerts(); + + it('should return actions that do not have value from default field (pid)', async () => { + const processAlerts = getErrorProcessAlerts(alerts, { + overwrite: true, + field: '', + }); + + const result = { + 'agent-id-1': { + 'process.pid': { + alert_ids: ['alert4', 'alert5'], + endpoint_ids: ['agent-id-1'], + error: 'process.pid', + hosts: { + 'agent-id-1': { + id: 'agent-id-1', + name: 'jammy-1', + }, + }, + parameters: {}, + }, + }, + }; + expect(processAlerts).toEqual(result); + }); + it('should return actions that do not have value from custom field name', async () => { + const processAlerts = getErrorProcessAlerts(alerts, { + overwrite: false, + field: 'process.entity_id', + }); + + const result = { + 'agent-id-1': { + 'process.entity_id': { + alert_ids: ['alert1', 'alert3', 'alert4'], + endpoint_ids: ['agent-id-1'], + error: 'process.entity_id', + hosts: { + 'agent-id-1': { + id: 'agent-id-1', + name: 'jammy-1', + }, + }, + parameters: {}, + }, + }, + 'agent-id-2': { + 'process.entity_id': { + alert_ids: ['alert2'], + endpoint_ids: ['agent-id-2'], + error: 'process.entity_id', + hosts: { + 'agent-id-2': { + id: 'agent-id-2', + name: 'jammy-2', + }, + }, + parameters: {}, + }, + }, + }; + expect(processAlerts).toEqual(result); + }); + }); +}); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_response_actions/utils.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_response_actions/utils.ts new file mode 100644 index 0000000000000..8d0c5c3ef74c9 --- /dev/null +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_response_actions/utils.ts @@ -0,0 +1,123 @@ +/* + * 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 { get } from 'lodash'; +import type { AlertAgent, AlertWithAgent, AlertsAction } from './types'; +import type { ProcessesParams } from '../../../../common/api/detection_engine'; + +interface ProcessAlertsAcc { + [key: string]: Record; +} + +export const getProcessAlerts = ( + alerts: AlertWithAgent[], + config: ProcessesParams['config'] +): ProcessAlertsAcc => { + if (!config) { + return {}; + } + const { overwrite, field } = config; + + return alerts.reduce((acc: ProcessAlertsAcc, alert) => { + const valueFromAlert: number = overwrite ? alert.process?.pid : get(alert, field); + + if (valueFromAlert) { + const isEntityId = !overwrite && field.includes('entity_id'); + const paramKey = isEntityId ? 'entity_id' : 'pid'; + const { _id, agent } = alert; + const { id: agentId, name } = agent as AlertAgent; + const hostName = alert.host?.name; + + const currentAgent = acc[agentId]; + const currentValue = currentAgent?.[valueFromAlert]; + + return { + ...acc, + [agentId]: { + ...(currentAgent || {}), + [valueFromAlert]: { + ...(currentValue || {}), + alert_ids: [...(currentValue?.alert_ids || []), _id], + parameters: { [paramKey]: valueFromAlert }, + endpoint_ids: [agentId], + hosts: { + ...currentValue?.hosts, + [agentId]: { name: name || hostName, id: agentId }, + }, + }, + }, + }; + } + return acc; + }, {}); +}; + +export const getErrorProcessAlerts = ( + alerts: AlertWithAgent[], + config: ProcessesParams['config'] +): ProcessAlertsAcc => { + if (!config) { + return {}; + } + const { overwrite, field } = config; + + return alerts.reduce((acc: ProcessAlertsAcc, alert) => { + const valueFromAlert: number = overwrite ? alert.process?.pid : get(alert, field); + + if (!valueFromAlert) { + const { _id, agent } = alert; + const { id: agentId, name } = agent as AlertAgent; + const hostName = alert.host?.name; + + const errorField = overwrite ? 'process.pid' : field; + const currentAgent = acc[agentId]; + const currentValue = currentAgent?.[errorField]; + + return { + ...acc, + [agentId]: { + ...(currentAgent || {}), + [errorField]: { + ...(currentValue || {}), + alert_ids: [...(currentValue?.alert_ids || []), _id], + parameters: {}, + endpoint_ids: [agentId], + hosts: { + ...currentValue?.hosts, + [agentId]: { name: name || hostName || '', id: agentId }, + }, + error: errorField, + }, + }, + }; + } + return acc; + }, {}); +}; + +export const getIsolateAlerts = (alerts: AlertWithAgent[]): Record => + alerts.reduce((acc: Record, alert) => { + const { id: agentId, name: agentName } = alert.agent || {}; + + const hostName = alert.host?.name; + + return { + ...acc, + [agentId]: { + ...(acc?.[agentId] || {}), + hosts: { + ...(acc[agentId]?.hosts || {}), + [agentId]: { + name: agentName || hostName || '', + id: agentId, + }, + }, + endpoint_ids: [agentId], + alert_ids: [...(acc[agentId]?.alert_ids || []), alert._id], + }, + }; + }, {}); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/threat_mapping/create_event_signal.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/threat_mapping/create_event_signal.ts index 211466e17c8f7..acf506b0304c9 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/threat_mapping/create_event_signal.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/threat_mapping/create_event_signal.ts @@ -5,8 +5,6 @@ * 2.0. */ -import { firstValueFrom } from 'rxjs'; - import { buildThreatMappingFilter } from './build_threat_mapping_filter'; import { getFilter } from '../../utils/get_filter'; import { searchAfterAndBulkCreate } from '../../utils/search_after_bulk_create'; @@ -56,7 +54,8 @@ export const createEventSignal = async ({ inputIndexFields, threatIndexFields, completeRule, - licensing, + sortOrder = 'desc', + isAlertSuppressionActive, }: CreateEventSignalOptions): Promise => { const threatFiltersFromEvents = buildThreatMappingFilter({ threatMapping, @@ -65,9 +64,6 @@ export const createEventSignal = async ({ allowedFieldsForTermsQuery, }); - const license = await firstValueFrom(licensing.license$); - const hasPlatinumLicense = license.hasAtLeast('platinum'); - if (!threatFiltersFromEvents.query || threatFiltersFromEvents.query?.bool.should.length === 0) { // empty event list and we do not want to return everything as being // a hit so opt to return the existing result. @@ -134,10 +130,6 @@ export const createEventSignal = async ({ threatSearchParams, }); - const isAlertSuppressionEnabled = Boolean( - completeRule.ruleParams.alertSuppression?.groupBy?.length - ); - let createResult: SearchAfterAndBulkCreateReturnType; const searchAfterBulkCreateParams = { buildReasonMessage: buildReasonMessageForThreatMatchAlert, @@ -151,7 +143,7 @@ export const createEventSignal = async ({ pageSize: searchAfterSize, ruleExecutionLogger, services, - sortOrder: 'desc' as const, + sortOrder, trackTotalHits: false, tuple, wrapHits, @@ -160,11 +152,7 @@ export const createEventSignal = async ({ secondaryTimestamp, }; - if ( - isAlertSuppressionEnabled && - runOpts.experimentalFeatures?.alertSuppressionForIndicatorMatchRuleEnabled && - hasPlatinumLicense - ) { + if (isAlertSuppressionActive) { createResult = await searchAfterAndBulkCreateSuppressedAlerts({ ...searchAfterBulkCreateParams, wrapSuppressedHits, diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/threat_mapping/create_threat_signal.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/threat_mapping/create_threat_signal.ts index c5071605841f5..7740bed7777bb 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/threat_mapping/create_threat_signal.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/threat_mapping/create_threat_signal.ts @@ -5,8 +5,6 @@ * 2.0. */ -import { firstValueFrom } from 'rxjs'; - import { buildThreatMappingFilter } from './build_threat_mapping_filter'; import { getFilter } from '../../utils/get_filter'; import { searchAfterAndBulkCreate } from '../../utils/search_after_bulk_create'; @@ -54,7 +52,8 @@ export const createThreatSignal = async ({ allowedFieldsForTermsQuery, inputIndexFields, threatIndexFields, - licensing, + sortOrder = 'desc', + isAlertSuppressionActive, }: CreateThreatSignalOptions): Promise => { const threatFilter = buildThreatMappingFilter({ threatMapping, @@ -63,9 +62,6 @@ export const createThreatSignal = async ({ allowedFieldsForTermsQuery, }); - const license = await firstValueFrom(licensing.license$); - const hasPlatinumLicense = license.hasAtLeast('platinum'); - if (!threatFilter.query || threatFilter.query?.bool.should.length === 0) { // empty threat list and we do not want to return everything as being // a hit so opt to return the existing result. @@ -107,10 +103,6 @@ export const createThreatSignal = async ({ threatIndexFields, }); - const isAlertSuppressionEnabled = Boolean( - completeRule.ruleParams.alertSuppression?.groupBy?.length - ); - let result: SearchAfterAndBulkCreateReturnType; const searchAfterBulkCreateParams = { buildReasonMessage: buildReasonMessageForThreatMatchAlert, @@ -124,7 +116,7 @@ export const createThreatSignal = async ({ pageSize: searchAfterSize, ruleExecutionLogger, services, - sortOrder: 'desc' as const, + sortOrder, trackTotalHits: false, tuple, wrapHits, @@ -133,11 +125,7 @@ export const createThreatSignal = async ({ secondaryTimestamp, }; - if ( - isAlertSuppressionEnabled && - runOpts.experimentalFeatures?.alertSuppressionForIndicatorMatchRuleEnabled && - hasPlatinumLicense - ) { + if (isAlertSuppressionActive) { result = await searchAfterAndBulkCreateSuppressedAlerts({ ...searchAfterBulkCreateParams, wrapSuppressedHits, diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/threat_mapping/create_threat_signals.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/threat_mapping/create_threat_signals.ts index 5cb9dddc9b42e..aa108e5ea9bea 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/threat_mapping/create_threat_signals.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/threat_mapping/create_threat_signals.ts @@ -5,6 +5,8 @@ * 2.0. */ +import { firstValueFrom } from 'rxjs'; + import type { OpenPointInTimeResponse } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { uniq, chunk } from 'lodash/fp'; @@ -216,6 +218,22 @@ export const createThreatSignals = async ({ } }; + const license = await firstValueFrom(licensing.license$); + const hasPlatinumLicense = license.hasAtLeast('platinum'); + const isAlertSuppressionConfigured = Boolean( + completeRule.ruleParams.alertSuppression?.groupBy?.length + ); + + const isAlertSuppressionActive = + isAlertSuppressionConfigured && + Boolean(runOpts.experimentalFeatures?.alertSuppressionForIndicatorMatchRuleEnabled) && + hasPlatinumLicense; + + // alert suppression needs to be performed on results searched in ascending order, so alert's suppression boundaries would be set correctly + // at the same time, there are concerns on performance of IM rule when sorting is set to asc, as it may lead to longer rule runs, since it will + // first go through alerts that might ve been processed in earlier executions, when look back interval set to large values (it can't be larger than 24h) + const sortOrder = isAlertSuppressionConfigured ? 'asc' : 'desc'; + if (eventCount < threatListCount) { await createSignals({ totalDocumentCount: eventCount, @@ -236,6 +254,7 @@ export const createThreatSignals = async ({ exceptionFilter, eventListConfig, indexFields: inputIndexFields, + sortOrder, }), createSignal: (slicedChunk) => @@ -278,7 +297,8 @@ export const createThreatSignals = async ({ inputIndexFields, threatIndexFields, runOpts, - licensing, + sortOrder, + isAlertSuppressionActive, }), }); } else { @@ -342,7 +362,8 @@ export const createThreatSignals = async ({ inputIndexFields, threatIndexFields, runOpts, - licensing, + sortOrder, + isAlertSuppressionActive, }), }); } diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/threat_mapping/get_event_count.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/threat_mapping/get_event_count.ts index 214c7d3f13075..c74424f65d514 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/threat_mapping/get_event_count.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/threat_mapping/get_event_count.ts @@ -29,6 +29,7 @@ export const getEventList = async ({ exceptionFilter, eventListConfig, indexFields, + sortOrder = 'desc', }: EventsOptions): Promise> => { const calculatedPerPage = perPage ?? MAX_PER_PAGE; if (calculatedPerPage > 10000) { @@ -59,7 +60,7 @@ export const getEventList = async ({ filter: queryFilter, primaryTimestamp, secondaryTimestamp, - sortOrder: 'desc', + sortOrder, trackTotalHits: false, runtimeMappings, overrideBody: eventListConfig, diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/threat_mapping/types.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/threat_mapping/types.ts index ae9548090ea64..d8a6a97bbc644 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/threat_mapping/types.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/threat_mapping/types.ts @@ -120,7 +120,8 @@ export interface CreateThreatSignalOptions { inputIndexFields: DataViewFieldBase[]; threatIndexFields: DataViewFieldBase[]; runOpts: RunOpts; - licensing: LicensingPluginSetup; + sortOrder?: SortOrderOrUndefined; + isAlertSuppressionActive: boolean; } export interface CreateEventSignalOptions { @@ -163,7 +164,8 @@ export interface CreateEventSignalOptions { inputIndexFields: DataViewFieldBase[]; threatIndexFields: DataViewFieldBase[]; runOpts: RunOpts; - licensing: LicensingPluginSetup; + sortOrder?: SortOrderOrUndefined; + isAlertSuppressionActive: boolean; } type EntryKey = 'field' | 'value'; @@ -312,6 +314,7 @@ export interface EventsOptions { exceptionFilter: Filter | undefined; eventListConfig?: OverrideBodyQuery; indexFields: DataViewFieldBase[]; + sortOrder?: SortOrderOrUndefined; } export interface EventDoc { diff --git a/x-pack/plugins/security_solution/server/plugin.ts b/x-pack/plugins/security_solution/server/plugin.ts index 0bc81fc0b17fd..5b8ec7edd36ab 100644 --- a/x-pack/plugins/security_solution/server/plugin.ts +++ b/x-pack/plugins/security_solution/server/plugin.ts @@ -46,7 +46,13 @@ import { AppClientFactory } from './client'; import type { ConfigType } from './config'; import { createConfig } from './config'; import { initUiSettings } from './ui_settings'; -import { APP_ID, APP_UI_ID, DEFAULT_ALERTS_INDEX, SERVER_APP_ID } from '../common/constants'; +import { + APP_ID, + APP_UI_ID, + CASE_ATTACHMENT_ENDPOINT_TYPE_ID, + DEFAULT_ALERTS_INDEX, + SERVER_APP_ID, +} from '../common/constants'; import { registerEndpointRoutes } from './endpoint/routes/metadata'; import { registerPolicyRoutes } from './endpoint/routes/policy'; import { registerActionRoutes } from './endpoint/routes/actions'; @@ -230,6 +236,9 @@ export class Plugin implements ISecuritySolutionPlugin { }); this.telemetryUsageCounter = plugins.usageCollection?.createUsageCounter(APP_ID); + plugins.cases.attachmentFramework.registerExternalReference({ + id: CASE_ATTACHMENT_ENDPOINT_TYPE_ID, + }); const { ruleDataService } = plugins.ruleRegistry; let ruleDataClient: IRuleDataClient | null = null; @@ -285,6 +294,7 @@ export class Plugin implements ISecuritySolutionPlugin { scheduleNotificationResponseActionsService: getScheduleNotificationResponseActionsService({ endpointAppContextService: this.endpointAppContextService, osqueryCreateActionService: plugins.osquery.createActionService, + experimentalFeatures: config.experimentalFeatures, }), }; diff --git a/x-pack/plugins/security_solution/server/plugin_contract.ts b/x-pack/plugins/security_solution/server/plugin_contract.ts index 8370e405c6807..a036ef0565fe0 100644 --- a/x-pack/plugins/security_solution/server/plugin_contract.ts +++ b/x-pack/plugins/security_solution/server/plugin_contract.ts @@ -16,7 +16,7 @@ import type { PluginSetupContract as AlertingPluginSetup, PluginStartContract as AlertingPluginStart, } from '@kbn/alerting-plugin/server'; -import type { CasesStart } from '@kbn/cases-plugin/server'; +import type { CasesStart, CasesSetup } from '@kbn/cases-plugin/server'; import type { EncryptedSavedObjectsPluginSetup } from '@kbn/encrypted-saved-objects-plugin/server'; import type { IEventLogClientService, IEventLogService } from '@kbn/event-log-plugin/server'; import type { PluginSetupContract as FeaturesPluginSetup } from '@kbn/features-plugin/server'; @@ -47,6 +47,7 @@ import type { ExperimentalFeatures } from '../common'; export interface SecuritySolutionPluginSetupDependencies { alerting: AlertingPluginSetup; + cases: CasesSetup; cloud: CloudSetup; data: DataPluginSetup; encryptedSavedObjects?: EncryptedSavedObjectsPluginSetup; diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index c812c47f9aa48..b8d9c9eb44c43 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -12174,7 +12174,6 @@ "xpack.dataVisualizer.file.editFlyout.overrides.timestampLetterSValidationErrorMessage": "{length, plural, one { {lg} } many { Le groupe de lettres {lg} } other { Le groupe de lettres {lg} }} en {format} n'est pas compatible, car il n'est pas précédé de ss ni d'un séparateur de {sep}", "xpack.dataVisualizer.file.editFlyout.overrides.timestampLetterValidationErrorMessage": "{length, plural, one { {lg} } many { Le groupe de lettres {lg} } other { Le groupe de lettres {lg} }} en {format} n'est pas compatible", "xpack.dataVisualizer.file.editFlyout.overrides.timestampQuestionMarkValidationErrorMessage": "Le format d'horodatage {timestampFormat} n'est pas compatible, car il contient un point d'interrogation ({fieldPlaceholder})", - "xpack.dataVisualizer.file.fileContents.firstLinesDescription": "{numberOfLines, plural, one {# ligne} many {# lignes} other {# lignes}} premier(s)", "xpack.dataVisualizer.file.fileErrorCallouts.fileSizeExceedsAllowedSizeByDiffFormatErrorMessage": "La taille du fichier que vous avez sélectionné pour le chargement dépasse la taille maximale autorisée de {maxFileSizeFormatted} de {diffFormatted}", "xpack.dataVisualizer.file.fileErrorCallouts.fileSizeExceedsAllowedSizeErrorMessage": "La taille du fichier que vous avez sélectionné pour le chargement est de {fileSizeFormatted}, ce qui dépasse la taille maximale autorisée de {maxFileSizeFormatted}", "xpack.dataVisualizer.file.importSummary.documentsCouldNotBeImportedDescription": "Impossible d'importer {importFailuresLength} document(s) sur {docCount}. Cela peut être dû au manque de correspondance entre les lignes et le modèle Grok.", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 10bbca87a9cad..cf3ea4c3fe0a9 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -12187,7 +12187,6 @@ "xpack.dataVisualizer.file.editFlyout.overrides.timestampLetterSValidationErrorMessage": "{format}の文字{length, plural, other { グループ{lg} }}は、前にssと{sep}の区切り文字が付いていないため、サポートされません", "xpack.dataVisualizer.file.editFlyout.overrides.timestampLetterValidationErrorMessage": "{format}の文字{length, plural, other { グループ{lg} }}はサポートされていません", "xpack.dataVisualizer.file.editFlyout.overrides.timestampQuestionMarkValidationErrorMessage": "タイムスタンプフォーマット {timestampFormat} は、疑問符({fieldPlaceholder})が含まれているためサポートされていません", - "xpack.dataVisualizer.file.fileContents.firstLinesDescription": "最初の{numberOfLines, plural, other {#行}}件", "xpack.dataVisualizer.file.fileErrorCallouts.fileSizeExceedsAllowedSizeByDiffFormatErrorMessage": "アップロードするよう選択されたファイルのサイズが {diffFormatted} に許可された最大サイズの {maxFileSizeFormatted} を超えています", "xpack.dataVisualizer.file.fileErrorCallouts.fileSizeExceedsAllowedSizeErrorMessage": "アップロードするよう選択されたファイルのサイズは {fileSizeFormatted} で、許可された最大サイズの {maxFileSizeFormatted} を超えています", "xpack.dataVisualizer.file.importSummary.documentsCouldNotBeImportedDescription": "{docCount}件中{importFailuresLength}件のドキュメントをインポートできません。行が Grok パターンと一致していないことが原因の可能性があります。", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index bd37c0d9f3fb6..26029615545f8 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -12281,7 +12281,6 @@ "xpack.dataVisualizer.file.editFlyout.overrides.timestampLetterSValidationErrorMessage": "{format}的字母 {length, plural, other { 组 {lg} }} 不受支持,因为其未前置 ss 和 {sep} 中的分隔符", "xpack.dataVisualizer.file.editFlyout.overrides.timestampLetterValidationErrorMessage": "{format}的字母 {length, plural, other { 组 {lg} }} 不受支持", "xpack.dataVisualizer.file.editFlyout.overrides.timestampQuestionMarkValidationErrorMessage": "时间戳格式 {timestampFormat} 不受支持,因为其包含问号字符 ({fieldPlaceholder})", - "xpack.dataVisualizer.file.fileContents.firstLinesDescription": "前 {numberOfLines, plural, other {# 行}}", "xpack.dataVisualizer.file.fileErrorCallouts.fileSizeExceedsAllowedSizeByDiffFormatErrorMessage": "您选择用于上传的文件大小超过上限值 {maxFileSizeFormatted} 的 {diffFormatted}", "xpack.dataVisualizer.file.fileErrorCallouts.fileSizeExceedsAllowedSizeErrorMessage": "您选择用于上传的文件大小为 {fileSizeFormatted},超过上限值 {maxFileSizeFormatted}", "xpack.dataVisualizer.file.importSummary.documentsCouldNotBeImportedDescription": "无法导入 {importFailuresLength} 个文档(共 {docCount} 个)。这可能是由于行与 Grok 模式不匹配。", diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/alert_mute/use_mute_alert.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/alert_mute/use_mute_alert.test.tsx index 1f40d31fbf79b..d697b59028e7c 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/alert_mute/use_mute_alert.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/alert_mute/use_mute_alert.test.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { renderHook } from '@testing-library/react-hooks'; +import { renderHook } from '@testing-library/react-hooks/dom'; import * as api from '../../../../lib/rule_api/mute_alert'; import { waitFor } from '@testing-library/react'; import { useKibana } from '../../../../../common/lib/kibana'; @@ -31,14 +31,12 @@ describe('useMuteAlert', () => { it('calls the api when invoked with the correct parameters', async () => { const muteAlertInstanceSpy = jest.spyOn(api, 'muteAlertInstance'); - const { waitForNextUpdate, result } = renderHook(() => useMuteAlert(), { + const { result } = renderHook(() => useMuteAlert(), { wrapper: appMockRender.AppWrapper, }); result.current.mutate(params); - await waitForNextUpdate(); - await waitFor(() => { expect(muteAlertInstanceSpy).toHaveBeenCalledWith({ id: params.ruleId, diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/alert_mute/use_unmute_alert.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/alert_mute/use_unmute_alert.test.tsx index 7e51abd949d60..7d47cd75a386f 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/alert_mute/use_unmute_alert.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/alert_mute/use_unmute_alert.test.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { renderHook } from '@testing-library/react-hooks'; +import { renderHook } from '@testing-library/react-hooks/dom'; import * as api from '../../../../lib/rule_api/unmute_alert'; import { waitFor } from '@testing-library/react'; import { useKibana } from '../../../../../common/lib/kibana'; @@ -18,8 +18,7 @@ jest.mock('../../../../../common/lib/kibana'); const params = { ruleId: '', alertInstanceId: '' }; -// FLAKY: https://github.com/elastic/kibana/issues/174900 -describe.skip('useUnmuteAlert', () => { +describe('useUnmuteAlert', () => { const addErrorMock = useKibana().services.notifications.toasts.addError as jest.Mock; let appMockRender: AppMockRenderer; @@ -32,14 +31,12 @@ describe.skip('useUnmuteAlert', () => { it('calls the api when invoked with the correct parameters', async () => { const muteAlertInstanceSpy = jest.spyOn(api, 'unmuteAlertInstance'); - const { waitForNextUpdate, result } = renderHook(() => useUnmuteAlert(), { + const { result } = renderHook(() => useUnmuteAlert(), { wrapper: appMockRender.AppWrapper, }); result.current.mutate(params); - await waitForNextUpdate(); - await waitFor(() => { expect(muteAlertInstanceSpy).toHaveBeenCalledWith({ id: params.ruleId, diff --git a/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/avg_pct_fired.ts b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/avg_pct_fired.ts index 9c41ca3d150b3..929913f15f39f 100644 --- a/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/avg_pct_fired.ts +++ b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/avg_pct_fired.ts @@ -209,7 +209,7 @@ export default function ({ getService }: FtrProviderContext) { expect(resp.hits.hits[0]._source).property('kibana.alert.workflow_status', 'open'); expect(resp.hits.hits[0]._source).property('event.kind', 'signal'); expect(resp.hits.hits[0]._source).property('event.action', 'open'); - + expect(resp.hits.hits[0]._source).property('kibana.alert.evaluation.threshold').eql([0.5]); expect(resp.hits.hits[0]._source) .property('kibana.alert.rule.parameters') .eql({ diff --git a/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/avg_us_fired.ts b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/avg_us_fired.ts index 7d9c7bf7e657e..1a32a0af3612e 100644 --- a/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/avg_us_fired.ts +++ b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/avg_us_fired.ts @@ -187,7 +187,9 @@ export default function ({ getService }: FtrProviderContext) { expect(resp.hits.hits[0]._source).property('kibana.alert.workflow_status', 'open'); expect(resp.hits.hits[0]._source).property('event.kind', 'signal'); expect(resp.hits.hits[0]._source).property('event.action', 'open'); - + expect(resp.hits.hits[0]._source) + .property('kibana.alert.evaluation.threshold') + .eql([7500000]); expect(resp.hits.hits[0]._source) .property('kibana.alert.rule.parameters') .eql({ diff --git a/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/custom_eq_avg_bytes_fired.ts b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/custom_eq_avg_bytes_fired.ts index 06eaea7f21c9c..d1c8a2927837c 100644 --- a/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/custom_eq_avg_bytes_fired.ts +++ b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/custom_eq_avg_bytes_fired.ts @@ -206,7 +206,7 @@ export default function ({ getService }: FtrProviderContext) { expect(resp.hits.hits[0]._source).property('kibana.alert.workflow_status', 'open'); expect(resp.hits.hits[0]._source).property('event.kind', 'signal'); expect(resp.hits.hits[0]._source).property('event.action', 'open'); - + expect(resp.hits.hits[0]._source).property('kibana.alert.evaluation.threshold').eql([0.9]); expect(resp.hits.hits[0]._source) .property('kibana.alert.rule.parameters') .eql({ diff --git a/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/documents_count_fired.ts b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/documents_count_fired.ts index 0185d7b8ea05e..43029573defd8 100644 --- a/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/documents_count_fired.ts +++ b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/documents_count_fired.ts @@ -208,7 +208,7 @@ export default function ({ getService }: FtrProviderContext) { expect(resp.hits.hits[0]._source).property('event.action', 'open'); expect(resp.hits.hits[0]._source).not.have.property('kibana.alert.group'); - + expect(resp.hits.hits[0]._source).property('kibana.alert.evaluation.threshold').eql([1, 2]); expect(resp.hits.hits[0]._source) .property('kibana.alert.rule.parameters') .eql({ diff --git a/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/group_by_fired.ts b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/group_by_fired.ts index ca73e43114441..55f2d61be2b0e 100644 --- a/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/group_by_fired.ts +++ b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/group_by_fired.ts @@ -230,7 +230,7 @@ export default function ({ getService }: FtrProviderContext) { value: 'container-0', }, ]); - + expect(resp.hits.hits[0]._source).property('kibana.alert.evaluation.threshold').eql([0.2]); expect(resp.hits.hits[0]._source) .property('kibana.alert.rule.parameters') .eql({ diff --git a/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/p99_pct_fired.ts b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/p99_pct_fired.ts index 7079babd8b6fb..942d025dd11f3 100644 --- a/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/p99_pct_fired.ts +++ b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/p99_pct_fired.ts @@ -67,7 +67,12 @@ export default function ({ getService }: FtrProviderContext) { metrics: [{ name: 'system.cpu.user.pct', method: 'linear', start: 2.5, end: 2.5 }], }, ], - indexing: { dataset: 'fake_hosts' as Dataset, eventsPerCycle: 1, interval: 10000 }, + indexing: { + dataset: 'fake_hosts' as Dataset, + eventsPerCycle: 1, + interval: 10000, + alignEventsToInterval: true, + }, }; dataForgeIndices = await generate({ client: esClient, config: dataForgeConfig, logger }); logger.info(JSON.stringify(dataForgeIndices.join(','))); diff --git a/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/rate_bytes_fired.ts b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/rate_bytes_fired.ts index 226083cb29730..b76dd0c2581fc 100644 --- a/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/rate_bytes_fired.ts +++ b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/rate_bytes_fired.ts @@ -53,7 +53,12 @@ export default function ({ getService }: FtrProviderContext) { metrics: [{ name: 'system.network.in.bytes', method: 'exp', start: 10, end: 100 }], }, ], - indexing: { dataset: 'fake_hosts' as Dataset, eventsPerCycle: 1, interval: 10000 }, + indexing: { + dataset: 'fake_hosts' as Dataset, + eventsPerCycle: 1, + interval: 10000, + alignEventsToInterval: true, + }, }; dataForgeIndices = await generate({ client: esClient, config: dataForgeConfig, logger }); await waitForDocumentInIndex({ @@ -253,9 +258,9 @@ export default function ({ getService }: FtrProviderContext) { `https://localhost:5601/app/observability/alerts?_a=(kuery:%27kibana.alert.uuid:%20%22${alertId}%22%27%2CrangeFrom:%27${rangeFrom}%27%2CrangeTo:now%2Cstatus:all)` ); expect(resp.hits.hits[0]._source?.reason).eql( - `Rate of system.network.in.bytes is 0.2 B/s, above or equal the threshold of 0.2 B/s. (duration: 1 min, data view: kbn-data-forge-fake_hosts.fake_hosts-*, group: host-0,container-0)` + `Rate of system.network.in.bytes is 0.3 B/s, above or equal the threshold of 0.2 B/s. (duration: 1 min, data view: kbn-data-forge-fake_hosts.fake_hosts-*, group: host-0,container-0)` ); - expect(resp.hits.hits[0]._source?.value).eql('0.2 B/s'); + expect(resp.hits.hits[0]._source?.value).eql('0.3 B/s'); expect(resp.hits.hits[0]._source?.host).eql( '{"name":"host-0","mac":["00-00-5E-00-53-23","00-00-5E-00-53-24"]}' ); diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/bulk_untrack.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/bulk_untrack.ts index b2710626032fe..8a9225694047c 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/bulk_untrack.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/bulk_untrack.ts @@ -21,6 +21,15 @@ export default function bulkUntrackTests({ getService }: FtrProviderContext) { const retry = getService('retry'); const es = getService('es'); + const runSoon = async (id: string) => { + return retry.try(async () => { + await supertest + .post(`${getUrlPrefix('space1')}/internal/alerting/rule/${id}/_run_soon`) + .set('kbn-xsrf', 'foo') + .expect(204); + }); + }; + describe('bulk untrack', () => { const objectRemover = new ObjectRemover(supertest); @@ -128,5 +137,90 @@ export default function bulkUntrackTests({ getService }: FtrProviderContext) { }); }); } + + it('should create new alerts if run rules again after alerts are untracked', async () => { + const { body: createdRule } = await supertest + .post(`${getUrlPrefix('space1')}/api/alerting/rule`) + .set('kbn-xsrf', 'foo') + .send( + getTestRuleData({ + rule_type_id: 'test.always-firing-alert-as-data', + schedule: { interval: '24h' }, + throttle: undefined, + notify_when: undefined, + params: { + index: ES_TEST_INDEX_NAME, + reference: 'test', + }, + }) + ) + .expect(200); + + objectRemover.add('space1', createdRule.id, 'rule', 'alerting'); + + await retry.try(async () => { + return await getEventLog({ + getService, + spaceId: 'space1', + type: 'alert', + id: createdRule.id, + provider: 'alerting', + actions: new Map([['active-instance', { equal: 2 }]]), + }); + }); + + const { + hits: { hits: activeAlerts }, + } = await es.search({ + index: alertAsDataIndex, + body: { query: { match_all: {} } }, + }); + + const ids = activeAlerts.map((activeAlert: any) => activeAlert._source[ALERT_UUID]); + + await supertest + .post(`${getUrlPrefix('space1')}/internal/alerting/alerts/_bulk_untrack`) + .set('kbn-xsrf', 'foo') + .send({ + indices: [alertAsDataIndex], + alert_uuids: ids, + }); + + await runSoon(createdRule.id); + + await retry.try(async () => { + return await getEventLog({ + getService, + spaceId: 'space1', + type: 'alert', + id: createdRule.id, + provider: 'alerting', + actions: new Map([['active-instance', { equal: 4 }]]), + }); + }); + + await retry.try(async () => { + const { + hits: { hits: alerts }, + } = await es.search({ + index: alertAsDataIndex, + body: { query: { match_all: {} } }, + }); + + const activeAlertsRemaining = []; + const untrackedAlertsRemaining = []; + + alerts.forEach((alert: any) => { + if (alert._source[ALERT_STATUS] === 'active') { + activeAlertsRemaining.push(alert); + } else { + untrackedAlertsRemaining.push(alert); + } + }); + + expect(activeAlertsRemaining.length).eql(2); + expect(untrackedAlertsRemaining.length).eql(2); + }); + }); }); } diff --git a/x-pack/test/api_integration/apis/maps/bsearch.ts b/x-pack/test/api_integration/apis/maps/bsearch.ts new file mode 100644 index 0000000000000..1813bcd0675c5 --- /dev/null +++ b/x-pack/test/api_integration/apis/maps/bsearch.ts @@ -0,0 +1,112 @@ +/* + * 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 request from 'superagent'; +import { inflateResponse } from '@kbn/bfetch-plugin/public/streaming'; +import expect from '@kbn/expect'; +import { ELASTIC_HTTP_VERSION_HEADER } from '@kbn/core-http-common'; +import { BFETCH_ROUTE_VERSION_LATEST } from '@kbn/bfetch-plugin/common'; +import type { FtrProviderContext } from '../../ftr_provider_context'; + +function parseBfetchResponse(resp: request.Response, compressed: boolean = false) { + return resp.text + .trim() + .split('\n') + .map((item) => { + return JSON.parse(compressed ? inflateResponse(item) : item); + }); +} + +export default function ({ getService }: FtrProviderContext) { + const supertest = getService('supertest'); + + describe('bsearch', () => { + describe('ES|QL', () => { + it(`should return getColumns response in expected shape`, async () => { + const resp = await supertest + .post(`/internal/bsearch`) + .set('kbn-xsrf', 'kibana') + .set(ELASTIC_HTTP_VERSION_HEADER, BFETCH_ROUTE_VERSION_LATEST) + .send({ + batch: [ + { + request: { + params: { + query: 'from logstash-* | keep geo.coordinates | limit 0', + }, + }, + options: { + strategy: 'esql', + }, + }, + ], + }); + + const jsonBody = parseBfetchResponse(resp); + expect(resp.status).to.be(200); + expect(jsonBody[0].result.rawResponse).to.eql({ + columns: [ + { + name: 'geo.coordinates', + type: 'geo_point', + }, + ], + values: [], + }); + }); + + it(`should return getValues response in expected shape`, async () => { + const resp = await supertest + .post(`/internal/bsearch`) + .set('kbn-xsrf', 'kibana') + .set(ELASTIC_HTTP_VERSION_HEADER, BFETCH_ROUTE_VERSION_LATEST) + .send({ + batch: [ + { + request: { + params: { + dropNullColumns: true, + query: + 'from logstash-* | keep geo.coordinates, @timestamp | sort @timestamp | limit 1', + }, + }, + options: { + strategy: 'esql', + }, + }, + ], + }); + + const jsonBody = parseBfetchResponse(resp); + expect(resp.status).to.be(200); + expect(jsonBody[0].result.rawResponse).to.eql({ + all_columns: [ + { + name: 'geo.coordinates', + type: 'geo_point', + }, + { + name: '@timestamp', + type: 'date', + }, + ], + columns: [ + { + name: 'geo.coordinates', + type: 'geo_point', + }, + { + name: '@timestamp', + type: 'date', + }, + ], + values: [['POINT (-120.9871642 38.68407028)', '2015-09-20T00:00:00.000Z']], + }); + }); + }); + }); +} diff --git a/x-pack/test/api_integration/apis/maps/index.js b/x-pack/test/api_integration/apis/maps/index.js index 438b37ae841c9..fec2cac61950b 100644 --- a/x-pack/test/api_integration/apis/maps/index.js +++ b/x-pack/test/api_integration/apis/maps/index.js @@ -38,6 +38,7 @@ export default function ({ loadTestFile, getService }) { loadTestFile(require.resolve('./migrations')); loadTestFile(require.resolve('./get_tile')); loadTestFile(require.resolve('./get_grid_tile')); + loadTestFile(require.resolve('./bsearch')); }); }); } diff --git a/x-pack/test/api_integration/apis/search/search.ts b/x-pack/test/api_integration/apis/search/search.ts index 15c774eef34ef..bccc7321f8948 100644 --- a/x-pack/test/api_integration/apis/search/search.ts +++ b/x-pack/test/api_integration/apis/search/search.ts @@ -269,26 +269,6 @@ export default function ({ getService }: FtrProviderContext) { verifyErrorResponse(resp.body, 400, 'Request must contain a kbn-xsrf header.'); }); - it('should return 400 when unknown index type is provided', async () => { - const resp = await supertest - .post(`/internal/search/ese`) - .set(ELASTIC_HTTP_VERSION_HEADER, '1') - .set('kbn-xsrf', 'foo') - .send({ - indexType: 'baad', - params: { - body: { - query: { - match_all: {}, - }, - }, - }, - }) - .expect(400); - - verifyErrorResponse(resp.body, 400, 'Unknown indexType'); - }); - it('should return 400 if invalid id is provided', async () => { const resp = await supertest .post(`/internal/search/ese/123`) diff --git a/x-pack/test/cases_api_integration/security_and_spaces/tests/common/attachments_framework/external_references.ts b/x-pack/test/cases_api_integration/security_and_spaces/tests/common/attachments_framework/external_references.ts index 53b4e7d94c955..8ae71534ce3cd 100644 --- a/x-pack/test/cases_api_integration/security_and_spaces/tests/common/attachments_framework/external_references.ts +++ b/x-pack/test/cases_api_integration/security_and_spaces/tests/common/attachments_framework/external_references.ts @@ -501,6 +501,7 @@ export default ({ getService }: FtrProviderContext): void => { expect(types).to.eql({ '.files': '559a37324c84f1f2eadcc5bce43115d09501ffe4', '.test': 'ab2204830c67f5cf992c9aa2f7e3ead752cc60a1', + endpoint: 'e13fe41b5c330dd923da91992ed0cedb7e30960f', indicator: 'e1ea6f0518f2e0e4b0b5c0739efe805598cf2516', osquery: '99bee68fce8ee84e81d67c536e063d3e1a2cee96', }); diff --git a/x-pack/test/cases_api_integration/security_and_spaces/tests/common/cases/patch_cases.ts b/x-pack/test/cases_api_integration/security_and_spaces/tests/common/cases/patch_cases.ts index cc49ddf44bdcc..3a965b73004ef 100644 --- a/x-pack/test/cases_api_integration/security_and_spaces/tests/common/cases/patch_cases.ts +++ b/x-pack/test/cases_api_integration/security_and_spaces/tests/common/cases/patch_cases.ts @@ -1149,6 +1149,74 @@ export default ({ getService }: FtrProviderContext): void => { ]); }); + it('patches a case with missing optional custom fields to their default values', async () => { + await createConfiguration( + supertest, + getConfigurationRequest({ + overrides: { + customFields: [ + { + key: 'text_custom_field', + label: 'text', + type: CustomFieldTypes.TEXT, + defaultValue: 'default value', + required: false, + }, + { + key: 'toggle_custom_field', + label: 'toggle', + type: CustomFieldTypes.TOGGLE, + defaultValue: false, + required: false, + }, + ], + }, + }) + ); + + const originalValues = [ + { + key: 'text_custom_field', + type: CustomFieldTypes.TEXT, + value: 'hello', + }, + { + key: 'toggle_custom_field', + type: CustomFieldTypes.TOGGLE, + value: true, + }, + ] as CaseCustomFields; + + const postedCase = await createCase(supertest, { + ...postCaseReq, + customFields: originalValues, + }); + + const patchedCases = await updateCase({ + supertest, + params: { + cases: [ + { + id: postedCase.id, + version: postedCase.version, + customFields: [ + { + key: 'toggle_custom_field', + type: CustomFieldTypes.TOGGLE, + value: false, + }, + ], + }, + ], + }, + }); + + expect(patchedCases[0].customFields).to.eql([ + { ...originalValues[1], value: false }, + { ...originalValues[0], value: 'default value' }, + ]); + }); + it('400s trying to patch a case with missing required custom fields if they dont have default values', async () => { await createConfiguration( supertest, diff --git a/x-pack/test/cases_api_integration/security_and_spaces/tests/common/cases/post_case.ts b/x-pack/test/cases_api_integration/security_and_spaces/tests/common/cases/post_case.ts index 5049c04b060a8..411932212f242 100644 --- a/x-pack/test/cases_api_integration/security_and_spaces/tests/common/cases/post_case.ts +++ b/x-pack/test/cases_api_integration/security_and_spaces/tests/common/cases/post_case.ts @@ -318,6 +318,53 @@ export default ({ getService }: FtrProviderContext): void => { }, ]); }); + + it('creates a case with missing optional custom fields and default values', async () => { + const customFieldsConfiguration = [ + { + key: 'text_custom_field', + label: 'text', + type: CustomFieldTypes.TEXT, + required: false, + defaultValue: 'default value', + }, + { + key: 'toggle_custom_field', + label: 'toggle', + type: CustomFieldTypes.TOGGLE, + defaultValue: false, + required: false, + }, + ]; + + await createConfiguration( + supertest, + getConfigurationRequest({ + overrides: { + customFields: customFieldsConfiguration, + }, + }) + ); + const createdCase = await createCase( + supertest, + getPostCaseRequest({ + customFields: [], + }) + ); + + expect(createdCase.customFields).to.eql([ + { + key: customFieldsConfiguration[0].key, + type: customFieldsConfiguration[0].type, + value: 'default value', + }, + { + key: customFieldsConfiguration[1].key, + type: customFieldsConfiguration[1].type, + value: false, + }, + ]); + }); }); describe('unhappy path', () => { diff --git a/x-pack/test/cases_api_integration/security_and_spaces/tests/common/configure/patch_configure.ts b/x-pack/test/cases_api_integration/security_and_spaces/tests/common/configure/patch_configure.ts index d5b6e931ca671..c8e0f092edf3a 100644 --- a/x-pack/test/cases_api_integration/security_and_spaces/tests/common/configure/patch_configure.ts +++ b/x-pack/test/cases_api_integration/security_and_spaces/tests/common/configure/patch_configure.ts @@ -64,7 +64,7 @@ export default ({ getService }: FtrProviderContext): void => { required: true, }, { - key: 'toggle_field', + key: 'toggle_field_1', label: '#2', type: CustomFieldTypes.TOGGLE, required: false, @@ -76,6 +76,13 @@ export default ({ getService }: FtrProviderContext): void => { required: true, defaultValue: 'foobar', }, + { + key: 'toggle_field_2', + label: '#4', + type: CustomFieldTypes.TOGGLE, + required: false, + defaultValue: true, + }, ] as ConfigurationPatchRequest['customFields']; const configuration = await createConfiguration(supertest); const newConfiguration = await updateConfiguration(supertest, configuration.id, { diff --git a/x-pack/test/cases_api_integration/security_and_spaces/tests/common/configure/post_configure.ts b/x-pack/test/cases_api_integration/security_and_spaces/tests/common/configure/post_configure.ts index 15efb00444993..a7461d5f1fc18 100644 --- a/x-pack/test/cases_api_integration/security_and_spaces/tests/common/configure/post_configure.ts +++ b/x-pack/test/cases_api_integration/security_and_spaces/tests/common/configure/post_configure.ts @@ -63,20 +63,27 @@ export default ({ getService }: FtrProviderContext): void => { it('should create a configuration with customFields', async () => { const customFields = { customFields: [ - { key: 'hello', label: 'text', type: CustomFieldTypes.TEXT, required: false }, + { key: 'text_1', label: 'text 1', type: CustomFieldTypes.TEXT, required: false }, { - key: 'goodbye', - label: 'toggle', + key: 'toggle_1', + label: 'toggle 1', type: CustomFieldTypes.TOGGLE, required: true, defaultValue: false, }, { - key: 'hello_again', - label: 'text', + key: 'text_2', + label: 'text 2', type: CustomFieldTypes.TEXT, required: true, }, + { + key: 'toggle_2', + label: 'toggle 2', + type: CustomFieldTypes.TOGGLE, + required: false, + defaultValue: true, + }, ], }; diff --git a/x-pack/test/functional/apps/aiops/log_rate_analysis.ts b/x-pack/test/functional/apps/aiops/log_rate_analysis.ts index 45fef76fa7170..9799d4418d729 100644 --- a/x-pack/test/functional/apps/aiops/log_rate_analysis.ts +++ b/x-pack/test/functional/apps/aiops/log_rate_analysis.ts @@ -36,7 +36,8 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await ml.jobSourceSelection.selectSourceForLogRateAnalysis(testData.sourceIndexOrSavedSearch); }); - it(`${testData.suiteTitle} displays index details`, async () => { + // FLAKY: https://github.com/elastic/kibana/issues/176387 + it.skip(`${testData.suiteTitle} displays index details`, async () => { await ml.testExecution.logTestStep(`${testData.suiteTitle} displays the time range step`); await aiops.logRateAnalysisPage.assertTimeRangeSelectorSectionExists(); diff --git a/x-pack/test/functional/apps/discover/saved_searches.ts b/x-pack/test/functional/apps/discover/saved_searches.ts index c95249e927084..8f5fe5dc9bc11 100644 --- a/x-pack/test/functional/apps/discover/saved_searches.ts +++ b/x-pack/test/functional/apps/discover/saved_searches.ts @@ -45,8 +45,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.common.unsetTime(); }); - // FLAKY: https://github.com/elastic/kibana/issues/104578 - describe.skip('Customize time range', () => { + describe('Customize time range', () => { it('should be possible to customize time range for saved searches on dashboards', async () => { await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.clickNewDashboard(); diff --git a/x-pack/test/functional/apps/managed_content/managed_content.ts b/x-pack/test/functional/apps/managed_content/managed_content.ts index a42d5b5a0c94c..545d7ad1c4dee 100644 --- a/x-pack/test/functional/apps/managed_content/managed_content.ts +++ b/x-pack/test/functional/apps/managed_content/managed_content.ts @@ -16,10 +16,12 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { 'common', 'discover', 'maps', + 'dashboard', ]); const kibanaServer = getService('kibanaServer'); const esArchiver = getService('esArchiver'); const testSubjects = getService('testSubjects'); + const dashboardAddPanel = getService('dashboardAddPanel'); describe('Managed Content', () => { before(async () => { @@ -32,19 +34,19 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { kibanaServer.importExport.unload('test/functional/fixtures/kbn_archiver/managed_content'); }); - const expectManagedContentSignifiers = async ( - expected: boolean, - saveButtonTestSubject: string - ) => { - await testSubjects[expected ? 'existOrFail' : 'missingOrFail']('managedContentBadge'); - await testSubjects.click(saveButtonTestSubject); - - const saveAsNewCheckbox = await testSubjects.find('saveAsNewCheckbox'); - expect(await testSubjects.isEuiSwitchChecked(saveAsNewCheckbox)).to.be(expected); - expect(await saveAsNewCheckbox.getAttribute('disabled')).to.be(expected ? 'true' : null); - }; - describe('preventing the user from overwriting managed content', () => { + const expectManagedContentSignifiers = async ( + expected: boolean, + saveButtonTestSubject: string + ) => { + await testSubjects[expected ? 'existOrFail' : 'missingOrFail']('managedContentBadge'); + await testSubjects.click(saveButtonTestSubject); + + const saveAsNewCheckbox = await testSubjects.find('saveAsNewCheckbox'); + expect(await testSubjects.isEuiSwitchChecked(saveAsNewCheckbox)).to.be(expected); + expect(await saveAsNewCheckbox.getAttribute('disabled')).to.be(expected ? 'true' : null); + }; + it('lens', async () => { await PageObjects.common.navigateToActualUrl( 'lens', @@ -64,60 +66,105 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await expectManagedContentSignifiers(false, 'lnsApp_saveButton'); }); - }); - it('discover', async () => { - await PageObjects.common.navigateToActualUrl( - 'discover', - 'view/managed-3d62-4113-ac7c-de2e20a68fbc' - ); - await PageObjects.discover.waitForDiscoverAppOnScreen(); + it('discover', async () => { + await PageObjects.common.navigateToActualUrl( + 'discover', + 'view/managed-3d62-4113-ac7c-de2e20a68fbc' + ); + await PageObjects.discover.waitForDiscoverAppOnScreen(); + + await expectManagedContentSignifiers(true, 'discoverSaveButton'); + + await PageObjects.common.navigateToActualUrl( + 'discover', + 'view/unmanaged-3d62-4113-ac7c-de2e20a68fbc' + ); + await PageObjects.discover.waitForDiscoverAppOnScreen(); + + await expectManagedContentSignifiers(false, 'discoverSaveButton'); + }); - await expectManagedContentSignifiers(true, 'discoverSaveButton'); + it('visualize', async () => { + await PageObjects.common.navigateToActualUrl( + 'visualize', + 'edit/managed-feb9-4ba6-9538-1b8f67fb4f57' + ); + await PageObjects.visChart.waitForVisualization(); - await PageObjects.common.navigateToActualUrl( - 'discover', - 'view/unmanaged-3d62-4113-ac7c-de2e20a68fbc' - ); - await PageObjects.discover.waitForDiscoverAppOnScreen(); + await expectManagedContentSignifiers(true, 'visualizeSaveButton'); - await expectManagedContentSignifiers(false, 'discoverSaveButton'); - }); + await PageObjects.common.navigateToActualUrl( + 'visualize', + 'edit/unmanaged-feb9-4ba6-9538-1b8f67fb4f57' + ); + await PageObjects.visChart.waitForVisualization(); + + await expectManagedContentSignifiers(false, 'visualizeSaveButton'); + }); - it('visualize', async () => { - await PageObjects.common.navigateToActualUrl( - 'visualize', - 'edit/managed-feb9-4ba6-9538-1b8f67fb4f57' - ); - await PageObjects.visChart.waitForVisualization(); + it('maps', async () => { + await PageObjects.common.navigateToActualUrl( + 'maps', + 'map/managed-d7ab-46eb-a807-8fed28ed8566' + ); + await PageObjects.maps.waitForLayerAddPanelClosed(); - await expectManagedContentSignifiers(true, 'visualizeSaveButton'); + await expectManagedContentSignifiers(true, 'mapSaveButton'); - await PageObjects.common.navigateToActualUrl( - 'visualize', - 'edit/unmanaged-feb9-4ba6-9538-1b8f67fb4f57' - ); - await PageObjects.visChart.waitForVisualization(); + await PageObjects.common.navigateToActualUrl( + 'maps', + 'map/unmanaged-d7ab-46eb-a807-8fed28ed8566' + ); + await PageObjects.maps.waitForLayerAddPanelClosed(); - await expectManagedContentSignifiers(false, 'visualizeSaveButton'); + await expectManagedContentSignifiers(false, 'mapSaveButton'); + }); }); - it('maps', async () => { - await PageObjects.common.navigateToActualUrl( - 'maps', - 'map/managed-d7ab-46eb-a807-8fed28ed8566' - ); - await PageObjects.maps.waitForLayerAddPanelClosed(); + describe('managed panels in dashboards', () => { + it('inlines panels when managed dashboard cloned', async () => { + await PageObjects.common.navigateToActualUrl( + 'dashboard', + 'view/c44c86f9-b105-4a9c-9a24-449a58a827f3' + ); + + await PageObjects.dashboard.waitForRenderComplete(); + + await PageObjects.dashboard.clickClone(); - await expectManagedContentSignifiers(true, 'mapSaveButton'); + await PageObjects.dashboard.waitForRenderComplete(); - await PageObjects.common.navigateToActualUrl( - 'maps', - 'map/unmanaged-d7ab-46eb-a807-8fed28ed8566' - ); - await PageObjects.maps.waitForLayerAddPanelClosed(); + await testSubjects.missingOrFail('embeddablePanelNotification-ACTION_LIBRARY_NOTIFICATION'); + }); + + it('adds managed panels by-value', async () => { + await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.gotoDashboardLandingPage(); + await PageObjects.dashboard.clickNewDashboard(); + + await dashboardAddPanel.addEmbeddables([ + { name: 'Managed lens vis', type: 'lens' }, + { name: 'Managed legacy visualization', type: 'visualization' }, + { name: 'Managed map', type: 'map' }, + { name: 'Managed saved search', type: 'search' }, + ]); + + await testSubjects.missingOrFail('embeddablePanelNotification-ACTION_LIBRARY_NOTIFICATION'); + + await dashboardAddPanel.addEmbeddables([ + { name: 'Unmanaged lens vis', type: 'lens' }, + { name: 'Unmanaged legacy visualization', type: 'visualization' }, + { name: 'Unmanaged map', type: 'map' }, + { name: 'Unmanaged saved search', type: 'search' }, + ]); + + const byRefSignifiers = await testSubjects.findAll( + 'embeddablePanelNotification-ACTION_LIBRARY_NOTIFICATION' + ); - await expectManagedContentSignifiers(false, 'mapSaveButton'); + expect(byRefSignifiers.length).to.be(4); + }); }); }); } diff --git a/x-pack/test/functional/apps/ml/data_visualizer/file_data_visualizer.ts b/x-pack/test/functional/apps/ml/data_visualizer/file_data_visualizer.ts index 24437e02e6907..3a859249fe234 100644 --- a/x-pack/test/functional/apps/ml/data_visualizer/file_data_visualizer.ts +++ b/x-pack/test/functional/apps/ml/data_visualizer/file_data_visualizer.ts @@ -22,7 +22,7 @@ export default function ({ getService }: FtrProviderContext) { expected: { results: { title: 'artificial_server_log', - numberOfFields: 4, + highlightedText: true, }, metricFields: [ { @@ -104,7 +104,7 @@ export default function ({ getService }: FtrProviderContext) { expected: { results: { title: 'geo_file.csv', - numberOfFields: 3, + highlightedText: false, }, metricFields: [], nonMetricFields: [ @@ -146,7 +146,7 @@ export default function ({ getService }: FtrProviderContext) { expected: { results: { title: 'missing_end_of_file_newline.csv', - numberOfFields: 3, + highlightedText: false, }, metricFields: [ { @@ -217,6 +217,13 @@ export default function ({ getService }: FtrProviderContext) { await ml.testExecution.logTestStep('displays the components of the file details page'); await ml.dataVisualizerFileBased.assertFileTitle(testData.expected.results.title); await ml.dataVisualizerFileBased.assertFileContentPanelExists(); + await ml.dataVisualizerFileBased.assertFileContentHighlightingSwitchExists( + testData.expected.results.highlightedText + ); + await ml.dataVisualizerFileBased.assertFileContentHighlighting( + testData.expected.results.highlightedText, + testData.expected.totalFieldsCount - 1 // -1 for the message field + ); await ml.dataVisualizerFileBased.assertSummaryPanelExists(); await ml.dataVisualizerFileBased.assertFileStatsPanelExists(); diff --git a/x-pack/test/functional/services/ml/data_visualizer_file_based.ts b/x-pack/test/functional/services/ml/data_visualizer_file_based.ts index 0b8effd17cbb0..df95eddd957f8 100644 --- a/x-pack/test/functional/services/ml/data_visualizer_file_based.ts +++ b/x-pack/test/functional/services/ml/data_visualizer_file_based.ts @@ -49,6 +49,32 @@ export function MachineLearningDataVisualizerFileBasedProvider( await testSubjects.existOrFail('dataVisualizerFileFileContentPanel'); }, + async assertFileContentHighlightingSwitchExists(exist: boolean) { + const tabs = await testSubjects.findAll('dataVisualizerFileContentsHighlightingSwitch'); + expect(tabs.length).to.eql( + exist ? 1 : 0, + `Expected file content highlighting switch to ${exist ? 'exist' : 'not exist'}, but found ${ + tabs.length + }` + ); + }, + + async assertFileContentHighlighting(highlighted: boolean, numberOfFields: number) { + const lines = await testSubjects.findAll('dataVisualizerHighlightedLine', 1000); + const linesExist = lines.length > 0; + expect(linesExist).to.eql( + highlighted, + `Expected file content highlighting to be '${highlighted ? 'enabled' : 'disabled'}'` + ); + const expectedNumberOfFields = highlighted ? numberOfFields : 0; + const foundFields = (await lines[0]?.findAllByTestSubject('dataVisualizerFieldBadge')) ?? []; + + expect(foundFields.length).to.eql( + expectedNumberOfFields, + `Expected ${expectedNumberOfFields} fields to be highlighted, but found ${foundFields.length}` + ); + }, + async assertSummaryPanelExists() { await testSubjects.existOrFail('dataVisualizerFileSummaryPanel'); }, diff --git a/x-pack/test/security_solution_api_integration/package.json b/x-pack/test/security_solution_api_integration/package.json index 1e2b5e4c7a509..fd8751b8c1820 100644 --- a/x-pack/test/security_solution_api_integration/package.json +++ b/x-pack/test/security_solution_api_integration/package.json @@ -5,6 +5,9 @@ "private": true, "license": "Elastic License 2.0", "scripts": { + "initialize-server:genai": "node ./scripts/index.js server genai trial_license_complete_tier", + "run-tests:genai": "node ./scripts/index.js runner genai trial_license_complete_tier", + "initialize-server:ea": "node ./scripts/index.js server entity_analytics trial_license_complete_tier", "run-tests:ea": "node ./scripts/index.js runner entity_analytics trial_license_complete_tier", @@ -26,6 +29,12 @@ "initialize-server:lists:complete": "node ./scripts/index.js server lists_and_exception_lists trial_license_complete_tier", "run-tests:lists:complete": "node ./scripts/index.js runner lists_and_exception_lists trial_license_complete_tier", + "genai:server:serverless": "npm run initialize-server:genai invoke_ai serverless", + "genai:runner:serverless": "npm run run-tests:genai invoke_ai serverless serverlessEnv", + "genai:qa:serverless": "npm run run-tests:genai invoke_ai serverless qaEnv", + "genai:server:ess": "npm run initialize-server:genai invoke_ai ess", + "genai:runner:ess": "npm run run-tests:genai invoke_ai ess essEnv", + "entity_analytics:server:serverless": "npm run initialize-server:ea risk_engine serverless", "entity_analytics:runner:serverless": "npm run run-tests:ea risk_engine serverless serverlessEnv", "entity_analytics:qa:serverless": "npm run run-tests:ea risk_engine serverless qaEnv", diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/trial_license_complete_tier/execution_logic/threat_match_alert_suppression.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/trial_license_complete_tier/execution_logic/threat_match_alert_suppression.ts index 9d66f49c8558b..3f53e6d8a7100 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/trial_license_complete_tier/execution_logic/threat_match_alert_suppression.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/trial_license_complete_tier/execution_logic/threat_match_alert_suppression.ts @@ -1126,6 +1126,133 @@ export default ({ getService }: FtrProviderContext) => { }); }); + // large number of documents gets processed in batches of 9,000 + // rule should correctly go through them and suppress + // that can be an issue when search results returning in desc order + // this test is added to verify suppression works fine for this cases + it('should suppress alerts on large number of documents, more than 9,000', async () => { + const id = uuidv4(); + const firstTimestamp = '2020-10-28T05:45:00.000Z'; + const secondTimestamp = '2020-10-28T06:10:00.000Z'; + + await eventsFiller({ + id, + count: 10000 * eventsCount, + timestamp: [firstTimestamp, secondTimestamp], + }); + await threatsFiller({ id, count: 10000 * threatsCount, timestamp: firstTimestamp }); + + await indexGeneratedSourceDocuments({ + docsCount: 60000, + interval: [firstTimestamp, '2020-10-28T05:35:50.000Z'], + seed: (index, _, timestamp) => ({ + id, + '@timestamp': timestamp, + host: { + name: `host-${index}`, + }, + agent: { name: 'agent-a' }, + }), + }); + + await indexGeneratedSourceDocuments({ + docsCount: 60000, + interval: [secondTimestamp, '2020-10-28T06:20:50.000Z'], + seed: (index, _, timestamp) => ({ + id, + '@timestamp': timestamp, + host: { + name: `host-${index}`, + }, + agent: { name: 'agent-a' }, + }), + }); + + await addThreatDocuments({ + id, + timestamp: firstTimestamp, + fields: { + host: { + name: 'host-80', + }, + }, + count: 1, + }); + + await addThreatDocuments({ + id, + timestamp: firstTimestamp, + fields: { + host: { + name: 'host-14000', + }, + }, + count: 1, + }); + + await addThreatDocuments({ + id, + timestamp: firstTimestamp, + fields: { + host: { + name: 'host-36000', + }, + }, + count: 1, + }); + + await addThreatDocuments({ + id, + timestamp: firstTimestamp, + fields: { + host: { + name: 'host-5700', + }, + }, + count: 1, + }); + + const rule: ThreatMatchRuleCreateProps = { + ...indicatorMatchRule(id), + alert_suppression: { + group_by: ['agent.name'], + missing_fields_strategy: 'suppress', + duration: { + value: 300, + unit: 'm', + }, + }, + from: 'now-35m', + interval: '30m', + }; + + const { previewId } = await previewRule({ + supertest, + rule, + timeframeEnd: new Date('2020-10-28T06:30:00.000Z'), + invocationCount: 2, + }); + + const previewAlerts = await getPreviewAlerts({ + es, + previewId, + sort: ['agent.name', ALERT_ORIGINAL_TIME], + }); + expect(previewAlerts.length).toEqual(1); + expect(previewAlerts[0]._source).toEqual({ + ...previewAlerts[0]._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'agent.name', + value: ['agent-a'], + }, + ], + // There 4 documents in threats index, each matches one document in source index on each of 2 rule executions + // In total it gives 8 potential alerts. With suppression enabled 1 is created, the rest 7 are suppressed + [ALERT_SUPPRESSION_DOCS_COUNT]: 7, + }); + }); + describe('rule execution only', () => { it('should suppress alerts during rule execution only', async () => { const id = uuidv4(); @@ -2064,6 +2191,7 @@ export default ({ getService }: FtrProviderContext) => { }, ], [ALERT_SUPPRESSION_DOCS_COUNT]: 499, + [ALERT_SUPPRESSION_START]: '2020-10-28T06:50:00.000Z', }); }); diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/bundled_prebuilt_rules_package/trial_license_complete_tier/install_latest_bundled_prebuilt_rules.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/bundled_prebuilt_rules_package/trial_license_complete_tier/install_latest_bundled_prebuilt_rules.ts index 32eb1d3dbdf01..dcb2561b1f3e8 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/bundled_prebuilt_rules_package/trial_license_complete_tier/install_latest_bundled_prebuilt_rules.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/bundled_prebuilt_rules_package/trial_license_complete_tier/install_latest_bundled_prebuilt_rules.ts @@ -61,7 +61,8 @@ export default ({ getService }: FtrProviderContext): void => { es, supertest, '99.0.0', - retry + retry, + log ); // As opposed to "registry" diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/bundled_prebuilt_rules_package/trial_license_complete_tier/prerelease_packages.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/bundled_prebuilt_rules_package/trial_license_complete_tier/prerelease_packages.ts index dcafdf8eaf1a7..3ed663f7ecc66 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/bundled_prebuilt_rules_package/trial_license_complete_tier/prerelease_packages.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/bundled_prebuilt_rules_package/trial_license_complete_tier/prerelease_packages.ts @@ -49,7 +49,8 @@ export default ({ getService }: FtrProviderContext): void => { const fleetPackageInstallationResponse = await installPrebuiltRulesPackageViaFleetAPI( es, supertest, - retry + retry, + log ); expect(fleetPackageInstallationResponse.items.length).toBe(1); diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/management/trial_license_complete_tier/fleet_integration.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/management/trial_license_complete_tier/fleet_integration.ts index 1233af5c33f6a..1a8394a3b5144 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/management/trial_license_complete_tier/fleet_integration.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/management/trial_license_complete_tier/fleet_integration.ts @@ -49,6 +49,7 @@ export default ({ getService }: FtrProviderContext): void => { supertest, overrideExistingPackage: true, retryService: retry, + log, }); // Verify that status is updated after package installation diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/update_prebuilt_rules_package/trial_license_complete_tier/update_prebuilt_rules_package.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/update_prebuilt_rules_package/trial_license_complete_tier/update_prebuilt_rules_package.ts index 11577bec1b5c7..ffba2bd01d988 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/update_prebuilt_rules_package/trial_license_complete_tier/update_prebuilt_rules_package.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/update_prebuilt_rules_package/trial_license_complete_tier/update_prebuilt_rules_package.ts @@ -107,7 +107,8 @@ export default ({ getService }: FtrProviderContext): void => { es, supertest, previousVersion, - retry + retry, + log ); expect(installPreviousPackageResponse._meta.install_source).toBe('registry'); @@ -160,7 +161,8 @@ export default ({ getService }: FtrProviderContext): void => { es, supertest, currentVersion, - retry + retry, + log ); expect(installLatestPackageResponse.items.length).toBeGreaterThanOrEqual(0); diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/utils/retry.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/utils/retry.ts index dafd16aaa9f5f..3007448ed895f 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/utils/retry.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/utils/retry.ts @@ -6,7 +6,7 @@ */ import { RetryService } from '@kbn/ftr-common-functional-services'; - +import type { ToolingLog } from '@kbn/tooling-log'; /** * Retry wrapper for async supertests, with a maximum number of retries. * You can pass in a function that executes a supertest test, and make assertions @@ -44,15 +44,19 @@ import { RetryService } from '@kbn/ftr-common-functional-services'; export const retry = async ({ test, retryService, + utilityName, retries = 2, timeout = 30000, retryDelay = 200, + log, }: { test: () => Promise; + utilityName: string; retryService: RetryService; retries?: number; timeout?: number; retryDelay?: number; + log: ToolingLog; }): Promise => { let retryAttempt = 0; const response = await retryService.tryForTime( @@ -61,12 +65,23 @@ export const retry = async ({ if (retryAttempt > retries) { // Log error message if we reached the maximum number of retries // but don't throw an error, return it to break the retry loop. - return new Error('Reached maximum number of retries for test.'); + const errorMessage = `Reached maximum number of retries for test: ${ + retryAttempt - 1 + }/${retries}`; + log?.error(errorMessage); + return new Error(JSON.stringify(errorMessage)); } retryAttempt = retryAttempt + 1; - return test(); + // Catch the error thrown by the test and log it, then throw it again + // to cause `tryForTime` to retry. + try { + return await test(); + } catch (error) { + log.error(`Retrying ${utilityName}: ${error}`); + throw error; + } }, undefined, retryDelay diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/utils/rules/prebuilt_rules/install_fleet_package_by_url.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/utils/rules/prebuilt_rules/install_fleet_package_by_url.ts index 988d73660d0ee..2839795ab1976 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/utils/rules/prebuilt_rules/install_fleet_package_by_url.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/utils/rules/prebuilt_rules/install_fleet_package_by_url.ts @@ -9,6 +9,7 @@ import type SuperTest from 'supertest'; import { InstallPackageResponse } from '@kbn/fleet-plugin/common/types'; import { epmRouteService } from '@kbn/fleet-plugin/common'; import { RetryService } from '@kbn/ftr-common-functional-services'; +import type { ToolingLog } from '@kbn/tooling-log'; import expect from 'expect'; import { retry } from '../../retry'; import { refreshSavedObjectIndices } from '../../refresh_index'; @@ -28,7 +29,8 @@ const ATTEMPT_TIMEOUT = 120000; export const installPrebuiltRulesPackageViaFleetAPI = async ( es: Client, supertest: SuperTest.SuperTest, - retryService: RetryService + retryService: RetryService, + log: ToolingLog ): Promise => { const fleetResponse = await retry({ test: async () => { @@ -44,9 +46,11 @@ export const installPrebuiltRulesPackageViaFleetAPI = async ( return testResponse.body; }, + utilityName: installPrebuiltRulesPackageViaFleetAPI.name, retryService, retries: MAX_RETRIES, timeout: ATTEMPT_TIMEOUT, + log, }); await refreshSavedObjectIndices(es); @@ -67,7 +71,8 @@ export const installPrebuiltRulesPackageByVersion = async ( es: Client, supertest: SuperTest.SuperTest, version: string, - retryService: RetryService + retryService: RetryService, + log: ToolingLog ): Promise => { const fleetResponse = await retry({ test: async () => { @@ -83,9 +88,11 @@ export const installPrebuiltRulesPackageByVersion = async ( return testResponse.body; }, + utilityName: installPrebuiltRulesPackageByVersion.name, retryService, retries: MAX_RETRIES, timeout: ATTEMPT_TIMEOUT, + log, }); await refreshSavedObjectIndices(es); diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/utils/rules/prebuilt_rules/install_prebuilt_rules_fleet_package.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/utils/rules/prebuilt_rules/install_prebuilt_rules_fleet_package.ts index 592406e8c3398..770d966f50a59 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/utils/rules/prebuilt_rules/install_prebuilt_rules_fleet_package.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/utils/rules/prebuilt_rules/install_prebuilt_rules_fleet_package.ts @@ -15,6 +15,7 @@ import { InstallPackageResponse } from '@kbn/fleet-plugin/common/types'; import type SuperTest from 'supertest'; import { RetryService } from '@kbn/ftr-common-functional-services'; import expect from 'expect'; +import { ToolingLog } from '@kbn/tooling-log'; import { retry } from '../../retry'; import { refreshSavedObjectIndices } from '../../refresh_index'; @@ -35,12 +36,14 @@ export const installPrebuiltRulesFleetPackage = async ({ version, overrideExistingPackage, retryService, + log, }: { es: Client; supertest: SuperTest.SuperTest; version?: string; overrideExistingPackage: boolean; retryService: RetryService; + log: ToolingLog; }): Promise => { if (version) { // Install a specific version @@ -59,8 +62,10 @@ export const installPrebuiltRulesFleetPackage = async ({ return testResponse.body; }, retryService, + utilityName: installPrebuiltRulesFleetPackage.name, retries: MAX_RETRIES, timeout: ATTEMPT_TIMEOUT, + log, }); await refreshSavedObjectIndices(es); @@ -91,8 +96,10 @@ export const installPrebuiltRulesFleetPackage = async ({ return body; }, retryService, + utilityName: installPrebuiltRulesFleetPackage.name, retries: MAX_RETRIES, timeout: ATTEMPT_TIMEOUT, + log, }); await refreshSavedObjectIndices(es); diff --git a/x-pack/test/security_solution_api_integration/test_suites/genai/invoke_ai/trial_license_complete_tier/basic.ts b/x-pack/test/security_solution_api_integration/test_suites/genai/invoke_ai/trial_license_complete_tier/basic.ts new file mode 100644 index 0000000000000..bcac95217c280 --- /dev/null +++ b/x-pack/test/security_solution_api_integration/test_suites/genai/invoke_ai/trial_license_complete_tier/basic.ts @@ -0,0 +1,118 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; + +import { BedrockSimulator } from '@kbn/actions-simulators-plugin/server/bedrock_simulation'; +import { OpenAISimulator } from '@kbn/actions-simulators-plugin/server/openai_simulation'; +import { FtrProviderContext } from '../../../../ftr_provider_context'; +import { postActionsClientExecute } from '../utils/post_actions_client_execute'; +import { ObjectRemover } from '../utils/object_remover'; +import { createConnector } from '../utils/create_connector'; + +const mockRequest = { + params: { + subActionParams: { + messages: [ + { role: 'user', content: '\\n\\n\\n\\nWhat is my name?' }, + { + role: 'assistant', + content: + "I'm sorry, but I don't have the information about your name. You can tell me your name if you'd like, and we can continue our conversation from there.", + }, + { role: 'user', content: '\\n\\nMy name is Andrew' }, + { + role: 'assistant', + content: "Hello, Andrew! It's nice to meet you. What would you like to talk about today?", + }, + { role: 'user', content: '\\n\\nDo you know my name?' }, + ], + }, + subAction: 'invokeAI', + }, + isEnabledKnowledgeBase: false, + isEnabledRAGAlerts: false, + llmType: 'bedrock', +}; + +export default ({ getService }: FtrProviderContext) => { + const supertest = getService('supertest'); + const objectRemover = new ObjectRemover(supertest); + const configService = getService('config'); + + // @skipInQA tag because the simulators do not work in the QA env + describe('@ess @serverless @skipInQA Basic Security AI Assistant Invoke AI [non-streaming, non-LangChain]', async () => { + after(() => { + objectRemover.removeAll(); + }); + + describe('With Bedrock connector', () => { + const simulator = new BedrockSimulator({ + proxy: { + config: configService.get('kbnTestServer.serverArgs'), + }, + }); + let apiUrl: string; + let bedrockActionId: string; + + before(async () => { + apiUrl = await simulator.start(); + bedrockActionId = await createConnector(supertest, objectRemover, apiUrl, 'bedrock'); + }); + + after(() => { + simulator.close(); + }); + it('should execute a chat completion', async () => { + const response = await postActionsClientExecute(bedrockActionId, mockRequest, supertest); + + const expected = { + connector_id: bedrockActionId, + data: 'Hello there! How may I assist you today?', + status: 'ok', + }; + + expect(response.body).to.eql(expected); + }); + }); + + describe('With OpenAI connector', () => { + const simulator = new OpenAISimulator({ + returnError: false, + proxy: { + config: configService.get('kbnTestServer.serverArgs'), + }, + }); + let apiUrl: string; + let openaiActionId: string; + + before(async () => { + apiUrl = await simulator.start(); + openaiActionId = await createConnector(supertest, objectRemover, apiUrl, 'openai'); + }); + + after(() => { + simulator.close(); + }); + it('should execute a chat completion', async () => { + const response = await postActionsClientExecute( + openaiActionId, + { ...mockRequest, llmType: 'openai' }, + supertest + ); + + const expected = { + connector_id: openaiActionId, + data: 'Hello there! How may I assist you today?', + status: 'ok', + }; + + expect(response.body).to.eql(expected); + }); + }); + }); +}; diff --git a/x-pack/test/security_solution_api_integration/test_suites/genai/invoke_ai/trial_license_complete_tier/configs/ess.config.ts b/x-pack/test/security_solution_api_integration/test_suites/genai/invoke_ai/trial_license_complete_tier/configs/ess.config.ts new file mode 100644 index 0000000000000..722b39a700026 --- /dev/null +++ b/x-pack/test/security_solution_api_integration/test_suites/genai/invoke_ai/trial_license_complete_tier/configs/ess.config.ts @@ -0,0 +1,34 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FtrConfigProviderContext } from '@kbn/test'; +import getPort from 'get-port'; + +export default async function ({ readConfigFile }: FtrConfigProviderContext) { + const functionalConfig = await readConfigFile( + require.resolve('../../../../../config/ess/config.base.trial') + ); + + const proxyPort = await getPort({ port: getPort.makeRange(6200, 6299) }); + + return { + ...functionalConfig.getAll(), + kbnTestServer: { + ...functionalConfig.get('kbnTestServer'), + serverArgs: [ + ...functionalConfig.get('kbnTestServer.serverArgs'), + // used for connector simulators + `--xpack.actions.proxyUrl=http://localhost:${proxyPort}`, + `--xpack.actions.enabledActionTypes=${JSON.stringify(['.bedrock', '.gen-ai'])}`, + ], + }, + testFiles: [require.resolve('..')], + junit: { + reportName: 'GenAI - Invoke AI Tests - ESS Env - Trial License', + }, + }; +} diff --git a/x-pack/test/security_solution_api_integration/test_suites/genai/invoke_ai/trial_license_complete_tier/configs/serverless.config.ts b/x-pack/test/security_solution_api_integration/test_suites/genai/invoke_ai/trial_license_complete_tier/configs/serverless.config.ts new file mode 100644 index 0000000000000..d0666e224e4bf --- /dev/null +++ b/x-pack/test/security_solution_api_integration/test_suites/genai/invoke_ai/trial_license_complete_tier/configs/serverless.config.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 { createTestConfig } from '../../../../../config/serverless/config.base'; + +export default createTestConfig({ + kbnTestServerArgs: [ + // used for connector simulators + `--xpack.actions.proxyUrl=http://localhost:6200`, + ], + testFiles: [require.resolve('..')], + junit: { + reportName: 'GenAI - Invoke AI Tests - Serverless Env - Complete Tier', + }, +}); diff --git a/x-pack/test/security_solution_api_integration/test_suites/genai/invoke_ai/trial_license_complete_tier/index.ts b/x-pack/test/security_solution_api_integration/test_suites/genai/invoke_ai/trial_license_complete_tier/index.ts new file mode 100644 index 0000000000000..e6ff5bbbfe667 --- /dev/null +++ b/x-pack/test/security_solution_api_integration/test_suites/genai/invoke_ai/trial_license_complete_tier/index.ts @@ -0,0 +1,15 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FtrProviderContext } from '../../../../ftr_provider_context'; + +export default function ({ loadTestFile }: FtrProviderContext) { + // this is the test suite for the inaptly named post_actions_connector_execute route + describe('GenAI - Invoke AI', function () { + loadTestFile(require.resolve('./basic')); + }); +} diff --git a/x-pack/test/security_solution_api_integration/test_suites/genai/invoke_ai/utils/create_connector.ts b/x-pack/test/security_solution_api_integration/test_suites/genai/invoke_ai/utils/create_connector.ts new file mode 100644 index 0000000000000..ac2d60ad631e2 --- /dev/null +++ b/x-pack/test/security_solution_api_integration/test_suites/genai/invoke_ai/utils/create_connector.ts @@ -0,0 +1,73 @@ +/* + * 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 SuperTest from 'supertest'; +import { + ELASTIC_HTTP_VERSION_HEADER, + X_ELASTIC_INTERNAL_ORIGIN_REQUEST, +} from '@kbn/core-http-common'; +import { getUrlPrefix } from './space_test_utils'; +import { ObjectRemover } from './object_remover'; + +const connectorSetup = { + bedrock: { + connectorTypeId: '.bedrock', + name: 'A bedrock action', + secrets: { + accessKey: 'bedrockAccessKey', + secret: 'bedrockSecret', + }, + config: { + defaultModel: 'anthropic.claude-v2', + }, + }, + openai: { + connectorTypeId: '.gen-ai', + name: 'An openai action', + secrets: { + apiKey: 'genAiApiKey', + }, + config: { + apiProvider: 'OpenAI', + }, + }, +}; + +/** + * Creates a connector + * @param supertest The supertest agent. + * @param apiUrl The url of the api + * @param connectorType The type of connector to create + * @param spaceId The space id + */ +export const createConnector = async ( + supertest: SuperTest.SuperTest, + objectRemover: ObjectRemover, + apiUrl: string, + connectorType: 'bedrock' | 'openai', + spaceId?: string +) => { + const { connectorTypeId, config, name, secrets } = connectorSetup[connectorType]; + const result = await supertest + .post(`${getUrlPrefix(spaceId ?? 'default')}/api/actions/connector`) + .set('kbn-xsrf', 'foo') + .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') + .send({ + name, + connector_type_id: connectorTypeId, + config: { ...config, apiUrl }, + secrets, + }) + .expect(200); + + const { body } = result; + + objectRemover.add(spaceId ?? 'default', body.id, 'connector', 'actions'); + + return body.id; +}; diff --git a/x-pack/test/security_solution_api_integration/test_suites/genai/invoke_ai/utils/object_remover.ts b/x-pack/test/security_solution_api_integration/test_suites/genai/invoke_ai/utils/object_remover.ts new file mode 100644 index 0000000000000..93eaa85e802fc --- /dev/null +++ b/x-pack/test/security_solution_api_integration/test_suites/genai/invoke_ai/utils/object_remover.ts @@ -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 { + ELASTIC_HTTP_VERSION_HEADER, + X_ELASTIC_INTERNAL_ORIGIN_REQUEST, +} from '@kbn/core-http-common'; +import { getUrlPrefix } from './space_test_utils'; + +interface ObjectToRemove { + spaceId: string; + id: string; + type: string; + plugin: string; + isInternal?: boolean; +} + +export class ObjectRemover { + private readonly supertest: any; + private objectsToRemove: ObjectToRemove[] = []; + + constructor(supertest: any) { + this.supertest = supertest; + } + + add( + spaceId: ObjectToRemove['spaceId'], + id: ObjectToRemove['id'], + type: ObjectToRemove['type'], + plugin: ObjectToRemove['plugin'], + isInternal?: ObjectToRemove['isInternal'] + ) { + this.objectsToRemove.push({ spaceId, id, type, plugin, isInternal }); + } + + async removeAll() { + await Promise.all( + this.objectsToRemove.map(({ spaceId, id, type, plugin, isInternal }) => { + return this.supertest + .delete( + `${getUrlPrefix(spaceId)}/${isInternal ? 'internal' : 'api'}/${plugin}/${type}/${id}` + ) + .set('kbn-xsrf', 'foo') + .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') + .expect(plugin === 'saved_objects' ? 200 : 204); + }) + ); + this.objectsToRemove = []; + } +} diff --git a/x-pack/test/security_solution_api_integration/test_suites/genai/invoke_ai/utils/post_actions_client_execute.ts b/x-pack/test/security_solution_api_integration/test_suites/genai/invoke_ai/utils/post_actions_client_execute.ts new file mode 100644 index 0000000000000..0477401a26533 --- /dev/null +++ b/x-pack/test/security_solution_api_integration/test_suites/genai/invoke_ai/utils/post_actions_client_execute.ts @@ -0,0 +1,34 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type SuperTest from 'supertest'; +import { + ELASTIC_HTTP_VERSION_HEADER, + X_ELASTIC_INTERNAL_ORIGIN_REQUEST, +} from '@kbn/core-http-common'; +import { Response } from 'superagent'; + +/** + * Executes an invoke AI action + * @param connectorId The connector id + * @param args The arguments to pass to the action + * @param supertest The supertest agent + */ +export const postActionsClientExecute = async ( + connectorId: string, + args: any, + supertest: SuperTest.SuperTest +): Promise => { + const response = await supertest + .post(`/internal/elastic_assistant/actions/connector/${connectorId}/_execute`) + .set('kbn-xsrf', 'true') + .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') + .send(args); + + return response; +}; diff --git a/x-pack/test/security_solution_api_integration/test_suites/genai/invoke_ai/utils/space_test_utils.ts b/x-pack/test/security_solution_api_integration/test_suites/genai/invoke_ai/utils/space_test_utils.ts new file mode 100644 index 0000000000000..6ffbdc492aee4 --- /dev/null +++ b/x-pack/test/security_solution_api_integration/test_suites/genai/invoke_ai/utils/space_test_utils.ts @@ -0,0 +1,10 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export function getUrlPrefix(spaceId: string) { + return spaceId && spaceId !== 'default' ? `/s/${spaceId}` : ``; +} diff --git a/x-pack/test_serverless/api_integration/test_suites/common/search_xpack/search.ts b/x-pack/test_serverless/api_integration/test_suites/common/search_xpack/search.ts index ecced2db57ee9..477d3a518d164 100644 --- a/x-pack/test_serverless/api_integration/test_suites/common/search_xpack/search.ts +++ b/x-pack/test_serverless/api_integration/test_suites/common/search_xpack/search.ts @@ -222,28 +222,6 @@ export default function ({ getService }: FtrProviderContext) { verifyErrorResponse(resp.body, 400, 'Request must contain a kbn-xsrf header.'); }); - it('should return 400 when unknown index type is provided', async () => { - const resp = await supertest - .post(`/internal/search/ese`) - .set(ELASTIC_HTTP_VERSION_HEADER, '1') - // TODO: API requests in Serverless require internal request headers - .set(svlCommonApi.getInternalRequestHeader()) - .set('kbn-xsrf', 'foo') - .send({ - indexType: 'baad', - params: { - body: { - query: { - match_all: {}, - }, - }, - }, - }) - .expect(400); - - verifyErrorResponse(resp.body, 400, 'Unknown indexType'); - }); - it('should return 400 if invalid id is provided', async () => { const resp = await supertest .post(`/internal/search/ese/123`) diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/avg_pct_fired.ts b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/avg_pct_fired.ts index 32dd3e263998b..47ed06c1ad440 100644 --- a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/avg_pct_fired.ts +++ b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/avg_pct_fired.ts @@ -191,7 +191,7 @@ export default function ({ getService }: FtrProviderContext) { expect(resp.hits.hits[0]._source).property('kibana.alert.workflow_status', 'open'); expect(resp.hits.hits[0]._source).property('event.kind', 'signal'); expect(resp.hits.hits[0]._source).property('event.action', 'open'); - + expect(resp.hits.hits[0]._source).property('kibana.alert.evaluation.threshold').eql([0.5]); expect(resp.hits.hits[0]._source) .property('kibana.alert.rule.parameters') .eql({ diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/custom_eq_avg_bytes_fired.ts b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/custom_eq_avg_bytes_fired.ts index 95d9608d0a841..8b6d76a380748 100644 --- a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/custom_eq_avg_bytes_fired.ts +++ b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/custom_eq_avg_bytes_fired.ts @@ -200,7 +200,7 @@ export default function ({ getService }: FtrProviderContext) { expect(resp.hits.hits[0]._source).property('kibana.alert.workflow_status', 'open'); expect(resp.hits.hits[0]._source).property('event.kind', 'signal'); expect(resp.hits.hits[0]._source).property('event.action', 'open'); - + expect(resp.hits.hits[0]._source).property('kibana.alert.evaluation.threshold').eql([0.9]); expect(resp.hits.hits[0]._source) .property('kibana.alert.rule.parameters') .eql({ diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/documents_count_fired.ts b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/documents_count_fired.ts index 519c0329e6390..15c34602e0a78 100644 --- a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/documents_count_fired.ts +++ b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/documents_count_fired.ts @@ -191,7 +191,7 @@ export default function ({ getService }: FtrProviderContext) { expect(resp.hits.hits[0]._source).property('kibana.alert.workflow_status', 'open'); expect(resp.hits.hits[0]._source).property('event.kind', 'signal'); expect(resp.hits.hits[0]._source).property('event.action', 'open'); - + expect(resp.hits.hits[0]._source).property('kibana.alert.evaluation.threshold').eql([1, 2]); expect(resp.hits.hits[0]._source) .property('kibana.alert.rule.parameters') .eql({ diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/group_by_fired.ts b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/group_by_fired.ts index ccd2aa6edaeaa..264057cacff1c 100644 --- a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/group_by_fired.ts +++ b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/group_by_fired.ts @@ -217,7 +217,7 @@ export default function ({ getService }: FtrProviderContext) { expect(resp.hits.hits[0]._source).property('container.id', 'container-0'); expect(resp.hits.hits[0]._source).property('container.name', 'container-name'); expect(resp.hits.hits[0]._source).not.property('container.cpu'); - + expect(resp.hits.hits[0]._source).property('kibana.alert.evaluation.threshold').eql([0.2]); expect(resp.hits.hits[0]._source) .property('kibana.alert.rule.parameters') .eql({ diff --git a/x-pack/test_serverless/api_integration/test_suites/security/fleet/fleet.ts b/x-pack/test_serverless/api_integration/test_suites/security/fleet/fleet.ts index 98866bc50f431..ba184e7687794 100644 --- a/x-pack/test_serverless/api_integration/test_suites/security/fleet/fleet.ts +++ b/x-pack/test_serverless/api_integration/test_suites/security/fleet/fleet.ts @@ -12,7 +12,8 @@ export default function ({ getService }: FtrProviderContext) { const svlCommonApi = getService('svlCommonApi'); const supertest = getService('supertest'); - describe('fleet', function () { + // FLAKY: https://github.com/elastic/kibana/issues/176399 + describe.skip('fleet', function () { it('rejects request to create a new fleet server hosts if host url is different from default', async () => { const { body, status } = await supertest .post('/api/fleet/fleet_server_hosts') diff --git a/yarn.lock b/yarn.lock index 5549bf6e05d7c..d75766cfa5b0e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4348,6 +4348,10 @@ version "0.0.0" uid "" +"@kbn/data-view-utils@link:packages/kbn-data-view-utils": + version "0.0.0" + uid "" + "@kbn/data-views-plugin@link:src/plugins/data_views": version "0.0.0" uid ""