diff --git a/.buildkite/pipelines/pull_request/check_next_docs.yml b/.buildkite/pipelines/pull_request/check_next_docs.yml new file mode 100644 index 0000000000000..16b9145661a32 --- /dev/null +++ b/.buildkite/pipelines/pull_request/check_next_docs.yml @@ -0,0 +1,10 @@ +steps: + - command: .buildkite/scripts/steps/next_docs/build_and_validate_docs.sh + label: 'Build and Validate Next Docs' + agents: + queue: n2-4-spot + timeout_in_minutes: 30 + retry: + automatic: + - exit_status: '-1' + limit: 3 diff --git a/.buildkite/scripts/common/env.sh b/.buildkite/scripts/common/env.sh index c357b5421a903..ccaeb7b0dc5d9 100755 --- a/.buildkite/scripts/common/env.sh +++ b/.buildkite/scripts/common/env.sh @@ -12,6 +12,8 @@ PARENT_DIR="$(cd "$KIBANA_DIR/.."; pwd)" export PARENT_DIR export WORKSPACE="${WORKSPACE:-$PARENT_DIR}" +export DOCS_REPO_CACHE_DIR="$HOME/.docs-repos" + # A few things, such as Chrome, respect this variable # For many agent types, the workspace is mounted on a local ssd, so will be faster than the default tmp dir location if [[ -d /opt/local-ssd/buildkite ]]; then diff --git a/.buildkite/scripts/packer_cache.sh b/.buildkite/scripts/packer_cache.sh index 673396af77e57..727accaeead8f 100755 --- a/.buildkite/scripts/packer_cache.sh +++ b/.buildkite/scripts/packer_cache.sh @@ -13,3 +13,6 @@ yarn kbn bootstrap for version in $(cat versions.json | jq -r '.versions[].version'); do node scripts/es snapshot --download-only --base-path "$ES_CACHE_DIR" --version "$version" done + +echo "--- Cloning repos for docs build" +node scripts/validate_next_docs --clone-only diff --git a/.buildkite/scripts/pipelines/pull_request/pipeline.ts b/.buildkite/scripts/pipelines/pull_request/pipeline.ts index b9ac7a2435404..5fb29fc87c228 100644 --- a/.buildkite/scripts/pipelines/pull_request/pipeline.ts +++ b/.buildkite/scripts/pipelines/pull_request/pipeline.ts @@ -171,6 +171,19 @@ const uploadPipeline = (pipelineContent: string | object) => { pipeline.push(getPipeline('.buildkite/pipelines/pull_request/webpack_bundle_analyzer.yml')); } + if ( + (await doAnyChangesMatch([ + /\.docnav\.json$/, + /\.apidocs\.json$/, + /\.devdocs\.json$/, + /\.mdx$/, + /^dev_docs\/.*(png|gif|jpg|jpeg|webp)$/, + ])) || + GITHUB_PR_LABELS.includes('ci:build-next-docs') + ) { + pipeline.push(getPipeline('.buildkite/pipelines/pull_request/check_next_docs.yml')); + } + pipeline.push(getPipeline('.buildkite/pipelines/pull_request/post_build.yml')); uploadPipeline(pipeline.join('\n')); diff --git a/.buildkite/scripts/steps/artifacts/docker_image.sh b/.buildkite/scripts/steps/artifacts/docker_image.sh index 079ab3be7b054..f933f15188918 100755 --- a/.buildkite/scripts/steps/artifacts/docker_image.sh +++ b/.buildkite/scripts/steps/artifacts/docker_image.sh @@ -90,6 +90,7 @@ steps: TARGET_FILE: kibana-controller.yaml IMAGE_TAG: "$GIT_ABBREV_COMMIT" SERVICE: kibana-controller + IMAGE_OVERRIDES: "docker.elastic.co/kibana-ci/kibana:$GIT_ABBREV_COMMIT" EOF else diff --git a/.buildkite/scripts/steps/next_docs/build_and_validate_docs.sh b/.buildkite/scripts/steps/next_docs/build_and_validate_docs.sh new file mode 100755 index 0000000000000..28f7bba3c46a1 --- /dev/null +++ b/.buildkite/scripts/steps/next_docs/build_and_validate_docs.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash + +set -euo pipefail + +source .buildkite/scripts/bootstrap.sh + +echo "--- Build docs" + +echo "⚠️ run 'node scripts/validate_next_docs --debug' locally to debug ⚠️" +node scripts/validate_next_docs + + + diff --git a/.eslintrc.js b/.eslintrc.js index 3474d3c588707..c0b1d8d34e46d 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1736,6 +1736,7 @@ module.exports = { { files: [ 'packages/kbn-{package-*,repo-*,dep-*}/**/*', + 'packages/kbn-validate-next-docs-cli/**/*', 'packages/kbn-find-used-node-modules/**/*', ], rules: { diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 4feac718f908d..e91dff193338d 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,509 +1,8 @@ -# GitHub CODEOWNERS definition -# Identify which groups will be pinged by changes to different parts of the codebase. -# For more info, see https://help.github.com/articles/about-codeowners/ - -# The #CC# prefix delineates Code Coverage, -# used for the 'team' designator within Kibana Stats - -# Data Discovery -/x-pack/test/functional/apps/discover/ @elastic/kibana-data-discovery -/x-pack/test/functional_with_es_ssl/apps/discover_ml_uptime/discover/ @elastic/kibana-data-discovery -/test/functional/apps/discover/ @elastic/kibana-data-discovery -/test/functional/apps/context/ @elastic/kibana-data-discovery -/test/api_integration/apis/unified_field_list/ @elastic/kibana-data-discovery -/x-pack/test/search_sessions_integration/ @elastic/kibana-data-discovery -/test/plugin_functional/test_suites/data_plugin @elastic/kibana-data-discovery -/examples/demo_search/ @elastic/kibana-data-discovery - -# Vis Editors -/src/plugins/visualize/ @elastic/kibana-visualizations -/x-pack/test/functional/apps/lens @elastic/kibana-visualizations -/x-pack/test/api_integration/apis/lens/ @elastic/kibana-visualizations -/test/functional/apps/visualize/ @elastic/kibana-visualizations -/x-pack/test/functional/apps/graph @elastic/kibana-visualizations - -# Global Experience - -### Global Experience Reporting -/x-pack/test/functional/apps/dashboard/reporting/ @elastic/appex-sharedux -/x-pack/test/functional/apps/reporting/ @elastic/appex-sharedux -/x-pack/test/functional/apps/reporting_management/ @elastic/appex-sharedux -/x-pack/test/examples/screenshotting/ @elastic/appex-sharedux -/x-pack/test/functional/es_archives/lens/reporting/ @elastic/appex-sharedux -/x-pack/test/functional/es_archives/reporting/ @elastic/appex-sharedux -/x-pack/test/functional/fixtures/kbn_archiver/reporting/ @elastic/appex-sharedux -/x-pack/test/reporting_api_integration/ @elastic/appex-sharedux -/x-pack/test/reporting_functional/ @elastic/appex-sharedux -/x-pack/test/stack_functional_integration/apps/reporting/ @elastic/appex-sharedux -/docs/user/reporting @elastic/appex-sharedux -/docs/settings/reporting-settings.asciidoc @elastic/appex-sharedux -/docs/setup/configuring-reporting.asciidoc @elastic/appex-sharedux - -### Global Experience Tagging -/x-pack/test/saved_object_tagging/ @elastic/appex-sharedux - -### Kibana React (to be deprecated) -/src/plugins/kibana_react/public/@elastic/appex-sharedux @elastic/kibana-presentation - -### Home Plugin and Packages -/src/plugins/home/public @elastic/appex-sharedux -/src/plugins/home/server/*.ts @elastic/appex-sharedux -/src/plugins/home/server/services/ @elastic/appex-sharedux - -### Code Coverage -#CC# /src/plugins/home/public @elastic/appex-sharedux -#CC# /src/plugins/home/server/services/ @elastic/appex-sharedux -#CC# /src/plugins/home/ @elastic/appex-sharedux -#CC# /x-pack/plugins/reporting/ @elastic/appex-sharedux - -### Observability Plugins - -# Observability Shared -/x-pack/plugins/observability/public/components/shared/date_picker/ @elastic/uptime - -# Unified Observability - on hold due to team capacity shortage -# For now, if you're changing these pages, get a review from someone who understand the changes -# /x-pack/plugins/observability/public/context @elastic/unified-observability -# /x-pack/test/observability_functional @elastic/unified-observability - -# Home/Overview/Landing Pages -/x-pack/plugins/observability/public/pages/home @elastic/observability-design -/x-pack/plugins/observability/public/pages/landing @elastic/observability-design -/x-pack/plugins/observability/public/pages/overview @elastic/observability-design @elastic/actionable-observability - -# Actionable Observability -/x-pack/plugins/observability/common/rules @elastic/actionable-observability -/x-pack/plugins/observability/public/rules @elastic/actionable-observability -/x-pack/plugins/observability/public/pages/alerts @elastic/actionable-observability -/x-pack/plugins/observability/public/pages/cases @elastic/actionable-observability -/x-pack/plugins/observability/public/pages/rules @elastic/actionable-observability -/x-pack/plugins/observability/public/pages/rule_details @elastic/actionable-observability -/x-pack/test/observability_functional @elastic/actionable-observability - -# Infra Monitoring -/x-pack/test/functional/apps/infra @elastic/infra-monitoring-ui -/x-pack/test/api_integration/apis/infra @elastic/infra-monitoring-ui - -# Elastic Stack Monitoring -/x-pack/test/functional/apps/monitoring @elastic/infra-monitoring-ui -/x-pack/test/api_integration/apis/monitoring @elastic/infra-monitoring-ui -/x-pack/test/api_integration/apis/monitoring_collection @elastic/infra-monitoring-ui - -# Fleet -/fleet_packages.json @elastic/fleet -/x-pack/test/fleet_api_integration @elastic/fleet -/x-pack/test/fleet_cypress @elastic/fleet -/x-pack/test/fleet_functional @elastic/fleet -/src/dev/build/tasks/bundle_fleet_packages.ts @elastic/fleet @elastic/kibana-operations - -# APM -/x-pack/test/functional/apps/apm/ @elastic/apm-ui -/x-pack/test/apm_api_integration/ @elastic/apm-ui -/src/apm.js @elastic/kibana-core @vigneshshanmugam -/src/core/types/elasticsearch @elastic/apm-ui -/packages/kbn-utility-types/src/dot.ts @dgieselaar -/packages/kbn-utility-types/src/dot_test.ts @dgieselaar -#CC# /src/plugins/apm_oss/ @elastic/apm-ui -#CC# /x-pack/plugins/observability/ @elastic/apm-ui - -# Uptime -/x-pack/test/functional_with_es_ssl/apps/discover_ml_uptime/uptime/ @elastic/uptime -/x-pack/test/functional/apps/uptime @elastic/uptime -/x-pack/test/functional/es_archives/uptime @elastic/uptime -/x-pack/test/functional/services/uptime @elastic/uptime -/x-pack/test/api_integration/apis/uptime @elastic/uptime -/x-pack/plugins/observability/public/components/shared/exploratory_view @elastic/uptime - - -# Client Side Monitoring / Uptime (lives in APM directories but owned by Uptime) -/x-pack/plugins/apm/public/application/uxApp.tsx @elastic/uptime -/x-pack/plugins/apm/public/components/app/rum_dashboard @elastic/uptime -/x-pack/test/apm_api_integration/tests/csm/ @elastic/uptime - -# Observability onboarding tour -/x-pack/plugins/observability/public/components/shared/tour @elastic/platform-onboarding -/x-pack/test/functional/apps/infra/tour.ts @elastic/platform-onboarding - -### END Observability Plugins - -# Presentation -/test/functional/apps/dashboard/ @elastic/kibana-presentation -/test/functional/apps/dashboard_elements/ @elastic/kibana-presentation -/test/functional/services/dashboard/ @elastic/kibana-presentation -/x-pack/test/functional/apps/canvas/ @elastic/kibana-presentation -/test/plugin_functional/test_suites/panel_actions @elastic/kibana-presentation -#CC# /src/plugins/kibana_react/public/code_editor/ @elastic/kibana-presentation - -# Machine Learning -/x-pack/plugins/ml/common/openapi/ @elastic/mlr-docs -/x-pack/test/accessibility/apps/ml.ts @elastic/ml-ui -/x-pack/test/accessibility/apps/ml_embeddables_in_dashboard.ts @elastic/ml-ui -/x-pack/test/api_integration/apis/ml/ @elastic/ml-ui -/x-pack/test/api_integration_basic/apis/ml/ @elastic/ml-ui -/x-pack/test/functional/apps/ml/ @elastic/ml-ui -/x-pack/test/functional/es_archives/ml/ @elastic/ml-ui -/x-pack/test/functional/services/ml/ @elastic/ml-ui -/x-pack/test/functional_basic/apps/ml/ @elastic/ml-ui -/x-pack/test/functional_with_es_ssl/apps/discover_ml_uptime/ml/ @elastic/ml-ui -/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/ml_rule_types/ @elastic/ml-ui -/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/transform_rule_types/ @elastic/ml-ui -/x-pack/test/screenshot_creation/apps/ml_docs @elastic/ml-ui -/x-pack/test/screenshot_creation/services/ml_screenshots.ts @elastic/ml-ui -/docs/api/machine-learning/ @elastic/mlr-docs - -# Additional plugins and packages maintained by the ML team. -/x-pack/test/accessibility/apps/transform.ts @elastic/ml-ui -/x-pack/test/api_integration/apis/transform/ @elastic/ml-ui -/x-pack/test/api_integration_basic/apis/transform/ @elastic/ml-ui -/x-pack/test/functional/apps/transform/ @elastic/ml-ui -/x-pack/test/functional/services/transform/ @elastic/ml-ui -/x-pack/test/functional_basic/apps/transform/ @elastic/ml-ui - -# Maps -#CC# /x-pack/plugins/maps/ @elastic/kibana-gis -/x-pack/test/api_integration/apis/maps/ @elastic/kibana-gis -/x-pack/test/functional/apps/maps/ @elastic/kibana-gis -/x-pack/test/functional/es_archives/maps/ @elastic/kibana-gis -/x-pack/plugins/stack_alerts/server/rule_types/geo_containment @elastic/kibana-gis -/x-pack/plugins/stack_alerts/public/rule_types/geo_containment @elastic/kibana-gis -#CC# /x-pack/plugins/file_upload @elastic/kibana-gis - -# Operations -/src/dev/license_checker/config.ts @elastic/kibana-operations -/src/dev/ @elastic/kibana-operations -/src/setup_node_env/ @elastic/kibana-operations -/src/cli/keystore/ @elastic/kibana-operations -/.ci/es-snapshots/ @elastic/kibana-operations -/.github/workflows/ @elastic/kibana-operations -/vars/ @elastic/kibana-operations -/.bazelignore @elastic/kibana-operations -/.bazeliskversion @elastic/kibana-operations -/.bazelrc @elastic/kibana-operations -/.bazelrc.common @elastic/kibana-operations -/.bazelversion @elastic/kibana-operations -/WORKSPACE.bazel @elastic/kibana-operations -/.buildkite/ @elastic/kibana-operations -/kbn_pm/ @elastic/kibana-operations - -# Quality Assurance -/src/dev/code_coverage @elastic/kibana-qa -/vars/*Coverage.groovy @elastic/kibana-qa -/test/functional/services/common @elastic/kibana-qa -/test/functional/services/lib @elastic/kibana-qa -/test/functional/services/remote @elastic/kibana-qa -/test/visual_regression @elastic/kibana-qa -/x-pack/test/visual_regression @elastic/kibana-qa - -# Core -/config/kibana.yml @elastic/kibana-core -/typings/ @elastic/kibana-core -/x-pack/test/saved_objects_field_count/ @elastic/kibana-core -/test/analytics @elastic/kibana-core -#CC# /src/core/server/csp/ @elastic/kibana-core -#CC# /src/plugins/saved_objects/ @elastic/kibana-core -#CC# /x-pack/plugins/cloud/ @elastic/kibana-core -#CC# /x-pack/plugins/features/ @elastic/kibana-core -#CC# /x-pack/plugins/global_search/ @elastic/kibana-core -#CC# /src/plugins/newsfeed @elastic/kibana-core -#CC# /x-pack/plugins/global_search_providers/ @elastic/kibana-core - -# Kibana Telemetry -/.telemetryrc.json @elastic/kibana-core -/x-pack/.telemetryrc.json @elastic/kibana-core -/src/plugins/telemetry/schema/ @elastic/kibana-core @elastic/kibana-telemetry -/x-pack/plugins/telemetry_collection_xpack/schema/ @elastic/kibana-core @elastic/kibana-telemetry - -# Kibana Localization -/src/dev/i18n/ @elastic/kibana-localization @elastic/kibana-core -/src/core/public/i18n/ @elastic/kibana-localization @elastic/kibana-core -#CC# /x-pack/plugins/translations/ @elastic/kibana-localization @elastic/kibana-core - -# Kibana Platform Security -/src/plugins/telemetry/server/config/telemetry_labels.ts @elastic/kibana-security -/test/interactive_setup_api_integration/ @elastic/kibana-security -/test/interactive_setup_functional/ @elastic/kibana-security -/test/plugin_functional/test_suites/core_plugins/rendering.ts @elastic/kibana-security -/x-pack/test/api_integration/apis/security/ @elastic/kibana-security -/x-pack/test/api_integration/apis/spaces/ @elastic/kibana-security -/x-pack/test/ui_capabilities/ @elastic/kibana-security -/x-pack/test/encrypted_saved_objects_api_integration/ @elastic/kibana-security -/x-pack/test/functional/apps/security/ @elastic/kibana-security -/x-pack/test/functional/apps/spaces/ @elastic/kibana-security -/x-pack/test/security_api_integration/ @elastic/kibana-security -/x-pack/test/security_functional/ @elastic/kibana-security -/x-pack/test/spaces_api_integration/ @elastic/kibana-security -/x-pack/test/saved_object_api_integration/ @elastic/kibana-security -#CC# /x-pack/plugins/security/ @elastic/kibana-security - -# Response Ops team -/x-pack/test/alerting_api_integration/ @elastic/response-ops -/x-pack/test/plugin_api_integration/test_suites/task_manager/ @elastic/response-ops -/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/ @elastic/response-ops -/docs/user/alerting/ @elastic/response-ops -/docs/management/connectors/ @elastic/response-ops -/x-pack/test/cases_api_integration/ @elastic/response-ops -/x-pack/test/functional/services/cases/ @elastic/response-ops -/x-pack/test/functional_with_es_ssl/apps/cases/ @elastic/response-ops -/x-pack/test/api_integration/apis/cases/ @elastic/response-ops -/docs/api/actions-and-connectors @elastic/mlr-docs -/docs/api/alerting @elastic/mlr-docs -/docs/api/cases @elastic/mlr-docs -/x-pack/plugins/cases/docs/openapi @elastic/mlr-docs - -# Enterprise Search -/x-pack/test/functional_enterprise_search/ @elastic/enterprise-search-frontend -/x-pack/plugins/enterprise_search/public/applications/shared/doc_links @elastic/ent-search-docs-team - -# Management Experience - Deployment Management -#CC# /x-pack/plugins/cross_cluster_replication/ @elastic/platform-deployment-management - -# Security Solution -/x-pack/test/endpoint_api_integration_no_ingest/ @elastic/security-solution -/x-pack/test/security_solution_endpoint/ @elastic/security-solution -/x-pack/test/functional/es_archives/endpoint/ @elastic/security-solution -/x-pack/test/plugin_functional/test_suites/resolver/ @elastic/security-solution -/x-pack/test/detection_engine_api_integration @elastic/security-solution -/x-pack/test/lists_api_integration @elastic/security-solution -/x-pack/test/api_integration/apis/security_solution @elastic/security-solution -#CC# /x-pack/plugins/security_solution/ @elastic/security-solution - -# Security Solution sub teams - -## Security Solution sub teams - Threat Hunting Investigations - -/x-pack/plugins/security_solution/common/search_strategy/timeline @elastic/security-threat-hunting-investigations -/x-pack/plugins/security_solution/common/types/timeline @elastic/security-threat-hunting-investigations - -/x-pack/plugins/security_solution/cypress/e2e/timeline_templates @elastic/security-threat-hunting-investigations -/x-pack/plugins/security_solution/cypress/e2e/timeline @elastic/security-threat-hunting-investigations -/x-pack/plugins/security_solution/cypress/e2e/detection_alerts @elastic/security-threat-hunting-investigations -/x-pack/plugins/security_solution/cypress/e2e/urls @elastic/security-threat-hunting-investigations - -/x-pack/plugins/security_solution/public/common/components/alerts_viewer @elastic/security-threat-hunting-investigations -/x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_action @elastic/security-threat-hunting-investigations -/x-pack/plugins/security_solution/public/common/components/event_details @elastic/security-threat-hunting-investigations -/x-pack/plugins/security_solution/public/common/components/events_viewer @elastic/security-threat-hunting-investigations -/x-pack/plugins/security_solution/public/common/components/markdown_editor @elastic/security-threat-hunting-investigations -/x-pack/plugins/security_solution/public/detections/components/alerts_kpis @elastic/security-threat-hunting-investigations -/x-pack/plugins/security_solution/public/detections/components/alerts_table @elastic/security-threat-hunting-investigations -/x-pack/plugins/security_solution/public/detections/components/alerts_info @elastic/security-threat-hunting-investigations -/x-pack/plugins/security_solution/public/resolver @elastic/security-threat-hunting-investigations -/x-pack/plugins/security_solution/public/timelines @elastic/security-threat-hunting-investigations - -/x-pack/plugins/security_solution/server/lib/timeline @elastic/security-threat-hunting-investigations - -## Security Solution sub teams - Threat Hunting Explore -/x-pack/plugins/security_solution/common/search_strategy/security_solution/hosts @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/common/search_strategy/security_solution/matrix_histogram @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/common/search_strategy/security_solution/network @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/common/search_strategy/security_solution/user @elastic/security-threat-hunting-explore - -/x-pack/plugins/security_solution/cypress/e2e/cases @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/cypress/e2e/filters @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/cypress/e2e/host_details @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/cypress/e2e/hosts @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/cypress/e2e/network @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/cypress/e2e/overview @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/cypress/e2e/pagination @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/cypress/e2e/users @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/cypress/screens/hosts @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/cypress/screens/network @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/cypress/tasks/hosts @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/cypress/tasks/network @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/cypress/upgrade_e2e/threat_hunting/cases @elastic/security-threat-hunting-explore - -/x-pack/plugins/security_solution/public/common/components/guided_onboarding_tour @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/public/common/components/charts @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/public/common/components/header_page @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/public/common/components/header_section @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/public/common/components/inspect @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/public/common/components/last_event_time @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/public/common/components/links @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/public/common/components/matrix_histogram @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/public/common/components/navigation @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/public/common/components/news_feed @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/public/common/components/overview_description_list @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/public/common/components/page @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/public/common/components/sidebar_header @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/public/common/components/tables @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/public/common/components/top_n @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/public/common/components/with_hover_actions @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/public/common/containers/matrix_histogram @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/public/common/lib/cell_actions @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/public/cases @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/public/explore @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/public/overview @elastic/security-threat-hunting-explore - -/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/matrix_histogram @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/network @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/users @elastic/security-threat-hunting-explore - -## Security Solution sub teams - Detections and Response Alerts -/x-pack/plugins/security_solution/common/detection_engine/schemas/alerts @elastic/security-detections-response-alerts -/x-pack/plugins/security_solution/common/field_maps @elastic/security-detections-response-alerts - -/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui @elastic/security-detections-response-alerts -/x-pack/plugins/security_solution/public/detections/pages/alerts @elastic/security-detections-response-alerts - -/x-pack/plugins/security_solution/server/lib/detection_engine/migrations @elastic/security-detections-response-alerts -/x-pack/plugins/security_solution/server/lib/detection_engine/rule_preview @elastic/security-detections-response-alerts -/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types @elastic/security-detections-response-alerts -/x-pack/plugins/security_solution/server/lib/detection_engine/signals @elastic/security-detections-response-alerts -/x-pack/plugins/security_solution/server/lib/detection_engine/routes/index @elastic/security-detections-response-alerts -/x-pack/plugins/security_solution/server/lib/detection_engine/routes/signals @elastic/security-detections-response-alerts - -## Security Solution sub teams - Detections and Response Rules -/x-pack/plugins/security_solution/common/detection_engine/fleet_integrations @elastic/security-detections-response-rules -/x-pack/plugins/security_solution/common/detection_engine/prebuilt_rules @elastic/security-detections-response-rules -/x-pack/plugins/security_solution/common/detection_engine/rule_management @elastic/security-detections-response-rules -/x-pack/plugins/security_solution/common/detection_engine/rule_monitoring @elastic/security-detections-response-rules -/x-pack/plugins/security_solution/common/detection_engine/rule_schema @elastic/security-detections-response-rules @elastic/security-detections-response-alerts - -/x-pack/plugins/security_solution/public/common/components/health_truncate_text @elastic/security-detections-response-rules -/x-pack/plugins/security_solution/public/common/components/links_to_docs @elastic/security-detections-response-rules -/x-pack/plugins/security_solution/public/common/components/ml_popover @elastic/security-detections-response-rules -/x-pack/plugins/security_solution/public/common/components/popover_items @elastic/security-detections-response-rules -/x-pack/plugins/security_solution/public/detection_engine/fleet_integrations @elastic/security-detections-response-rules -/x-pack/plugins/security_solution/public/detection_engine/rule_details_ui @elastic/security-detections-response-rules -/x-pack/plugins/security_solution/public/detection_engine/rule_management @elastic/security-detections-response-rules -/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui @elastic/security-detections-response-rules -/x-pack/plugins/security_solution/public/detection_engine/rule_monitoring @elastic/security-detections-response-rules -/x-pack/plugins/security_solution/public/detections/components/callouts @elastic/security-detections-response-rules -/x-pack/plugins/security_solution/public/detections/components/modals/ml_job_upgrade_modal @elastic/security-detections-response-rules -/x-pack/plugins/security_solution/public/detections/components/rules @elastic/security-detections-response-rules -/x-pack/plugins/security_solution/public/detections/components/rules/rule_preview @elastic/security-detections-response-alerts -/x-pack/plugins/security_solution/public/detections/containers/detection_engine/rules @elastic/security-detections-response-rules -/x-pack/plugins/security_solution/public/detections/mitre @elastic/security-detections-response-rules -/x-pack/plugins/security_solution/public/detections/pages/detection_engine/rules @elastic/security-detections-response-rules -/x-pack/plugins/security_solution/public/rules @elastic/security-detections-response-rules - -/x-pack/plugins/security_solution/server/lib/detection_engine/fleet_integrations @elastic/security-detections-response-rules -/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules @elastic/security-detections-response-rules -/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management @elastic/security-detections-response-rules -/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring @elastic/security-detections-response-rules -/x-pack/plugins/security_solution/server/lib/detection_engine/rule_schema @elastic/security-detections-response-rules @elastic/security-detections-response-alerts - -/x-pack/plugins/security_solution/server/utils @elastic/security-detections-response-rules - -## Security Solution sub teams - Security Platform - -/x-pack/plugins/security_solution/cypress/e2e/data_sources @elastic/security-solution-platform -/x-pack/plugins/security_solution/cypress/e2e/exceptions @elastic/security-solution-platform -/x-pack/plugins/security_solution/cypress/e2e/value_lists @elastic/security-solution-platform - -/x-pack/plugins/security_solution/common/detection_engine/rule_exceptions @elastic/security-solution-platform - -/x-pack/plugins/security_solution/public/detection_engine/rule_exceptions @elastic/security-solution-platform -/x-pack/plugins/security_solution/public/detection_engine/rule_exceptions_ui @elastic/security-solution-platform -/x-pack/plugins/security_solution/public/common/components/exceptions @elastic/security-solution-platform -/x-pack/plugins/security_solution/public/exceptions @elastic/security-solution-platform -/x-pack/plugins/security_solution/public/detections/containers/detection_engine/lists @elastic/security-solution-platform -/x-pack/plugins/security_solution/public/common/components/sourcerer @elastic/security-solution-platform - -/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy @elastic/security-solution-platform -/x-pack/plugins/security_solution/server/lib/detection_engine/rule_exceptions @elastic/security-solution-platform -/x-pack/plugins/security_solution/server/lib/sourcerer @elastic/security-solution-platform - -## Security Threat Intelligence - Under Security Platform -/x-pack/plugins/security_solution/public/common/components/threat_match @elastic/security-solution-platform - -## Security Solution cross teams ownership -/x-pack/plugins/security_solution/cypress/fixtures @elastic/security-detections-response @elastic/security-threat-hunting -/x-pack/plugins/security_solution/cypress/helpers @elastic/security-detections-response @elastic/security-threat-hunting -/x-pack/plugins/security_solution/cypress/e2e/detection_rules @elastic/security-detections-response-rules @elastic/security-detections-response-alerts -/x-pack/plugins/security_solution/cypress/objects @elastic/security-detections-response @elastic/security-threat-hunting -/x-pack/plugins/security_solution/cypress/plugins @elastic/security-detections-response @elastic/security-threat-hunting -/x-pack/plugins/security_solution/cypress/screens/common @elastic/security-detections-response @elastic/security-threat-hunting -/x-pack/plugins/security_solution/cypress/support @elastic/security-detections-response @elastic/security-threat-hunting -/x-pack/plugins/security_solution/cypress/urls @elastic/security-threat-hunting-investigations @elastic/security-solution-platform - -/x-pack/plugins/security_solution/common/ecs @elastic/security-threat-hunting-investigations -/x-pack/plugins/security_solution/common/test @elastic/security-detections-response-rules @elastic/security-detections-response-alerts - -/x-pack/plugins/security_solution/public/common/components/callouts @elastic/security-detections-response -/x-pack/plugins/security_solution/public/common/components/hover_actions @elastic/security-threat-hunting-explore @elastic/security-threat-hunting-investigations - -/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions @elastic/security-solution-platform @elastic/security-detections-response-rules -/x-pack/plugins/security_solution/server/routes @elastic/security-detections-response @elastic/security-threat-hunting - -## Security Solution sub teams - security-defend-workflows -/x-pack/plugins/security_solution/public/management/ @elastic/security-defend-workflows -/x-pack/plugins/security_solution/public/common/lib/endpoint*/ @elastic/security-defend-workflows -/x-pack/plugins/security_solution/public/common/components/endpoint/ @elastic/security-defend-workflows -/x-pack/plugins/security_solution/common/endpoint/ @elastic/security-defend-workflows -/x-pack/plugins/security_solution/server/endpoint/ @elastic/security-defend-workflows -/x-pack/plugins/security_solution/server/lists_integration/endpoint/ @elastic/security-defend-workflows -/x-pack/plugins/security_solution/server/lib/license/ @elastic/security-defend-workflows -/x-pack/plugins/security_solution/server/fleet_integration/ @elastic/security-defend-workflows -/x-pack/plugins/security_solution/scripts/endpoint/event_filters/ @elastic/security-defend-workflows -/x-pack/plugins/security_solution/scripts/endpoint/trusted_apps/ @elastic/security-defend-workflows -/x-pack/test/security_solution_endpoint/apps/endpoint/ @elastic/security-defend-workflows -/x-pack/test/security_solution_endpoint_api_int/ @elastic/security-defend-workflows - -## Security Solution sub teams - security-telemetry (Data Engineering) -x-pack/plugins/security_solution/server/usage/ @elastic/security-data-analytics -x-pack/plugins/security_solution/server/lib/telemetry/ @elastic/security-data-analytics - -## Security Solution sub teams - security-engineering-productivity -x-pack/plugins/security_solution/cypress/ccs_e2e @elastic/security-engineering-productivity -x-pack/plugins/security_solution/cypress/upgrade_e2e @elastic/security-engineering-productivity -x-pack/plugins/security_solution/cypress/README.md @elastic/security-engineering-productivity -x-pack/test/security_solution_cypress @elastic/security-engineering-productivity - -## Security Solution sub teams - adaptive-workload-protection -x-pack/plugins/security_solution/public/common/components/sessions_viewer @elastic/awp-viz -x-pack/plugins/security_solution/public/kubernetes @elastic/awp-viz - -## Security Solution sub teams - Protections Experience -x-pack/plugins/security_solution/public/threat_intelligence @elastic/protections-experience -x-pack/test/threat_intelligence_cypress @elastic/protections-experience - -# Security Defend Workflows - OSQuery Ownership -/x-pack/plugins/security_solution/common/detection_engine/rule_response_actions @elastic/security-defend-workflows -/x-pack/plugins/security_solution/public/detection_engine/rule_response_actions @elastic/security-defend-workflows -/x-pack/plugins/security_solution/server/lib/detection_engine/rule_response_actions @elastic/security-defend-workflows - -# Cloud Security Posture -/x-pack/plugins/security_solution/public/cloud_security_posture @elastic/kibana-cloud-security-posture -/x-pack/test/api_integration/apis/cloud_security_posture/ @elastic/kibana-cloud-security-posture -/x-pack/test/cloud_security_posture_functional/ @elastic/kibana-cloud-security-posture - - -# Security Solution onboarding tour -/x-pack/plugins/security_solution/public/common/components/guided_onboarding @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/cypress/e2e/guided_onboarding @elastic/security-threat-hunting-explore - -# Design (at the bottom for specificity of SASS files) -**/*.scss @elastic/kibana-design - -# Observability design -/x-pack/plugins/apm/**/*.scss @elastic/observability-design -/x-pack/plugins/infra/**/*.scss @elastic/observability-design -/x-pack/plugins/fleet/**/*.scss @elastic/observability-design -/x-pack/plugins/observability/**/*.scss @elastic/observability-design -/x-pack/plugins/monitoring/**/*.scss @elastic/observability-design - -# Ent. Search design -/x-pack/plugins/enterprise_search/**/*.scss @elastic/ent-search-design - -# Security design -/x-pack/plugins/endpoint/**/*.scss @elastic/security-design -/x-pack/plugins/security_solution/**/*.scss @elastic/security-design - -# Logstash -#CC# /x-pack/plugins/logstash/ @elastic/logstash - -# EUI design -/src/plugins/kibana_react/public/page_template/ @elastic/eui-design @elastic/appex-sharedux - -# Landing page for guided onboarding in Home plugin -/src/plugins/home/public/application/components/guided_onboarding @elastic/platform-onboarding - #### -## Everything below this comment is automatically generated based on kibana.jsonc -## "owner" fields. This file is automatically updated by CI or can be updated locally -## by running `node scripts/generate codeowners`. +## Everything at the top of the codeowners file is auto generated based on the +## "owner" fields in the kibana.jsonc files at the root of each package. This +## file is automatically updated by CI or can be updated locally by running +## `node scripts/generate codeowners`. #### x-pack/test/alerting_api_integration/common/plugins/aad @elastic/response-ops @@ -1170,6 +669,7 @@ packages/kbn-utility-types @elastic/kibana-core packages/kbn-utility-types-jest @elastic/kibana-operations packages/kbn-utils @elastic/kibana-operations x-pack/plugins/ux @elastic/uptime +packages/kbn-validate-next-docs-cli @elastic/kibana-operations src/plugins/vis_default_editor @elastic/kibana-visualizations src/plugins/vis_types/gauge @elastic/kibana-visualizations src/plugins/vis_types/heatmap @elastic/kibana-visualizations @@ -1188,9 +688,523 @@ x-pack/plugins/watcher @elastic/platform-deployment-management packages/kbn-web-worker-stub @elastic/kibana-operations packages/kbn-whereis-pkg-cli @elastic/kibana-operations packages/kbn-yarn-lock-validator @elastic/kibana-operations +#### +## Everything below this line overrides the default assignments for each package. +## Items lower in the file have higher precedence: +## https://help.github.com/articles/about-codeowners/ +#### + +# The #CC# prefix delineates Code Coverage, +# used for the 'team' designator within Kibana Stats + +# Data Discovery +/x-pack/test/functional/apps/discover/ @elastic/kibana-data-discovery +/x-pack/test/functional_with_es_ssl/apps/discover_ml_uptime/discover/ @elastic/kibana-data-discovery +/test/functional/apps/discover/ @elastic/kibana-data-discovery +/test/functional/apps/context/ @elastic/kibana-data-discovery +/test/api_integration/apis/unified_field_list/ @elastic/kibana-data-discovery +/x-pack/test/search_sessions_integration/ @elastic/kibana-data-discovery +/test/plugin_functional/test_suites/data_plugin @elastic/kibana-data-discovery +/examples/demo_search/ @elastic/kibana-data-discovery + +# Vis Editors +/src/plugins/visualize/ @elastic/kibana-visualizations +/x-pack/test/functional/apps/lens @elastic/kibana-visualizations +/x-pack/test/api_integration/apis/lens/ @elastic/kibana-visualizations +/test/functional/apps/visualize/ @elastic/kibana-visualizations +/x-pack/test/functional/apps/graph @elastic/kibana-visualizations + +# Global Experience + +### Global Experience Reporting +/x-pack/test/functional/apps/dashboard/reporting/ @elastic/appex-sharedux +/x-pack/test/functional/apps/reporting/ @elastic/appex-sharedux +/x-pack/test/functional/apps/reporting_management/ @elastic/appex-sharedux +/x-pack/test/examples/screenshotting/ @elastic/appex-sharedux +/x-pack/test/functional/es_archives/lens/reporting/ @elastic/appex-sharedux +/x-pack/test/functional/es_archives/reporting/ @elastic/appex-sharedux +/x-pack/test/functional/fixtures/kbn_archiver/reporting/ @elastic/appex-sharedux +/x-pack/test/reporting_api_integration/ @elastic/appex-sharedux +/x-pack/test/reporting_functional/ @elastic/appex-sharedux +/x-pack/test/stack_functional_integration/apps/reporting/ @elastic/appex-sharedux +/docs/user/reporting @elastic/appex-sharedux +/docs/settings/reporting-settings.asciidoc @elastic/appex-sharedux +/docs/setup/configuring-reporting.asciidoc @elastic/appex-sharedux + +### Global Experience Tagging +/x-pack/test/saved_object_tagging/ @elastic/appex-sharedux + +### Kibana React (to be deprecated) +/src/plugins/kibana_react/public/@elastic/appex-sharedux @elastic/kibana-presentation + +### Home Plugin and Packages +/src/plugins/home/public @elastic/appex-sharedux +/src/plugins/home/server/*.ts @elastic/appex-sharedux +/src/plugins/home/server/services/ @elastic/appex-sharedux + +### Code Coverage +#CC# /src/plugins/home/public @elastic/appex-sharedux +#CC# /src/plugins/home/server/services/ @elastic/appex-sharedux +#CC# /src/plugins/home/ @elastic/appex-sharedux +#CC# /x-pack/plugins/reporting/ @elastic/appex-sharedux + +### Observability Plugins + +# Observability Shared +/x-pack/plugins/observability/public/components/shared/date_picker/ @elastic/uptime + +# Unified Observability - on hold due to team capacity shortage +# For now, if you're changing these pages, get a review from someone who understand the changes +# /x-pack/plugins/observability/public/context @elastic/unified-observability +# /x-pack/test/observability_functional @elastic/unified-observability + +# Home/Overview/Landing Pages +/x-pack/plugins/observability/public/pages/home @elastic/observability-design +/x-pack/plugins/observability/public/pages/landing @elastic/observability-design +/x-pack/plugins/observability/public/pages/overview @elastic/observability-design @elastic/actionable-observability + +# Actionable Observability +/x-pack/plugins/observability/common/rules @elastic/actionable-observability +/x-pack/plugins/observability/public/rules @elastic/actionable-observability +/x-pack/plugins/observability/public/pages/alerts @elastic/actionable-observability +/x-pack/plugins/observability/public/pages/cases @elastic/actionable-observability +/x-pack/plugins/observability/public/pages/rules @elastic/actionable-observability +/x-pack/plugins/observability/public/pages/rule_details @elastic/actionable-observability +/x-pack/test/observability_functional @elastic/actionable-observability + +# Infra Monitoring +/x-pack/test/functional/apps/infra @elastic/infra-monitoring-ui +/x-pack/test/api_integration/apis/infra @elastic/infra-monitoring-ui + +# Elastic Stack Monitoring +/x-pack/test/functional/apps/monitoring @elastic/infra-monitoring-ui +/x-pack/test/api_integration/apis/monitoring @elastic/infra-monitoring-ui +/x-pack/test/api_integration/apis/monitoring_collection @elastic/infra-monitoring-ui + +# Fleet +/fleet_packages.json @elastic/fleet +/x-pack/test/fleet_api_integration @elastic/fleet +/x-pack/test/fleet_cypress @elastic/fleet +/x-pack/test/fleet_functional @elastic/fleet +/src/dev/build/tasks/bundle_fleet_packages.ts @elastic/fleet @elastic/kibana-operations + +# APM +/x-pack/test/functional/apps/apm/ @elastic/apm-ui +/x-pack/test/apm_api_integration/ @elastic/apm-ui +/src/apm.js @elastic/kibana-core @vigneshshanmugam +/src/core/types/elasticsearch @elastic/apm-ui +/packages/kbn-utility-types/src/dot.ts @dgieselaar +/packages/kbn-utility-types/src/dot_test.ts @dgieselaar +#CC# /src/plugins/apm_oss/ @elastic/apm-ui +#CC# /x-pack/plugins/observability/ @elastic/apm-ui + +# Uptime +/x-pack/test/functional_with_es_ssl/apps/discover_ml_uptime/uptime/ @elastic/uptime +/x-pack/test/functional/apps/uptime @elastic/uptime +/x-pack/test/functional/es_archives/uptime @elastic/uptime +/x-pack/test/functional/services/uptime @elastic/uptime +/x-pack/test/api_integration/apis/uptime @elastic/uptime +/x-pack/plugins/observability/public/components/shared/exploratory_view @elastic/uptime + + +# Client Side Monitoring / Uptime (lives in APM directories but owned by Uptime) +/x-pack/plugins/apm/public/application/uxApp.tsx @elastic/uptime +/x-pack/plugins/apm/public/components/app/rum_dashboard @elastic/uptime +/x-pack/test/apm_api_integration/tests/csm/ @elastic/uptime + +# Observability onboarding tour +/x-pack/plugins/observability/public/components/shared/tour @elastic/platform-onboarding +/x-pack/test/functional/apps/infra/tour.ts @elastic/platform-onboarding + +### END Observability Plugins + +# Presentation +/test/functional/apps/dashboard/ @elastic/kibana-presentation +/test/functional/apps/dashboard_elements/ @elastic/kibana-presentation +/test/functional/services/dashboard/ @elastic/kibana-presentation +/x-pack/test/functional/apps/canvas/ @elastic/kibana-presentation +/test/plugin_functional/test_suites/panel_actions @elastic/kibana-presentation +#CC# /src/plugins/kibana_react/public/code_editor/ @elastic/kibana-presentation + +# Machine Learning +/x-pack/plugins/ml/common/openapi/ @elastic/mlr-docs +/x-pack/test/accessibility/apps/ml.ts @elastic/ml-ui +/x-pack/test/accessibility/apps/ml_embeddables_in_dashboard.ts @elastic/ml-ui +/x-pack/test/api_integration/apis/ml/ @elastic/ml-ui +/x-pack/test/api_integration_basic/apis/ml/ @elastic/ml-ui +/x-pack/test/functional/apps/ml/ @elastic/ml-ui +/x-pack/test/functional/es_archives/ml/ @elastic/ml-ui +/x-pack/test/functional/services/ml/ @elastic/ml-ui +/x-pack/test/functional_basic/apps/ml/ @elastic/ml-ui +/x-pack/test/functional_with_es_ssl/apps/discover_ml_uptime/ml/ @elastic/ml-ui +/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/ml_rule_types/ @elastic/ml-ui +/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/transform_rule_types/ @elastic/ml-ui +/x-pack/test/screenshot_creation/apps/ml_docs @elastic/ml-ui +/x-pack/test/screenshot_creation/services/ml_screenshots.ts @elastic/ml-ui +/docs/api/machine-learning/ @elastic/mlr-docs + +# Additional plugins and packages maintained by the ML team. +/x-pack/test/accessibility/apps/transform.ts @elastic/ml-ui +/x-pack/test/api_integration/apis/transform/ @elastic/ml-ui +/x-pack/test/api_integration_basic/apis/transform/ @elastic/ml-ui +/x-pack/test/functional/apps/transform/ @elastic/ml-ui +/x-pack/test/functional/services/transform/ @elastic/ml-ui +/x-pack/test/functional_basic/apps/transform/ @elastic/ml-ui + +# Maps +#CC# /x-pack/plugins/maps/ @elastic/kibana-gis +/x-pack/test/api_integration/apis/maps/ @elastic/kibana-gis +/x-pack/test/functional/apps/maps/ @elastic/kibana-gis +/x-pack/test/functional/es_archives/maps/ @elastic/kibana-gis +/x-pack/plugins/stack_alerts/server/rule_types/geo_containment @elastic/kibana-gis +/x-pack/plugins/stack_alerts/public/rule_types/geo_containment @elastic/kibana-gis +#CC# /x-pack/plugins/file_upload @elastic/kibana-gis + +# Operations +/src/dev/license_checker/config.ts @elastic/kibana-operations +/src/dev/ @elastic/kibana-operations +/src/setup_node_env/ @elastic/kibana-operations +/src/cli/keystore/ @elastic/kibana-operations +/.ci/es-snapshots/ @elastic/kibana-operations +/.github/workflows/ @elastic/kibana-operations +/vars/ @elastic/kibana-operations +/.bazelignore @elastic/kibana-operations +/.bazeliskversion @elastic/kibana-operations +/.bazelrc @elastic/kibana-operations +/.bazelrc.common @elastic/kibana-operations +/.bazelversion @elastic/kibana-operations +/WORKSPACE.bazel @elastic/kibana-operations +/.buildkite/ @elastic/kibana-operations +/kbn_pm/ @elastic/kibana-operations + +# Quality Assurance +/src/dev/code_coverage @elastic/kibana-qa +/vars/*Coverage.groovy @elastic/kibana-qa +/test/functional/services/common @elastic/kibana-qa +/test/functional/services/lib @elastic/kibana-qa +/test/functional/services/remote @elastic/kibana-qa +/test/visual_regression @elastic/kibana-qa +/x-pack/test/visual_regression @elastic/kibana-qa + +# Core +/config/kibana.yml @elastic/kibana-core +/typings/ @elastic/kibana-core +/x-pack/test/saved_objects_field_count/ @elastic/kibana-core +/test/analytics @elastic/kibana-core +#CC# /src/core/server/csp/ @elastic/kibana-core +#CC# /src/plugins/saved_objects/ @elastic/kibana-core +#CC# /x-pack/plugins/cloud/ @elastic/kibana-core +#CC# /x-pack/plugins/features/ @elastic/kibana-core +#CC# /x-pack/plugins/global_search/ @elastic/kibana-core +#CC# /src/plugins/newsfeed @elastic/kibana-core +#CC# /x-pack/plugins/global_search_providers/ @elastic/kibana-core + +# Kibana Telemetry +/.telemetryrc.json @elastic/kibana-core +/x-pack/.telemetryrc.json @elastic/kibana-core +/src/plugins/telemetry/schema/ @elastic/kibana-core @elastic/kibana-telemetry +/x-pack/plugins/telemetry_collection_xpack/schema/ @elastic/kibana-core @elastic/kibana-telemetry + +# Kibana Localization +/src/dev/i18n/ @elastic/kibana-localization @elastic/kibana-core +/src/core/public/i18n/ @elastic/kibana-localization @elastic/kibana-core +#CC# /x-pack/plugins/translations/ @elastic/kibana-localization @elastic/kibana-core + +# Kibana Platform Security +/src/plugins/telemetry/server/config/telemetry_labels.ts @elastic/kibana-security +/test/interactive_setup_api_integration/ @elastic/kibana-security +/test/interactive_setup_functional/ @elastic/kibana-security +/test/plugin_functional/test_suites/core_plugins/rendering.ts @elastic/kibana-security +/x-pack/test/api_integration/apis/security/ @elastic/kibana-security +/x-pack/test/api_integration/apis/spaces/ @elastic/kibana-security +/x-pack/test/ui_capabilities/ @elastic/kibana-security +/x-pack/test/encrypted_saved_objects_api_integration/ @elastic/kibana-security +/x-pack/test/functional/apps/security/ @elastic/kibana-security +/x-pack/test/functional/apps/spaces/ @elastic/kibana-security +/x-pack/test/security_api_integration/ @elastic/kibana-security +/x-pack/test/security_functional/ @elastic/kibana-security +/x-pack/test/spaces_api_integration/ @elastic/kibana-security +/x-pack/test/saved_object_api_integration/ @elastic/kibana-security +#CC# /x-pack/plugins/security/ @elastic/kibana-security + +# Response Ops team +/x-pack/test/alerting_api_integration/ @elastic/response-ops +/x-pack/test/plugin_api_integration/test_suites/task_manager/ @elastic/response-ops +/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/ @elastic/response-ops +/docs/user/alerting/ @elastic/response-ops +/docs/management/connectors/ @elastic/response-ops +/x-pack/test/cases_api_integration/ @elastic/response-ops +/x-pack/test/functional/services/cases/ @elastic/response-ops +/x-pack/test/functional_with_es_ssl/apps/cases/ @elastic/response-ops +/x-pack/test/api_integration/apis/cases/ @elastic/response-ops +/docs/api/actions-and-connectors @elastic/mlr-docs +/docs/api/alerting @elastic/mlr-docs +/docs/api/cases @elastic/mlr-docs +/x-pack/plugins/cases/docs/openapi @elastic/mlr-docs + +# Enterprise Search +/x-pack/test/functional_enterprise_search/ @elastic/enterprise-search-frontend +/x-pack/plugins/enterprise_search/public/applications/shared/doc_links @elastic/ent-search-docs-team + +# Management Experience - Deployment Management +#CC# /x-pack/plugins/cross_cluster_replication/ @elastic/platform-deployment-management + +# Security Solution +/x-pack/test/endpoint_api_integration_no_ingest/ @elastic/security-solution +/x-pack/test/security_solution_endpoint/ @elastic/security-solution +/x-pack/test/functional/es_archives/endpoint/ @elastic/security-solution +/x-pack/test/plugin_functional/test_suites/resolver/ @elastic/security-solution +/x-pack/test/detection_engine_api_integration @elastic/security-solution +/x-pack/test/lists_api_integration @elastic/security-solution +/x-pack/test/api_integration/apis/security_solution @elastic/security-solution +#CC# /x-pack/plugins/security_solution/ @elastic/security-solution + +# Security Solution sub teams + +## Security Solution sub teams - Threat Hunting Investigations + +/x-pack/plugins/security_solution/common/search_strategy/timeline @elastic/security-threat-hunting-investigations +/x-pack/plugins/security_solution/common/types/timeline @elastic/security-threat-hunting-investigations + +/x-pack/plugins/security_solution/cypress/e2e/timeline_templates @elastic/security-threat-hunting-investigations +/x-pack/plugins/security_solution/cypress/e2e/timeline @elastic/security-threat-hunting-investigations +/x-pack/plugins/security_solution/cypress/e2e/detection_alerts @elastic/security-threat-hunting-investigations +/x-pack/plugins/security_solution/cypress/e2e/urls @elastic/security-threat-hunting-investigations + +/x-pack/plugins/security_solution/public/common/components/alerts_viewer @elastic/security-threat-hunting-investigations +/x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_action @elastic/security-threat-hunting-investigations +/x-pack/plugins/security_solution/public/common/components/event_details @elastic/security-threat-hunting-investigations +/x-pack/plugins/security_solution/public/common/components/events_viewer @elastic/security-threat-hunting-investigations +/x-pack/plugins/security_solution/public/common/components/markdown_editor @elastic/security-threat-hunting-investigations +/x-pack/plugins/security_solution/public/detections/components/alerts_kpis @elastic/security-threat-hunting-investigations +/x-pack/plugins/security_solution/public/detections/components/alerts_table @elastic/security-threat-hunting-investigations +/x-pack/plugins/security_solution/public/detections/components/alerts_info @elastic/security-threat-hunting-investigations +/x-pack/plugins/security_solution/public/resolver @elastic/security-threat-hunting-investigations +/x-pack/plugins/security_solution/public/timelines @elastic/security-threat-hunting-investigations + +/x-pack/plugins/security_solution/server/lib/timeline @elastic/security-threat-hunting-investigations + +## Security Solution sub teams - Threat Hunting Explore +/x-pack/plugins/security_solution/common/search_strategy/security_solution/hosts @elastic/security-threat-hunting-explore +/x-pack/plugins/security_solution/common/search_strategy/security_solution/matrix_histogram @elastic/security-threat-hunting-explore +/x-pack/plugins/security_solution/common/search_strategy/security_solution/network @elastic/security-threat-hunting-explore +/x-pack/plugins/security_solution/common/search_strategy/security_solution/user @elastic/security-threat-hunting-explore + +/x-pack/plugins/security_solution/cypress/e2e/cases @elastic/security-threat-hunting-explore +/x-pack/plugins/security_solution/cypress/e2e/filters @elastic/security-threat-hunting-explore +/x-pack/plugins/security_solution/cypress/e2e/host_details @elastic/security-threat-hunting-explore +/x-pack/plugins/security_solution/cypress/e2e/hosts @elastic/security-threat-hunting-explore +/x-pack/plugins/security_solution/cypress/e2e/network @elastic/security-threat-hunting-explore +/x-pack/plugins/security_solution/cypress/e2e/overview @elastic/security-threat-hunting-explore +/x-pack/plugins/security_solution/cypress/e2e/pagination @elastic/security-threat-hunting-explore +/x-pack/plugins/security_solution/cypress/e2e/users @elastic/security-threat-hunting-explore +/x-pack/plugins/security_solution/cypress/screens/hosts @elastic/security-threat-hunting-explore +/x-pack/plugins/security_solution/cypress/screens/network @elastic/security-threat-hunting-explore +/x-pack/plugins/security_solution/cypress/tasks/hosts @elastic/security-threat-hunting-explore +/x-pack/plugins/security_solution/cypress/tasks/network @elastic/security-threat-hunting-explore +/x-pack/plugins/security_solution/cypress/upgrade_e2e/threat_hunting/cases @elastic/security-threat-hunting-explore + +/x-pack/plugins/security_solution/public/common/components/guided_onboarding_tour @elastic/security-threat-hunting-explore +/x-pack/plugins/security_solution/public/common/components/charts @elastic/security-threat-hunting-explore +/x-pack/plugins/security_solution/public/common/components/header_page @elastic/security-threat-hunting-explore +/x-pack/plugins/security_solution/public/common/components/header_section @elastic/security-threat-hunting-explore +/x-pack/plugins/security_solution/public/common/components/inspect @elastic/security-threat-hunting-explore +/x-pack/plugins/security_solution/public/common/components/last_event_time @elastic/security-threat-hunting-explore +/x-pack/plugins/security_solution/public/common/components/links @elastic/security-threat-hunting-explore +/x-pack/plugins/security_solution/public/common/components/matrix_histogram @elastic/security-threat-hunting-explore +/x-pack/plugins/security_solution/public/common/components/navigation @elastic/security-threat-hunting-explore +/x-pack/plugins/security_solution/public/common/components/news_feed @elastic/security-threat-hunting-explore +/x-pack/plugins/security_solution/public/common/components/overview_description_list @elastic/security-threat-hunting-explore +/x-pack/plugins/security_solution/public/common/components/page @elastic/security-threat-hunting-explore +/x-pack/plugins/security_solution/public/common/components/sidebar_header @elastic/security-threat-hunting-explore +/x-pack/plugins/security_solution/public/common/components/tables @elastic/security-threat-hunting-explore +/x-pack/plugins/security_solution/public/common/components/top_n @elastic/security-threat-hunting-explore +/x-pack/plugins/security_solution/public/common/components/with_hover_actions @elastic/security-threat-hunting-explore +/x-pack/plugins/security_solution/public/common/containers/matrix_histogram @elastic/security-threat-hunting-explore +/x-pack/plugins/security_solution/public/common/lib/cell_actions @elastic/security-threat-hunting-explore +/x-pack/plugins/security_solution/public/cases @elastic/security-threat-hunting-explore +/x-pack/plugins/security_solution/public/explore @elastic/security-threat-hunting-explore +/x-pack/plugins/security_solution/public/overview @elastic/security-threat-hunting-explore + +/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts @elastic/security-threat-hunting-explore +/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/matrix_histogram @elastic/security-threat-hunting-explore +/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/network @elastic/security-threat-hunting-explore +/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/users @elastic/security-threat-hunting-explore + +## Security Solution sub teams - Detections and Response Alerts +/x-pack/plugins/security_solution/common/detection_engine/schemas/alerts @elastic/security-detections-response-alerts +/x-pack/plugins/security_solution/common/field_maps @elastic/security-detections-response-alerts + +/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui @elastic/security-detections-response-alerts +/x-pack/plugins/security_solution/public/detections/pages/alerts @elastic/security-detections-response-alerts + +/x-pack/plugins/security_solution/server/lib/detection_engine/migrations @elastic/security-detections-response-alerts +/x-pack/plugins/security_solution/server/lib/detection_engine/rule_preview @elastic/security-detections-response-alerts +/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types @elastic/security-detections-response-alerts +/x-pack/plugins/security_solution/server/lib/detection_engine/signals @elastic/security-detections-response-alerts +/x-pack/plugins/security_solution/server/lib/detection_engine/routes/index @elastic/security-detections-response-alerts +/x-pack/plugins/security_solution/server/lib/detection_engine/routes/signals @elastic/security-detections-response-alerts + +## Security Solution sub teams - Detections and Response Rules +/x-pack/plugins/security_solution/common/detection_engine/fleet_integrations @elastic/security-detections-response-rules +/x-pack/plugins/security_solution/common/detection_engine/prebuilt_rules @elastic/security-detections-response-rules +/x-pack/plugins/security_solution/common/detection_engine/rule_management @elastic/security-detections-response-rules +/x-pack/plugins/security_solution/common/detection_engine/rule_monitoring @elastic/security-detections-response-rules +/x-pack/plugins/security_solution/common/detection_engine/rule_schema @elastic/security-detections-response-rules @elastic/security-detections-response-alerts + +/x-pack/plugins/security_solution/public/common/components/health_truncate_text @elastic/security-detections-response-rules +/x-pack/plugins/security_solution/public/common/components/links_to_docs @elastic/security-detections-response-rules +/x-pack/plugins/security_solution/public/common/components/ml_popover @elastic/security-detections-response-rules +/x-pack/plugins/security_solution/public/common/components/popover_items @elastic/security-detections-response-rules +/x-pack/plugins/security_solution/public/detection_engine/fleet_integrations @elastic/security-detections-response-rules +/x-pack/plugins/security_solution/public/detection_engine/rule_details_ui @elastic/security-detections-response-rules +/x-pack/plugins/security_solution/public/detection_engine/rule_management @elastic/security-detections-response-rules +/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui @elastic/security-detections-response-rules +/x-pack/plugins/security_solution/public/detection_engine/rule_monitoring @elastic/security-detections-response-rules +/x-pack/plugins/security_solution/public/detections/components/callouts @elastic/security-detections-response-rules +/x-pack/plugins/security_solution/public/detections/components/modals/ml_job_upgrade_modal @elastic/security-detections-response-rules +/x-pack/plugins/security_solution/public/detections/components/rules @elastic/security-detections-response-rules +/x-pack/plugins/security_solution/public/detections/components/rules/rule_preview @elastic/security-detections-response-alerts +/x-pack/plugins/security_solution/public/detections/containers/detection_engine/rules @elastic/security-detections-response-rules +/x-pack/plugins/security_solution/public/detections/mitre @elastic/security-detections-response-rules +/x-pack/plugins/security_solution/public/detections/pages/detection_engine/rules @elastic/security-detections-response-rules +/x-pack/plugins/security_solution/public/rules @elastic/security-detections-response-rules + +/x-pack/plugins/security_solution/server/lib/detection_engine/fleet_integrations @elastic/security-detections-response-rules +/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules @elastic/security-detections-response-rules +/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management @elastic/security-detections-response-rules +/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring @elastic/security-detections-response-rules +/x-pack/plugins/security_solution/server/lib/detection_engine/rule_schema @elastic/security-detections-response-rules @elastic/security-detections-response-alerts + +/x-pack/plugins/security_solution/server/utils @elastic/security-detections-response-rules + +## Security Solution sub teams - Security Platform + +/x-pack/plugins/security_solution/cypress/e2e/data_sources @elastic/security-solution-platform +/x-pack/plugins/security_solution/cypress/e2e/exceptions @elastic/security-solution-platform +/x-pack/plugins/security_solution/cypress/e2e/value_lists @elastic/security-solution-platform + +/x-pack/plugins/security_solution/common/detection_engine/rule_exceptions @elastic/security-solution-platform + +/x-pack/plugins/security_solution/public/detection_engine/rule_exceptions @elastic/security-solution-platform +/x-pack/plugins/security_solution/public/detection_engine/rule_exceptions_ui @elastic/security-solution-platform +/x-pack/plugins/security_solution/public/common/components/exceptions @elastic/security-solution-platform +/x-pack/plugins/security_solution/public/exceptions @elastic/security-solution-platform +/x-pack/plugins/security_solution/public/detections/containers/detection_engine/lists @elastic/security-solution-platform +/x-pack/plugins/security_solution/public/common/components/sourcerer @elastic/security-solution-platform + +/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy @elastic/security-solution-platform +/x-pack/plugins/security_solution/server/lib/detection_engine/rule_exceptions @elastic/security-solution-platform +/x-pack/plugins/security_solution/server/lib/sourcerer @elastic/security-solution-platform + +## Security Threat Intelligence - Under Security Platform +/x-pack/plugins/security_solution/public/common/components/threat_match @elastic/security-solution-platform + +## Security Solution cross teams ownership +/x-pack/plugins/security_solution/cypress/fixtures @elastic/security-detections-response @elastic/security-threat-hunting +/x-pack/plugins/security_solution/cypress/helpers @elastic/security-detections-response @elastic/security-threat-hunting +/x-pack/plugins/security_solution/cypress/e2e/detection_rules @elastic/security-detections-response-rules @elastic/security-detections-response-alerts +/x-pack/plugins/security_solution/cypress/objects @elastic/security-detections-response @elastic/security-threat-hunting +/x-pack/plugins/security_solution/cypress/plugins @elastic/security-detections-response @elastic/security-threat-hunting +/x-pack/plugins/security_solution/cypress/screens/common @elastic/security-detections-response @elastic/security-threat-hunting +/x-pack/plugins/security_solution/cypress/support @elastic/security-detections-response @elastic/security-threat-hunting +/x-pack/plugins/security_solution/cypress/urls @elastic/security-threat-hunting-investigations @elastic/security-solution-platform + +/x-pack/plugins/security_solution/common/ecs @elastic/security-threat-hunting-investigations +/x-pack/plugins/security_solution/common/test @elastic/security-detections-response-rules @elastic/security-detections-response-alerts + +/x-pack/plugins/security_solution/public/common/components/callouts @elastic/security-detections-response +/x-pack/plugins/security_solution/public/common/components/hover_actions @elastic/security-threat-hunting-explore @elastic/security-threat-hunting-investigations + +/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions @elastic/security-solution-platform @elastic/security-detections-response-rules +/x-pack/plugins/security_solution/server/routes @elastic/security-detections-response @elastic/security-threat-hunting + +## Security Solution sub teams - security-defend-workflows +/x-pack/plugins/security_solution/public/management/ @elastic/security-defend-workflows +/x-pack/plugins/security_solution/public/common/lib/endpoint*/ @elastic/security-defend-workflows +/x-pack/plugins/security_solution/public/common/components/endpoint/ @elastic/security-defend-workflows +/x-pack/plugins/security_solution/common/endpoint/ @elastic/security-defend-workflows +/x-pack/plugins/security_solution/server/endpoint/ @elastic/security-defend-workflows +/x-pack/plugins/security_solution/server/lists_integration/endpoint/ @elastic/security-defend-workflows +/x-pack/plugins/security_solution/server/lib/license/ @elastic/security-defend-workflows +/x-pack/plugins/security_solution/server/fleet_integration/ @elastic/security-defend-workflows +/x-pack/plugins/security_solution/scripts/endpoint/event_filters/ @elastic/security-defend-workflows +/x-pack/plugins/security_solution/scripts/endpoint/trusted_apps/ @elastic/security-defend-workflows +/x-pack/test/security_solution_endpoint/apps/endpoint/ @elastic/security-defend-workflows +/x-pack/test/security_solution_endpoint_api_int/ @elastic/security-defend-workflows + +## Security Solution sub teams - security-telemetry (Data Engineering) +x-pack/plugins/security_solution/server/usage/ @elastic/security-data-analytics +x-pack/plugins/security_solution/server/lib/telemetry/ @elastic/security-data-analytics + +## Security Solution sub teams - security-engineering-productivity +x-pack/plugins/security_solution/cypress/ccs_e2e @elastic/security-engineering-productivity +x-pack/plugins/security_solution/cypress/upgrade_e2e @elastic/security-engineering-productivity +x-pack/plugins/security_solution/cypress/README.md @elastic/security-engineering-productivity +x-pack/test/security_solution_cypress @elastic/security-engineering-productivity + +## Security Solution sub teams - adaptive-workload-protection +x-pack/plugins/security_solution/public/common/components/sessions_viewer @elastic/awp-viz +x-pack/plugins/security_solution/public/kubernetes @elastic/awp-viz + +## Security Solution sub teams - Protections Experience +x-pack/plugins/security_solution/public/threat_intelligence @elastic/protections-experience +x-pack/test/threat_intelligence_cypress @elastic/protections-experience + +# Security Defend Workflows - OSQuery Ownership +/x-pack/plugins/security_solution/common/detection_engine/rule_response_actions @elastic/security-defend-workflows +/x-pack/plugins/security_solution/public/detection_engine/rule_response_actions @elastic/security-defend-workflows +/x-pack/plugins/security_solution/server/lib/detection_engine/rule_response_actions @elastic/security-defend-workflows + +# Cloud Security Posture +/x-pack/plugins/security_solution/public/cloud_security_posture @elastic/kibana-cloud-security-posture +/x-pack/test/api_integration/apis/cloud_security_posture/ @elastic/kibana-cloud-security-posture +/x-pack/test/cloud_security_posture_functional/ @elastic/kibana-cloud-security-posture + + +# Security Solution onboarding tour +/x-pack/plugins/security_solution/public/common/components/guided_onboarding @elastic/security-threat-hunting-explore +/x-pack/plugins/security_solution/cypress/e2e/guided_onboarding @elastic/security-threat-hunting-explore # Design (at the bottom for specificity of SASS files) **/*.scss @elastic/kibana-design +# Observability design +/x-pack/plugins/apm/**/*.scss @elastic/observability-design +/x-pack/plugins/infra/**/*.scss @elastic/observability-design +/x-pack/plugins/fleet/**/*.scss @elastic/observability-design +/x-pack/plugins/observability/**/*.scss @elastic/observability-design +/x-pack/plugins/monitoring/**/*.scss @elastic/observability-design + +# Ent. Search design +/x-pack/plugins/enterprise_search/**/*.scss @elastic/ent-search-design + +# Security design +/x-pack/plugins/endpoint/**/*.scss @elastic/security-design +/x-pack/plugins/security_solution/**/*.scss @elastic/security-design + +# Logstash +#CC# /x-pack/plugins/logstash/ @elastic/logstash + +# EUI design +/src/plugins/kibana_react/public/page_template/ @elastic/eui-design @elastic/appex-sharedux + +# Landing page for guided onboarding in Home plugin +/src/plugins/home/public/application/components/guided_onboarding @elastic/platform-onboarding + # Changes to translation files should not ping code reviewers x-pack/plugins/translations/translations + +#### +## These rules are always last so they take ultimate priority over everything else +#### + + +# Design (at the bottom for specificity of SASS files) +**/*.scss @elastic/kibana-design + +#### +## These rules are always last so they take ultimate priority over everything else +#### + +**/*.scss @elastic/kibana-design diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index 4a1636c0b6604..249e133aa8825 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: 2023-02-09 +date: 2023-02-10 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 6861da631f571..2262d8a151a42 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings'] --- import advancedSettingsObj from './advanced_settings.devdocs.json'; diff --git a/api_docs/aiops.mdx b/api_docs/aiops.mdx index 133b7904c4ea1..fdcb6d8d2d3f7 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: 2023-02-09 +date: 2023-02-10 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 cfba3449e1e98..6af8f05ef5586 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: 2023-02-09 +date: 2023-02-10 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 36a6809a864a4..8ef86d44a6787 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apm'] --- import apmObj from './apm.devdocs.json'; diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index 5fcae16afd66a..c2aa27ad2a702 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: 2023-02-09 +date: 2023-02-10 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 9cb0a9d438e5b..434960034fe78 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: 2023-02-09 +date: 2023-02-10 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 d5b55fc41918b..50021680ee1cc 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: 2023-02-09 +date: 2023-02-10 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 bcd1b98325f69..10b4504b015e1 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: 2023-02-09 +date: 2023-02-10 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 592897ece19d6..4db2c3b68146c 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: 2023-02-09 +date: 2023-02-10 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 bcd015fbbc2a8..2079ffc32ea41 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloud'] --- import cloudObj from './cloud.devdocs.json'; diff --git a/api_docs/cloud_chat.mdx b/api_docs/cloud_chat.mdx index e585b0114ad08..9b4c89ef5bcca 100644 --- a/api_docs/cloud_chat.mdx +++ b/api_docs/cloud_chat.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudChat title: "cloudChat" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudChat plugin -date: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudChat'] --- import cloudChatObj from './cloud_chat.devdocs.json'; diff --git a/api_docs/cloud_data_migration.mdx b/api_docs/cloud_data_migration.mdx index 9c3a4362afddd..ff08dcbc3cc07 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: 2023-02-09 +date: 2023-02-10 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 5d63726e6089f..2b9c53b03f7f1 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: 2023-02-09 +date: 2023-02-10 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 01ecab5ec0f4d..7f88c7651c2e4 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: 2023-02-09 +date: 2023-02-10 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 67f06aaea6d47..fadabf7911f32 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: 2023-02-09 +date: 2023-02-10 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 9bdbaa509bde9..83f031262b5c1 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: 2023-02-09 +date: 2023-02-10 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 9e890c09c5c89..0ecf9646bbae2 100644 --- a/api_docs/content_management.mdx +++ b/api_docs/content_management.mdx @@ -8,14 +8,14 @@ slug: /kibana-dev-docs/api/contentManagement title: "contentManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the contentManagement plugin -date: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'contentManagement'] --- import contentManagementObj from './content_management.devdocs.json'; Content management app -Contact [@elastic/kibana-global-experience](https://github.com/orgs/elastic/teams/kibana-global-experience) for questions regarding this plugin. +Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) for questions regarding this plugin. **Code health stats** diff --git a/api_docs/controls.mdx b/api_docs/controls.mdx index 33b1de5640f7f..dc5fab865c7be 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: 2023-02-09 +date: 2023-02-10 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 081a63980a0ff..0254cca5e044f 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: 2023-02-09 +date: 2023-02-10 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 554a73dafc10a..bf520e27b1a94 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: 2023-02-09 +date: 2023-02-10 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 4374547b33e4e..ea983a770d0dc 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: 2023-02-09 +date: 2023-02-10 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 e0aa55772af62..47b49d9091520 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: 2023-02-09 +date: 2023-02-10 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 f028522d5d0fd..7f8201ba0c134 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: 2023-02-09 +date: 2023-02-10 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 e400eea15e1d1..2c11349be3bb2 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: 2023-02-09 +date: 2023-02-10 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 9b933af1305ff..50979d69769d1 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: 2023-02-09 +date: 2023-02-10 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 8ac4ff750b4d4..93624b2651c61 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: 2023-02-09 +date: 2023-02-10 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 305a9ff2e14f0..9c12164cfa8b7 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: 2023-02-09 +date: 2023-02-10 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 c27da3bf5df62..d971f5857b1a7 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: 2023-02-09 +date: 2023-02-10 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 04dff69ad53cd..9b1c9d30a79d5 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataVisualizer'] --- import dataVisualizerObj from './data_visualizer.devdocs.json'; diff --git a/api_docs/deprecations_by_api.mdx b/api_docs/deprecations_by_api.mdx index f7a57e3892425..be0e87daad939 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index 5c5b2d44bf2ec..b9e4dfb267687 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index 54bb94c8dfa64..ba40f393a522f 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index 1db5ed65d0655..532d8db6774fd 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: 2023-02-09 +date: 2023-02-10 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 5c741d9fd04ae..a7a3661a71fb7 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: 2023-02-09 +date: 2023-02-10 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 86926e0166907..6e419ec8a6a98 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: 2023-02-09 +date: 2023-02-10 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 37c83323ecf34..96b2db398c91b 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ecsDataQualityDashboard'] --- import ecsDataQualityDashboardObj from './ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx index d88fbce954ab2..876079081830e 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'embeddable'] --- import embeddableObj from './embeddable.devdocs.json'; diff --git a/api_docs/embeddable_enhanced.mdx b/api_docs/embeddable_enhanced.mdx index e7ea5a558849d..38dd6adc92992 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: 2023-02-09 +date: 2023-02-10 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 c3e508d8288c7..c551ee2586967 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: 2023-02-09 +date: 2023-02-10 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 408b766d50d4a..8ec7b05e841f8 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: 2023-02-09 +date: 2023-02-10 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 1efe83b2148f8..aeb0af610b57a 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: 2023-02-09 +date: 2023-02-10 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 542295f4e6f4c..b148446e2d881 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotation'] --- import eventAnnotationObj from './event_annotation.devdocs.json'; diff --git a/api_docs/event_log.mdx b/api_docs/event_log.mdx index c623776fa5c9a..025ac47f434cb 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventLog'] --- import eventLogObj from './event_log.devdocs.json'; diff --git a/api_docs/expression_error.mdx b/api_docs/expression_error.mdx index 3eb11e9412469..7cb3308252987 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: 2023-02-09 +date: 2023-02-10 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 ac248077b10e0..c86ac6ce53673 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: 2023-02-09 +date: 2023-02-10 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 9624b53019718..895805a6b65b1 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: 2023-02-09 +date: 2023-02-10 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 f6a0347fdf5a7..f21c3c3cac0d0 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: 2023-02-09 +date: 2023-02-10 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 819908cec963e..d01fe86399c2a 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: 2023-02-09 +date: 2023-02-10 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 4905340a3ec55..59f564cb58008 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: 2023-02-09 +date: 2023-02-10 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 c448af489e8d9..02470329817ca 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: 2023-02-09 +date: 2023-02-10 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 4dba869f70612..2fdbb4f374c9b 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: 2023-02-09 +date: 2023-02-10 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 2d8e2f92d5b5b..7df33efbd4f4a 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: 2023-02-09 +date: 2023-02-10 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 81a6b08712ac5..04e7141d1626e 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: 2023-02-09 +date: 2023-02-10 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 37518c256b7d8..d40831dabf02f 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: 2023-02-09 +date: 2023-02-10 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 7561c88545250..31abcab4c6336 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: 2023-02-09 +date: 2023-02-10 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 3446d219d7394..a95001d5455e3 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: 2023-02-09 +date: 2023-02-10 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 c4d9f53e67edc..31e3bc9ead634 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: 2023-02-09 +date: 2023-02-10 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 18af6bcfd5efb..f5d2e845a38de 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: 2023-02-09 +date: 2023-02-10 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 96967ed5837ac..d384c80599e16 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: 2023-02-09 +date: 2023-02-10 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 1bc3b915f11ee..e8fc842acc623 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: 2023-02-09 +date: 2023-02-10 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 6865d18002875..10c21f3d137b2 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: 2023-02-09 +date: 2023-02-10 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 5b9603ae9399d..be51167a94490 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'filesManagement'] --- import filesManagementObj from './files_management.devdocs.json'; diff --git a/api_docs/fleet.devdocs.json b/api_docs/fleet.devdocs.json index e3730fe873405..1a95d073f190b 100644 --- a/api_docs/fleet.devdocs.json +++ b/api_docs/fleet.devdocs.json @@ -4544,7 +4544,7 @@ "section": "def-common.SavedObjectsClientContract", "text": "SavedObjectsClientContract" }, - ", options: Readonly<{ page?: number | undefined; kuery?: any; sortField?: string | undefined; perPage?: number | undefined; sortOrder?: \"asc\" | \"desc\" | undefined; showUpgradeable?: boolean | undefined; } & {}> & { withPackagePolicies?: boolean | undefined; }) => Promise<{ items: ", + ", options: Readonly<{ page?: number | undefined; kuery?: any; sortField?: string | undefined; perPage?: number | undefined; sortOrder?: \"asc\" | \"desc\" | undefined; showUpgradeable?: boolean | undefined; } & {}> & { withPackagePolicies?: boolean | undefined; fields?: string[] | undefined; }) => Promise<{ items: ", { "pluginId": "fleet", "scope": "common", @@ -4587,7 +4587,7 @@ "label": "options", "description": [], "signature": [ - "Readonly<{ page?: number | undefined; kuery?: any; sortField?: string | undefined; perPage?: number | undefined; sortOrder?: \"asc\" | \"desc\" | undefined; showUpgradeable?: boolean | undefined; } & {}> & { withPackagePolicies?: boolean | undefined; }" + "Readonly<{ page?: number | undefined; kuery?: any; sortField?: string | undefined; perPage?: number | undefined; sortOrder?: \"asc\" | \"desc\" | undefined; showUpgradeable?: boolean | undefined; } & {}> & { withPackagePolicies?: boolean | undefined; fields?: string[] | undefined; }" ], "path": "x-pack/plugins/fleet/server/services/agent_policy.ts", "deprecated": false, diff --git a/api_docs/fleet.mdx b/api_docs/fleet.mdx index fd5e580b7fdd6..6cc1366733cae 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: 2023-02-09 +date: 2023-02-10 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 ccc29726ef282..32fa01bd00184 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: 2023-02-09 +date: 2023-02-10 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 8e49dd31bcabc..e456ea36f950e 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: 2023-02-09 +date: 2023-02-10 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 d0ca7b48dc3ee..0d77ffd0c8531 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: 2023-02-09 +date: 2023-02-10 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 377c01d4f92ad..4fdf18d01db0c 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: 2023-02-09 +date: 2023-02-10 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 ed84bf34e3bd6..7cade37db9826 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: 2023-02-09 +date: 2023-02-10 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 bc06e6bfcfb39..76668abfc8095 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: 2023-02-09 +date: 2023-02-10 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 2f44bef831edc..ca312e86578d1 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'infra'] --- import infraObj from './infra.devdocs.json'; diff --git a/api_docs/inspector.mdx b/api_docs/inspector.mdx index 9f657fd76e9ed..96332732629b1 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: 2023-02-09 +date: 2023-02-10 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 3e9ae85bfeefe..eeac4bdb338e0 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: 2023-02-09 +date: 2023-02-10 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 c5241f57706c1..3d5cc79a92658 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ace'] --- import kbnAceObj from './kbn_ace.devdocs.json'; diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx index 160a6f41150ca..07b0c0d456962 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: 2023-02-09 +date: 2023-02-10 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 d8391519b55ef..f93704b15c69b 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-utils'] --- import kbnAiopsUtilsObj from './kbn_aiops_utils.devdocs.json'; diff --git a/api_docs/kbn_alerts.mdx b/api_docs/kbn_alerts.mdx index 3f0e9e903929d..eda49a32dd594 100644 --- a/api_docs/kbn_alerts.mdx +++ b/api_docs/kbn_alerts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts title: "@kbn/alerts" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts plugin -date: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts'] --- import kbnAlertsObj from './kbn_alerts.devdocs.json'; diff --git a/api_docs/kbn_alerts_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx index 8b199d3aaa8c4..bfde18fede347 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: 2023-02-09 +date: 2023-02-10 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 bbb632cd9319b..ebfce0df30208 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: 2023-02-09 +date: 2023-02-10 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 ae3b94567492e..7584d95d31ff1 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-client'] --- import kbnAnalyticsClientObj from './kbn_analytics_client.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 d7fbdacbcf227..9b508f9ec96d4 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: 2023-02-09 +date: 2023-02-10 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 b2ded279c4069..a7f45008e0a4d 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: 2023-02-09 +date: 2023-02-10 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 7562ee8a0a120..af28b8b60ca82 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: 2023-02-09 +date: 2023-02-10 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 34a959b95d400..9c215841afd72 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-fullstory'] --- import kbnAnalyticsShippersFullstoryObj from './kbn_analytics_shippers_fullstory.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_gainsight.mdx b/api_docs/kbn_analytics_shippers_gainsight.mdx index e8cee297e6934..34a07d17365e1 100644 --- a/api_docs/kbn_analytics_shippers_gainsight.mdx +++ b/api_docs/kbn_analytics_shippers_gainsight.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-gainsight title: "@kbn/analytics-shippers-gainsight" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-gainsight plugin -date: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-gainsight'] --- import kbnAnalyticsShippersGainsightObj from './kbn_analytics_shippers_gainsight.devdocs.json'; diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index 61a6ef53f7377..5f9e5288d299d 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: 2023-02-09 +date: 2023-02-10 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 bfc8c34f83160..581b2e9968416 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: 2023-02-09 +date: 2023-02-10 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 a91a3806d43eb..981a7b6414e83 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: 2023-02-09 +date: 2023-02-10 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 c3418cdc2f438..42dee5ceabad3 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: 2023-02-09 +date: 2023-02-10 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 d3c08a5b2b8aa..a214dc1551142 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/axe-config'] --- import kbnAxeConfigObj from './kbn_axe_config.devdocs.json'; diff --git a/api_docs/kbn_cases_components.mdx b/api_docs/kbn_cases_components.mdx index eedcf063d0589..167d0d3adabde 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: 2023-02-09 +date: 2023-02-10 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 5631e1f3546c9..a2711a95f89ce 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: 2023-02-09 +date: 2023-02-10 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 bf53db69ed4f0..e4d8e38322867 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: 2023-02-09 +date: 2023-02-10 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 a151c02cc8f53..a683165f36adf 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: 2023-02-09 +date: 2023-02-10 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 006dbc4226d45..05e4a20ce2855 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: 2023-02-09 +date: 2023-02-10 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 e1fbb08aae34f..69d9c1bb88079 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: 2023-02-09 +date: 2023-02-10 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 ab31ba40a75ca..aaa7d3dfe410d 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: 2023-02-09 +date: 2023-02-10 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 ce89d339d87ea..d5ed84349065b 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: 2023-02-09 +date: 2023-02-10 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 b50f154c020d2..6296147f32509 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor'] --- import kbnCodeEditorObj from './kbn_code_editor.devdocs.json'; diff --git a/api_docs/kbn_code_editor_mocks.mdx b/api_docs/kbn_code_editor_mocks.mdx index 6d4c9e940f521..3073334903b20 100644 --- a/api_docs/kbn_code_editor_mocks.mdx +++ b/api_docs/kbn_code_editor_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor-mocks title: "@kbn/code-editor-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor-mocks plugin -date: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor-mocks'] --- import kbnCodeEditorMocksObj from './kbn_code_editor_mocks.devdocs.json'; diff --git a/api_docs/kbn_coloring.mdx b/api_docs/kbn_coloring.mdx index b025e981b9d06..4a15048edee56 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/coloring'] --- import kbnColoringObj from './kbn_coloring.devdocs.json'; diff --git a/api_docs/kbn_config.mdx b/api_docs/kbn_config.mdx index 7107b4df60c49..a3a7830383ce0 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config'] --- import kbnConfigObj from './kbn_config.devdocs.json'; diff --git a/api_docs/kbn_config_mocks.mdx b/api_docs/kbn_config_mocks.mdx index 73d7e9d8f6656..14f416ddaf4b0 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: 2023-02-09 +date: 2023-02-10 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 6ff4154a7eea2..f3a562b3449a9 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: 2023-02-09 +date: 2023-02-10 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 86a6b6261406d..5b096f285114b 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: 2023-02-09 +date: 2023-02-10 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_table_list.mdx b/api_docs/kbn_content_management_table_list.mdx index 7fa19f018859a..e778b00941e6f 100644 --- a/api_docs/kbn_content_management_table_list.mdx +++ b/api_docs/kbn_content_management_table_list.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list title: "@kbn/content-management-table-list" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list plugin -date: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list'] --- import kbnContentManagementTableListObj from './kbn_content_management_table_list.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser.mdx b/api_docs/kbn_core_analytics_browser.mdx index 06fcf260682b8..22f2ac6d8c797 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: 2023-02-09 +date: 2023-02-10 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 2538c44be6f2c..e5b9e4f860720 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: 2023-02-09 +date: 2023-02-10 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 6d661dd9f86d4..d7f616db83efa 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: 2023-02-09 +date: 2023-02-10 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 c9dc54bc78c7e..e805bc50ca55b 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: 2023-02-09 +date: 2023-02-10 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 2188c1b2e0c55..4e99017ddc288 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: 2023-02-09 +date: 2023-02-10 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 f21396d3a1bbf..5978b1a0e5229 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: 2023-02-09 +date: 2023-02-10 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 2f63adf19265a..78aa50d3861d1 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: 2023-02-09 +date: 2023-02-10 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 7c6ac5c8a0cb0..d4738bbc59d0d 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: 2023-02-09 +date: 2023-02-10 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 ff0cbb7d255e0..01e4dea874727 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: 2023-02-09 +date: 2023-02-10 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 360c7c903aeb6..c4d91ac4006eb 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: 2023-02-09 +date: 2023-02-10 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 aa981fb786ecd..13b4920b62505 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: 2023-02-09 +date: 2023-02-10 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 1f0d7bcef399d..2766afdb5e3be 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: 2023-02-09 +date: 2023-02-10 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 12d84443ca291..2998c05c621af 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: 2023-02-09 +date: 2023-02-10 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 27e60987112cd..52d9099861e75 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: 2023-02-09 +date: 2023-02-10 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 9ffe894ec230c..0c1eb2c3d992c 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: 2023-02-09 +date: 2023-02-10 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 95b9e142ba855..3e270adb9dcd6 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: 2023-02-09 +date: 2023-02-10 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 5e623b14ac9d1..96ad98af37868 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: 2023-02-09 +date: 2023-02-10 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 8ee0f28ccf849..b99b2504be070 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: 2023-02-09 +date: 2023-02-10 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 7d6c00d91ecae..82a59586b1f93 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: 2023-02-09 +date: 2023-02-10 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 44b0244ef8f27..69a160528387d 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: 2023-02-09 +date: 2023-02-10 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 b2213e79d57f0..fa0c08e7555d6 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: 2023-02-09 +date: 2023-02-10 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 327a4b26f56a0..fc8fd1ef56414 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: 2023-02-09 +date: 2023-02-10 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 7679d6f7c223c..db64749d83e7b 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: 2023-02-09 +date: 2023-02-10 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 57684d01cbaed..5acd6d9790a7c 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: 2023-02-09 +date: 2023-02-10 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 7e244eda410e0..5ac0468a7dd32 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: 2023-02-09 +date: 2023-02-10 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 2b54a9d630d3a..c5a15d79027b8 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: 2023-02-09 +date: 2023-02-10 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 3ad3d101dde2b..a1ef18b0db794 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: 2023-02-09 +date: 2023-02-10 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 3a176e740c0f0..a391a7e9e280c 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: 2023-02-09 +date: 2023-02-10 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 64f01c4873931..5e312bd232994 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: 2023-02-09 +date: 2023-02-10 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 f765896d9854e..9dee117c26631 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: 2023-02-09 +date: 2023-02-10 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 b2872d2ea208c..73575460adc6f 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: 2023-02-09 +date: 2023-02-10 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 3e7fa67fb9f45..da54435a8d370 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: 2023-02-09 +date: 2023-02-10 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 054585c3e0315..738cf8d3d1875 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: 2023-02-09 +date: 2023-02-10 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 3c224f0e7fb99..e62e363fb1ee8 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: 2023-02-09 +date: 2023-02-10 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 b516573cefbb0..3fdba744d340c 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: 2023-02-09 +date: 2023-02-10 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 027a69083553d..43a43a8e6a806 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: 2023-02-09 +date: 2023-02-10 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 adf408bdd9f54..99257a2eb484a 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: 2023-02-09 +date: 2023-02-10 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 8efd51cea0f5e..b3bf5ee524785 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: 2023-02-09 +date: 2023-02-10 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 f1209e37043d8..7ce4d52b52482 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: 2023-02-09 +date: 2023-02-10 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 a8adf40d56173..b32214b021e28 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: 2023-02-09 +date: 2023-02-10 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 5a632cb7ebdc5..cfee5e5a5aa17 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: 2023-02-09 +date: 2023-02-10 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 707d98e64be8f..bf804ce850338 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: 2023-02-09 +date: 2023-02-10 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 3fe555ec14d70..6c10970d39108 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: 2023-02-09 +date: 2023-02-10 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 23e7bedadbe97..4316bf7558d45 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: 2023-02-09 +date: 2023-02-10 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 96e381ce4db6b..8823178ebe33a 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: 2023-02-09 +date: 2023-02-10 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 1286a66c618d5..1d4512c2f48e9 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: 2023-02-09 +date: 2023-02-10 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 2324ebcff5105..f148d9e5951ac 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: 2023-02-09 +date: 2023-02-10 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 ba17b696bb4d7..3e22a8a0f24b9 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: 2023-02-09 +date: 2023-02-10 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 e79ad30b396c0..45311ed996759 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: 2023-02-09 +date: 2023-02-10 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 7fe72a60b5f96..435dfd14bb07c 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: 2023-02-09 +date: 2023-02-10 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 ae8465f353435..6fcff4718bd49 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: 2023-02-09 +date: 2023-02-10 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 3314084d001b6..9abf4ca5121f6 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: 2023-02-09 +date: 2023-02-10 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 995ea6a8af5a3..4c3de6ab42dcb 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: 2023-02-09 +date: 2023-02-10 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 6584fc965104f..ad976577a6979 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: 2023-02-09 +date: 2023-02-10 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 501c1ac1bcd7f..144c0f61d83b0 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: 2023-02-09 +date: 2023-02-10 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 68e3ef5d1419a..6d7740924b8a1 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: 2023-02-09 +date: 2023-02-10 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 cdc8f64f21a85..fbf8e28ba4ed1 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: 2023-02-09 +date: 2023-02-10 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 6a2d4b0ddcdf5..045a9e4e78ef2 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: 2023-02-09 +date: 2023-02-10 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 98b29a18025b2..9471aab4fdedc 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: 2023-02-09 +date: 2023-02-10 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 7aca48a031e2b..5d8bef0b1d572 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: 2023-02-09 +date: 2023-02-10 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 f2cd9f599d087..b8c8c8efd0770 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: 2023-02-09 +date: 2023-02-10 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 6fac263c6ccb6..dbe138734b756 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: 2023-02-09 +date: 2023-02-10 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 dfcd87837b111..bc15bdff6d726 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: 2023-02-09 +date: 2023-02-10 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 e7f64a5ac292e..18b7053e8c023 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: 2023-02-09 +date: 2023-02-10 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 56ed8ac4f3bbd..ac9b44e3b0dd2 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: 2023-02-09 +date: 2023-02-10 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 a2da7c9c7f95e..a60de331b057d 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: 2023-02-09 +date: 2023-02-10 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 28fcf319c1d0c..51304a73ec339 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: 2023-02-09 +date: 2023-02-10 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 00efc812fc790..2af8c7c3e8b28 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: 2023-02-09 +date: 2023-02-10 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 e17bbd3cdba5a..07ca38d498ff9 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-mocks'] --- import kbnCoreHttpRouterServerMocksObj from './kbn_core_http_router_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index 1410e5cdb37e7..8c465a7bdd71b 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server'] --- import kbnCoreHttpServerObj from './kbn_core_http_server.devdocs.json'; diff --git a/api_docs/kbn_core_http_server_internal.mdx b/api_docs/kbn_core_http_server_internal.mdx index 80bcba4dd03f5..cc3f560adc9ac 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-internal'] --- import kbnCoreHttpServerInternalObj from './kbn_core_http_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_server_mocks.mdx b/api_docs/kbn_core_http_server_mocks.mdx index e38ea00d22a4a..f22ea1e8a35bd 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: 2023-02-09 +date: 2023-02-10 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 4c616ddd9ee9b..822d2f166c0c8 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: 2023-02-09 +date: 2023-02-10 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 888511ffd8d13..c46a1f0cf5d7a 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: 2023-02-09 +date: 2023-02-10 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 dedbaec367b49..8ae3a29c88512 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: 2023-02-09 +date: 2023-02-10 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 c39b5e2d87b03..02a15915d4a32 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: 2023-02-09 +date: 2023-02-10 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 00f2fa9f04acd..93b1376835929 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: 2023-02-09 +date: 2023-02-10 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 a8d535907e151..0801e2bb86b06 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: 2023-02-09 +date: 2023-02-10 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 0c796992949d0..188248307a24b 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: 2023-02-09 +date: 2023-02-10 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 34518c6eef145..ca4b99e39e9cc 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: 2023-02-09 +date: 2023-02-10 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 bbf007eaf59da..7a1bea1769527 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: 2023-02-09 +date: 2023-02-10 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 b1d51c5ec9ca7..d5fe0945d5cd1 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: 2023-02-09 +date: 2023-02-10 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 ed3068d6e58f8..79828678d7065 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: 2023-02-09 +date: 2023-02-10 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 456eea26469f2..02cee380fa424 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: 2023-02-09 +date: 2023-02-10 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 5ee164de272d5..315baf0311b3c 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: 2023-02-09 +date: 2023-02-10 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 e5b2d949422b8..bba542b084287 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: 2023-02-09 +date: 2023-02-10 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 44db646d5f730..eecbfd3dec7a5 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: 2023-02-09 +date: 2023-02-10 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 8311c18cefaa2..11854fab1aaf0 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: 2023-02-09 +date: 2023-02-10 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 f2f86c3c4f636..c2facbf7f8833 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: 2023-02-09 +date: 2023-02-10 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 a695b1f82bb66..a595553612785 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: 2023-02-09 +date: 2023-02-10 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 73a8a1fe6a57f..0584c1b389c3e 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: 2023-02-09 +date: 2023-02-10 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 626b47a7c19bc..694dcd1b322fa 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: 2023-02-09 +date: 2023-02-10 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 d265262246c8f..9f6425b0dd4e3 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: 2023-02-09 +date: 2023-02-10 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 b4cdb5b1dcf97..901cdf72a343b 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: 2023-02-09 +date: 2023-02-10 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 584fadf8344c6..82732b6d90700 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: 2023-02-09 +date: 2023-02-10 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 918b700e3bbc5..03dde3bbdea82 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: 2023-02-09 +date: 2023-02-10 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 6f77323d65f23..6755f44f8d26b 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: 2023-02-09 +date: 2023-02-10 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 2bffba7080557..f34202a6de414 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: 2023-02-09 +date: 2023-02-10 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 e3d4bebbabcb8..a2a27e8f2870a 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: 2023-02-09 +date: 2023-02-10 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 e044e50976035..d0df477643d47 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: 2023-02-09 +date: 2023-02-10 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 b39d40dc50203..c61332a119b52 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: 2023-02-09 +date: 2023-02-10 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 19be5ce24276d..bc698545a2b8b 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: 2023-02-09 +date: 2023-02-10 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 8d318877f20f2..82f2404de2e28 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: 2023-02-09 +date: 2023-02-10 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 f8ec446b6f96b..9cc1684418794 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: 2023-02-09 +date: 2023-02-10 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 05c630e737891..b0c87cb757da3 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: 2023-02-09 +date: 2023-02-10 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 c1506289e0898..b91b4ee04e704 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: 2023-02-09 +date: 2023-02-10 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_server.mdx b/api_docs/kbn_core_plugins_server.mdx index 94d0db1d25b86..7950f477c91eb 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: 2023-02-09 +date: 2023-02-10 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 54ccc5c6f8d04..fec7bc5a2e147 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: 2023-02-09 +date: 2023-02-10 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 98a746c8b65e9..40fbd9fcdbf92 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: 2023-02-09 +date: 2023-02-10 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 030f462d796cc..4242d50341690 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: 2023-02-09 +date: 2023-02-10 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 715341c690ed2..5e332ecf40237 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: 2023-02-09 +date: 2023-02-10 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 e701321b8a419..e667c77ab4255 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: 2023-02-09 +date: 2023-02-10 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 548aed514df97..710ed1d751158 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: 2023-02-09 +date: 2023-02-10 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 7c9ff58e5f098..b07fa5b73f6fe 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: 2023-02-09 +date: 2023-02-10 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 785a2fccacfac..5b203030c84d7 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: 2023-02-09 +date: 2023-02-10 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 66c97e14be2af..0e15728262ea7 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: 2023-02-09 +date: 2023-02-10 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_internal.mdx b/api_docs/kbn_core_saved_objects_api_server_internal.mdx index 022d88ddd09e8..c5e127e8b4b1f 100644 --- a/api_docs/kbn_core_saved_objects_api_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_api_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-internal title: "@kbn/core-saved-objects-api-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server-internal plugin -date: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server-internal'] --- import kbnCoreSavedObjectsApiServerInternalObj from './kbn_core_saved_objects_api_server_internal.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 2eb8db148afcf..99595c47ae688 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: 2023-02-09 +date: 2023-02-10 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 d67e126e2fabe..fd312b1d23220 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: 2023-02-09 +date: 2023-02-10 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 3fa89352bec7e..ebadfb06bb71b 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: 2023-02-09 +date: 2023-02-10 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 0d02c0b3acc06..0c306144b6447 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: 2023-02-09 +date: 2023-02-10 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 d912da3aac01b..d2e53f96fac42 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: 2023-02-09 +date: 2023-02-10 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 a82d2265ff9f1..1e94d77542ecd 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: 2023-02-09 +date: 2023-02-10 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 441ab73b75b7b..7fb4b6a4cb1f5 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: 2023-02-09 +date: 2023-02-10 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 76b62d19981b7..4f6602ee9309f 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: 2023-02-09 +date: 2023-02-10 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 757865166ba24..f7607e306f684 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: 2023-02-09 +date: 2023-02-10 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 857b89e1eab76..e402e16c81e26 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: 2023-02-09 +date: 2023-02-10 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 fee43d4cebbe6..96749ed6a6e8f 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: 2023-02-09 +date: 2023-02-10 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 ac2d200c35b27..1212b1e073d7d 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: 2023-02-09 +date: 2023-02-10 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 32735b6dc5b99..74920b54cc250 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: 2023-02-09 +date: 2023-02-10 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 b6654eddc2d75..77554c446e127 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: 2023-02-09 +date: 2023-02-10 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 42b5e22e54601..12344c32b8e18 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: 2023-02-09 +date: 2023-02-10 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 c490e15d7aef0..454f46f01143f 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: 2023-02-09 +date: 2023-02-10 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 481d63a5b7c7f..3f572b23bc13e 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: 2023-02-09 +date: 2023-02-10 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 54821cc75611c..ba409c83b0552 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: 2023-02-09 +date: 2023-02-10 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 990e9ec7103cd..6cbc5827a9971 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: 2023-02-09 +date: 2023-02-10 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 770fb68ffe866..7ead48197a8e6 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: 2023-02-09 +date: 2023-02-10 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 5a4d0787673ef..fa5f8f5c03b44 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: 2023-02-09 +date: 2023-02-10 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 aa822456afc13..2fe6241f81e3c 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: 2023-02-09 +date: 2023-02-10 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 7f4615e1fb493..63c205be83b39 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: 2023-02-09 +date: 2023-02-10 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_so_type_serializer.mdx b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx index 95c637ea21bcc..60bfcd40ca115 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: 2023-02-09 +date: 2023-02-10 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 e490bfaf7a6ce..7b3271406c297 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: 2023-02-09 +date: 2023-02-10 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 7d1190378e757..33f5144d8bac1 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: 2023-02-09 +date: 2023-02-10 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_internal.mdx b/api_docs/kbn_core_theme_browser_internal.mdx index a4beefa2e4c3b..606b06f34e207 100644 --- a/api_docs/kbn_core_theme_browser_internal.mdx +++ b/api_docs/kbn_core_theme_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-internal title: "@kbn/core-theme-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-internal plugin -date: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser-internal'] --- import kbnCoreThemeBrowserInternalObj from './kbn_core_theme_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser_mocks.mdx b/api_docs/kbn_core_theme_browser_mocks.mdx index 35a50119988a1..abd7608e37b8f 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: 2023-02-09 +date: 2023-02-10 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 2fd92bc8bfe85..e7d452715a65e 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: 2023-02-09 +date: 2023-02-10 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 5c177242b7368..bfccbfadcf983 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: 2023-02-09 +date: 2023-02-10 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 b16af749187ee..2cdb9d5dee404 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: 2023-02-09 +date: 2023-02-10 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 cd4c1af7dc6fd..36e42c45862cf 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: 2023-02-09 +date: 2023-02-10 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 ca84c0bd80024..6bd7e4e29475e 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: 2023-02-09 +date: 2023-02-10 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 fe2d99129a8df..9630f5384cecd 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: 2023-02-09 +date: 2023-02-10 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 e8155a46d980f..ea038cbe60a0e 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: 2023-02-09 +date: 2023-02-10 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 016f3ced7db02..0aa59796dc1e5 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: 2023-02-09 +date: 2023-02-10 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 ceee82a34d4ce..817b40179fa9c 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: 2023-02-09 +date: 2023-02-10 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 2da89ace327bf..5a5f668012c87 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: 2023-02-09 +date: 2023-02-10 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_crypto.mdx b/api_docs/kbn_crypto.mdx index 38862eea22ae7..b682d0606a711 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: 2023-02-09 +date: 2023-02-10 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 b0dcd85946cff..93d00dd678ae2 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto-browser'] --- import kbnCryptoBrowserObj from './kbn_crypto_browser.devdocs.json'; diff --git a/api_docs/kbn_cypress_config.mdx b/api_docs/kbn_cypress_config.mdx index ea5fa70c4cf6f..3a76cdc6caaf1 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cypress-config'] --- import kbnCypressConfigObj from './kbn_cypress_config.devdocs.json'; diff --git a/api_docs/kbn_datemath.mdx b/api_docs/kbn_datemath.mdx index c315293d81416..df509935c41b2 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/datemath'] --- import kbnDatemathObj from './kbn_datemath.devdocs.json'; diff --git a/api_docs/kbn_dev_cli_errors.mdx b/api_docs/kbn_dev_cli_errors.mdx index b48ce46ecae06..75e6666fa8433 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: 2023-02-09 +date: 2023-02-10 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 35db7b9537f10..8aea5deb13944 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: 2023-02-09 +date: 2023-02-10 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 13eebde1ffd30..d33c2f06c6c16 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: 2023-02-09 +date: 2023-02-10 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 1ad361f4be3d6..be78c620fcbd4 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-utils'] --- import kbnDevUtilsObj from './kbn_dev_utils.devdocs.json'; diff --git a/api_docs/kbn_doc_links.devdocs.json b/api_docs/kbn_doc_links.devdocs.json index 5c2b615b39011..23239d0dde487 100644 --- a/api_docs/kbn_doc_links.devdocs.json +++ b/api_docs/kbn_doc_links.devdocs.json @@ -300,7 +300,7 @@ "label": "enterpriseSearch", "description": [], "signature": [ - "{ readonly apiKeys: string; readonly behavioralAnalyticsEvents: string; readonly bulkApi: string; readonly configuration: string; readonly connectors: string; readonly connectorsMongoDB: string; readonly connectorsMySQL: string; readonly connectorsWorkplaceSearch: string; readonly crawlerManaging: string; readonly crawlerOverview: string; readonly deployTrainedModels: string; readonly documentLevelSecurity: string; readonly engines: string; readonly ingestPipelines: string; readonly languageAnalyzers: string; readonly languageClients: string; readonly licenseManagement: string; readonly machineLearningStart: string; readonly mailService: string; readonly start: string; readonly syncRules: string; readonly troubleshootSetup: string; readonly usersAccess: string; }" + "{ readonly apiKeys: string; readonly behavioralAnalytics: string; readonly behavioralAnalyticsEvents: string; readonly bulkApi: string; readonly configuration: string; readonly connectors: string; readonly connectorsMongoDB: string; readonly connectorsMySQL: string; readonly connectorsWorkplaceSearch: string; readonly crawlerManaging: string; readonly crawlerOverview: string; readonly deployTrainedModels: string; readonly documentLevelSecurity: string; readonly engines: string; readonly ingestPipelines: string; readonly languageAnalyzers: string; readonly languageClients: string; readonly licenseManagement: string; readonly machineLearningStart: string; readonly mailService: string; readonly start: string; readonly syncRules: string; readonly troubleshootSetup: string; readonly usersAccess: string; }" ], "path": "packages/kbn-doc-links/src/types.ts", "deprecated": false, diff --git a/api_docs/kbn_doc_links.mdx b/api_docs/kbn_doc_links.mdx index 41d47fc9cbc23..c643bdc445ab2 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: 2023-02-09 +date: 2023-02-10 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 3b03066ef17c7..2f12531395952 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/docs-utils'] --- import kbnDocsUtilsObj from './kbn_docs_utils.devdocs.json'; diff --git a/api_docs/kbn_ebt_tools.mdx b/api_docs/kbn_ebt_tools.mdx index 3c84ccf2edcbc..db93f87bea825 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: 2023-02-09 +date: 2023-02-10 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 2410dc4c2bf86..aba8d038cb73a 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: 2023-02-09 +date: 2023-02-10 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 f3211aa05bce2..6217606074c79 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: 2023-02-09 +date: 2023-02-10 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_es.mdx b/api_docs/kbn_es.mdx index 9b0cbfdbff84c..e2f91b742a825 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: 2023-02-09 +date: 2023-02-10 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 258a055c5b16a..af057ea2534fa 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: 2023-02-09 +date: 2023-02-10 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 2a5b9034fa94d..3b7169527a87f 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: 2023-02-09 +date: 2023-02-10 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 92de37768d5f4..7892764e813ef 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: 2023-02-09 +date: 2023-02-10 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 d4fe9208d6cdd..59115067e1b08 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: 2023-02-09 +date: 2023-02-10 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 834ce9d932fa0..e5aeb887a7ff4 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports'] --- import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json'; diff --git a/api_docs/kbn_field_types.mdx b/api_docs/kbn_field_types.mdx index c94e63827cc58..eebddceb30f83 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-types'] --- import kbnFieldTypesObj from './kbn_field_types.devdocs.json'; diff --git a/api_docs/kbn_find_used_node_modules.mdx b/api_docs/kbn_find_used_node_modules.mdx index e101f0b64ba3c..f88b620a06115 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: 2023-02-09 +date: 2023-02-10 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 f9aaf97d778a1..5bd55bdc41f8a 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: 2023-02-09 +date: 2023-02-10 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_generate.mdx b/api_docs/kbn_generate.mdx index 08d0e2b53981e..391c127c624d5 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate'] --- import kbnGenerateObj from './kbn_generate.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index 4f5e2244b9af8..05710248ba4a0 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: 2023-02-09 +date: 2023-02-10 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 550294f3003eb..d23057a3d417f 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: 2023-02-09 +date: 2023-02-10 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 5253d790cf715..a4b4bb01f3474 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: 2023-02-09 +date: 2023-02-10 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 14a9bc3db4b8f..fa2dedacd0c24 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: 2023-02-09 +date: 2023-02-10 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 f3877c9ca47ab..5b80547414e12 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: 2023-02-09 +date: 2023-02-10 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 28cc210e1dfb7..f16c656b5ea27 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: 2023-02-09 +date: 2023-02-10 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 4c286cf1c1ea3..36fd56789ac61 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: 2023-02-09 +date: 2023-02-10 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 90b3450bd249f..9ff0cf14779af 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: 2023-02-09 +date: 2023-02-10 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 ac67833d43aa5..9785e0f158be0 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] --- import kbnImportResolverObj from './kbn_import_resolver.devdocs.json'; diff --git a/api_docs/kbn_interpreter.mdx b/api_docs/kbn_interpreter.mdx index ae7e83a05590f..81870ba56f63c 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: 2023-02-09 +date: 2023-02-10 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 97fd671347132..b2c89c4dbb6f4 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: 2023-02-09 +date: 2023-02-10 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 e8c3d5d01de41..aea018e1516bb 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: 2023-02-09 +date: 2023-02-10 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 3f6471d57e6b6..b39b36a91d531 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: 2023-02-09 +date: 2023-02-10 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 6481c0a1e2390..e093289b25a09 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: 2023-02-09 +date: 2023-02-10 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 ff4571e9fcdd7..c4072f7a7aab3 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: 2023-02-09 +date: 2023-02-10 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 f34c8b3eeab0a..587f7e3a3fdab 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/language-documentation-popover'] --- import kbnLanguageDocumentationPopoverObj from './kbn_language_documentation_popover.devdocs.json'; diff --git a/api_docs/kbn_logging.mdx b/api_docs/kbn_logging.mdx index 8985fc36d4bc2..1010676db999a 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: 2023-02-09 +date: 2023-02-10 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 e00c5556739e0..53122432106e5 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging-mocks'] --- import kbnLoggingMocksObj from './kbn_logging_mocks.devdocs.json'; diff --git a/api_docs/kbn_managed_vscode_config.mdx b/api_docs/kbn_managed_vscode_config.mdx index 932fdc5dd4efc..3618480cde753 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/managed-vscode-config'] --- import kbnManagedVscodeConfigObj from './kbn_managed_vscode_config.devdocs.json'; diff --git a/api_docs/kbn_mapbox_gl.mdx b/api_docs/kbn_mapbox_gl.mdx index 84b28aa06d027..d52026e93f78a 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/mapbox-gl'] --- import kbnMapboxGlObj from './kbn_mapbox_gl.devdocs.json'; diff --git a/api_docs/kbn_ml_agg_utils.mdx b/api_docs/kbn_ml_agg_utils.mdx index 8fe17a16db9b9..788ea5dd1d91c 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: 2023-02-09 +date: 2023-02-10 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_date_picker.mdx b/api_docs/kbn_ml_date_picker.mdx index 353fd6a5872c3..09f670b06932d 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: 2023-02-09 +date: 2023-02-10 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_is_defined.mdx b/api_docs/kbn_ml_is_defined.mdx index 8bce6576342e7..1c5401948e78e 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: 2023-02-09 +date: 2023-02-10 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 27a7fdc841324..f49cb1e7c151b 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: 2023-02-09 +date: 2023-02-10 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_local_storage.mdx b/api_docs/kbn_ml_local_storage.mdx index e33bcd06b8e91..47b1bfcf06893 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: 2023-02-09 +date: 2023-02-10 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 80bc0ef9fc8e5..299a7eb1c1916 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: 2023-02-09 +date: 2023-02-10 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_query_utils.mdx b/api_docs/kbn_ml_query_utils.mdx index 4a21fc7bf810a..62a4121cbe495 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: 2023-02-09 +date: 2023-02-10 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_string_hash.mdx b/api_docs/kbn_ml_string_hash.mdx index d2e6035fc2b90..5c8d0cd19eb4d 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: 2023-02-09 +date: 2023-02-10 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_url_state.mdx b/api_docs/kbn_ml_url_state.mdx index 9f52996cbd45e..fdb5493df9f1e 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-url-state'] --- import kbnMlUrlStateObj from './kbn_ml_url_state.devdocs.json'; diff --git a/api_docs/kbn_monaco.mdx b/api_docs/kbn_monaco.mdx index 7d62874927493..3088aea91b3f5 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/monaco'] --- import kbnMonacoObj from './kbn_monaco.devdocs.json'; diff --git a/api_docs/kbn_optimizer.mdx b/api_docs/kbn_optimizer.mdx index 308d0baa4effd..fb8f696aadda4 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: 2023-02-09 +date: 2023-02-10 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 0b64e9481b32b..dda0b498e1736 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: 2023-02-09 +date: 2023-02-10 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 f140dba6cb8d9..bcc16917cdf5e 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: 2023-02-09 +date: 2023-02-10 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_performance_testing_dataset_extractor.mdx b/api_docs/kbn_performance_testing_dataset_extractor.mdx index 38a2d3e427bb0..9d078fa2b08fc 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: 2023-02-09 +date: 2023-02-10 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_generator.mdx b/api_docs/kbn_plugin_generator.mdx index 35fc81a71256b..eae74d8d800ae 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: 2023-02-09 +date: 2023-02-10 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 fe8273bbd423c..40002666bb01b 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-helpers'] --- import kbnPluginHelpersObj from './kbn_plugin_helpers.devdocs.json'; diff --git a/api_docs/kbn_react_field.mdx b/api_docs/kbn_react_field.mdx index 79911ead0f244..ce1b1a387f3c4 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field'] --- import kbnReactFieldObj from './kbn_react_field.devdocs.json'; diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx index e8d3f3f9daec4..3c6c6192016e9 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: 2023-02-09 +date: 2023-02-10 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 69acca6028c2d..5607b3ca063c2 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: 2023-02-09 +date: 2023-02-10 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 8a4490fbd1bb0..56520ef8f6998 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: 2023-02-09 +date: 2023-02-10 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 d2bd06b06f64c..e3bcfe1958fca 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-source-classifier'] --- import kbnRepoSourceClassifierObj from './kbn_repo_source_classifier.devdocs.json'; diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx index f4029012603aa..c7df088b68cef 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_rule_data_utils.mdx b/api_docs/kbn_rule_data_utils.mdx index aab2f99a8cfbc..c5753fc6e1d46 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rule-data-utils'] --- import kbnRuleDataUtilsObj from './kbn_rule_data_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_autocomplete.mdx b/api_docs/kbn_securitysolution_autocomplete.mdx index df28172dd30ae..aa6f942020cb3 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-autocomplete'] --- import kbnSecuritysolutionAutocompleteObj from './kbn_securitysolution_autocomplete.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_ecs.mdx b/api_docs/kbn_securitysolution_ecs.mdx index 37e09bd98a203..bec8b9ee0896e 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: 2023-02-09 +date: 2023-02-10 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 27fb2dad6edb7..610db1990630d 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: 2023-02-09 +date: 2023-02-10 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 356d752d3d647..d429d390b67c6 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-exception-list-components'] --- import kbnSecuritysolutionExceptionListComponentsObj from './kbn_securitysolution_exception_list_components.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx index 5c92dd9a38c57..c19757c47ddc9 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: 2023-02-09 +date: 2023-02-10 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 78c35c9ee9a4d..42c88015bab88 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: 2023-02-09 +date: 2023-02-10 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 cdf71ed0d4f9c..3dc95951689a9 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: 2023-02-09 +date: 2023-02-10 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 4600e75b1d36a..1afb4ed6b2bf9 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: 2023-02-09 +date: 2023-02-10 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 bee142e738c83..3f091dd51e4c6 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: 2023-02-09 +date: 2023-02-10 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 4b00af140be54..bf999ca1ad812 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: 2023-02-09 +date: 2023-02-10 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 42c6c99bf8d18..a5f7a080dee86 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: 2023-02-09 +date: 2023-02-10 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 3249a38a259de..01bf385fbfbc4 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: 2023-02-09 +date: 2023-02-10 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 caa0d5e2e0041..e47a63225ba96 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: 2023-02-09 +date: 2023-02-10 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 55ee9049d3558..f108c6bc0090c 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: 2023-02-09 +date: 2023-02-10 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 32efc033ddfb7..98336b4853d6a 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: 2023-02-09 +date: 2023-02-10 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 af0f8e763b359..34ae37e2286fc 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: 2023-02-09 +date: 2023-02-10 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 e63cbfca53d01..c00570a3b6cd3 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: 2023-02-09 +date: 2023-02-10 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 cff861f8c3b4a..3f0441856f4b0 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository'] --- import kbnServerRouteRepositoryObj from './kbn_server_route_repository.devdocs.json'; diff --git a/api_docs/kbn_shared_svg.mdx b/api_docs/kbn_shared_svg.mdx index 7d5b0ab7d52e6..8d150c93139ca 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: 2023-02-09 +date: 2023-02-10 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 97ffdae80e991..bed72b71fd958 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: 2023-02-09 +date: 2023-02-10 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_avatar_user_profile_components.mdx b/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx index 172bc06c16900..4c6fc441aa94a 100644 --- a/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx +++ b/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-user-profile-components title: "@kbn/shared-ux-avatar-user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-user-profile-components plugin -date: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-user-profile-components'] --- import kbnSharedUxAvatarUserProfileComponentsObj from './kbn_shared_ux_avatar_user_profile_components.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 b1c4117179d7a..401ff93d1e581 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: 2023-02-09 +date: 2023-02-10 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_exit_full_screen_mocks.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx index 8420fe32efc0b..5d95839779ba0 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen-mocks title: "@kbn/shared-ux-button-exit-full-screen-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen-mocks plugin -date: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen-mocks'] --- import kbnSharedUxButtonExitFullScreenMocksObj from './kbn_shared_ux_button_exit_full_screen_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_toolbar.mdx b/api_docs/kbn_shared_ux_button_toolbar.mdx index 0db02d3d7ff77..338ee6aca1a91 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: 2023-02-09 +date: 2023-02-10 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 8c3a3924fd18c..772418656380c 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: 2023-02-09 +date: 2023-02-10 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 70d2d2f45bd3f..afab966699b8d 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: 2023-02-09 +date: 2023-02-10 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_file_context.mdx b/api_docs/kbn_shared_ux_file_context.mdx index 4dbda76e66af9..be5345bbd0905 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: 2023-02-09 +date: 2023-02-10 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 b5479e93d8f1e..9276071373d0d 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: 2023-02-09 +date: 2023-02-10 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 a1f054c092124..8645271e6edb4 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: 2023-02-09 +date: 2023-02-10 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 f184a0459cf85..346bd0a8281d1 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: 2023-02-09 +date: 2023-02-10 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 5e3798db23757..ceb369dbdb331 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: 2023-02-09 +date: 2023-02-10 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_upload.mdx b/api_docs/kbn_shared_ux_file_upload.mdx index f4ef6047745a7..13656a080569b 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: 2023-02-09 +date: 2023-02-10 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 676c13ca41429..84e1ced0f9007 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: 2023-02-09 +date: 2023-02-10 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 8b8197b0ac395..6ca201a3d35ec 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: 2023-02-09 +date: 2023-02-10 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 298a7c7ca889b..a3ff8e2728dc0 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: 2023-02-09 +date: 2023-02-10 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 5c11ebbbda753..369163e89a069 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: 2023-02-09 +date: 2023-02-10 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 5a29d4876ef99..ade76ab24a794 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: 2023-02-09 +date: 2023-02-10 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 6dfdbebabfd2f..2d6baa42ccd47 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: 2023-02-09 +date: 2023-02-10 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 11ad2bbc3ed6b..6597690e67c05 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: 2023-02-09 +date: 2023-02-10 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 fa43ca9d14810..7cb87e2d3b5b0 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: 2023-02-09 +date: 2023-02-10 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 3ba5e717cf791..e9014b2d0f6d4 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: 2023-02-09 +date: 2023-02-10 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 ae4880bfdcf3d..e5e99c422e660 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: 2023-02-09 +date: 2023-02-10 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 38b45bf89741b..32d705c8b4130 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: 2023-02-09 +date: 2023-02-10 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 98791f7505801..532073fb7603e 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: 2023-02-09 +date: 2023-02-10 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 3f36c76c24574..6b4db8121128b 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: 2023-02-09 +date: 2023-02-10 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 fbd31f57a4dcb..9aa872905089e 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: 2023-02-09 +date: 2023-02-10 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 456e00b1e38b7..af484dd11bb30 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: 2023-02-09 +date: 2023-02-10 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 2187fd966a9db..2db37c64a142b 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: 2023-02-09 +date: 2023-02-10 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 706ff965f03f0..8b2092fdbc26c 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: 2023-02-09 +date: 2023-02-10 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 8c3b656c6b6db..ed3d7af328853 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: 2023-02-09 +date: 2023-02-10 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 0aa7056eefc53..6fc328e844fc6 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: 2023-02-09 +date: 2023-02-10 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 68d5bbedf84b9..e7ee777ba09fe 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: 2023-02-09 +date: 2023-02-10 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 635e5f060a153..d916421f3fe8c 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: 2023-02-09 +date: 2023-02-10 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 9e4dbdbfad0e2..8f7fd814b27ba 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: 2023-02-09 +date: 2023-02-10 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 cc03b53dd4cc8..af8f194025656 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: 2023-02-09 +date: 2023-02-10 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 6f1c13d5d4f6d..15fa596451cdf 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: 2023-02-09 +date: 2023-02-10 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 bd6516f4e91e3..90a5e38238131 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: 2023-02-09 +date: 2023-02-10 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 0621fdebcb90e..5e72b2db64db7 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/some-dev-log'] --- import kbnSomeDevLogObj from './kbn_some_dev_log.devdocs.json'; diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx index 29aa0a99d1005..4c38d37002351 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: 2023-02-09 +date: 2023-02-10 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 683d07978df36..7abc81756dd34 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: 2023-02-09 +date: 2023-02-10 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 d3f607edf5a24..cec8375e0abd4 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: 2023-02-09 +date: 2023-02-10 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 05d9a6e6f9852..9ab749ad406eb 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: 2023-02-09 +date: 2023-02-10 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 5d4db4230040b..d4200e527823c 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test'] --- import kbnTestObj from './kbn_test.devdocs.json'; diff --git a/api_docs/kbn_test_jest_helpers.mdx b/api_docs/kbn_test_jest_helpers.mdx index c84a1c47e1fc1..97b49a912c910 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: 2023-02-09 +date: 2023-02-10 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 a5a29e529e8ea..c89ec16b6c2a8 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-subj-selector'] --- import kbnTestSubjSelectorObj from './kbn_test_subj_selector.devdocs.json'; diff --git a/api_docs/kbn_tooling_log.mdx b/api_docs/kbn_tooling_log.mdx index 5a0134b680648..82b47dc4c8b9f 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log'] --- import kbnToolingLogObj from './kbn_tooling_log.devdocs.json'; diff --git a/api_docs/kbn_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx index 1dbb0ff239dbb..7758843572b41 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: 2023-02-09 +date: 2023-02-10 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 3558dc45a296a..40af7e0e01413 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: 2023-02-09 +date: 2023-02-10 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 b11f83fa96950..85b1a67e06254 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: 2023-02-09 +date: 2023-02-10 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 0fe3654193722..df64f61d31034 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: 2023-02-09 +date: 2023-02-10 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 f434286117a22..ee0cdff1d4b37 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-theme'] --- import kbnUiThemeObj from './kbn_ui_theme.devdocs.json'; diff --git a/api_docs/kbn_user_profile_components.mdx b/api_docs/kbn_user_profile_components.mdx index 7ec9258cb47e4..13435308a55b4 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: 2023-02-09 +date: 2023-02-10 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 a5975d6f8d9fd..eee0faf51b25c 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: 2023-02-09 +date: 2023-02-10 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 cc570c2eab828..17283fb13d92d 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: 2023-02-09 +date: 2023-02-10 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 367899e3106be..25836038a8fab 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utils'] --- import kbnUtilsObj from './kbn_utils.devdocs.json'; diff --git a/api_docs/kbn_yarn_lock_validator.mdx b/api_docs/kbn_yarn_lock_validator.mdx index 40a228dcf4a26..d18f3e5d52722 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator'] --- import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json'; diff --git a/api_docs/kibana_overview.mdx b/api_docs/kibana_overview.mdx index 0de45e567e136..5a97c24f1c742 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaOverview'] --- import kibanaOverviewObj from './kibana_overview.devdocs.json'; diff --git a/api_docs/kibana_react.devdocs.json b/api_docs/kibana_react.devdocs.json index b948b9645cb0b..910974c5da2df 100644 --- a/api_docs/kibana_react.devdocs.json +++ b/api_docs/kibana_react.devdocs.json @@ -1777,6 +1777,106 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "kibanaReact", + "id": "def-public.useGlobalUiSetting", + "type": "Function", + "tags": [], + "label": "useGlobalUiSetting", + "description": [ + "\nReturns the current global UI-settings value.\n\nUsage:\n\n```js\nconst customBranding = useGlobalUiSetting('customBranding:pageTitle');\n```" + ], + "signature": [ + "(key: string, defaultValue?: T | undefined) => T" + ], + "path": "src/plugins/kibana_react/public/ui_settings/use_ui_setting.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "kibanaReact", + "id": "def-public.useGlobalUiSetting.$1", + "type": "string", + "tags": [], + "label": "key", + "description": [], + "signature": [ + "string" + ], + "path": "src/plugins/kibana_react/public/ui_settings/use_ui_setting.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "kibanaReact", + "id": "def-public.useGlobalUiSetting.$2", + "type": "Uncategorized", + "tags": [], + "label": "defaultValue", + "description": [], + "signature": [ + "T | undefined" + ], + "path": "src/plugins/kibana_react/public/ui_settings/use_ui_setting.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "kibanaReact", + "id": "def-public.useGlobalUiSetting$", + "type": "Function", + "tags": [], + "label": "useGlobalUiSetting$", + "description": [ + "\nReturns a 2-tuple, where first entry is the setting value and second is a\nfunction to update the setting value.\n\nSynchronously returns the most current value of the setting and subscribes\nto all subsequent updates, which will re-render your component on new values.\n\nUsage:\n\n```js\nconst [customBranding, setCustomBranding] = useGlobalUiSetting$('customBranding:pageTitle');\n```" + ], + "signature": [ + "(key: string, defaultValue?: T | undefined) => [T, Setter]" + ], + "path": "src/plugins/kibana_react/public/ui_settings/use_ui_setting.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "kibanaReact", + "id": "def-public.useGlobalUiSetting$.$1", + "type": "string", + "tags": [], + "label": "key", + "description": [], + "signature": [ + "string" + ], + "path": "src/plugins/kibana_react/public/ui_settings/use_ui_setting.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "kibanaReact", + "id": "def-public.useGlobalUiSetting$.$2", + "type": "Uncategorized", + "tags": [], + "label": "defaultValue", + "description": [], + "signature": [ + "T | undefined" + ], + "path": "src/plugins/kibana_react/public/ui_settings/use_ui_setting.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "kibanaReact", "id": "def-public.useKibana", diff --git a/api_docs/kibana_react.mdx b/api_docs/kibana_react.mdx index da6216c838be7..0ea5a5836e40e 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaReact'] --- import kibanaReactObj from './kibana_react.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sh | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 179 | 1 | 149 | 5 | +| 185 | 1 | 153 | 5 | ## Client diff --git a/api_docs/kibana_utils.mdx b/api_docs/kibana_utils.mdx index cb5a6d05d3a81..7a53b5d8d4f39 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: 2023-02-09 +date: 2023-02-10 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 fcf7ce7d448a6..3c356c90ff6c2 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: 2023-02-09 +date: 2023-02-10 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 1825b981306f3..8b65ef6dc11d0 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: 2023-02-09 +date: 2023-02-10 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 c9b2e2b471fe0..8167aa17c8db6 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: 2023-02-09 +date: 2023-02-10 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 cafc56d49ac2b..8ed0de035580f 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: 2023-02-09 +date: 2023-02-10 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 97dae9adc772b..2fa065ef68707 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licensing'] --- import licensingObj from './licensing.devdocs.json'; diff --git a/api_docs/lists.mdx b/api_docs/lists.mdx index b2199800ff72e..ef7504c61a47b 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/management.mdx b/api_docs/management.mdx index aa01d48d381e2..e26bba0e76537 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: 2023-02-09 +date: 2023-02-10 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 a7f2dda676e73..0a71e7117c1e8 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: 2023-02-09 +date: 2023-02-10 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 0eeb233c423ae..873469672de5f 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mapsEms'] --- import mapsEmsObj from './maps_ems.devdocs.json'; diff --git a/api_docs/ml.mdx b/api_docs/ml.mdx index ab3f2ee2b3655..7c965601e1ae7 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ml'] --- import mlObj from './ml.devdocs.json'; diff --git a/api_docs/monitoring.mdx b/api_docs/monitoring.mdx index fd26294f30a50..4f4eac26093cb 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: 2023-02-09 +date: 2023-02-10 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 a0be8cb20a113..4a58dd679df2c 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: 2023-02-09 +date: 2023-02-10 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 72e195ba63805..58685d855e1e1 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: 2023-02-09 +date: 2023-02-10 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 40b7bd10c2351..3faba613724ca 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'newsfeed'] --- import newsfeedObj from './newsfeed.devdocs.json'; diff --git a/api_docs/notifications.mdx b/api_docs/notifications.mdx index 932412724849c..724c5373f8a1b 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: 2023-02-09 +date: 2023-02-10 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 e0d7b8085e7de..ef9e84e05d384 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability'] --- import observabilityObj from './observability.devdocs.json'; diff --git a/api_docs/osquery.mdx b/api_docs/osquery.mdx index cef70e4d96b0d..9e007f2e17b0a 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'osquery'] --- import osqueryObj from './osquery.devdocs.json'; diff --git a/api_docs/plugin_directory.mdx b/api_docs/plugin_directory.mdx index d9ac9d6f3fdfe..d48f104148bc7 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: 2023-02-09 +date: 2023-02-10 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 | |--------------|----------|------------------------| -| 572 | 469 | 40 | +| 573 | 469 | 39 | ### Public API health stats | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 67438 | 512 | 58435 | 1221 | +| 67446 | 512 | 58441 | 1222 | ## Plugin Directory @@ -47,7 +47,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | cloudLinks | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | Adds the links to the Elastic Cloud console | 0 | 0 | 0 | 0 | | | [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic/teams/kibana-cloud-security-posture) | The cloud security posture plugin | 17 | 0 | 2 | 2 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 13 | 0 | 13 | 1 | -| | [@elastic/kibana-global-experience](https://github.com/orgs/elastic/teams/kibana-global-experience) | Content management app | 22 | 0 | 22 | 1 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Content management app | 22 | 0 | 22 | 1 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | The Controls Plugin contains embeddable components intended to create a simple query interface for end users, and a powerful editing suite that allows dashboard authors to build controls | 270 | 0 | 266 | 9 | | crossClusterReplication | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 0 | 0 | 0 | 0 | | customBranding | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Enables customization of Kibana | 0 | 0 | 0 | 0 | @@ -108,7 +108,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | - | 123 | 2 | 96 | 4 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides UI and APIs for the interactive setup mode. | 28 | 0 | 18 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 6 | 0 | 6 | 0 | -| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 179 | 1 | 149 | 5 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 185 | 1 | 153 | 5 | | kibanaUsageCollection | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 0 | 0 | 0 | 0 | | | [@elastic/kibana-app-services](https://github.com/orgs/elastic/teams/kibana-app-services) | - | 609 | 3 | 416 | 9 | | | [@elastic/awp-viz](https://github.com/orgs/elastic/teams/awp-viz) | - | 3 | 0 | 3 | 1 | @@ -130,7 +130,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/observability-ui](https://github.com/orgs/elastic/teams/observability-ui) | - | 614 | 43 | 608 | 32 | | | [@elastic/security-defend-workflows](https://github.com/orgs/elastic/teams/security-defend-workflows) | - | 24 | 0 | 24 | 7 | | painlessLab | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 0 | 0 | 0 | 0 | -| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | The Presentation Utility Plugin is a set of common, shared components and toolkits for solutions within the Presentation space, (e.g. Dashboards, Canvas). | 217 | 7 | 161 | 11 | +| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | The Presentation Utility Plugin is a set of common, shared components and toolkits for solutions within the Presentation space, (e.g. Dashboards, Canvas). | 219 | 7 | 163 | 12 | | | [@elastic/profiling-ui](https://github.com/orgs/elastic/teams/profiling-ui) | - | 15 | 2 | 15 | 0 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 4 | 0 | 4 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Reporting Services enables applications to feature reports that the user can automate with Watcher and download later. | 36 | 0 | 16 | 0 | diff --git a/api_docs/presentation_util.devdocs.json b/api_docs/presentation_util.devdocs.json index af1a636532a0d..7f53e919c56ab 100644 --- a/api_docs/presentation_util.devdocs.json +++ b/api_docs/presentation_util.devdocs.json @@ -659,6 +659,43 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "presentationUtil", + "id": "def-public.FloatingActions", + "type": "Function", + "tags": [], + "label": "FloatingActions", + "description": [], + "signature": [ + "({ className, actions, isEnabled, usingTwoLineLayout, children, }: React.PropsWithChildren<", + "FloatingActionsProps", + ">) => JSX.Element" + ], + "path": "src/plugins/presentation_util/public/components/floating_actions/floating_actions.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "presentationUtil", + "id": "def-public.FloatingActions.$1", + "type": "CompoundType", + "tags": [], + "label": "{\n className = '',\n actions,\n isEnabled,\n usingTwoLineLayout,\n children,\n}", + "description": [], + "signature": [ + "React.PropsWithChildren<", + "FloatingActionsProps", + ">" + ], + "path": "src/plugins/presentation_util/public/components/floating_actions/floating_actions.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "presentationUtil", "id": "def-public.getContextProvider", diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx index 0ce272912261a..6d65534e27ed8 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationUtil'] --- import presentationUtilObj from './presentation_util.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 | |-------------------|-----------|------------------------|-----------------| -| 217 | 7 | 161 | 11 | +| 219 | 7 | 163 | 12 | ## Client diff --git a/api_docs/profiling.mdx b/api_docs/profiling.mdx index 8436c1709fd7a..16c373e369bcc 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profiling'] --- import profilingObj from './profiling.devdocs.json'; diff --git a/api_docs/remote_clusters.mdx b/api_docs/remote_clusters.mdx index 3fca7bde8dc82..94bfa8b4cb556 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: 2023-02-09 +date: 2023-02-10 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 8a92185166d9a..0e7c6579fe008 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: 2023-02-09 +date: 2023-02-10 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 db5781ec3bd6d..110b5ba2dcc31 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: 2023-02-09 +date: 2023-02-10 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 c602a2ac3769c..9f2252a55c369 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: 2023-02-09 +date: 2023-02-10 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 72b8bc491bad8..6d94bc04ac708 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: 2023-02-09 +date: 2023-02-10 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 9af6dfde9f125..8648aed4a2746 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: 2023-02-09 +date: 2023-02-10 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 705613eb031e1..63cc51cd24084 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: 2023-02-09 +date: 2023-02-10 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 6ac097931bf56..26f406bef03b8 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: 2023-02-09 +date: 2023-02-10 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 3e350c2cd90cc..674c3199aa92d 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: 2023-02-09 +date: 2023-02-10 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 9e33423216039..2ba916ec10150 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: 2023-02-09 +date: 2023-02-10 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 4530aa518729f..82518084c529d 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: 2023-02-09 +date: 2023-02-10 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 1617043e8b03c..5a839eaacf1a7 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: 2023-02-09 +date: 2023-02-10 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 d6c4ccc55cbe4..42bdb6b49fbaa 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: 2023-02-09 +date: 2023-02-10 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 d42dd6e0ef2b6..8751084366ea5 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'security'] --- import securityObj from './security.devdocs.json'; diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx index 15f1bae9af02e..4ec1e8a1df99e 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolution'] --- import securitySolutionObj from './security_solution.devdocs.json'; diff --git a/api_docs/session_view.mdx b/api_docs/session_view.mdx index 243c35feb063d..b34621cbf4f38 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: 2023-02-09 +date: 2023-02-10 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 7a4ef96bf4521..762c12fa64374 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: 2023-02-09 +date: 2023-02-10 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 12272ab51b9b0..83f5dc276d612 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: 2023-02-09 +date: 2023-02-10 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 67bf4a1a7044b..705c199c30486 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: 2023-02-09 +date: 2023-02-10 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 e1b1e6c0a1da2..f7e7d81f90daf 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: 2023-02-09 +date: 2023-02-10 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 18d368365f5dc..320891d917333 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: 2023-02-09 +date: 2023-02-10 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 edfc1a714c3ff..11e483e12092a 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: 2023-02-09 +date: 2023-02-10 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 8b9049ca29161..2e5880b424317 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: 2023-02-09 +date: 2023-02-10 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 3501ad0c8825e..2550a0d139f12 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: 2023-02-09 +date: 2023-02-10 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 1150ed5db1314..106a91cba317d 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: 2023-02-09 +date: 2023-02-10 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 443d4e36e6457..d2c8f9cc322a3 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection'] --- import telemetryManagementSectionObj from './telemetry_management_section.devdocs.json'; diff --git a/api_docs/threat_intelligence.mdx b/api_docs/threat_intelligence.mdx index f795f1a5d4ab3..a48f3a23fa028 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: 2023-02-09 +date: 2023-02-10 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 bbcb015d68287..4a214e7868b38 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: 2023-02-09 +date: 2023-02-10 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 d8fa7902786e7..2beeac494a9d7 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: 2023-02-09 +date: 2023-02-10 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 413dde43aea53..1032839989818 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: 2023-02-09 +date: 2023-02-10 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 51862d2472f3a..12ccfa49e1bb3 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: 2023-02-09 +date: 2023-02-10 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 f44bc12f4a093..424ed0aeae5a6 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActionsEnhanced'] --- import uiActionsEnhancedObj from './ui_actions_enhanced.devdocs.json'; diff --git a/api_docs/unified_field_list.mdx b/api_docs/unified_field_list.mdx index af1e457cfdee3..a581a9666cfda 100644 --- a/api_docs/unified_field_list.mdx +++ b/api_docs/unified_field_list.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedFieldList title: "unifiedFieldList" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedFieldList plugin -date: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedFieldList'] --- import unifiedFieldListObj from './unified_field_list.devdocs.json'; diff --git a/api_docs/unified_histogram.mdx b/api_docs/unified_histogram.mdx index c86401ad8ca9d..e4f2abbab19a4 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: 2023-02-09 +date: 2023-02-10 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 696c4df1f8b4d..23be9c1439496 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: 2023-02-09 +date: 2023-02-10 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 7b199daf55c4a..f20d4d3b20da3 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch.autocomplete'] --- import unifiedSearchAutocompleteObj from './unified_search_autocomplete.devdocs.json'; diff --git a/api_docs/url_forwarding.mdx b/api_docs/url_forwarding.mdx index 0a6d8d84fb161..133ea111d4fbd 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: 2023-02-09 +date: 2023-02-10 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 b8c1df917e452..2688502b1c5ff 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: 2023-02-09 +date: 2023-02-10 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 aeef2a67946c4..2c825bd9397db 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: 2023-02-09 +date: 2023-02-10 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 c3502c7353208..19d4558a182f9 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: 2023-02-09 +date: 2023-02-10 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 9930a56bd215d..a531cf76a3ea6 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: 2023-02-09 +date: 2023-02-10 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 7770d0f3e8330..b4c4063dcb3c5 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: 2023-02-09 +date: 2023-02-10 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 7071fb3d24df6..61a3fa32b0b94 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: 2023-02-09 +date: 2023-02-10 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 158807dd36ed9..d3f050412ff47 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: 2023-02-09 +date: 2023-02-10 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 f4f26ac22e154..d603bfd046c0f 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: 2023-02-09 +date: 2023-02-10 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 67cb9a798572a..00322ee8d4e1a 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: 2023-02-09 +date: 2023-02-10 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 0a21bcaafb60b..2d36fa29367e8 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: 2023-02-09 +date: 2023-02-10 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 dfe7bd4df1ff3..0d9abd57000bd 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: 2023-02-09 +date: 2023-02-10 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 5550941a6c350..d317e96c78432 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeXy'] --- import visTypeXyObj from './vis_type_xy.devdocs.json'; diff --git a/api_docs/visualizations.mdx b/api_docs/visualizations.mdx index 6cceb9bcfe2c5..8bc8f2644a826 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: 2023-02-09 +date: 2023-02-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; diff --git a/dev_docs/operations/operations_landing.mdx b/dev_docs/operations/operations_landing.mdx index 37a240a599d2e..e38999f8d1046 100644 --- a/dev_docs/operations/operations_landing.mdx +++ b/dev_docs/operations/operations_landing.mdx @@ -38,7 +38,6 @@ layout: landing { pageId: "kibDevDocsOpsBabelPreset" }, { pageId: "kibDevDocsOpsUiSharedDepsNpm" }, { pageId: "kibDevDocsOpsUiSharedDepsSrc" }, - { pageId: "kibDevDocsOpsPluginDiscovery" }, ]} /> diff --git a/docs/user/alerting/create-and-manage-rules.asciidoc b/docs/user/alerting/create-and-manage-rules.asciidoc index c71a6f1218864..4e341a00f325b 100644 --- a/docs/user/alerting/create-and-manage-rules.asciidoc +++ b/docs/user/alerting/create-and-manage-rules.asciidoc @@ -124,29 +124,105 @@ You can attach more than one action. Clicking the *Add action* button will promp [float] [[defining-rules-actions-variables]] ===== Action variables -Using the https://mustache.github.io/[Mustache] template syntax `{{variable name}}`, you can pass rule values at the time a condition is detected to an action. You can access the list of available variables using the "add rule variable" button. Although available variables differ by rule type, all rule types pass the following variables: +Using the https://mustache.github.io/[Mustache] template syntax `{{variable name}}`, you can pass rule values to an action at the time a condition is detected. You can access the list of available variables using the "add rule variable" button: + +[role="screenshot"] +image::images/rule-flyout-action-variables.png[Passing rule values to an action] + +All rule types pass the following variables: + +`date`:: The date the rule scheduled the action, in ISO format. +`kibanaBaseUrl`:: The configured <>. If not configured, this will be empty. `rule.id`:: The ID of the rule. `rule.name`:: The name of the rule. `rule.spaceId`:: The ID of the space for the rule. `rule.tags`:: The list of tags applied to the rule. -`date`:: The date the rule scheduled the action, in ISO format. -`alert.id`:: The ID of the alert that scheduled the action. + +There is also a set of action variables specific to the action frequency: + +- <> +- <> + +[float] +[[alert-action-variables]] +===== Action variables for each alert + +Although available variables differ by rule type, when the action frequency is +**For each alert**, all rule types pass the following variables: + `alert.actionGroup`:: The ID of the action group of the alert that scheduled the action. -`alert.actionSubgroup`:: The action subgroup of the alert that scheduled the action. `alert.actionGroupName`:: The name of the action group of the alert that scheduled the action. +`alert.actionSubgroup`:: The action subgroup of the alert that scheduled the action. `alert.flapping`:: A flag on the alert that indicates whether the alert status is changing repeatedly. +`alert.id`:: The ID of the alert that scheduled the action. -`kibanaBaseUrl`:: The configured <>. If not configured, this will be empty. +[float] +[role="child_attributes"] +[[alert-summary-action-variables]] +===== Action variables for summary of alerts -[role="screenshot"] -image::images/rule-flyout-action-variables.png[Passing rule values to an action] +NOTE: This type of action frequency is not available for all rule types. + +When the action frequency is **Summary of alerts**, rules pass the following +variables: + +`alerts.all.count`:: The count of all alerts. + +`alerts.all.data`:: +An array of objects for all alerts. The following object properties are examples; it is not a comprehensive list. ++ +.Properties of the alerts.all.data objects +[%collapsible%open] +===== +//# tag::alerts-data[] +`kibana.alert.end`:: Datetime stamp of alert end. preview:[] +`kibana.alert.flapping`:: A flag on the alert that indicates whether the alert status is changing repeatedly. preview:[] +`kibana.alert.instance.id`:: ID of the source that generates the alert. preview:[] +`kibana.alert.reason`:: The reason of the alert (generated with the rule conditions). preview:[] +`kibana.alert.start`:: Datetime stamp of alert start. preview:[] +`kibana.alert.status`:: Alert status (for example, active or OK). preview:[] +//# end::alerts-data[] +===== + +`alerts.new.count`:: The count of new alerts. + +`alerts.new.data`:: +An array of objects for new alerts. The following object properties are examples; it is not a comprehensive list. ++ +.Properties of the alerts.new.data objects +[%collapsible] +===== +include::create-and-manage-rules.asciidoc[tag=alerts-data] +===== + +`alerts.ongoing.count`:: The count of ongoing alerts. + +`alerts.ongoing.data`:: +An array of objects for ongoing alerts. The following object properties are examples; it is not a comprehensive list. ++ +.Properties of the alerts.ongoing.data objects +[%collapsible] +===== +include::create-and-manage-rules.asciidoc[tag=alerts-data] +===== + +`alerts.recovered.count`:: The count of recovered alerts. + +`alerts.recovered.data`:: +An array of objects for recovered alerts. The following object properties are examples; it is not a comprehensive list. ++ +.Properties of the alerts.recovered.data objects +[%collapsible] +===== +include::create-and-manage-rules.asciidoc[tag=alerts-data] +===== Some cases exist where the variable values will be "escaped", when used in a context where escaping is needed: -- For the <> connector, the `message` action configuration property escapes any characters that would be interpreted as Markdown. -- For the <> connector, the `message` action configuration property escapes any characters that would be interpreted as Slack Markdown. -- For the <> connector, the `body` action configuration property escapes any characters that are invalid in JSON string values. +- For the <> connector, the `message` action configuration property escapes any characters that would be interpreted as Markdown. +- For the <> connector, the `message` action configuration property escapes any characters that would be interpreted as Slack Markdown. +- For the <> connector, the `body` action configuration property escapes any characters that are invalid in JSON string values. Mustache also supports "triple braces" of the form `{{{variable name}}}`, which indicates no escaping should be done at all. Care should be used when using this form, as it could end up rendering the variable content in such a way as to make the resulting parameter invalid or formatted incorrectly. @@ -154,18 +230,18 @@ Mustache also supports "triple braces" of the form `{{{variable name}}}`, which [[defining-rules-actions-variable-context]] ===== Action variable context -Each rule type defines additional variables as properties of the variable `context`. For example, if a rule type defines a variable `value`, it can be used in an action parameter as `{{context.value}}`. +When the action frequency is **For each alert**, each rule type defines additional variables as properties of the variable `context`. For example, if a rule type defines a variable `value`, it can be used in an action parameter as `{{context.value}}`. -For diagnostic or exploratory purposes, action variables whose values are objects, such as `context`, can be referenced directly as variables. The resulting value will be a JSON representation of the object. For example, if an action parameter includes `{{context}}`, it will expand to the JSON representation of all the variables and values provided by the rule type. To see alert-specific variables, use `{{.}} `. +For diagnostic or exploratory purposes, action variables whose values are objects, such as `context`, can be referenced directly as variables. The resulting value will be a JSON representation of the object. For example, if an action parameter includes `{{context}}`, it will expand to the JSON representation of all the variables and values provided by the rule type. To see alert-specific variables, use `{{.}}`. -For situations where your rule response returns arrays of data, you can loop through the `context` by +For situations where your rule response returns arrays of data, you can loop through the `context`: [source] -------------------------------------------------- {{#context}}{{.}}{{/context}} -------------------------------------------------- -For example, looping through search result hits may appear +For example, looping through search result hits: [source] -------------------------------------------------- diff --git a/kbn_pm/src/cli.mjs b/kbn_pm/src/cli.mjs index 34404f8b0ab57..646442be59878 100644 --- a/kbn_pm/src/cli.mjs +++ b/kbn_pm/src/cli.mjs @@ -18,6 +18,7 @@ import { Args } from './lib/args.mjs'; import { getHelp } from './lib/help.mjs'; import { createFlagError, isCliError } from './lib/cli_error.mjs'; +import { checkIfRunningNativelyOnWindows } from './lib/windows.mjs'; import { getCmd } from './commands/index.mjs'; import { Log } from './lib/log.mjs'; import External from './lib/external_packages.js'; @@ -40,6 +41,7 @@ async function tryToGetCiStatsReporter(log) { } try { + checkIfRunningNativelyOnWindows(log); const cmd = getCmd(cmdName); if (cmdName && !cmd) { diff --git a/kbn_pm/src/lib/windows.mjs b/kbn_pm/src/lib/windows.mjs new file mode 100644 index 0000000000000..9dc93c9b465c9 --- /dev/null +++ b/kbn_pm/src/lib/windows.mjs @@ -0,0 +1,21 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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. + */ + +/** + * @param {import('./log.mjs').Log} log + */ +export function checkIfRunningNativelyOnWindows(log) { + if (process.platform !== 'win32') { + return; + } + + log.error( + 'We no longer support natively bootstrap Kibana on Windows. Please check our documentation on how you can develop on Windows at https://docs.elastic.dev/kibana-dev-docs/tutorial/setup-windows-development-wsl' + ); + process.exit(1); +} diff --git a/package.json b/package.json index 0aaf633a71dfb..c787bb1942060 100644 --- a/package.json +++ b/package.json @@ -1104,6 +1104,7 @@ "@kbn/tooling-log": "link:packages/kbn-tooling-log", "@kbn/ts-projects": "link:packages/kbn-ts-projects", "@kbn/ts-type-check-cli": "link:packages/kbn-ts-type-check-cli", + "@kbn/validate-next-docs-cli": "link:packages/kbn-validate-next-docs-cli", "@kbn/web-worker-stub": "link:packages/kbn-web-worker-stub", "@kbn/whereis-pkg-cli": "link:packages/kbn-whereis-pkg-cli", "@kbn/yarn-lock-validator": "link:packages/kbn-yarn-lock-validator", diff --git a/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/repository.test.ts b/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/repository.test.ts index 550bf9560a9fd..1a0fbb2805daf 100644 --- a/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/repository.test.ts +++ b/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/repository.test.ts @@ -72,7 +72,6 @@ import { errors as EsErrors } from '@elastic/elasticsearch'; import type { InternalBulkResolveError } from './internal_bulk_resolve'; import { - KIBANA_VERSION, CUSTOM_INDEX_TYPE, NAMESPACE_AGNOSTIC_TYPE, MULTI_NAMESPACE_TYPE, @@ -935,7 +934,6 @@ describe('SavedObjectsRepository', () => { ...response.items[0].create, _source: { ...response.items[0].create._source, - coreMigrationVersion: '2.0.0', // the document migrator adds this to all objects before creation namespaces: response.items[0].create._source.namespaces, }, _id: expect.stringMatching(/^myspace:config:[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}$/), @@ -944,7 +942,6 @@ describe('SavedObjectsRepository', () => { ...response.items[1].create, _source: { ...response.items[1].create._source, - coreMigrationVersion: '2.0.0', // the document migrator adds this to all objects before creation namespaces: response.items[1].create._source.namespaces, }, }); @@ -2951,7 +2948,6 @@ describe('SavedObjectsRepository', () => { references, namespaces: [namespace ?? 'default'], migrationVersion: { [MULTI_NAMESPACE_TYPE]: '1.1.1' }, - coreMigrationVersion: KIBANA_VERSION, }); }); }); diff --git a/packages/core/saved-objects/core-saved-objects-api-server-internal/src/test_helpers/repository.test.common.ts b/packages/core/saved-objects/core-saved-objects-api-server-internal/src/test_helpers/repository.test.common.ts index bbe40c8dba8c5..547084a9d3970 100644 --- a/packages/core/saved-objects/core-saved-objects-api-server-internal/src/test_helpers/repository.test.common.ts +++ b/packages/core/saved-objects/core-saved-objects-api-server-internal/src/test_helpers/repository.test.common.ts @@ -596,7 +596,6 @@ export const expectCreateResult = (obj: { }) => ({ ...obj, migrationVersion: { [obj.type]: '1.1.1' }, - coreMigrationVersion: KIBANA_VERSION, version: mockVersion, namespaces: obj.namespaces ?? [obj.namespace ?? 'default'], ...mockTimestampFieldsWithCreated, diff --git a/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/build_active_migrations.ts b/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/build_active_migrations.ts index e46dbac99ef01..51d951a2a9a00 100644 --- a/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/build_active_migrations.ts +++ b/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/build_active_migrations.ts @@ -9,7 +9,7 @@ import _ from 'lodash'; import type { Logger } from '@kbn/logging'; import type { ISavedObjectTypeRegistry } from '@kbn/core-saved-objects-server'; -import type { Transform, ActiveMigrations } from './types'; +import { type ActiveMigrations, type Transform, TransformType } from './types'; import { getReferenceTransforms, getConversionTransforms } from './internal_transforms'; import { validateMigrationsMapObject } from './validate_migrations'; import { transformComparator, wrapWithTry } from './utils'; @@ -18,7 +18,7 @@ import { transformComparator, wrapWithTry } from './utils'; * Converts migrations from a format that is convenient for callers to a format that * is convenient for our internal usage: * From: { type: { version: fn } } - * To: { type: { latestMigrationVersion?: string; latestCoreMigrationVersion?: string; transforms: [{ version: string, transform: fn }] } } + * To: { type: { latestVersion?: Record; transforms: [{ version: string, transform: fn }] } } */ export function buildActiveMigrations( typeRegistry: ISavedObjectTypeRegistry, @@ -36,7 +36,7 @@ export function buildActiveMigrations( ([version, transform]) => ({ version, transform: wrapWithTry(version, type, transform, log), - transformType: 'migrate', + transformType: TransformType.Migrate, }) ); const conversionTransforms = getConversionTransforms(type); @@ -50,21 +50,13 @@ export function buildActiveMigrations( return migrations; } - const migrationVersionTransforms: Transform[] = []; - const coreMigrationVersionTransforms: Transform[] = []; - transforms.forEach((x) => { - if (x.transformType === 'migrate' || x.transformType === 'convert') { - migrationVersionTransforms.push(x); - } else { - coreMigrationVersionTransforms.push(x); - } - }); - return { ...migrations, [type.name]: { - latestMigrationVersion: _.last(migrationVersionTransforms)?.version, - latestCoreMigrationVersion: _.last(coreMigrationVersionTransforms)?.version, + latestVersion: _.chain(transforms) + .groupBy('transformType') + .mapValues((items) => _.last(items)?.version) + .value() as Record, transforms, }, }; diff --git a/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts b/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts index 46ca8286d44a5..2d7fb11587840 100644 --- a/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts +++ b/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts @@ -255,7 +255,6 @@ describe('DocumentMigrator', () => { type: 'user', attributes: { name: 'Chris' }, migrationVersion: { user: '1.2.3' }, - coreMigrationVersion: kibanaVersion, }); }); @@ -308,7 +307,6 @@ describe('DocumentMigrator', () => { attributes: { name: 'Tyler' }, migrationVersion: { acl: '2.3.5' }, acl: 'admins-only, sucka!', - coreMigrationVersion: kibanaVersion, }); }); @@ -347,7 +345,6 @@ describe('DocumentMigrator', () => { id: 'me', type: 'user', attributes: { name: 'Tyler' }, - coreMigrationVersion: kibanaVersion, }); }); @@ -420,7 +417,6 @@ describe('DocumentMigrator', () => { type: 'dog', attributes: { name: 'Callie', b: 'B', c: 'C' }, migrationVersion: { dog: '2.0.1' }, - coreMigrationVersion: kibanaVersion, }); }); @@ -525,7 +521,6 @@ describe('DocumentMigrator', () => { type: 'dog', attributes: { name: 'Callie', a: 1, b: 2, c: 3 }, migrationVersion: { dog: '10.0.1' }, - coreMigrationVersion: kibanaVersion, }); }); @@ -560,7 +555,6 @@ describe('DocumentMigrator', () => { attributes: { name: 'Callie' }, animal: 'Animal: Doggie', migrationVersion: { animal: '1.0.0', dog: '2.2.4' }, - coreMigrationVersion: kibanaVersion, }); }); @@ -588,7 +582,6 @@ describe('DocumentMigrator', () => { type: 'dog', attributes: { title: 'Title: Name: Callie' }, migrationVersion: { dog: '1.0.2' }, - coreMigrationVersion: kibanaVersion, }); }); @@ -622,7 +615,6 @@ describe('DocumentMigrator', () => { type: 'cat', attributes: { name: 'Kitty Callie' }, migrationVersion: { dog: '2.2.4', cat: '1.0.0' }, - coreMigrationVersion: kibanaVersion, }); }); @@ -694,7 +686,6 @@ describe('DocumentMigrator', () => { type: 'cat', attributes: { name: 'Boo' }, migrationVersion: { cat: '1.0.0', foo: '5.6.7' }, - coreMigrationVersion: kibanaVersion, }); }); @@ -824,6 +815,35 @@ describe('DocumentMigrator', () => { ]); }); + it('does not fail when encountering documents with coreMigrationVersion higher than the latest known', () => { + const migrator = new DocumentMigrator({ + ...testOpts(), + typeRegistry: createRegistry( + { name: 'dog', namespaceType: 'multiple', convertToMultiNamespaceTypeVersion: '1.0.0' } + // no migration transforms are defined, the migrationVersion will be derived from 'convertToMultiNamespaceTypeVersion' + ), + }); + migrator.prepareMigrations(); + const obj = { + id: 'mischievous', + type: 'dog', + attributes: { name: 'Ann' }, + migrationVersion: { dog: '0.1.0' }, + coreMigrationVersion: '2.0.0', + } as SavedObjectUnsanitizedDoc; + const actual = migrator.migrateAndConvert(obj); + expect(actual).toEqual([ + { + id: 'mischievous', + type: 'dog', + attributes: { name: 'Ann' }, + migrationVersion: { dog: '1.0.0' }, + coreMigrationVersion: '2.0.0', + namespaces: ['default'], + }, + ]); + }); + it('skips reference transforms and conversion transforms when using `migrate`', () => { const migrator = new DocumentMigrator({ ...testOpts(), @@ -847,9 +867,43 @@ describe('DocumentMigrator', () => { id: 'cowardly', type: 'dog', attributes: { name: 'Leslie' }, - migrationVersion: { dog: '1.0.0' }, references: [{ id: 'favorite', type: 'toy', name: 'BALL!' }], - coreMigrationVersion: kibanaVersion, + coreMigrationVersion: '1.0.0', + namespace: 'foo-namespace', + // there is no 'namespaces' field because no conversion transform was applied; this scenario is contrived for a clean test case but is not indicative of a real-world scenario + }); + }); + + it('should keep the same `migrationVersion` when the conversion transforms are skipped', () => { + const migrator = new DocumentMigrator({ + ...testOpts(), + typeRegistry: createRegistry({ + name: 'dog', + namespaceType: 'multiple', + convertToMultiNamespaceTypeVersion: '3.0.0', + migrations: { + '1.0.0': (doc: SavedObjectUnsanitizedDoc) => doc, + }, + }), + }); + migrator.prepareMigrations(); + const obj = { + id: 'cowardly', + type: 'dog', + attributes: { name: 'Leslie' }, + migrationVersion: { dog: '2.0.0' }, + references: [{ id: 'favorite', type: 'toy', name: 'BALL!' }], + namespace: 'foo-namespace', + }; + const actual = migrator.migrate(obj); + expect(mockGetConvertedObjectId).not.toHaveBeenCalled(); + expect(actual).toEqual({ + id: 'cowardly', + type: 'dog', + attributes: { name: 'Leslie' }, + migrationVersion: { dog: '2.0.0' }, + references: [{ id: 'favorite', type: 'toy', name: 'BALL!' }], + coreMigrationVersion: '3.0.0', namespace: 'foo-namespace', // there is no 'namespaces' field because no conversion transform was applied; this scenario is contrived for a clean test case but is not indicative of a real-world scenario }); @@ -881,7 +935,7 @@ describe('DocumentMigrator', () => { type: 'dog', attributes: { name: 'Sweet Peach' }, references: [{ id: 'favorite', type: 'toy', name: 'BALL!' }], // no change - coreMigrationVersion: kibanaVersion, + coreMigrationVersion: '1.0.0', }, ]); }); @@ -896,7 +950,7 @@ describe('DocumentMigrator', () => { type: 'dog', attributes: { name: 'Sweet Peach' }, references: [{ id: 'uuidv5', type: 'toy', name: 'BALL!' }], // changed - coreMigrationVersion: kibanaVersion, + coreMigrationVersion: '1.0.0', namespace: 'foo-namespace', }, ]); @@ -929,7 +983,7 @@ describe('DocumentMigrator', () => { type: 'dog', attributes: { name: 'Wally' }, migrationVersion: { dog: '1.0.0' }, - coreMigrationVersion: kibanaVersion, + coreMigrationVersion: '1.0.0', namespaces: ['default'], }, ]); @@ -945,7 +999,7 @@ describe('DocumentMigrator', () => { type: 'dog', attributes: { name: 'Wally' }, migrationVersion: { dog: '1.0.0' }, - coreMigrationVersion: kibanaVersion, + coreMigrationVersion: '1.0.0', namespaces: ['foo-namespace'], originId: 'loud', }, @@ -960,7 +1014,7 @@ describe('DocumentMigrator', () => { purpose: 'savedObjectConversion', }, migrationVersion: { [LEGACY_URL_ALIAS_TYPE]: '0.1.2' }, - coreMigrationVersion: kibanaVersion, + coreMigrationVersion: '1.0.0', }, ]); }); @@ -993,7 +1047,7 @@ describe('DocumentMigrator', () => { attributes: { name: 'Too' }, migrationVersion: { dog: '1.0.0' }, references: [{ id: 'favorite', type: 'toy', name: 'BALL!' }], // no change - coreMigrationVersion: kibanaVersion, + coreMigrationVersion: '1.0.0', namespaces: ['default'], }, ]); @@ -1021,7 +1075,7 @@ describe('DocumentMigrator', () => { attributes: { name: 'Too' }, migrationVersion: { dog: '1.0.0' }, references: [{ id: 'uuidv5', type: 'toy', name: 'BALL!' }], // changed - coreMigrationVersion: kibanaVersion, + coreMigrationVersion: '1.0.0', namespaces: ['foo-namespace'], originId: 'cute', }, @@ -1036,7 +1090,7 @@ describe('DocumentMigrator', () => { purpose: 'savedObjectConversion', }, migrationVersion: { [LEGACY_URL_ALIAS_TYPE]: '0.1.2' }, - coreMigrationVersion: kibanaVersion, + coreMigrationVersion: '1.0.0', }, ]); }); @@ -1078,7 +1132,7 @@ describe('DocumentMigrator', () => { attributes: { name: 'Patches', age: '11', color: 'tri-color' }, migrationVersion: { dog: '2.0.0' }, references: [{ id: 'favorite', type: 'toy', name: 'BALL!' }], // no change - coreMigrationVersion: kibanaVersion, + coreMigrationVersion: '1.0.0', }, ]); }); @@ -1094,7 +1148,7 @@ describe('DocumentMigrator', () => { attributes: { name: 'Patches', age: '11', color: 'tri-color' }, migrationVersion: { dog: '2.0.0' }, references: [{ id: 'uuidv5', type: 'toy', name: 'BALL!' }], // changed - coreMigrationVersion: kibanaVersion, + coreMigrationVersion: '1.0.0', namespace: 'foo-namespace', }, ]); @@ -1131,7 +1185,7 @@ describe('DocumentMigrator', () => { type: 'dog', attributes: { name: 'Remy' }, migrationVersion: { dog: '2.0.0' }, - coreMigrationVersion: kibanaVersion, + coreMigrationVersion: '1.0.0', namespaces: ['default'], }, ]); @@ -1147,7 +1201,7 @@ describe('DocumentMigrator', () => { type: 'dog', attributes: { name: 'Remy' }, migrationVersion: { dog: '2.0.0' }, - coreMigrationVersion: kibanaVersion, + coreMigrationVersion: '1.0.0', namespaces: ['foo-namespace'], originId: 'hungry', }, @@ -1162,7 +1216,7 @@ describe('DocumentMigrator', () => { purpose: 'savedObjectConversion', }, migrationVersion: { [LEGACY_URL_ALIAS_TYPE]: '0.1.2' }, - coreMigrationVersion: kibanaVersion, + coreMigrationVersion: '1.0.0', }, ]); }); @@ -1203,7 +1257,7 @@ describe('DocumentMigrator', () => { attributes: { name: 'Sasha' }, migrationVersion: { dog: '2.0.0' }, references: [{ id: 'favorite', type: 'toy', name: 'BALL!' }], // no change - coreMigrationVersion: kibanaVersion, + coreMigrationVersion: '1.0.0', namespaces: ['default'], }, ]); @@ -1231,7 +1285,7 @@ describe('DocumentMigrator', () => { attributes: { name: 'Sasha' }, migrationVersion: { dog: '2.0.0' }, references: [{ id: 'uuidv5', type: 'toy', name: 'BALL!' }], // changed - coreMigrationVersion: kibanaVersion, + coreMigrationVersion: '1.0.0', namespaces: ['foo-namespace'], originId: 'pretty', }, @@ -1246,7 +1300,7 @@ describe('DocumentMigrator', () => { purpose: 'savedObjectConversion', }, migrationVersion: { [LEGACY_URL_ALIAS_TYPE]: '0.1.2' }, - coreMigrationVersion: kibanaVersion, + coreMigrationVersion: '1.0.0', }, ]); }); diff --git a/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.ts b/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.ts index c9c84cba261c1..7dc2e0dd885d5 100644 --- a/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.ts +++ b/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.ts @@ -52,6 +52,7 @@ import type { ISavedObjectTypeRegistry, } from '@kbn/core-saved-objects-server'; import type { ActiveMigrations, TransformResult } from './types'; +import { maxVersion } from './utils'; import { buildActiveMigrations } from './build_active_migrations'; import { validateMigrationDefinition } from './validate_migrations'; @@ -119,8 +120,9 @@ export class DocumentMigrator implements VersionedTransformer { throw new Error('Migrations are not ready. Make sure prepareMigrations is called first.'); } - return Object.entries(this.migrations).reduce((acc, [prop, { latestMigrationVersion }]) => { - // some migration objects won't have a latestMigrationVersion (they only contain reference transforms that are applied from other types) + return Object.entries(this.migrations).reduce((acc, [prop, { latestVersion }]) => { + // some migration objects won't have a latest migration version (they only contain reference transforms that are applied from other types) + const latestMigrationVersion = maxVersion(latestVersion.migrate, latestVersion.convert); if (latestMigrationVersion) { return { ...acc, [prop]: latestMigrationVersion }; } @@ -208,13 +210,13 @@ function buildDocumentTransform({ let transformedDoc: SavedObjectUnsanitizedDoc; let additionalDocs: SavedObjectUnsanitizedDoc[] = []; if (doc.migrationVersion) { - const result = applyMigrations(doc, migrations, kibanaVersion, convertNamespaceTypes); + const result = applyMigrations(doc, migrations, convertNamespaceTypes); transformedDoc = result.transformedDoc; additionalDocs = additionalDocs.concat( - result.additionalDocs.map((x) => markAsUpToDate(x, migrations, kibanaVersion)) + result.additionalDocs.map((x) => markAsUpToDate(x, migrations)) ); } else { - transformedDoc = markAsUpToDate(doc, migrations, kibanaVersion); + transformedDoc = markAsUpToDate(doc, migrations); } // In order to keep tests a bit more stable, we won't @@ -244,7 +246,7 @@ function validateCoreMigrationVersion(doc: SavedObjectUnsanitizedDoc, kibanaVers ); } - if (doc.coreMigrationVersion && Semver.gt(docVersion, kibanaVersion)) { + if (docVersion && Semver.gt(docVersion, kibanaVersion)) { throw Boom.badData( `Document "${id}" has a "coreMigrationVersion" which belongs to a more recent version` + ` of Kibana [${docVersion}]. The current version is [${kibanaVersion}].`, @@ -256,17 +258,22 @@ function validateCoreMigrationVersion(doc: SavedObjectUnsanitizedDoc, kibanaVers function applyMigrations( doc: SavedObjectUnsanitizedDoc, migrations: ActiveMigrations, - kibanaVersion: string, convertNamespaceTypes: boolean ) { let additionalDocs: SavedObjectUnsanitizedDoc[] = []; while (true) { - const prop = nextUnmigratedProp(doc, migrations); + const prop = nextUnmigratedProp(doc, migrations, convertNamespaceTypes); + if (!prop) { - // regardless of whether or not any reference transform was applied, update the coreMigrationVersion - // this is needed to ensure that newly created documents have an up-to-date coreMigrationVersion field + // Ensure that newly created documents have an up-to-date coreMigrationVersion field + const { coreMigrationVersion = getLatestCoreVersion(doc, migrations), ...transformedDoc } = + doc; + return { - transformedDoc: { ...doc, coreMigrationVersion: kibanaVersion }, + transformedDoc: { + ...transformedDoc, + ...(coreMigrationVersion ? { coreMigrationVersion } : {}), + }, additionalDocs, }; } @@ -286,28 +293,27 @@ function props(doc: SavedObjectUnsanitizedDoc) { /** * Looks up the prop version in a saved object document or in our latest migrations. */ -function propVersion(doc: SavedObjectUnsanitizedDoc | ActiveMigrations, prop: string) { - return ( - ((doc as any)[prop] && (doc as any)[prop].latestMigrationVersion) || - (doc.migrationVersion && (doc as any).migrationVersion[prop]) - ); +function propVersion(doc: SavedObjectUnsanitizedDoc, prop: string) { + return doc.migrationVersion && (doc as any).migrationVersion[prop]; } /** * Sets the doc's migrationVersion to be the most recent version */ -function markAsUpToDate( - doc: SavedObjectUnsanitizedDoc, - migrations: ActiveMigrations, - kibanaVersion: string -) { +function markAsUpToDate(doc: SavedObjectUnsanitizedDoc, migrations: ActiveMigrations) { + const { coreMigrationVersion = getLatestCoreVersion(doc, migrations), ...rest } = doc; + return { - ...doc, + ...rest, migrationVersion: props(doc).reduce((acc, prop) => { - const version = propVersion(migrations, prop); + const version = maxVersion( + migrations[prop]?.latestVersion.migrate, + migrations[prop]?.latestVersion.convert + ); + return version ? set(acc, prop, version) : acc; }, {}), - coreMigrationVersion: kibanaVersion, + ...(coreMigrationVersion ? { coreMigrationVersion } : {}), }; } @@ -315,7 +321,7 @@ function markAsUpToDate( * Determines whether or not a document has any pending transforms that should be applied based on its coreMigrationVersion field. * Currently, only reference transforms qualify. */ -function getHasPendingCoreMigrationVersionTransform( +function hasPendingCoreTransform( doc: SavedObjectUnsanitizedDoc, migrations: ActiveMigrations, prop: string @@ -324,7 +330,7 @@ function getHasPendingCoreMigrationVersionTransform( return false; } - const { latestCoreMigrationVersion } = migrations[prop]; + const latestCoreMigrationVersion = migrations[prop].latestVersion.reference; const { coreMigrationVersion } = doc; return ( latestCoreMigrationVersion && @@ -332,12 +338,67 @@ function getHasPendingCoreMigrationVersionTransform( ); } +/** + * Determines whether or not a document has any pending conversion transforms that should be applied. + * Currently, only reference transforms qualify. + */ +function hasPendingConversionTransform( + doc: SavedObjectUnsanitizedDoc, + migrations: ActiveMigrations, + prop: string +) { + if (!migrations.hasOwnProperty(prop)) { + return false; + } + + const latestVersion = migrations[prop].latestVersion.convert; + const migrationVersion = doc.migrationVersion?.[prop]; + + return latestVersion && (!migrationVersion || Semver.gt(latestVersion, migrationVersion)); +} + +/** + * Determines whether or not a document has any pending transforms that should be applied based on its coreMigrationVersion field. + * Currently, only reference transforms qualify. + */ +function hasPendingMigrationTransform( + doc: SavedObjectUnsanitizedDoc, + migrations: ActiveMigrations, + prop: string +) { + if (!migrations.hasOwnProperty(prop)) { + return false; + } + + const latestVersion = migrations[prop].latestVersion.migrate; + const migrationVersion = doc.migrationVersion?.[prop]; + + return latestVersion && (!migrationVersion || Semver.gt(latestVersion, migrationVersion)); +} + +function getLatestCoreVersion(doc: SavedObjectUnsanitizedDoc, migrations: ActiveMigrations) { + let latestVersion: string | undefined; + + for (const prop of props(doc)) { + latestVersion = maxVersion(latestVersion, migrations[prop]?.latestVersion.reference); + } + + return latestVersion; +} + /** * Finds the first unmigrated property in the specified document. */ -function nextUnmigratedProp(doc: SavedObjectUnsanitizedDoc, migrations: ActiveMigrations) { +function nextUnmigratedProp( + doc: SavedObjectUnsanitizedDoc, + migrations: ActiveMigrations, + convertNamespaceTypes: boolean +) { return props(doc).find((p) => { - const latestMigrationVersion = propVersion(migrations, p); + const latestMigrationVersion = maxVersion( + migrations[p]?.latestVersion.migrate, + migrations[p]?.latestVersion.convert + ); const docVersion = propVersion(doc, p); // We verify that the version is not greater than the version supported by Kibana. @@ -354,8 +415,10 @@ function nextUnmigratedProp(doc: SavedObjectUnsanitizedDoc, migrations: ActiveMi } return ( - (latestMigrationVersion && latestMigrationVersion !== docVersion) || - getHasPendingCoreMigrationVersionTransform(doc, migrations, p) // If the object itself is up-to-date, check if its references are up-to-date too + hasPendingMigrationTransform(doc, migrations, p) || + (convertNamespaceTypes && // If the object itself is up-to-date, check if its references are up-to-date too + (hasPendingCoreTransform(doc, migrations, p) || + hasPendingConversionTransform(doc, migrations, p))) ); }); } @@ -373,13 +436,16 @@ function migrateProp( let migrationVersion = _.clone(doc.migrationVersion) || {}; let additionalDocs: SavedObjectUnsanitizedDoc[] = []; - for (const { version, transform, transformType } of applicableTransforms(migrations, doc, prop)) { - if (convertNamespaceTypes || (transformType !== 'convert' && transformType !== 'reference')) { - // migrate transforms are always applied, but conversion transforms and reference transforms are only applied during index migrations - const result = transform(doc); - doc = result.transformedDoc; - additionalDocs = [...additionalDocs, ...result.additionalDocs]; - } + for (const { version, transform, transformType } of applicableTransforms( + doc, + prop, + migrations, + convertNamespaceTypes + )) { + const result = transform(doc); + doc = result.transformedDoc; + additionalDocs = [...additionalDocs, ...result.additionalDocs]; + if (transformType === 'reference') { // regardless of whether or not the reference transform was applied, update the object's coreMigrationVersion // this is needed to ensure that we don't have an endless migration loop @@ -402,20 +468,28 @@ function migrateProp( * Retrieves any prop transforms that have not been applied to doc. */ function applicableTransforms( - migrations: ActiveMigrations, doc: SavedObjectUnsanitizedDoc, - prop: string + prop: string, + migrations: ActiveMigrations, + convertNamespaceTypes: boolean ) { - const minVersion = propVersion(doc, prop); - const minReferenceVersion = doc.coreMigrationVersion || '0.0.0'; + const minMigrationVersion = propVersion(doc, prop); + const minCoreMigrationVersion = doc.coreMigrationVersion || '0.0.0'; const { transforms } = migrations[prop]; - return minVersion - ? transforms.filter(({ version, transformType }) => - transformType === 'reference' - ? Semver.gt(version, minReferenceVersion) - : Semver.gt(version, minVersion) - ) - : transforms; + + return transforms + .filter( + ({ transformType }) => + convertNamespaceTypes || !['convert', 'reference'].includes(transformType) + ) + .filter( + ({ transformType, version }) => + !minMigrationVersion || + Semver.gt( + version, + transformType === 'reference' ? minCoreMigrationVersion : minMigrationVersion + ) + ); } /** @@ -429,9 +503,10 @@ function updateMigrationVersion( version: string ) { assertNoDowngrades(doc, migrationVersion, prop, version); - const docVersion = propVersion(doc, prop) || '0.0.0'; - const maxVersion = Semver.gt(docVersion, version) ? docVersion : version; - return { ...(doc.migrationVersion || migrationVersion), [prop]: maxVersion }; + return { + ...(doc.migrationVersion || migrationVersion), + [prop]: maxVersion(propVersion(doc, prop), version) ?? '0.0.0', + }; } /** diff --git a/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/internal_transforms.ts b/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/internal_transforms.ts index d94865f23677b..796d6b2b161f6 100644 --- a/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/internal_transforms.ts +++ b/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/internal_transforms.ts @@ -16,7 +16,7 @@ import { LEGACY_URL_ALIAS_TYPE, LegacyUrlAlias, } from '@kbn/core-saved-objects-base-server-internal'; -import type { Transform } from './types'; +import { type Transform, TransformType } from './types'; /** * Returns all applicable conversion transforms for a given object type. @@ -30,7 +30,7 @@ export function getConversionTransforms(type: SavedObjectsType): Transform[] { { version: convertToMultiNamespaceTypeVersion, transform: convertNamespaceType, - transformType: 'convert', + transformType: TransformType.Convert, }, ]; } @@ -68,7 +68,7 @@ export function getReferenceTransforms(typeRegistry: ISavedObjectTypeRegistry): } return { transformedDoc: doc, additionalDocs: [] }; }, - transformType: 'reference', + transformType: TransformType.Reference, })); } diff --git a/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/types.ts b/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/types.ts index 3c9c836923caa..f22a010bdb0e8 100644 --- a/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/types.ts +++ b/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/types.ts @@ -19,10 +19,8 @@ export interface ActiveMigrations { * Structure containing all the required info to perform a type's conversion */ export interface TypeConversion { - /** Derived from `migrate` transforms and `convert` transforms */ - latestMigrationVersion?: string; - /** Derived from `reference` transforms */ - latestCoreMigrationVersion?: string; + /** Derived from the related transforms */ + latestVersion: Record; /** List of transforms registered for the type **/ transforms: Transform[]; } @@ -50,7 +48,11 @@ export interface Transform { * * `reference` - These transforms are defined by core and added by consumers using the type registry; they are applied to all object * types based on their `coreMigrationVersion` field. These are applied during index migrations, NOT document migrations. */ -export type TransformType = 'migrate' | 'convert' | 'reference'; +export enum TransformType { + Migrate = 'migrate', + Convert = 'convert', + Reference = 'reference', +} /** * Transformation function for a {@link Transform} diff --git a/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/utils.ts b/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/utils.ts index a6a78a2c6baa8..3c2b8d83652a9 100644 --- a/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/utils.ts +++ b/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/utils.ts @@ -15,7 +15,7 @@ import { import { Logger } from '@kbn/logging'; import { MigrationLogger } from '../core/migration_logger'; import { TransformSavedObjectDocumentError } from '../core/transform_saved_object_document_error'; -import type { Transform, TransformFn } from './types'; +import { type Transform, type TransformFn, TransformType } from './types'; /** * If a specific transform function fails, this tacks on a bit of information @@ -64,15 +64,26 @@ export function transformComparator(a: Transform, b: Transform) { if (semver !== 0) { return semver; } else if (a.transformType !== b.transformType) { - if (a.transformType === 'migrate') { + if (a.transformType === TransformType.Migrate) { return 1; - } else if (b.transformType === 'migrate') { + } else if (b.transformType === TransformType.Migrate) { return -1; - } else if (a.transformType === 'convert') { + } else if (a.transformType === TransformType.Convert) { return 1; - } else if (b.transformType === 'convert') { + } else if (b.transformType === TransformType.Convert) { return -1; } } return 0; } + +export function maxVersion(a?: string, b?: string) { + if (!a) { + return b; + } + if (!b) { + return a; + } + + return Semver.gt(a, b) ? a : b; +} diff --git a/packages/kbn-cell-actions/src/components/cell_actions.tsx b/packages/kbn-cell-actions/src/components/cell_actions.tsx index 8dd6f875f19e3..013fc372fcd9e 100644 --- a/packages/kbn-cell-actions/src/components/cell_actions.tsx +++ b/packages/kbn-cell-actions/src/components/cell_actions.tsx @@ -7,6 +7,7 @@ */ import React, { useMemo, useRef } from 'react'; +import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import { InlineActions } from './inline_actions'; import { HoverActionsPopover } from './hover_actions_popover'; import { CellActionsMode, type CellActionsProps, type CellActionExecutionContext } from '../types'; @@ -18,7 +19,9 @@ export const CellActions: React.FC = ({ mode, showActionTooltips = true, visibleCellActions = 3, + disabledActions = [], metadata, + className, }) => { const extraContentNodeRef = useRef(null); const nodeRef = useRef(null); @@ -35,14 +38,14 @@ export const CellActions: React.FC = ({ ); const dataTestSubj = `cellActions-renderContent-${field.name}`; - if (mode === CellActionsMode.HOVER) { return ( -
+
{children} @@ -53,14 +56,23 @@ export const CellActions: React.FC = ({ } return ( -
- {children} - -
-
+ + {children} + + +
+ + ); }; diff --git a/packages/kbn-cell-actions/src/components/extra_actions_popover.tsx b/packages/kbn-cell-actions/src/components/extra_actions_popover.tsx index 4ed1c0d629dcd..c8dd8f5f40a80 100644 --- a/packages/kbn-cell-actions/src/components/extra_actions_popover.tsx +++ b/packages/kbn-cell-actions/src/components/extra_actions_popover.tsx @@ -111,6 +111,7 @@ const ExtraActionsPopOverContent: React.FC = ({ key={action.id} icon={action.getIconType(actionContext)} aria-label={action.getDisplayName(actionContext)} + data-test-subj={`actionItem-${action.id}`} onClick={() => { closePopOver(); action.execute(actionContext); diff --git a/packages/kbn-cell-actions/src/components/hover_actions_popover.test.tsx b/packages/kbn-cell-actions/src/components/hover_actions_popover.test.tsx index 8326b4a70f366..7c513d2eb8515 100644 --- a/packages/kbn-cell-actions/src/components/hover_actions_popover.test.tsx +++ b/packages/kbn-cell-actions/src/components/hover_actions_popover.test.tsx @@ -8,12 +8,16 @@ import { act, fireEvent, render } from '@testing-library/react'; import React from 'react'; -import { makeAction, makeActionContext } from '../mocks/helpers'; +import { CellActionsProvider } from '../context'; +import { makeAction } from '../mocks/helpers'; +import { CellActionExecutionContext } from '../types'; import { HoverActionsPopover } from './hover_actions_popover'; -import { CellActionsProvider } from '../context/cell_actions_context'; describe('HoverActionsPopover', () => { - const actionContext = makeActionContext(); + const actionContext = { + trigger: { id: 'triggerId' }, + field: { name: 'fieldName' }, + } as CellActionExecutionContext; const TestComponent = () => ; jest.useFakeTimers(); @@ -22,6 +26,7 @@ describe('HoverActionsPopover', () => { const { queryByTestId } = render( { const { queryByLabelText, getByTestId } = render( { const { queryByLabelText, getByTestId } = render( { const { getByTestId } = render( { const { getByTestId, getByLabelText } = render( { const { getByTestId, queryByLabelText } = render( = ({ @@ -47,12 +48,13 @@ export const HoverActionsPopover: React.FC = ({ visibleCellActions, actionContext, showActionTooltips, + disabledActions, }) => { const contentRef = useRef(null); const [isExtraActionsPopoverOpen, setIsExtraActionsPopoverOpen] = useState(false); const [showHoverContent, setShowHoverContent] = useState(false); - const [{ value: actions }, loadActions] = useLoadActionsFn(); + const [{ value: actions }, loadActions] = useLoadActionsFn({ disabledActions }); const { visibleActions, extraActions } = useMemo( () => partitionActions(actions ?? [], visibleCellActions), diff --git a/packages/kbn-cell-actions/src/components/inline_actions.test.tsx b/packages/kbn-cell-actions/src/components/inline_actions.test.tsx index 91733929e8b6a..2c3423c021e65 100644 --- a/packages/kbn-cell-actions/src/components/inline_actions.test.tsx +++ b/packages/kbn-cell-actions/src/components/inline_actions.test.tsx @@ -8,19 +8,20 @@ import { act, render } from '@testing-library/react'; import React from 'react'; -import { makeAction, makeActionContext } from '../mocks/helpers'; +import { makeAction } from '../mocks/helpers'; import { InlineActions } from './inline_actions'; -import { CellActionsProvider } from '../context/cell_actions_context'; +import { CellActionExecutionContext } from '../types'; +import { CellActionsProvider } from '../context'; describe('InlineActions', () => { - const actionContext = makeActionContext(); - + const actionContext = { trigger: { id: 'triggerId' } } as CellActionExecutionContext; it('renders', async () => { const getActionsPromise = Promise.resolve([]); const getActions = () => getActionsPromise; const { queryByTestId } = render( { const { queryAllByRole } = render( = ({ actionContext, showActionTooltips, visibleCellActions, + disabledActions, }) => { - const { value: allActions } = useLoadActions(actionContext); - const { extraActions, visibleActions } = usePartitionActions( - allActions ?? [], - visibleCellActions - ); + const { value: actions } = useLoadActions(actionContext, { disabledActions }); + const { extraActions, visibleActions } = usePartitionActions(actions ?? [], visibleCellActions); + const [isPopoverOpen, setIsPopoverOpen] = useState(false); const togglePopOver = useCallback(() => setIsPopoverOpen((isOpen) => !isOpen), []); const closePopOver = useCallback(() => setIsPopoverOpen(false), []); @@ -39,24 +40,34 @@ export const InlineActions: React.FC = ({ ); return ( - + {visibleActions.map((action, index) => ( - + + + ))} {extraActions.length > 0 ? ( - + + + ) : null} - + ); }; diff --git a/packages/kbn-cell-actions/src/hooks/use_data_grid_column_cell_actions.tsx b/packages/kbn-cell-actions/src/hooks/use_data_grid_column_cell_actions.tsx index f8ccabd1bcd41..0c78561909fc0 100644 --- a/packages/kbn-cell-actions/src/hooks/use_data_grid_column_cell_actions.tsx +++ b/packages/kbn-cell-actions/src/hooks/use_data_grid_column_cell_actions.tsx @@ -25,13 +25,14 @@ interface BulkField extends Pick { } export interface UseDataGridColumnsCellActionsProps - extends Pick { + extends Pick { fields: BulkField[]; } export const useDataGridColumnsCellActions = ({ fields, triggerId, metadata, + disabledActions = [], }: UseDataGridColumnsCellActionsProps): EuiDataGridColumnCellAction[][] => { const bulkContexts: CellActionCompatibilityContext[] = useMemo( () => @@ -43,7 +44,7 @@ export const useDataGridColumnsCellActions = ({ [fields, triggerId, metadata] ); - const { loading, value: columnsActions } = useBulkLoadActions(bulkContexts); + const { loading, value: columnsActions } = useBulkLoadActions(bulkContexts, { disabledActions }); const columnsCellActions = useMemo(() => { if (loading) { diff --git a/packages/kbn-cell-actions/src/hooks/use_load_actions.test.ts b/packages/kbn-cell-actions/src/hooks/use_load_actions.test.ts index deff7dd9c9d88..e9612e6ffa26d 100644 --- a/packages/kbn-cell-actions/src/hooks/use_load_actions.test.ts +++ b/packages/kbn-cell-actions/src/hooks/use_load_actions.test.ts @@ -11,7 +11,7 @@ import { makeAction, makeActionContext } from '../mocks/helpers'; import { useBulkLoadActions, useLoadActions, useLoadActionsFn } from './use_load_actions'; const action = makeAction('action-1', 'icon', 1); -const mockGetActions = jest.fn(async () => [action]); +const mockGetActions = jest.fn(); jest.mock('../context/cell_actions_context', () => ({ useCellActionsContext: () => ({ getActions: mockGetActions }), })); @@ -21,6 +21,7 @@ describe('loadActions hooks', () => { beforeEach(() => { jest.clearAllMocks(); + mockGetActions.mockResolvedValue([action]); }); describe('useLoadActions', () => { it('should load actions when called', async () => { @@ -50,6 +51,20 @@ describe('loadActions hooks', () => { expect(result.error?.message).toEqual(message); }); + + it('filters out disabled actions', async () => { + const actionEnabled = makeAction('action-enabled'); + const actionDisabled = makeAction('action-disabled'); + mockGetActions.mockResolvedValue([actionEnabled, actionDisabled]); + + const { result, waitForNextUpdate } = renderHook(() => + useLoadActions(actionContext, { disabledActions: [actionDisabled.id] }) + ); + + await waitForNextUpdate(); + + expect(result.current.value).toEqual([actionEnabled]); + }); }); describe('useLoadActionsFn', () => { @@ -94,6 +109,25 @@ describe('loadActions hooks', () => { expect(result.error?.message).toEqual(message); }); + + it('filters out disabled actions', async () => { + const actionEnabled = makeAction('action-enabled'); + const actionDisabled = makeAction('action-disabled'); + mockGetActions.mockResolvedValue([actionEnabled, actionDisabled]); + + const { result, waitForNextUpdate } = renderHook(() => + useLoadActionsFn({ disabledActions: [actionDisabled.id] }) + ); + const [_, loadActions] = result.current; + + act(() => { + loadActions(actionContext); + }); + await waitForNextUpdate(); + + const [{ value: valueAfterUpdate }] = result.current; + expect(valueAfterUpdate).toEqual([actionEnabled]); + }); }); describe('useBulkLoadActions', () => { @@ -128,5 +162,19 @@ describe('loadActions hooks', () => { expect(result.error?.message).toEqual(message); }); + + it('filters out disabled actions', async () => { + const actionEnabled = makeAction('action-enabled'); + const actionDisabled = makeAction('action-disabled'); + mockGetActions.mockResolvedValue([actionEnabled, actionDisabled]); + + const { result, waitForNextUpdate } = renderHook(() => + useBulkLoadActions(actionContexts, { disabledActions: [actionDisabled.id] }) + ); + + await waitForNextUpdate(); + + expect(result.current.value).toEqual([[actionEnabled], [actionEnabled]]); + }); }); }); diff --git a/packages/kbn-cell-actions/src/hooks/use_load_actions.ts b/packages/kbn-cell-actions/src/hooks/use_load_actions.ts index 4d57ec92c623b..a1d84e9dd2ade 100644 --- a/packages/kbn-cell-actions/src/hooks/use_load_actions.ts +++ b/packages/kbn-cell-actions/src/hooks/use_load_actions.ts @@ -6,6 +6,7 @@ * Side Public License, v 1. */ +import { useMemo } from 'react'; import useAsync from 'react-use/lib/useAsync'; import useAsyncFn, { type AsyncState } from 'react-use/lib/useAsyncFn'; import { useCellActionsContext } from '../context/cell_actions_context'; @@ -22,34 +23,57 @@ const useThrowError = (error?: Error) => { /** * Performs the getActions async call and returns its value */ -export const useLoadActions = (context: CellActionCompatibilityContext): AsyncActions => { +export const useLoadActions = ( + context: CellActionCompatibilityContext, + options: LoadActionsOptions = {} +): AsyncActions => { const { getActions } = useCellActionsContext(); - const { error, ...actionsState } = useAsync(() => getActions(context), []); + const { error, value, loading } = useAsync(() => getActions(context), []); + const filteredActions = useFilteredActions(value, options.disabledActions); useThrowError(error); - return actionsState; + return { value: filteredActions, loading }; }; /** * Returns a function to perform the getActions async call */ -export const useLoadActionsFn = (): [AsyncActions, GetActions] => { +export const useLoadActionsFn = (options: LoadActionsOptions = {}): [AsyncActions, GetActions] => { const { getActions } = useCellActionsContext(); - const [{ error, ...actionsState }, loadActions] = useAsyncFn(getActions, []); + const [{ error, value, loading }, loadActions] = useAsyncFn(getActions, []); + const filteredActions = useFilteredActions(value, options.disabledActions); useThrowError(error); - return [actionsState, loadActions]; + return [{ value: filteredActions, loading }, loadActions]; }; +interface LoadActionsOptions { + disabledActions?: string[]; +} + /** * Groups getActions calls for an array of contexts in one async bulk operation */ export const useBulkLoadActions = ( - contexts: CellActionCompatibilityContext[] + contexts: CellActionCompatibilityContext[], + options: LoadActionsOptions = {} ): AsyncActions => { const { getActions } = useCellActionsContext(); const { error, ...actionsState } = useAsync( - () => Promise.all(contexts.map((context) => getActions(context))), + () => + Promise.all( + contexts.map((context) => + getActions(context).then( + (actions) => filteredActions(actions, options.disabledActions) ?? [] + ) + ) + ), [] ); useThrowError(error); return actionsState; }; + +const useFilteredActions = (actions: CellAction[] | undefined, disabledActions?: string[]) => + useMemo(() => filteredActions(actions, disabledActions), [actions, disabledActions]); + +const filteredActions = (actions: CellAction[] | undefined, disabledActions: string[] = []) => + actions ? actions.filter(({ id }) => !disabledActions?.includes(id)) : undefined; diff --git a/packages/kbn-cell-actions/src/types.ts b/packages/kbn-cell-actions/src/types.ts index 978aed54b770a..aaf2f745f7f61 100644 --- a/packages/kbn-cell-actions/src/types.ts +++ b/packages/kbn-cell-actions/src/types.ts @@ -36,6 +36,14 @@ export interface CellActionField { * Example: 'My-Laptop' */ value: string | string[] | null | undefined; + /** + * When true the field supports aggregations. + * + * It defaults to false. + * + * You can verify if a field is aggregatable on kibana/management/kibana/dataViews. + */ + aggregatable?: boolean; } export enum CellActionsMode { @@ -69,14 +77,22 @@ export interface CellActionsProps { * It shows 'more actions' button when the number of actions is bigger than this parameter. */ visibleCellActions?: number; + /** + * List of Actions ids that shouldn't be displayed inside cell actions. + */ + disabledActions?: string[]; /** * Custom set of properties used by some actions. * An action might require a specific set of metadata properties to render. * This data is sent directly to actions. */ metadata?: Record; + + className?: string; } +type Metadata = Record | undefined; + export interface CellActionExecutionContext extends ActionExecutionContext { field: CellActionField; /** @@ -92,18 +108,19 @@ export interface CellActionExecutionContext extends ActionExecutionContext { /** * Extra configurations for actions. */ - metadata?: Record; + metadata?: Metadata; } -export interface CellActionCompatibilityContext extends ActionExecutionContext { +export interface CellActionCompatibilityContext + extends ActionExecutionContext { /** * The object containing the field name and type, needed for the compatibility check */ - field: Pick; + field: Pick; /** * Extra configurations for actions. */ - metadata?: Record; + metadata?: M; } export interface CellAction @@ -112,7 +129,7 @@ export interface CellAction; + isCompatible(context: CellActionCompatibilityContext): Promise; } export type GetActions = (context: CellActionCompatibilityContext) => Promise; diff --git a/packages/kbn-doc-links/src/get_doc_links.ts b/packages/kbn-doc-links/src/get_doc_links.ts index 845e5be7d8b7b..566cedce41a87 100644 --- a/packages/kbn-doc-links/src/get_doc_links.ts +++ b/packages/kbn-doc-links/src/get_doc_links.ts @@ -132,6 +132,7 @@ export const getDocLinks = ({ kibanaBranch }: GetDocLinkOptions): DocLinks => { connectorsMongoDB: `${ENTERPRISE_SEARCH_DOCS}connectors-mongodb.html`, connectorsMySQL: `${ENTERPRISE_SEARCH_DOCS}connectors-mysql.html`, connectorsWorkplaceSearch: `${ENTERPRISE_SEARCH_DOCS}connectors.html#connectors-workplace-search`, + crawlerExtractionRules: `${ENTERPRISE_SEARCH_DOCS}crawler-extraction-rules.html`, crawlerManaging: `${ENTERPRISE_SEARCH_DOCS}crawler-managing.html`, crawlerOverview: `${ENTERPRISE_SEARCH_DOCS}crawler.html`, deployTrainedModels: `${MACHINE_LEARNING_DOCS}ml-nlp-deploy-models.html`, diff --git a/packages/kbn-doc-links/src/types.ts b/packages/kbn-doc-links/src/types.ts index 6d2cc1e119594..d94665a5abadc 100644 --- a/packages/kbn-doc-links/src/types.ts +++ b/packages/kbn-doc-links/src/types.ts @@ -117,6 +117,7 @@ export interface DocLinks { readonly connectorsMongoDB: string; readonly connectorsMySQL: string; readonly connectorsWorkplaceSearch: string; + readonly crawlerExtractionRules: string; readonly crawlerManaging: string; readonly crawlerOverview: string; readonly deployTrainedModels: string; diff --git a/packages/kbn-generate/src/commands/codeowners_command.ts b/packages/kbn-generate/src/commands/codeowners_command.ts index ed3f51d5bc087..157624081d689 100644 --- a/packages/kbn-generate/src/commands/codeowners_command.ts +++ b/packages/kbn-generate/src/commands/codeowners_command.ts @@ -16,77 +16,63 @@ import type { GenerateCommand } from '../generate_command'; const REL = '.github/CODEOWNERS'; -const GENERATED_START = ` +const GENERATED_START = `#### +## Everything at the top of the codeowners file is auto generated based on the +## "owner" fields in the kibana.jsonc files at the root of each package. This +## file is automatically updated by CI or can be updated locally by running +## \`node scripts/generate codeowners\`. +#### + +`; +const GENERATED_END = ` #### -## Everything below this comment is automatically generated based on kibana.jsonc -## "owner" fields. This file is automatically updated by CI or can be updated locally -## by running \`node scripts/generate codeowners\`. +## Everything below this line overrides the default assignments for each package. +## Items lower in the file have higher precedence: +## https://help.github.com/articles/about-codeowners/ #### - `; -const GENERATED_TRAILER = ` +const ULTIMATE_PRIORITY_RULES = ` +#### +## These rules are always last so they take ultimate priority over everything else +#### -# Design (at the bottom for specificity of SASS files) **/*.scss @elastic/kibana-design - -# Changes to translation files should not ping code reviewers -x-pack/plugins/translations/translations `; -function normalizeDir(dirish: string): string { - const trim = dirish.trim(); - if (trim.startsWith('/')) { - return normalizeDir(trim.slice(1)); - } - - if (trim.endsWith('/')) { - return normalizeDir(trim.slice(0, -1)); - } - - return trim; -} - export const CodeownersCommand: GenerateCommand = { name: 'codeowners', description: 'Update the codeowners file based on the package manifest files', usage: 'node scripts/generate codeowners', async run({ log }) { const pkgs = getPackages(REPO_ROOT); - const coPath = Path.resolve(REPO_ROOT, REL); - const codeowners = await Fsp.readFile(coPath, 'utf8'); - let genStart: number | undefined = codeowners.indexOf(GENERATED_START); - if (genStart === -1) { - genStart = undefined; - log.warning(`${REL} doesn't include the expected start-marker for injecting generated text`); + const path = Path.resolve(REPO_ROOT, REL); + const oldCodeowners = await Fsp.readFile(path, 'utf8'); + let content = oldCodeowners; + + // strip the old generated output + const genEnd = content.indexOf(GENERATED_END); + if (genEnd !== -1) { + content = content.slice(genEnd + GENERATED_END.length); } - const pkgDirs = new Set(pkgs.map((pkg) => pkg.normalizedRepoRelativeDir)); - const lines = []; - - for (const line of codeowners.slice(0, genStart).split('\n')) { - if (line.startsWith('#') || !line.trim()) { - lines.push(line); - continue; - } - - const dir = normalizeDir(line.split('@')[0]); - if (!pkgDirs.has(dir)) { - lines.push(line); - } + // strip the old ultimate rules + const ultStart = content.indexOf(ULTIMATE_PRIORITY_RULES); + if (ultStart !== -1) { + content = content.slice(0, ultStart); } - const newCodeowners = `${lines.join('\n')}${GENERATED_START}${pkgs + const newCodeowners = `${GENERATED_START}${pkgs .map((pkg) => `${pkg.normalizedRepoRelativeDir} ${pkg.manifest.owner.join(' ')}`) - .join('\n')}${GENERATED_TRAILER}`; + .join('\n')}${GENERATED_END}${content}${ULTIMATE_PRIORITY_RULES}`; - if (codeowners === newCodeowners) { + if (newCodeowners === oldCodeowners) { log.success(`${REL} is already up-to-date`); return; } - await Fsp.writeFile(coPath, newCodeowners); + await Fsp.writeFile(path, newCodeowners); log.info(`${REL} updated`); }, }; diff --git a/packages/kbn-validate-next-docs-cli/README.md b/packages/kbn-validate-next-docs-cli/README.md new file mode 100644 index 0000000000000..53a61d2fb05ff --- /dev/null +++ b/packages/kbn-validate-next-docs-cli/README.md @@ -0,0 +1,5 @@ +# @kbn/validate-next-docs-cli + +Clone a bunch of repos needed to build the next-docs with the latest version of the changes in the repo. This is only used for validating changes in CI with full validation of all IDs. This isn't intended for local development (except for debugging). + +To build the docs locally run: `./scripts/dev_docs.sh` \ No newline at end of file diff --git a/packages/kbn-validate-next-docs-cli/config.ts b/packages/kbn-validate-next-docs-cli/config.ts new file mode 100644 index 0000000000000..541ee061cc302 --- /dev/null +++ b/packages/kbn-validate-next-docs-cli/config.ts @@ -0,0 +1,64 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 Fs from 'fs'; + +import { Repo } from './repos'; + +export interface Source { + type: string; + location: string; + subdirs?: string[]; +} + +export class Config { + path: string; + backupPath: string; + + constructor(private readonly repo: Repo) { + this.path = this.repo.resolve('config/content.js'); + this.backupPath = `${this.path}.backup`; + this.restore(); + } + + private read(): { content: { sources: Source[]; nav: unknown } } { + delete require.cache[this.path]; + return require(this.path); + } + + private restore() { + if (Fs.existsSync(this.backupPath)) { + Fs.renameSync(this.backupPath, this.path); + } + } + + getSources() { + return this.read().content.sources; + } + + setSources(sources: Source[]) { + this.restore(); + Fs.copyFileSync(this.path, this.backupPath); + + const current = this.read(); + + Fs.writeFileSync( + this.path, + `module.exports = ${JSON.stringify( + { + content: { + ...current.content, + sources, + }, + }, + null, + 2 + )}` + ); + } +} diff --git a/packages/kbn-validate-next-docs-cli/error.ts b/packages/kbn-validate-next-docs-cli/error.ts new file mode 100644 index 0000000000000..a42af96f85f47 --- /dev/null +++ b/packages/kbn-validate-next-docs-cli/error.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 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 { createFailError } from '@kbn/dev-cli-errors'; + +export function quietFail(msg: string): never { + throw createFailError( + `${msg}${ + process.env.CI + ? ` (in order to avoid potential info leaks, we've hidden the logging output. Please run this command locally with --debug to get logging output)` + : '' + }` + ); +} diff --git a/packages/kbn-validate-next-docs-cli/jest.config.js b/packages/kbn-validate-next-docs-cli/jest.config.js new file mode 100644 index 0000000000000..f9b23ca4f8d52 --- /dev/null +++ b/packages/kbn-validate-next-docs-cli/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/jest_node', + rootDir: '../..', + roots: ['/packages/kbn-validate-next-docs-cli'], +}; diff --git a/packages/kbn-validate-next-docs-cli/kibana.jsonc b/packages/kbn-validate-next-docs-cli/kibana.jsonc new file mode 100644 index 0000000000000..5a6ffafe185bf --- /dev/null +++ b/packages/kbn-validate-next-docs-cli/kibana.jsonc @@ -0,0 +1,6 @@ +{ + "type": "shared-common", + "id": "@kbn/validate-next-docs-cli", + "owner": "@elastic/kibana-operations", + "devOnly": true +} diff --git a/packages/kbn-validate-next-docs-cli/package.json b/packages/kbn-validate-next-docs-cli/package.json new file mode 100644 index 0000000000000..ec6f7743d00ac --- /dev/null +++ b/packages/kbn-validate-next-docs-cli/package.json @@ -0,0 +1,7 @@ +{ + "name": "@kbn/validate-next-docs-cli", + "private": true, + "version": "1.0.0", + "license": "SSPL-1.0 OR Elastic License 2.0", + "main": "./validate_next_docs_cli" +} \ No newline at end of file diff --git a/packages/kbn-validate-next-docs-cli/repos.ts b/packages/kbn-validate-next-docs-cli/repos.ts new file mode 100644 index 0000000000000..63f16abc369b1 --- /dev/null +++ b/packages/kbn-validate-next-docs-cli/repos.ts @@ -0,0 +1,175 @@ +/* + * Copyright 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 Fs from 'fs'; +import Os from 'os'; +import Path from 'path'; +import Rl from 'readline'; + +import Chalk from 'chalk'; +import execa from 'execa'; +import { ToolingLog } from '@kbn/tooling-log'; + +import { quietFail } from './error'; + +function lines(read: NodeJS.ReadableStream) { + return Rl.createInterface({ + input: read, + crlfDelay: Infinity, + }); +} + +function getGithubBase(log: ToolingLog) { + try { + const originUrl = execa.sync('git', ['remote', 'get-url', 'origin'], { + encoding: 'utf8', + }).stdout; + + if (originUrl.startsWith('git@')) { + log.warning('using ssh urls for Github repos'); + return `git@github.com:`; + } + } catch { + // noop + } + + if (process.env.GITHUB_TOKEN) { + log.warning('using https urls for Github repos (with token)'); + return `https://token:${process.env.GITHUB_TOKEN}@github.com/`; + } + + log.warning('using https urls for Github repos'); + return `https://github.com/`; +} + +export class Repo { + constructor( + private readonly log: ToolingLog, + private readonly name: string, + private readonly dir: string, + private readonly githubBase: string + ) {} + + resolve(...segs: string[]) { + return Path.resolve(this.dir, ...segs); + } + + exists() { + if (!Fs.existsSync(this.dir)) { + return false; + } + + if (!Fs.statSync(this.dir).isDirectory()) { + throw new Error(`[${this.name}] directory exists but it's not a directory like it should be`); + } + + return true; + } + + async run(cmd: string, args: string[], opts: { desc: string; showOutput?: boolean }) { + try { + if (!opts.showOutput) { + await execa(cmd, args, { + cwd: this.dir, + maxBuffer: Infinity, + }); + return; + } + + await this.log.indent(4, async () => { + const proc = execa(cmd, args, { + cwd: this.dir, + stdio: ['ignore', 'pipe', 'pipe'], + }); + + await Promise.all([ + (async () => { + for await (const line of lines(proc.stdout!)) { + this.log.write(Chalk.dim('out '), line); + } + })(), + (async () => { + for await (const line of lines(proc.stderr!)) { + this.log.write(Chalk.red('err '), line); + } + })(), + new Promise((resolve, reject) => { + proc.once('exit', resolve).once('exit', reject); + }), + ]); + }); + } catch (error) { + this.log.debug( + `Failed to run [${opts.desc}] in [${this.name}]`, + opts.showOutput ? error : undefined + ); + + throw quietFail(`${this.name}: ${opts.desc} failed`); + } + } + + async update() { + try { + this.log.info('updating', this.name); + await this.run('git', ['reset', '--hard'], { desc: 'git reset --hard' }); + await this.run( + 'git', + [ + 'clean', + '-fdx', + ...(this.name === 'elastic/docs.elastic.dev' + ? ['-e', '/.docsmobile', '-e', '/node_modules'] + : []), + ], + { desc: 'git clean -fdx' } + ); + await this.run('git', ['pull'], { desc: 'git pull' }); + } catch { + quietFail(`failed to update ${this.name}`); + } + } + + async clone() { + try { + this.log.info('cloning', this.name); + Fs.mkdirSync(this.dir, { recursive: true }); + const depth = process.env.CI ? ['--depth', '1'] : []; + await this.run('git', ['clone', ...depth, `${this.githubBase}${this.name}.git`, '.'], { + desc: 'git clone ...', + }); + } catch { + quietFail(`Failed to clone ${this.name}`); + } + } +} + +export class Repos { + githubBase: string; + repoDir = Path.resolve(Os.userInfo().homedir, '.cache/next-docs/repos'); + + constructor(private readonly log: ToolingLog) { + this.githubBase = getGithubBase(this.log); + } + + async init(repoName: string) { + const repo = new Repo( + this.log, + repoName, + Path.resolve(this.repoDir, repoName), + this.githubBase + ); + + if (repo.exists()) { + await repo.update(); + } else { + await repo.clone(); + } + + return repo; + } +} diff --git a/packages/kbn-validate-next-docs-cli/tsconfig.json b/packages/kbn-validate-next-docs-cli/tsconfig.json new file mode 100644 index 0000000000000..4c04ba2180927 --- /dev/null +++ b/packages/kbn-validate-next-docs-cli/tsconfig.json @@ -0,0 +1,22 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types", + "types": [ + "jest", + "node" + ] + }, + "include": [ + "**/*.ts", + ], + "exclude": [ + "target/**/*" + ], + "kbn_references": [ + "@kbn/dev-cli-errors", + "@kbn/tooling-log", + "@kbn/dev-cli-runner", + "@kbn/repo-info", + ] +} diff --git a/packages/kbn-validate-next-docs-cli/validate_next_docs_cli.ts b/packages/kbn-validate-next-docs-cli/validate_next_docs_cli.ts new file mode 100644 index 0000000000000..9cfca8d442fd6 --- /dev/null +++ b/packages/kbn-validate-next-docs-cli/validate_next_docs_cli.ts @@ -0,0 +1,84 @@ +/* + * Copyright 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 { run } from '@kbn/dev-cli-runner'; +import { createFailError } from '@kbn/dev-cli-errors'; +import { REPO_ROOT } from '@kbn/repo-info'; + +import { Repos } from './repos'; +import { Config, Source } from './config'; +import { quietFail } from './error'; + +run( + async ({ log, flagsReader }) => { + const cloneOnly = flagsReader.boolean('clone-only'); + + const repos = new Repos(log); + const docsRepo = await repos.init('elastic/docs.elastic.dev'); + const contentConfig = new Config(docsRepo); + const sources = contentConfig.getSources().filter((s) => s.location !== 'elastic/kibana'); + + if (sources.some((s) => s.type !== 'github')) { + throw createFailError( + 'expected all content.js sources from docs.elastic.dev to have "type: github"' + ); + } + + const localCloneSources = await Promise.all( + sources.map(async (source): Promise => { + const repo = await repos.init(source.location); + + return { + type: 'file', + location: repo.resolve(), + }; + }) + ); + + if (cloneOnly) { + log.success('cloned repos'); + return; + } + + log.info('[docs.elastic.dev] updated sources to point to local repos'); + contentConfig.setSources([ + ...localCloneSources, + { + type: 'file', + location: REPO_ROOT, + }, + ]); + + const showOutput = flagsReader.boolean('debug') || flagsReader.boolean('verbose'); + try { + log.info('[docs.elastic.dev] installing deps with yarn'); + await docsRepo.run('yarn', [], { desc: 'yarn install', showOutput }); + + log.info('[docs.elastic.dev] initializing docsmobile'); + await docsRepo.run('yarn', ['docsmobile', 'init'], { + desc: 'yarn docsmobile init', + showOutput, + }); + + log.info('[docs.elastic.dev] building'); + await docsRepo.run('yarn', ['build'], { desc: 'yarn build', showOutput }); + } catch { + quietFail(`failed to build docs`); + } + + log.success('docs built successfully'); + }, + { + flags: { + boolean: ['clone-only'], + help: ` + --clone-only Simply clone the repos, used to populate the worker images + `, + }, + } +); diff --git a/scripts/validate_next_docs.js b/scripts/validate_next_docs.js new file mode 100644 index 0000000000000..b53e62842e70f --- /dev/null +++ b/scripts/validate_next_docs.js @@ -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. + */ + +require('../src/setup_node_env'); +require('@kbn/validate-next-docs-cli'); diff --git a/src/core/server/integration_tests/saved_objects/jest.integration.config.js b/src/core/server/integration_tests/saved_objects/jest.integration.config.js index 9f20cc58db7e9..e0713af701ea3 100644 --- a/src/core/server/integration_tests/saved_objects/jest.integration.config.js +++ b/src/core/server/integration_tests/saved_objects/jest.integration.config.js @@ -13,7 +13,11 @@ module.exports = { // see https://github.com/elastic/kibana/pull/130255/ preset: '@kbn/test/jest_integration', rootDir: '../../../../..', - roots: ['/src/core/server/integration_tests/saved_objects'], + roots: [ + '/src/core/server/integration_tests/saved_objects/routes', + '/src/core/server/integration_tests/saved_objects/service', + '/src/core/server/integration_tests/saved_objects/validation', + ], // must override to match all test given there is no `integration_tests` subfolder testMatch: ['**/*.test.{js,mjs,ts,tsx}'], }; diff --git a/src/core/server/integration_tests/saved_objects/migrations/.gitignore b/src/core/server/integration_tests/saved_objects/migrations/group1/.gitignore similarity index 100% rename from src/core/server/integration_tests/saved_objects/migrations/.gitignore rename to src/core/server/integration_tests/saved_objects/migrations/group1/.gitignore diff --git a/src/core/server/integration_tests/saved_objects/migrations/7.7.2_xpack_100k.test.ts b/src/core/server/integration_tests/saved_objects/migrations/group1/7.7.2_xpack_100k.test.ts similarity index 97% rename from src/core/server/integration_tests/saved_objects/migrations/7.7.2_xpack_100k.test.ts rename to src/core/server/integration_tests/saved_objects/migrations/group1/7.7.2_xpack_100k.test.ts index 4922223015904..b8010eacbbae0 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/7.7.2_xpack_100k.test.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/group1/7.7.2_xpack_100k.test.ts @@ -111,7 +111,7 @@ describe('migration from 7.7.2-xpack with 100k objects', () => { await removeLogFile(); await startServers({ oss: false, - dataArchive: path.join(__dirname, 'archives', '7.7.2_xpack_100k_obj.zip'), + dataArchive: path.join(__dirname, '..', 'archives', '7.7.2_xpack_100k_obj.zip'), }); }); diff --git a/src/core/server/integration_tests/saved_objects/migrations/7_13_0_failed_action_tasks.test.ts b/src/core/server/integration_tests/saved_objects/migrations/group1/7_13_0_failed_action_tasks.test.ts similarity index 97% rename from src/core/server/integration_tests/saved_objects/migrations/7_13_0_failed_action_tasks.test.ts rename to src/core/server/integration_tests/saved_objects/migrations/group1/7_13_0_failed_action_tasks.test.ts index 3f7888a4932e9..1538e9cfe8ef4 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/7_13_0_failed_action_tasks.test.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/group1/7_13_0_failed_action_tasks.test.ts @@ -38,7 +38,7 @@ describe('migration from 7.13 to 7.14+ with many failed action_tasks', () => { settings: { es: { license: 'basic', - dataArchive: Path.join(__dirname, 'archives', '7.13_1.5k_failed_action_tasks.zip'), + dataArchive: Path.join(__dirname, '..', 'archives', '7.13_1.5k_failed_action_tasks.zip'), }, }, })); diff --git a/src/core/server/integration_tests/saved_objects/migrations/7_13_0_transform_failures.test.ts b/src/core/server/integration_tests/saved_objects/migrations/group1/7_13_0_transform_failures.test.ts similarity index 99% rename from src/core/server/integration_tests/saved_objects/migrations/7_13_0_transform_failures.test.ts rename to src/core/server/integration_tests/saved_objects/migrations/group1/7_13_0_transform_failures.test.ts index 3419739408d19..065a4a4241d07 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/7_13_0_transform_failures.test.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/group1/7_13_0_transform_failures.test.ts @@ -15,7 +15,7 @@ import { getEnvOptions } from '@kbn/config-mocks'; import type { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; import { Root } from '@kbn/core-root-server-internal'; import { SearchTotalHits } from '@elastic/elasticsearch/lib/api/types'; -import { getMigrationDocLink } from './test_utils'; +import { getMigrationDocLink } from '../test_utils'; import { createRootWithCorePlugins, TestElasticsearchUtils, @@ -181,6 +181,7 @@ function createTestServers() { // dataArchive: Path.join( __dirname, + '..', 'archives', '7_13_corrupt_and_transform_failures_docs.zip' ), diff --git a/src/core/server/integration_tests/saved_objects/migrations/7_13_0_unknown_types.test.ts b/src/core/server/integration_tests/saved_objects/migrations/group1/7_13_0_unknown_types.test.ts similarity index 98% rename from src/core/server/integration_tests/saved_objects/migrations/7_13_0_unknown_types.test.ts rename to src/core/server/integration_tests/saved_objects/migrations/group1/7_13_0_unknown_types.test.ts index 2e19a1bf401cc..6b06337a367db 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/7_13_0_unknown_types.test.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/group1/7_13_0_unknown_types.test.ts @@ -45,7 +45,7 @@ describe('migration v2', () => { // dataset contains 2 type of unknown docs // `foo` documents // `space` documents (to mimic a migration with disabled plugins) - dataArchive: Path.join(__dirname, 'archives', '7.13.0_with_unknown_so.zip'), + dataArchive: Path.join(__dirname, '..', 'archives', '7.13.0_with_unknown_so.zip'), }, }, })); diff --git a/src/core/server/integration_tests/saved_objects/migrations/group1/jest.integration.config.js b/src/core/server/integration_tests/saved_objects/migrations/group1/jest.integration.config.js new file mode 100644 index 0000000000000..e77543848a0f8 --- /dev/null +++ b/src/core/server/integration_tests/saved_objects/migrations/group1/jest.integration.config.js @@ -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 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 = { + // TODO replace the line below with + // preset: '@kbn/test/jest_integration_node + // to do so, we must fix all integration tests first + // see https://github.com/elastic/kibana/pull/130255/ + preset: '@kbn/test/jest_integration', + rootDir: '../../../../../../..', + roots: ['/src/core/server/integration_tests/saved_objects/migrations/group1'], + // must override to match all test given there is no `integration_tests` subfolder + testMatch: ['**/*.test.{js,mjs,ts,tsx}'], +}; diff --git a/src/core/server/integration_tests/saved_objects/migrations/group2/.gitignore b/src/core/server/integration_tests/saved_objects/migrations/group2/.gitignore new file mode 100644 index 0000000000000..397b4a7624e35 --- /dev/null +++ b/src/core/server/integration_tests/saved_objects/migrations/group2/.gitignore @@ -0,0 +1 @@ +*.log diff --git a/src/core/server/integration_tests/saved_objects/migrations/batch_size_bytes.test.ts b/src/core/server/integration_tests/saved_objects/migrations/group2/batch_size_bytes.test.ts similarity index 97% rename from src/core/server/integration_tests/saved_objects/migrations/batch_size_bytes.test.ts rename to src/core/server/integration_tests/saved_objects/migrations/group2/batch_size_bytes.test.ts index e3e3b1dfe3631..f2296d41d905e 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/batch_size_bytes.test.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/group2/batch_size_bytes.test.ts @@ -70,7 +70,12 @@ describe('migration v2', () => { settings: { es: { license: 'basic', - dataArchive: Path.join(__dirname, 'archives', '7.14.0_xpack_sample_saved_objects.zip'), + dataArchive: Path.join( + __dirname, + '..', + 'archives', + '7.14.0_xpack_sample_saved_objects.zip' + ), esArgs: ['http.max_content_length=1715329b'], }, }, diff --git a/src/core/server/integration_tests/saved_objects/migrations/batch_size_bytes_exceeds_es_content_length.test.ts b/src/core/server/integration_tests/saved_objects/migrations/group2/batch_size_bytes_exceeds_es_content_length.test.ts similarity index 95% rename from src/core/server/integration_tests/saved_objects/migrations/batch_size_bytes_exceeds_es_content_length.test.ts rename to src/core/server/integration_tests/saved_objects/migrations/group2/batch_size_bytes_exceeds_es_content_length.test.ts index 9d9ed693723fe..26a26764c04b4 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/batch_size_bytes_exceeds_es_content_length.test.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/group2/batch_size_bytes_exceeds_es_content_length.test.ts @@ -39,7 +39,12 @@ describe('migration v2', () => { settings: { es: { license: 'basic', - dataArchive: Path.join(__dirname, 'archives', '7.14.0_xpack_sample_saved_objects.zip'), + dataArchive: Path.join( + __dirname, + '..', + 'archives', + '7.14.0_xpack_sample_saved_objects.zip' + ), esArgs: ['http.max_content_length=1mb'], }, }, diff --git a/src/core/server/integration_tests/saved_objects/migrations/check_registered_types.test.ts b/src/core/server/integration_tests/saved_objects/migrations/group2/check_registered_types.test.ts similarity index 100% rename from src/core/server/integration_tests/saved_objects/migrations/check_registered_types.test.ts rename to src/core/server/integration_tests/saved_objects/migrations/group2/check_registered_types.test.ts diff --git a/src/core/server/integration_tests/saved_objects/migrations/check_target_mappings.test.ts b/src/core/server/integration_tests/saved_objects/migrations/group2/check_target_mappings.test.ts similarity index 97% rename from src/core/server/integration_tests/saved_objects/migrations/check_target_mappings.test.ts rename to src/core/server/integration_tests/saved_objects/migrations/group2/check_target_mappings.test.ts index 38b8c00a701a1..19326c15e0f25 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/check_target_mappings.test.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/group2/check_target_mappings.test.ts @@ -19,7 +19,7 @@ import { createTestServers, type TestElasticsearchUtils, } from '@kbn/core-test-helpers-kbn-server'; -import { delay } from './test_utils'; +import { delay } from '../test_utils'; const logFilePath = Path.join(__dirname, 'check_target_mappings.log'); @@ -126,7 +126,7 @@ describe('migration v2 - CHECK_TARGET_MAPPINGS', () => { settings: { es: { license: 'basic', - dataArchive: Path.join(__dirname, 'archives', '8.4.0_with_sample_data_logs.zip'), + dataArchive: Path.join(__dirname, '..', 'archives', '8.4.0_with_sample_data_logs.zip'), }, }, }); diff --git a/src/core/server/integration_tests/saved_objects/migrations/cleanup.test.ts b/src/core/server/integration_tests/saved_objects/migrations/group2/cleanup.test.ts similarity index 96% rename from src/core/server/integration_tests/saved_objects/migrations/cleanup.test.ts rename to src/core/server/integration_tests/saved_objects/migrations/group2/cleanup.test.ts index 2a306fd73a2c8..8df491c36f4e3 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/cleanup.test.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/group2/cleanup.test.ts @@ -16,7 +16,7 @@ import { type TestElasticsearchUtils, } from '@kbn/core-test-helpers-kbn-server'; import { Root } from '@kbn/core-root-server-internal'; -import { getMigrationDocLink } from './test_utils'; +import { getMigrationDocLink } from '../test_utils'; const migrationDocLink = getMigrationDocLink().resolveMigrationFailures; const logFilePath = Path.join(__dirname, 'cleanup.log'); @@ -96,7 +96,7 @@ describe('migration v2', () => { // _seq_no: 0, // _primary_term: 1 // } - dataArchive: Path.join(__dirname, 'archives', '7.13.0_with_corrupted_so.zip'), + dataArchive: Path.join(__dirname, '..', 'archives', '7.13.0_with_corrupted_so.zip'), }, }, }); diff --git a/src/core/server/integration_tests/saved_objects/migrations/collects_corrupt_docs.test.ts b/src/core/server/integration_tests/saved_objects/migrations/group2/collects_corrupt_docs.test.ts similarity index 96% rename from src/core/server/integration_tests/saved_objects/migrations/collects_corrupt_docs.test.ts rename to src/core/server/integration_tests/saved_objects/migrations/group2/collects_corrupt_docs.test.ts index e5769644d8d43..15beb769de688 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/collects_corrupt_docs.test.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/group2/collects_corrupt_docs.test.ts @@ -15,7 +15,7 @@ import { type TestElasticsearchUtils, } from '@kbn/core-test-helpers-kbn-server'; import { Root } from '@kbn/core-root-server-internal'; -import { getMigrationDocLink } from './test_utils'; +import { getMigrationDocLink } from '../test_utils'; const migrationDocLink = getMigrationDocLink().resolveMigrationFailures; const logFilePath = Path.join(__dirname, 'collects_corrupt_docs.log'); @@ -56,7 +56,12 @@ describe('migration v2 with corrupt saved object documents', () => { // - foo:1 and foo:2 have correct values for their `number` property (13 and 42 respectively) // - foo:3 and foo:4 don't have the property, and will fail during the `7.14.0` registered migration // contains migrated index with 8.0 aliases to skip migration, but run outdated doc search - dataArchive: Path.join(__dirname, 'archives', '8.0.0_document_migration_failure.zip'), + dataArchive: Path.join( + __dirname, + '..', + 'archives', + '8.0.0_document_migration_failure.zip' + ), }, }, }); diff --git a/src/core/server/integration_tests/saved_objects/migrations/corrupt_outdated_docs.test.ts b/src/core/server/integration_tests/saved_objects/migrations/group2/corrupt_outdated_docs.test.ts similarity index 100% rename from src/core/server/integration_tests/saved_objects/migrations/corrupt_outdated_docs.test.ts rename to src/core/server/integration_tests/saved_objects/migrations/group2/corrupt_outdated_docs.test.ts diff --git a/src/core/server/integration_tests/saved_objects/migrations/group2/jest.integration.config.js b/src/core/server/integration_tests/saved_objects/migrations/group2/jest.integration.config.js new file mode 100644 index 0000000000000..84e90627bce6b --- /dev/null +++ b/src/core/server/integration_tests/saved_objects/migrations/group2/jest.integration.config.js @@ -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 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 = { + // TODO replace the line below with + // preset: '@kbn/test/jest_integration_node + // to do so, we must fix all integration tests first + // see https://github.com/elastic/kibana/pull/130255/ + preset: '@kbn/test/jest_integration', + rootDir: '../../../../../../..', + roots: ['/src/core/server/integration_tests/saved_objects/migrations/group2'], + // must override to match all test given there is no `integration_tests` subfolder + testMatch: ['**/*.test.{js,mjs,ts,tsx}'], +}; diff --git a/src/core/server/integration_tests/saved_objects/migrations/multiple_kibana_nodes.test.ts b/src/core/server/integration_tests/saved_objects/migrations/group2/multiple_kibana_nodes.test.ts similarity index 98% rename from src/core/server/integration_tests/saved_objects/migrations/multiple_kibana_nodes.test.ts rename to src/core/server/integration_tests/saved_objects/migrations/group2/multiple_kibana_nodes.test.ts index a947854e9249b..f4577c0379096 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/multiple_kibana_nodes.test.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/group2/multiple_kibana_nodes.test.ts @@ -154,7 +154,7 @@ describe('migration v2', () => { // { id: 'foo:2', type: 'foo', foo: { status: 'unmigrated' }, migrationVersion: { foo: '7.13.0' } }, // { id: 'foo:3', type: 'foo', foo: { status: 'unmigrated' }, migrationVersion: { foo: '7.13.0' } }, // ]; - dataArchive: Path.join(__dirname, 'archives', '7.13.0_concurrent_5k_foo.zip'), + dataArchive: Path.join(__dirname, '..', 'archives', '7.13.0_concurrent_5k_foo.zip'), }, }, }); diff --git a/src/core/server/integration_tests/saved_objects/migrations/outdated_docs.test.ts b/src/core/server/integration_tests/saved_objects/migrations/group2/outdated_docs.test.ts similarity index 93% rename from src/core/server/integration_tests/saved_objects/migrations/outdated_docs.test.ts rename to src/core/server/integration_tests/saved_objects/migrations/group2/outdated_docs.test.ts index ca5e21abe8dcc..119ee16e9cddc 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/outdated_docs.test.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/group2/outdated_docs.test.ts @@ -61,7 +61,12 @@ describe('migration v2', () => { // }, // }, // contains migrated index with 8.0 aliases to skip migration, but run outdated doc search - dataArchive: Path.join(__dirname, 'archives', '8.0.0_migrated_with_outdated_docs.zip'), + dataArchive: Path.join( + __dirname, + '..', + 'archives', + '8.0.0_migrated_with_outdated_docs.zip' + ), }, }, }); @@ -90,7 +95,7 @@ describe('migration v2', () => { expect(migratedDocs.length).toBe(1); const [doc] = migratedDocs; expect(doc._source.migrationVersion.foo).toBe('7.14.0'); - expect(doc._source.coreMigrationVersion).toBe(pkg.version); + expect(doc._source.coreMigrationVersion).toBe('8.0.0'); }); }); diff --git a/src/core/server/integration_tests/saved_objects/migrations/group3/.gitignore b/src/core/server/integration_tests/saved_objects/migrations/group3/.gitignore new file mode 100644 index 0000000000000..397b4a7624e35 --- /dev/null +++ b/src/core/server/integration_tests/saved_objects/migrations/group3/.gitignore @@ -0,0 +1 @@ +*.log diff --git a/src/core/server/integration_tests/saved_objects/migrations/actions/actions.test.ts b/src/core/server/integration_tests/saved_objects/migrations/group3/actions/actions.test.ts similarity index 99% rename from src/core/server/integration_tests/saved_objects/migrations/actions/actions.test.ts rename to src/core/server/integration_tests/saved_objects/migrations/group3/actions/actions.test.ts index 1b06c05cca727..7845ec72ab2ec 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/actions/actions.test.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/group3/actions/actions.test.ts @@ -50,7 +50,7 @@ const { startES } = createTestServers({ settings: { es: { license: 'basic', - dataArchive: Path.resolve(__dirname, '../archives/7.7.2_xpack_100k_obj.zip'), + dataArchive: Path.resolve(__dirname, '../../archives/7.7.2_xpack_100k_obj.zip'), esArgs: ['http.max_content_length=10Kb'], }, }, diff --git a/src/core/server/integration_tests/saved_objects/migrations/actions/es_errors.test.ts b/src/core/server/integration_tests/saved_objects/migrations/group3/actions/es_errors.test.ts similarity index 98% rename from src/core/server/integration_tests/saved_objects/migrations/actions/es_errors.test.ts rename to src/core/server/integration_tests/saved_objects/migrations/group3/actions/es_errors.test.ts index 21921b2b023fa..c172aa40312aa 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/actions/es_errors.test.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/group3/actions/es_errors.test.ts @@ -8,7 +8,7 @@ import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { InternalCoreStart } from '@kbn/core-lifecycle-server-internal'; import { Root } from '@kbn/core-root-server-internal'; -import type { ElasticsearchClient } from '../../../..'; +import type { ElasticsearchClient } from '../../../../..'; import { createRootWithCorePlugins, createTestServers, diff --git a/src/core/server/integration_tests/saved_objects/migrations/incompatible_cluster_routing_allocation.test.ts b/src/core/server/integration_tests/saved_objects/migrations/group3/incompatible_cluster_routing_allocation.test.ts similarity index 98% rename from src/core/server/integration_tests/saved_objects/migrations/incompatible_cluster_routing_allocation.test.ts rename to src/core/server/integration_tests/saved_objects/migrations/group3/incompatible_cluster_routing_allocation.test.ts index 6feac6ed90287..5ae1040072059 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/incompatible_cluster_routing_allocation.test.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/group3/incompatible_cluster_routing_allocation.test.ts @@ -17,7 +17,7 @@ import { import { Root } from '@kbn/core-root-server-internal'; import type { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; import { LogRecord } from '@kbn/logging'; -import { getDocVersion } from './test_utils'; +import { getDocVersion } from '../test_utils'; import { retryAsync } from '@kbn/core-saved-objects-migration-server-mocks'; const logFilePath = Path.join(__dirname, 'incompatible_cluster_routing_allocation.log'); @@ -35,6 +35,7 @@ const { startES } = createTestServers({ license: 'basic', dataArchive: Path.join( __dirname, + '..', 'archives', '8.0.0_v1_migrations_sample_data_saved_objects.zip' ), diff --git a/src/core/server/integration_tests/saved_objects/migrations/group3/jest.integration.config.js b/src/core/server/integration_tests/saved_objects/migrations/group3/jest.integration.config.js new file mode 100644 index 0000000000000..dd46703349568 --- /dev/null +++ b/src/core/server/integration_tests/saved_objects/migrations/group3/jest.integration.config.js @@ -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 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 = { + // TODO replace the line below with + // preset: '@kbn/test/jest_integration_node + // to do so, we must fix all integration tests first + // see https://github.com/elastic/kibana/pull/130255/ + preset: '@kbn/test/jest_integration', + rootDir: '../../../../../../..', + roots: ['/src/core/server/integration_tests/saved_objects/migrations/group3'], + // must override to match all test given there is no `integration_tests` subfolder + testMatch: ['**/*.test.{js,mjs,ts,tsx}'], +}; diff --git a/src/core/server/integration_tests/saved_objects/migrations/migration_from_older_v1.test.ts b/src/core/server/integration_tests/saved_objects/migrations/group3/migration_from_older_v1.test.ts similarity index 98% rename from src/core/server/integration_tests/saved_objects/migrations/migration_from_older_v1.test.ts rename to src/core/server/integration_tests/saved_objects/migrations/group3/migration_from_older_v1.test.ts index eae0fdc658a76..aa0d761999e95 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/migration_from_older_v1.test.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/group3/migration_from_older_v1.test.ts @@ -170,7 +170,7 @@ describe('migrating from 7.3.0-xpack which used v1 migrations', () => { await removeLogFile(); await startServers({ oss: false, - dataArchive: Path.join(__dirname, 'archives', '7.3.0_xpack_sample_saved_objects.zip'), + dataArchive: Path.join(__dirname, '..', 'archives', '7.3.0_xpack_sample_saved_objects.zip'), }); }); diff --git a/src/core/server/integration_tests/saved_objects/migrations/multiple_es_nodes.test.ts b/src/core/server/integration_tests/saved_objects/migrations/group3/multiple_es_nodes.test.ts similarity index 96% rename from src/core/server/integration_tests/saved_objects/migrations/multiple_es_nodes.test.ts rename to src/core/server/integration_tests/saved_objects/migrations/group3/multiple_es_nodes.test.ts index 12035a0e5eade..5cb4028eba2ca 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/multiple_es_nodes.test.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/group3/multiple_es_nodes.test.ts @@ -134,11 +134,11 @@ describe('migration v2', () => { // { id: 'foo:2', type: 'foo', foo: { status: 'not_migrated_2' } }, // { id: 'bar:2', type: 'bar', bar: { status: 'not_migrated_2' } }, // ]; - dataArchive: Path.join(__dirname, 'archives', '7.13.0_5k_so_node_01.zip'), + dataArchive: Path.join(__dirname, '..', 'archives', '7.13.0_5k_so_node_01.zip'), }, { name: 'node-02', - dataArchive: Path.join(__dirname, 'archives', '7.13.0_5k_so_node_02.zip'), + dataArchive: Path.join(__dirname, '..', 'archives', '7.13.0_5k_so_node_02.zip'), }, ], }, diff --git a/src/core/server/integration_tests/saved_objects/migrations/rewriting_id.test.ts b/src/core/server/integration_tests/saved_objects/migrations/group3/rewriting_id.test.ts similarity index 94% rename from src/core/server/integration_tests/saved_objects/migrations/rewriting_id.test.ts rename to src/core/server/integration_tests/saved_objects/migrations/group3/rewriting_id.test.ts index 66fd7bd5a6db0..ae90b81482f4c 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/rewriting_id.test.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/group3/rewriting_id.test.ts @@ -137,7 +137,12 @@ describe('migration v2', () => { // namespace: 'spacex', // }, // ]; - dataArchive: Path.join(__dirname, 'archives', '7.13.2_so_with_multiple_namespaces.zip'), + dataArchive: Path.join( + __dirname, + '..', + 'archives', + '7.13.2_so_with_multiple_namespaces.zip' + ), }, }, }); @@ -183,7 +188,7 @@ describe('migration v2', () => { references: [], namespaces: ['default'], migrationVersion: { foo: '8.0.0' }, - coreMigrationVersion: pkg.version, + coreMigrationVersion: '8.0.0', }, { id: `foo:${newFooId}`, @@ -193,7 +198,7 @@ describe('migration v2', () => { namespaces: ['spacex'], originId: '1', migrationVersion: { foo: '8.0.0' }, - coreMigrationVersion: pkg.version, + coreMigrationVersion: '8.0.0', }, { // new object for spacex:foo:1 @@ -208,7 +213,7 @@ describe('migration v2', () => { }, migrationVersion: { 'legacy-url-alias': '8.2.0' }, references: [], - coreMigrationVersion: pkg.version, + coreMigrationVersion: '8.0.0', }, { id: 'bar:1', @@ -217,7 +222,7 @@ describe('migration v2', () => { references: [{ type: 'foo', id: '1', name: 'Foo 1 default' }], namespaces: ['default'], migrationVersion: { bar: '8.0.0' }, - coreMigrationVersion: pkg.version, + coreMigrationVersion: '8.0.0', }, { id: `bar:${newBarId}`, @@ -227,7 +232,7 @@ describe('migration v2', () => { namespaces: ['spacex'], originId: '1', migrationVersion: { bar: '8.0.0' }, - coreMigrationVersion: pkg.version, + coreMigrationVersion: '8.0.0', }, { // new object for spacex:bar:1 @@ -242,7 +247,7 @@ describe('migration v2', () => { }, migrationVersion: { 'legacy-url-alias': '8.2.0' }, references: [], - coreMigrationVersion: pkg.version, + coreMigrationVersion: '8.0.0', }, ].sort(sortByTypeAndId) ); diff --git a/src/core/server/integration_tests/saved_objects/migrations/skip_migration.test.ts b/src/core/server/integration_tests/saved_objects/migrations/group3/skip_migration.test.ts similarity index 100% rename from src/core/server/integration_tests/saved_objects/migrations/skip_migration.test.ts rename to src/core/server/integration_tests/saved_objects/migrations/group3/skip_migration.test.ts diff --git a/src/core/server/integration_tests/saved_objects/migrations/skip_reindex.test.ts b/src/core/server/integration_tests/saved_objects/migrations/group3/skip_reindex.test.ts similarity index 99% rename from src/core/server/integration_tests/saved_objects/migrations/skip_reindex.test.ts rename to src/core/server/integration_tests/saved_objects/migrations/group3/skip_reindex.test.ts index 1699dbae46613..a6060b166335f 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/skip_reindex.test.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/group3/skip_reindex.test.ts @@ -16,7 +16,7 @@ import { createTestServers, type TestElasticsearchUtils, } from '@kbn/core-test-helpers-kbn-server'; -import { delay } from './test_utils'; +import { delay } from '../test_utils'; import { SemVer } from 'semver'; const logFilePath = Path.join(__dirname, 'skip_reindex.log'); diff --git a/src/core/server/integration_tests/saved_objects/migrations/type_registrations.test.ts b/src/core/server/integration_tests/saved_objects/migrations/group3/type_registrations.test.ts similarity index 100% rename from src/core/server/integration_tests/saved_objects/migrations/type_registrations.test.ts rename to src/core/server/integration_tests/saved_objects/migrations/group3/type_registrations.test.ts diff --git a/src/core/server/integration_tests/saved_objects/migrations/wait_for_migration_completion.test.ts b/src/core/server/integration_tests/saved_objects/migrations/group3/wait_for_migration_completion.test.ts similarity index 100% rename from src/core/server/integration_tests/saved_objects/migrations/wait_for_migration_completion.test.ts rename to src/core/server/integration_tests/saved_objects/migrations/group3/wait_for_migration_completion.test.ts diff --git a/src/plugins/console/public/lib/autocomplete_entities/autocomplete_entities.test.js b/src/plugins/console/public/lib/autocomplete_entities/autocomplete_entities.test.js index f856ef5750a17..f27b297bd0e0b 100644 --- a/src/plugins/console/public/lib/autocomplete_entities/autocomplete_entities.test.js +++ b/src/plugins/console/public/lib/autocomplete_entities/autocomplete_entities.test.js @@ -83,6 +83,7 @@ describe('Autocomplete entities', () => { }); expect(mapping.getMappings('index').sort(fc)).toEqual([]); + expect(httpMock.get).not.toHaveBeenCalled(); }); }); @@ -119,6 +120,90 @@ describe('Autocomplete entities', () => { expect(fields).toEqual([{ name: '@timestamp', type: 'date' }]); }); + test('caches mappings for wildcard requests', async () => { + httpMock.get.mockReturnValue( + Promise.resolve({ + mappings: { + 'my-index-01': { mappings: { properties: { '@timestamp': { type: 'date' } } } }, + 'my-index-02': { mappings: { properties: { name: { type: 'keyword' } } } }, + }, + }) + ); + + const autoCompleteContext = {}; + + mapping.getMappings('my-index*', [], autoCompleteContext); + + const fields = await autoCompleteContext.asyncResultsState.results; + + const expectedResult = [ + { + name: '@timestamp', + type: 'date', + }, + { + name: 'name', + type: 'keyword', + }, + ]; + + expect(fields).toEqual(expectedResult); + expect(mapping.getMappings('my-index*', [], autoCompleteContext)).toEqual(expectedResult); + }); + + test('returns mappings for data streams', () => { + dataStream.loadDataStreams({ + data_streams: [ + { name: 'test_index1', indices: [{ index_name: '.ds-index-1' }] }, + { + name: 'test_index3', + indices: [{ index_name: '.ds-index-3' }, { index_name: '.ds-index-4' }], + }, + ], + }); + mapping.loadMappings({ + '.ds-index-3': { + properties: { + first_name: { + type: 'string', + index: 'analyzed', + path: 'just_name', + fields: { + any_name: { type: 'string', index: 'analyzed' }, + }, + }, + last_name: { + type: 'string', + index: 'no', + fields: { + raw: { type: 'string', index: 'analyzed' }, + }, + }, + }, + }, + }); + + const result = mapping.getMappings('test_index3', []); + expect(result).toEqual([ + { + name: 'first_name', + type: 'string', + }, + { + name: 'any_name', + type: 'string', + }, + { + name: 'last_name', + type: 'string', + }, + { + name: 'last_name.raw', + type: 'string', + }, + ]); + }); + test('Multi fields 1.0 style', function () { mapping.loadMappings({ index: { @@ -377,11 +462,38 @@ describe('Autocomplete entities', () => { describe('Data streams', function () { test('data streams', function () { dataStream.loadDataStreams({ - data_streams: [{ name: 'test_index1' }, { name: 'test_index2' }, { name: 'test_index3' }], + data_streams: [ + { name: 'test_index1', indices: [{ index_name: '.ds-index-1' }] }, + { name: 'test_index2', indices: [{ index_name: '.ds-index-2' }] }, + { + name: 'test_index3', + indices: [{ index_name: '.ds-index-3' }, { index_name: '.ds-index-4' }], + }, + ], }); const expectedResult = ['test_index1', 'test_index2', 'test_index3']; expect(dataStream.getDataStreams()).toEqual(expectedResult); + expect(dataStream.perDataStreamIndices).toEqual({ + test_index1: ['.ds-index-1'], + test_index2: ['.ds-index-2'], + test_index3: ['.ds-index-3', '.ds-index-4'], + }); + }); + + test('extracts indices from a data stream', () => { + dataStream.loadDataStreams({ + data_streams: [ + { name: 'test_index1', indices: [{ index_name: '.ds-index-1' }] }, + { + name: 'test_index3', + indices: [{ index_name: '.ds-index-3' }, { index_name: '.ds-index-4' }], + }, + ], + }); + + expect(expandAliases('test_index1')).toEqual('.ds-index-1'); + expect(expandAliases('test_index3')).toEqual(['.ds-index-3', '.ds-index-4']); }); }); }); diff --git a/src/plugins/console/public/lib/autocomplete_entities/data_stream.ts b/src/plugins/console/public/lib/autocomplete_entities/data_stream.ts index 2b65d086aeb13..b46070f77b939 100644 --- a/src/plugins/console/public/lib/autocomplete_entities/data_stream.ts +++ b/src/plugins/console/public/lib/autocomplete_entities/data_stream.ts @@ -11,12 +11,19 @@ import type { IndicesGetDataStreamResponse } from '@elastic/elasticsearch/lib/ap export class DataStream { private dataStreams: string[] = []; + public perDataStreamIndices: Record = {}; + getDataStreams = (): string[] => { return [...this.dataStreams]; }; loadDataStreams = (dataStreams: IndicesGetDataStreamResponse) => { this.dataStreams = (dataStreams.data_streams ?? []).map(({ name }) => name).sort(); + + this.perDataStreamIndices = dataStreams.data_streams.reduce((acc, { name, indices }) => { + acc[name] = indices.map((index) => index.index_name); + return acc; + }, {} as Record); }; clearDataStreams = () => { diff --git a/src/plugins/console/public/lib/autocomplete_entities/expand_aliases.ts b/src/plugins/console/public/lib/autocomplete_entities/expand_aliases.ts index 27f8211f533a9..0a13475227e78 100644 --- a/src/plugins/console/public/lib/autocomplete_entities/expand_aliases.ts +++ b/src/plugins/console/public/lib/autocomplete_entities/expand_aliases.ts @@ -8,10 +8,18 @@ import { getAutocompleteInfo } from '../../services'; -export function expandAliases(indicesOrAliases: string | string[]) { +/** + * Expands provided aliases, data streams and wildcards + * @param indicesOrAliases - single value or an array of indices, aliases and data streams + * @returns {string | string[]} - single index or an array of resolved indices from provided input. + */ +export function expandAliases(indicesOrAliases: string | string[]): string | string[] { // takes a list of indices or aliases or a string which may be either and returns a list of indices // returns a list for multiple values or a string for a single. const perAliasIndexes = getAutocompleteInfo().alias.perAliasIndexes; + const perDataStreamIndices = getAutocompleteInfo().dataStream.perDataStreamIndices; + const perWildcardIndices = getAutocompleteInfo().mapping.perWildcardIndices; + if (!indicesOrAliases) { return indicesOrAliases; } @@ -24,6 +32,12 @@ export function expandAliases(indicesOrAliases: string | string[]) { if (perAliasIndexes[iOrA]) { return perAliasIndexes[iOrA]; } + if (perDataStreamIndices[iOrA]) { + return perDataStreamIndices[iOrA]; + } + if (perWildcardIndices[iOrA]) { + return perWildcardIndices[iOrA]; + } return [iOrA]; }); diff --git a/src/plugins/console/public/lib/autocomplete_entities/mapping.ts b/src/plugins/console/public/lib/autocomplete_entities/mapping.ts index 3c383ca124167..eff644ad94683 100644 --- a/src/plugins/console/public/lib/autocomplete_entities/mapping.ts +++ b/src/plugins/console/public/lib/autocomplete_entities/mapping.ts @@ -108,6 +108,11 @@ export class Mapping implements BaseMapping { */ public perIndexTypes: Record = {}; + /** + * Map of the user-input wildcards and actual indices. + */ + public perWildcardIndices: Record = {}; + private readonly _isLoading$ = new BehaviorSubject(false); /** @@ -181,6 +186,14 @@ export class Mapping implements BaseMapping { autoCompleteContext.asyncResultsState!.isLoading = false; autoCompleteContext.asyncResultsState!.lastFetched = Date.now(); + const mappingsIndices = Object.keys(mapping); + if ( + mappingsIndices.length > 1 || + (mappingsIndices[0] && mappingsIndices[0] !== indices) + ) { + this.perWildcardIndices[indices as string] = Object.keys(mapping); + } + // cache mappings this.loadMappings(mapping); diff --git a/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar.tsx b/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar.tsx index fc41760cc731e..72bfc8f24dcd4 100644 --- a/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar.tsx +++ b/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar.tsx @@ -14,7 +14,6 @@ import { EuiFlexGroup, EuiFlexItem, EuiPageSideBar_Deprecated as EuiPageSideBar, - htmlIdGenerator, } from '@elastic/eui'; import { isOfAggregateQueryType } from '@kbn/es-query'; import { DataViewPicker } from '@kbn/unified-search-plugin/public'; @@ -45,8 +44,6 @@ import { getUiActions } from '../../../../kibana_services'; import { getRawRecordType } from '../../utils/get_raw_record_type'; import { RecordRawType } from '../../services/discover_data_state_container'; -const fieldSearchDescriptionId = htmlIdGenerator()(); - export interface DiscoverSidebarProps extends DiscoverSidebarResponsiveProps { /** * Show loading instead of the field list if processing @@ -326,7 +323,6 @@ export function DiscoverSidebarComponent({ ) : ( diff --git a/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar_responsive.test.tsx b/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar_responsive.test.tsx index 26b2216eb0e04..37194c71f3a82 100644 --- a/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar_responsive.test.tsx +++ b/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar_responsive.test.tsx @@ -290,6 +290,19 @@ describe('discover responsive sidebar', function () { expect(ExistingFieldsServiceApi.loadFieldExisting).toHaveBeenCalledTimes(1); }); + it('should set a11y attributes for the search input in the field list', async function () { + const comp = await mountComponent(props); + + const a11yDescription = findTestSubject(comp, 'fieldListGrouped__ariaDescription'); + expect(a11yDescription.prop('aria-live')).toBe('polite'); + expect(a11yDescription.text()).toBe( + '1 selected field. 4 popular fields. 3 available fields. 20 empty fields. 2 meta fields.' + ); + + const searchInput = findTestSubject(comp, 'fieldListFiltersFieldSearch'); + expect(searchInput.first().prop('aria-describedby')).toBe(a11yDescription.prop('id')); + }); + it('should not have selected fields if no columns selected', async function () { const propsWithoutColumns = { ...props, diff --git a/test/api_integration/apis/saved_objects/bulk_create.ts b/test/api_integration/apis/saved_objects/bulk_create.ts index 43d7d9d8273bb..583fa39d4f0ac 100644 --- a/test/api_integration/apis/saved_objects/bulk_create.ts +++ b/test/api_integration/apis/saved_objects/bulk_create.ts @@ -8,7 +8,6 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../ftr_provider_context'; -import { getKibanaVersion } from './lib/saved_objects_test_utils'; export default function ({ getService }: FtrProviderContext) { const supertest = getService('supertest'); @@ -34,10 +33,7 @@ export default function ({ getService }: FtrProviderContext) { ]; describe('_bulk_create', () => { - let KIBANA_VERSION: string; - before(async () => { - KIBANA_VERSION = await getKibanaVersion(getService); await kibanaServer.spaces.create({ id: SPACE_ID, name: SPACE_ID }); await kibanaServer.importExport.load( 'test/api_integration/fixtures/kbn_archiver/saved_objects/basic.json', @@ -77,7 +73,7 @@ export default function ({ getService }: FtrProviderContext) { migrationVersion: { dashboard: resp.body.saved_objects[1].migrationVersion.dashboard, }, - coreMigrationVersion: KIBANA_VERSION, + coreMigrationVersion: '8.0.0', references: [], namespaces: [SPACE_ID], }, diff --git a/test/api_integration/apis/saved_objects/bulk_get.ts b/test/api_integration/apis/saved_objects/bulk_get.ts index 4bf9d6c6b3348..b7832a5e492e5 100644 --- a/test/api_integration/apis/saved_objects/bulk_get.ts +++ b/test/api_integration/apis/saved_objects/bulk_get.ts @@ -8,7 +8,6 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../ftr_provider_context'; -import { getKibanaVersion } from './lib/saved_objects_test_utils'; export default function ({ getService }: FtrProviderContext) { const supertest = getService('supertest'); @@ -30,10 +29,7 @@ export default function ({ getService }: FtrProviderContext) { ]; describe('_bulk_get', () => { - let KIBANA_VERSION: string; - before(async () => { - KIBANA_VERSION = await getKibanaVersion(getService); await kibanaServer.importExport.load( 'test/api_integration/fixtures/kbn_archiver/saved_objects/basic.json' ); @@ -76,7 +72,7 @@ export default function ({ getService }: FtrProviderContext) { resp.body.saved_objects[0].attributes.kibanaSavedObjectMeta, }, migrationVersion: resp.body.saved_objects[0].migrationVersion, - coreMigrationVersion: KIBANA_VERSION, + coreMigrationVersion: '7.14.0', namespaces: ['default'], references: [ { @@ -107,7 +103,7 @@ export default function ({ getService }: FtrProviderContext) { }, namespaces: ['default'], migrationVersion: resp.body.saved_objects[2].migrationVersion, - coreMigrationVersion: KIBANA_VERSION, + coreMigrationVersion: '7.14.0', references: [], }, ], diff --git a/test/api_integration/apis/saved_objects/create.ts b/test/api_integration/apis/saved_objects/create.ts index df1e59bc51b23..b5051f506f394 100644 --- a/test/api_integration/apis/saved_objects/create.ts +++ b/test/api_integration/apis/saved_objects/create.ts @@ -8,17 +8,13 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../ftr_provider_context'; -import { getKibanaVersion } from './lib/saved_objects_test_utils'; export default function ({ getService }: FtrProviderContext) { const supertest = getService('supertest'); const kibanaServer = getService('kibanaServer'); describe('create', () => { - let KIBANA_VERSION: string; - before(async () => { - KIBANA_VERSION = await getKibanaVersion(getService); await kibanaServer.importExport.load( 'test/api_integration/fixtures/kbn_archiver/saved_objects/basic.json' ); @@ -54,7 +50,7 @@ export default function ({ getService }: FtrProviderContext) { id: resp.body.id, type: 'visualization', migrationVersion: resp.body.migrationVersion, - coreMigrationVersion: KIBANA_VERSION, + coreMigrationVersion: '8.0.0', updated_at: resp.body.updated_at, created_at: resp.body.created_at, version: resp.body.version, @@ -68,7 +64,7 @@ export default function ({ getService }: FtrProviderContext) { }); }); - it('result should be updated to the latest coreMigrationVersion', async () => { + it('result should not be updated to the latest Kibana version if there are no migrations', async () => { await supertest .post(`/api/saved_objects/visualization`) .send({ @@ -79,7 +75,7 @@ export default function ({ getService }: FtrProviderContext) { }) .expect(200) .then((resp) => { - expect(resp.body.coreMigrationVersion).to.eql(KIBANA_VERSION); + expect(resp.body.coreMigrationVersion).to.eql('1.2.3'); }); }); }); diff --git a/test/api_integration/apis/saved_objects/export.ts b/test/api_integration/apis/saved_objects/export.ts index 4c06573d86e08..a40543d7a4887 100644 --- a/test/api_integration/apis/saved_objects/export.ts +++ b/test/api_integration/apis/saved_objects/export.ts @@ -8,7 +8,6 @@ import expect from '@kbn/expect'; import type { FtrProviderContext } from '../../ftr_provider_context'; -import { getKibanaVersion } from './lib/saved_objects_test_utils'; function ndjsonToObject(input: string) { return input.split('\n').map((str) => JSON.parse(str)); @@ -19,10 +18,7 @@ export default function ({ getService }: FtrProviderContext) { const SPACE_ID = 'ftr-so-export'; describe('export', () => { - let KIBANA_VERSION: string; - before(async () => { - KIBANA_VERSION = await getKibanaVersion(getService); await kibanaServer.spaces.create({ id: SPACE_ID, name: SPACE_ID }); await kibanaServer.importExport.load( 'test/api_integration/fixtures/kbn_archiver/saved_objects/basic.json', @@ -353,7 +349,7 @@ export default function ({ getService }: FtrProviderContext) { }, id: 'be3733a0-9efe-11e7-acb3-3dab96693fab', migrationVersion: objects[0].migrationVersion, - coreMigrationVersion: KIBANA_VERSION, + coreMigrationVersion: '7.14.0', references: [ { id: 'dd7caf20-9efd-11e7-acb3-3dab96693fab', @@ -414,7 +410,7 @@ export default function ({ getService }: FtrProviderContext) { }, id: 'be3733a0-9efe-11e7-acb3-3dab96693fab', migrationVersion: objects[0].migrationVersion, - coreMigrationVersion: KIBANA_VERSION, + coreMigrationVersion: '7.14.0', references: [ { id: 'dd7caf20-9efd-11e7-acb3-3dab96693fab', @@ -480,7 +476,7 @@ export default function ({ getService }: FtrProviderContext) { }, id: 'be3733a0-9efe-11e7-acb3-3dab96693fab', migrationVersion: objects[0].migrationVersion, - coreMigrationVersion: KIBANA_VERSION, + coreMigrationVersion: '7.14.0', references: [ { id: 'dd7caf20-9efd-11e7-acb3-3dab96693fab', diff --git a/test/api_integration/apis/saved_objects/get.ts b/test/api_integration/apis/saved_objects/get.ts index 88c8884c7cdc6..3296fa1f04cb4 100644 --- a/test/api_integration/apis/saved_objects/get.ts +++ b/test/api_integration/apis/saved_objects/get.ts @@ -8,17 +8,13 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../ftr_provider_context'; -import { getKibanaVersion } from './lib/saved_objects_test_utils'; export default function ({ getService }: FtrProviderContext) { const supertest = getService('supertest'); const kibanaServer = getService('kibanaServer'); describe('get', () => { - let KIBANA_VERSION: string; - before(async () => { - KIBANA_VERSION = await getKibanaVersion(getService); await kibanaServer.importExport.load( 'test/api_integration/fixtures/kbn_archiver/saved_objects/basic.json' ); @@ -41,7 +37,7 @@ export default function ({ getService }: FtrProviderContext) { created_at: resp.body.created_at, version: resp.body.version, migrationVersion: resp.body.migrationVersion, - coreMigrationVersion: KIBANA_VERSION, + coreMigrationVersion: '7.14.0', attributes: { title: 'Count of requests', description: '', diff --git a/test/api_integration/apis/saved_objects/resolve.ts b/test/api_integration/apis/saved_objects/resolve.ts index 8ca1904ef8c88..5d4dc7eab1530 100644 --- a/test/api_integration/apis/saved_objects/resolve.ts +++ b/test/api_integration/apis/saved_objects/resolve.ts @@ -8,19 +8,12 @@ import expect from '@kbn/expect'; import type { FtrProviderContext } from '../../ftr_provider_context'; -import { getKibanaVersion } from './lib/saved_objects_test_utils'; export default function ({ getService }: FtrProviderContext) { const supertest = getService('supertest'); const kibanaServer = getService('kibanaServer'); describe('resolve', () => { - let KIBANA_VERSION: string; - - before(async () => { - KIBANA_VERSION = await getKibanaVersion(getService); - }); - describe('with kibana index', () => { before(async () => { await kibanaServer.importExport.load( @@ -49,7 +42,7 @@ export default function ({ getService }: FtrProviderContext) { created_at: '2015-01-01T00:00:00.000Z', version: resp.body.saved_object.version, migrationVersion: resp.body.saved_object.migrationVersion, - coreMigrationVersion: KIBANA_VERSION, + coreMigrationVersion: '7.14.0', attributes: { title: 'Count of requests', description: '', diff --git a/tsconfig.base.json b/tsconfig.base.json index 6b4a26c43479a..6d869c8697b7a 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -1332,6 +1332,8 @@ "@kbn/utils/*": ["packages/kbn-utils/*"], "@kbn/ux-plugin": ["x-pack/plugins/ux"], "@kbn/ux-plugin/*": ["x-pack/plugins/ux/*"], + "@kbn/validate-next-docs-cli": ["packages/kbn-validate-next-docs-cli"], + "@kbn/validate-next-docs-cli/*": ["packages/kbn-validate-next-docs-cli/*"], "@kbn/vis-default-editor-plugin": ["src/plugins/vis_default_editor"], "@kbn/vis-default-editor-plugin/*": ["src/plugins/vis_default_editor/*"], "@kbn/vis-type-gauge-plugin": ["src/plugins/vis_types/gauge"], diff --git a/x-pack/plugins/apm/public/components/app/error_group_details/distribution/index.tsx b/x-pack/plugins/apm/public/components/app/error_group_details/distribution/index.tsx index 0c97c2bcd9fcd..0e3abf248df15 100644 --- a/x-pack/plugins/apm/public/components/app/error_group_details/distribution/index.tsx +++ b/x-pack/plugins/apm/public/components/app/error_group_details/distribution/index.tsx @@ -39,7 +39,7 @@ type ErrorDistributionAPIResponse = interface Props { fetchStatus: FETCH_STATUS; - distribution: ErrorDistributionAPIResponse; + distribution?: ErrorDistributionAPIResponse; title: React.ReactNode; } @@ -56,7 +56,7 @@ export function ErrorDistribution({ distribution, title, fetchStatus }: Props) { ); const timeseries = [ { - data: distribution.currentPeriod, + data: distribution?.currentPeriod ?? [], color: currentPeriodColor, title: i18n.translate('xpack.apm.errorGroup.chart.ocurrences', { defaultMessage: 'Error occurrences', @@ -65,7 +65,7 @@ export function ErrorDistribution({ distribution, title, fetchStatus }: Props) { ...(comparisonEnabled ? [ { - data: distribution.previousPeriod, + data: distribution?.previousPeriod ?? [], color: previousPeriodColor, title: previousPeriodLabel, }, diff --git a/x-pack/plugins/apm/public/components/app/error_group_details/index.tsx b/x-pack/plugins/apm/public/components/app/error_group_details/index.tsx index 19fc3895f7597..a2eb71c60694f 100644 --- a/x-pack/plugins/apm/public/components/app/error_group_details/index.tsx +++ b/x-pack/plugins/apm/public/components/app/error_group_details/index.tsx @@ -12,7 +12,6 @@ import { EuiPanel, EuiSpacer, EuiTitle, - EuiLoadingSpinner, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import React, { useEffect } from 'react'; @@ -24,11 +23,7 @@ import { useBreadcrumb } from '../../../context/breadcrumbs/use_breadcrumb'; import { useApmParams } from '../../../hooks/use_apm_params'; import { useApmRouter } from '../../../hooks/use_apm_router'; import { useErrorGroupDistributionFetcher } from '../../../hooks/use_error_group_distribution_fetcher'; -import { - FETCH_STATUS, - isPending, - useFetcher, -} from '../../../hooks/use_fetcher'; +import { FETCH_STATUS, useFetcher } from '../../../hooks/use_fetcher'; import { useTimeRange } from '../../../hooks/use_time_range'; import type { APIReturnType } from '../../../services/rest/create_call_apm_api'; import { ErrorSampler } from './error_sampler'; @@ -37,13 +32,12 @@ import { TopErroneousTransactions } from './top_erroneous_transactions'; import { maybe } from '../../../../common/utils/maybe'; import { fromQuery, toQuery } from '../../shared/links/url_helpers'; -type ErrorDistributionAPIResponse = - APIReturnType<'GET /internal/apm/services/{serviceName}/errors/distribution'>; +type ErrorSamplesAPIResponse = + APIReturnType<'GET /internal/apm/services/{serviceName}/errors/{groupId}/samples'>; -const emptyState: ErrorDistributionAPIResponse = { - currentPeriod: [], - previousPeriod: [], - bucketSize: 0, +const emptyErrorSamples: ErrorSamplesAPIResponse = { + errorSampleIds: [], + occurrencesCount: 0, }; function getShortGroupId(errorGroupId?: string) { @@ -139,31 +133,33 @@ export function ErrorGroupDetails() { ] ); - const { data: errorSamplesData, status: errorSamplesFetchStatus } = - useFetcher( - (callApmApi) => { - if (start && end) { - return callApmApi( - 'GET /internal/apm/services/{serviceName}/errors/{groupId}/samples', - { - params: { - path: { - serviceName, - groupId, - }, - query: { - environment, - kuery, - start, - end, - }, + const { + data: errorSamplesData = emptyErrorSamples, + status: errorSamplesFetchStatus, + } = useFetcher( + (callApmApi) => { + if (start && end) { + return callApmApi( + 'GET /internal/apm/services/{serviceName}/errors/{groupId}/samples', + { + params: { + path: { + serviceName, + groupId, }, - } - ); - } - }, - [environment, kuery, serviceName, start, end, groupId] - ); + query: { + environment, + kuery, + start, + end, + }, + }, + } + ); + } + }, + [environment, kuery, serviceName, start, end, groupId] + ); const { errorDistributionData, status: errorDistributionStatus } = useErrorGroupDistributionFetcher({ @@ -192,21 +188,6 @@ export function ErrorGroupDetails() { } }, [history, errorId, errorSamplesData, errorSamplesFetchStatus]); - const loadingDistributionData = isPending(errorDistributionStatus); - const loadingErrorSamplesData = isPending(errorSamplesFetchStatus); - - if (loadingDistributionData && loadingErrorSamplesData) { - return ( -
- -
- ); - } - - if (!errorDistributionData || !errorSamplesData) { - return ; - } - // If there are 0 occurrences, show only charts w. empty message const showDetails = errorSamplesData.occurrencesCount !== 0; @@ -216,7 +197,7 @@ export function ErrorGroupDetails() { @@ -225,7 +206,7 @@ export function ErrorGroupDetails() { theme.eui.euiCodeFontFamily}; @@ -65,6 +65,7 @@ interface Props { initialSortField: string; initialSortDirection: 'asc' | 'desc'; comparisonEnabled?: boolean; + isLoading: boolean; } function ErrorGroupList({ @@ -75,6 +76,7 @@ function ErrorGroupList({ comparisonEnabled, initialSortField, initialSortDirection, + isLoading, }: Props) { const { query } = useApmParams('/services/{serviceName}/errors'); const { offset } = query; @@ -251,15 +253,22 @@ function ErrorGroupList({ return ( ); } diff --git a/x-pack/plugins/apm/public/components/app/error_group_overview/index.tsx b/x-pack/plugins/apm/public/components/app/error_group_overview/index.tsx index 452e4009a470e..d6450ad4def57 100644 --- a/x-pack/plugins/apm/public/components/app/error_group_overview/index.tsx +++ b/x-pack/plugins/apm/public/components/app/error_group_overview/index.tsx @@ -13,18 +13,22 @@ import { EuiTitle, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; +import { orderBy } from 'lodash'; import React from 'react'; import { v4 as uuidv4 } from 'uuid'; -import { orderBy } from 'lodash'; -import { isTimeComparison } from '../../shared/time_comparison/get_comparison_options'; import { useApmServiceContext } from '../../../context/apm_service/use_apm_service_context'; import { ChartPointerEventContextProvider } from '../../../context/chart_pointer_event/chart_pointer_event_context'; import { useApmParams } from '../../../hooks/use_apm_params'; import { useErrorGroupDistributionFetcher } from '../../../hooks/use_error_group_distribution_fetcher'; -import { useFetcher, isPending } from '../../../hooks/use_fetcher'; +import { + FETCH_STATUS, + isPending, + useFetcher, +} from '../../../hooks/use_fetcher'; import { useTimeRange } from '../../../hooks/use_time_range'; import { APIReturnType } from '../../../services/rest/create_call_apm_api'; import { FailedTransactionRateChart } from '../../shared/charts/failed_transaction_rate_chart'; +import { isTimeComparison } from '../../shared/time_comparison/get_comparison_options'; import { ErrorDistribution } from '../error_group_details/distribution'; import { ErrorGroupList } from './error_group_list'; @@ -74,61 +78,62 @@ export function ErrorGroupOverview() { kuery, }); - const { data: errorGroupListData = INITIAL_STATE_MAIN_STATISTICS } = - useFetcher( - (callApmApi) => { - const normalizedSortDirection = - sortDirection === 'asc' ? 'asc' : 'desc'; + const { + data: errorGroupListData = INITIAL_STATE_MAIN_STATISTICS, + status: errorGroupListDataStatus, + } = useFetcher( + (callApmApi) => { + const normalizedSortDirection = sortDirection === 'asc' ? 'asc' : 'desc'; - if (start && end) { - return callApmApi( - 'GET /internal/apm/services/{serviceName}/errors/groups/main_statistics', - { - params: { - path: { - serviceName, - }, - query: { - environment, - kuery, - start, - end, - sortField, - sortDirection: normalizedSortDirection, - }, + if (start && end) { + return callApmApi( + 'GET /internal/apm/services/{serviceName}/errors/groups/main_statistics', + { + params: { + path: { + serviceName, }, - } - ).then((response) => { - const currentPageGroupIds = orderBy( - response.errorGroups, - sortField, - sortDirection - ) - .slice(page * pageSize, (page + 1) * pageSize) - .map(({ groupId }) => groupId) - .sort(); - - return { - // Everytime the main statistics is refetched, updates the requestId making the comparison API to be refetched. - requestId: uuidv4(), - errorGroupMainStatistics: response.errorGroups, - currentPageGroupIds, - }; - }); - } - }, - [ - environment, - kuery, - serviceName, - start, - end, - sortField, - sortDirection, - page, - pageSize, - ] - ); + query: { + environment, + kuery, + start, + end, + sortField, + sortDirection: normalizedSortDirection, + }, + }, + } + ).then((response) => { + const currentPageGroupIds = orderBy( + response.errorGroups, + sortField, + sortDirection + ) + .slice(page * pageSize, (page + 1) * pageSize) + .map(({ groupId }) => groupId) + .sort(); + + return { + // Everytime the main statistics is refetched, updates the requestId making the comparison API to be refetched. + requestId: uuidv4(), + errorGroupMainStatistics: response.errorGroups, + currentPageGroupIds, + }; + }); + } + }, + [ + environment, + kuery, + serviceName, + start, + end, + sortField, + sortDirection, + page, + pageSize, + ] + ); const { requestId, errorGroupMainStatistics, currentPageGroupIds } = errorGroupListData; @@ -169,10 +174,6 @@ export function ErrorGroupOverview() { { preservePreviousData: false } ); - if (!errorDistributionData || !errorGroupListData) { - return null; - } - return ( @@ -219,6 +220,7 @@ export function ErrorGroupOverview() { comparisonEnabled={comparisonEnabled} initialSortField={sortField} initialSortDirection={sortDirection} + isLoading={errorGroupListDataStatus === FETCH_STATUS.LOADING} /> diff --git a/x-pack/plugins/apm/public/components/app/metrics/service_metrics/index.tsx b/x-pack/plugins/apm/public/components/app/metrics/service_metrics/index.tsx index 6d0ddcb61fad0..17ca6ac46dd89 100644 --- a/x-pack/plugins/apm/public/components/app/metrics/service_metrics/index.tsx +++ b/x-pack/plugins/apm/public/components/app/metrics/service_metrics/index.tsx @@ -5,10 +5,19 @@ * 2.0. */ -import { EuiFlexGrid, EuiFlexItem, EuiPanel, EuiSpacer } from '@elastic/eui'; +import { + EuiEmptyPrompt, + EuiFlexGrid, + EuiFlexItem, + EuiLoadingLogo, + EuiPanel, + EuiSpacer, +} from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; import React from 'react'; import { ChartPointerEventContextProvider } from '../../../../context/chart_pointer_event/chart_pointer_event_context'; import { useApmParams } from '../../../../hooks/use_apm_params'; +import { isPending } from '../../../../hooks/use_fetcher'; import { useServiceMetricChartsFetcher } from '../../../../hooks/use_service_metric_charts_fetcher'; import { useTimeRange } from '../../../../hooks/use_time_range'; import { MetricsChart } from '../../../shared/charts/metrics_chart'; @@ -28,6 +37,23 @@ export function ServiceMetrics() { rangeTo, }); + const isLoading = isPending(status); + + if (isLoading) { + return ( + } + title={ +

+ {i18n.translate('xpack.apm.serviceMetrics.loading', { + defaultMessage: 'Loading metrics', + })} +

+ } + /> + ); + } + return ( diff --git a/x-pack/plugins/apm/public/components/app/metrics_details/service_node_metrics/index.tsx b/x-pack/plugins/apm/public/components/app/metrics_details/service_node_metrics/index.tsx index 4a6dd62b46e7c..1db9c8690891e 100644 --- a/x-pack/plugins/apm/public/components/app/metrics_details/service_node_metrics/index.tsx +++ b/x-pack/plugins/apm/public/components/app/metrics_details/service_node_metrics/index.tsx @@ -7,10 +7,12 @@ import { EuiCallOut, + EuiEmptyPrompt, EuiFlexGrid, EuiFlexGroup, EuiFlexItem, EuiLink, + EuiLoadingLogo, EuiPanel, EuiSpacer, EuiStat, @@ -18,14 +20,14 @@ import { } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; -import React from 'react'; import { euiStyled } from '@kbn/kibana-react-plugin/common'; +import React from 'react'; import { getServiceNodeName, SERVICE_NODE_NAME_MISSING, } from '../../../../../common/service_nodes'; -import { useApmServiceContext } from '../../../../context/apm_service/use_apm_service_context'; import { useApmPluginContext } from '../../../../context/apm_plugin/use_apm_plugin_context'; +import { useApmServiceContext } from '../../../../context/apm_service/use_apm_service_context'; import { useBreadcrumb } from '../../../../context/breadcrumbs/use_breadcrumb'; import { ChartPointerEventContextProvider } from '../../../../context/chart_pointer_event/chart_pointer_event_context'; import { useApmParams } from '../../../../hooks/use_apm_params'; @@ -194,6 +196,19 @@ export function ServiceNodeMetrics({ serviceNodeName }: Props) { )} + {isLoading && ( + } + title={ +

+ {i18n.translate('xpack.apm.serviceMetrics.loading', { + defaultMessage: 'Loading metrics', + })} +

+ } + /> + )} + {agentName && ( diff --git a/x-pack/plugins/apm/public/components/shared/summary/duration_summary_item.tsx b/x-pack/plugins/apm/public/components/shared/summary/duration_summary_item.tsx index 9993fd27b6172..b02b44306566a 100644 --- a/x-pack/plugins/apm/public/components/shared/summary/duration_summary_item.tsx +++ b/x-pack/plugins/apm/public/components/shared/summary/duration_summary_item.tsx @@ -27,16 +27,15 @@ function DurationSummaryItem({ duration, totalDuration, parentType }: Props) { return ( <> - {asDuration(duration)} + + {asDuration(duration)}   + + -   - - - ); } diff --git a/x-pack/plugins/apm/public/components/shared/summary/error_count_summary_item_badge.tsx b/x-pack/plugins/apm/public/components/shared/summary/error_count_summary_item_badge.tsx index 1f339188db149..c08fd0f424617 100644 --- a/x-pack/plugins/apm/public/components/shared/summary/error_count_summary_item_badge.tsx +++ b/x-pack/plugins/apm/public/components/shared/summary/error_count_summary_item_badge.tsx @@ -8,27 +8,22 @@ import React from 'react'; import { i18n } from '@kbn/i18n'; import { EuiBadge } from '@elastic/eui'; -import { euiStyled } from '@kbn/kibana-react-plugin/common'; import { useTheme } from '../../../hooks/use_theme'; interface Props { count: number; } -const Badge = euiStyled(EuiBadge)` - margin-top: 2px; -`; - export function ErrorCountSummaryItemBadge({ count }: Props) { const theme = useTheme(); return ( - + {i18n.translate('xpack.apm.transactionDetails.errorCount', { defaultMessage: '{errorCount, number} {errorCount, plural, one {Error} other {Errors}}', values: { errorCount: count }, })} - + ); } diff --git a/x-pack/plugins/apm/public/components/shared/summary/index.tsx b/x-pack/plugins/apm/public/components/shared/summary/index.tsx index 99c468a740429..619ed1bb8f791 100644 --- a/x-pack/plugins/apm/public/components/shared/summary/index.tsx +++ b/x-pack/plugins/apm/public/components/shared/summary/index.tsx @@ -8,6 +8,7 @@ import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import React, { Fragment } from 'react'; import { Maybe } from '../../../../typings/common'; +import { useBreakpoints } from '../../../hooks/use_breakpoints'; interface Props { items: Array>; @@ -15,12 +16,13 @@ interface Props { function Summary({ items }: Props) { const filteredItems = items.filter(Boolean) as React.ReactElement[]; + const { isSmall } = useBreakpoints(); return ( - + {filteredItems.map((item, index) => ( - {index > 0 && |} + {index > 0 && !isSmall && |} {item} ))} 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 3990c0de33a47..3c2520e9b219e 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 @@ -262,6 +262,7 @@ export function TransactionsTable({ const isLoading = status === FETCH_STATUS.LOADING; const isNotInitiated = status === FETCH_STATUS.NOT_INITIATED; + const hasFailed = status === FETCH_STATUS.FAILURE; const pagination = useMemo( () => ({ @@ -342,8 +343,17 @@ export function TransactionsTable({ > { } as unknown as ReturnType); }; -// Flaky: https://github.com/elastic/kibana/issues/148486 +// FLAKY: https://github.com/elastic/kibana/issues/150923 describe.skip('AllCasesListGeneric', () => { const refetchCases = jest.fn(); const onRowClick = jest.fn(); @@ -108,6 +107,8 @@ describe.skip('AllCasesListGeneric', () => { currentUserProfile: undefined, }; + const removeMsFromDate = (value: string) => moment(value).format('YYYY-MM-DDTHH:mm:ss[Z]'); + let appMockRenderer: AppMockRenderer; beforeAll(() => { @@ -131,69 +132,56 @@ describe.skip('AllCasesListGeneric', () => { window.localStorage.clear(); }); + afterEach(() => { + moment.tz.setDefault('Browser'); + }); + it('should render AllCasesList', async () => { useLicenseMock.mockReturnValue({ isAtLeastPlatinum: () => true }); - const wrapper = mount( - - - - ); + appMockRenderer.render(); await waitFor(() => { - expect(wrapper.find(`a[data-test-subj="case-details-link"]`).first().prop('href')).toEqual( - `/app/security/cases/test` + expect(screen.getAllByTestId('case-details-link')[0]).toHaveAttribute( + 'href', + '/app/security/cases/test' ); - expect(wrapper.find(`a[data-test-subj="case-details-link"]`).first().text()).toEqual( + expect(screen.getAllByTestId('case-details-link')[0]).toHaveTextContent( useGetCasesMockState.data.cases[0].title ); expect( - wrapper.find(`span[data-test-subj="case-table-column-tags-coke"]`).first().prop('title') - ).toEqual(useGetCasesMockState.data.cases[0].tags[0]); - expect( - wrapper.find(`[data-test-subj="case-user-profile-avatar-damaged_raccoon"]`).first().text() - ).toEqual('DR'); - expect( - wrapper - .find(`[data-test-subj="case-table-column-createdAt"]`) - .first() - .childAt(0) - .prop('value') - ).toBe(useGetCasesMockState.data.cases[0].createdAt); - - expect(wrapper.find(`[data-test-subj="case-table-case-count"]`).first().text()).toEqual( - 'Showing 10 cases' + screen.getAllByTestId('case-user-profile-avatar-damaged_raccoon')[0] + ).toHaveTextContent('DR'); + expect(screen.getAllByTestId('case-table-column-tags-coke')[0]).toHaveAttribute( + 'title', + useGetCasesMockState.data.cases[0].tags[0] ); + expect( + screen.getAllByTestId('case-table-column-createdAt')[0].querySelector('.euiToolTipAnchor') + ).toHaveTextContent(removeMsFromDate(useGetCasesMockState.data.cases[0].createdAt)); + expect(screen.getByTestId('case-table-case-count')).toHaveTextContent('Showing 10 cases'); }); }); it("should show a tooltip with the assignee's email when hover over the assignee avatar", async () => { useLicenseMock.mockReturnValue({ isAtLeastPlatinum: () => true }); - const result = render( - - - - ); + appMockRenderer.render(); - userEvent.hover(result.queryAllByTestId('case-user-profile-avatar-damaged_raccoon')[0]); + userEvent.hover(screen.queryAllByTestId('case-user-profile-avatar-damaged_raccoon')[0]); await waitFor(() => { - expect(result.getByText('damaged_raccoon@elastic.co')).toBeInTheDocument(); + expect(screen.getByText('damaged_raccoon@elastic.co')).toBeInTheDocument(); }); }); it('should show a tooltip with all tags when hovered', async () => { - const result = render( - - - - ); + appMockRenderer.render(); - userEvent.hover(result.queryAllByTestId('case-table-column-tags')[0]); + userEvent.hover(screen.queryAllByTestId('case-table-column-tags')[0]); await waitFor(() => { - expect(result.getByTestId('case-table-column-tags-tooltip')).toBeTruthy(); + expect(screen.getByTestId('case-table-column-tags-tooltip')).toBeTruthy(); }); }); @@ -221,16 +209,14 @@ describe.skip('AllCasesListGeneric', () => { }, }); - const wrapper = mount( - - - - ); + appMockRenderer.render(); const checkIt = (columnName: string, key: number) => { - const column = wrapper.find('[data-test-subj="cases-table"] tbody .euiTableRowCell').at(key); - expect(column.find('.euiTableRowCell--hideForDesktop').text()).toEqual(columnName); - expect(column.find('span').text()).toEqual(emptyTag); + const column = screen.getByTestId('cases-table').querySelectorAll('tbody .euiTableRowCell'); + expect(column[key].querySelector('.euiTableRowCell--hideForDesktop')).toHaveTextContent( + columnName + ); + expect(column[key].querySelector('span')).toHaveTextContent(emptyTag); }; const { result } = renderHook( @@ -248,12 +234,10 @@ describe.skip('AllCasesListGeneric', () => { }); it('should tableHeaderSortButton AllCasesList', async () => { - const wrapper = mount( - - - - ); - wrapper.find('[data-test-subj="tableHeaderSortButton"]').first().simulate('click'); + appMockRenderer.render(); + + userEvent.click(screen.getAllByTestId('tableHeaderSortButton')[0]); + await waitFor(() => { expect(useGetCasesMock).toBeCalledWith( expect.objectContaining({ @@ -266,109 +250,76 @@ describe.skip('AllCasesListGeneric', () => { }); it('renders the title column', async () => { - const res = appMockRenderer.render(); + appMockRenderer.render(); - expect(res.getByTestId('tableHeaderCell_title_0')).toBeInTheDocument(); + expect(screen.getByTestId('tableHeaderCell_title_0')).toBeInTheDocument(); }); it('renders the updated on column', async () => { - const res = appMockRenderer.render(); + appMockRenderer.render(); - expect(res.getByTestId('tableHeaderCell_updatedAt_5')).toBeInTheDocument(); + expect(screen.getByTestId('tableHeaderCell_updatedAt_5')).toBeInTheDocument(); }); it('renders the status column', async () => { - const res = appMockRenderer.render(); + appMockRenderer.render(); - expect(res.getByTestId('tableHeaderCell_status_7')).toBeInTheDocument(); + expect(screen.getByTestId('tableHeaderCell_status_7')).toBeInTheDocument(); }); it('renders the severity column', async () => { - const res = appMockRenderer.render(); + appMockRenderer.render(); - expect(res.getByTestId('tableHeaderCell_severity_8')).toBeInTheDocument(); - }); - - it('should render the case stats', () => { - const wrapper = mount( - - - - ); - expect(wrapper.find('[data-test-subj="cases-count-stats"]')).toBeTruthy(); + expect(screen.getByTestId('tableHeaderCell_severity_8')).toBeInTheDocument(); }); it('should not render table utility bar when isSelectorView=true', async () => { - const wrapper = mount( - - - - ); + appMockRenderer.render(); + await waitFor(() => { - expect(wrapper.find('[data-test-subj="case-table-selected-case-count"]').exists()).toBe( - false - ); - expect(wrapper.find('[data-test-subj="case-table-bulk-actions"]').exists()).toBe(false); + expect(screen.queryByTestId('case-table-selected-case-count')).not.toBeInTheDocument(); + expect(screen.queryByTestId('case-table-bulk-actions')).not.toBeInTheDocument(); }); }); it('should not render table utility bar when the user does not have permissions to delete', async () => { - const wrapper = mount( + render( ); + await waitFor(() => { - expect(wrapper.find('[data-test-subj="case-table-selected-case-count"]').exists()).toBe( - false - ); - expect(wrapper.find('[data-test-subj="case-table-bulk-actions"]').exists()).toBe(false); + expect(screen.queryByTestId('case-table-selected-case-count')).not.toBeInTheDocument(); + expect(screen.queryByTestId('case-table-bulk-actions')).not.toBeInTheDocument(); }); }); it('should render metrics when isSelectorView=false', async () => { - const wrapper = mount( - - - - ); + appMockRenderer.render(); await waitFor(() => { - expect(wrapper.find('[data-test-subj="cases-metrics-stats"]').exists()).toBe(true); + expect(screen.getByTestId('cases-metrics-stats')).toBeInTheDocument(); }); }); it('should not render metrics when isSelectorView=true', async () => { - const wrapper = mount( - - - - ); + appMockRenderer.render(); await waitFor(() => { - expect(wrapper.find('[data-test-subj="case-table-selected-case-count"]').exists()).toBe( - false - ); - expect(wrapper.find('[data-test-subj="cases-metrics-stats"]').exists()).toBe(false); + expect(screen.queryByTestId('case-table-selected-case-count')).not.toBeInTheDocument(); + expect(screen.queryByTestId('cases-metrics-stats')).not.toBeInTheDocument(); }); }); it('case table should not be selectable when isSelectorView=true', async () => { - const wrapper = mount( - - - - ); + appMockRenderer.render(); await waitFor(() => { - expect(wrapper.find('[data-test-subj="cases-table"]').first().prop('isSelectable')).toBe( - false - ); + expect(screen.queryByTestId('cases-table')).not.toHaveAttribute('isSelectable'); }); }); it('should call onRowClick with no cases and isSelectorView=true when create case is clicked', async () => { - const result = appMockRenderer.render( - - ); - userEvent.click(result.getByTestId('cases-table-add-case-filter-bar')); + appMockRenderer.render(); + userEvent.click(screen.getByTestId('cases-table-add-case-filter-bar')); await waitFor(() => { expect(onRowClick).toHaveBeenCalled(); @@ -378,16 +329,9 @@ describe.skip('AllCasesListGeneric', () => { it('should call onRowClick when clicking a case with modal=true', async () => { const theCase = defaultGetCases.data.cases[0]; - const wrapper = mount( - - - - ); + appMockRenderer.render(); - wrapper - .find(`button[data-test-subj="cases-table-row-select-${theCase.id}"]`) - .first() - .simulate('click'); + userEvent.click(screen.getByTestId(`cases-table-row-select-${theCase.id}`)); await waitFor(() => { expect(onRowClick).toHaveBeenCalledWith(theCase); @@ -395,22 +339,20 @@ describe.skip('AllCasesListGeneric', () => { }); it('should NOT call onRowClick when clicking a case with modal=true', async () => { - const wrapper = mount( - - - - ); - wrapper.find('[data-test-subj="cases-table-row-1"]').first().simulate('click'); + appMockRenderer.render(); + + userEvent.click(screen.getByTestId('cases-table-row-1')); + await waitFor(() => { expect(onRowClick).not.toHaveBeenCalled(); }); }); it('should sort by status', async () => { - const result = appMockRenderer.render(); + appMockRenderer.render(); userEvent.click( - within(result.getByTestId('tableHeaderCell_status_7')).getByTestId('tableHeaderSortButton') + within(screen.getByTestId('tableHeaderCell_status_7')).getByTestId('tableHeaderSortButton') ); await waitFor(() => { @@ -427,24 +369,20 @@ describe.skip('AllCasesListGeneric', () => { }); it('should render only Name, CreatedOn and Severity columns when isSelectorView=true', async () => { - const wrapper = mount( - - - - ); + appMockRenderer.render(); await waitFor(() => { - expect(wrapper.find('[data-test-subj="tableHeaderCell_title_0"]').exists()).toBe(true); - expect(wrapper.find('[data-test-subj="tableHeaderCell_createdAt_1"]').exists()).toBe(true); - expect(wrapper.find('[data-test-subj="tableHeaderCell_severity_2"]').exists()).toBe(true); - expect(wrapper.find('[data-test-subj="tableHeaderCell_assignees_1"]').exists()).toBe(false); + expect(screen.getByTestId('tableHeaderCell_title_0')).toBeInTheDocument(); + expect(screen.getByTestId('tableHeaderCell_createdAt_1')).toBeInTheDocument(); + expect(screen.getByTestId('tableHeaderCell_severity_2')).toBeInTheDocument(); + expect(screen.queryByTestId('tableHeaderCell_assignees_1')).not.toBeInTheDocument(); }); }); it('should sort by severity', async () => { - const result = appMockRenderer.render(); + appMockRenderer.render(); userEvent.click( - within(result.getByTestId('tableHeaderCell_severity_8')).getByTestId('tableHeaderSortButton') + within(screen.getByTestId('tableHeaderCell_severity_8')).getByTestId('tableHeaderSortButton') ); await waitFor(() => { @@ -461,10 +399,10 @@ describe.skip('AllCasesListGeneric', () => { }); it('should sort by title', async () => { - const result = appMockRenderer.render(); + appMockRenderer.render(); userEvent.click( - within(result.getByTestId('tableHeaderCell_title_0')).getByTestId('tableHeaderSortButton') + within(screen.getByTestId('tableHeaderCell_title_0')).getByTestId('tableHeaderSortButton') ); await waitFor(() => { @@ -481,10 +419,10 @@ describe.skip('AllCasesListGeneric', () => { }); it('should sort by updatedOn', async () => { - const result = appMockRenderer.render(); + appMockRenderer.render(); userEvent.click( - within(result.getByTestId('tableHeaderCell_updatedAt_5')).getByTestId('tableHeaderSortButton') + within(screen.getByTestId('tableHeaderCell_updatedAt_5')).getByTestId('tableHeaderSortButton') ); await waitFor(() => { @@ -501,10 +439,10 @@ describe.skip('AllCasesListGeneric', () => { }); it('should filter by status: closed', async () => { - const result = appMockRenderer.render(); - userEvent.click(result.getByTestId('case-status-filter')); + appMockRenderer.render(); + userEvent.click(screen.getByTestId('case-status-filter')); await waitForEuiPopoverOpen(); - userEvent.click(result.getByTestId('case-status-filter-closed')); + userEvent.click(screen.getByTestId('case-status-filter-closed')); await waitFor(() => { expect(useGetCasesMock).toHaveBeenLastCalledWith( expect.objectContaining({ @@ -515,10 +453,10 @@ describe.skip('AllCasesListGeneric', () => { }); it('should filter by status: in-progress', async () => { - const result = appMockRenderer.render(); - userEvent.click(result.getByTestId('case-status-filter')); + appMockRenderer.render(); + userEvent.click(screen.getByTestId('case-status-filter')); await waitForEuiPopoverOpen(); - userEvent.click(result.getByTestId('case-status-filter-in-progress')); + userEvent.click(screen.getByTestId('case-status-filter-in-progress')); await waitFor(() => { expect(useGetCasesMock).toHaveBeenLastCalledWith( expect.objectContaining({ @@ -529,10 +467,10 @@ describe.skip('AllCasesListGeneric', () => { }); it('should filter by status: open', async () => { - const result = appMockRenderer.render(); - userEvent.click(result.getByTestId('case-status-filter')); + appMockRenderer.render(); + userEvent.click(screen.getByTestId('case-status-filter')); await waitForEuiPopoverOpen(); - userEvent.click(result.getByTestId('case-status-filter-in-progress')); + userEvent.click(screen.getByTestId('case-status-filter-in-progress')); await waitFor(() => { expect(useGetCasesMock).toHaveBeenLastCalledWith( expect.objectContaining({ @@ -543,67 +481,51 @@ describe.skip('AllCasesListGeneric', () => { }); it('should show the correct count on stats', async () => { - const wrapper = mount( - - - - ); - wrapper.find('button[data-test-subj="case-status-filter"]').simulate('click'); + appMockRenderer.render(); + + userEvent.click(screen.getByTestId('case-status-filter')); + await waitFor(() => { - expect(wrapper.find('button[data-test-subj="case-status-filter-open"]').text()).toBe( - 'Open (20)' - ); - expect(wrapper.find('button[data-test-subj="case-status-filter-in-progress"]').text()).toBe( + expect(screen.getByTestId('case-status-filter-open')).toHaveTextContent('Open (20)'); + expect(screen.getByTestId('case-status-filter-in-progress')).toHaveTextContent( 'In progress (40)' ); - expect(wrapper.find('button[data-test-subj="case-status-filter-closed"]').text()).toBe( - 'Closed (130)' - ); + expect(screen.getByTestId('case-status-filter-closed')).toHaveTextContent('Closed (130)'); }); }); it('renders the first available status when hiddenStatus is given', async () => { - const wrapper = mount( - - - + appMockRenderer.render( + ); - expect(wrapper.find('[data-test-subj="case-status-badge-in-progress"]').exists()).toBeTruthy(); + await waitFor(() => + expect(screen.getAllByTestId('case-status-badge-in-progress')[0]).toBeInTheDocument() + ); }); it('shows Solution column if there are no set owners', async () => { - const wrapper = mount( + render( ); await waitFor(() => { - const solutionHeader = wrapper.find({ children: 'Solution' }); - expect(solutionHeader.exists()).toBeTruthy(); + expect(screen.getAllByText('Solution')[0]).toBeInTheDocument(); }); }); it('hides Solution column if there is a set owner', async () => { - const wrapper = mount( - - - - ); + appMockRenderer.render(); await waitFor(() => { - const solutionHeader = wrapper.find({ children: 'Solution' }); - expect(solutionHeader.exists()).toBeFalsy(); + expect(screen.queryByText('Solution')).not.toBeInTheDocument(); }); }); it('should deselect cases when refreshing', async () => { - render( - - - - ); + appMockRenderer.render(); const allCheckbox = await screen.findByTestId('checkboxSelectAll'); userEvent.click(allCheckbox); @@ -627,11 +549,7 @@ describe.skip('AllCasesListGeneric', () => { selectedCases: [], }); - render( - - - - ); + appMockRenderer.render(); const allCheckbox = await screen.findByTestId('checkboxSelectAll'); @@ -654,15 +572,15 @@ describe.skip('AllCasesListGeneric', () => { }); it('should hide the alerts column if the alert feature is disabled', async () => { - const result = render( + render( ); await waitFor(() => { - expect(result.getByTestId('cases-table')).toBeTruthy(); - expect(result.queryAllByTestId('case-table-column-alertsCount').length).toBe(0); + expect(screen.getByTestId('cases-table')).toBeTruthy(); + expect(screen.queryAllByTestId('case-table-column-alertsCount').length).toBe(0); }); }); @@ -692,7 +610,7 @@ describe.skip('AllCasesListGeneric', () => { describe('Solutions', () => { it('should set the owner to all available solutions when deselecting all solutions', async () => { - const { getByTestId } = appMockRenderer.render( + const { getByTestId } = render( @@ -762,7 +680,7 @@ describe.skip('AllCasesListGeneric', () => { }); it('should hide the solutions filter if the owner is provided', async () => { - const { queryByTestId } = appMockRenderer.render( + const { queryByTestId } = render( @@ -772,7 +690,7 @@ describe.skip('AllCasesListGeneric', () => { }); it('should call useGetCases with the correct owner on initial render', async () => { - appMockRenderer.render( + render( @@ -800,48 +718,52 @@ describe.skip('AllCasesListGeneric', () => { describe('Bulk actions', () => { it('Renders bulk action', async () => { - const result = appMockRenderer.render(); + appMockRenderer.render(); - act(() => { - userEvent.click(result.getByTestId('checkboxSelectAll')); + await waitFor(() => { + expect(screen.getByTestId('checkboxSelectAll')).toBeInTheDocument(); }); - act(() => { - userEvent.click(result.getByText('Bulk actions')); + userEvent.click(screen.getByTestId('checkboxSelectAll')); + + await waitFor(() => { + expect(screen.getByText('Bulk actions')).toBeInTheDocument(); }); + userEvent.click(screen.getByText('Bulk actions')); + await waitForEuiPopoverOpen(); - expect(result.getByTestId('case-bulk-action-status')).toBeInTheDocument(); - expect(result.getByTestId('cases-bulk-action-delete')).toBeInTheDocument(); + expect(screen.getByTestId('case-bulk-action-status')).toBeInTheDocument(); + expect(screen.getByTestId('cases-bulk-action-delete')).toBeInTheDocument(); }); it.each([[CaseStatuses.open], [CaseStatuses['in-progress']], [CaseStatuses.closed]])( 'Bulk update status: %s', async (status) => { - const result = appMockRenderer.render(); + appMockRenderer.render(); - act(() => { - userEvent.click(result.getByTestId('checkboxSelectAll')); + await waitFor(() => { + expect(screen.getByTestId('checkboxSelectAll')).toBeInTheDocument(); }); - act(() => { - userEvent.click(result.getByText('Bulk actions')); + userEvent.click(screen.getByTestId('checkboxSelectAll')); + + await waitFor(() => { + expect(screen.getByText('Bulk actions')).toBeInTheDocument(); }); + userEvent.click(screen.getByText('Bulk actions')); + await waitForEuiPopoverOpen(); - act(() => { - userEvent.click(result.getByTestId('case-bulk-action-status')); - }); + userEvent.click(screen.getByTestId('case-bulk-action-status')); await waitFor(() => { - expect(result.getByTestId(`cases-bulk-action-status-${status}`)).toBeInTheDocument(); + expect(screen.getByTestId(`cases-bulk-action-status-${status}`)).toBeInTheDocument(); }); - act(() => { - userEvent.click(result.getByTestId(`cases-bulk-action-status-${status}`)); - }); + userEvent.click(screen.getByTestId(`cases-bulk-action-status-${status}`)); await waitForComponentToUpdate(); @@ -862,29 +784,29 @@ describe.skip('AllCasesListGeneric', () => { [CaseSeverity.HIGH], [CaseSeverity.CRITICAL], ])('Bulk update severity: %s', async (severity) => { - const result = appMockRenderer.render(); + appMockRenderer.render(); - act(() => { - userEvent.click(result.getByTestId('checkboxSelectAll')); + await waitFor(() => { + expect(screen.getByTestId('checkboxSelectAll')).toBeInTheDocument(); }); - act(() => { - userEvent.click(result.getByText('Bulk actions')); + userEvent.click(screen.getByTestId('checkboxSelectAll')); + + await waitFor(() => { + expect(screen.getByText('Bulk actions')).toBeInTheDocument(); }); + userEvent.click(screen.getByText('Bulk actions')); + await waitForEuiPopoverOpen(); - act(() => { - userEvent.click(result.getByTestId('case-bulk-action-severity')); - }); + userEvent.click(screen.getByTestId('case-bulk-action-severity')); await waitFor(() => { - expect(result.getByTestId(`cases-bulk-action-severity-${severity}`)).toBeInTheDocument(); + expect(screen.getByTestId(`cases-bulk-action-severity-${severity}`)).toBeInTheDocument(); }); - act(() => { - userEvent.click(result.getByTestId(`cases-bulk-action-severity-${severity}`)); - }); + userEvent.click(screen.getByTestId(`cases-bulk-action-severity-${severity}`)); await waitForComponentToUpdate(); @@ -899,31 +821,31 @@ describe.skip('AllCasesListGeneric', () => { }); it('Bulk delete', async () => { - const result = appMockRenderer.render(); + appMockRenderer.render(); - act(() => { - userEvent.click(result.getByTestId('checkboxSelectAll')); + await waitFor(() => { + expect(screen.getByTestId('checkboxSelectAll')).toBeInTheDocument(); }); - act(() => { - userEvent.click(result.getByText('Bulk actions')); + userEvent.click(screen.getByTestId('checkboxSelectAll')); + + await waitFor(() => { + expect(screen.getByText('Bulk actions')).toBeInTheDocument(); }); + userEvent.click(screen.getByText('Bulk actions')); + await waitForEuiPopoverOpen(); - act(() => { - userEvent.click(result.getByTestId('cases-bulk-action-delete'), undefined, { - skipPointerEventsCheck: true, - }); + userEvent.click(screen.getByTestId('cases-bulk-action-delete'), undefined, { + skipPointerEventsCheck: true, }); await waitFor(() => { - expect(result.getByTestId('confirm-delete-case-modal')).toBeInTheDocument(); + expect(screen.getByTestId('confirm-delete-case-modal')).toBeInTheDocument(); }); - act(() => { - userEvent.click(result.getByTestId('confirmModalConfirmButton')); - }); + userEvent.click(screen.getByTestId('confirmModalConfirmButton')); await waitFor(() => { expect(deleteCasesSpy).toHaveBeenCalledWith( @@ -944,13 +866,17 @@ describe.skip('AllCasesListGeneric', () => { it('should disable the checkboxes when the user has read only permissions', async () => { appMockRenderer = createAppMockRenderer({ permissions: readCasesPermissions() }); - const res = appMockRenderer.render(); + appMockRenderer.render(); - expect(res.getByTestId('checkboxSelectAll')).toBeDisabled(); + await waitFor(() => { + expect(screen.getByTestId('checkboxSelectAll')).toBeInTheDocument(); + }); + + expect(screen.getByTestId('checkboxSelectAll')).toBeDisabled(); await waitFor(() => { for (const theCase of defaultGetCases.data.cases) { - expect(res.getByTestId(`checkboxSelectRow-${theCase.id}`)).toBeDisabled(); + expect(screen.getByTestId(`checkboxSelectRow-${theCase.id}`)).toBeDisabled(); } }); }); @@ -971,46 +897,44 @@ describe.skip('AllCasesListGeneric', () => { ]; it('should render row actions', async () => { - const res = appMockRenderer.render(); + appMockRenderer.render(); await waitFor(() => { for (const theCase of defaultGetCases.data.cases) { - expect(res.getByTestId(`case-action-popover-button-${theCase.id}`)).toBeInTheDocument(); + expect( + screen.getByTestId(`case-action-popover-button-${theCase.id}`) + ).toBeInTheDocument(); } }); }); it.each(statusTests)('update the status of a case: %s', async (status) => { - const res = appMockRenderer.render(); + appMockRenderer.render(); const openCase = useGetCasesMockState.data.cases[0]; const inProgressCase = useGetCasesMockState.data.cases[1]; const theCase = status === CaseStatuses.open ? inProgressCase : openCase; await waitFor(() => { - expect(res.getByTestId(`case-action-popover-button-${theCase.id}`)).toBeInTheDocument(); + expect( + screen.getByTestId(`case-action-popover-button-${theCase.id}`) + ).toBeInTheDocument(); }); - act(() => { - userEvent.click(res.getByTestId(`case-action-popover-button-${theCase.id}`)); - }); + userEvent.click(screen.getByTestId(`case-action-popover-button-${theCase.id}`)); await waitFor(() => { - expect(res.getByTestId(`case-action-status-panel-${theCase.id}`)).toBeInTheDocument(); + expect(screen.getByTestId(`case-action-status-panel-${theCase.id}`)).toBeInTheDocument(); }); - act(() => { - userEvent.click(res.getByTestId(`case-action-status-panel-${theCase.id}`), undefined, { - skipPointerEventsCheck: true, - }); + userEvent.click(screen.getByTestId(`case-action-status-panel-${theCase.id}`), undefined, { + skipPointerEventsCheck: true, }); await waitFor(() => { - expect(res.getByTestId(`cases-bulk-action-status-${status}`)).toBeInTheDocument(); + expect(screen.getByTestId(`cases-bulk-action-status-${status}`)).toBeInTheDocument(); }); - act(() => { - userEvent.click(res.getByTestId(`cases-bulk-action-status-${status}`)); - }); + userEvent.click(screen.getByTestId(`cases-bulk-action-status-${status}`)); await waitFor(() => { expect(updateCasesSpy).toHaveBeenCalledWith( @@ -1020,37 +944,35 @@ describe.skip('AllCasesListGeneric', () => { }); }); - it.each(severityTests)('update the status of a case: %s', async (severity) => { - const res = appMockRenderer.render(); + it.each(severityTests)('update the severity of a case: %s', async (severity) => { + appMockRenderer.render(); const lowCase = useGetCasesMockState.data.cases[0]; const mediumCase = useGetCasesMockState.data.cases[1]; const theCase = severity === CaseSeverity.LOW ? mediumCase : lowCase; await waitFor(() => { - expect(res.getByTestId(`case-action-popover-button-${theCase.id}`)).toBeInTheDocument(); + expect( + screen.getByTestId(`case-action-popover-button-${theCase.id}`) + ).toBeInTheDocument(); }); - act(() => { - userEvent.click(res.getByTestId(`case-action-popover-button-${theCase.id}`)); - }); + userEvent.click(screen.getByTestId(`case-action-popover-button-${theCase.id}`)); await waitFor(() => { - expect(res.getByTestId(`case-action-severity-panel-${theCase.id}`)).toBeInTheDocument(); + expect( + screen.getByTestId(`case-action-severity-panel-${theCase.id}`) + ).toBeInTheDocument(); }); - act(() => { - userEvent.click(res.getByTestId(`case-action-severity-panel-${theCase.id}`), undefined, { - skipPointerEventsCheck: true, - }); + userEvent.click(screen.getByTestId(`case-action-severity-panel-${theCase.id}`), undefined, { + skipPointerEventsCheck: true, }); await waitFor(() => { - expect(res.getByTestId(`cases-bulk-action-severity-${severity}`)).toBeInTheDocument(); + expect(screen.getByTestId(`cases-bulk-action-severity-${severity}`)).toBeInTheDocument(); }); - act(() => { - userEvent.click(res.getByTestId(`cases-bulk-action-severity-${severity}`)); - }); + userEvent.click(screen.getByTestId(`cases-bulk-action-severity-${severity}`)); await waitFor(() => { expect(updateCasesSpy).toHaveBeenCalledWith( @@ -1061,34 +983,30 @@ describe.skip('AllCasesListGeneric', () => { }); it('should delete a case', async () => { - const res = appMockRenderer.render(); + appMockRenderer.render(); const theCase = defaultGetCases.data.cases[0]; await waitFor(() => { - expect(res.getByTestId(`case-action-popover-button-${theCase.id}`)).toBeInTheDocument(); + expect( + screen.getByTestId(`case-action-popover-button-${theCase.id}`) + ).toBeInTheDocument(); }); - act(() => { - userEvent.click(res.getByTestId(`case-action-popover-button-${theCase.id}`)); - }); + userEvent.click(screen.getByTestId(`case-action-popover-button-${theCase.id}`)); await waitFor(() => { - expect(res.getByTestId('cases-bulk-action-delete')).toBeInTheDocument(); + expect(screen.getByTestId('cases-bulk-action-delete')).toBeInTheDocument(); }); - act(() => { - userEvent.click(res.getByTestId('cases-bulk-action-delete'), undefined, { - skipPointerEventsCheck: true, - }); + userEvent.click(screen.getByTestId('cases-bulk-action-delete'), undefined, { + skipPointerEventsCheck: true, }); await waitFor(() => { - expect(res.getByTestId('confirm-delete-case-modal')).toBeInTheDocument(); + expect(screen.getByTestId('confirm-delete-case-modal')).toBeInTheDocument(); }); - act(() => { - userEvent.click(res.getByTestId('confirmModalConfirmButton')); - }); + userEvent.click(screen.getByTestId('confirmModalConfirmButton')); await waitFor(() => { expect(deleteCasesSpy).toHaveBeenCalledWith(['basic-case-id'], expect.anything()); @@ -1096,98 +1014,77 @@ describe.skip('AllCasesListGeneric', () => { }); it('should disable row actions when bulk selecting all cases', async () => { - const res = appMockRenderer.render(); + appMockRenderer.render(); - act(() => { - userEvent.click(res.getByTestId('checkboxSelectAll')); - }); + userEvent.click(screen.getByTestId('checkboxSelectAll')); await waitFor(() => { for (const theCase of defaultGetCases.data.cases) { - expect(res.getByTestId(`case-action-popover-button-${theCase.id}`)).toBeDisabled(); + expect(screen.getByTestId(`case-action-popover-button-${theCase.id}`)).toBeDisabled(); } }); }); it('should disable row actions when selecting a case', async () => { - const res = appMockRenderer.render(); + appMockRenderer.render(); const caseToSelect = defaultGetCases.data.cases[0]; - act(() => { - userEvent.click(res.getByTestId(`checkboxSelectRow-${caseToSelect.id}`)); - }); + userEvent.click(screen.getByTestId(`checkboxSelectRow-${caseToSelect.id}`)); await waitFor(() => { for (const theCase of defaultGetCases.data.cases) { - expect(res.getByTestId(`case-action-popover-button-${theCase.id}`)).toBeDisabled(); + expect(screen.getByTestId(`case-action-popover-button-${theCase.id}`)).toBeDisabled(); } }); }); }); - }); -}); -// Flaky: https://github.com/elastic/kibana/issues/148490 -describe.skip('Assignees', () => { - it('should hide the assignees column on basic license', async () => { - useLicenseMock.mockReturnValue({ isAtLeastPlatinum: () => false }); + describe('Assignees', () => { + it('should hide the assignees column on basic license', async () => { + useLicenseMock.mockReturnValue({ isAtLeastPlatinum: () => false }); - const result = render( - - - - ); + appMockRenderer.render(); - await waitFor(() => { - expect(result.getByTestId('cases-table')).toBeTruthy(); - expect(result.queryAllByTestId('case-table-column-assignee').length).toBe(0); - }); - }); + await waitFor(() => { + expect(screen.getByTestId('cases-table')).toBeTruthy(); + expect(screen.queryAllByTestId('case-table-column-assignee').length).toBe(0); + }); + }); - it('should show the assignees column on platinum license', async () => { - useLicenseMock.mockReturnValue({ isAtLeastPlatinum: () => true }); + it('should show the assignees column on platinum license', async () => { + useLicenseMock.mockReturnValue({ isAtLeastPlatinum: () => true }); - const result = render( - - - - ); + appMockRenderer.render(); - await waitFor(() => { - expect(result.getByTestId('cases-table')).toBeTruthy(); - expect(result.queryAllByTestId('case-table-column-assignee').length).toBeGreaterThan(0); - }); - }); + await waitFor(() => { + expect(screen.getByTestId('cases-table')).toBeTruthy(); + expect(screen.queryAllByTestId('case-table-column-assignee').length).toBeGreaterThan(0); + }); + }); - it('should hide the assignees filters on basic license', async () => { - useLicenseMock.mockReturnValue({ isAtLeastPlatinum: () => false }); + it('should hide the assignees filters on basic license', async () => { + useLicenseMock.mockReturnValue({ isAtLeastPlatinum: () => false }); - const result = render( - - - - ); + appMockRenderer.render(); - await waitFor(() => { - expect(result.getByTestId('cases-table')).toBeTruthy(); - expect(result.queryAllByTestId('options-filter-popover-button-assignees').length).toBe(0); - }); - }); + await waitFor(() => { + expect(screen.getByTestId('cases-table')).toBeTruthy(); + expect(screen.queryAllByTestId('options-filter-popover-button-assignees').length).toBe(0); + }); + }); - it('should show the assignees filters on platinum license', async () => { - useLicenseMock.mockReturnValue({ isAtLeastPlatinum: () => true }); + it('should show the assignees filters on platinum license', async () => { + useLicenseMock.mockReturnValue({ isAtLeastPlatinum: () => true }); - const result = render( - - - - ); + appMockRenderer.render(); - await waitFor(() => { - expect(result.getByTestId('cases-table')).toBeTruthy(); - expect( - result.queryAllByTestId('options-filter-popover-button-assignees').length - ).toBeGreaterThan(0); + await waitFor(() => { + expect(screen.getByTestId('cases-table')).toBeTruthy(); + expect( + screen.queryAllByTestId('options-filter-popover-button-assignees').length + ).toBeGreaterThan(0); + }); + }); }); }); }); diff --git a/x-pack/plugins/cases/public/components/configure_cases/index.tsx b/x-pack/plugins/cases/public/components/configure_cases/index.tsx index 2f7db2202a76b..e44f61315641c 100644 --- a/x-pack/plugins/cases/public/components/configure_cases/index.tsx +++ b/x-pack/plugins/cases/public/components/configure_cases/index.tsx @@ -84,11 +84,15 @@ export const ConfigureCases: React.FC = React.memo(() => { refetch: refetchActionTypes, } = useGetActionTypes(); - const onConnectorUpdated = useCallback(async () => { - refetchConnectors(); - refetchActionTypes(); - refetchCaseConfigure(); - }, [refetchActionTypes, refetchCaseConfigure, refetchConnectors]); + const onConnectorUpdated = useCallback( + async (updatedConnector) => { + setEditedConnectorItem(updatedConnector); + refetchConnectors(); + refetchActionTypes(); + refetchCaseConfigure(); + }, + [refetchActionTypes, refetchCaseConfigure, refetchConnectors, setEditedConnectorItem] + ); const isLoadingAny = isLoadingConnectors || persistLoading || loadingCaseConfigure || isLoadingActionTypes; @@ -181,7 +185,7 @@ export const ConfigureCases: React.FC = React.memo(() => { }) : null, // eslint-disable-next-line react-hooks/exhaustive-deps - [connector.id, editFlyoutVisible] + [connector.id, editedConnectorItem, editFlyoutVisible] ); return ( diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/native_connector_configuration/research_configuration.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/native_connector_configuration/research_configuration.tsx index 47e38a4b3832b..8ba06ce5e50e3 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/native_connector_configuration/research_configuration.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/native_connector_configuration/research_configuration.tsx @@ -28,10 +28,7 @@ export const ResearchConfiguration: React.FC = ({ 'xpack.enterpriseSearch.content.indices.configurationConnector.researchConfiguration.description', { defaultMessage: - '{name} supports a variety of authentication mechanisms which will be needed for this connector to connect to your instance. Consult with your administrator for the correct credentials to use to connect.', - values: { - name, - }, + 'This connector supports several authentication methods. Ask your administrator for the correct connection credentials.', } )} diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/select_connector/connector_checkable.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/select_connector/connector_checkable.tsx index c12594175db87..0fc03da850596 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/select_connector/connector_checkable.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/select_connector/connector_checkable.tsx @@ -74,15 +74,6 @@ export const ConnectorCheckable: React.FC = ({ )} - - {i18n.translate( - 'xpack.enterpriseSearch.content.indices.selectConnector.connectorCheckable.basicAuthenticationLabel', - { - defaultMessage: 'Basic authentication', - } - )} - - {i18n.translate( 'xpack.enterpriseSearch.content.indices.selectConnector.connectorCheckable.documentationLinkLabel', diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/crawler_configuration/crawler_configuration.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/crawler_configuration/crawler_configuration.tsx index 4741525a85b72..660ab114561ad 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/crawler_configuration/crawler_configuration.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/crawler_configuration/crawler_configuration.tsx @@ -23,6 +23,7 @@ import { import { i18n } from '@kbn/i18n'; import { Status } from '../../../../../../../common/types/api'; +import { docLinks } from '../../../../../shared/doc_links'; import { IndexViewLogic } from '../../index_view_logic'; @@ -88,7 +89,7 @@ export const CrawlerConfiguration: React.FC = () => { {i18n.translate( diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/crawler_domain_detail/extraction_rules/edit_extraction_rule.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/crawler_domain_detail/extraction_rules/edit_extraction_rule.tsx index c03a395591bae..87f26d7bac147 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/crawler_domain_detail/extraction_rules/edit_extraction_rule.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/crawler_domain_detail/extraction_rules/edit_extraction_rule.tsx @@ -27,6 +27,7 @@ import { EuiSpacer, EuiTitle, } from '@elastic/eui'; + import { i18n } from '@kbn/i18n'; import { @@ -34,6 +35,7 @@ import { ExtractionRule, ExtractionRuleBase, } from '../../../../../../../../common/types/extraction_rules'; +import { docLinks } from '../../../../../../shared/doc_links'; import { ContentFieldsPanel } from './content_fields_panel'; import { EditFieldRuleFlyout } from './edit_field_rule_flyout'; @@ -362,7 +364,7 @@ export const EditExtractionRule: React.FC = ({ {i18n.translate( diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/crawler_domain_detail/extraction_rules/edit_field_rule_flyout.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/crawler_domain_detail/extraction_rules/edit_field_rule_flyout.tsx index 2bb28f0d27045..5de9e8c7435f4 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/crawler_domain_detail/extraction_rules/edit_field_rule_flyout.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/crawler_domain_detail/extraction_rules/edit_field_rule_flyout.tsx @@ -20,6 +20,7 @@ import { EuiFlyoutHeader, EuiForm, EuiFormRow, + EuiLink, EuiPanel, EuiRadioGroup, EuiSpacer, @@ -35,6 +36,7 @@ import { FieldType, MultipleObjectsHandling, } from '../../../../../../../../common/types/extraction_rules'; +import { docLinks } from '../../../../../../shared/doc_links'; interface EditFieldRuleFlyoutProps { fieldRule: ExtractionRuleFieldRule | null; @@ -274,6 +276,34 @@ export const EditFieldRuleFlyout: React.FC = ({ )} /> + + {field.value === FieldType.HTML ? ( + + {i18n.translate( + 'xpack.enterpriseSearch.content.indices.extractionRules.editRule.contentField.cssSelectorsLink', + { + defaultMessage: 'Learn more about CSS selectors', + } + )} + + ) : ( + + {i18n.translate( + 'xpack.enterpriseSearch.content.indices.extractionRules.editRule.contentField.urlPatternsLinks', + { + defaultMessage: 'Learn more about URL patterns', + } + )} + + )} )} @@ -450,6 +480,19 @@ export const EditFieldRuleFlyout: React.FC = ({ )} /> + + + {i18n.translate( + 'xpack.enterpriseSearch.content.indices.extractionRules.editRule.contentField.differentContentLink', + { + defaultMessage: 'Learn more about storing different kinds of content', + } + )} + diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/crawler_domain_detail/extraction_rules/extraction_rules.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/crawler_domain_detail/extraction_rules/extraction_rules.tsx index 5f3f734c24cd9..b8fdab12acbc6 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/crawler_domain_detail/extraction_rules/extraction_rules.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/crawler_domain_detail/extraction_rules/extraction_rules.tsx @@ -25,6 +25,7 @@ import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import { CANCEL_BUTTON_LABEL } from '../../../../../../shared/constants'; +import { docLinks } from '../../../../../../shared/doc_links'; import { EditExtractionRule } from './edit_extraction_rule'; import { ExtractionRulesLogic } from './extraction_rules_logic'; @@ -116,7 +117,7 @@ export const ExtractionRules: React.FC = () => { defaultMessage="Create a content extraction rule to change where the documents get their data during a sync. {learnMoreLink}" values={{ learnMoreLink: ( - + {i18n.translate( 'xpack.enterpriseSearch.content.crawler.extractionRules.learnMoreLink', { @@ -129,6 +130,7 @@ export const ExtractionRules: React.FC = () => { />

+ {editingExtractionRule ? ( { {!simplifiedMapping && i18n.translate('xpack.enterpriseSearch.content.searchIndex.documents.noMappings', { - defaultMessage: 'No mappings found for index', + defaultMessage: 'No documents found for index', })} {simplifiedMapping && } diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/doc_links/doc_links.ts b/x-pack/plugins/enterprise_search/public/applications/shared/doc_links/doc_links.ts index e2dcccec2adeb..1d71d74dd04fb 100644 --- a/x-pack/plugins/enterprise_search/public/applications/shared/doc_links/doc_links.ts +++ b/x-pack/plugins/enterprise_search/public/applications/shared/doc_links/doc_links.ts @@ -63,6 +63,7 @@ class DocLinks { public connectorsMongoDB: string; public connectorsMySQL: string; public connectorsWorkplaceSearch: string; + public crawlerExtractionRules: string; public crawlerManaging: string; public crawlerOverview: string; public deployTrainedModels: string; @@ -180,6 +181,7 @@ class DocLinks { this.connectorsMongoDB = ''; this.connectorsMySQL = ''; this.connectorsWorkplaceSearch = ''; + this.crawlerExtractionRules = ''; this.crawlerManaging = ''; this.crawlerOverview = ''; this.deployTrainedModels = ''; @@ -298,6 +300,7 @@ class DocLinks { this.connectorsMongoDB = docLinks.links.enterpriseSearch.connectorsMongoDB; this.connectorsMySQL = docLinks.links.enterpriseSearch.connectorsMySQL; this.connectorsWorkplaceSearch = docLinks.links.enterpriseSearch.connectorsWorkplaceSearch; + this.crawlerExtractionRules = docLinks.links.enterpriseSearch.crawlerExtractionRules; this.crawlerManaging = docLinks.links.enterpriseSearch.crawlerManaging; this.crawlerOverview = docLinks.links.enterpriseSearch.crawlerOverview; this.deployTrainedModels = docLinks.links.enterpriseSearch.deployTrainedModels; diff --git a/x-pack/plugins/fleet/common/openapi/bundled.json b/x-pack/plugins/fleet/common/openapi/bundled.json index c4082843e25c9..041c757075bbf 100644 --- a/x-pack/plugins/fleet/common/openapi/bundled.json +++ b/x-pack/plugins/fleet/common/openapi/bundled.json @@ -325,44 +325,120 @@ } } }, - "operationId": "list-all-packages" - }, - "parameters": [ - { - "in": "query", - "name": "excludeInstallStatus", - "schema": { - "type": "boolean", - "default": false + "operationId": "list-all-packages", + "parameters": [ + { + "in": "query", + "name": "excludeInstallStatus", + "schema": { + "type": "boolean", + "default": false + }, + "description": "Whether to exclude the install status of each package. Enabling this option will opt in to caching for the response via `cache-control` headers. If you don't need up-to-date installation info for a package, and are querying for a list of available packages, providing this flag can improve performance substantially." }, - "description": "Whether to exclude the install status of each package. Enabling this option will opt in to caching for the response via `cache-control` headers. If you don't need up-to-date installation info for a package, and are querying for a list of available packages, providing this flag can improve performance substantially." - }, - { - "in": "query", - "name": "prerelease", - "schema": { - "type": "boolean", - "default": false + { + "in": "query", + "name": "prerelease", + "schema": { + "type": "boolean", + "default": false + }, + "description": "Whether to return prerelease versions of packages (e.g. beta, rc, preview) " }, - "description": "Whether to return prerelease versions of packages (e.g. beta, rc, preview) " - }, - { - "in": "query", - "name": "experimental", - "deprecated": true, - "schema": { - "type": "boolean", - "default": false + { + "in": "query", + "name": "experimental", + "deprecated": true, + "schema": { + "type": "boolean", + "default": false + } + }, + { + "in": "query", + "name": "category", + "schema": { + "type": "string" + } + } + ] + }, + "post": { + "summary": "Packages - Install by upload", + "tags": [], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "oneOf": [ + { + "$ref": "#/components/schemas/kibana_saved_object_type" + }, + { + "$ref": "#/components/schemas/elasticsearch_asset_type" + } + ] + } + }, + "required": [ + "id", + "type" + ] + } + }, + "_meta": { + "type": "object", + "properties": { + "install_source": { + "type": "string", + "enum": [ + "upload", + "registry", + "bundled" + ] + } + } + } + }, + "required": [ + "items" + ] + } + } + } } }, - { - "in": "query", - "name": "category", - "schema": { - "type": "string" + "operationId": "install-package-by-upload", + "description": "", + "parameters": [ + { + "$ref": "#/components/parameters/kbn_xsrf" + } + ], + "requestBody": { + "content": { + "application/zip": { + "schema": { + "type": "string", + "format": "binary" + } + } } } - ] + } }, "/epm/packages/_bulk": { "post": { @@ -4882,6 +4958,33 @@ "items" ] }, + "kibana_saved_object_type": { + "title": "Kibana saved object asset type", + "type": "string", + "enum": [ + "dashboard", + "visualization", + "search", + "index-pattern", + "map", + "lens", + "ml-module", + "security-rule", + "csp_rule_template" + ] + }, + "elasticsearch_asset_type": { + "title": "Elasticsearch asset type", + "type": "string", + "enum": [ + "component_template", + "ingest_pipeline", + "index_template", + "ilm_policy", + "transform", + "data_stream_ilm_policy" + ] + }, "bulk_install_packages_response": { "title": "Bulk install packages response", "type": "object", @@ -5131,33 +5234,6 @@ "path" ] }, - "kibana_saved_object_type": { - "title": "Kibana saved object asset type", - "type": "string", - "enum": [ - "dashboard", - "visualization", - "search", - "index-pattern", - "map", - "lens", - "ml-module", - "security-rule", - "csp_rule_template" - ] - }, - "elasticsearch_asset_type": { - "title": "Elasticsearch asset type", - "type": "string", - "enum": [ - "component_template", - "ingest_pipeline", - "index_template", - "ilm_policy", - "transform", - "data_stream_ilm_policy" - ] - }, "package_usage_stats": { "title": "Package usage stats", "type": "object", diff --git a/x-pack/plugins/fleet/common/openapi/bundled.yaml b/x-pack/plugins/fleet/common/openapi/bundled.yaml index 654918ddc265d..576cc240f64bf 100644 --- a/x-pack/plugins/fleet/common/openapi/bundled.yaml +++ b/x-pack/plugins/fleet/common/openapi/bundled.yaml @@ -205,36 +205,82 @@ paths: schema: $ref: '#/components/schemas/get_packages_response' operationId: list-all-packages - parameters: - - in: query - name: excludeInstallStatus - schema: - type: boolean - default: false - description: >- - Whether to exclude the install status of each package. Enabling this - option will opt in to caching for the response via `cache-control` - headers. If you don't need up-to-date installation info for a package, - and are querying for a list of available packages, providing this flag - can improve performance substantially. - - in: query - name: prerelease - schema: - type: boolean - default: false - description: >- - Whether to return prerelease versions of packages (e.g. beta, rc, - preview) - - in: query - name: experimental - deprecated: true - schema: - type: boolean - default: false - - in: query - name: category - schema: - type: string + parameters: + - in: query + name: excludeInstallStatus + schema: + type: boolean + default: false + description: >- + Whether to exclude the install status of each package. Enabling this + option will opt in to caching for the response via `cache-control` + headers. If you don't need up-to-date installation info for a + package, and are querying for a list of available packages, + providing this flag can improve performance substantially. + - in: query + name: prerelease + schema: + type: boolean + default: false + description: >- + Whether to return prerelease versions of packages (e.g. beta, rc, + preview) + - in: query + name: experimental + deprecated: true + schema: + type: boolean + default: false + - in: query + name: category + schema: + type: string + post: + summary: Packages - Install by upload + tags: [] + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + properties: + items: + type: array + items: + type: object + properties: + id: + type: string + type: + oneOf: + - $ref: '#/components/schemas/kibana_saved_object_type' + - $ref: '#/components/schemas/elasticsearch_asset_type' + required: + - id + - type + _meta: + type: object + properties: + install_source: + type: string + enum: + - upload + - registry + - bundled + required: + - items + operationId: install-package-by-upload + description: '' + parameters: + - $ref: '#/components/parameters/kbn_xsrf' + requestBody: + content: + application/zip: + schema: + type: string + format: binary /epm/packages/_bulk: post: summary: Packages - Bulk install @@ -3055,6 +3101,29 @@ components: $ref: '#/components/schemas/search_result' required: - items + kibana_saved_object_type: + title: Kibana saved object asset type + type: string + enum: + - dashboard + - visualization + - search + - index-pattern + - map + - lens + - ml-module + - security-rule + - csp_rule_template + elasticsearch_asset_type: + title: Elasticsearch asset type + type: string + enum: + - component_template + - ingest_pipeline + - index_template + - ilm_policy + - transform + - data_stream_ilm_policy bulk_install_packages_response: title: Bulk install packages response type: object @@ -3228,29 +3297,6 @@ components: - format_version - download - path - kibana_saved_object_type: - title: Kibana saved object asset type - type: string - enum: - - dashboard - - visualization - - search - - index-pattern - - map - - lens - - ml-module - - security-rule - - csp_rule_template - elasticsearch_asset_type: - title: Elasticsearch asset type - type: string - enum: - - component_template - - ingest_pipeline - - index_template - - ilm_policy - - transform - - data_stream_ilm_policy package_usage_stats: title: Package usage stats type: object diff --git a/x-pack/plugins/fleet/common/openapi/paths/epm@packages.yaml b/x-pack/plugins/fleet/common/openapi/paths/epm@packages.yaml index a6332360283bd..d3ef2a279494e 100644 --- a/x-pack/plugins/fleet/common/openapi/paths/epm@packages.yaml +++ b/x-pack/plugins/fleet/common/openapi/paths/epm@packages.yaml @@ -9,31 +9,77 @@ get: schema: $ref: ../components/schemas/get_packages_response.yaml operationId: list-all-packages -parameters: - - in: query - name: excludeInstallStatus - schema: - type: boolean - default: false - description: >- - Whether to exclude the install status of each package. Enabling this option will opt in to - caching for the response via `cache-control` headers. If you don't need up-to-date installation - info for a package, and are querying for a list of available packages, providing this flag can - improve performance substantially. - - in: query - name: prerelease - schema: - type: boolean - default: false - description: >- - Whether to return prerelease versions of packages (e.g. beta, rc, preview) - - in: query - name: experimental - deprecated: true - schema: - type: boolean - default: false - - in: query - name: category - schema: - type: string + parameters: + - in: query + name: excludeInstallStatus + schema: + type: boolean + default: false + description: >- + Whether to exclude the install status of each package. Enabling this option will opt in to + caching for the response via `cache-control` headers. If you don't need up-to-date installation + info for a package, and are querying for a list of available packages, providing this flag can + improve performance substantially. + - in: query + name: prerelease + schema: + type: boolean + default: false + description: >- + Whether to return prerelease versions of packages (e.g. beta, rc, preview) + - in: query + name: experimental + deprecated: true + schema: + type: boolean + default: false + - in: query + name: category + schema: + type: string +post: + summary: Packages - Install by upload + tags: [] + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + properties: + items: + type: array + items: + type: object + properties: + id: + type: string + type: + oneOf: + - $ref: ../components/schemas/kibana_saved_object_type.yaml + - $ref: ../components/schemas/elasticsearch_asset_type.yaml + required: + - id + - type + _meta: + type: object + properties: + install_source: + type: string + enum: + - upload + - registry + - bundled + required: + - items + operationId: install-package-by-upload + description: '' + parameters: + - $ref: ../components/headers/kbn_xsrf.yaml + requestBody: + content: + application/zip: + schema: + type: string + format: binary \ No newline at end of file diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_advanced_fields/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_advanced_fields/index.tsx index 033359ff8f414..9dbc1754fd12d 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_advanced_fields/index.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_advanced_fields/index.tsx @@ -19,17 +19,15 @@ import { EuiFieldText, EuiSuperSelect, EuiToolTip, - EuiBadge, EuiRadioGroup, EuiText, EuiFlexGroup, EuiFlexItem, + EuiBetaBadge, } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import { i18n } from '@kbn/i18n'; -import styled from 'styled-components'; - import { dataTypes } from '../../../../../../../common/constants'; import type { NewAgentPolicy, AgentPolicy } from '../../../../types'; import { useStartServices } from '../../../../hooks'; @@ -48,10 +46,6 @@ import { useFleetServerHostsOptions, } from './hooks'; -const LeftPaddedEUIBadge = styled(EuiBadge)` - margin-left: 5px; -`; - interface Props { agentPolicy: Partial; updateAgentPolicy: (u: Partial) => void; @@ -476,18 +470,20 @@ export const AgentPolicyAdvancedOptionsContent: React.FunctionComponent = id="xpack.fleet.agentPolicyForm.unenrollmentTimeoutLabel" defaultMessage="Unenrollment timeout" /> +   - - - + } @@ -530,6 +526,8 @@ export const AgentPolicyAdvancedOptionsContent: React.FunctionComponent = id="xpack.fleet.agentPolicyForm.hostnameFormatLabel" defaultMessage="Host name format" /> +   + } description={ diff --git a/x-pack/plugins/fleet/server/services/epm/archive/parse.test.ts b/x-pack/plugins/fleet/server/services/epm/archive/parse.test.ts index 0c235ebb2c04d..444c095ace4b3 100644 --- a/x-pack/plugins/fleet/server/services/epm/archive/parse.test.ts +++ b/x-pack/plugins/fleet/server/services/epm/archive/parse.test.ts @@ -4,11 +4,23 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ +import type { ArchivePackage } from '../../../../common/types'; +import { PackageInvalidArchiveError } from '../../../errors'; + import { parseDefaultIngestPipeline, parseDataStreamElasticsearchEntry, parseTopLevelElasticsearchEntry, + _generatePackageInfoFromPaths, + parseAndVerifyArchive, + parseAndVerifyDataStreams, + parseAndVerifyStreams, + parseAndVerifyVars, + parseAndVerifyPolicyTemplates, + parseAndVerifyInputs, + parseAndVerifyReadme, } from './parse'; + describe('parseDefaultIngestPipeline', () => { it('Should return undefined for stream without any elasticsearch dir', () => { expect( @@ -268,3 +280,374 @@ describe('parseTopLevelElasticsearchEntry', () => { }); }); }); + +describe('parseAndVerifyArchive', () => { + it('should parse package successfully', async () => { + const packageInfo: ArchivePackage = await _generatePackageInfoFromPaths( + [ + 'x-pack/test/fleet_api_integration/apis/fixtures/package_verification/packages/src/input_only-0.1.0/docs/README.md', + 'x-pack/test/fleet_api_integration/apis/fixtures/package_verification/packages/src/input_only-0.1.0/manifest.yml', + ], + 'x-pack/test/fleet_api_integration/apis/fixtures/package_verification/packages/src/input_only-0.1.0' + ); + + expect(packageInfo).toEqual({ + categories: ['custom'], + description: 'Read lines from active log files with Elastic Agent.', + format_version: '1.0.0', + icons: [ + { + src: '/img/sample-logo.svg', + type: 'image/svg+xml', + }, + ], + license: 'basic', + name: 'input_only', + owner: { + github: 'elastic/integrations', + }, + policy_templates: [ + { + description: 'Collect your custom log files.', + input: 'logfile', + multiple: true, + name: 'first_policy_template', + template_path: 'input.yml.hbs', + title: 'Custom log file', + type: 'logs', + vars: [ + { + multi: true, + name: 'paths', + required: true, + show_user: true, + title: 'Paths', + type: 'text', + }, + { + multi: true, + name: 'tags', + required: true, + show_user: false, + title: 'Tags', + type: 'text', + }, + { + default: '72h', + name: 'ignore_older', + required: false, + title: 'Ignore events older than', + type: 'text', + }, + ], + }, + ], + release: 'beta', + screenshots: [ + { + size: '600x600', + src: '/img/sample-screenshot.png', + title: 'Sample screenshot', + type: 'image/png', + }, + ], + title: 'Custom Logs', + type: 'input', + version: '0.1.0', + }); + }); + + it('should throw on more than one top level dirs', () => { + expect(() => + parseAndVerifyArchive(['input_only-0.1.0/manifest.yml', 'dummy/manifest.yml'], {}) + ).toThrowError( + new PackageInvalidArchiveError('Package contains more than one top-level directory.') + ); + }); + + it('should throw on missing manifest file', () => { + expect(() => parseAndVerifyArchive(['input_only-0.1.0/test/manifest.yml'], {})).toThrowError( + new PackageInvalidArchiveError('Package must contain a top-level manifest.yml file.') + ); + }); + + it('should throw on invalid yml in manifest file', () => { + const buf = Buffer.alloc(1); + + expect(() => + parseAndVerifyArchive(['input_only-0.1.0/manifest.yml'], { + 'input_only-0.1.0/manifest.yml': buf, + }) + ).toThrowError('Could not parse top-level package manifest: YAMLException'); + }); + + it('should throw on missing required fields', () => { + const buf = Buffer.from( + ` +format_version: 1.0.0 +name: input_only +title: Custom Logs +description: >- + Read lines from active log files with Elastic Agent. +version: 0.1.0 + `, + 'utf8' + ); + + expect(() => + parseAndVerifyArchive(['input_only-0.1.0/manifest.yml'], { + 'input_only-0.1.0/manifest.yml': buf, + }) + ).toThrowError('Invalid top-level package manifest: one or more fields missing of '); + }); + + it('should throw on name or version mismatch', () => { + const buf = Buffer.from( + ` +format_version: 1.0.0 +name: input_only +title: Custom Logs +description: >- + Read lines from active log files with Elastic Agent. +version: 0.2.0 +owner: + github: elastic/integrations + `, + 'utf8' + ); + + expect(() => + parseAndVerifyArchive(['input_only-0.1.0/manifest.yml'], { + 'input_only-0.1.0/manifest.yml': buf, + }) + ).toThrowError( + 'Name input_only and version 0.2.0 do not match top-level directory input_only-0.1.0' + ); + }); +}); + +describe('parseAndVerifyDataStreams', () => { + it('should throw when data stream manifest file missing', async () => { + expect(() => + parseAndVerifyDataStreams({ + paths: ['input-only-0.1.0/data_stream/stream1/README.md'], + pkgName: 'input-only', + pkgVersion: '0.1.0', + manifests: {}, + }) + ).toThrowError("No manifest.yml file found for data stream 'stream1'"); + }); + + it('should throw when data stream manifest has invalid yaml', async () => { + expect(() => + parseAndVerifyDataStreams({ + paths: ['input-only-0.1.0/data_stream/stream1/manifest.yml'], + pkgName: 'input-only', + pkgVersion: '0.1.0', + manifests: { + 'input-only-0.1.0/data_stream/stream1/manifest.yml': Buffer.alloc(1), + }, + }) + ).toThrowError("Could not parse package manifest for data stream 'stream1': YAMLException"); + }); + + it('should throw when data stream manifest missing type', async () => { + expect(() => + parseAndVerifyDataStreams({ + paths: ['input-only-0.1.0/data_stream/stream1/manifest.yml'], + pkgName: 'input-only', + pkgVersion: '0.1.0', + manifests: { + 'input-only-0.1.0/data_stream/stream1/manifest.yml': Buffer.from( + ` + title: Custom Logs`, + 'utf8' + ), + }, + }) + ).toThrowError( + "Invalid manifest for data stream 'stream1': one or more fields missing of 'title', 'type'" + ); + }); + + it('should parse valid data stream', async () => { + expect( + parseAndVerifyDataStreams({ + paths: ['input-only-0.1.0/data_stream/stream1/manifest.yml'], + pkgName: 'input-only', + pkgVersion: '0.1.0', + manifests: { + 'input-only-0.1.0/data_stream/stream1/manifest.yml': Buffer.from( + ` + title: Custom Logs + type: logs + dataset: ds + version: 0.1.0`, + 'utf8' + ), + }, + }) + ).toEqual([ + { + dataset: 'ds', + elasticsearch: {}, + package: 'input-only', + path: 'stream1', + release: 'ga', + title: 'Custom Logs', + type: 'logs', + }, + ]); + }); +}); + +describe('parseAndVerifyStreams', () => { + it('should throw when stream manifest missing input', async () => { + expect(() => + parseAndVerifyStreams( + [ + { + title: 'stream', + }, + ], + 'input-only-0.1.0/data_stream/stream1' + ) + ).toThrowError( + 'Invalid manifest for data stream input-only-0.1.0/data_stream/stream1: stream is missing one or more fields of: input, title' + ); + }); + + it('should parse a valid stream', async () => { + expect( + parseAndVerifyStreams( + [ + { + title: 'stream', + input: 'logs', + description: 'desc', + vars: [ + { + name: 'var1', + type: 'string', + }, + ], + }, + ], + 'input-only-0.1.0/data_stream/stream1' + ) + ).toEqual([ + { + title: 'stream', + input: 'logs', + description: 'desc', + template_path: 'stream.yml.hbs', + vars: [ + { + name: 'var1', + type: 'string', + }, + ], + }, + ]); + }); +}); + +describe('parseAndVerifyVars', () => { + it('should throw when invalid var definition', () => { + expect(() => + parseAndVerifyVars( + [ + { + name: 'var1', + }, + ], + 'input-only-0.1.0/data_stream/stream1/var1' + ) + ).toThrowError( + 'Invalid var definition for input-only-0.1.0/data_stream/stream1/var1: one of mandatory fields \'name\' and \'type\' missing in var: {"name":"var1"}' + ); + }); + + it('should parse valid vars', () => { + expect( + parseAndVerifyVars( + [ + { + name: 'var1', + type: 'string', + title: 'Var', + }, + ], + 'input-only-0.1.0/data_stream/stream1/var1' + ) + ).toEqual([ + { + name: 'var1', + type: 'string', + title: 'Var', + }, + ]); + }); +}); + +describe('parseAndVerifyPolicyTemplates', () => { + it('should throw when missing mandatory fields', () => { + expect(() => + parseAndVerifyPolicyTemplates({ + policy_templates: [ + { + name: 'template1', + title: 'Template', + }, + ], + } as any) + ).toThrowError( + 'Invalid top-level manifest: one of mandatory fields \'name\', \'title\', \'description\' is missing in policy template: {"name":"template1","title":"Template"}' + ); + }); +}); + +describe('parseAndVerifyInputs', () => { + it('should throw when missing mandatory fields', () => { + expect(() => + parseAndVerifyInputs( + [ + { + type: 'logs', + }, + ], + '' + ) + ).toThrowError( + 'Invalid top-level manifest: one of mandatory fields \'type\', \'title\' missing in input: {"type":"logs"}' + ); + }); + + it('should return valid input', () => { + expect( + parseAndVerifyInputs( + [ + { + type: 'logs', + title: 'title', + vars: [ + { + name: 'var1', + type: 'string', + }, + ], + }, + ], + '' + ) + ).toEqual([{ title: 'title', type: 'logs', vars: [{ name: 'var1', type: 'string' }] }]); + }); +}); + +describe('parseAndVerifyReadme', () => { + it('should return readme path', () => { + expect( + parseAndVerifyReadme(['input-only-0.1.0/docs/README.md'], 'input-only', '0.1.0') + ).toEqual('/package/input-only/0.1.0/docs/README.md'); + }); +}); diff --git a/x-pack/plugins/fleet/server/services/epm/archive/parse.ts b/x-pack/plugins/fleet/server/services/epm/archive/parse.ts index 87c58c31f6c36..04ed584481205 100644 --- a/x-pack/plugins/fleet/server/services/epm/archive/parse.ts +++ b/x-pack/plugins/fleet/server/services/epm/archive/parse.ts @@ -173,7 +173,7 @@ export async function _generatePackageInfoFromPaths( return parseAndVerifyArchive(paths, manifests, topLevelDir); } -function parseAndVerifyArchive( +export function parseAndVerifyArchive( paths: string[], manifests: ManifestMap, topLevelDirOverride?: string @@ -264,7 +264,11 @@ function parseAndVerifyArchive( return parsed; } -function parseAndVerifyReadme(paths: string[], pkgName: string, pkgVersion: string): string | null { +export function parseAndVerifyReadme( + paths: string[], + pkgName: string, + pkgVersion: string +): string | null { const readmeRelPath = `/docs/README.md`; const readmePath = `${pkgName}-${pkgVersion}${readmeRelPath}`; return paths.includes(readmePath) ? `/package/${pkgName}/${pkgVersion}${readmeRelPath}` : null; @@ -421,7 +425,9 @@ export function parseAndVerifyVars(manifestVars: any[], location: string): Regis const { name, type, ...restOfProps } = manifestVar; if (!(name && type)) { throw new PackageInvalidArchiveError( - `Invalid var definition for ${location}: one of mandatory fields 'name' and 'type' missing in var: ${manifestVar}` + `Invalid var definition for ${location}: one of mandatory fields 'name' and 'type' missing in var: ${JSON.stringify( + manifestVar + )}` ); } @@ -460,7 +466,9 @@ export function parseAndVerifyPolicyTemplates( } = policyTemplate; if (!(name && policyTemplateTitle && description)) { throw new PackageInvalidArchiveError( - `Invalid top-level manifest: one of mandatory fields 'name', 'title', 'description' is missing in policy template: ${policyTemplate}` + `Invalid top-level manifest: one of mandatory fields 'name', 'title', 'description' is missing in policy template: ${JSON.stringify( + policyTemplate + )}` ); } let parsedInputs: RegistryInput[] | undefined = []; @@ -503,7 +511,9 @@ export function parseAndVerifyInputs(manifestInputs: any, location: string): Reg const { title: inputTitle, vars, ...restOfProps } = input; if (!(input.type && inputTitle)) { throw new PackageInvalidArchiveError( - `Invalid top-level manifest: one of mandatory fields 'type', 'title' missing in input: ${input}` + `Invalid top-level manifest: one of mandatory fields 'type', 'title' missing in input: ${JSON.stringify( + input + )}` ); } const parsedVars = parseAndVerifyVars(vars, location); diff --git a/x-pack/plugins/fleet/server/services/epm/packages/get.ts b/x-pack/plugins/fleet/server/services/epm/packages/get.ts index 1d048e2cf2d2c..83db878ef5b83 100644 --- a/x-pack/plugins/fleet/server/services/epm/packages/get.ts +++ b/x-pack/plugins/fleet/server/services/epm/packages/get.ts @@ -12,6 +12,7 @@ import type { Logger } from '@kbn/core/server'; import { installationStatuses, PACKAGE_POLICY_SAVED_OBJECT_TYPE, + SO_SEARCH_LIMIT, } from '../../../../common/constants'; import { isPackageLimited } from '../../../../common/services'; import type { @@ -137,6 +138,7 @@ export async function getPackageSavedObjects( return savedObjectsClient.find({ ...(options || {}), type: PACKAGES_SAVED_OBJECT_TYPE, + perPage: SO_SEARCH_LIMIT, }); } diff --git a/x-pack/plugins/index_management/public/application/components/mappings_editor/constants/parameters_definition.tsx b/x-pack/plugins/index_management/public/application/components/mappings_editor/constants/parameters_definition.tsx index 8c26701498f0d..d108c1427c9d8 100644 --- a/x-pack/plugins/index_management/public/application/components/mappings_editor/constants/parameters_definition.tsx +++ b/x-pack/plugins/index_management/public/application/components/mappings_editor/constants/parameters_definition.tsx @@ -683,7 +683,13 @@ export const PARAMETERS_DEFINITION: { [key in ParameterName]: ParameterDefinitio fieldConfig: { defaultValue: true, }, - schema: t.union([t.boolean, t.literal('strict')]), + schema: t.union([ + t.boolean, + t.literal('strict'), + t.literal('true'), + t.literal('false'), + t.literal('runtime'), + ]), }, dynamic_toggle: { fieldConfig: { diff --git a/x-pack/plugins/index_management/public/application/components/mappings_editor/lib/mappings_validator.test.ts b/x-pack/plugins/index_management/public/application/components/mappings_editor/lib/mappings_validator.test.ts index 2006f72a7e35d..a929cc9d29d0a 100644 --- a/x-pack/plugins/index_management/public/application/components/mappings_editor/lib/mappings_validator.test.ts +++ b/x-pack/plugins/index_management/public/application/components/mappings_editor/lib/mappings_validator.test.ts @@ -329,7 +329,7 @@ describe('Properties validator', () => { orientation: 'ccw', boost: 1.5, scaling_factor: 2.5, - dynamic: 'strict', // true | false | 'strict' are allowed + dynamic: 'strict', // true | false | 'strict' | 'true' | 'false' | 'runtime' are allowed enabled: true, format: 'strict_date_optional_time', analyzer: 'standard', @@ -367,16 +367,39 @@ describe('Properties validator', () => { type: 'object', dynamic: false, }, + goodField4: { + type: 'object', + dynamic: 'true', + }, + goodField5: { + type: 'object', + dynamic: 'false', + }, + goodField6: { + type: 'object', + dynamic: 'runtime', + }, }; const { value, errors } = validateProperties(properties as any); - expect(Object.keys(value)).toEqual(['wrongField', 'goodField', 'goodField2', 'goodField3']); + expect(Object.keys(value)).toEqual([ + 'wrongField', + 'goodField', + 'goodField2', + 'goodField3', + 'goodField4', + 'goodField5', + 'goodField6', + ]); expect(value.wrongField).toEqual({ type: 'text' }); // All parameters have been stripped out but the "type". expect(value.goodField).toEqual(properties.goodField); // All parameters are stil there. expect(value.goodField2).toEqual(properties.goodField2); expect(value.goodField3).toEqual(properties.goodField3); + expect(value.goodField4).toEqual(properties.goodField4); + expect(value.goodField5).toEqual(properties.goodField5); + expect(value.goodField6).toEqual(properties.goodField6); const allWrongParameters = Object.keys(properties.wrongField).filter((v) => v !== 'type'); expect(errors).toEqual( diff --git a/x-pack/plugins/index_management/public/application/components/mappings_editor/lib/mappings_validator.ts b/x-pack/plugins/index_management/public/application/components/mappings_editor/lib/mappings_validator.ts index 23528dd103ec0..3691367e4a8f2 100644 --- a/x-pack/plugins/index_management/public/application/components/mappings_editor/lib/mappings_validator.ts +++ b/x-pack/plugins/index_management/public/application/components/mappings_editor/lib/mappings_validator.ts @@ -207,7 +207,14 @@ export const mappingsConfigurationSchema = t.exact( t.partial({ properties: t.UnknownRecord, runtime: t.UnknownRecord, - dynamic: t.union([t.literal(true), t.literal(false), t.literal('strict')]), + dynamic: t.union([ + t.literal(true), + t.literal(false), + t.literal('strict'), + t.literal('true'), + t.literal('false'), + t.literal('runtime'), + ]), date_detection: t.boolean, numeric_detection: t.boolean, dynamic_date_formats: t.array(t.string), diff --git a/x-pack/plugins/infra/public/components/logging/log_text_stream/scrollable_log_text_stream_view.tsx b/x-pack/plugins/infra/public/components/logging/log_text_stream/scrollable_log_text_stream_view.tsx index 3cfce6589154d..4c11bd21daa19 100644 --- a/x-pack/plugins/infra/public/components/logging/log_text_stream/scrollable_log_text_stream_view.tsx +++ b/x-pack/plugins/infra/public/components/logging/log_text_stream/scrollable_log_text_stream_view.tsx @@ -95,12 +95,14 @@ export class ScrollableLogTextStreamView extends React.PureComponent< target: nextProps.target, targetId: getStreamItemId(getStreamItemBeforeTimeKey(nextProps.items, nextProps.target!)), items: nextItems, + isScrollLocked: false, }; } else if (!hasItems) { return { target: null, targetId: null, items: [], + isScrollLocked: false, }; } else if ( hasItems && @@ -109,10 +111,13 @@ export class ScrollableLogTextStreamView extends React.PureComponent< return { ...prevState, items: nextItems, + isScrollLocked: false, }; } - return null; + return { + isScrollLocked: false, + }; } constructor(props: ScrollableLogTextStreamViewProps) { @@ -337,9 +342,9 @@ export class ScrollableLogTextStreamView extends React.PureComponent< pagesBelow: number; fromScroll: boolean; }) => { - if (fromScroll && this.props.isStreaming) { + if (fromScroll) { this.setState({ - isScrollLocked: pagesBelow !== 0, + isScrollLocked: this.props.isStreaming ? pagesBelow > 0 : false, }); } this.props.reportVisibleInterval({ diff --git a/x-pack/plugins/infra/public/pages/metrics/hosts/components/kpi_charts/kpi_chart.tsx b/x-pack/plugins/infra/public/pages/metrics/hosts/components/kpi_charts/kpi_chart.tsx index 9d49e1fad782e..dc2a4d7d72c86 100644 --- a/x-pack/plugins/infra/public/pages/metrics/hosts/components/kpi_charts/kpi_chart.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/hosts/components/kpi_charts/kpi_chart.tsx @@ -95,7 +95,7 @@ export const KPIChart = ({ }; return ( - + {loading ? ( @@ -121,5 +121,6 @@ export const KPIChart = ({ const KPIChartStyled = styled(Chart)` .echMetric { border-radius: ${(p) => p.theme.eui.euiBorderRadius}; + pointer-events: none; } `; diff --git a/x-pack/plugins/maps/public/classes/sources/es_geo_grid_source/es_geo_grid_source.tsx b/x-pack/plugins/maps/public/classes/sources/es_geo_grid_source/es_geo_grid_source.tsx index 7102978602e90..dea665f904b01 100644 --- a/x-pack/plugins/maps/public/classes/sources/es_geo_grid_source/es_geo_grid_source.tsx +++ b/x-pack/plugins/maps/public/classes/sources/es_geo_grid_source/es_geo_grid_source.tsx @@ -98,7 +98,7 @@ export class ESGeoGridSource extends AbstractESAggSource implements IMvtVectorSo const resolutionPropChange = sourceChanges.find((sourceChange) => { return sourceChange.propName === 'resolution'; }); - if (resolutionPropChange) { + if (resolutionPropChange && 'getPropertiesDescriptor' in sourceEditorArgs.style) { const propertiesDescriptor = ( sourceEditorArgs.style as VectorStyle ).getPropertiesDescriptor(); diff --git a/x-pack/plugins/observability/public/pages/slos/index.tsx b/x-pack/plugins/observability/public/pages/slos/index.tsx index 17a069dfc885f..3212e27b6655e 100644 --- a/x-pack/plugins/observability/public/pages/slos/index.tsx +++ b/x-pack/plugins/observability/public/pages/slos/index.tsx @@ -67,7 +67,12 @@ export function SlosPage() { defaultMessage: 'SLOs', }), rightSideItems: [ - + {i18n.translate('xpack.observability.slos.sloList.pageHeader.createNewButtonLabel', { defaultMessage: 'Create new SLO', })} diff --git a/x-pack/plugins/observability/server/lib/collectors/fetcher.test.ts b/x-pack/plugins/observability/server/lib/collectors/fetcher.test.ts new file mode 100644 index 0000000000000..b099f986dbe05 --- /dev/null +++ b/x-pack/plugins/observability/server/lib/collectors/fetcher.test.ts @@ -0,0 +1,42 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { savedObjectsRepositoryMock, ElasticsearchClientMock } from '@kbn/core/server/mocks'; +import { CollectorFetchContext } from '@kbn/usage-collection-plugin/server'; +import { fetcher } from './fetcher'; + +let savedObjectClient: ReturnType; + +let closeMock: jest.Mock; +let esClient: ElasticsearchClientMock; + +describe('SLO usage collector fetcher', () => { + beforeEach(() => { + savedObjectClient = savedObjectsRepositoryMock.create(); + closeMock = jest.fn(); + }); + + it('without any existing slo', async () => { + savedObjectClient.createPointInTimeFinder.mockReturnValue({ + find: async function* find() { + return { + [Symbol.asyncIterator]: async () => {}, + next: () => {}, + }; + }, + close: closeMock, + }); + + const results = await fetcher({ + soClient: savedObjectClient, + esClient, + } as CollectorFetchContext); + + expect(closeMock).toHaveBeenCalled(); + expect(results.slo.total).toEqual(0); + }); +}); diff --git a/x-pack/plugins/observability/server/lib/collectors/fetcher.ts b/x-pack/plugins/observability/server/lib/collectors/fetcher.ts new file mode 100644 index 0000000000000..60c9454b71be3 --- /dev/null +++ b/x-pack/plugins/observability/server/lib/collectors/fetcher.ts @@ -0,0 +1,80 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor 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 { CollectorFetchContext } from '@kbn/usage-collection-plugin/server'; +import { StoredSLO } from '../../domain/models'; +import { SO_SLO_TYPE } from '../../saved_objects'; +import { Usage } from './type'; + +export const fetcher = async (context: CollectorFetchContext) => { + const finder = context.soClient.createPointInTimeFinder({ + type: SO_SLO_TYPE, + perPage: 100, + }); + + let usage: Usage['slo'] = { + total: 0, + by_status: { + enabled: 0, + disabled: 0, + }, + by_sli_type: {}, + by_rolling_duration: {}, + by_calendar_aligned_duration: {}, + by_budgeting_method: { + occurrences: 0, + timeslices: 0, + }, + }; + + for await (const response of finder.find()) { + usage = response.saved_objects.reduce((acc, so) => { + return { + ...acc, + total: acc.total + 1, + by_status: { + ...acc.by_status, + ...(so.attributes.enabled && { enabled: acc.by_status.enabled + 1 }), + ...(!so.attributes.enabled && { disabled: acc.by_status.disabled + 1 }), + }, + by_sli_type: { + ...acc.by_sli_type, + [so.attributes.indicator.type]: (acc.by_sli_type[so.attributes.indicator.type] ?? 0) + 1, + }, + by_rolling_duration: { + ...acc.by_rolling_duration, + ...('isRolling' in so.attributes.timeWindow && { + [so.attributes.timeWindow.duration]: + (acc.by_rolling_duration[so.attributes.timeWindow.duration] ?? 0) + 1, + }), + }, + by_calendar_aligned_duration: { + ...acc.by_calendar_aligned_duration, + ...('calendar' in so.attributes.timeWindow && { + [so.attributes.timeWindow.duration]: + (acc.by_calendar_aligned_duration[so.attributes.timeWindow.duration] ?? 0) + 1, + }), + }, + by_budgeting_method: { + ...acc.by_budgeting_method, + ...(so.attributes.budgetingMethod === 'occurrences' && { + occurrences: acc.by_budgeting_method.occurrences + 1, + }), + ...(so.attributes.budgetingMethod === 'timeslices' && { + timeslices: acc.by_budgeting_method.timeslices + 1, + }), + }, + }; + }, usage); + } + + await finder.close(); + + return { + slo: usage, + }; +}; diff --git a/x-pack/plugins/observability/server/lib/collectors/register.ts b/x-pack/plugins/observability/server/lib/collectors/register.ts new file mode 100644 index 0000000000000..59f364206a04d --- /dev/null +++ b/x-pack/plugins/observability/server/lib/collectors/register.ts @@ -0,0 +1,87 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { UsageCollectionSetup } from '@kbn/usage-collection-plugin/server'; +import { fetcher } from './fetcher'; +import type { Usage } from './type'; + +export function registerSloUsageCollector(usageCollection?: UsageCollectionSetup): void { + if (!usageCollection) { + return; + } + + const sloUsageCollector = usageCollection.makeUsageCollector({ + type: 'slo', + schema: { + slo: { + total: { + type: 'long', + _meta: { + description: 'The total number of slos in the cluster', + }, + }, + by_status: { + enabled: { + type: 'long', + _meta: { + description: 'The number of enabled slos in the cluster', + }, + }, + disabled: { + type: 'long', + _meta: { + description: 'The number of disabled slos in the cluster', + }, + }, + }, + by_sli_type: { + DYNAMIC_KEY: { + type: 'long', + _meta: { + description: 'The number of slos by sli type in the cluster', + }, + }, + }, + by_rolling_duration: { + DYNAMIC_KEY: { + type: 'long', + _meta: { + description: 'The number of slos by rolling duration in the cluster', + }, + }, + }, + by_calendar_aligned_duration: { + DYNAMIC_KEY: { + type: 'long', + _meta: { + description: 'The number of slos by calendar aligned duration in the cluster', + }, + }, + }, + by_budgeting_method: { + occurrences: { + type: 'long', + _meta: { + description: 'The number of slos by timeslices budgeting method in the cluster', + }, + }, + timeslices: { + type: 'long', + _meta: { + description: 'The number of slos by occurrences budgeting method in the cluster', + }, + }, + }, + }, + }, + isReady: () => true, + fetch: fetcher, + }); + + // register usage collector + usageCollection.registerCollector(sloUsageCollector); +} diff --git a/x-pack/plugins/observability/server/lib/collectors/type.ts b/x-pack/plugins/observability/server/lib/collectors/type.ts new file mode 100644 index 0000000000000..fd0af37d78e45 --- /dev/null +++ b/x-pack/plugins/observability/server/lib/collectors/type.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. + */ + +export interface Usage { + slo: { + total: number; + by_status: { + enabled: number; + disabled: number; + }; + by_sli_type: { + [sli_type: string]: number; + }; + by_rolling_duration: { + [duration: string]: number; + }; + by_calendar_aligned_duration: { + [duration: string]: number; + }; + by_budgeting_method: { + occurrences: number; + timeslices: number; + }; + }; +} diff --git a/x-pack/plugins/observability/server/plugin.ts b/x-pack/plugins/observability/server/plugin.ts index 9d58eb445a75e..0b8d3083126a4 100644 --- a/x-pack/plugins/observability/server/plugin.ts +++ b/x-pack/plugins/observability/server/plugin.ts @@ -23,6 +23,7 @@ import { mappingFromFieldMap } from '@kbn/rule-registry-plugin/common/mapping_fr import { ECS_COMPONENT_TEMPLATE_NAME } from '@kbn/rule-registry-plugin/common/assets'; import type { GuidedOnboardingPluginSetup } from '@kbn/guided-onboarding-plugin/server'; +import { UsageCollectionSetup } from '@kbn/usage-collection-plugin/server'; import { kubernetesGuideId, kubernetesGuideConfig, @@ -40,6 +41,7 @@ import { casesFeatureId, observabilityFeatureId } from '../common'; import { slo } from './saved_objects'; import { OBSERVABILITY_FEATURE_ID, RULE_REGISTRATION_CONTEXT } from './common/constants'; import { registerRuleTypes } from './lib/rules/register_rule_types'; +import { registerSloUsageCollector } from './lib/collectors/register'; export type ObservabilityPluginSetup = ReturnType; @@ -49,6 +51,7 @@ interface PluginSetup { spaces: SpacesPluginStart; alerting: PluginSetupContract; guidedOnboarding: GuidedOnboardingPluginSetup; + usageCollection?: UsageCollectionSetup; } export class ObservabilityPlugin implements Plugin { @@ -174,6 +177,8 @@ export class ObservabilityPlugin implements Plugin { }); registerRuleTypes(plugins.alerting, this.logger, ruleDataClient); + + registerSloUsageCollector(plugins.usageCollection); } const start = () => core.getStartServices().then(([coreStart]) => coreStart); diff --git a/x-pack/plugins/security_solution/common/constants.ts b/x-pack/plugins/security_solution/common/constants.ts index c4ebcd19eb082..d4df7e45c67be 100644 --- a/x-pack/plugins/security_solution/common/constants.ts +++ b/x-pack/plugins/security_solution/common/constants.ts @@ -501,3 +501,4 @@ export const DEFAULT_DETECTION_PAGE_FILTERS = [ export const CELL_ACTIONS_DEFAULT_TRIGGER = 'security-solution-default-cellActions'; export const CELL_ACTIONS_TIMELINE_TRIGGER = 'security-solution-timeline-cellActions'; +export const CELL_ACTIONS_DETAILS_FLYOUT_TRIGGER = 'security-solution-details-flyout-cellActions'; diff --git a/x-pack/plugins/security_solution/common/endpoint/data_generators/endpoint_action_generator.ts b/x-pack/plugins/security_solution/common/endpoint/data_generators/endpoint_action_generator.ts index 4a7eeb07fb82a..cb4848d79eb41 100644 --- a/x-pack/plugins/security_solution/common/endpoint/data_generators/endpoint_action_generator.ts +++ b/x-pack/plugins/security_solution/common/endpoint/data_generators/endpoint_action_generator.ts @@ -22,9 +22,15 @@ import type { ActionResponseOutput, ResponseActionGetFileOutputContent, ResponseActionGetFileParameters, + ResponseActionsExecuteParameters, + ResponseActionExecuteOutputContent, } from '../types'; import { ActivityLogItemTypes } from '../types'; -import { RESPONSE_ACTION_API_COMMANDS_NAMES } from '../service/response_actions/constants'; +import { + DEFAULT_EXECUTE_ACTION_TIMEOUT, + RESPONSE_ACTION_API_COMMANDS_NAMES, +} from '../service/response_actions/constants'; +import { getFileDownloadId } from '../service/response_actions/get_file_download_id'; export class EndpointActionGenerator extends BaseDataGenerator { /** Generate a random endpoint Action request (isolate or unisolate) */ @@ -80,8 +86,11 @@ export class EndpointActionGenerator extends BaseDataGenerator { }); const command = overrides?.EndpointActions?.data?.command ?? this.randomResponseActionCommand(); - let output: ActionResponseOutput = overrides - ?.EndpointActions?.data?.output as ActionResponseOutput; + let output: ActionResponseOutput< + ResponseActionGetFileOutputContent | ResponseActionExecuteOutputContent + > = overrides?.EndpointActions?.data?.output as ActionResponseOutput< + ResponseActionGetFileOutputContent | ResponseActionExecuteOutputContent + >; if (command === 'get-file') { if (!output) { @@ -104,6 +113,12 @@ export class EndpointActionGenerator extends BaseDataGenerator { } } + if (command === 'execute') { + if (!output) { + output = this.generateExecuteActionResponseOutput(); + } + } + return merge( { '@timestamp': timeStamp.toISOString(), @@ -197,6 +212,32 @@ export class EndpointActionGenerator extends BaseDataGenerator { } } + if (details.command === 'execute') { + if (!details.parameters) { + ( + details as ActionDetails< + ResponseActionExecuteOutputContent, + ResponseActionsExecuteParameters + > + ).parameters = { + command: (overrides.parameters as ResponseActionsExecuteParameters).command ?? 'ls -al', + timeout: + (overrides.parameters as ResponseActionsExecuteParameters).timeout ?? + DEFAULT_EXECUTE_ACTION_TIMEOUT, // 4hrs + }; + } + + if (!details.outputs || Object.keys(details.outputs).length === 0) { + details.outputs = { + [details.agents[0]]: this.generateExecuteActionResponseOutput({ + content: { + outputFileId: getFileDownloadId(details, details.agents[0]), + }, + }), + }; + } + } + return details as unknown as ActionDetails; } @@ -260,6 +301,37 @@ export class EndpointActionGenerator extends BaseDataGenerator { ); } + generateExecuteActionResponseOutput( + overrides?: Partial>> + ): ActionResponseOutput { + return merge( + { + type: 'json', + content: { + stdout: this.randomChoice([ + this.randomString(1280), + `-rw-r--r-- 1 elastic staff 458 Jan 26 09:10 doc.txt\ + -rw-r--r-- 1 elastic staff 298 Feb 2 09:10 readme.md`, + ]), + stderr: this.randomChoice([ + this.randomString(1280), + `error line 1\ + error line 2\ + error line 3 that is quite very long and will be truncated, and should not be visible in the UI\ + errorline4thathasalotmoretextthatdoesnotendfortestingpurposesrepeatalotoftexthereandkeepaddingmoreandmoretextwithoutendtheideabeingthatwedonotuseperiodsorcommassothattheconsoleuiisunabletobreakthislinewithoutsomecssrulessowiththislineweshouldbeabletotestthatwithgenerateddata`, + ]), + stdoutTruncated: true, + stderrTruncated: true, + shell_code: 0, + shell: 'bash', + cwd: '/some/path', + outputFileId: 'some-output-file-id', + }, + }, + overrides + ) as ActionResponseOutput; + } + randomFloat(): number { return this.random(); } diff --git a/x-pack/plugins/security_solution/common/endpoint/data_generators/endpoint_metadata_generator.ts b/x-pack/plugins/security_solution/common/endpoint/data_generators/endpoint_metadata_generator.ts index 3c370dc99aa62..d377e8ccd7dfd 100644 --- a/x-pack/plugins/security_solution/common/endpoint/data_generators/endpoint_metadata_generator.ts +++ b/x-pack/plugins/security_solution/common/endpoint/data_generators/endpoint_metadata_generator.ts @@ -35,6 +35,11 @@ export class EndpointMetadataGenerator extends BaseDataGenerator { capabilities.push('get_file'); } + // v8.8 introduced execute capability + if (gte(agentVersion, '8.8.0')) { + capabilities.push('execute'); + } + const hostMetadataDoc: HostMetadataInterface = { '@timestamp': ts, event: { diff --git a/x-pack/plugins/security_solution/common/endpoint/schema/actions.test.ts b/x-pack/plugins/security_solution/common/endpoint/schema/actions.test.ts index 4e544633fbf5c..477419213d5c8 100644 --- a/x-pack/plugins/security_solution/common/endpoint/schema/actions.test.ts +++ b/x-pack/plugins/security_solution/common/endpoint/schema/actions.test.ts @@ -450,18 +450,31 @@ describe('actions schemas', () => { }).toThrow(); }); - it('should accept at least 1 valid endpoint id and a command', () => { + it('should not accept optional negative integers for timeout with at least one endpoint_id and a command parameter', () => { expect(() => { ExecuteActionRequestSchema.body.validate({ endpoint_ids: ['endpoint_id'], parameters: { command: 'ls -al', + timeout: -1, }, }); - }).not.toThrow(); + }).toThrow(); }); - it('should accept at least one endpoint_id and a command parameter', () => { + it('should not accept optional invalid timeout with at least one endpoint_id and a command parameter', () => { + expect(() => { + ExecuteActionRequestSchema.body.validate({ + endpoint_ids: ['endpoint_id'], + parameters: { + command: 'ls -al', + timeout: '', + }, + }); + }).toThrow(); + }); + + it('should accept at least one valid endpoint id and a command', () => { expect(() => { ExecuteActionRequestSchema.body.validate({ endpoint_ids: ['endpoint_id'], @@ -472,16 +485,15 @@ describe('actions schemas', () => { }).not.toThrow(); }); - it('should not accept optional invalid timeout with at least one endpoint_id and a command parameter', () => { + it('should accept at least one endpoint_id and a command parameter', () => { expect(() => { ExecuteActionRequestSchema.body.validate({ endpoint_ids: ['endpoint_id'], parameters: { command: 'ls -al', - timeout: '', }, }); - }).toThrow(); + }).not.toThrow(); }); it('should also accept a valid timeout with at least one endpoint_id and a command parameter', () => { diff --git a/x-pack/plugins/security_solution/common/endpoint/schema/actions.ts b/x-pack/plugins/security_solution/common/endpoint/schema/actions.ts index 431572412c206..aad6789582923 100644 --- a/x-pack/plugins/security_solution/common/endpoint/schema/actions.ts +++ b/x-pack/plugins/security_solution/common/endpoint/schema/actions.ts @@ -65,11 +65,6 @@ export const KillOrSuspendProcessRequestSchema = { }), }; -export const ResponseActionBodySchema = schema.oneOf([ - NoParametersRequestSchema.body, - KillOrSuspendProcessRequestSchema.body, -]); - export const EndpointActionLogRequestSchema = { query: schema.object({ page: schema.number({ defaultValue: 1, min: 1 }), @@ -187,7 +182,19 @@ export const ExecuteActionRequestSchema = { } }, }), + /** + * The max timeout value before the command is killed. Number represents milliseconds + */ timeout: schema.maybe(schema.number({ min: 1 })), }), }), }; + +export type ExecuteActionRequestBody = TypeOf; + +export const ResponseActionBodySchema = schema.oneOf([ + NoParametersRequestSchema.body, + KillOrSuspendProcessRequestSchema.body, + EndpointActionGetFileSchema.body, + ExecuteActionRequestSchema.body, +]); 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 c9deb2776fa3b..8fda2971b2011 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 @@ -51,3 +51,7 @@ export const CONSOLE_RESPONSE_ACTION_COMMANDS = [ ] as const; export type ConsoleResponseActionCommands = typeof CONSOLE_RESPONSE_ACTION_COMMANDS[number]; + +// 4 hrs in milliseconds +// 4 * 60 * 60 * 1000 +export const DEFAULT_EXECUTE_ACTION_TIMEOUT = 14400000; diff --git a/x-pack/plugins/security_solution/common/endpoint/types/actions.ts b/x-pack/plugins/security_solution/common/endpoint/types/actions.ts index a6192124ce1ff..3caf4712f2f44 100644 --- a/x-pack/plugins/security_solution/common/endpoint/types/actions.ts +++ b/x-pack/plugins/security_solution/common/endpoint/types/actions.ts @@ -64,6 +64,21 @@ export interface ResponseActionGetFileOutputContent { }>; } +export interface ResponseActionExecuteOutputContent { + /* The truncated 'tail' output of the command */ + stdout: string; + /* The truncated 'tail' of any errors generated by the command */ + stderr: string; + stdoutTruncated: boolean; + stderrTruncated: boolean; + shell_code: number; + /* The shell used to execute the command */ + shell: string; + /* The current working directory used when the command was executed */ + cwd: string; + outputFileId: string; +} + export const ActivityLogItemTypes = { ACTION: 'action' as const, RESPONSE: 'response' as const, diff --git a/x-pack/plugins/security_solution/cypress/screens/timeline.ts b/x-pack/plugins/security_solution/cypress/screens/timeline.ts index ca938164fb2a6..670c709b67bee 100644 --- a/x-pack/plugins/security_solution/cypress/screens/timeline.ts +++ b/x-pack/plugins/security_solution/cypress/screens/timeline.ts @@ -60,9 +60,10 @@ export const HOST_KPI = '[data-test-subj="siem-timeline-host-kpi"]'; export const ID_HEADER_FIELD = '[data-test-subj="timeline"] [data-test-subj="header-text-_id"]'; -export const ID_TOGGLE_FIELD = '[data-test-subj="toggle-field-_id"]'; +export const ID_TOGGLE_FIELD = '[data-test-subj="actionItem-security_toggleColumn"]'; -export const ID_HOVER_ACTION_OVERFLOW_BTN = '[data-test-subj="more-actions-_id"]'; +export const ID_HOVER_ACTION_OVERFLOW_BTN = + '[data-test-subj="event-fields-table-row-_id"] [data-test-subj="showExtraActionsButton"]'; export const LOCKED_ICON = '[data-test-subj="timeline-date-picker-lock-button"]'; @@ -237,7 +238,7 @@ export const TIMELINE_TITLE_INPUT = '[data-test-subj="save-timeline-title"]'; export const TIMESTAMP_HEADER_FIELD = '[data-test-subj="header-text-@timestamp"]'; -export const TIMESTAMP_TOGGLE_FIELD = '[data-test-subj="toggle-field-@timestamp"]'; +export const TIMESTAMP_TOGGLE_FIELD = '[data-test-subj="actionItem-security_toggleColumn"]'; export const TOGGLE_TIMELINE_EXPAND_EVENT = '[data-test-subj="expand-event"]'; @@ -278,7 +279,8 @@ export const TIMELINE_TAB_CONTENT_EQL = '[data-test-subj="timeline-tab-content-e export const TIMELINE_TAB_CONTENT_GRAPHS_NOTES = '[data-test-subj="timeline-tab-content-graph-notes"]'; -export const TIMESTAMP_HOVER_ACTION_OVERFLOW_BTN = '[data-test-subj="more-actions-@timestamp"]'; +export const TIMESTAMP_HOVER_ACTION_OVERFLOW_BTN = + '[data-test-subj="event-fields-table-row-@timestamp"] [data-test-subj="showExtraActionsButton"]'; export const USER_KPI = '[data-test-subj="siem-timeline-user-kpi"]'; diff --git a/x-pack/plugins/security_solution/public/actions/filter/default/filter_in.tsx b/x-pack/plugins/security_solution/public/actions/filter/default/filter_in.tsx index 3afa93ab5d567..47e71ce290227 100644 --- a/x-pack/plugins/security_solution/public/actions/filter/default/filter_in.tsx +++ b/x-pack/plugins/security_solution/public/actions/filter/default/filter_in.tsx @@ -14,12 +14,12 @@ import { fieldHasCellActions } from '../../utils'; export const FILTER_IN = i18n.translate('xpack.securitySolution.actions.filterIn', { defaultMessage: 'Filter In', }); -const ID = 'security_filterIn'; +export const ACTION_ID = 'security_filterIn'; const ICON = 'plusInCircle'; export const createFilterInAction = ({ order }: { order?: number }): CellAction => ({ - id: ID, - type: ID, + id: ACTION_ID, + type: ACTION_ID, order, getIconType: (): string => ICON, getDisplayName: () => FILTER_IN, diff --git a/x-pack/plugins/security_solution/public/actions/filter/default/filter_out.tsx b/x-pack/plugins/security_solution/public/actions/filter/default/filter_out.tsx index 8dc4387206daa..b05f5e0b7a5ab 100644 --- a/x-pack/plugins/security_solution/public/actions/filter/default/filter_out.tsx +++ b/x-pack/plugins/security_solution/public/actions/filter/default/filter_out.tsx @@ -14,12 +14,12 @@ import { fieldHasCellActions } from '../../utils'; export const FILTER_OUT = i18n.translate('xpack.securitySolution.actions.filterOut', { defaultMessage: 'Filter Out', }); -const ID = 'security_filterOut'; +export const ACTION_ID = 'security_filterOut'; const ICON = 'minusInCircle'; export const createFilterOutAction = ({ order }: { order?: number }): CellAction => ({ - id: ID, - type: ID, + id: ACTION_ID, + type: ACTION_ID, order, getIconType: (): string => ICON, getDisplayName: () => FILTER_OUT, diff --git a/x-pack/plugins/security_solution/public/actions/register.ts b/x-pack/plugins/security_solution/public/actions/register.ts index c9bdf404b33b5..e113a242d6aa8 100644 --- a/x-pack/plugins/security_solution/public/actions/register.ts +++ b/x-pack/plugins/security_solution/public/actions/register.ts @@ -24,8 +24,10 @@ import { createLensAddToTimelineAction, createDefaultAddToTimelineAction } from import { createDefaultShowTopNAction } from './show_top_n'; import { CELL_ACTIONS_DEFAULT_TRIGGER, + CELL_ACTIONS_DETAILS_FLYOUT_TRIGGER, CELL_ACTIONS_TIMELINE_TRIGGER, } from '../../common/constants'; +import { createDefaultToggleColumnAction } from './toggle_column'; export const registerUIActions = ( plugins: StartPlugins, @@ -36,6 +38,7 @@ export const registerUIActions = ( registerLensActions(plugins.uiActions, store); registerDefaultActions(plugins.uiActions, store, history, services); registerTimelineActions(plugins.uiActions, store, history, services); + registerTableFlyoutActions(plugins.uiActions, store, history, services); }; const registerLensActions = (uiActions: UiActionsStart, store: SecurityAppStore) => { @@ -53,14 +56,14 @@ const registerDefaultActions = ( services: StartServices ) => { const filterInAction = createDefaultFilterInAction({ - order: 1, + order: 10, }); const filterOutAction = createDefaultFilterOutAction({ - order: 2, + order: 20, }); - const addToTimeline = createDefaultAddToTimelineAction({ store, order: 3 }); - const showTopNAction = createDefaultShowTopNAction({ store, history, services, order: 4 }); - const copyAction = createDefaultCopyToClipboardAction({ order: 5 }); + const addToTimeline = createDefaultAddToTimelineAction({ store, order: 30 }); + const showTopNAction = createDefaultShowTopNAction({ store, history, services, order: 40 }); + const copyAction = createDefaultCopyToClipboardAction({ order: 50 }); uiActions.registerTrigger({ id: CELL_ACTIONS_DEFAULT_TRIGGER, @@ -81,15 +84,15 @@ const registerTimelineActions = ( ) => { const filterInAction = createTimelineFilterInAction({ store, - order: 1, + order: 10, }); const filterOutAction = createTimelineFilterOutAction({ store, - order: 2, + order: 20, }); - const addToTimeline = createDefaultAddToTimelineAction({ store, order: 3 }); - const showTopNAction = createDefaultShowTopNAction({ store, history, services, order: 4 }); - const copyAction = createDefaultCopyToClipboardAction({ order: 5 }); + const addToTimeline = createDefaultAddToTimelineAction({ store, order: 30 }); + const showTopNAction = createDefaultShowTopNAction({ store, history, services, order: 40 }); + const copyAction = createDefaultCopyToClipboardAction({ order: 50 }); uiActions.registerTrigger({ id: CELL_ACTIONS_TIMELINE_TRIGGER, @@ -101,3 +104,36 @@ const registerTimelineActions = ( uiActions.addTriggerAction(CELL_ACTIONS_TIMELINE_TRIGGER, showTopNAction); uiActions.addTriggerAction(CELL_ACTIONS_TIMELINE_TRIGGER, addToTimeline); }; + +/** + * This actions show up in when a details flyout is open from a table field. + */ +const registerTableFlyoutActions = ( + uiActions: UiActionsStart, + store: SecurityAppStore, + history: H.History, + services: StartServices +) => { + const filterInAction = createDefaultFilterInAction({ + order: 10, + }); + const filterOutAction = createDefaultFilterOutAction({ + order: 20, + }); + + const addToTimeline = createDefaultAddToTimelineAction({ store, order: 30 }); + const toggleAction = createDefaultToggleColumnAction({ store, order: 35 }); + const showTopNAction = createDefaultShowTopNAction({ store, history, services, order: 40 }); + const copyAction = createDefaultCopyToClipboardAction({ order: 50 }); + + uiActions.registerTrigger({ + id: CELL_ACTIONS_DETAILS_FLYOUT_TRIGGER, + }); + + uiActions.addTriggerAction(CELL_ACTIONS_DETAILS_FLYOUT_TRIGGER, copyAction); + uiActions.addTriggerAction(CELL_ACTIONS_DETAILS_FLYOUT_TRIGGER, filterInAction); + uiActions.addTriggerAction(CELL_ACTIONS_DETAILS_FLYOUT_TRIGGER, filterOutAction); + uiActions.addTriggerAction(CELL_ACTIONS_DETAILS_FLYOUT_TRIGGER, showTopNAction); + uiActions.addTriggerAction(CELL_ACTIONS_DETAILS_FLYOUT_TRIGGER, addToTimeline); + uiActions.addTriggerAction(CELL_ACTIONS_DETAILS_FLYOUT_TRIGGER, toggleAction); +}; diff --git a/x-pack/plugins/security_solution/public/actions/show_top_n/default/show_top_n.test.tsx b/x-pack/plugins/security_solution/public/actions/show_top_n/default/show_top_n.test.tsx index 29430cfa2371a..26b7ab8e5c052 100644 --- a/x-pack/plugins/security_solution/public/actions/show_top_n/default/show_top_n.test.tsx +++ b/x-pack/plugins/security_solution/public/actions/show_top_n/default/show_top_n.test.tsx @@ -51,7 +51,7 @@ describe('createShowTopNAction', () => { services: mockServices, }); const context = { - field: { name: 'user.name', value: 'the-value', type: 'keyword' }, + field: { name: 'user.name', value: 'the-value', type: 'keyword', aggregatable: true }, trigger: { id: 'trigger' }, extraContentNodeRef: { current: element, @@ -90,6 +90,15 @@ describe('createShowTopNAction', () => { await showTopNAction.isCompatible({ ...context, field: { ...context.field, type: 'text' } }) ).toEqual(false); }); + + it('should return false if field is not aggregatable', async () => { + expect( + await showTopNAction.isCompatible({ + ...context, + field: { ...context.field, aggregatable: false }, + }) + ).toEqual(false); + }); }); describe('execute', () => { diff --git a/x-pack/plugins/security_solution/public/actions/show_top_n/default/show_top_n.tsx b/x-pack/plugins/security_solution/public/actions/show_top_n/default/show_top_n.tsx index 5a42d09943c6c..4ff35bea5118c 100644 --- a/x-pack/plugins/security_solution/public/actions/show_top_n/default/show_top_n.tsx +++ b/x-pack/plugins/security_solution/public/actions/show_top_n/default/show_top_n.tsx @@ -28,7 +28,7 @@ const SHOW_TOP = (fieldName: string) => defaultMessage: `Show top {fieldName}`, }); -const ID = 'security_showTopN'; +export const ACTION_ID = 'security_showTopN'; const ICON = 'visBarVertical'; const UNSUPPORTED_FIELD_TYPES = ['date', 'text']; @@ -56,8 +56,8 @@ export const createShowTopNAction = ({ }); return { - id: ID, - type: ID, + id: ACTION_ID, + type: ACTION_ID, order, getIconType: (): string => ICON, getDisplayName: ({ field }) => SHOW_TOP(field.name), @@ -65,7 +65,8 @@ export const createShowTopNAction = ({ isCompatible: async ({ field }) => isInSecurityApp(currentAppId) && fieldHasCellActions(field.name) && - !UNSUPPORTED_FIELD_TYPES.includes(field.type), + !UNSUPPORTED_FIELD_TYPES.includes(field.type) && + !!field.aggregatable, execute: async (context) => { const node = context.extraContentNodeRef?.current; if (!node) return; diff --git a/x-pack/plugins/security_solution/public/actions/toggle_column/default/toggle_column.test.ts b/x-pack/plugins/security_solution/public/actions/toggle_column/default/toggle_column.test.ts new file mode 100644 index 0000000000000..a62e0cedff19a --- /dev/null +++ b/x-pack/plugins/security_solution/public/actions/toggle_column/default/toggle_column.test.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 type { SecurityAppStore } from '../../../common/store/types'; +import { KibanaServices } from '../../../common/lib/kibana'; +import { TableId } from '../../../../common/types'; +import { createToggleColumnAction } from './toggle_column'; + +import type { CellActionExecutionContext } from '@kbn/cell-actions'; +import { mockGlobalState } from '../../../common/mock'; +import { dataTableActions } from '../../../common/store/data_table'; + +jest.mock('../../../common/lib/kibana'); + +const mockWarningToast = jest.fn(); +KibanaServices.get().notifications.toasts.addWarning = mockWarningToast; + +const mockDispatch = jest.fn(); +const mockGetState = jest.fn().mockReturnValue(mockGlobalState); +const store = { + dispatch: mockDispatch, + getState: mockGetState, +} as unknown as SecurityAppStore; + +const value = 'the-value'; +const fieldName = 'user.name'; +const context = { + field: { name: fieldName, value, type: 'text' }, + metadata: { + scopeId: TableId.test, + }, +} as unknown as CellActionExecutionContext; + +describe('Default createToggleColumnAction', () => { + const toggleColumnAction = createToggleColumnAction({ store, order: 1 }); + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('should return display name', () => { + expect(toggleColumnAction.getDisplayName(context)).toEqual('Toggle column in table'); + }); + + it('should return icon type', () => { + expect(toggleColumnAction.getIconType(context)).toEqual('listAdd'); + }); + + describe('isCompatible', () => { + it('should return false if scopeId is undefined', async () => { + expect( + await toggleColumnAction.isCompatible({ ...context, metadata: { scopeId: undefined } }) + ).toEqual(false); + }); + + it('should return false if scopeId is different than timeline and dataGrid', async () => { + expect( + await toggleColumnAction.isCompatible({ + ...context, + metadata: { scopeId: 'test-scopeId-1234' }, + }) + ).toEqual(false); + }); + + it('should return true if everything is okay', async () => { + expect(await toggleColumnAction.isCompatible(context)).toEqual(true); + }); + }); + + describe('execute', () => { + it('should remove column', async () => { + await toggleColumnAction.execute(context); + expect(mockDispatch).toHaveBeenCalledWith( + dataTableActions.removeColumn({ + columnId: fieldName, + id: TableId.test, + }) + ); + expect(mockWarningToast).not.toHaveBeenCalled(); + }); + + it('should add column', async () => { + const name = 'fake-field-name'; + await toggleColumnAction.execute({ ...context, field: { ...context.field, name } }); + expect(mockDispatch).toHaveBeenCalledWith( + dataTableActions.upsertColumn({ + column: { + columnHeaderType: 'not-filtered', + id: name, + initialWidth: 180, + }, + id: TableId.test, + index: 1, + }) + ); + expect(mockWarningToast).not.toHaveBeenCalled(); + }); + }); +}); diff --git a/x-pack/plugins/security_solution/public/actions/toggle_column/default/toggle_column.ts b/x-pack/plugins/security_solution/public/actions/toggle_column/default/toggle_column.ts new file mode 100644 index 0000000000000..5ebdad769f1d9 --- /dev/null +++ b/x-pack/plugins/security_solution/public/actions/toggle_column/default/toggle_column.ts @@ -0,0 +1,104 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; +import type { CellAction, CellActionExecutionContext } from '@kbn/cell-actions'; + +import { fieldHasCellActions } from '../../utils'; +import type { SecurityAppStore } from '../../../common/store'; +import { getScopedActions, isInTableScope, isTimelineScope } from '../../../helpers'; +import { timelineDefaults } from '../../../timelines/store/timeline/defaults'; +import { defaultColumnHeaderType, tableDefaults } from '../../../common/store/data_table/defaults'; +import { timelineSelectors } from '../../../timelines/store/timeline'; +import { dataTableSelectors } from '../../../common/store/data_table'; +import { DEFAULT_COLUMN_MIN_WIDTH } from '../../../timelines/components/timeline/body/constants'; + +export const ACTION_ID = 'security_toggleColumn'; +const ICON = 'listAdd'; + +export interface ShowTopNActionContext extends CellActionExecutionContext { + metadata?: { + scopeId?: string; + isObjectArray?: boolean; + }; +} + +export const COLUMN_TOGGLE = i18n.translate( + 'xpack.securitySolution.actions.toggleColumnToggle.label', + { + defaultMessage: 'Toggle column in table', + } +); + +export const NESTED_COLUMN = (field: string) => + i18n.translate('xpack.securitySolution.actions.toggleColumnToggle.nestedLabel', { + values: { field }, + defaultMessage: + 'The {field} field is an object, and is broken down into nested fields which can be added as columns', + }); + +export const createToggleColumnAction = ({ + store, + order, +}: { + store: SecurityAppStore; + order?: number; +}): CellAction => ({ + id: ACTION_ID, + type: ACTION_ID, + order, + getIconType: (): string => ICON, + getDisplayName: () => COLUMN_TOGGLE, + getDisplayNameTooltip: ({ field, metadata }) => + metadata?.isObjectArray ? NESTED_COLUMN(field.name) : COLUMN_TOGGLE, + isCompatible: async ({ field, metadata }) => { + return ( + fieldHasCellActions(field.name) && + !!metadata?.scopeId && + (isTimelineScope(metadata?.scopeId) || isInTableScope(metadata?.scopeId)) + ); + }, + execute: async ({ metadata, field }) => { + const scopeId = metadata?.scopeId; + + if (!scopeId) return; + + const selector = isTimelineScope(scopeId) + ? timelineSelectors.getTimelineByIdSelector() + : dataTableSelectors.getTableByIdSelector(); + + const defaults = isTimelineScope(scopeId) ? timelineDefaults : tableDefaults; + const { columns } = selector(store.getState(), scopeId) ?? defaults; + + const scopedActions = getScopedActions(scopeId); + + if (!scopedActions) { + return; + } + + if (columns.some((c) => c.id === field.name)) { + store.dispatch( + scopedActions.removeColumn({ + columnId: field.name, + id: scopeId, + }) + ); + } else { + store.dispatch( + scopedActions.upsertColumn({ + column: { + columnHeaderType: defaultColumnHeaderType, + id: field.name, + initialWidth: DEFAULT_COLUMN_MIN_WIDTH, + }, + id: scopeId, + index: 1, + }) + ); + } + }, +}); diff --git a/x-pack/plugins/security_solution/public/actions/toggle_column/index.tsx b/x-pack/plugins/security_solution/public/actions/toggle_column/index.tsx new file mode 100644 index 0000000000000..da04abfda3734 --- /dev/null +++ b/x-pack/plugins/security_solution/public/actions/toggle_column/index.tsx @@ -0,0 +1,8 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export { createToggleColumnAction as createDefaultToggleColumnAction } from './default/toggle_column'; diff --git a/x-pack/plugins/security_solution/public/common/components/event_details/alert_summary_view.test.tsx b/x-pack/plugins/security_solution/public/common/components/event_details/alert_summary_view.test.tsx index beda9c0aa4d13..4d55b7ab61cdc 100644 --- a/x-pack/plugins/security_solution/public/common/components/event_details/alert_summary_view.test.tsx +++ b/x-pack/plugins/security_solution/public/common/components/event_details/alert_summary_view.test.tsx @@ -26,6 +26,24 @@ jest.mock('../../../detection_engine/rule_management/logic/use_rule_with_fallbac }; }); +jest.mock('../../../detection_engine/rule_management/logic/use_rule_with_fallback', () => { + return { + useRuleWithFallback: jest.fn(), + }; +}); + +jest.mock('@kbn/cell-actions/src/hooks/use_load_actions', () => { + const actual = jest.requireActual('@kbn/cell-actions/src/hooks/use_load_actions'); + return { + ...actual, + useLoadActions: jest.fn().mockImplementation(() => ({ + value: [], + error: undefined, + loading: false, + })), + }; +}); + const props = { data: mockAlertDetailsData as TimelineEventsDetailsItem[], browserFields: mockBrowserFields, @@ -62,7 +80,8 @@ describe('AlertSummaryView', () => { ); - expect(getAllByTestId('hover-actions-filter-for').length).toBeGreaterThan(0); + + expect(getAllByTestId('inlineActions').length).toBeGreaterThan(0); }); }); @@ -87,7 +106,8 @@ describe('AlertSummaryView', () => { ); - expect(queryAllByTestId('hover-actions-filter-for').length).toEqual(0); + + expect(queryAllByTestId('inlineActions').length).toEqual(0); }); }); @@ -98,7 +118,7 @@ describe('AlertSummaryView', () => { ); - expect(queryAllByTestId('hover-actions-filter-for').length).toEqual(0); + expect(queryAllByTestId('inlineActions').length).toEqual(0); }); }); diff --git a/x-pack/plugins/security_solution/public/common/components/event_details/columns.test.tsx b/x-pack/plugins/security_solution/public/common/components/event_details/columns.test.tsx index d97f10154e034..0e30a803b546e 100644 --- a/x-pack/plugins/security_solution/public/common/components/event_details/columns.test.tsx +++ b/x-pack/plugins/security_solution/public/common/components/event_details/columns.test.tsx @@ -11,9 +11,21 @@ import { TestProviders } from '../../mock'; import { useMountAppended } from '../../utils/use_mount_appended'; import { mockBrowserFields } from '../../containers/source/mock'; import type { EventFieldsData } from './types'; -import { get } from 'lodash/fp'; jest.mock('../../lib/kibana'); + +jest.mock('@kbn/cell-actions/src/hooks/use_load_actions', () => { + const actual = jest.requireActual('@kbn/cell-actions/src/hooks/use_load_actions'); + return { + ...actual, + useLoadActions: jest.fn().mockImplementation(() => ({ + value: [], + error: undefined, + loading: false, + })), + }; +}); + interface Column { field: string; name: string | JSX.Element; @@ -59,95 +71,21 @@ describe('getColumns', () => { actionsColumn = getColumns(defaultProps)[0] as Column; }); - describe('filter in', () => { - test('it renders a filter for (+) button', () => { - const wrapper = mount( - {actionsColumn.render(testValue, testData)} - ) as ReactWrapper; - - expect(wrapper.find('[data-test-subj="hover-actions-filter-for"]').exists()).toBeTruthy(); - }); - }); - - describe('filter out', () => { - test('it renders a filter out (-) button', () => { - const wrapper = mount( - {actionsColumn.render(testValue, testData)} - ) as ReactWrapper; - - expect(wrapper.find('[data-test-subj="hover-actions-filter-out"]').exists()).toBeTruthy(); - }); - }); - - describe('overflow button', () => { - test('it renders an overflow button', () => { - const wrapper = mount( - {actionsColumn.render(testValue, testData)} - ) as ReactWrapper; - - expect(wrapper.find('[data-test-subj="more-actions-agent.id"]').exists()).toBeTruthy(); - }); - }); - - describe('column toggle', () => { - test('it renders a column toggle button', () => { - const wrapper = mount( - {actionsColumn.render(testValue, testData)} - ) as ReactWrapper; - - expect( - get(['items', 0, 'key'], wrapper.find('[data-test-subj="more-actions-agent.id"]').props()) - ).toEqual('hover-actions-toggle-column'); - }); - }); - - describe('add to timeline', () => { - test('it renders an add to timeline button', () => { - const wrapper = mount( - {actionsColumn.render(testValue, testData)} - ) as ReactWrapper; - - expect( - get(['items', 1, 'key'], wrapper.find('[data-test-subj="more-actions-agent.id"]').props()) - ).toEqual('hover-actions-add-timeline'); - }); - }); - - describe('topN', () => { - test('it renders a show topN button', () => { - const wrapper = mount( - {actionsColumn.render(testValue, testData)} - ) as ReactWrapper; - - expect( - get(['items', 2, 'key'], wrapper.find('[data-test-subj="more-actions-agent.id"]').props()) - ).toEqual('hover-actions-show-top-n'); - }); - }); - - describe('copy', () => { - test('it renders a copy button', () => { - const wrapper = mount( - {actionsColumn.render(testValue, testData)} - ) as ReactWrapper; + test('it renders inline actions', () => { + const wrapper = mount( + {actionsColumn.render(testValue, testData)} + ) as ReactWrapper; - expect( - get(['items', 3, 'key'], wrapper.find('[data-test-subj="more-actions-agent.id"]').props()) - ).toEqual('hover-actions-copy-button'); - }); + expect(wrapper.find('[data-test-subj="inlineActions"]').exists()).toBeTruthy(); }); - describe('does not render hover actions when readOnly prop is passed', () => { - test('it renders a filter for (+) button', () => { - actionsColumn = getColumns({ ...defaultProps, isReadOnly: true })[0] as Column; - const wrapper = mount( - {actionsColumn.render(testValue, testData)} - ) as ReactWrapper; + test('it does not render inline actions when readOnly prop is passed', () => { + actionsColumn = getColumns({ ...defaultProps, isReadOnly: true })[0] as Column; + const wrapper = mount( + {actionsColumn.render(testValue, testData)} + ) as ReactWrapper; - expect(wrapper.find('[data-test-subj="hover-actions-filter-for"]').exists()).toBeFalsy(); - expect(wrapper.find('[data-test-subj="hover-actions-filter-out"]').exists()).toBeFalsy(); - expect(wrapper.find('[data-test-subj="more-actions-agent.id"]').exists()).toBeFalsy(); - }); + expect(wrapper.find('[data-test-subj="inlineActions"]').exists()).toBeFalsy(); }); }); }); diff --git a/x-pack/plugins/security_solution/public/common/components/event_details/columns.tsx b/x-pack/plugins/security_solution/public/common/components/event_details/columns.tsx index 458db5ad38b52..7cf91c27d13b7 100644 --- a/x-pack/plugins/security_solution/public/common/components/event_details/columns.tsx +++ b/x-pack/plugins/security_solution/public/common/components/event_details/columns.tsx @@ -10,15 +10,14 @@ import { get } from 'lodash'; import memoizeOne from 'memoize-one'; import React from 'react'; import styled from 'styled-components'; +import { CellActions, CellActionsMode } from '@kbn/cell-actions'; import type { BrowserFields } from '../../containers/source'; -import type { OnUpdateColumns } from '../../../timelines/components/timeline/events'; import * as i18n from './translations'; import type { EventFieldsData } from './types'; -import type { ColumnHeaderOptions } from '../../../../common/types'; import type { BrowserField } from '../../../../common/search_strategy'; import { FieldValueCell } from './table/field_value_cell'; import { FieldNameCell } from './table/field_name_cell'; -import { ActionCell } from './table/action_cell'; +import { CELL_ACTIONS_DETAILS_FLYOUT_TRIGGER } from '../../../../common/constants'; const HoverActionsContainer = styled(EuiPanel)` align-items: center; @@ -35,28 +34,23 @@ const HoverActionsContainer = styled(EuiPanel)` HoverActionsContainer.displayName = 'HoverActionsContainer'; export const getFieldFromBrowserField = memoizeOne( - (keys: string[], browserFields: BrowserFields): BrowserField => get(browserFields, keys), + (keys: string[], browserFields: BrowserFields): BrowserField | undefined => + get(browserFields, keys), (newArgs, lastArgs) => newArgs[0].join() === lastArgs[0].join() ); export const getColumns = ({ browserFields, - columnHeaders, eventId, - onUpdateColumns, contextId, scopeId, - toggleColumn, getLinkValue, isDraggable, isReadOnly, }: { browserFields: BrowserFields; - columnHeaders: ColumnHeaderOptions[]; eventId: string; - onUpdateColumns: OnUpdateColumns; contextId: string; scopeId: string; - toggleColumn: (column: ColumnHeaderOptions) => void; getLinkValue: (field: string) => string | null; isDraggable?: boolean; isReadOnly?: boolean; @@ -74,24 +68,23 @@ export const getColumns = ({ truncateText: false, width: '132px', render: (values: string[] | null | undefined, data: EventFieldsData) => { - const label = data.isObjectArray - ? i18n.NESTED_COLUMN(data.field) - : i18n.VIEW_COLUMN(data.field); const fieldFromBrowserField = getFieldFromBrowserField( [data.category, 'fields', data.field], browserFields ); + return ( - ); }, @@ -109,18 +102,7 @@ export const getColumns = ({ sortable: true, truncateText: false, render: (field: string, data: EventFieldsData) => { - const fieldFromBrowserField = getFieldFromBrowserField( - [data.category, 'fields', field], - browserFields - ); - return ( - - ); + return ; }, }, { diff --git a/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/enrichment_summary.tsx b/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/enrichment_summary.tsx index 7c0c12145c376..5261eee10274a 100644 --- a/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/enrichment_summary.tsx +++ b/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/enrichment_summary.tsx @@ -7,15 +7,15 @@ import styled from 'styled-components'; import { get } from 'lodash/fp'; -import React from 'react'; +import React, { useMemo } from 'react'; import { EuiPanel, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import { partition } from 'lodash'; +import { CellActions, CellActionsMode } from '@kbn/cell-actions'; import * as i18n from './translations'; import type { CtiEnrichment } from '../../../../../common/search_strategy/security_solution/cti'; import { getEnrichmentIdentifiers, isInvestigationTimeEnrichment } from './helpers'; import type { FieldsData } from '../types'; -import { ActionCell } from '../table/action_cell'; import type { BrowserField, BrowserFields, @@ -23,6 +23,7 @@ import type { } from '../../../../../common/search_strategy'; import { FormattedFieldValue } from '../../../../timelines/components/timeline/body/renderers/formatted_field'; import { EnrichedDataRow, ThreatSummaryPanelHeader } from './threat_summary_view'; +import { CELL_ACTIONS_DETAILS_FLYOUT_TRIGGER } from '../../../../../common/constants'; export interface ThreatSummaryDescription { browserField: BrowserField; @@ -42,16 +43,16 @@ const EnrichmentFieldFeedName = styled.span` `; export const StyledEuiFlexGroup = styled(EuiFlexGroup)` - .hoverActions-active { - .timelines__hoverActionButton, - .securitySolution__hoverActionButton { - opacity: 1; - } + .inlineActions { + opacity: 0; + } + + .inlineActions-popoverOpen { + opacity: 1; } &:hover { - .timelines__hoverActionButton, - .securitySolution__hoverActionButton { + .inlineActions { opacity: 1; } } @@ -68,8 +69,23 @@ const EnrichmentDescription: React.FC = ({ isDraggable, isReadOnly, }) => { - if (!data || !value) return null; + const metadata = useMemo(() => ({ scopeId }), [scopeId]); + const field = useMemo( + () => + !data + ? null + : { + name: data.field, + value, + type: data.type, + aggregatable: browserField?.aggregatable, + }, + [browserField, data, value] + ); + + if (!data || !value || !field) return null; const key = `alert-details-value-formatted-field-value-${scopeId}-${eventId}-${data.field}-${value}-${index}-${feedName}`; + return ( @@ -95,14 +111,12 @@ const EnrichmentDescription: React.FC = ({ {value && !isReadOnly && ( - )} diff --git a/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/threat_summary_view.test.tsx b/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/threat_summary_view.test.tsx index 3f94b604ca47f..3e1ddd6b01202 100644 --- a/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/threat_summary_view.test.tsx +++ b/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/threat_summary_view.test.tsx @@ -24,7 +24,6 @@ jest.mock('../../../lib/kibana', () => ({ }), })); -jest.mock('../table/action_cell', () => ({ ActionCell: () => <> })); jest.mock('../table/field_name_cell'); const RISK_SCORE_DATA_ROWS = 2; diff --git a/x-pack/plugins/security_solution/public/common/components/event_details/event_fields_browser.test.tsx b/x-pack/plugins/security_solution/public/common/components/event_details/event_fields_browser.test.tsx index 6d9b2a98b3b18..bbff20aef925e 100644 --- a/x-pack/plugins/security_solution/public/common/components/event_details/event_fields_browser.test.tsx +++ b/x-pack/plugins/security_solution/public/common/components/event_details/event_fields_browser.test.tsx @@ -14,7 +14,6 @@ import { EventFieldsBrowser } from './event_fields_browser'; import { mockBrowserFields } from '../../containers/source/mock'; import { useMountAppended } from '../../utils/use_mount_appended'; import { TimelineTabs } from '../../../../common/types/timeline'; -import { get } from 'lodash/fp'; jest.mock('../../lib/kibana'); @@ -26,6 +25,18 @@ jest.mock('@elastic/eui', () => { }; }); +jest.mock('@kbn/cell-actions/src/hooks/use_load_actions', () => { + const actual = jest.requireActual('@kbn/cell-actions/src/hooks/use_load_actions'); + return { + ...actual, + useLoadActions: jest.fn().mockImplementation(() => ({ + value: [], + error: undefined, + loading: false, + })), + }; +}); + jest.mock('../link_to'); const mockDispatch = jest.fn(); @@ -84,55 +95,7 @@ describe('EventFieldsBrowser', () => { describe('Hover Actions', () => { const eventId = 'pEMaMmkBUV60JmNWmWVi'; - test('it renders a filter for (+) button', () => { - const wrapper = mount( - - - - ); - - expect(wrapper.find('[data-test-subj="hover-actions-filter-for"]').exists()).toBeTruthy(); - }); - - test('it renders a filter out (-) button', () => { - const wrapper = mount( - - - - ); - - expect(wrapper.find('[data-test-subj="hover-actions-filter-out"]').exists()).toBeTruthy(); - }); - - test('it renders an overflow button', () => { - const wrapper = mount( - - - - ); - - expect(wrapper.find('[data-test-subj="more-actions-@timestamp"]').exists()).toBeTruthy(); - }); - - test('it does not render hover actions when readOnly prop is passed', () => { + test('it renders inline actions', () => { const wrapper = mount( { eventId={eventId} scopeId="timeline-test" timelineTabType={TimelineTabs.query} - isReadOnly /> ); - - expect(wrapper.find('[data-test-subj="hover-actions-filter-for"]').exists()).toBeFalsy(); - expect(wrapper.find('[data-test-subj="hover-actions-filter-out"]').exists()).toBeFalsy(); - expect(wrapper.find('[data-test-subj="more-actions-@timestamp"]').exists()).toBeFalsy(); - }); - - test('it renders a column toggle button', () => { - const wrapper = mount( - - - - ); - - expect( - get(['items', 0, 'key'], wrapper.find('[data-test-subj="more-actions-@timestamp"]').props()) - ).toEqual('hover-actions-toggle-column'); - }); - - test('it renders an add to timeline button', () => { - const wrapper = mount( - - - - ); - - expect( - get(['items', 1, 'key'], wrapper.find('[data-test-subj="more-actions-@timestamp"]').props()) - ).toEqual('hover-actions-add-timeline'); - }); - - test('it renders a copy button', () => { - const wrapper = mount( - - - - ); - - expect( - get(['items', 2, 'key'], wrapper.find('[data-test-subj="more-actions-@timestamp"]').props()) - ).toEqual('hover-actions-copy-button'); + expect(wrapper.find('[data-test-subj="inlineActions"]').exists()).toBeTruthy(); }); }); diff --git a/x-pack/plugins/security_solution/public/common/components/event_details/event_fields_browser.tsx b/x-pack/plugins/security_solution/public/common/components/event_details/event_fields_browser.tsx index dcf303996d70c..e1068f53afd30 100644 --- a/x-pack/plugins/security_solution/public/common/components/event_details/event_fields_browser.tsx +++ b/x-pack/plugins/security_solution/public/common/components/event_details/event_fields_browser.tsx @@ -8,7 +8,6 @@ import { getOr, noop, sortBy } from 'lodash/fp'; import { EuiInMemoryTable } from '@elastic/eui'; import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'; -import { useDispatch } from 'react-redux'; import { rgba } from 'polished'; import styled from 'styled-components'; import { @@ -19,7 +18,7 @@ import { onKeyDownFocusHandler, } from '@kbn/timelines-plugin/public'; -import { getScopedActions, isInTableScope, isTimelineScope } from '../../../helpers'; +import { isInTableScope, isTimelineScope } from '../../../helpers'; import { tableDefaults } from '../../store/data_table/defaults'; import { dataTableSelectors } from '../../store/data_table'; import { ADD_TIMELINE_BUTTON_CLASS_NAME } from '../../../timelines/components/flyout/add_timeline_button'; @@ -32,7 +31,7 @@ import { timelineDefaults } from '../../../timelines/store/timeline/defaults'; import { getColumns } from './columns'; import { EVENT_FIELDS_TABLE_CLASS_NAME, onEventDetailsTabKeyPressed, search } from './helpers'; import { useDeepEqualSelector } from '../../hooks/use_selector'; -import type { ColumnHeaderOptions, TimelineTabs } from '../../../../common/types/timeline'; +import type { TimelineTabs } from '../../../../common/types/timeline'; interface Props { browserFields: BrowserFields; @@ -92,31 +91,23 @@ const StyledEuiInMemoryTable = styled(EuiInMemoryTable as any)` font: ${({ theme }) => theme.eui.euiFont}; } */ + .inlineActions { + opacity: 0; + } + .eventFieldsTable__tableRow { font-size: ${({ theme }) => theme.eui.euiFontSizeXS}; font-family: ${({ theme }) => theme.eui.euiCodeFontFamily}; - .hoverActions-active { - .timelines__hoverActionButton, - .securitySolution__hoverActionButton { - opacity: 1; - } + .inlineActions-popoverOpen { + opacity: 1; } &:hover { - .timelines__hoverActionButton, - .securitySolution__hoverActionButton { + .inlineActions { opacity: 1; } } - .timelines__hoverActionButton, - .securitySolution__hoverActionButton { - // TODO: Using this logic from discover - /* @include euiBreakpoint('m', 'l', 'xl') { - opacity: 0; - } */ - opacity: 0; - } } .eventFieldsTable__actionCell, @@ -171,7 +162,6 @@ const useFieldBrowserPagination = () => { export const EventFieldsBrowser = React.memo( ({ browserFields, data, eventId, isDraggable, timelineTabType, scopeId, isReadOnly }) => { const containerElement = useRef(null); - const dispatch = useDispatch(); const getScope = useMemo(() => { if (isTimelineScope(scopeId)) { return timelineSelectors.getTimelineByIdSelector(); @@ -209,31 +199,6 @@ export const EventFieldsBrowser = React.memo( }, [data, columnHeaders] ); - const scopedActions = getScopedActions(scopeId); - const toggleColumn = useCallback( - (column: ColumnHeaderOptions) => { - if (!scopedActions) { - return; - } - if (columnHeaders.some((c) => c.id === column.id)) { - dispatch( - scopedActions.removeColumn({ - columnId: column.id, - id: scopeId, - }) - ); - } else { - dispatch( - scopedActions.upsertColumn({ - column, - id: scopeId, - index: 1, - }) - ); - } - }, - [columnHeaders, dispatch, scopeId, scopedActions] - ); const onSetRowProps = useCallback(({ ariaRowindex, field }: TimelineEventsDetailsItem) => { const rowIndex = ariaRowindex != null ? { 'data-rowindex': ariaRowindex } : {}; @@ -244,41 +209,18 @@ export const EventFieldsBrowser = React.memo( }; }, []); - const onUpdateColumns = useCallback( - (columns) => { - if (scopedActions) { - dispatch(scopedActions.updateColumns({ id: scopeId, columns })); - } - }, - [dispatch, scopeId, scopedActions] - ); - const columns = useMemo( () => getColumns({ browserFields, - columnHeaders, eventId, - onUpdateColumns, contextId: `event-fields-browser-for-${scopeId}-${timelineTabType}`, scopeId, - toggleColumn, getLinkValue, isDraggable, isReadOnly, }), - [ - browserFields, - columnHeaders, - eventId, - onUpdateColumns, - scopeId, - timelineTabType, - toggleColumn, - getLinkValue, - isDraggable, - isReadOnly, - ] + [browserFields, eventId, scopeId, timelineTabType, getLinkValue, isDraggable, isReadOnly] ); const focusSearchInput = useCallback(() => { diff --git a/x-pack/plugins/security_solution/public/common/components/event_details/overview/__snapshots__/index.test.tsx.snap b/x-pack/plugins/security_solution/public/common/components/event_details/overview/__snapshots__/index.test.tsx.snap index 967c38e39907f..23d6db8adf75e 100644 --- a/x-pack/plugins/security_solution/public/common/components/event_details/overview/__snapshots__/index.test.tsx.snap +++ b/x-pack/plugins/security_solution/public/common/components/event_details/overview/__snapshots__/index.test.tsx.snap @@ -2,38 +2,30 @@ exports[`Event Details Overview Cards renders rows and spacers correctly 1`] = ` - .c6 { - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; -} - -.c6:focus-within .timelines__hoverActionButton, -.c6:focus-within .securitySolution__hoverActionButton { - opacity: 1; + .c3 { + text-transform: capitalize; } -.c6:hover .timelines__hoverActionButton, -.c6:hover .securitySolution__hoverActionButton { - opacity: 1; +.c4 { + margin-left: 8px; } -.c6 .timelines__hoverActionButton, -.c6 .securitySolution__hoverActionButton { - opacity: 0; +.c1.c1.c1 { + background-color: #25262e; + padding: 8px; + height: 78px; } -.c6 .timelines__hoverActionButton:focus, -.c6 .securitySolution__hoverActionButton:focus { +.c1:hover .inlineActions { opacity: 1; + width: auto; + -webkit-transform: translate(0); + -ms-transform: translate(0); + transform: translate(0); } -.c3 { - text-transform: capitalize; -} - -.c5 { +.c1 .inlineActions { + opacity: 0; width: 0; -webkit-transform: translate(6px); -ms-transform: translate(6px); @@ -41,26 +33,10 @@ exports[`Event Details Overview Cards renders rows and spacers correctly 1`] = ` -webkit-transition: -webkit-transform 50ms ease-in-out; -webkit-transition: transform 50ms ease-in-out; transition: transform 50ms ease-in-out; - margin-left: 8px; -} - -.c1.c1.c1 { - background-color: #25262e; - padding: 8px; - height: 78px; } -.c1 .hoverActions-active .timelines__hoverActionButton, -.c1 .hoverActions-active .securitySolution__hoverActionButton { +.c1 .inlineActions.inlineActions-popoverOpen { opacity: 1; -} - -.c1:hover .timelines__hoverActionButton, -.c1:hover .securitySolution__hoverActionButton { - opacity: 1; -} - -.c1:hover .c4 { width: auto; -webkit-transform: translate(0); -ms-transform: translate(0); @@ -116,7 +92,6 @@ exports[`Event Details Overview Cards renders rows and spacers correctly 1`] = ` aria-label="Click to change alert status" class="euiBadge c3 emotion-euiBadge-clickable" style="background-color: rgb(121, 170, 217); color: rgb(0, 0, 0);" - title="open" >
+
-

- You are in a dialog, containing options for field kibana.alert.workflow_status. Press tab to navigate options. Press escape to exit. -

- - Filter button - -
-
- - Filter out button - -
-
- Overflow button -
+ class="euiFlexGroup inlineActions emotion-euiFlexGroup-none-flexStart-flexStart-row" + data-test-subj="inlineActions" + /> +
@@ -206,45 +159,23 @@ exports[`Event Details Overview Cards renders rows and spacers correctly 1`] = ` 47
+
-

- You are in a dialog, containing options for field kibana.alert.risk_score. Press tab to navigate options. Press escape to exit. -

- - Filter button - -
-
- - Filter out button - -
-
- Overflow button -
+ class="euiFlexGroup inlineActions emotion-euiFlexGroup-none-flexStart-flexStart-row" + data-test-subj="inlineActions" + /> +
@@ -287,45 +218,23 @@ exports[`Event Details Overview Cards renders rows and spacers correctly 1`] = `
+
-

- You are in a dialog, containing options for field kibana.alert.rule.name. Press tab to navigate options. Press escape to exit. -

- - Filter button - -
-
- - Filter out button - -
-
- Overflow button -
+ class="euiFlexGroup inlineActions emotion-euiFlexGroup-none-flexStart-flexStart-row" + data-test-subj="inlineActions" + /> +
diff --git a/x-pack/plugins/security_solution/public/common/components/event_details/overview/index.test.tsx b/x-pack/plugins/security_solution/public/common/components/event_details/overview/index.test.tsx index 67083c3f5278a..128f6e6120467 100644 --- a/x-pack/plugins/security_solution/public/common/components/event_details/overview/index.test.tsx +++ b/x-pack/plugins/security_solution/public/common/components/event_details/overview/index.test.tsx @@ -6,7 +6,7 @@ */ import React from 'react'; -import { render } from '@testing-library/react'; +import { act, render } from '@testing-library/react'; import { Overview } from '.'; import { TestProviders } from '../../../mock'; @@ -23,55 +23,63 @@ jest.mock( ); describe('Event Details Overview Cards', () => { - it('renders all cards', () => { - const { getByText } = render( - - - - ); - - getByText('Status'); - getByText('Severity'); - getByText('Risk Score'); - getByText('Rule'); + it('renders all cards', async () => { + await act(async () => { + const { getByText } = render( + + + + ); + + getByText('Status'); + getByText('Severity'); + getByText('Risk Score'); + getByText('Rule'); + }); }); - it('renders only readOnly cards', () => { - const { getByText, queryByText } = render( - - - - ); + it('renders only readOnly cards', async () => { + await act(async () => { + const { getByText, queryByText } = render( + + + + ); - getByText('Severity'); - getByText('Risk Score'); + getByText('Severity'); + getByText('Risk Score'); - expect(queryByText('Status')).not.toBeInTheDocument(); - expect(queryByText('Rule')).not.toBeInTheDocument(); + expect(queryByText('Status')).not.toBeInTheDocument(); + expect(queryByText('Rule')).not.toBeInTheDocument(); + }); }); - it('renders all cards it has data for', () => { - const { getByText, queryByText } = render( - - - - ); + it('renders all cards it has data for', async () => { + await act(async () => { + const { getByText, queryByText } = render( + + + + ); - getByText('Status'); - getByText('Risk Score'); - getByText('Rule'); + getByText('Status'); + getByText('Risk Score'); + getByText('Rule'); - expect(queryByText('Severity')).not.toBeInTheDocument(); + expect(queryByText('Severity')).not.toBeInTheDocument(); + }); }); - it('renders rows and spacers correctly', () => { - const { asFragment } = render( - - - - ); + it('renders rows and spacers correctly', async () => { + await act(async () => { + const { asFragment } = render( + + + + ); - expect(asFragment()).toMatchSnapshot(); + expect(asFragment()).toMatchSnapshot(); + }); }); }); diff --git a/x-pack/plugins/security_solution/public/common/components/event_details/overview/index.tsx b/x-pack/plugins/security_solution/public/common/components/event_details/overview/index.tsx index ee6fbbeddbd0b..aebeb5c7a3578 100644 --- a/x-pack/plugins/security_solution/public/common/components/event_details/overview/index.tsx +++ b/x-pack/plugins/security_solution/public/common/components/event_details/overview/index.tsx @@ -6,7 +6,7 @@ */ import { EuiFlexGroup, EuiFlexItem, EuiSpacer } from '@elastic/eui'; -import React, { useMemo } from 'react'; +import React, { useMemo, Fragment } from 'react'; import { chunk, find } from 'lodash/fp'; import type { Severity } from '@kbn/securitysolution-io-ts-alerting-types'; @@ -213,10 +213,10 @@ export const Overview = React.memo( // Add a spacer between rows but not after the last row const addSpacer = index < length - 1; return ( - <> + {elements} {addSpacer && } - + ); })} diff --git a/x-pack/plugins/security_solution/public/common/components/event_details/overview/overview_card.test.tsx b/x-pack/plugins/security_solution/public/common/components/event_details/overview/overview_card.test.tsx index cf9600693681f..5f547a4690ea3 100644 --- a/x-pack/plugins/security_solution/public/common/components/event_details/overview/overview_card.test.tsx +++ b/x-pack/plugins/security_solution/public/common/components/event_details/overview/overview_card.test.tsx @@ -6,7 +6,7 @@ */ import React from 'react'; -import { render } from '@testing-library/react'; +import { act, render } from '@testing-library/react'; import { OverviewCardWithActions } from './overview_card'; import { createSecuritySolutionStorageMock, @@ -19,6 +19,7 @@ import { SeverityBadge } from '../../../../detections/components/rules/severity_ import type { State } from '../../../store'; import { createStore } from '../../../store'; import { TimelineId } from '../../../../../common/types'; +import { createAction } from '@kbn/ui-actions-plugin/public'; const state: State = { ...mockGlobalState, @@ -74,23 +75,33 @@ const props = { jest.mock('../../../lib/kibana'); -describe('OverviewCardWithActions', () => { - test('it renders correctly', () => { - const { getByText } = render( - - - - - - ); +const mockAction = createAction({ + id: 'test_action', + execute: async () => {}, + getIconType: () => 'test-icon', + getDisplayName: () => 'test-actions', +}); - // Headline - getByText('Severity'); +// jest.useFakeTimers(); + +describe('OverviewCardWithActions', () => { + test('it renders correctly', async () => { + await act(async () => { + const { getByText, findByTestId } = render( + + + + + + ); + // Headline + getByText('Severity'); - // Content - getByText('Medium'); + // Content + getByText('Medium'); - // Hover actions - getByText('Add To Timeline'); + // Hover actions + await findByTestId('actionItem-test_action'); + }); }); }); diff --git a/x-pack/plugins/security_solution/public/common/components/event_details/overview/overview_card.tsx b/x-pack/plugins/security_solution/public/common/components/event_details/overview/overview_card.tsx index 3df57015e702c..6acb86d21ba99 100644 --- a/x-pack/plugins/security_solution/public/common/components/event_details/overview/overview_card.tsx +++ b/x-pack/plugins/security_solution/public/common/components/event_details/overview/overview_card.tsx @@ -6,76 +6,52 @@ */ import { EuiFlexGroup, EuiPanel, EuiSpacer, EuiText } from '@elastic/eui'; -import React, { useState } from 'react'; +import React from 'react'; import { euiStyled } from '@kbn/kibana-react-plugin/common'; -import { ActionCell } from '../table/action_cell'; +import { CellActions, CellActionsMode } from '@kbn/cell-actions'; import type { EnrichedFieldInfo } from '../types'; +import { CELL_ACTIONS_DETAILS_FLYOUT_TRIGGER } from '../../../../../common/constants'; const ActionWrapper = euiStyled.div` - width: 0; - transform: translate(6px); - transition: transform 50ms ease-in-out; margin-left: ${({ theme }) => theme.eui.euiSizeS}; `; -const OverviewPanel = euiStyled(EuiPanel)<{ - $isPopoverVisible: boolean; -}>` +const OverviewPanel = euiStyled(EuiPanel)` &&& { background-color: ${({ theme }) => theme.eui.euiColorLightestShade}; padding: ${({ theme }) => theme.eui.euiSizeS}; height: 78px; } - & { - .hoverActions-active { - .timelines__hoverActionButton, - .securitySolution__hoverActionButton { - opacity: 1; - } + &:hover { + .inlineActions { + opacity: 1; + width: auto; + transform: translate(0); } + } - &:hover { - .timelines__hoverActionButton, - .securitySolution__hoverActionButton { - opacity: 1; - } + .inlineActions { + opacity: 0; + width: 0; + transform: translate(6px); + transition: transform 50ms ease-in-out; - ${ActionWrapper} { - width: auto; - transform: translate(0); - } + &.inlineActions-popoverOpen { + opacity: 1; + width: auto; + transform: translate(0); } - - ${(props) => - props.$isPopoverVisible && - ` - & ${ActionWrapper} { - width: auto; - transform: translate(0); - } - `} - } + } `; interface OverviewCardProps { - isPopoverVisible?: boolean; // Prevent the hover actions from collapsing on each other when not directly hovered on title: string; } -export const OverviewCard: React.FC = ({ - title, - children, - isPopoverVisible = false, // default to false as this behavior is only really necessary in the situation without an overflow -}) => ( - +export const OverviewCard: React.FC = ({ title, children }) => ( + {title} {children} @@ -106,25 +82,27 @@ export const OverviewCardWithActions: React.FC = ( contextId, dataTestSubj, enrichedFieldInfo, -}) => { - const [isPopoverVisisble, setIsPopoverVisible] = useState(false); - - return ( - - - {children} - - - - - - - ); -}; +}) => ( + + + {children} + + + + + + +); OverviewCardWithActions.displayName = 'OverviewCardWithActions'; diff --git a/x-pack/plugins/security_solution/public/common/components/event_details/table/action_cell.tsx b/x-pack/plugins/security_solution/public/common/components/event_details/table/action_cell.tsx deleted file mode 100644 index 1ffc30a6f858c..0000000000000 --- a/x-pack/plugins/security_solution/public/common/components/event_details/table/action_cell.tsx +++ /dev/null @@ -1,83 +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, { useContext } from 'react'; -import { TimelineContext } from '../../../../timelines/components/timeline'; -import { HoverActions } from '../../hover_actions'; -import { useActionCellDataProvider } from './use_action_cell_data_provider'; -import type { EnrichedFieldInfo } from '../types'; -import type { ColumnHeaderOptions } from '../../../../../common/types/timeline'; -import { useTopNPopOver } from '../../hover_actions/utils'; - -interface Props extends EnrichedFieldInfo { - contextId: string; - applyWidthAndPadding?: boolean; - disabled?: boolean; - getLinkValue?: (field: string) => string | null; - onFilterAdded?: () => void; - setIsPopoverVisible?: (isVisible: boolean) => void; - toggleColumn?: (column: ColumnHeaderOptions) => void; - hideAddToTimeline?: boolean; -} - -export const ActionCell: React.FC = React.memo( - ({ - applyWidthAndPadding = true, - contextId, - data, - eventId, - fieldFromBrowserField, - getLinkValue, - linkValue, - onFilterAdded, - setIsPopoverVisible, - scopeId, - toggleColumn, - values, - hideAddToTimeline, - }) => { - const actionCellConfig = useActionCellDataProvider({ - contextId, - eventId, - field: data.field, - fieldFormat: data.format, - fieldFromBrowserField, - fieldType: data.type, - isObjectArray: data.isObjectArray, - linkValue: (getLinkValue && getLinkValue(data.field)) ?? linkValue, - values, - }); - - const { closeTopN, toggleTopN, isShowingTopN } = useTopNPopOver(setIsPopoverVisible); - const { aggregatable, type } = fieldFromBrowserField || { aggregatable: false, type: '' }; - const { timelineId: timelineIdFind } = useContext(TimelineContext); - - return ( - - ); - } -); - -ActionCell.displayName = 'ActionCell'; diff --git a/x-pack/plugins/security_solution/public/common/components/event_details/table/field_name_cell.tsx b/x-pack/plugins/security_solution/public/common/components/event_details/table/field_name_cell.tsx index 415f538422d8f..1304c14f9044a 100644 --- a/x-pack/plugins/security_solution/public/common/components/event_details/table/field_name_cell.tsx +++ b/x-pack/plugins/security_solution/public/common/components/event_details/table/field_name_cell.tsx @@ -12,14 +12,12 @@ import { FieldIcon } from '@kbn/react-field'; import type { DataViewField } from '@kbn/data-views-plugin/common'; import * as i18n from '../translations'; import { getExampleText } from '../helpers'; -import type { BrowserField } from '../../../containers/source'; import type { EventFieldsData } from '../types'; import { getFieldTypeName } from './get_field_type_name'; export interface FieldNameCellProps { data: EventFieldsData; field: string; - fieldFromBrowserField: BrowserField; fieldMapping?: DataViewField; scripted?: boolean; } diff --git a/x-pack/plugins/security_solution/public/common/components/event_details/table/summary_table.tsx b/x-pack/plugins/security_solution/public/common/components/event_details/table/summary_table.tsx index dc170e831350c..8f80e64075657 100644 --- a/x-pack/plugins/security_solution/public/common/components/event_details/table/summary_table.tsx +++ b/x-pack/plugins/security_solution/public/common/components/event_details/table/summary_table.tsx @@ -10,21 +10,17 @@ import styled from 'styled-components'; import { EuiInMemoryTable } from '@elastic/eui'; export const SummaryTable = styled(EuiInMemoryTable as unknown as AnyStyledComponent)` - .timelines__hoverActionButton { + .inlineActions { opacity: 0; } .flyoutTableHoverActions { - .hoverActions-active { - .timelines__hoverActionButton, - .securitySolution__hoverActionButton { - opacity: 1; - } + .inlineActions-popoverOpen { + opacity: 1; } &:hover { - .timelines__hoverActionButton, - .securitySolution__hoverActionButton { + .inlineActions { opacity: 1; } } diff --git a/x-pack/plugins/security_solution/public/common/components/event_details/table/summary_value_cell.test.tsx b/x-pack/plugins/security_solution/public/common/components/event_details/table/summary_value_cell.test.tsx index 02ca675c0523e..afaaafc440138 100644 --- a/x-pack/plugins/security_solution/public/common/components/event_details/table/summary_value_cell.test.tsx +++ b/x-pack/plugins/security_solution/public/common/components/event_details/table/summary_value_cell.test.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { render, screen } from '@testing-library/react'; +import { act, render, screen } from '@testing-library/react'; import React from 'react'; import type { BrowserField } from '../../../containers/source'; @@ -76,38 +76,43 @@ const enrichedAgentStatusData: AlertSummaryRow['description'] = { describe('SummaryValueCell', () => { test('it should render', async () => { - render( - - - - ); + await act(async () => { + render( + + + + ); + }); + hostIpValues.forEach((ipValue) => expect(screen.getByText(ipValue)).toBeInTheDocument()); - expect(screen.getAllByTestId('test-filter-for')).toHaveLength(1); - expect(screen.getAllByTestId('test-filter-out')).toHaveLength(1); + expect(screen.getByTestId('inlineActions')).toBeInTheDocument(); }); describe('Without hover actions', () => { test('When in the timeline flyout with timelineId active', async () => { - render( - - - - ); + await act(async () => { + render( + + + + ); + }); + hostIpValues.forEach((ipValue) => expect(screen.getByText(ipValue)).toBeInTheDocument()); - expect(screen.queryByTestId('test-filter-for')).toBeNull(); - expect(screen.queryByTestId('test-filter-out')).toBeNull(); + expect(screen.queryByTestId('inlineActions')).not.toBeInTheDocument(); }); test('When rendering the host status field', async () => { - render( - - - - ); + await act(async () => { + render( + + + + ); + }); expect(screen.getByTestId('event-field-agent.status')).toBeInTheDocument(); - expect(screen.queryByTestId('test-filter-for')).toBeNull(); - expect(screen.queryByTestId('test-filter-out')).toBeNull(); + expect(screen.queryByTestId('inlineActions')).not.toBeInTheDocument(); }); }); }); diff --git a/x-pack/plugins/security_solution/public/common/components/event_details/table/summary_value_cell.tsx b/x-pack/plugins/security_solution/public/common/components/event_details/table/summary_value_cell.tsx index 66c288c028844..1affab60df8f8 100644 --- a/x-pack/plugins/security_solution/public/common/components/event_details/table/summary_value_cell.tsx +++ b/x-pack/plugins/security_solution/public/common/components/event_details/table/summary_value_cell.tsx @@ -7,11 +7,12 @@ import React from 'react'; -import { ActionCell } from './action_cell'; +import { CellActions, CellActionsMode } from '@kbn/cell-actions'; import { FieldValueCell } from './field_value_cell'; import type { AlertSummaryRow } from '../helpers'; import { hasHoverOrRowActions } from '../helpers'; import { TimelineId } from '../../../../../common/types'; +import { CELL_ACTIONS_DETAILS_FLYOUT_TRIGGER } from '../../../../../common/constants'; const style = { flexGrow: 0 }; @@ -40,16 +41,17 @@ export const SummaryValueCell: React.FC = ({ values={values} /> {scopeId !== TimelineId.active && !isReadOnly && hoverActionsEnabled && ( - 0 ? values[0] : '', + type: data.type, + aggregatable: fieldFromBrowserField?.aggregatable, + }} + triggerId={CELL_ACTIONS_DETAILS_FLYOUT_TRIGGER} + mode={CellActionsMode.INLINE} + visibleCellActions={3} + metadata={{ scopeId }} /> )} diff --git a/x-pack/plugins/security_solution/public/common/components/ml/__snapshots__/entity.test.tsx.snap b/x-pack/plugins/security_solution/public/common/components/ml/__snapshots__/entity.test.tsx.snap index 98e5faaf31f47..3c834b31ddfaa 100644 --- a/x-pack/plugins/security_solution/public/common/components/ml/__snapshots__/entity.test.tsx.snap +++ b/x-pack/plugins/security_solution/public/common/components/ml/__snapshots__/entity.test.tsx.snap @@ -4,6 +4,7 @@ exports[`entity_draggable renders correctly against snapshot 1`] = ` = ({ entityName, entityValue }) => name: entityName, value: entityValue, type: 'keyword', + aggregatable: true, }} triggerId={CELL_ACTIONS_DEFAULT_TRIGGER} mode={CellActionsMode.HOVER} diff --git a/x-pack/plugins/security_solution/public/common/components/ml/score/__snapshots__/score.test.tsx.snap b/x-pack/plugins/security_solution/public/common/components/ml/score/__snapshots__/score.test.tsx.snap index 3aa3f9ef67ac6..c244dd622d8a2 100644 --- a/x-pack/plugins/security_solution/public/common/components/ml/score/__snapshots__/score.test.tsx.snap +++ b/x-pack/plugins/security_solution/public/common/components/ml/score/__snapshots__/score.test.tsx.snap @@ -4,6 +4,7 @@ exports[`draggable_score renders correctly against snapshot 1`] = ` , }), diff --git a/x-pack/plugins/security_solution/public/common/components/ml/tables/get_anomalies_network_table_columns.tsx b/x-pack/plugins/security_solution/public/common/components/ml/tables/get_anomalies_network_table_columns.tsx index 3edd314d93ec2..6ce43c54392c7 100644 --- a/x-pack/plugins/security_solution/public/common/components/ml/tables/get_anomalies_network_table_columns.tsx +++ b/x-pack/plugins/security_solution/public/common/components/ml/tables/get_anomalies_network_table_columns.tsx @@ -41,6 +41,7 @@ export const getAnomaliesNetworkTableColumns = ( idPrefix: `anomalies-network-table-ip-${createCompoundAnomalyKey( anomaliesByNetwork.anomaly )}`, + aggregatable: true, fieldType: 'ip', render: (item) => , }), diff --git a/x-pack/plugins/security_solution/public/common/components/ml/tables/get_anomalies_user_table_columns.tsx b/x-pack/plugins/security_solution/public/common/components/ml/tables/get_anomalies_user_table_columns.tsx index ebd731b9a180a..4c687e4373787 100644 --- a/x-pack/plugins/security_solution/public/common/components/ml/tables/get_anomalies_user_table_columns.tsx +++ b/x-pack/plugins/security_solution/public/common/components/ml/tables/get_anomalies_user_table_columns.tsx @@ -38,6 +38,7 @@ export const getAnomaliesUserTableColumns = ( idPrefix: `anomalies-user-table-userName-${createCompoundAnomalyKey( anomaliesByUser.anomaly )}-userName`, + aggregatable: true, fieldType: 'keyword', render: (item) => , }), diff --git a/x-pack/plugins/security_solution/public/common/components/tables/helpers.test.tsx b/x-pack/plugins/security_solution/public/common/components/tables/helpers.test.tsx index 668d51562305a..faf9b0011dc52 100644 --- a/x-pack/plugins/security_solution/public/common/components/tables/helpers.test.tsx +++ b/x-pack/plugins/security_solution/public/common/components/tables/helpers.test.tsx @@ -31,6 +31,7 @@ describe('Table Helpers', () => { values: undefined, fieldName: 'attrName', idPrefix: 'idPrefix', + aggregatable: false, }); const { container } = render({rowItem}); @@ -43,6 +44,7 @@ describe('Table Helpers', () => { values: [''], fieldName: 'attrName', idPrefix: 'idPrefix', + aggregatable: false, }); const { container } = render({rowItem}); @@ -54,6 +56,7 @@ describe('Table Helpers', () => { values: null, fieldName: 'attrName', idPrefix: 'idPrefix', + aggregatable: false, displayCount: 0, }); const { container } = render({rowItem}); @@ -66,6 +69,7 @@ describe('Table Helpers', () => { values: ['item1'], fieldName: 'attrName', idPrefix: 'idPrefix', + aggregatable: false, render: renderer, }); const { container } = render({rowItem}); @@ -78,6 +82,7 @@ describe('Table Helpers', () => { values: [], fieldName: 'attrName', idPrefix: 'idPrefix', + aggregatable: false, }); const { container } = render({rowItems}); expect(container.textContent).toBe(getEmptyValue()); @@ -88,6 +93,7 @@ describe('Table Helpers', () => { values: items, fieldName: 'attrName', idPrefix: 'idPrefix', + aggregatable: false, displayCount: 2, }); const { queryAllByTestId, queryByTestId } = render({rowItems}); diff --git a/x-pack/plugins/security_solution/public/common/components/tables/helpers.tsx b/x-pack/plugins/security_solution/public/common/components/tables/helpers.tsx index 3e2ac32167334..c6fa5291e1e61 100644 --- a/x-pack/plugins/security_solution/public/common/components/tables/helpers.tsx +++ b/x-pack/plugins/security_solution/public/common/components/tables/helpers.tsx @@ -27,6 +27,7 @@ interface GetRowItemsWithActionsParams { render?: (item: string) => JSX.Element; displayCount?: number; maxOverflow?: number; + aggregatable: boolean; } export const getRowItemsWithActions = ({ @@ -37,6 +38,7 @@ export const getRowItemsWithActions = ({ render, displayCount = 5, maxOverflow = 5, + aggregatable, }: GetRowItemsWithActionsParams): JSX.Element => { if (values != null && values.length > 0) { const visibleItems = values.slice(0, displayCount).map((value, index) => { @@ -52,6 +54,7 @@ export const getRowItemsWithActions = ({ name: fieldName, value, type: fieldType, + aggregatable, }} > <>{render ? render(value) : defaultToEmptyTag(value)} @@ -69,6 +72,7 @@ export const getRowItemsWithActions = ({ idPrefix={idPrefix} maxOverflowItems={maxOverflow} overflowIndexStart={displayCount} + isAggregatable={aggregatable} /> ) : ( @@ -82,6 +86,7 @@ export const getRowItemsWithActions = ({ interface RowItemOverflowProps { fieldName: string; fieldType: string; + isAggregatable?: boolean; values: string[]; idPrefix: string; maxOverflowItems: number; @@ -92,6 +97,7 @@ export const RowItemOverflowComponent: React.FC = ({ fieldName, values, fieldType, + isAggregatable, idPrefix, maxOverflowItems = 5, overflowIndexStart = 5, @@ -104,6 +110,7 @@ export const RowItemOverflowComponent: React.FC = ({ (null); const filePickerId = useGeneratedHtmlId({ prefix: 'filePicker' }); - const [file, setFile] = useState(null); + const [files, setFiles] = useState(null); const [overwrite, setOverwrite] = useState(false); const [asNewList, setAsNewList] = useState(false); const [alreadyExistingItem, setAlreadyExistingItem] = useState(false); @@ -62,7 +62,7 @@ export const ImportExceptionListFlyout = React.memo( filePickerRef.current.fileInput.value = ''; filePickerRef.current.handleChange(); } - setFile(null); + setFiles(null); setAlreadyExistingItem(false); setAsNewList(false); setOverwrite(false); @@ -71,31 +71,30 @@ export const ImportExceptionListFlyout = React.memo( const ctrl = useRef(new AbortController()); const handleImportExceptionList = useCallback(() => { - if (!importExceptionListState.loading && file) { + if (!importExceptionListState.loading && files) { ctrl.current = new AbortController(); - importExceptionList({ - file, - http, - signal: ctrl.current.signal, - overwrite, - overwriteExceptions: overwrite, - asNewList, - }); + Array.from(files).forEach((file) => + importExceptionList({ + file, + http, + signal: ctrl.current.signal, + overwrite, + overwriteExceptions: overwrite, + asNewList, + }) + ); } - }, [asNewList, file, http, importExceptionList, importExceptionListState.loading, overwrite]); + }, [asNewList, files, http, importExceptionList, importExceptionListState.loading, overwrite]); const handleImportSuccess = useCallback( (response: ImportExceptionsResponseSchema) => { resetForm(); addSuccess({ - text: i18n.uploadSuccessMessage(file?.name ?? ''), title: i18n.UPLOAD_SUCCESS_TITLE, }); handleRefresh(); }, - // looking for file.name but we don't wan't to render success every time file name changes. - // eslint-disable-next-line react-hooks/exhaustive-deps [resetForm, addSuccess, handleRefresh] ); @@ -142,8 +141,8 @@ export const ImportExceptionListFlyout = React.memo( importExceptionListState?.result, importExceptionListState?.result?.errors, ]); - const handleFileChange = useCallback((files: FileList | null) => { - setFile(files?.item(0) ?? null); + const handleFileChange = useCallback((inputFiles: FileList | null) => { + setFiles(inputFiles ?? null); }, []); return ( setDisplayImportListFlyout(false)}> @@ -205,7 +204,7 @@ export const ImportExceptionListFlyout = React.memo( {i18n.UPLOAD_BUTTON} diff --git a/x-pack/plugins/security_solution/public/explore/components/authentication/helpers.tsx b/x-pack/plugins/security_solution/public/explore/components/authentication/helpers.tsx index 797167a54207b..4069d1c3635f4 100644 --- a/x-pack/plugins/security_solution/public/explore/components/authentication/helpers.tsx +++ b/x-pack/plugins/security_solution/public/explore/components/authentication/helpers.tsx @@ -103,6 +103,7 @@ const LAST_SUCCESSFUL_SOURCE_COLUMN: Columns , }), @@ -116,6 +117,7 @@ const LAST_SUCCESSFUL_DESTINATION_COLUMN: Columns , }), @@ -140,6 +142,7 @@ const LAST_FAILED_SOURCE_COLUMN: Columns , }), @@ -153,6 +156,7 @@ const LAST_FAILED_DESTINATION_COLUMN: Columns , }), @@ -168,6 +172,7 @@ const USER_COLUMN: Columns = { fieldName: 'user.name', idPrefix: `authentications-table-${node._id}-userName`, fieldType: 'keyword', + aggregatable: true, render: (item) => , }), }; @@ -182,6 +187,7 @@ const HOST_COLUMN: Columns = { fieldName: 'host.name', idPrefix: `authentications-table-${node._id}-hostName`, fieldType: 'keyword', + aggregatable: true, render: (item) => , }), }; diff --git a/x-pack/plugins/security_solution/public/explore/hosts/components/uncommon_process_table/index.tsx b/x-pack/plugins/security_solution/public/explore/hosts/components/uncommon_process_table/index.tsx index 81c1edebf04c3..8be7e9d0ac251 100644 --- a/x-pack/plugins/security_solution/public/explore/hosts/components/uncommon_process_table/index.tsx +++ b/x-pack/plugins/security_solution/public/explore/hosts/components/uncommon_process_table/index.tsx @@ -152,6 +152,7 @@ const getUncommonColumns = (): UncommonProcessTableColumns => [ values: node.process.name, fieldName: 'process.name', fieldType: 'keyword', + aggregatable: true, idPrefix: `uncommon-process-table-${node._id}-processName`, }), }, @@ -181,6 +182,7 @@ const getUncommonColumns = (): UncommonProcessTableColumns => [ values: getHostNames(node.hosts), fieldName: 'host.name', fieldType: 'keyword', + aggregatable: true, idPrefix: `uncommon-process-table-${node._id}-processHost`, render: (item) => , }), @@ -195,6 +197,7 @@ const getUncommonColumns = (): UncommonProcessTableColumns => [ values: node.process != null ? node.process.args : null, fieldName: 'process.args', fieldType: 'keyword', + aggregatable: true, idPrefix: `uncommon-process-table-${node._id}-processArgs`, render: (item) => , displayCount: 1, @@ -209,6 +212,7 @@ const getUncommonColumns = (): UncommonProcessTableColumns => [ values: node.user != null ? node.user.name : null, fieldName: 'user.name', fieldType: 'keyword', + aggregatable: true, idPrefix: `uncommon-process-table-${node._id}-processUser`, }), }, diff --git a/x-pack/plugins/security_solution/public/explore/network/components/network_http_table/columns.tsx b/x-pack/plugins/security_solution/public/explore/network/components/network_http_table/columns.tsx index 76aafb69da9aa..8556dc5298cc3 100644 --- a/x-pack/plugins/security_solution/public/explore/network/components/network_http_table/columns.tsx +++ b/x-pack/plugins/security_solution/public/explore/network/components/network_http_table/columns.tsx @@ -39,6 +39,7 @@ export const getNetworkHttpColumns = (tableId: string): NetworkHttpColumns => [ values: methods, idPrefix: escapeDataProviderId(`${tableId}-table-methods-${path}`), fieldType: 'keyword', + aggregatable: true, displayCount: 3, }) : getEmptyTagValue(); @@ -53,6 +54,7 @@ export const getNetworkHttpColumns = (tableId: string): NetworkHttpColumns => [ fieldName: 'url.domain', idPrefix: escapeDataProviderId(`${tableId}-table-domains-${path}`), fieldType: 'keyword', + aggregatable: true, }) : getEmptyTagValue(), }, @@ -66,6 +68,7 @@ export const getNetworkHttpColumns = (tableId: string): NetworkHttpColumns => [ fieldName: 'url.path', idPrefix: escapeDataProviderId(`${tableId}-table-path-${path}`), fieldType: 'keyword', + aggregatable: true, }) : getEmptyTagValue(), }, @@ -78,6 +81,7 @@ export const getNetworkHttpColumns = (tableId: string): NetworkHttpColumns => [ fieldName: 'http.response.status_code', idPrefix: escapeDataProviderId(`${tableId}-table-statuses-${path}`), fieldType: 'keyword', + aggregatable: true, displayCount: 3, }) : getEmptyTagValue(), @@ -91,6 +95,7 @@ export const getNetworkHttpColumns = (tableId: string): NetworkHttpColumns => [ fieldName: 'host.name', idPrefix: escapeDataProviderId(`${tableId}-table-lastHost-${path}`), fieldType: 'keyword', + aggregatable: true, }) : getEmptyTagValue(), }, @@ -103,6 +108,7 @@ export const getNetworkHttpColumns = (tableId: string): NetworkHttpColumns => [ fieldName: 'source.ip', idPrefix: escapeDataProviderId(`${tableId}-table-lastSourceIp-${path}`), fieldType: 'keyword', + aggregatable: true, render: () => , }) : getEmptyTagValue(), diff --git a/x-pack/plugins/security_solution/public/explore/network/components/network_top_n_flow_table/columns.tsx b/x-pack/plugins/security_solution/public/explore/network/components/network_top_n_flow_table/columns.tsx index fdef6c214e4f5..cdb323640972d 100644 --- a/x-pack/plugins/security_solution/public/explore/network/components/network_top_n_flow_table/columns.tsx +++ b/x-pack/plugins/security_solution/public/explore/network/components/network_top_n_flow_table/columns.tsx @@ -117,6 +117,7 @@ export const getNetworkTopNFlowColumns = ( values: domains, fieldName: domainAttr, fieldType: 'keyword', + aggregatable: true, idPrefix: id, displayCount: 1, }); @@ -140,6 +141,7 @@ export const getNetworkTopNFlowColumns = ( values: [as.name], fieldName: `${flowTarget}.as.organization.name`, fieldType: 'keyword', + aggregatable: true, idPrefix: `${id}-name`, })} @@ -151,6 +153,7 @@ export const getNetworkTopNFlowColumns = ( fieldName: `${flowTarget}.as.number`, idPrefix: `${id}-number`, fieldType: 'keyword', + aggregatable: true, })} )} diff --git a/x-pack/plugins/security_solution/public/explore/network/components/tls_table/columns.tsx b/x-pack/plugins/security_solution/public/explore/network/components/tls_table/columns.tsx index ca348ec7c73a7..f86c152c569d9 100644 --- a/x-pack/plugins/security_solution/public/explore/network/components/tls_table/columns.tsx +++ b/x-pack/plugins/security_solution/public/explore/network/components/tls_table/columns.tsx @@ -36,6 +36,7 @@ export const getTlsColumns = (tableId: string): TlsColumns => [ values: issuers, fieldName: 'tls.server.issuer', fieldType: 'keyword', + aggregatable: true, idPrefix: `${tableId}-${_id}-table-issuers`, }), }, @@ -50,6 +51,7 @@ export const getTlsColumns = (tableId: string): TlsColumns => [ values: subjects, fieldName: 'tls.server.subject', fieldType: 'keyword', + aggregatable: true, idPrefix: `${tableId}-${_id}-table-subjects`, }), }, @@ -64,6 +66,7 @@ export const getTlsColumns = (tableId: string): TlsColumns => [ values: sha1 ? [sha1] : undefined, fieldName: 'tls.server.hash.sha1', fieldType: 'keyword', + aggregatable: true, idPrefix: `${tableId}-${sha1}-table-sha1`, }), }, @@ -78,6 +81,7 @@ export const getTlsColumns = (tableId: string): TlsColumns => [ values: ja3, fieldName: 'tls.server.ja3s', fieldType: 'keyword', + aggregatable: true, idPrefix: `${tableId}-${_id}-table-ja3`, }), }, @@ -92,6 +96,7 @@ export const getTlsColumns = (tableId: string): TlsColumns => [ values: notAfter, fieldName: 'tls.server.not_after', fieldType: 'date', + aggregatable: false, idPrefix: `${tableId}-${_id}-table-notAfter`, render: (validUntil) => ( diff --git a/x-pack/plugins/security_solution/public/explore/network/components/users_table/columns.tsx b/x-pack/plugins/security_solution/public/explore/network/components/users_table/columns.tsx index 45c0632aa3863..ec5f1b204821b 100644 --- a/x-pack/plugins/security_solution/public/explore/network/components/users_table/columns.tsx +++ b/x-pack/plugins/security_solution/public/explore/network/components/users_table/columns.tsx @@ -35,6 +35,7 @@ export const getUsersColumns = ( values: userName ? [userName] : undefined, fieldName: 'user.name', fieldType: 'keyword', + aggregatable: true, idPrefix: `${tableId}-table-${flowTarget}-user`, }), }, @@ -49,6 +50,7 @@ export const getUsersColumns = ( values: userIds, fieldName: 'user.id', fieldType: 'keyword', + aggregatable: true, idPrefix: `${tableId}-table-${flowTarget}`, }), }, @@ -63,6 +65,7 @@ export const getUsersColumns = ( values: groupNames, fieldName: 'user.group.name', fieldType: 'keyword', + aggregatable: true, idPrefix: `${tableId}-table-${flowTarget}`, }), }, @@ -77,6 +80,7 @@ export const getUsersColumns = ( values: groupId, fieldName: 'user.group.id', fieldType: 'keyword', + aggregatable: true, idPrefix: `${tableId}-table-${flowTarget}`, }), }, diff --git a/x-pack/plugins/security_solution/public/explore/users/components/all_users/index.tsx b/x-pack/plugins/security_solution/public/explore/users/components/all_users/index.tsx index 3f545462a30aa..ae46bd578bf40 100644 --- a/x-pack/plugins/security_solution/public/explore/users/components/all_users/index.tsx +++ b/x-pack/plugins/security_solution/public/explore/users/components/all_users/index.tsx @@ -85,6 +85,7 @@ const getUsersColumns = ( values: [name], idPrefix: `users-table-${name}-name`, render: (item) => , + aggregatable: true, fieldType: 'keyword', }) : getOrEmptyTagFromValue(name), @@ -109,6 +110,7 @@ const getUsersColumns = ( fieldName: 'user.domain', values: [domain], idPrefix: `users-table-${domain}-domain`, + aggregatable: true, fieldType: 'keyword', }) : getOrEmptyTagFromValue(domain), diff --git a/x-pack/plugins/security_solution/public/management/components/console/components/command_list.tsx b/x-pack/plugins/security_solution/public/management/components/console/components/command_list.tsx index 854c66dcc27d7..6fd66bf94c47f 100644 --- a/x-pack/plugins/security_solution/public/management/components/console/components/command_list.tsx +++ b/x-pack/plugins/security_solution/public/management/components/console/components/command_list.tsx @@ -290,8 +290,9 @@ export const CommandList = memo(({ commands, display = 'defaul return ( <> - {commandsByGroups.map((commandsByGroup) => ( + {commandsByGroups.map((commandsByGroup, i) => ( diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_execute_action/execute_action_host_response_output.tsx b/x-pack/plugins/security_solution/public/management/components/endpoint_execute_action/execute_action_host_response_output.tsx new file mode 100644 index 0000000000000..3624f577716dd --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/components/endpoint_execute_action/execute_action_host_response_output.tsx @@ -0,0 +1,141 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import React, { memo, useMemo } from 'react'; +import { + EuiAccordion, + EuiFlexGroup, + EuiFlexItem, + EuiSpacer, + EuiText, + useGeneratedHtmlId, +} from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { ResponseActionFileDownloadLink } from '../response_action_file_download_link'; +import type { + ActionDetails, + MaybeImmutable, + ResponseActionExecuteOutputContent, +} from '../../../../common/endpoint/types'; + +const EXECUTE_FILE_LINK_TITLE = i18n.translate( + 'xpack.securitySolution.responseActionExecuteDownloadLink.downloadButtonLabel', + { defaultMessage: 'Click here to download full output' } +); + +const ACCORDION_BUTTON_TEXT = Object.freeze({ + output: { + regular: i18n.translate( + 'xpack.securitySolution.responseActionExecuteAccordion.outputButtonTextRegular', + { + defaultMessage: 'Execution output', + } + ), + truncated: i18n.translate( + 'xpack.securitySolution.responseActionExecuteAccordion.outputButtonTextTruncated', + { + defaultMessage: 'Execution output (truncated)', + } + ), + }, + error: { + regular: i18n.translate( + 'xpack.securitySolution.responseActionExecuteAccordion.errorButtonTextRegular', + { + defaultMessage: 'Execution error', + } + ), + truncated: i18n.translate( + 'xpack.securitySolution.responseActionExecuteAccordion.errorButtonTextTruncated', + { + defaultMessage: 'Execution error (truncated)', + } + ), + }, +}); +interface ExecuteActionOutputProps { + content: string; + initialIsOpen?: boolean; + isTruncated: boolean; + type: 'error' | 'output'; +} + +const ExecutionActionOutputAccordion = memo( + ({ content, initialIsOpen = false, isTruncated, type }) => { + const id = useGeneratedHtmlId({ + prefix: 'executeActionOutputAccordions', + suffix: type, + }); + return ( + + +

{content}

+
+
+ ); + } +); +ExecutionActionOutputAccordion.displayName = 'ExecutionActionOutputAccordion'; + +interface ExecuteActionHostResponseOutputProps { + action: MaybeImmutable; + agentId?: string; + 'data-test-subj'?: string; + textSize?: 's' | 'xs'; +} + +export const ExecuteActionHostResponseOutput = memo( + ({ action, agentId = action.agents[0], 'data-test-subj': dataTestSubj, textSize }) => { + const outputContent = useMemo( + () => + action.outputs && + action.outputs[agentId] && + (action.outputs[agentId].content as ResponseActionExecuteOutputContent), + [agentId, action] + ); + + return ( + + + + + + {outputContent && ( + + + + + + )} + + ); + } +); +ExecuteActionHostResponseOutput.displayName = 'ExecuteActionHostResponseOutput'; diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_execute_action/index.tsx b/x-pack/plugins/security_solution/public/management/components/endpoint_execute_action/index.tsx new file mode 100644 index 0000000000000..7ca102ea1f75f --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/components/endpoint_execute_action/index.tsx @@ -0,0 +1,8 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export { ExecuteActionHostResponseOutput } from './execute_action_host_response_output'; diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/command_render_components/execute_action.tsx b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/command_render_components/execute_action.tsx new file mode 100644 index 0000000000000..fe766f2015516 --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/command_render_components/execute_action.tsx @@ -0,0 +1,82 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { memo, useMemo } from 'react'; + +import { i18n } from '@kbn/i18n'; +import type { ExecuteActionRequestBody } from '../../../../../common/endpoint/schema/actions'; +import { useConsoleActionSubmitter } from '../hooks/use_console_action_submitter'; +import type { ResponseActionExecuteOutputContent } from '../../../../../common/endpoint/types'; +import { useSendExecuteEndpoint } from '../../../hooks/response_actions/use_send_execute_endpoint_request'; +import type { ActionRequestComponentProps } from '../types'; +import { parsedExecuteTimeout } from '../lib/utils'; +import { ExecuteActionHostResponseOutput } from '../../endpoint_execute_action'; + +export const ExecuteActionResult = memo< + ActionRequestComponentProps<{ + command: string; + timeout?: string; + }> +>(({ command, setStore, store, status, setStatus, ResultComponent }) => { + const actionCreator = useSendExecuteEndpoint(); + const actionRequestBody = useMemo(() => { + const endpointId = command.commandDefinition?.meta?.endpointId; + + if (!endpointId) { + return; + } + return { + endpoint_ids: [endpointId], + parameters: { + command: command.args.args.command[0], + timeout: parsedExecuteTimeout(command.args.args.timeout?.[0]), + }, + comment: command.args.args?.comment?.[0], + }; + }, [ + command.commandDefinition?.meta?.endpointId, + command.args.args.command, + command.args.args.timeout, + command.args.args?.comment, + ]); + + const { result, actionDetails: completedActionDetails } = useConsoleActionSubmitter< + ExecuteActionRequestBody, + ResponseActionExecuteOutputContent + >({ + ResultComponent, + setStore, + store, + status, + setStatus, + actionCreator, + actionRequestBody, + dataTestSubj: 'execute', + }); + + if (!completedActionDetails || !completedActionDetails.wasSuccessful) { + return result; + } + + // Show results + return ( + + + + ); +}); +ExecuteActionResult.displayName = 'ExecuteActionResult'; diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/command_render_components/integration_tests/execute_action.test.tsx b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/command_render_components/integration_tests/execute_action.test.tsx new file mode 100644 index 0000000000000..63b085a96eb55 --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/command_render_components/integration_tests/execute_action.test.tsx @@ -0,0 +1,177 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor 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 { EndpointCapabilities } from '../../../../../../common/endpoint/service/response_actions/constants'; +import { ENDPOINT_CAPABILITIES } from '../../../../../../common/endpoint/service/response_actions/constants'; +import type { AppContextTestRender } from '../../../../../common/mock/endpoint'; +import { createAppRootMockRenderer } from '../../../../../common/mock/endpoint'; +import { responseActionsHttpMocks } from '../../../../mocks/response_actions_http_mocks'; +import { + ConsoleManagerTestComponent, + getConsoleManagerMockRenderResultQueriesAndActions, +} from '../../../console/components/console_manager/mocks'; +import { getEndpointConsoleCommands } from '../../lib/console_commands_definition'; +import React from 'react'; +import { enterConsoleCommand } from '../../../console/mocks'; +import { waitFor } from '@testing-library/react'; +import { EXECUTE_ROUTE } from '../../../../../../common/endpoint/constants'; +import { getEndpointAuthzInitialStateMock } from '../../../../../../common/endpoint/service/authz/mocks'; +import type { EndpointPrivileges } from '../../../../../../common/endpoint/types'; +import { INSUFFICIENT_PRIVILEGES_FOR_COMMAND } from '../../../../../common/translations'; +import type { HttpFetchOptionsWithPath } from '@kbn/core-http-browser'; + +jest.mock('../../../../../common/components/user_privileges'); +jest.mock('../../../../../common/experimental_features_service'); + +describe('When using execute action from response actions console', () => { + let render: ( + capabilities?: EndpointCapabilities[] + ) => Promise>; + let renderResult: ReturnType; + let apiMocks: ReturnType; + let consoleManagerMockAccess: ReturnType< + typeof getConsoleManagerMockRenderResultQueriesAndActions + >; + let endpointPrivileges: EndpointPrivileges; + + beforeEach(() => { + const mockedContext = createAppRootMockRenderer(); + + apiMocks = responseActionsHttpMocks(mockedContext.coreStart.http); + endpointPrivileges = { ...getEndpointAuthzInitialStateMock(), loading: false }; + + render = async (capabilities: EndpointCapabilities[] = [...ENDPOINT_CAPABILITIES]) => { + renderResult = mockedContext.render( + { + return { + consoleProps: { + 'data-test-subj': 'test', + commands: getEndpointConsoleCommands({ + endpointAgentId: 'a.b.c', + endpointCapabilities: [...capabilities], + endpointPrivileges, + }), + }, + }; + }} + /> + ); + + consoleManagerMockAccess = getConsoleManagerMockRenderResultQueriesAndActions(renderResult); + + await consoleManagerMockAccess.clickOnRegisterNewConsole(); + await consoleManagerMockAccess.openRunningConsole(); + + return renderResult; + }; + }); + + it('should show an error if the `execute` capability is not present in the endpoint', async () => { + await render([]); + enterConsoleCommand(renderResult, 'execute --command="ls -al"'); + + expect(renderResult.getByTestId('test-validationError-message').textContent).toEqual( + 'The current version of the Agent does not support this feature. Upgrade your Agent through Fleet to use this feature and new response actions such as killing and suspending processes.' + ); + }); + + it('should show an error if `execute` is not authorized', async () => { + endpointPrivileges.canWriteExecuteOperations = false; + await render(); + enterConsoleCommand(renderResult, 'execute --command="ls -al"'); + + expect(renderResult.getByTestId('test-validationError-message').textContent).toEqual( + INSUFFICIENT_PRIVILEGES_FOR_COMMAND + ); + }); + + it('should show an error if `execute` is entered without `--command` argument', async () => { + await render(); + enterConsoleCommand(renderResult, 'execute'); + + expect(renderResult.getByTestId('test-badArgument-message').textContent).toEqual( + 'Missing required arguments: --command' + ); + }); + + it('should show error if `--command` is empty string', async () => { + await render(); + enterConsoleCommand(renderResult, 'execute --command=""'); + + expect(renderResult.getByTestId('test-badArgument-message').textContent).toEqual( + 'Argument --command must have a value' + ); + }); + + it('should show error if `--timeout` is empty string', async () => { + await render(); + enterConsoleCommand(renderResult, 'execute --command="ls -al" --timeout=""'); + + expect(renderResult.getByTestId('test-badArgument-message').textContent).toEqual( + 'Argument --timeout must have a value' + ); + }); + + it('should show error if `--timeout` does not match required format', async () => { + await render(); + enterConsoleCommand(renderResult, 'execute --command="ls -al" --timeout="23d"'); + + expect(renderResult.getByTestId('test-badArgument-message').textContent).toEqual( + 'Invalid argument value: --timeout. Argument must be a string with a positive integer value followed by a unit of time (h for hours, m for minutes, s for seconds). Example: 37m.' + ); + }); + + it('should call the `execute` API with the expected payload', async () => { + await render(); + enterConsoleCommand(renderResult, 'execute --command="ls -al"'); + + await waitFor(() => { + expect(apiMocks.responseProvider.execute).toHaveBeenCalledWith({ + body: '{"endpoint_ids":["a.b.c"],"parameters":{"command":"ls -al"}}', + path: EXECUTE_ROUTE, + }); + }); + }); + + it('should only accept one `--comment`', async () => { + await render(); + enterConsoleCommand(renderResult, 'execute --command="ls -al" --comment "one" --comment "two"'); + + expect(renderResult.getByTestId('test-badArgument-message').textContent).toEqual( + 'Argument can only be used once: --comment' + ); + }); + + it('should display download link once action completes', async () => { + const actionDetailsApiResponseMock: ReturnType = + { + data: { + ...apiMocks.responseProvider.actionDetails({ + path: '/1', + } as HttpFetchOptionsWithPath).data, + + completedAt: new Date().toISOString(), + command: 'execute', + }, + }; + apiMocks.responseProvider.actionDetails.mockReturnValue(actionDetailsApiResponseMock); + + await render(); + enterConsoleCommand(renderResult, 'execute --command="ls -l"'); + + await waitFor(() => { + expect(apiMocks.responseProvider.actionDetails).toHaveBeenCalled(); + }); + + await waitFor(() => { + expect(renderResult.getByTestId('executeSuccess').textContent).toEqual( + 'Command execution was successful.' + ); + }); + }); +}); diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/lib/console_commands_definition.ts b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/lib/console_commands_definition.ts index f58cf1455ee05..4c603888bdcc5 100644 --- a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/lib/console_commands_definition.ts +++ b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/lib/console_commands_definition.ts @@ -20,6 +20,7 @@ import { KillProcessActionResult } from '../command_render_components/kill_proce import { SuspendProcessActionResult } from '../command_render_components/suspend_process_action'; import { EndpointStatusActionResult } from '../command_render_components/status_action'; import { GetProcessesActionResult } from '../command_render_components/get_processes_action'; +import { ExecuteActionResult } from '../command_render_components/execute_action'; import type { EndpointPrivileges, ImmutableArray } from '../../../../../common/endpoint/types'; import { INSUFFICIENT_PRIVILEGES_FOR_COMMAND, @@ -27,6 +28,8 @@ import { } from '../../../../common/translations'; import { getCommandAboutInfo } from './get_command_about_info'; +import { validateUnitOfTime } from './utils'; + const emptyArgumentValidator = (argData: ParsedArgData): true | string => { if (argData?.length > 0 && typeof argData[0] === 'string' && argData[0]?.trim().length > 0) { return true; @@ -50,6 +53,17 @@ const pidValidator = (argData: ParsedArgData): true | string => { } }; +const executeTimeoutValidator = (argData: ParsedArgData): true | string => { + if (String(argData).trim().length && validateUnitOfTime(String(argData).trim())) { + return true; + } else { + return i18n.translate('xpack.securitySolution.endpointConsoleCommands.invalidExecuteTimeout', { + defaultMessage: + 'Argument must be a string with a positive integer value followed by a unit of time (h for hours, m for minutes, s for seconds). Example: 37m.', + }); + } +}; + const commandToCapabilitiesMap = new Map([ ['isolate', 'isolation'], ['release', 'isolation'], @@ -57,6 +71,7 @@ const commandToCapabilitiesMap = new Map { const isGetFileEnabled = ExperimentalFeaturesService.get().responseActionGetFileEnabled; + const isExecuteEnabled = ExperimentalFeaturesService.get().responseActionExecuteEnabled; const doesEndpointSupportCommand = (commandName: ConsoleResponseActionCommands) => { const responderCapability = commandToCapabilitiesMap.get(commandName); @@ -421,5 +438,67 @@ export const getEndpointConsoleCommands = ({ }); } + // `execute` is currently behind feature flag + // planned for 8.8 + if (isExecuteEnabled) { + consoleCommands.push({ + name: 'execute', + about: getCommandAboutInfo({ + aboutInfo: i18n.translate('xpack.securitySolution.endpointConsoleCommands.execute.about', { + defaultMessage: 'Execute a command on the host', + }), + isSupported: doesEndpointSupportCommand('execute'), + }), + RenderComponent: ExecuteActionResult, + meta: { + endpointId: endpointAgentId, + capabilities: endpointCapabilities, + privileges: endpointPrivileges, + }, + exampleUsage: 'execute --command "ls -al" --timeout 2s --comment "Get list of all files"', + exampleInstruction: ENTER_OR_ADD_COMMENT_ARG_INSTRUCTION, + validate: capabilitiesAndPrivilegesValidator, + mustHaveArgs: true, + args: { + command: { + required: true, + allowMultiples: false, + about: i18n.translate( + 'xpack.securitySolution.endpointConsoleCommands.execute.args.command.about', + { + defaultMessage: 'The command to execute', + } + ), + mustHaveValue: 'non-empty-string', + }, + timeout: { + required: false, + allowMultiples: false, + about: i18n.translate( + 'xpack.securitySolution.endpointConsoleCommands.execute.args.timeout.about', + { + defaultMessage: + 'The timeout in units of time (h for hours, m for minutes, s for seconds) for the endpoint to wait for the script to complete. Example: 37m. If not given, it defaults to 4 hours.', + } + ), + mustHaveValue: 'non-empty-string', + validate: executeTimeoutValidator, + }, + comment: { + required: false, + allowMultiples: false, + about: COMMENT_ARG_ABOUT, + }, + }, + helpGroupLabel: HELP_GROUPS.responseActions.label, + helpGroupPosition: HELP_GROUPS.responseActions.position, + helpCommandPosition: 6, + helpDisabled: !doesEndpointSupportCommand('execute'), + helpHidden: !getRbacControl({ + commandName: 'execute', + privileges: endpointPrivileges, + }), + }); + } return consoleCommands; }; diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/lib/utils.test.ts b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/lib/utils.test.ts index 48b6753645c92..37cfa4b393eaa 100644 --- a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/lib/utils.test.ts +++ b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/lib/utils.test.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { parsedPidOrEntityIdParameter } from './utils'; +import { parsedPidOrEntityIdParameter, parsedExecuteTimeout } from './utils'; describe('Endpoint Responder - Utilities', () => { describe('when using parsedPidOrEntityIdParameter()', () => { @@ -19,9 +19,27 @@ describe('Endpoint Responder - Utilities', () => { expect(parameters).toEqual({ entity_id: '123qwe' }); }); - it('should return entity id with emtpy string if no params are defined', () => { + it('should return entity id with empty string if no params are defined', () => { const parameters = parsedPidOrEntityIdParameter({}); expect(parameters).toEqual({ entity_id: '' }); }); }); + + describe('#parsedExecuteTimeout', () => { + it('should return `undefined` if no timeout is defined', () => { + expect(parsedExecuteTimeout()).toEqual(undefined); + }); + it('should return `undefined` if timeout does not match pattern', () => { + expect(parsedExecuteTimeout('23d')).toEqual(undefined); + }); + it('should return correct milliseconds for hours', () => { + expect(parsedExecuteTimeout('23h')).toEqual(82800000); + }); + it('should return correct milliseconds for minutes', () => { + expect(parsedExecuteTimeout('23m')).toEqual(1380000); + }); + it('should return correct milliseconds for seconds', () => { + expect(parsedExecuteTimeout('23s')).toEqual(23000); + }); + }); }); diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/lib/utils.ts b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/lib/utils.ts index d1d16b72a426c..84c69dcaec0fe 100644 --- a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/lib/utils.ts +++ b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/lib/utils.ts @@ -18,3 +18,24 @@ export const parsedPidOrEntityIdParameter = (parameters: { entity_id: parameters?.entityId?.[0] ?? '', }; }; + +const UNIT_TO_MILLISECONDS = (value: number) => ({ + h: (): number => value * 60 * 60 * 1000, + m: (): number => value * 60 * 1000, + s: (): number => value * 1000, +}); + +const convertToMilliseconds = (value: number, unit: 'h' | 'm' | 's'): number => + UNIT_TO_MILLISECONDS(value)[unit](); + +const EXECUTE_TIMEOUT_REGEX = /^\d+(?=(h|m|s){1}$)/; +export const validateUnitOfTime = (value: string): boolean => EXECUTE_TIMEOUT_REGEX.test(value); + +export const parsedExecuteTimeout = (timeout?: string): undefined | number => { + const timeoutMatch = timeout?.trim().match(EXECUTE_TIMEOUT_REGEX); + if (!timeoutMatch) { + return; + } + + return convertToMilliseconds(Number(timeoutMatch[0]), timeoutMatch[1] as 'h' | 'm' | 's'); +}; diff --git a/x-pack/plugins/security_solution/public/management/components/response_action_file_download_link/response_action_file_download_link.test.tsx b/x-pack/plugins/security_solution/public/management/components/response_action_file_download_link/response_action_file_download_link.test.tsx index 16ca444b7d59f..b212b884f77b8 100644 --- a/x-pack/plugins/security_solution/public/management/components/response_action_file_download_link/response_action_file_download_link.test.tsx +++ b/x-pack/plugins/security_solution/public/management/components/response_action_file_download_link/response_action_file_download_link.test.tsx @@ -13,11 +13,11 @@ import type { ResponseActionGetFileParameters, } from '../../../../common/endpoint/types'; import React from 'react'; -import type { ResponseActionFileDownloadLinkProps } from './response_action_file_download_link'; import { EndpointActionGenerator } from '../../../../common/endpoint/data_generators/endpoint_action_generator'; import { FILE_NO_LONGER_AVAILABLE_MESSAGE, ResponseActionFileDownloadLink, + type ResponseActionFileDownloadLinkProps, } from './response_action_file_download_link'; import { responseActionsHttpMocks } from '../../mocks/response_actions_http_mocks'; import { useUserPrivileges as _useUserPrivileges } from '../../../common/components/user_privileges'; diff --git a/x-pack/plugins/security_solution/public/management/hooks/response_actions/use_send_execute_endpoint_request.ts b/x-pack/plugins/security_solution/public/management/hooks/response_actions/use_send_execute_endpoint_request.ts new file mode 100644 index 0000000000000..c80679db3a88d --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/hooks/response_actions/use_send_execute_endpoint_request.ts @@ -0,0 +1,27 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { UseMutationOptions, UseMutationResult } from '@tanstack/react-query'; +import type { IHttpFetchError } from '@kbn/core-http-browser'; +import { useMutation } from '@tanstack/react-query'; +import { KibanaServices } from '../../../common/lib/kibana'; +import { EXECUTE_ROUTE } from '../../../../common/endpoint/constants'; +import type { ResponseActionApiResponse } from '../../../../common/endpoint/types'; +import type { ExecuteActionRequestBody } from '../../../../common/endpoint/schema/actions'; + +export const useSendExecuteEndpoint = ( + options?: UseMutationOptions +): UseMutationResult => { + return useMutation( + (executeActionReqBody) => { + return KibanaServices.get().http.post(EXECUTE_ROUTE, { + body: JSON.stringify(executeActionReqBody), + }); + }, + options + ); +}; diff --git a/x-pack/plugins/security_solution/public/management/mocks/response_actions_http_mocks.ts b/x-pack/plugins/security_solution/public/management/mocks/response_actions_http_mocks.ts index ab586a2b35a46..40f1f7ce6c3a8 100644 --- a/x-pack/plugins/security_solution/public/management/mocks/response_actions_http_mocks.ts +++ b/x-pack/plugins/security_solution/public/management/mocks/response_actions_http_mocks.ts @@ -18,6 +18,7 @@ import { SUSPEND_PROCESS_ROUTE, GET_FILE_ROUTE, ACTION_AGENT_FILE_INFO_ROUTE, + EXECUTE_ROUTE, } from '../../../common/endpoint/constants'; import type { ResponseProvidersInterface } from '../../common/mock/endpoint/http_handler_mock_factory'; import { httpHandlerMockFactory } from '../../common/mock/endpoint/http_handler_mock_factory'; @@ -31,6 +32,8 @@ import type { ResponseActionGetFileOutputContent, ResponseActionGetFileParameters, ActionFileInfoApiResponse, + ResponseActionExecuteOutputContent, + ResponseActionsExecuteParameters, } from '../../../common/endpoint/types'; export type ResponseActionsHttpMocksInterface = ResponseProvidersInterface<{ @@ -53,6 +56,8 @@ export type ResponseActionsHttpMocksInterface = ResponseProvidersInterface<{ getFile: () => ActionDetailsApiResponse; fileInfo: () => ActionFileInfoApiResponse; + + execute: () => ActionDetailsApiResponse; }>; export const responseActionsHttpMocks = httpHandlerMockFactory([ @@ -198,4 +203,22 @@ export const responseActionsHttpMocks = httpHandlerMockFactory => { + const generator = new EndpointActionGenerator('seed'); + const response = generator.generateActionDetails< + ResponseActionExecuteOutputContent, + ResponseActionsExecuteParameters + >({ + outputs: { + 'a.b.c': generator.generateExecuteActionResponseOutput(), + }, + }); + + return { data: response }; + }, + }, ]); diff --git a/x-pack/plugins/security_solution/public/overview/components/entity_analytics/common/entity_hover_actions.test.tsx b/x-pack/plugins/security_solution/public/overview/components/entity_analytics/common/entity_hover_actions.test.tsx deleted file mode 100644 index a37233c8dd734..0000000000000 --- a/x-pack/plugins/security_solution/public/overview/components/entity_analytics/common/entity_hover_actions.test.tsx +++ /dev/null @@ -1,38 +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 { render } from '@testing-library/react'; -import React from 'react'; -import { useKibana as mockUseKibana } from '../../../../common/lib/kibana/__mocks__'; -import { TestProviders } from '../../../../common/mock'; -import { EntityAnalyticsHoverActions } from './entity_hover_actions'; - -const mockedUseKibana = mockUseKibana(); - -jest.mock('../../../../common/lib/kibana', () => { - const original = jest.requireActual('../../../../common/lib/kibana'); - return { - ...original, - useKibana: () => mockedUseKibana, - }; -}); - -describe('EntityAnalyticsHoverActions', () => { - it('it renders "add to timeline" and "copy" hover action', () => { - const { getByTestId } = render( - , - { wrapper: TestProviders } - ); - - expect(getByTestId('test-add-to-timeline')).toBeInTheDocument(); - expect(getByTestId('test-copy-button')).toBeInTheDocument(); - }); -}); diff --git a/x-pack/plugins/security_solution/public/overview/components/entity_analytics/common/entity_hover_actions.tsx b/x-pack/plugins/security_solution/public/overview/components/entity_analytics/common/entity_hover_actions.tsx deleted file mode 100644 index 44c2b93308226..0000000000000 --- a/x-pack/plugins/security_solution/public/overview/components/entity_analytics/common/entity_hover_actions.tsx +++ /dev/null @@ -1,72 +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, { useMemo } from 'react'; -import { noop } from 'lodash/fp'; -import type { DataProvider } from '../../../../../common/types'; -import { IS_OPERATOR } from '../../../../../common/types'; -import { escapeDataProviderId } from '../../../../common/components/drag_and_drop/helpers'; -import { SecurityPageName } from '../../../../app/types'; -import { HoverActions } from '../../../../common/components/hover_actions'; - -interface Props { - onFilterAdded?: () => void; - fieldName: string; - fieldValue: string; - idPrefix: string; -} - -export const EntityAnalyticsHoverActions: React.FC = ({ - fieldName, - fieldValue, - idPrefix, - onFilterAdded, -}) => { - const id = useMemo( - () => escapeDataProviderId(`${idPrefix}-${fieldName}-${fieldValue}`), - [idPrefix, fieldName, fieldValue] - ); - const dataProvider: DataProvider = useMemo( - () => ({ - and: [], - enabled: true, - id, - name: fieldValue, - excluded: false, - kqlQuery: '', - queryMatch: { - field: fieldName, - value: fieldValue, - displayValue: fieldValue, - operator: IS_OPERATOR, - }, - }), - [fieldName, fieldValue, id] - ); - - return ( - - ); -}; - -EntityAnalyticsHoverActions.displayName = 'EntityAnalyticsHoverActions'; diff --git a/x-pack/plugins/security_solution/public/overview/components/entity_analytics/common/styled_basic_table.tsx b/x-pack/plugins/security_solution/public/overview/components/entity_analytics/common/styled_basic_table.tsx index ddeadc4aa7538..105d35c1cf616 100644 --- a/x-pack/plugins/security_solution/public/overview/components/entity_analytics/common/styled_basic_table.tsx +++ b/x-pack/plugins/security_solution/public/overview/components/entity_analytics/common/styled_basic_table.tsx @@ -15,21 +15,17 @@ export const StyledBasicTable = styled(EuiBasicTable)` } } - .timelines__hoverActionButton { + .inlineActions { opacity: 0; } .EntityAnalyticsTableHoverActions { - .hoverActions-active { - .timelines__hoverActionButton, - .securitySolution__hoverActionButton { - opacity: 1; - } + .inlineActions-popoverOpen { + opacity: 1; } &:hover { - .timelines__hoverActionButton, - .securitySolution__hoverActionButton { + .inlineActions { opacity: 1; } } diff --git a/x-pack/plugins/security_solution/public/overview/components/entity_analytics/risk_score/columns.tsx b/x-pack/plugins/security_solution/public/overview/components/entity_analytics/risk_score/columns.tsx index 87b5ce32dee5c..8cf150387c1e9 100644 --- a/x-pack/plugins/security_solution/public/overview/components/entity_analytics/risk_score/columns.tsx +++ b/x-pack/plugins/security_solution/public/overview/components/entity_analytics/risk_score/columns.tsx @@ -9,6 +9,8 @@ import React from 'react'; import type { EuiBasicTableColumn } from '@elastic/eui'; import { EuiLink, EuiIcon, EuiToolTip } from '@elastic/eui'; import { get } from 'lodash/fp'; +import { CellActions, CellActionsMode } from '@kbn/cell-actions'; +import styled from 'styled-components'; import { UsersTableType } from '../../../../explore/users/store/model'; import { getEmptyTagValue } from '../../../../common/components/empty_value'; import { HostDetailsLink, UserDetailsLink } from '../../../../common/components/links'; @@ -22,10 +24,17 @@ import type { import { RiskScoreEntity, RiskScoreFields } from '../../../../../common/search_strategy'; import * as i18n from './translations'; import { FormattedCount } from '../../../../common/components/formatted_number'; -import { EntityAnalyticsHoverActions } from '../common/entity_hover_actions'; +import { CELL_ACTIONS_DEFAULT_TRIGGER } from '../../../../../common/constants'; +import { ACTION_ID as FILTER_IN_ACTION_ID } from '../../../../actions/filter/default/filter_in'; +import { ACTION_ID as FILTER_OUT_ACTION_ID } from '../../../../actions/filter/default/filter_out'; +import { ACTION_ID as SHOW_TOP_N_ACTION_ID } from '../../../../actions/show_top_n/default/show_top_n'; type HostRiskScoreColumns = Array>; +const StyledCellActions = styled(CellActions)` + padding-left: ${({ theme }) => theme.eui.euiSizeS}; +`; + export const getRiskScoreColumns = ( riskEntity: RiskScoreEntity, openEntityInTimeline: (entityName: string, oldestAlertTimestamp?: string) => void @@ -40,19 +49,30 @@ export const getRiskScoreColumns = ( return riskEntity === RiskScoreEntity.host ? ( <> - ) : ( <> - ); diff --git a/x-pack/plugins/security_solution/public/timelines/components/field_renderers/field_renderers.tsx b/x-pack/plugins/security_solution/public/timelines/components/field_renderers/field_renderers.tsx index 655f4b753af2d..ed02581695834 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/field_renderers/field_renderers.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/field_renderers/field_renderers.tsx @@ -288,13 +288,23 @@ interface MoreContainerProps { fieldType: string; values: string[]; idPrefix: string; + isAggregatable?: boolean; moreMaxHeight: string; overflowIndexStart: number; render?: (item: string) => React.ReactNode; } export const MoreContainer = React.memo( - ({ fieldName, fieldType, idPrefix, moreMaxHeight, overflowIndexStart, render, values }) => { + ({ + fieldName, + fieldType, + idPrefix, + isAggregatable, + moreMaxHeight, + overflowIndexStart, + render, + values, + }) => { const { timelineId } = useContext(TimelineContext); const moreItemsWithHoverActions = useMemo( @@ -317,6 +327,7 @@ export const MoreContainer = React.memo( name: fieldName, value, type: fieldType, + aggregatable: isAggregatable, }} > <>{render ? render(value) : defaultToEmptyTag(value)} @@ -327,7 +338,16 @@ export const MoreContainer = React.memo( return acc; }, []), - [fieldName, fieldType, idPrefix, overflowIndexStart, render, values, timelineId] + [ + fieldName, + fieldType, + idPrefix, + overflowIndexStart, + render, + values, + timelineId, + isAggregatable, + ] ); return ( @@ -349,7 +369,16 @@ export const MoreContainer = React.memo( MoreContainer.displayName = 'MoreContainer'; export const DefaultFieldRendererOverflow = React.memo( - ({ attrName, idPrefix, moreMaxHeight, overflowIndexStart = 5, render, rowItems, fieldType }) => { + ({ + attrName, + idPrefix, + moreMaxHeight, + overflowIndexStart = 5, + render, + rowItems, + fieldType, + isAggregatable, + }) => { const [isOpen, setIsOpen] = useState(false); const togglePopover = useCallback(() => setIsOpen((currentIsOpen) => !currentIsOpen), []); const button = useMemo( @@ -391,6 +420,7 @@ export const DefaultFieldRendererOverflow = React.memo )} diff --git a/x-pack/plugins/security_solution/scripts/endpoint/agent_emulator/services/endpoint_response_actions.ts b/x-pack/plugins/security_solution/scripts/endpoint/agent_emulator/services/endpoint_response_actions.ts index 40bf70a9b0179..c984d4083d6c7 100644 --- a/x-pack/plugins/security_solution/scripts/endpoint/agent_emulator/services/endpoint_response_actions.ts +++ b/x-pack/plugins/security_solution/scripts/endpoint/agent_emulator/services/endpoint_response_actions.ts @@ -31,6 +31,7 @@ import type { ResponseActionGetFileOutputContent, ResponseActionGetFileParameters, FileUploadMetadata, + ResponseActionExecuteOutputContent, } from '../../../../common/endpoint/types'; import type { EndpointActionListRequestQuery } from '../../../../common/endpoint/schema/actions'; import { EndpointActionGenerator } from '../../../../common/endpoint/data_generators/endpoint_action_generator'; @@ -141,6 +142,12 @@ export const sendEndpointActionResponse = async ( endpointResponse.EndpointActions.data.output?.content as ResponseActionGetFileOutputContent ).code = endpointActionGenerator.randomGetFileFailureCode(); } + + if (endpointResponse.EndpointActions.data.command === 'execute') { + ( + endpointResponse.EndpointActions.data.output?.content as ResponseActionExecuteOutputContent + ).stderr = 'execute command timed out'; + } } await esClient.index({ @@ -188,11 +195,17 @@ export const sendEndpointActionResponse = async ( } // For `get-file`, upload a file to ES - if (action.command === 'get-file' && !endpointResponse.error) { - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - const filePath = ( - action as ActionDetails - )?.parameters?.path!; + if ((action.command === 'execute' || action.command === 'get-file') && !endpointResponse.error) { + const filePath = + action.command === 'execute' + ? '/execute/file/path' + : // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + ( + action as ActionDetails< + ResponseActionGetFileOutputContent, + ResponseActionGetFileParameters + > + )?.parameters?.path!; const fileName = basename(filePath.replace(/\\/g, '/')); const fileMetaDoc: FileUploadMetadata = generateFileMetadataDocumentMock({ @@ -215,7 +228,7 @@ export const sendEndpointActionResponse = async ( sha256: '8d61673c9d782297b3c774ded4e3d88f31a8869a8f25cf5cdd402ba6822d1d28', }, mime_type: 'application/zip', - name: 'upload.zip', + name: action.command === 'execute' ? 'full-output.zip' : 'upload.zip', extension: 'zip', size: 125, Status: 'READY', @@ -303,6 +316,16 @@ const getOutputDataIfNeeded = (action: ActionDetails): ResponseOutput => { }, } as ResponseOutput; + case 'execute': + const outputFileId = getFileDownloadId(action, action.agents[0]); + return { + output: endpointActionGenerator.generateExecuteActionResponseOutput({ + content: { + outputFileId, + }, + }), + } as ResponseOutput; + default: return { output: undefined }; } diff --git a/x-pack/plugins/security_solution/server/endpoint/routes/actions/response_actions.test.ts b/x-pack/plugins/security_solution/server/endpoint/routes/actions/response_actions.test.ts index 567ded8fae8cd..0c89c183f0835 100644 --- a/x-pack/plugins/security_solution/server/endpoint/routes/actions/response_actions.test.ts +++ b/x-pack/plugins/security_solution/server/endpoint/routes/actions/response_actions.test.ts @@ -398,6 +398,17 @@ describe('Response actions', () => { expect(actionDoc.data.command).toEqual('get-file'); }); + it('sends the `execute` command payload from the execute route', async () => { + const ctx = await callRoute(EXECUTE_ROUTE, { + body: { endpoint_ids: ['XYZ'], parameters: { command: 'ls -al' } }, + }); + const actionDoc: EndpointAction = ( + ctx.core.elasticsearch.client.asInternalUser.index.mock + .calls[0][0] as estypes.IndexRequest + ).body!; + expect(actionDoc.data.command).toEqual('execute'); + }); + describe('With endpoint data streams', () => { it('handles unisolation', async () => { const ctx = await callRoute( @@ -566,7 +577,7 @@ describe('Response actions', () => { expect(responseBody.action).toBeUndefined(); }); - it('handles execute', async () => { + it('handles execute with given `command` and `timeout`', async () => { const ctx = await callRoute( EXECUTE_ROUTE, { @@ -596,7 +607,7 @@ describe('Response actions', () => { expect(responseBody.action).toBeUndefined(); }); - it('handles execute without optional `timeout`', async () => { + it('handles execute without optional `timeout` and sets it to 4 hrs if not given', async () => { const ctx = await callRoute( EXECUTE_ROUTE, { @@ -618,6 +629,7 @@ describe('Response actions', () => { expect(actionDocs[0].body!.EndpointActions.data.command).toEqual('execute'); const parameters = actionDocs[1].body!.data.parameters as ResponseActionsExecuteParameters; expect(parameters.command).toEqual('ls -al'); + expect(parameters.timeout).toEqual(14400000); // 4hrs expect(actionDocs[1].body!.data.command).toEqual('execute'); expect(mockResponse.ok).toBeCalled(); @@ -649,6 +661,7 @@ describe('Response actions', () => { }); describe('License Level', () => { + // FIXME: This test also works for downgraded licenses (Gold) it('allows platinum license levels to isolate hosts', async () => { await callRoute(ISOLATE_HOST_ROUTE_V2, { body: { endpoint_ids: ['XYZ'] }, @@ -707,6 +720,14 @@ describe('Response actions', () => { }); expect(mockResponse.forbidden).toBeCalled(); }); + + it('prohibits user from performing execute action if `canWriteExecuteOperations` is `false`', async () => { + await callRoute(EXECUTE_ROUTE, { + body: { endpoint_ids: ['XYZ'] }, + authz: { canWriteExecuteOperations: false }, + }); + expect(mockResponse.forbidden).toBeCalled(); + }); }); describe('Cases', () => { diff --git a/x-pack/plugins/security_solution/server/endpoint/routes/actions/response_actions.ts b/x-pack/plugins/security_solution/server/endpoint/routes/actions/response_actions.ts index ba9c7dc1bca89..559cd0009a4e2 100644 --- a/x-pack/plugins/security_solution/server/endpoint/routes/actions/response_actions.ts +++ b/x-pack/plugins/security_solution/server/endpoint/routes/actions/response_actions.ts @@ -14,12 +14,12 @@ import type { CasesByAlertId } from '@kbn/cases-plugin/common/api/cases/case'; import { AGENT_ACTIONS_INDEX } from '@kbn/fleet-plugin/common'; import { CommentType } from '@kbn/cases-plugin/common'; -import type { ResponseActionBodySchema } from '../../../../common/endpoint/schema/actions'; import { NoParametersRequestSchema, KillOrSuspendProcessRequestSchema, EndpointActionGetFileSchema, ExecuteActionRequestSchema, + type ResponseActionBodySchema, } from '../../../../common/endpoint/schema/actions'; import { APP_ID } from '../../../../common/constants'; import { @@ -48,6 +48,7 @@ import type { ResponseActionsExecuteParameters, } from '../../../../common/endpoint/types'; import type { ResponseActionsApiCommandNames } from '../../../../common/endpoint/service/response_actions/constants'; +import { DEFAULT_EXECUTE_ACTION_TIMEOUT } from '../../../../common/endpoint/service/response_actions/constants'; import type { SecuritySolutionPluginRouter, SecuritySolutionRequestHandlerContext, @@ -254,6 +255,20 @@ function responseActionRequestHandler { + // set timeout to 4h (if not specified or when timeout is specified as 0) when command is `execute` + if (command === 'execute') { + const actionRequestParams = req.body.parameters as ResponseActionsExecuteParameters; + if (typeof actionRequestParams?.timeout === 'undefined') { + return { ...actionRequestParams, timeout: DEFAULT_EXECUTE_ACTION_TIMEOUT }; + } + return actionRequestParams; + } + + // for all other commands return the parameters as is + return req.body.parameters ?? undefined; + }; + const agents = endpointData.map((endpoint: HostMetadata) => endpoint.elastic.agent.id); const doc = { '@timestamp': moment().toISOString(), @@ -268,7 +283,7 @@ function responseActionRequestHandler, } as Omit, user: { diff --git a/x-pack/plugins/security_solution/server/endpoint/services/actions/utils.test.ts b/x-pack/plugins/security_solution/server/endpoint/services/actions/utils.test.ts index cafcc058b3cd9..321f04e5f4311 100644 --- a/x-pack/plugins/security_solution/server/endpoint/services/actions/utils.test.ts +++ b/x-pack/plugins/security_solution/server/endpoint/services/actions/utils.test.ts @@ -406,6 +406,9 @@ describe('When using Actions service utilities', () => { ]) ).toEqual({ ...NOT_COMPLETED_OUTPUT, + outputs: { + '789': expect.any(Object), + }, agentState: { '123': { completedAt: '2022-01-05T19:27:23.816Z', @@ -441,7 +444,10 @@ describe('When using Actions service utilities', () => { completedAt: COMPLETED_AT, wasSuccessful: true, errors: undefined, - outputs: {}, + outputs: { + 456: expect.any(Object), + 789: expect.any(Object), + }, agentState: { '123': { completedAt: '2022-01-05T19:27:23.816Z', @@ -483,7 +489,9 @@ describe('When using Actions service utilities', () => { errors: ['Fleet action response error: something is no good'], isCompleted: true, wasSuccessful: false, - outputs: {}, + outputs: { + 789: expect.any(Object), + }, agentState: { '123': { completedAt: '2022-01-05T19:27:23.816Z', diff --git a/x-pack/plugins/spaces/public/space_selector/__snapshots__/space_selector.test.tsx.snap b/x-pack/plugins/spaces/public/space_selector/__snapshots__/space_selector.test.tsx.snap index 8a24945424379..78c9fdc8321b6 100644 --- a/x-pack/plugins/spaces/public/space_selector/__snapshots__/space_selector.test.tsx.snap +++ b/x-pack/plugins/spaces/public/space_selector/__snapshots__/space_selector.test.tsx.snap @@ -1,5 +1,62 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`it renders with custom logo 1`] = ` +<_KibanaPageTemplate + className="spcSpaceSelector" + data-test-subj="kibanaSpaceSelector" + panelled={true} +> + <_EuiPageSection + className="spcSpaceSelector__pageContent" + color="transparent" + > + + + + + +

+ +

+

+ +

+
+
+ + + + +`; + exports[`it renders without crashing 1`] = ` <_KibanaPageTemplate className="spcSpaceSelector" diff --git a/x-pack/plugins/spaces/public/space_selector/space_selector.test.tsx b/x-pack/plugins/spaces/public/space_selector/space_selector.test.tsx index 7764bcc2c3b9c..57225e0d6473f 100644 --- a/x-pack/plugins/spaces/public/space_selector/space_selector.test.tsx +++ b/x-pack/plugins/spaces/public/space_selector/space_selector.test.tsx @@ -5,8 +5,12 @@ * 2.0. */ +import { EuiImage } from '@elastic/eui'; import React from 'react'; +import { of } from 'rxjs'; +import { customBrandingServiceMock } from '@kbn/core-custom-branding-browser-mocks'; +import { KibanaSolutionAvatar } from '@kbn/shared-ux-avatar-solution'; import { shallowWithIntl } from '@kbn/test-jest-helpers'; import type { Space } from '../../common'; @@ -21,12 +25,32 @@ function getSpacesManager(spaces: Space[] = []) { test('it renders without crashing', () => { const spacesManager = getSpacesManager(); + const customBranding$ = of({}); const component = shallowWithIntl( - + ); expect(component).toMatchSnapshot(); }); +test('it renders with custom logo', () => { + const spacesManager = getSpacesManager(); + const customBranding$ = of({ logo: 'img.jpg' }); + const component = shallowWithIntl( + + ); + expect(component).toMatchSnapshot(); + expect(component.find(KibanaSolutionAvatar).length).toBe(0); + expect(component.find(EuiImage).length).toBe(1); +}); + test('it queries for spaces when loaded', () => { const spaces = [ { @@ -40,7 +64,11 @@ test('it queries for spaces when loaded', () => { const spacesManager = getSpacesManager(spaces); shallowWithIntl( - + ); return Promise.resolve().then(() => { diff --git a/x-pack/plugins/spaces/public/space_selector/space_selector.tsx b/x-pack/plugins/spaces/public/space_selector/space_selector.tsx index a19745ba2c34e..56bca112a9168 100644 --- a/x-pack/plugins/spaces/public/space_selector/space_selector.tsx +++ b/x-pack/plugins/spaces/public/space_selector/space_selector.tsx @@ -9,6 +9,7 @@ import './space_selector.scss'; import { EuiFieldSearch, + EuiImage, EuiLoadingSpinner, EuiPanel, EuiSpacer, @@ -18,7 +19,9 @@ import { } from '@elastic/eui'; import React, { Component, Fragment } from 'react'; import ReactDOM from 'react-dom'; +import type { Observable, Subscription } from 'rxjs'; +import type { CustomBranding } from '@kbn/core-custom-branding-common'; import type { AppMountParameters, CoreStart } from '@kbn/core/public'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; @@ -34,6 +37,7 @@ import { SpaceCards } from './components'; interface Props { spacesManager: SpacesManager; serverBasePath: string; + customBranding$: Observable; } interface State { @@ -41,10 +45,13 @@ interface State { searchTerm: string; spaces: Space[]; error?: Error; + customLogo?: string; } export class SpaceSelector extends Component { private headerRef?: HTMLElement | null; + private customBrandingSubscription?: Subscription; + constructor(props: Props) { super(props); @@ -67,6 +74,13 @@ export class SpaceSelector extends Component { if (this.state.spaces.length === 0) { this.loadSpaces(); } + this.customBrandingSubscription = this.props.customBranding$.subscribe((next) => { + this.setState({ ...this.state, customLogo: next.logo }); + }); + } + + public componentWillUnmount() { + this.customBrandingSubscription?.unsubscribe(); } public loadSpaces() { @@ -110,7 +124,17 @@ export class SpaceSelector extends Component { - + {this.state.customLogo ? ( + + ) : ( + + )}

{ expect(count <= 32).toBe(true); await retry.tryForTime(90 * 1000, async () => { - await page.mouse.wheel(0, 100); + await page.evaluate(() => window.scrollTo(0, document.body.scrollHeight)); const showingAllMonitorsNode = await page.$(`text="Showing all monitors"`); expect(showingAllMonitorsNode).toBeTruthy(); expect(await showingAllMonitorsNode?.isVisible()).toBe(true); diff --git a/x-pack/plugins/telemetry_collection_xpack/schema/xpack_plugins.json b/x-pack/plugins/telemetry_collection_xpack/schema/xpack_plugins.json index cdff92e13ba43..1dc5393fdb116 100644 --- a/x-pack/plugins/telemetry_collection_xpack/schema/xpack_plugins.json +++ b/x-pack/plugins/telemetry_collection_xpack/schema/xpack_plugins.json @@ -13204,6 +13204,82 @@ } } }, + "slo": { + "properties": { + "slo": { + "properties": { + "total": { + "type": "long", + "_meta": { + "description": "The total number of slos in the cluster" + } + }, + "by_status": { + "properties": { + "enabled": { + "type": "long", + "_meta": { + "description": "The number of enabled slos in the cluster" + } + }, + "disabled": { + "type": "long", + "_meta": { + "description": "The number of disabled slos in the cluster" + } + } + } + }, + "by_sli_type": { + "properties": { + "DYNAMIC_KEY": { + "type": "long", + "_meta": { + "description": "The number of slos by sli type in the cluster" + } + } + } + }, + "by_rolling_duration": { + "properties": { + "DYNAMIC_KEY": { + "type": "long", + "_meta": { + "description": "The number of slos by rolling duration in the cluster" + } + } + } + }, + "by_calendar_aligned_duration": { + "properties": { + "DYNAMIC_KEY": { + "type": "long", + "_meta": { + "description": "The number of slos by calendar aligned duration in the cluster" + } + } + } + }, + "by_budgeting_method": { + "properties": { + "occurrences": { + "type": "long", + "_meta": { + "description": "The number of slos by timeslices budgeting method in the cluster" + } + }, + "timeslices": { + "type": "long", + "_meta": { + "description": "The number of slos by occurrences budgeting method in the cluster" + } + } + } + } + } + } + } + }, "spaces": { "properties": { "usesFeatureControls": { diff --git a/x-pack/plugins/threat_intelligence/cypress/screens/indicators.ts b/x-pack/plugins/threat_intelligence/cypress/screens/indicators.ts index 31134d6691f48..7132e0504980e 100644 --- a/x-pack/plugins/threat_intelligence/cypress/screens/indicators.ts +++ b/x-pack/plugins/threat_intelligence/cypress/screens/indicators.ts @@ -205,13 +205,13 @@ export const NEW_CASE_CREATE_BUTTON = `[data-test-subj="create-case-submit"]`; /* Block list */ -export const BLOCK_LIST_NAME = '[data-test-subj="blocklist-form-name-input"]'; +export const BLOCK_LIST_NAME = `[data-test-subj="blocklist-form-name-input"]`; -export const BLOCK_LIST_DESCRIPTION = '[data-test-subj="blocklist-form-description-input"]'; +export const BLOCK_LIST_DESCRIPTION = `[data-test-subj="blocklist-form-description-input"]`; -export const BLOCK_LIST_ADD_BUTTON = '[class="eui-textTruncate"]'; +export const BLOCK_LIST_ADD_BUTTON = `[class="eui-textTruncate"]`; -export const BLOCK_LIST_TOAST_LIST = '[data-test-subj="globalToastList"]'; +export const BLOCK_LIST_TOAST_LIST = `[data-test-subj="globalToastList"]`; /* Miscellaneous */ diff --git a/x-pack/plugins/threat_intelligence/public/components/update_status/translations.ts b/x-pack/plugins/threat_intelligence/public/components/update_status/translations.ts new file mode 100644 index 0000000000000..d4d27a60e77a1 --- /dev/null +++ b/x-pack/plugins/threat_intelligence/public/components/update_status/translations.ts @@ -0,0 +1,16 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; + +export const UPDATING = i18n.translate('xpack.threatIntelligence.updateStatus.updating', { + defaultMessage: 'Updating...', +}); + +export const UPDATED = i18n.translate('xpack.threatIntelligence.updateStatus.updated', { + defaultMessage: 'Updated', +}); diff --git a/x-pack/plugins/threat_intelligence/public/components/update_status/update_status.tsx b/x-pack/plugins/threat_intelligence/public/components/update_status/update_status.tsx index 02f43481186dd..6e3b3d7dede7c 100644 --- a/x-pack/plugins/threat_intelligence/public/components/update_status/update_status.tsx +++ b/x-pack/plugins/threat_intelligence/public/components/update_status/update_status.tsx @@ -8,22 +8,14 @@ import React from 'react'; import { EuiFlexGroup, EuiFlexItem, EuiText } from '@elastic/eui'; -import { i18n } from '@kbn/i18n'; import { FormattedRelative } from '@kbn/i18n-react'; +import { UPDATED, UPDATING } from './translations'; interface UpdateStatusProps { updatedAt: number; isUpdating: boolean; } -const UPDATING = i18n.translate('xpack.threatIntelligence.updateStatus.updating', { - defaultMessage: 'Updating...', -}); - -const UPDATED = i18n.translate('xpack.threatIntelligence.updateStatus.updated', { - defaultMessage: 'Updated', -}); - export const UpdateStatus: React.FC = ({ isUpdating, updatedAt }) => ( diff --git a/x-pack/plugins/threat_intelligence/public/hooks/translations.ts b/x-pack/plugins/threat_intelligence/public/hooks/translations.ts new file mode 100644 index 0000000000000..a6014855ee342 --- /dev/null +++ b/x-pack/plugins/threat_intelligence/public/hooks/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 INSPECTOR_FLYOUT_TITLE = i18n.translate( + 'xpack.threatIntelligence.inspectorFlyoutTitle', + { + defaultMessage: 'Indicators search requests', + } +); diff --git a/x-pack/plugins/threat_intelligence/public/hooks/use_inspector.ts b/x-pack/plugins/threat_intelligence/public/hooks/use_inspector.ts index d5b96d212a5fb..fba569efa6d01 100644 --- a/x-pack/plugins/threat_intelligence/public/hooks/use_inspector.ts +++ b/x-pack/plugins/threat_intelligence/public/hooks/use_inspector.ts @@ -7,13 +7,9 @@ import { useCallback, useContext, useEffect, useState } from 'react'; import { InspectorSession } from '@kbn/inspector-plugin/public'; -import { i18n } from '@kbn/i18n'; import { useKibana } from '.'; import { InspectorContext } from '../containers/inspector'; - -const INSPECTOR_FLYOUT_TITLE = i18n.translate('xpack.threatIntelligence.inspectorFlyoutTitle', { - defaultMessage: 'Indicators search requests', -}); +import { INSPECTOR_FLYOUT_TITLE } from './translations'; /** * diff --git a/x-pack/plugins/threat_intelligence/public/modules/block_list/containers/flyout.tsx b/x-pack/plugins/threat_intelligence/public/modules/block_list/containers/flyout.tsx index b75af1add4f41..c6107a6deea6f 100644 --- a/x-pack/plugins/threat_intelligence/public/modules/block_list/containers/flyout.tsx +++ b/x-pack/plugins/threat_intelligence/public/modules/block_list/containers/flyout.tsx @@ -10,6 +10,7 @@ import { CreateExceptionListItemSchema, EntriesArray, } from '@kbn/securitysolution-io-ts-list-types'; +import { ADD_TO_BLOCKLIST_FLYOUT_TITLE } from './translations'; import { useSecurityContext } from '../../../hooks/use_security_context'; export interface BlockListFlyoutProps { @@ -53,8 +54,14 @@ export const BlockListFlyout: VFC = ({ indicatorFileHash } type: 'simple', }; + // texts to customize the flyout + const labels = { + flyoutCreateTitle: ADD_TO_BLOCKLIST_FLYOUT_TITLE, + }; + const props = { apiClient: exceptionListApiClient, + labels, item, policies: [], FormComponent, diff --git a/x-pack/plugins/threat_intelligence/public/modules/block_list/containers/translations.ts b/x-pack/plugins/threat_intelligence/public/modules/block_list/containers/translations.ts new file mode 100644 index 0000000000000..6973bec879aa2 --- /dev/null +++ b/x-pack/plugins/threat_intelligence/public/modules/block_list/containers/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 ADD_TO_BLOCKLIST_FLYOUT_TITLE = i18n.translate( + 'xpack.threatIntelligence.blocklist.flyoutTitle', + { + defaultMessage: 'Add blocklist', + } +); diff --git a/x-pack/plugins/threat_intelligence/public/modules/empty_page/empty_page.tsx b/x-pack/plugins/threat_intelligence/public/modules/empty_page/empty_page.tsx index ac4f9104a7032..aec126ef50778 100644 --- a/x-pack/plugins/threat_intelligence/public/modules/empty_page/empty_page.tsx +++ b/x-pack/plugins/threat_intelligence/public/modules/empty_page/empty_page.tsx @@ -8,8 +8,8 @@ import React, { VFC } from 'react'; import { EuiButton, EuiEmptyPrompt, EuiImage, EuiLink } from '@elastic/eui'; -import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; +import { IMAGE } from './translations'; import { useIntegrationsPageLink, useTIDocumentationLink } from '../../hooks'; import illustration from './integrations_light.svg'; import { SecuritySolutionPluginTemplateWrapper } from '../../containers/security_solution_plugin_template_wrapper'; @@ -25,15 +25,7 @@ export const EmptyPage: VFC = () => { return ( - } + icon={} title={

( diff --git a/x-pack/plugins/threat_intelligence/public/modules/indicators/components/barchart/field_selector/translations.ts b/x-pack/plugins/threat_intelligence/public/modules/indicators/components/barchart/field_selector/translations.ts new file mode 100644 index 0000000000000..8952beae904aa --- /dev/null +++ b/x-pack/plugins/threat_intelligence/public/modules/indicators/components/barchart/field_selector/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 COMBOBOX_PREPEND_LABEL = i18n.translate( + 'xpack.threatIntelligence.indicator.fieldSelector.label', + { + defaultMessage: 'Stack by', + } +); diff --git a/x-pack/plugins/threat_intelligence/public/modules/indicators/components/barchart/legend_action/legend_action.tsx b/x-pack/plugins/threat_intelligence/public/modules/indicators/components/barchart/legend_action/legend_action.tsx index 5e679dbd0d12d..81924638a8093 100644 --- a/x-pack/plugins/threat_intelligence/public/modules/indicators/components/barchart/legend_action/legend_action.tsx +++ b/x-pack/plugins/threat_intelligence/public/modules/indicators/components/barchart/legend_action/legend_action.tsx @@ -7,7 +7,6 @@ import React, { useState, VFC } from 'react'; import { EuiButtonIcon, EuiContextMenuPanel, EuiPopover, EuiToolTip } from '@elastic/eui'; -import { i18n } from '@kbn/i18n'; import { CopyToClipboardContextMenu } from '../../copy_to_clipboard'; import { FilterInContextMenu, FilterOutContextMenu } from '../../../../query_bar'; import { AddToTimelineContextMenu } from '../../../../timeline'; @@ -18,10 +17,7 @@ import { POPOVER_BUTTON_TEST_ID, TIMELINE_BUTTON_TEST_ID, } from './test_ids'; - -const BUTTON_LABEL = i18n.translate('xpack.threatIntelligence.indicator.barChart.popover', { - defaultMessage: 'More actions', -}); +import { BUTTON_LABEL } from './translations'; export interface IndicatorBarchartLegendActionProps { /** diff --git a/x-pack/plugins/threat_intelligence/public/modules/indicators/components/barchart/legend_action/translations.ts b/x-pack/plugins/threat_intelligence/public/modules/indicators/components/barchart/legend_action/translations.ts new file mode 100644 index 0000000000000..3a256fc3aed3f --- /dev/null +++ b/x-pack/plugins/threat_intelligence/public/modules/indicators/components/barchart/legend_action/translations.ts @@ -0,0 +1,12 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; + +export const BUTTON_LABEL = i18n.translate('xpack.threatIntelligence.indicator.barChart.popover', { + defaultMessage: 'More actions', +}); diff --git a/x-pack/plugins/threat_intelligence/public/modules/indicators/components/copy_to_clipboard/copy_to_clipboard.tsx b/x-pack/plugins/threat_intelligence/public/modules/indicators/components/copy_to_clipboard/copy_to_clipboard.tsx index a78df8e8fad36..1429645508826 100644 --- a/x-pack/plugins/threat_intelligence/public/modules/indicators/components/copy_to_clipboard/copy_to_clipboard.tsx +++ b/x-pack/plugins/threat_intelligence/public/modules/indicators/components/copy_to_clipboard/copy_to_clipboard.tsx @@ -7,15 +7,9 @@ import React, { VFC } from 'react'; import { EuiButtonEmpty, EuiButtonIcon, EuiContextMenuItem, EuiCopy } from '@elastic/eui'; -import { i18n } from '@kbn/i18n'; +import { COPY_TITLE } from './translations'; const COPY_ICON = 'copyClipboard'; -const COPY_TITLE = i18n.translate( - 'xpack.threatIntelligence.indicators.table.copyToClipboardLabel', - { - defaultMessage: 'Copy to clipboard', - } -); export interface CopyToClipboardProps { /** diff --git a/x-pack/plugins/threat_intelligence/public/modules/indicators/components/copy_to_clipboard/translations.ts b/x-pack/plugins/threat_intelligence/public/modules/indicators/components/copy_to_clipboard/translations.ts new file mode 100644 index 0000000000000..23866eae9bfc6 --- /dev/null +++ b/x-pack/plugins/threat_intelligence/public/modules/indicators/components/copy_to_clipboard/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 COPY_TITLE = i18n.translate( + 'xpack.threatIntelligence.indicators.table.copyToClipboardLabel', + { + defaultMessage: 'Copy to clipboard', + } +); diff --git a/x-pack/plugins/threat_intelligence/public/modules/indicators/components/field_label/field_label.tsx b/x-pack/plugins/threat_intelligence/public/modules/indicators/components/field_label/field_label.tsx index 64e85bc8c5d7e..b270f561cee69 100644 --- a/x-pack/plugins/threat_intelligence/public/modules/indicators/components/field_label/field_label.tsx +++ b/x-pack/plugins/threat_intelligence/public/modules/indicators/components/field_label/field_label.tsx @@ -6,8 +6,17 @@ */ import React, { VFC } from 'react'; -import { i18n } from '@kbn/i18n'; import { RawIndicatorFieldId } from '../../../../../common/types/indicator'; +import { + CONFIDENCE, + FEED, + FIRST_SEEN, + INDICATORS, + LAST_SEEN, + TIMESTAMP, + TLP_MARKETING, + TYPE, +} from './translations'; interface IndicatorFieldLabelProps { field: string; @@ -26,44 +35,28 @@ export const translateFieldLabel = (field: string) => { // https://github.com/elastic/kibana/blob/main/src/dev/i18n/README.md switch (field) { case RawIndicatorFieldId.TimeStamp: { - return i18n.translate('xpack.threatIntelligence.field.@timestamp', { - defaultMessage: '@timestamp', - }); + return TIMESTAMP; } case RawIndicatorFieldId.Name: { - return i18n.translate('xpack.threatIntelligence.field.threat.indicator.name', { - defaultMessage: 'Indicator', - }); + return INDICATORS; } case RawIndicatorFieldId.Type: { - return i18n.translate('xpack.threatIntelligence.field.threat.indicator.type', { - defaultMessage: 'Indicator type', - }); + return TYPE; } case RawIndicatorFieldId.Feed: { - return i18n.translate('xpack.threatIntelligence.field.threat.feed.name', { - defaultMessage: 'Feed', - }); + return FEED; } case RawIndicatorFieldId.FirstSeen: { - return i18n.translate('xpack.threatIntelligence.field.threat.indicator.first_seen', { - defaultMessage: 'First seen', - }); + return FIRST_SEEN; } case RawIndicatorFieldId.LastSeen: { - return i18n.translate('xpack.threatIntelligence.field.threat.indicator.last_seen', { - defaultMessage: 'Last seen', - }); + return LAST_SEEN; } case RawIndicatorFieldId.Confidence: { - return i18n.translate('xpack.threatIntelligence.field.threat.indicator.confidence', { - defaultMessage: 'Confidence', - }); + return CONFIDENCE; } case RawIndicatorFieldId.MarkingTLP: { - return i18n.translate('xpack.threatIntelligence.field.threat.indicator.marking.tlp', { - defaultMessage: 'TLP Marking', - }); + return TLP_MARKETING; } default: return field; diff --git a/x-pack/plugins/threat_intelligence/public/modules/indicators/components/field_label/translations.ts b/x-pack/plugins/threat_intelligence/public/modules/indicators/components/field_label/translations.ts new file mode 100644 index 0000000000000..0e39c66e7f632 --- /dev/null +++ b/x-pack/plugins/threat_intelligence/public/modules/indicators/components/field_label/translations.ts @@ -0,0 +1,52 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; + +export const TIMESTAMP = i18n.translate('xpack.threatIntelligence.field.@timestamp', { + defaultMessage: '@timestamp', +}); + +export const INDICATORS = i18n.translate('xpack.threatIntelligence.field.threat.indicator.name', { + defaultMessage: 'Indicator', +}); + +export const TYPE = i18n.translate('xpack.threatIntelligence.field.threat.indicator.type', { + defaultMessage: 'Indicator type', +}); + +export const FEED = i18n.translate('xpack.threatIntelligence.field.threat.feed.name', { + defaultMessage: 'Feed', +}); + +export const FIRST_SEEN = i18n.translate( + 'xpack.threatIntelligence.field.threat.indicator.first_seen', + { + defaultMessage: 'First seen', + } +); + +export const LAST_SEEN = i18n.translate( + 'xpack.threatIntelligence.field.threat.indicator.last_seen', + { + defaultMessage: 'Last seen', + } +); + +export const CONFIDENCE = i18n.translate( + 'xpack.threatIntelligence.field.threat.indicator.confidence', + { + defaultMessage: 'Confidence', + } +); + +export const TLP_MARKETING = i18n.translate( + 'xpack.threatIntelligence.field.threat.indicator.marking.tlp', + { + defaultMessage: 'TLP Marking', + } +); diff --git a/x-pack/plugins/threat_intelligence/public/modules/indicators/components/flyout/indicator_value_actions/indicator_value_actions.tsx b/x-pack/plugins/threat_intelligence/public/modules/indicators/components/flyout/indicator_value_actions/indicator_value_actions.tsx index 81cd73cde5284..ac6d6c2d0df93 100644 --- a/x-pack/plugins/threat_intelligence/public/modules/indicators/components/flyout/indicator_value_actions/indicator_value_actions.tsx +++ b/x-pack/plugins/threat_intelligence/public/modules/indicators/components/flyout/indicator_value_actions/indicator_value_actions.tsx @@ -13,7 +13,6 @@ import { EuiPopover, EuiToolTip, } from '@elastic/eui'; -import { i18n } from '@kbn/i18n'; import { useIndicatorsFlyoutContext } from '../use_context'; import { Indicator } from '../../../../../../common/types/indicator'; import { FilterInButtonIcon, FilterOutButtonIcon } from '../../../../query_bar'; @@ -27,10 +26,7 @@ import { POPOVER_BUTTON_TEST_ID, TIMELINE_BUTTON_TEST_ID, } from './test_ids'; - -const MORE_ACTIONS_BUTTON_LABEL = i18n.translate('xpack.threatIntelligence.more-actions.popover', { - defaultMessage: 'More actions', -}); +import { MORE_ACTIONS_BUTTON_LABEL } from './translations'; interface IndicatorValueActions { /** diff --git a/x-pack/plugins/threat_intelligence/public/modules/indicators/components/flyout/indicator_value_actions/translations.ts b/x-pack/plugins/threat_intelligence/public/modules/indicators/components/flyout/indicator_value_actions/translations.ts new file mode 100644 index 0000000000000..05d20ca454aad --- /dev/null +++ b/x-pack/plugins/threat_intelligence/public/modules/indicators/components/flyout/indicator_value_actions/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 MORE_ACTIONS_BUTTON_LABEL = i18n.translate( + 'xpack.threatIntelligence.more-actions.popover', + { + defaultMessage: 'More actions', + } +); diff --git a/x-pack/plugins/threat_intelligence/public/modules/indicators/components/table/components/more_actions/more_actions.tsx b/x-pack/plugins/threat_intelligence/public/modules/indicators/components/table/components/more_actions/more_actions.tsx index a5f6955f00004..8566a7d92f56b 100644 --- a/x-pack/plugins/threat_intelligence/public/modules/indicators/components/table/components/more_actions/more_actions.tsx +++ b/x-pack/plugins/threat_intelligence/public/modules/indicators/components/table/components/more_actions/more_actions.tsx @@ -13,7 +13,6 @@ import { EuiToolTip, useGeneratedHtmlId, } from '@elastic/eui'; -import { i18n } from '@kbn/i18n'; import { AddToBlockListContextMenu } from '../../../../../block_list/components/add_to_block_list'; import { AddToNewCase } from '../../../../../cases/components/add_to_new_case/add_to_new_case'; import { AddToExistingCase } from '../../../../../cases/components/add_to_existing_case/add_to_existing_case'; @@ -25,10 +24,7 @@ import { ADD_TO_NEW_CASE_TEST_ID, MORE_ACTIONS_TEST_ID, } from './test_ids'; - -const BUTTON_LABEL = i18n.translate('xpack.threatIntelligence.indicator.table.moreActions', { - defaultMessage: 'More actions', -}); +import { BUTTON_LABEL } from './translations'; export interface TakeActionProps { /** diff --git a/x-pack/plugins/threat_intelligence/public/modules/indicators/components/table/components/more_actions/translations.ts b/x-pack/plugins/threat_intelligence/public/modules/indicators/components/table/components/more_actions/translations.ts new file mode 100644 index 0000000000000..7b78b0df0cf25 --- /dev/null +++ b/x-pack/plugins/threat_intelligence/public/modules/indicators/components/table/components/more_actions/translations.ts @@ -0,0 +1,12 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; + +export const BUTTON_LABEL = i18n.translate('xpack.threatIntelligence.indicator.table.moreActions', { + defaultMessage: 'More actions', +}); diff --git a/x-pack/plugins/threat_intelligence/public/modules/indicators/components/table/components/open_flyout_button/open_flyout_button.tsx b/x-pack/plugins/threat_intelligence/public/modules/indicators/components/table/components/open_flyout_button/open_flyout_button.tsx index 068b5b6e7ede2..72d6c1f99df57 100644 --- a/x-pack/plugins/threat_intelligence/public/modules/indicators/components/table/components/open_flyout_button/open_flyout_button.tsx +++ b/x-pack/plugins/threat_intelligence/public/modules/indicators/components/table/components/open_flyout_button/open_flyout_button.tsx @@ -7,16 +7,9 @@ import React, { VFC } from 'react'; import { EuiButtonIcon, EuiToolTip } from '@elastic/eui'; -import { i18n } from '@kbn/i18n'; import { Indicator } from '../../../../../../../common/types/indicator'; import { BUTTON_TEST_ID } from './test_ids'; - -const BUTTON_LABEL: string = i18n.translate( - 'xpack.threatIntelligence.indicator.table.viewDetailsButton', - { - defaultMessage: 'View details', - } -); +import { BUTTON_LABEL } from './translations'; export interface OpenIndicatorFlyoutButtonProps { /** diff --git a/x-pack/plugins/threat_intelligence/public/modules/indicators/components/table/components/open_flyout_button/translations.ts b/x-pack/plugins/threat_intelligence/public/modules/indicators/components/table/components/open_flyout_button/translations.ts new file mode 100644 index 0000000000000..efc193c8e712f --- /dev/null +++ b/x-pack/plugins/threat_intelligence/public/modules/indicators/components/table/components/open_flyout_button/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 BUTTON_LABEL: string = i18n.translate( + 'xpack.threatIntelligence.indicator.table.viewDetailsButton', + { + defaultMessage: 'View details', + } +); diff --git a/x-pack/plugins/threat_intelligence/public/modules/indicators/components/table/hooks/translations.ts b/x-pack/plugins/threat_intelligence/public/modules/indicators/components/table/hooks/translations.ts new file mode 100644 index 0000000000000..667de6a12a10c --- /dev/null +++ b/x-pack/plugins/threat_intelligence/public/modules/indicators/components/table/hooks/translations.ts @@ -0,0 +1,12 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; + +export const INSPECT_BUTTON_TITLE = i18n.translate('xpack.threatIntelligence.inspectTitle', { + defaultMessage: 'Inspect', +}); diff --git a/x-pack/plugins/threat_intelligence/public/modules/indicators/components/table/hooks/use_toolbar_options.tsx b/x-pack/plugins/threat_intelligence/public/modules/indicators/components/table/hooks/use_toolbar_options.tsx index d4fee48456411..692e03f5c7292 100644 --- a/x-pack/plugins/threat_intelligence/public/modules/indicators/components/table/hooks/use_toolbar_options.tsx +++ b/x-pack/plugins/threat_intelligence/public/modules/indicators/components/table/hooks/use_toolbar_options.tsx @@ -7,15 +7,11 @@ import React, { useMemo } from 'react'; import { EuiButtonIcon, EuiDataGridColumn, EuiText } from '@elastic/eui'; -import { i18n } from '@kbn/i18n'; import { BrowserField } from '@kbn/rule-registry-plugin/common'; import { useInspector } from '../../../../../hooks'; import { IndicatorsFieldBrowser } from '../components'; import { INSPECT_BUTTON_TEST_ID } from './test_ids'; - -const INSPECT_BUTTON_TITLE = i18n.translate('xpack.threatIntelligence.inspectTitle', { - defaultMessage: 'Inspect', -}); +import { INSPECT_BUTTON_TITLE } from './translations'; export const useToolbarOptions = ({ browserFields, diff --git a/x-pack/plugins/threat_intelligence/public/modules/indicators/hooks/translations.ts b/x-pack/plugins/threat_intelligence/public/modules/indicators/hooks/translations.ts new file mode 100644 index 0000000000000..55d930eb5a1e8 --- /dev/null +++ b/x-pack/plugins/threat_intelligence/public/modules/indicators/hooks/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 DESCRIPTION = i18n.translate( + 'xpack.threatIntelligence.indicatorNameFieldDescription', + { + defaultMessage: 'Indicator display name generated in the runtime ', + } +); diff --git a/x-pack/plugins/threat_intelligence/public/modules/indicators/hooks/use_sourcerer_data_view.ts b/x-pack/plugins/threat_intelligence/public/modules/indicators/hooks/use_sourcerer_data_view.ts index 94e8c7a489fe9..d2e12d545036c 100644 --- a/x-pack/plugins/threat_intelligence/public/modules/indicators/hooks/use_sourcerer_data_view.ts +++ b/x-pack/plugins/threat_intelligence/public/modules/indicators/hooks/use_sourcerer_data_view.ts @@ -6,10 +6,10 @@ */ import { useMemo } from 'react'; -import { i18n } from '@kbn/i18n'; import { RawIndicatorFieldId } from '../../../../common/types/indicator'; import { SecuritySolutionDataViewBase } from '../../../types'; import { useSecurityContext } from '../../../hooks/use_security_context'; +import { DESCRIPTION } from './translations'; /** * Inline definition for a runtime field "threat.indicator.name" we are adding for indicators grid @@ -20,9 +20,7 @@ const indicatorNameField = { searchable: true, type: 'string', category: 'threat', - description: i18n.translate('xpack.threatIntelligence.indicatorNameFieldDescription', { - defaultMessage: 'Indicator display name generated in the runtime ', - }), + description: DESCRIPTION, esTypes: ['keyword'], } as const; diff --git a/x-pack/plugins/threat_intelligence/public/modules/query_bar/components/filter_in/filter_in.tsx b/x-pack/plugins/threat_intelligence/public/modules/query_bar/components/filter_in/filter_in.tsx index 0a8a0e294e124..1a40fc8e7747e 100644 --- a/x-pack/plugins/threat_intelligence/public/modules/query_bar/components/filter_in/filter_in.tsx +++ b/x-pack/plugins/threat_intelligence/public/modules/query_bar/components/filter_in/filter_in.tsx @@ -6,7 +6,6 @@ */ import React, { VFC } from 'react'; -import { i18n } from '@kbn/i18n'; import { EuiButtonEmpty, EuiButtonIcon, @@ -17,11 +16,9 @@ import { import { useFilterInOut } from '../../hooks'; import { FilterIn } from '../../utils'; import { Indicator } from '../../../../../common/types/indicator'; +import { TITLE } from './translations'; const ICON_TYPE = 'plusInCircle'; -const TITLE = i18n.translate('xpack.threatIntelligence.queryBar.filterIn', { - defaultMessage: 'Filter In', -}); export interface FilterInProps { /** diff --git a/x-pack/plugins/threat_intelligence/public/modules/query_bar/components/filter_in/translations.ts b/x-pack/plugins/threat_intelligence/public/modules/query_bar/components/filter_in/translations.ts new file mode 100644 index 0000000000000..c5dea8f2892f2 --- /dev/null +++ b/x-pack/plugins/threat_intelligence/public/modules/query_bar/components/filter_in/translations.ts @@ -0,0 +1,12 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; + +export const TITLE = i18n.translate('xpack.threatIntelligence.queryBar.filterIn', { + defaultMessage: 'Filter In', +}); diff --git a/x-pack/plugins/threat_intelligence/public/modules/query_bar/components/filter_out/filter_out.tsx b/x-pack/plugins/threat_intelligence/public/modules/query_bar/components/filter_out/filter_out.tsx index 2d8a96463af5a..5b3dd80ab896f 100644 --- a/x-pack/plugins/threat_intelligence/public/modules/query_bar/components/filter_out/filter_out.tsx +++ b/x-pack/plugins/threat_intelligence/public/modules/query_bar/components/filter_out/filter_out.tsx @@ -6,7 +6,6 @@ */ import React, { VFC } from 'react'; -import { i18n } from '@kbn/i18n'; import { EuiButtonEmpty, EuiButtonIcon, @@ -17,11 +16,9 @@ import { import { useFilterInOut } from '../../hooks'; import { FilterOut } from '../../utils'; import { Indicator } from '../../../../../common/types/indicator'; +import { TITLE } from './translations'; const ICON_TYPE = 'minusInCircle'; -const TITLE = i18n.translate('xpack.threatIntelligence.queryBar.filterOut', { - defaultMessage: 'Filter Out', -}); export interface FilterOutProps { /** diff --git a/x-pack/plugins/threat_intelligence/public/modules/query_bar/components/filter_out/translations.ts b/x-pack/plugins/threat_intelligence/public/modules/query_bar/components/filter_out/translations.ts new file mode 100644 index 0000000000000..02b1b9eab1b20 --- /dev/null +++ b/x-pack/plugins/threat_intelligence/public/modules/query_bar/components/filter_out/translations.ts @@ -0,0 +1,12 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; + +export const TITLE = i18n.translate('xpack.threatIntelligence.queryBar.filterOut', { + defaultMessage: 'Filter Out', +}); diff --git a/x-pack/plugins/threat_intelligence/public/modules/timeline/components/add_to_timeline/add_to_timeline.tsx b/x-pack/plugins/threat_intelligence/public/modules/timeline/components/add_to_timeline/add_to_timeline.tsx index d15c06426311f..10c17ae7070bb 100644 --- a/x-pack/plugins/threat_intelligence/public/modules/timeline/components/add_to_timeline/add_to_timeline.tsx +++ b/x-pack/plugins/threat_intelligence/public/modules/timeline/components/add_to_timeline/add_to_timeline.tsx @@ -15,18 +15,15 @@ import { EuiFlexItem, EuiToolTip, } from '@elastic/eui'; -import { i18n } from '@kbn/i18n'; import { generateDataProvider } from '../../utils'; import { fieldAndValueValid, getIndicatorFieldAndValue } from '../../../indicators'; import { Indicator } from '../../../../../common/types/indicator'; import { useKibana } from '../../../../hooks'; import { useStyles } from './styles'; import { useAddToTimeline } from '../../hooks'; +import { TITLE } from './translations'; const ICON_TYPE = 'timeline'; -const TITLE = i18n.translate('xpack.threatIntelligence.timeline.addToTimeline', { - defaultMessage: 'Add to Timeline', -}); export interface AddToTimelineProps { /** diff --git a/x-pack/plugins/threat_intelligence/public/modules/timeline/components/add_to_timeline/translations.ts b/x-pack/plugins/threat_intelligence/public/modules/timeline/components/add_to_timeline/translations.ts new file mode 100644 index 0000000000000..b4ac2e1dc1b92 --- /dev/null +++ b/x-pack/plugins/threat_intelligence/public/modules/timeline/components/add_to_timeline/translations.ts @@ -0,0 +1,12 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; + +export const TITLE = i18n.translate('xpack.threatIntelligence.timeline.addToTimeline', { + defaultMessage: 'Add to Timeline', +}); diff --git a/x-pack/plugins/threat_intelligence/public/modules/timeline/components/investigate_in_timeline/investigate_in_timeline.tsx b/x-pack/plugins/threat_intelligence/public/modules/timeline/components/investigate_in_timeline/investigate_in_timeline.tsx index 2e92491c09390..6c88183b509d0 100644 --- a/x-pack/plugins/threat_intelligence/public/modules/timeline/components/investigate_in_timeline/investigate_in_timeline.tsx +++ b/x-pack/plugins/threat_intelligence/public/modules/timeline/components/investigate_in_timeline/investigate_in_timeline.tsx @@ -8,16 +8,9 @@ import React, { VFC } from 'react'; import { EuiButtonIcon, EuiContextMenuItem, EuiToolTip } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; -import { i18n } from '@kbn/i18n'; import { useInvestigateInTimeline } from '../../hooks'; import { Indicator } from '../../../../../common/types/indicator'; - -const BUTTON_ICON_LABEL: string = i18n.translate( - 'xpack.threatIntelligence.timeline.investigateInTimelineButtonIcon', - { - defaultMessage: 'Investigate in Timeline', - } -); +import { BUTTON_ICON_LABEL } from './translations'; export interface InvestigateInTimelineProps { /** diff --git a/x-pack/plugins/threat_intelligence/public/modules/timeline/components/investigate_in_timeline/translations.ts b/x-pack/plugins/threat_intelligence/public/modules/timeline/components/investigate_in_timeline/translations.ts new file mode 100644 index 0000000000000..670742d81c409 --- /dev/null +++ b/x-pack/plugins/threat_intelligence/public/modules/timeline/components/investigate_in_timeline/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 BUTTON_ICON_LABEL: string = i18n.translate( + 'xpack.threatIntelligence.timeline.investigateInTimelineButtonIcon', + { + defaultMessage: 'Investigate in Timeline', + } +); diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 2608edfdd2dfe..02f08c61ce069 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -10568,7 +10568,6 @@ "xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.description.secondParagraph": "Le référentiel de connecteurs contient plusieurs liens ({link}) pour vous aider à utiliser notre cadre de développement accéléré avec des sources de données personnalisées.", "xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.description.thirdParagraph": "Dans cette étape, vous devez cloner ou dupliquer le référentiel, puis copier la clé d'API et l'ID de connecteur générés au {link} associé. L'ID de connecteur identifie ce connecteur auprès d'Enterprise Search.", "xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.config.sourceSecurityDocumentationLinkLabel": "Authentification {name}", - "xpack.enterpriseSearch.content.indices.configurationConnector.researchConfiguration.description": "{name} prend en charge différents mécanismes d'authentification qui seront nécessaires à ce connecteur pour se connecter à votre instance. Consultez votre administrateur afin de connaître les informations d'identification correctes pour vous connecter.", "xpack.enterpriseSearch.content.indices.configurationConnector.researchConfiguration.serviceDocumentationLinkLabel": "Documentation sur {name}", "xpack.enterpriseSearch.content.indices.deleteIndex.successToast.title": "Votre index {indexName} et toute configuration d'ingestion associée ont été supprimés avec succès", "xpack.enterpriseSearch.content.indices.pipelines.addInferencePipelineModal.steps.configure.sourceField.error": "La sélection d'un champ source est requise pour la configuration du pipeline, mais cet index n'a pas de mapping de champ. {learnMore}", @@ -11800,7 +11799,6 @@ "xpack.enterpriseSearch.content.indices.pipelines.tabs.jsonConfigurations.title": "Configurations du pipeline", "xpack.enterpriseSearch.content.indices.pipelines.tabs.jsonConfigurations.unmanaged": "Non géré", "xpack.enterpriseSearch.content.indices.selectConnector.buildYourOwnConnectorLinkLabel": "créez-les vous-même", - "xpack.enterpriseSearch.content.indices.selectConnector.connectorCheckable.basicAuthenticationLabel": "Authentification de base", "xpack.enterpriseSearch.content.indices.selectConnector.connectorCheckable.documentationLinkLabel": "Documentation", "xpack.enterpriseSearch.content.indices.selectConnector.description": "Lancez-vous en sélectionnant le connecteur que vous souhaiteriez configurer pour extraire, indexer et synchroniser les données à partir de votre source de données dans votre index de recherche nouvellement créé.", "xpack.enterpriseSearch.content.indices.selectConnector.selectAndConfigureButtonLabel": "Sélectionner et configurer", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index bb2e6af5dd6f1..cb19db1d673ec 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -10556,7 +10556,6 @@ "xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.description.secondParagraph": "コネクターリポジトリには、複数の{link}があり、当社のフレームワークを利用して、カスタムデータソースに対する高速デプロイを実施できるようになっています。", "xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.description.thirdParagraph": "このステップでは、リポジトリを複製または分割し、関連付けられた{link}に対する生成されたAPIキーとコネクターIDをコピーします。コネクターIDは、エンタープライズ サーチに対するこのコネクターを特定します。", "xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.config.sourceSecurityDocumentationLinkLabel": "{name}認証", - "xpack.enterpriseSearch.content.indices.configurationConnector.researchConfiguration.description": "{name}は、このコネクターがインスタンスに接続するために必要なさまざまな認証メカニズムをサポートします。接続で使用する正しい資格情報については、管理者にお問い合わせください。", "xpack.enterpriseSearch.content.indices.configurationConnector.researchConfiguration.serviceDocumentationLinkLabel": "{name}ドキュメンテーション", "xpack.enterpriseSearch.content.indices.deleteIndex.successToast.title": "インデックス{indexName}と関連付けられたすべての統合構成が正常に削除されました", "xpack.enterpriseSearch.content.indices.pipelines.addInferencePipelineModal.steps.configure.sourceField.error": "パイプラインのソースフィールドを選択する必要があります。ただし、このインデックスにはフィールドマッピングがありません。{learnMore}", @@ -11787,7 +11786,6 @@ "xpack.enterpriseSearch.content.indices.pipelines.tabs.jsonConfigurations.title": "パイプライン構成", "xpack.enterpriseSearch.content.indices.pipelines.tabs.jsonConfigurations.unmanaged": "管理対象外", "xpack.enterpriseSearch.content.indices.selectConnector.buildYourOwnConnectorLinkLabel": "世界に1つ", - "xpack.enterpriseSearch.content.indices.selectConnector.connectorCheckable.basicAuthenticationLabel": "基本認証", "xpack.enterpriseSearch.content.indices.selectConnector.connectorCheckable.documentationLinkLabel": "ドキュメント", "xpack.enterpriseSearch.content.indices.selectConnector.description": "まず、データソースから、新しく作成された検索インデックスに、データを抽出、インデックス、同期するように構成するコネクターを選択します。", "xpack.enterpriseSearch.content.indices.selectConnector.selectAndConfigureButtonLabel": "選択して構成", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 925695a5fc21b..d6ab67bb9095b 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -10572,7 +10572,6 @@ "xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.description.secondParagraph": "连接器存储库包含几个 {link},有助于您利用我们的框架针对定制数据源进行加速开发。", "xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.description.thirdParagraph": "在此步骤中,您需要克隆或分叉存储库,然后将生成的 API 密钥和连接器 ID 复制到关联的 {link}。连接器 ID 会将此连接器标识到 Enterprise Search。", "xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.config.sourceSecurityDocumentationLinkLabel": "{name} 身份验证", - "xpack.enterpriseSearch.content.indices.configurationConnector.researchConfiguration.description": "{name} 支持一系列身份验证机制,此连接器需要通过这些机制连接到您的实例。请联系您的管理员获取用于建立连接的正确凭据。", "xpack.enterpriseSearch.content.indices.configurationConnector.researchConfiguration.serviceDocumentationLinkLabel": "{name} 文档", "xpack.enterpriseSearch.content.indices.deleteIndex.successToast.title": "您的索引 {indexName} 和任何关联的采集配置已成功删除", "xpack.enterpriseSearch.content.indices.pipelines.addInferencePipelineModal.steps.configure.sourceField.error": "配置管道需要选择源字段,但此索引没有字段映射。{learnMore}", @@ -11804,7 +11803,6 @@ "xpack.enterpriseSearch.content.indices.pipelines.tabs.jsonConfigurations.title": "管道配置", "xpack.enterpriseSearch.content.indices.pipelines.tabs.jsonConfigurations.unmanaged": "未受管", "xpack.enterpriseSearch.content.indices.selectConnector.buildYourOwnConnectorLinkLabel": "自行构建", - "xpack.enterpriseSearch.content.indices.selectConnector.connectorCheckable.basicAuthenticationLabel": "基本身份验证", "xpack.enterpriseSearch.content.indices.selectConnector.connectorCheckable.documentationLinkLabel": "文档", "xpack.enterpriseSearch.content.indices.selectConnector.description": "通过选择要配置以从数据源中提取、索引数据并将其同步到您新建的搜索索引的连接器,从而开始使用。", "xpack.enterpriseSearch.content.indices.selectConnector.selectAndConfigureButtonLabel": "选择并配置", diff --git a/x-pack/plugins/triggers_actions_ui/public/application/constants/index.ts b/x-pack/plugins/triggers_actions_ui/public/application/constants/index.ts index e3540feb36c28..19b66ff62d524 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/constants/index.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/constants/index.ts @@ -34,7 +34,7 @@ export const summaryMessage = i18n.translate( 'xpack.triggersActionsUI.sections.actionForm.SummaryMessage', { defaultMessage: - 'The system has detected \\{\\{alerts.new.count\\}\\} new, \\{\\{alerts.ongoing.count\\}\\} ongoing, and \\{\\{alerts.recovered.count\\}\\} alerts.', + 'The system has detected \\{\\{alerts.new.count\\}\\} new, \\{\\{alerts.ongoing.count\\}\\} ongoing, and \\{\\{alerts.recovered.count\\}\\} recovered alerts.', } ); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/edit_connector_flyout/index.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/edit_connector_flyout/index.test.tsx index 715279fa67b1a..c2e25d9fe06a6 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/edit_connector_flyout/index.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/edit_connector_flyout/index.test.tsx @@ -444,6 +444,40 @@ describe('EditConnectorFlyout', () => { }); }); + it('updates connector form field with latest value', async () => { + const { getByTestId } = appMockRenderer.render( + + ); + + await waitFor(() => { + expect(getByTestId('test-connector-text-field')).toBeInTheDocument(); + }); + + userEvent.clear(getByTestId('test-connector-text-field')); + await userEvent.type(getByTestId('test-connector-text-field'), 'My updated text field', { + delay: 100, + }); + + userEvent.clear(getByTestId('nameInput')); + await userEvent.type(getByTestId('nameInput'), 'My test', { + delay: 100, + }); + await userEvent.type(getByTestId('test-connector-secret-text-field'), 'password', { + delay: 100, + }); + + userEvent.click(getByTestId('edit-connector-flyout-save-btn')); + + await waitFor(() => { + expect(getByTestId('test-connector-text-field')).toHaveValue('My updated text field'); + }); + }); + it('updates the connector and close the flyout correctly', async () => { const { getByTestId, getByText } = appMockRenderer.render( { + describe('getGridTile', () => { const URL = `/api/maps/mvt/getGridTile/3/2/3.pbf\ ?geometryFieldName=geo.coordinates\ &hasLabels=false\ @@ -152,13 +151,13 @@ export default function ({ getService }) { // assert feature geometry is hex expect(gridFeature.loadGeometry()).to.eql([ [ - { x: 111, y: 698 }, { x: 89, y: 710 }, { x: 67, y: 696 }, { x: 67, y: 669 }, { x: 89, y: 657 }, { x: 112, y: 672 }, { x: 111, y: 698 }, + { x: 89, y: 710 }, ], ]); }); diff --git a/x-pack/test/api_integration/apis/ml/jobs/index.ts b/x-pack/test/api_integration/apis/ml/jobs/index.ts index 8152f3e760b60..2d69da4a0548e 100644 --- a/x-pack/test/api_integration/apis/ml/jobs/index.ts +++ b/x-pack/test/api_integration/apis/ml/jobs/index.ts @@ -24,5 +24,6 @@ export default function ({ loadTestFile }: FtrProviderContext) { loadTestFile(require.resolve('./stop_datafeeds_spaces')); loadTestFile(require.resolve('./get_groups')); loadTestFile(require.resolve('./jobs')); + loadTestFile(require.resolve('./reset')); }); } diff --git a/x-pack/test/api_integration/apis/ml/jobs/reset.ts b/x-pack/test/api_integration/apis/ml/jobs/reset.ts new file mode 100644 index 0000000000000..668e3a8ccc0bb --- /dev/null +++ b/x-pack/test/api_integration/apis/ml/jobs/reset.ts @@ -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 expect from '@kbn/expect'; + +import { ANNOTATION_TYPE } from '@kbn/ml-plugin/common/constants/annotations'; +import { FtrProviderContext } from '../../../ftr_provider_context'; +import { COMMON_REQUEST_HEADERS } from '../../../../functional/services/ml/common_api'; +import { USER } from '../../../../functional/services/ml/security_common'; +import { MULTI_METRIC_JOB_CONFIG, SINGLE_METRIC_JOB_CONFIG, DATAFEED_CONFIG } from './common_jobs'; + +export default ({ getService }: FtrProviderContext) => { + const esArchiver = getService('esArchiver'); + const supertest = getService('supertestWithoutAuth'); + const ml = getService('ml'); + + const testSetupJobConfigs = [SINGLE_METRIC_JOB_CONFIG, MULTI_METRIC_JOB_CONFIG]; + + async function runResetJobsRequest( + user: USER, + requestBody: object, + expectedResponsecode: number + ): Promise { + const { body, status } = await supertest + .post('/api/ml/jobs/reset_jobs') + .auth(user, ml.securityCommon.getPasswordForUser(user)) + .set(COMMON_REQUEST_HEADERS) + .send(requestBody); + ml.api.assertResponseStatusCode(expectedResponsecode, status, body); + + return body; + } + + async function createAnnotation(jobId: string, annotation: string) { + await ml.api.indexAnnotation({ + timestamp: 1549756524346, + end_timestamp: 1549766472273, + annotation, + job_id: jobId, + type: ANNOTATION_TYPE.ANNOTATION, + detector_index: 0, + event: 'user', + }); + } + + const expectedResetResponseBody = { + [SINGLE_METRIC_JOB_CONFIG.job_id]: { reset: true, task: 'cannot be predicted' }, + [MULTI_METRIC_JOB_CONFIG.job_id]: { reset: true, task: 'cannot be predicted' }, + }; + + describe('reset_jobs', function () { + before(async () => { + await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/ml/farequote'); + await ml.testResources.createIndexPatternIfNeeded('ft_farequote', '@timestamp'); + await ml.testResources.setKibanaTimeZoneToUTC(); + }); + + after(async () => { + await ml.testResources.deleteIndexPatternByTitle('ft_farequote'); + }); + + beforeEach(async () => { + for (const job of testSetupJobConfigs) { + const jobId = job.job_id; + const datafeedId = `datafeed-${jobId}`; + await ml.api.createAndRunAnomalyDetectionLookbackJob(job, { + ...DATAFEED_CONFIG, + datafeed_id: datafeedId, + job_id: jobId, + }); + + await createAnnotation(jobId, 'test test test'); + await ml.api.assertAnnotationsCount(jobId, 2); + await ml.api.waitForADJobRecordCount(jobId, 86274); + } + }); + + afterEach(async () => { + for (const job of testSetupJobConfigs) { + await ml.api.deleteAnomalyDetectionJobES(job.job_id); + } + await ml.api.cleanMlIndices(); + }); + + it('succeeds for ML Poweruser and keeps user annotations', async () => { + const jobIds = testSetupJobConfigs.map((c) => c.job_id); + const body = await runResetJobsRequest(USER.ML_POWERUSER, { jobIds }, 200); + + const expectedRspJobIds = Object.keys(expectedResetResponseBody).sort((a, b) => + a.localeCompare(b) + ); + const actualRspJobIds = Object.keys(body).sort((a, b) => a.localeCompare(b)); + expect(actualRspJobIds).to.eql(expectedRspJobIds); + + for (const id of jobIds) { + expect(body[id].reset).to.eql(expectedResetResponseBody[id].reset); + // processed record counts are reset to 0 + await ml.api.waitForADJobRecordCount(id, 0); + // user annotations are not deleted + await ml.api.assertAnnotationsCount(id, 1); + } + }); + + it('succeeds for ML Poweruser and deletes user annotations', async () => { + const jobIds = testSetupJobConfigs.map((c) => c.job_id); + const body = await runResetJobsRequest( + USER.ML_POWERUSER, + { jobIds, deleteUserAnnotations: true }, + 200 + ); + + const expectedRspJobIds = Object.keys(expectedResetResponseBody).sort((a, b) => + a.localeCompare(b) + ); + const actualRspJobIds = Object.keys(body).sort((a, b) => a.localeCompare(b)); + expect(actualRspJobIds).to.eql(expectedRspJobIds); + + for (const id of jobIds) { + expect(body[id].reset).to.eql(expectedResetResponseBody[id].reset); + // processed record counts are reset to 0 + await ml.api.waitForADJobRecordCount(id, 0); + // user annotations are deleted + await ml.api.assertAnnotationsCount(id, 0); + } + }); + + it('fails for ML viewer', async () => { + const jobIds = testSetupJobConfigs.map((c) => c.job_id); + await runResetJobsRequest(USER.ML_VIEWER, { jobIds }, 403); + }); + }); +}; diff --git a/x-pack/test/api_integration/apis/ml/saved_objects/index.ts b/x-pack/test/api_integration/apis/ml/saved_objects/index.ts index 5139a121e07d1..32c83cb624163 100644 --- a/x-pack/test/api_integration/apis/ml/saved_objects/index.ts +++ b/x-pack/test/api_integration/apis/ml/saved_objects/index.ts @@ -18,6 +18,7 @@ export default function ({ loadTestFile }: FtrProviderContext) { loadTestFile(require.resolve('./sync_jobs')); loadTestFile(require.resolve('./sync_trained_models')); loadTestFile(require.resolve('./update_jobs_spaces')); + loadTestFile(require.resolve('./update_trained_model_spaces')); loadTestFile(require.resolve('./remove_from_current_space')); }); } diff --git a/x-pack/test/api_integration/apis/ml/saved_objects/update_jobs_spaces.ts b/x-pack/test/api_integration/apis/ml/saved_objects/update_jobs_spaces.ts index 079b1b32f10b9..452bce090eacf 100644 --- a/x-pack/test/api_integration/apis/ml/saved_objects/update_jobs_spaces.ts +++ b/x-pack/test/api_integration/apis/ml/saved_objects/update_jobs_spaces.ts @@ -70,8 +70,8 @@ export default ({ getService }: FtrProviderContext) => { }); it('should assign AD job to space for user with access to that space', async () => { - await ml.api.assertJobSpaces(adJobId, 'anomaly-detector', [defaultSpaceId]); const jobType = 'anomaly-detector'; + await ml.api.assertJobSpaces(adJobId, jobType, [defaultSpaceId]); const body = await runRequest( { jobType, @@ -88,8 +88,8 @@ export default ({ getService }: FtrProviderContext) => { }); it('should assign DFA job to space for user with access to that space', async () => { - await ml.api.assertJobSpaces(dfaJobId, 'data-frame-analytics', [defaultSpaceId]); const jobType = 'data-frame-analytics'; + await ml.api.assertJobSpaces(dfaJobId, jobType, [defaultSpaceId]); const body = await runRequest( { jobType, @@ -106,8 +106,8 @@ export default ({ getService }: FtrProviderContext) => { }); it('should fail to update AD job spaces for space the user has no access to', async () => { - await ml.api.assertJobSpaces(adJobId, 'anomaly-detector', [defaultSpaceId]); const jobType = 'anomaly-detector'; + await ml.api.assertJobSpaces(adJobId, jobType, [defaultSpaceId]); const body = await runRequest( { jobType, @@ -124,8 +124,8 @@ export default ({ getService }: FtrProviderContext) => { }); it('should fail to update DFA job spaces for space the user has no access to', async () => { - await ml.api.assertJobSpaces(dfaJobId, 'data-frame-analytics', [defaultSpaceId]); const jobType = 'data-frame-analytics'; + await ml.api.assertJobSpaces(dfaJobId, jobType, [defaultSpaceId]); const body = await runRequest( { jobType, diff --git a/x-pack/test/api_integration/apis/ml/saved_objects/update_trained_model_spaces.ts b/x-pack/test/api_integration/apis/ml/saved_objects/update_trained_model_spaces.ts new file mode 100644 index 0000000000000..d8c764bf6535a --- /dev/null +++ b/x-pack/test/api_integration/apis/ml/saved_objects/update_trained_model_spaces.ts @@ -0,0 +1,98 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { FtrProviderContext } from '../../../ftr_provider_context'; +import { USER } from '../../../../functional/services/ml/security_common'; +import { COMMON_REQUEST_HEADERS } from '../../../../functional/services/ml/common_api'; + +export default ({ getService }: FtrProviderContext) => { + const ml = getService('ml'); + const spacesService = getService('spaces'); + const supertest = getService('supertestWithoutAuth'); + + const trainedModelId = 'trained_model'; + const idSpace1 = 'space1'; + const idSpace2 = 'space2'; + const defaultSpaceId = 'default'; + + async function runRequest( + requestBody: { + modelIds: string[]; + spacesToAdd: string[]; + spacesToRemove: string[]; + }, + expectedStatusCode: number, + user: USER + ) { + const { body, status } = await supertest + .post(`/api/ml/saved_objects/update_trained_models_spaces`) + .auth(user, ml.securityCommon.getPasswordForUser(user)) + .set(COMMON_REQUEST_HEADERS) + .send(requestBody); + ml.api.assertResponseStatusCode(expectedStatusCode, status, body); + + return body; + } + + describe('POST saved_objects/update_trained_models_spaces', () => { + before(async () => { + await spacesService.create({ id: idSpace1, name: 'space_one', disabledFeatures: [] }); + await spacesService.create({ id: idSpace2, name: 'space_two', disabledFeatures: [] }); + + await ml.testResources.setKibanaTimeZoneToUTC(); + }); + + beforeEach(async () => { + // Create trained model + const trainedModelConfig = ml.api.createTestTrainedModelConfig(trainedModelId, 'regression'); + await ml.api.createTrainedModel(trainedModelId, trainedModelConfig.body); + }); + + afterEach(async () => { + await ml.api.cleanMlIndices(); + await ml.testResources.cleanMLSavedObjects(); + }); + + after(async () => { + await spacesService.delete(idSpace1); + await spacesService.delete(idSpace2); + }); + + it('should assign trained model to space for user with access to that space', async () => { + await ml.api.assertTrainedModelSpaces(trainedModelId, [defaultSpaceId]); + const body = await runRequest( + { + modelIds: [trainedModelId], + spacesToAdd: [idSpace1], + spacesToRemove: [defaultSpaceId], + }, + 200, + USER.ML_POWERUSER_SPACE1 + ); + + expect(body).to.eql({ [trainedModelId]: { type: 'trained-model', success: true } }); + await ml.api.assertTrainedModelSpaces(trainedModelId, [idSpace1]); + }); + + it('should fail to update trained model spaces for space the user has no access to', async () => { + await ml.api.assertTrainedModelSpaces(trainedModelId, [defaultSpaceId]); + const body = await runRequest( + { + modelIds: [trainedModelId], + spacesToAdd: [idSpace2], + spacesToRemove: [], + }, + 200, + USER.ML_POWERUSER_SPACE1 + ); + + expect(body[trainedModelId]).to.have.property('success', false); + await ml.api.assertTrainedModelSpaces(trainedModelId, [defaultSpaceId]); + }); + }); +}; diff --git a/x-pack/test/fleet_api_integration/apis/epm/install_by_upload.ts b/x-pack/test/fleet_api_integration/apis/epm/install_by_upload.ts index d7c913fc8bc4b..fcf7fdaa4ed81 100644 --- a/x-pack/test/fleet_api_integration/apis/epm/install_by_upload.ts +++ b/x-pack/test/fleet_api_integration/apis/epm/install_by_upload.ts @@ -19,6 +19,7 @@ export default function (providerContext: FtrProviderContext) { const supertest = getService('supertest'); const supertestWithoutAuth = getService('supertestWithoutAuth'); const dockerServers = getService('dockerServers'); + const esClient = getService('es'); const testPkgArchiveTgz = path.join( path.dirname(__filename), @@ -49,8 +50,14 @@ export default function (providerContext: FtrProviderContext) { '../fixtures/direct_upload_packages/apache_invalid_toplevel_mismatch_0.1.4.zip' ); + const testPkgArchiveZipNewer = path.join( + path.dirname(__filename), + '../fixtures/direct_upload_packages/apache-0.1.5.zip' + ); + const testPkgName = 'apache'; const testPkgVersion = '0.1.4'; + const testPkgNewVersion = '0.1.5'; const server = dockerServers.get('registry'); const deletePackage = async (name: string, version: string) => { @@ -68,15 +75,76 @@ export default function (providerContext: FtrProviderContext) { } }); - it('should install a tar archive correctly', async function () { + async function uploadPackage() { const buf = fs.readFileSync(testPkgArchiveTgz); - const res = await supertest + return await supertest .post(`/api/fleet/epm/packages`) .set('kbn-xsrf', 'xxxx') .type('application/gzip') .send(buf) .expect(200); + } + + it('should install a tar archive correctly', async function () { + const res = await uploadPackage(); + expect(res.body.items.length).to.be(30); + }); + + it('should upgrade when uploading a newer zip archive', async () => { + await uploadPackage(); + + const buf = fs.readFileSync(testPkgArchiveZipNewer); + const res = await supertest + .post(`/api/fleet/epm/packages`) + .set('kbn-xsrf', 'xxxx') + .type('application/zip') + .send(buf) + .expect(200); expect(res.body.items.length).to.be(30); + expect(res.body.items.some((item: any) => item.id.includes(testPkgNewVersion))); + + await deletePackage(testPkgName, testPkgNewVersion); + }); + + it('should clean up assets when uninstalling uploaded archive', async () => { + await uploadPackage(); + await deletePackage(testPkgName, testPkgVersion); + + const epmPackageRes = await esClient.search({ + index: '.kibana', + size: 0, + rest_total_hits_as_int: true, + query: { + bool: { + filter: [ + { + term: { + 'epm-packages.name': testPkgName, + }, + }, + ], + }, + }, + }); + const epmPackageAssetsRes = await esClient.search({ + index: '.kibana', + size: 0, + rest_total_hits_as_int: true, + query: { + bool: { + filter: [ + { + term: { + 'epm-packages-assets.package_name': testPkgName, + }, + }, + ], + }, + }, + }); + + expect(epmPackageRes.hits.total).to.equal(0); + expect(epmPackageAssetsRes.hits.total).to.equal(0); }); it('should install a zip archive correctly and package info should return correctly after validation', async function () { diff --git a/x-pack/test/fleet_api_integration/apis/fixtures/direct_upload_packages/apache-0.1.5.zip b/x-pack/test/fleet_api_integration/apis/fixtures/direct_upload_packages/apache-0.1.5.zip new file mode 100644 index 0000000000000..c4b92dcb500a2 Binary files /dev/null and b/x-pack/test/fleet_api_integration/apis/fixtures/direct_upload_packages/apache-0.1.5.zip differ diff --git a/x-pack/test/functional/services/ml/api.ts b/x-pack/test/functional/services/ml/api.ts index d79d513ed7f47..69544632d088a 100644 --- a/x-pack/test/functional/services/ml/api.ts +++ b/x-pack/test/functional/services/ml/api.ts @@ -986,6 +986,27 @@ export function MachineLearningAPIProvider({ getService }: FtrProviderContext) { ); }, + async waitForADJobRecordCount( + jobId: string, + expectedCount: number, + timeout: number = 2 * 60 * 1000 + ) { + await retry.waitForWithTimeout( + `job ${jobId} record count to be ${expectedCount}`, + timeout, + async () => { + const count = await this.getADJobRecordCount(jobId); + if (count === expectedCount) { + return true; + } else { + throw new Error( + `expected job ${jobId} record count to be ${expectedCount} but got ${count}` + ); + } + } + ); + }, + async getFilter(filterId: string, expectedCode = 200) { const response = await esSupertest.get(`/_ml/filters/${filterId}`); this.assertResponseStatusCode(expectedCode, response.status, response.body); diff --git a/yarn.lock b/yarn.lock index c5a662bdf9bd2..c89100758294f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5389,6 +5389,10 @@ version "0.0.0" uid "" +"@kbn/validate-next-docs-cli@link:packages/kbn-validate-next-docs-cli": + version "0.0.0" + uid "" + "@kbn/vis-default-editor-plugin@link:src/plugins/vis_default_editor": version "0.0.0" uid ""