From 4fa7b783cc2ca0f76995a7c0d9ace6b953619f1d Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Mon, 23 Dec 2024 18:15:10 +1100 Subject: [PATCH 01/35] [api-docs] 2024-12-23 Daily api_docs build (#205072) Generated by https://buildkite.com/elastic/kibana-api-docs-daily/builds/930 --- api_docs/actions.mdx | 2 +- api_docs/advanced_settings.mdx | 2 +- .../ai_assistant_management_selection.mdx | 2 +- api_docs/aiops.mdx | 2 +- api_docs/alerting.devdocs.json | 30 +++++++++++++++++++ api_docs/alerting.mdx | 4 +-- api_docs/apm.mdx | 2 +- api_docs/apm_data_access.mdx | 2 +- api_docs/asset_inventory.mdx | 2 +- api_docs/banners.mdx | 2 +- api_docs/canvas.mdx | 2 +- api_docs/cases.mdx | 2 +- api_docs/charts.mdx | 2 +- api_docs/cloud.mdx | 2 +- api_docs/cloud_data_migration.mdx | 2 +- api_docs/cloud_defend.mdx | 2 +- api_docs/cloud_security_posture.mdx | 2 +- api_docs/console.mdx | 2 +- api_docs/content_management.mdx | 2 +- api_docs/controls.mdx | 2 +- api_docs/custom_integrations.mdx | 2 +- api_docs/dashboard.mdx | 2 +- api_docs/dashboard_enhanced.mdx | 2 +- api_docs/data.mdx | 2 +- api_docs/data_quality.mdx | 2 +- api_docs/data_query.mdx | 2 +- api_docs/data_search.mdx | 2 +- api_docs/data_usage.mdx | 2 +- api_docs/data_view_editor.mdx | 2 +- api_docs/data_view_field_editor.mdx | 2 +- api_docs/data_view_management.mdx | 2 +- api_docs/data_views.mdx | 2 +- api_docs/data_visualizer.mdx | 2 +- api_docs/dataset_quality.mdx | 2 +- api_docs/deprecations_by_api.mdx | 2 +- api_docs/deprecations_by_plugin.mdx | 2 +- api_docs/deprecations_by_team.mdx | 2 +- api_docs/dev_tools.mdx | 2 +- api_docs/discover.mdx | 2 +- api_docs/discover_enhanced.mdx | 2 +- api_docs/discover_shared.mdx | 2 +- api_docs/ecs_data_quality_dashboard.mdx | 2 +- api_docs/elastic_assistant.mdx | 2 +- api_docs/embeddable.mdx | 2 +- api_docs/embeddable_enhanced.mdx | 2 +- api_docs/encrypted_saved_objects.mdx | 2 +- api_docs/enterprise_search.mdx | 2 +- api_docs/entities_data_access.mdx | 2 +- api_docs/entity_manager.mdx | 2 +- api_docs/es_ui_shared.mdx | 2 +- api_docs/esql.mdx | 2 +- api_docs/esql_data_grid.mdx | 2 +- api_docs/event_annotation.mdx | 2 +- api_docs/event_annotation_listing.mdx | 2 +- api_docs/event_log.mdx | 2 +- api_docs/exploratory_view.mdx | 2 +- api_docs/expression_error.mdx | 2 +- api_docs/expression_gauge.mdx | 2 +- api_docs/expression_heatmap.mdx | 2 +- api_docs/expression_image.mdx | 2 +- api_docs/expression_legacy_metric_vis.mdx | 2 +- api_docs/expression_metric.mdx | 2 +- api_docs/expression_metric_vis.mdx | 2 +- api_docs/expression_partition_vis.mdx | 2 +- api_docs/expression_repeat_image.mdx | 2 +- api_docs/expression_reveal_image.mdx | 2 +- api_docs/expression_shape.mdx | 2 +- api_docs/expression_tagcloud.mdx | 2 +- api_docs/expression_x_y.mdx | 2 +- api_docs/expressions.mdx | 2 +- api_docs/features.mdx | 2 +- api_docs/field_formats.mdx | 2 +- api_docs/fields_metadata.mdx | 2 +- api_docs/file_upload.mdx | 2 +- api_docs/files.mdx | 2 +- api_docs/files_management.mdx | 2 +- api_docs/fleet.mdx | 2 +- api_docs/global_search.mdx | 2 +- api_docs/guided_onboarding.mdx | 2 +- api_docs/home.mdx | 2 +- api_docs/image_embeddable.mdx | 2 +- api_docs/index_lifecycle_management.mdx | 2 +- api_docs/index_management.mdx | 2 +- api_docs/inference.mdx | 2 +- api_docs/infra.mdx | 2 +- api_docs/ingest_pipelines.mdx | 2 +- api_docs/inspector.mdx | 2 +- api_docs/integration_assistant.mdx | 2 +- api_docs/interactive_setup.mdx | 2 +- api_docs/inventory.mdx | 2 +- api_docs/investigate.mdx | 2 +- api_docs/investigate_app.mdx | 2 +- api_docs/kbn_actions_types.mdx | 2 +- api_docs/kbn_ai_assistant.mdx | 2 +- api_docs/kbn_ai_assistant_common.mdx | 2 +- api_docs/kbn_ai_assistant_icon.mdx | 2 +- api_docs/kbn_aiops_components.mdx | 2 +- api_docs/kbn_aiops_log_pattern_analysis.mdx | 2 +- api_docs/kbn_aiops_log_rate_analysis.mdx | 2 +- .../kbn_alerting_api_integration_helpers.mdx | 2 +- api_docs/kbn_alerting_comparators.mdx | 2 +- api_docs/kbn_alerting_state_types.mdx | 2 +- api_docs/kbn_alerting_types.mdx | 2 +- api_docs/kbn_alerts_as_data_utils.mdx | 2 +- api_docs/kbn_alerts_grouping.mdx | 2 +- api_docs/kbn_alerts_ui_shared.mdx | 2 +- api_docs/kbn_analytics.mdx | 2 +- api_docs/kbn_analytics_collection_utils.mdx | 2 +- api_docs/kbn_apm_config_loader.mdx | 2 +- api_docs/kbn_apm_data_view.mdx | 2 +- api_docs/kbn_apm_synthtrace.mdx | 2 +- api_docs/kbn_apm_synthtrace_client.mdx | 2 +- api_docs/kbn_apm_types.mdx | 2 +- api_docs/kbn_apm_utils.mdx | 2 +- api_docs/kbn_avc_banner.mdx | 2 +- api_docs/kbn_axe_config.mdx | 2 +- api_docs/kbn_calculate_auto.mdx | 2 +- .../kbn_calculate_width_from_char_count.mdx | 2 +- api_docs/kbn_cases_components.mdx | 2 +- api_docs/kbn_cbor.mdx | 2 +- api_docs/kbn_cell_actions.mdx | 2 +- api_docs/kbn_chart_expressions_common.mdx | 2 +- api_docs/kbn_chart_icons.mdx | 2 +- api_docs/kbn_charts_theme.mdx | 2 +- api_docs/kbn_ci_stats_core.mdx | 2 +- api_docs/kbn_ci_stats_performance_metrics.mdx | 2 +- api_docs/kbn_ci_stats_reporter.mdx | 2 +- api_docs/kbn_cli_dev_mode.mdx | 2 +- api_docs/kbn_cloud_security_posture.mdx | 2 +- .../kbn_cloud_security_posture_common.mdx | 2 +- api_docs/kbn_cloud_security_posture_graph.mdx | 2 +- api_docs/kbn_code_editor.mdx | 2 +- api_docs/kbn_code_editor_mock.mdx | 2 +- api_docs/kbn_code_owners.mdx | 2 +- api_docs/kbn_coloring.mdx | 2 +- api_docs/kbn_config.mdx | 2 +- api_docs/kbn_config_mocks.mdx | 2 +- api_docs/kbn_config_schema.mdx | 2 +- .../kbn_content_management_content_editor.mdx | 2 +- ...ent_management_content_insights_public.mdx | 2 +- ...ent_management_content_insights_server.mdx | 2 +- ...bn_content_management_favorites_common.mdx | 2 +- ...bn_content_management_favorites_public.mdx | 2 +- ...bn_content_management_favorites_server.mdx | 2 +- ...tent_management_tabbed_table_list_view.mdx | 2 +- ...kbn_content_management_table_list_view.mdx | 2 +- ...tent_management_table_list_view_common.mdx | 2 +- ...ntent_management_table_list_view_table.mdx | 2 +- .../kbn_content_management_user_profiles.mdx | 2 +- api_docs/kbn_content_management_utils.mdx | 2 +- api_docs/kbn_core_analytics_browser.mdx | 2 +- .../kbn_core_analytics_browser_internal.mdx | 2 +- api_docs/kbn_core_analytics_browser_mocks.mdx | 2 +- api_docs/kbn_core_analytics_server.mdx | 2 +- .../kbn_core_analytics_server_internal.mdx | 2 +- api_docs/kbn_core_analytics_server_mocks.mdx | 2 +- api_docs/kbn_core_application_browser.mdx | 2 +- .../kbn_core_application_browser_internal.mdx | 2 +- .../kbn_core_application_browser_mocks.mdx | 2 +- api_docs/kbn_core_application_common.mdx | 2 +- api_docs/kbn_core_apps_browser_internal.mdx | 2 +- api_docs/kbn_core_apps_browser_mocks.mdx | 2 +- api_docs/kbn_core_apps_server_internal.mdx | 2 +- api_docs/kbn_core_base_browser_mocks.mdx | 2 +- api_docs/kbn_core_base_common.mdx | 2 +- api_docs/kbn_core_base_server_internal.mdx | 2 +- api_docs/kbn_core_base_server_mocks.mdx | 2 +- .../kbn_core_capabilities_browser_mocks.mdx | 2 +- api_docs/kbn_core_capabilities_common.mdx | 2 +- api_docs/kbn_core_capabilities_server.mdx | 2 +- .../kbn_core_capabilities_server_mocks.mdx | 2 +- api_docs/kbn_core_chrome_browser.mdx | 2 +- api_docs/kbn_core_chrome_browser_mocks.mdx | 2 +- api_docs/kbn_core_config_server_internal.mdx | 2 +- api_docs/kbn_core_custom_branding_browser.mdx | 2 +- ..._core_custom_branding_browser_internal.mdx | 2 +- ...kbn_core_custom_branding_browser_mocks.mdx | 2 +- api_docs/kbn_core_custom_branding_common.mdx | 2 +- api_docs/kbn_core_custom_branding_server.mdx | 2 +- ...n_core_custom_branding_server_internal.mdx | 2 +- .../kbn_core_custom_branding_server_mocks.mdx | 2 +- api_docs/kbn_core_deprecations_browser.mdx | 2 +- ...kbn_core_deprecations_browser_internal.mdx | 2 +- .../kbn_core_deprecations_browser_mocks.mdx | 2 +- api_docs/kbn_core_deprecations_common.mdx | 2 +- api_docs/kbn_core_deprecations_server.mdx | 2 +- .../kbn_core_deprecations_server_internal.mdx | 2 +- .../kbn_core_deprecations_server_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_browser.mdx | 2 +- api_docs/kbn_core_doc_links_browser_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_server.mdx | 2 +- api_docs/kbn_core_doc_links_server_mocks.mdx | 2 +- ...e_elasticsearch_client_server_internal.mdx | 2 +- ...core_elasticsearch_client_server_mocks.mdx | 2 +- api_docs/kbn_core_elasticsearch_server.mdx | 2 +- ...kbn_core_elasticsearch_server_internal.mdx | 2 +- .../kbn_core_elasticsearch_server_mocks.mdx | 2 +- .../kbn_core_environment_server_internal.mdx | 2 +- .../kbn_core_environment_server_mocks.mdx | 2 +- .../kbn_core_execution_context_browser.mdx | 2 +- ...ore_execution_context_browser_internal.mdx | 2 +- ...n_core_execution_context_browser_mocks.mdx | 2 +- .../kbn_core_execution_context_common.mdx | 2 +- .../kbn_core_execution_context_server.mdx | 2 +- ...core_execution_context_server_internal.mdx | 2 +- ...bn_core_execution_context_server_mocks.mdx | 2 +- api_docs/kbn_core_fatal_errors_browser.mdx | 2 +- .../kbn_core_fatal_errors_browser_mocks.mdx | 2 +- api_docs/kbn_core_feature_flags_browser.mdx | 2 +- ...bn_core_feature_flags_browser_internal.mdx | 2 +- .../kbn_core_feature_flags_browser_mocks.mdx | 2 +- api_docs/kbn_core_feature_flags_server.mdx | 2 +- ...kbn_core_feature_flags_server_internal.mdx | 2 +- .../kbn_core_feature_flags_server_mocks.mdx | 2 +- api_docs/kbn_core_http_browser.mdx | 2 +- api_docs/kbn_core_http_browser_internal.mdx | 2 +- api_docs/kbn_core_http_browser_mocks.mdx | 2 +- api_docs/kbn_core_http_common.mdx | 2 +- .../kbn_core_http_context_server_mocks.mdx | 2 +- ...re_http_request_handler_context_server.mdx | 2 +- api_docs/kbn_core_http_resources_server.mdx | 2 +- ...bn_core_http_resources_server_internal.mdx | 2 +- .../kbn_core_http_resources_server_mocks.mdx | 2 +- .../kbn_core_http_router_server_internal.mdx | 2 +- .../kbn_core_http_router_server_mocks.mdx | 2 +- api_docs/kbn_core_http_server.mdx | 2 +- api_docs/kbn_core_http_server_internal.mdx | 2 +- api_docs/kbn_core_http_server_mocks.mdx | 2 +- api_docs/kbn_core_http_server_utils.mdx | 2 +- api_docs/kbn_core_i18n_browser.mdx | 2 +- api_docs/kbn_core_i18n_browser_mocks.mdx | 2 +- api_docs/kbn_core_i18n_server.mdx | 2 +- api_docs/kbn_core_i18n_server_internal.mdx | 2 +- api_docs/kbn_core_i18n_server_mocks.mdx | 2 +- ...n_core_injected_metadata_browser_mocks.mdx | 2 +- ...kbn_core_integrations_browser_internal.mdx | 2 +- .../kbn_core_integrations_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_browser.mdx | 2 +- api_docs/kbn_core_lifecycle_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_server.mdx | 2 +- api_docs/kbn_core_lifecycle_server_mocks.mdx | 2 +- api_docs/kbn_core_logging_browser_mocks.mdx | 2 +- api_docs/kbn_core_logging_common_internal.mdx | 2 +- api_docs/kbn_core_logging_server.mdx | 2 +- api_docs/kbn_core_logging_server_internal.mdx | 2 +- api_docs/kbn_core_logging_server_mocks.mdx | 2 +- ...ore_metrics_collectors_server_internal.mdx | 2 +- ...n_core_metrics_collectors_server_mocks.mdx | 2 +- api_docs/kbn_core_metrics_server.mdx | 2 +- api_docs/kbn_core_metrics_server_internal.mdx | 2 +- api_docs/kbn_core_metrics_server_mocks.mdx | 2 +- api_docs/kbn_core_mount_utils_browser.mdx | 2 +- api_docs/kbn_core_node_server.mdx | 2 +- api_docs/kbn_core_node_server_internal.mdx | 2 +- api_docs/kbn_core_node_server_mocks.mdx | 2 +- api_docs/kbn_core_notifications_browser.mdx | 2 +- ...bn_core_notifications_browser_internal.mdx | 2 +- .../kbn_core_notifications_browser_mocks.mdx | 2 +- api_docs/kbn_core_overlays_browser.mdx | 2 +- .../kbn_core_overlays_browser_internal.mdx | 2 +- api_docs/kbn_core_overlays_browser_mocks.mdx | 2 +- api_docs/kbn_core_plugins_browser.mdx | 2 +- api_docs/kbn_core_plugins_browser_mocks.mdx | 2 +- .../kbn_core_plugins_contracts_browser.mdx | 2 +- .../kbn_core_plugins_contracts_server.mdx | 2 +- api_docs/kbn_core_plugins_server.mdx | 2 +- api_docs/kbn_core_plugins_server_mocks.mdx | 2 +- api_docs/kbn_core_preboot_server.mdx | 2 +- api_docs/kbn_core_preboot_server_mocks.mdx | 2 +- api_docs/kbn_core_rendering_browser.mdx | 2 +- api_docs/kbn_core_rendering_browser_mocks.mdx | 2 +- .../kbn_core_rendering_server_internal.mdx | 2 +- api_docs/kbn_core_rendering_server_mocks.mdx | 2 +- api_docs/kbn_core_root_server_internal.mdx | 2 +- .../kbn_core_saved_objects_api_browser.mdx | 2 +- .../kbn_core_saved_objects_api_server.mdx | 2 +- ...bn_core_saved_objects_api_server_mocks.mdx | 2 +- ...ore_saved_objects_base_server_internal.mdx | 2 +- ...n_core_saved_objects_base_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_browser.mdx | 2 +- ...bn_core_saved_objects_browser_internal.mdx | 2 +- .../kbn_core_saved_objects_browser_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_common.mdx | 2 +- ..._objects_import_export_server_internal.mdx | 2 +- ...ved_objects_import_export_server_mocks.mdx | 2 +- ...aved_objects_migration_server_internal.mdx | 2 +- ...e_saved_objects_migration_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_server.mdx | 2 +- ...kbn_core_saved_objects_server_internal.mdx | 2 +- .../kbn_core_saved_objects_server_mocks.mdx | 2 +- .../kbn_core_saved_objects_utils_server.mdx | 2 +- api_docs/kbn_core_security_browser.mdx | 2 +- .../kbn_core_security_browser_internal.mdx | 2 +- api_docs/kbn_core_security_browser_mocks.mdx | 2 +- api_docs/kbn_core_security_common.mdx | 2 +- api_docs/kbn_core_security_server.mdx | 2 +- .../kbn_core_security_server_internal.mdx | 2 +- api_docs/kbn_core_security_server_mocks.mdx | 2 +- api_docs/kbn_core_status_common.mdx | 2 +- api_docs/kbn_core_status_server.mdx | 2 +- api_docs/kbn_core_status_server_internal.mdx | 2 +- api_docs/kbn_core_status_server_mocks.mdx | 2 +- ...core_test_helpers_deprecations_getters.mdx | 2 +- ...n_core_test_helpers_http_setup_browser.mdx | 2 +- api_docs/kbn_core_test_helpers_kbn_server.mdx | 2 +- .../kbn_core_test_helpers_model_versions.mdx | 2 +- ...n_core_test_helpers_so_type_serializer.mdx | 2 +- api_docs/kbn_core_test_helpers_test_utils.mdx | 2 +- api_docs/kbn_core_theme_browser.mdx | 2 +- api_docs/kbn_core_theme_browser_mocks.mdx | 2 +- api_docs/kbn_core_ui_settings_browser.mdx | 2 +- .../kbn_core_ui_settings_browser_internal.mdx | 2 +- .../kbn_core_ui_settings_browser_mocks.mdx | 2 +- api_docs/kbn_core_ui_settings_common.mdx | 2 +- api_docs/kbn_core_ui_settings_server.mdx | 2 +- .../kbn_core_ui_settings_server_internal.mdx | 2 +- .../kbn_core_ui_settings_server_mocks.mdx | 2 +- api_docs/kbn_core_usage_data_server.mdx | 2 +- .../kbn_core_usage_data_server_internal.mdx | 2 +- api_docs/kbn_core_usage_data_server_mocks.mdx | 2 +- api_docs/kbn_core_user_profile_browser.mdx | 2 +- ...kbn_core_user_profile_browser_internal.mdx | 2 +- .../kbn_core_user_profile_browser_mocks.mdx | 2 +- api_docs/kbn_core_user_profile_common.mdx | 2 +- api_docs/kbn_core_user_profile_server.mdx | 2 +- .../kbn_core_user_profile_server_internal.mdx | 2 +- .../kbn_core_user_profile_server_mocks.mdx | 2 +- api_docs/kbn_core_user_settings_server.mdx | 2 +- .../kbn_core_user_settings_server_mocks.mdx | 2 +- api_docs/kbn_crypto.mdx | 2 +- api_docs/kbn_crypto_browser.mdx | 2 +- api_docs/kbn_custom_icons.mdx | 2 +- api_docs/kbn_custom_integrations.mdx | 2 +- api_docs/kbn_cypress_config.mdx | 2 +- api_docs/kbn_data_forge.mdx | 2 +- api_docs/kbn_data_service.mdx | 2 +- api_docs/kbn_data_stream_adapter.mdx | 2 +- api_docs/kbn_data_view_utils.mdx | 2 +- api_docs/kbn_datemath.mdx | 2 +- api_docs/kbn_deeplinks_analytics.mdx | 2 +- api_docs/kbn_deeplinks_devtools.mdx | 2 +- api_docs/kbn_deeplinks_fleet.mdx | 2 +- api_docs/kbn_deeplinks_management.mdx | 2 +- api_docs/kbn_deeplinks_ml.mdx | 2 +- api_docs/kbn_deeplinks_observability.mdx | 2 +- api_docs/kbn_deeplinks_search.mdx | 2 +- api_docs/kbn_deeplinks_security.mdx | 2 +- api_docs/kbn_deeplinks_shared.mdx | 2 +- api_docs/kbn_default_nav_analytics.mdx | 2 +- api_docs/kbn_default_nav_devtools.mdx | 2 +- api_docs/kbn_default_nav_management.mdx | 2 +- api_docs/kbn_default_nav_ml.mdx | 2 +- api_docs/kbn_dev_cli_errors.mdx | 2 +- api_docs/kbn_dev_cli_runner.mdx | 2 +- api_docs/kbn_dev_proc_runner.mdx | 2 +- api_docs/kbn_dev_utils.mdx | 2 +- .../kbn_discover_contextual_components.mdx | 2 +- api_docs/kbn_discover_utils.mdx | 2 +- api_docs/kbn_doc_links.mdx | 2 +- api_docs/kbn_docs_utils.mdx | 2 +- api_docs/kbn_dom_drag_drop.mdx | 2 +- api_docs/kbn_ebt_tools.mdx | 2 +- api_docs/kbn_ecs_data_quality_dashboard.mdx | 2 +- api_docs/kbn_elastic_agent_utils.mdx | 2 +- api_docs/kbn_elastic_assistant.mdx | 2 +- api_docs/kbn_elastic_assistant_common.mdx | 2 +- api_docs/kbn_entities_schema.mdx | 2 +- api_docs/kbn_es.mdx | 2 +- api_docs/kbn_es_archiver.mdx | 2 +- api_docs/kbn_es_errors.mdx | 2 +- api_docs/kbn_es_query.mdx | 2 +- api_docs/kbn_es_types.mdx | 2 +- api_docs/kbn_eslint_plugin_imports.mdx | 2 +- api_docs/kbn_esql_ast.mdx | 2 +- api_docs/kbn_esql_editor.mdx | 2 +- api_docs/kbn_esql_utils.mdx | 2 +- api_docs/kbn_esql_validation_autocomplete.mdx | 2 +- api_docs/kbn_event_annotation_common.mdx | 2 +- api_docs/kbn_event_annotation_components.mdx | 2 +- api_docs/kbn_expandable_flyout.mdx | 2 +- api_docs/kbn_field_types.mdx | 2 +- api_docs/kbn_field_utils.mdx | 2 +- api_docs/kbn_find_used_node_modules.mdx | 2 +- api_docs/kbn_formatters.mdx | 2 +- .../kbn_ftr_common_functional_services.mdx | 2 +- .../kbn_ftr_common_functional_ui_services.mdx | 2 +- api_docs/kbn_gen_ai_functional_testing.mdx | 2 +- api_docs/kbn_generate.mdx | 2 +- api_docs/kbn_generate_console_definitions.mdx | 2 +- api_docs/kbn_generate_csv.mdx | 2 +- api_docs/kbn_grid_layout.mdx | 2 +- api_docs/kbn_grouping.mdx | 2 +- api_docs/kbn_guided_onboarding.mdx | 2 +- api_docs/kbn_handlebars.mdx | 2 +- api_docs/kbn_hapi_mocks.mdx | 2 +- api_docs/kbn_health_gateway_server.mdx | 2 +- api_docs/kbn_home_sample_data_card.mdx | 2 +- api_docs/kbn_home_sample_data_tab.mdx | 2 +- api_docs/kbn_i18n.mdx | 2 +- api_docs/kbn_i18n_react.mdx | 2 +- api_docs/kbn_import_resolver.mdx | 2 +- api_docs/kbn_index_adapter.mdx | 2 +- ...dex_lifecycle_management_common_shared.mdx | 2 +- .../kbn_index_management_shared_types.mdx | 2 +- api_docs/kbn_inference_common.mdx | 2 +- api_docs/kbn_inference_integration_flyout.mdx | 2 +- api_docs/kbn_infra_forge.mdx | 2 +- api_docs/kbn_interpreter.mdx | 2 +- api_docs/kbn_investigation_shared.mdx | 2 +- api_docs/kbn_io_ts_utils.mdx | 2 +- api_docs/kbn_ipynb.mdx | 2 +- api_docs/kbn_item_buffer.mdx | 2 +- api_docs/kbn_jest_serializers.mdx | 2 +- api_docs/kbn_journeys.mdx | 2 +- api_docs/kbn_json_ast.mdx | 2 +- api_docs/kbn_json_schemas.mdx | 2 +- api_docs/kbn_kibana_manifest_schema.mdx | 2 +- api_docs/kbn_language_documentation.mdx | 2 +- api_docs/kbn_lens_embeddable_utils.mdx | 2 +- api_docs/kbn_lens_formula_docs.mdx | 2 +- api_docs/kbn_logging.mdx | 2 +- api_docs/kbn_logging_mocks.mdx | 2 +- api_docs/kbn_managed_content_badge.mdx | 2 +- api_docs/kbn_managed_vscode_config.mdx | 2 +- api_docs/kbn_management_cards_navigation.mdx | 2 +- .../kbn_management_settings_application.mdx | 2 +- ...ent_settings_components_field_category.mdx | 2 +- ...gement_settings_components_field_input.mdx | 2 +- ...nagement_settings_components_field_row.mdx | 2 +- ...bn_management_settings_components_form.mdx | 2 +- ...n_management_settings_field_definition.mdx | 2 +- api_docs/kbn_management_settings_ids.mdx | 2 +- ...n_management_settings_section_registry.mdx | 2 +- api_docs/kbn_management_settings_types.mdx | 2 +- .../kbn_management_settings_utilities.mdx | 2 +- api_docs/kbn_management_storybook_config.mdx | 2 +- api_docs/kbn_manifest.mdx | 2 +- api_docs/kbn_mapbox_gl.mdx | 2 +- api_docs/kbn_maps_vector_tile_utils.mdx | 2 +- api_docs/kbn_ml_agg_utils.mdx | 2 +- api_docs/kbn_ml_anomaly_utils.mdx | 2 +- api_docs/kbn_ml_cancellable_search.mdx | 2 +- api_docs/kbn_ml_category_validator.mdx | 2 +- api_docs/kbn_ml_chi2test.mdx | 2 +- .../kbn_ml_data_frame_analytics_utils.mdx | 2 +- api_docs/kbn_ml_data_grid.mdx | 2 +- api_docs/kbn_ml_date_picker.mdx | 2 +- api_docs/kbn_ml_date_utils.mdx | 2 +- api_docs/kbn_ml_error_utils.mdx | 2 +- api_docs/kbn_ml_field_stats_flyout.mdx | 2 +- api_docs/kbn_ml_in_memory_table.mdx | 2 +- api_docs/kbn_ml_is_defined.mdx | 2 +- api_docs/kbn_ml_is_populated_object.mdx | 2 +- api_docs/kbn_ml_kibana_theme.mdx | 2 +- api_docs/kbn_ml_local_storage.mdx | 2 +- api_docs/kbn_ml_nested_property.mdx | 2 +- api_docs/kbn_ml_number_utils.mdx | 2 +- api_docs/kbn_ml_parse_interval.mdx | 2 +- api_docs/kbn_ml_query_utils.mdx | 2 +- api_docs/kbn_ml_random_sampler_utils.mdx | 2 +- api_docs/kbn_ml_route_utils.mdx | 2 +- api_docs/kbn_ml_runtime_field_utils.mdx | 2 +- api_docs/kbn_ml_string_hash.mdx | 2 +- api_docs/kbn_ml_time_buckets.mdx | 2 +- api_docs/kbn_ml_trained_models_utils.mdx | 2 +- api_docs/kbn_ml_ui_actions.mdx | 2 +- api_docs/kbn_ml_url_state.mdx | 2 +- api_docs/kbn_ml_validators.mdx | 2 +- api_docs/kbn_mock_idp_utils.mdx | 2 +- api_docs/kbn_monaco.mdx | 2 +- api_docs/kbn_object_versioning.mdx | 2 +- api_docs/kbn_object_versioning_utils.mdx | 2 +- api_docs/kbn_observability_alert_details.mdx | 2 +- .../kbn_observability_alerting_rule_utils.mdx | 2 +- .../kbn_observability_alerting_test_data.mdx | 2 +- ...ility_get_padded_alert_time_range_util.mdx | 2 +- api_docs/kbn_observability_logs_overview.mdx | 2 +- ...kbn_observability_synthetics_test_data.mdx | 2 +- api_docs/kbn_openapi_bundler.mdx | 2 +- api_docs/kbn_openapi_generator.mdx | 2 +- api_docs/kbn_optimizer.mdx | 2 +- api_docs/kbn_optimizer_webpack_helpers.mdx | 2 +- api_docs/kbn_osquery_io_ts_types.mdx | 2 +- api_docs/kbn_palettes.mdx | 2 +- api_docs/kbn_panel_loader.mdx | 2 +- ..._performance_testing_dataset_extractor.mdx | 2 +- api_docs/kbn_plugin_check.mdx | 2 +- api_docs/kbn_plugin_generator.mdx | 2 +- api_docs/kbn_plugin_helpers.mdx | 2 +- api_docs/kbn_presentation_containers.mdx | 2 +- api_docs/kbn_presentation_publishing.mdx | 2 +- api_docs/kbn_product_doc_artifact_builder.mdx | 2 +- api_docs/kbn_product_doc_common.mdx | 2 +- api_docs/kbn_profiling_utils.mdx | 2 +- api_docs/kbn_random_sampling.mdx | 2 +- api_docs/kbn_react_field.mdx | 2 +- api_docs/kbn_react_hooks.mdx | 2 +- api_docs/kbn_react_kibana_context_common.mdx | 2 +- api_docs/kbn_react_kibana_context_render.mdx | 2 +- api_docs/kbn_react_kibana_context_root.mdx | 2 +- api_docs/kbn_react_kibana_context_styled.mdx | 2 +- api_docs/kbn_react_kibana_context_theme.mdx | 2 +- api_docs/kbn_react_kibana_mount.mdx | 2 +- .../kbn_react_mute_legacy_root_warning.mdx | 2 +- api_docs/kbn_recently_accessed.mdx | 2 +- api_docs/kbn_relocate.mdx | 2 +- api_docs/kbn_repo_file_maps.mdx | 2 +- api_docs/kbn_repo_linter.mdx | 2 +- api_docs/kbn_repo_path.mdx | 2 +- api_docs/kbn_repo_source_classifier.mdx | 2 +- api_docs/kbn_reporting_common.mdx | 2 +- api_docs/kbn_reporting_csv_share_panel.mdx | 2 +- api_docs/kbn_reporting_export_types_csv.mdx | 2 +- .../kbn_reporting_export_types_csv_common.mdx | 2 +- api_docs/kbn_reporting_export_types_pdf.mdx | 2 +- .../kbn_reporting_export_types_pdf_common.mdx | 2 +- api_docs/kbn_reporting_export_types_png.mdx | 2 +- .../kbn_reporting_export_types_png_common.mdx | 2 +- api_docs/kbn_reporting_mocks_server.mdx | 2 +- api_docs/kbn_reporting_public.mdx | 2 +- api_docs/kbn_reporting_server.mdx | 2 +- api_docs/kbn_resizable_layout.mdx | 2 +- .../kbn_response_ops_feature_flag_service.mdx | 2 +- api_docs/kbn_response_ops_rule_form.mdx | 2 +- api_docs/kbn_response_ops_rule_params.mdx | 2 +- api_docs/kbn_rison.mdx | 2 +- api_docs/kbn_rollup.mdx | 2 +- api_docs/kbn_router_to_openapispec.mdx | 2 +- api_docs/kbn_router_utils.mdx | 2 +- api_docs/kbn_rrule.mdx | 2 +- api_docs/kbn_rule_data_utils.mdx | 2 +- api_docs/kbn_saved_objects_settings.mdx | 2 +- api_docs/kbn_saved_search_component.mdx | 2 +- api_docs/kbn_scout.mdx | 2 +- api_docs/kbn_scout_info.mdx | 2 +- api_docs/kbn_scout_reporting.mdx | 2 +- api_docs/kbn_screenshotting_server.mdx | 2 +- api_docs/kbn_search_api_keys_components.mdx | 2 +- api_docs/kbn_search_api_keys_server.mdx | 2 +- api_docs/kbn_search_api_panels.mdx | 2 +- api_docs/kbn_search_connectors.mdx | 2 +- api_docs/kbn_search_errors.mdx | 2 +- api_docs/kbn_search_index_documents.mdx | 2 +- api_docs/kbn_search_response_warnings.mdx | 2 +- api_docs/kbn_search_shared_ui.mdx | 2 +- api_docs/kbn_search_types.mdx | 2 +- api_docs/kbn_security_api_key_management.mdx | 2 +- api_docs/kbn_security_authorization_core.mdx | 2 +- ...kbn_security_authorization_core_common.mdx | 2 +- api_docs/kbn_security_form_components.mdx | 2 +- api_docs/kbn_security_hardening.mdx | 2 +- api_docs/kbn_security_plugin_types_common.mdx | 2 +- api_docs/kbn_security_plugin_types_public.mdx | 2 +- api_docs/kbn_security_plugin_types_server.mdx | 2 +- .../kbn_security_role_management_model.mdx | 2 +- ...kbn_security_solution_distribution_bar.mdx | 2 +- api_docs/kbn_security_solution_features.mdx | 2 +- api_docs/kbn_security_solution_navigation.mdx | 2 +- api_docs/kbn_security_solution_side_nav.mdx | 2 +- ...kbn_security_solution_storybook_config.mdx | 2 +- api_docs/kbn_security_ui_components.mdx | 2 +- .../kbn_securitysolution_autocomplete.mdx | 2 +- api_docs/kbn_securitysolution_data_table.mdx | 2 +- api_docs/kbn_securitysolution_ecs.mdx | 2 +- api_docs/kbn_securitysolution_es_utils.mdx | 2 +- ...ritysolution_exception_list_components.mdx | 2 +- api_docs/kbn_securitysolution_hook_utils.mdx | 2 +- ..._securitysolution_io_ts_alerting_types.mdx | 2 +- .../kbn_securitysolution_io_ts_list_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_utils.mdx | 2 +- api_docs/kbn_securitysolution_list_api.mdx | 2 +- .../kbn_securitysolution_list_constants.mdx | 2 +- api_docs/kbn_securitysolution_list_hooks.mdx | 2 +- api_docs/kbn_securitysolution_list_utils.mdx | 2 +- api_docs/kbn_securitysolution_rules.mdx | 2 +- api_docs/kbn_securitysolution_t_grid.mdx | 2 +- api_docs/kbn_securitysolution_utils.mdx | 2 +- api_docs/kbn_server_http_tools.mdx | 2 +- api_docs/kbn_server_route_repository.mdx | 2 +- .../kbn_server_route_repository_client.mdx | 2 +- .../kbn_server_route_repository_utils.mdx | 2 +- api_docs/kbn_serverless_common_settings.mdx | 2 +- .../kbn_serverless_observability_settings.mdx | 2 +- api_docs/kbn_serverless_project_switcher.mdx | 2 +- api_docs/kbn_serverless_search_settings.mdx | 2 +- api_docs/kbn_serverless_security_settings.mdx | 2 +- api_docs/kbn_serverless_storybook_config.mdx | 2 +- api_docs/kbn_shared_svg.mdx | 2 +- api_docs/kbn_shared_ux_avatar_solution.mdx | 2 +- .../kbn_shared_ux_button_exit_full_screen.mdx | 2 +- api_docs/kbn_shared_ux_button_toolbar.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_chrome_navigation.mdx | 2 +- api_docs/kbn_shared_ux_error_boundary.mdx | 2 +- api_docs/kbn_shared_ux_file_context.mdx | 2 +- api_docs/kbn_shared_ux_file_image.mdx | 2 +- api_docs/kbn_shared_ux_file_image_mocks.mdx | 2 +- api_docs/kbn_shared_ux_file_mocks.mdx | 2 +- api_docs/kbn_shared_ux_file_picker.mdx | 2 +- api_docs/kbn_shared_ux_file_types.mdx | 2 +- api_docs/kbn_shared_ux_file_upload.mdx | 2 +- api_docs/kbn_shared_ux_file_util.mdx | 2 +- api_docs/kbn_shared_ux_link_redirect_app.mdx | 2 +- .../kbn_shared_ux_link_redirect_app_mocks.mdx | 2 +- api_docs/kbn_shared_ux_markdown.mdx | 2 +- api_docs/kbn_shared_ux_markdown_mocks.mdx | 2 +- .../kbn_shared_ux_page_analytics_no_data.mdx | 2 +- ...shared_ux_page_analytics_no_data_mocks.mdx | 2 +- .../kbn_shared_ux_page_kibana_no_data.mdx | 2 +- ...bn_shared_ux_page_kibana_no_data_mocks.mdx | 2 +- .../kbn_shared_ux_page_kibana_template.mdx | 2 +- ...n_shared_ux_page_kibana_template_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data.mdx | 2 +- .../kbn_shared_ux_page_no_data_config.mdx | 2 +- ...bn_shared_ux_page_no_data_config_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_solution_nav.mdx | 2 +- .../kbn_shared_ux_prompt_no_data_views.mdx | 2 +- ...n_shared_ux_prompt_no_data_views_mocks.mdx | 2 +- api_docs/kbn_shared_ux_prompt_not_found.mdx | 2 +- api_docs/kbn_shared_ux_router.mdx | 2 +- api_docs/kbn_shared_ux_router_mocks.mdx | 2 +- api_docs/kbn_shared_ux_storybook_config.mdx | 2 +- api_docs/kbn_shared_ux_storybook_mock.mdx | 2 +- api_docs/kbn_shared_ux_tabbed_modal.mdx | 2 +- api_docs/kbn_shared_ux_table_persist.mdx | 2 +- api_docs/kbn_shared_ux_utility.mdx | 2 +- api_docs/kbn_slo_schema.mdx | 2 +- api_docs/kbn_some_dev_log.mdx | 2 +- api_docs/kbn_sort_predicates.mdx | 2 +- api_docs/kbn_sse_utils.mdx | 2 +- api_docs/kbn_sse_utils_client.mdx | 2 +- api_docs/kbn_sse_utils_server.mdx | 2 +- api_docs/kbn_std.mdx | 2 +- api_docs/kbn_stdio_dev_helpers.mdx | 2 +- api_docs/kbn_storybook.mdx | 2 +- api_docs/kbn_synthetics_e2e.mdx | 2 +- api_docs/kbn_synthetics_private_location.mdx | 2 +- api_docs/kbn_telemetry_tools.mdx | 2 +- api_docs/kbn_test.mdx | 2 +- api_docs/kbn_test_eui_helpers.mdx | 2 +- api_docs/kbn_test_jest_helpers.mdx | 2 +- api_docs/kbn_test_subj_selector.mdx | 2 +- api_docs/kbn_timerange.mdx | 2 +- api_docs/kbn_tooling_log.mdx | 2 +- api_docs/kbn_transpose_utils.mdx | 2 +- api_docs/kbn_triggers_actions_ui_types.mdx | 2 +- api_docs/kbn_try_in_console.mdx | 2 +- api_docs/kbn_ts_projects.mdx | 2 +- api_docs/kbn_typed_react_router_config.mdx | 2 +- api_docs/kbn_ui_actions_browser.mdx | 2 +- api_docs/kbn_ui_shared_deps_src.mdx | 2 +- api_docs/kbn_ui_theme.mdx | 2 +- api_docs/kbn_unified_data_table.mdx | 2 +- api_docs/kbn_unified_doc_viewer.mdx | 2 +- api_docs/kbn_unified_field_list.mdx | 2 +- api_docs/kbn_unsaved_changes_badge.mdx | 2 +- api_docs/kbn_unsaved_changes_prompt.mdx | 2 +- api_docs/kbn_use_tracked_promise.mdx | 2 +- api_docs/kbn_user_profile_components.mdx | 2 +- api_docs/kbn_utility_types.mdx | 2 +- api_docs/kbn_utility_types_jest.mdx | 2 +- api_docs/kbn_utils.mdx | 2 +- api_docs/kbn_visualization_ui_components.mdx | 2 +- api_docs/kbn_visualization_utils.mdx | 2 +- api_docs/kbn_xstate_utils.mdx | 2 +- api_docs/kbn_yarn_lock_validator.mdx | 2 +- api_docs/kbn_zod.mdx | 2 +- api_docs/kbn_zod_helpers.mdx | 2 +- api_docs/kibana_overview.mdx | 2 +- api_docs/kibana_react.mdx | 2 +- api_docs/kibana_utils.mdx | 2 +- api_docs/kubernetes_security.mdx | 2 +- api_docs/lens.mdx | 2 +- api_docs/license_api_guard.mdx | 2 +- api_docs/license_management.mdx | 2 +- api_docs/licensing.mdx | 2 +- api_docs/links.mdx | 2 +- api_docs/lists.mdx | 2 +- api_docs/llm_tasks.mdx | 2 +- api_docs/logs_data_access.mdx | 2 +- api_docs/logs_explorer.mdx | 2 +- api_docs/logs_shared.mdx | 2 +- api_docs/management.mdx | 2 +- api_docs/maps.mdx | 2 +- api_docs/maps_ems.mdx | 2 +- api_docs/metrics_data_access.mdx | 2 +- api_docs/ml.mdx | 2 +- api_docs/mock_idp_plugin.mdx | 2 +- api_docs/monitoring.mdx | 2 +- api_docs/monitoring_collection.mdx | 2 +- api_docs/navigation.mdx | 2 +- api_docs/newsfeed.mdx | 2 +- api_docs/no_data_page.mdx | 2 +- api_docs/notifications.mdx | 2 +- api_docs/observability.mdx | 2 +- api_docs/observability_a_i_assistant.mdx | 2 +- api_docs/observability_a_i_assistant_app.mdx | 2 +- .../observability_ai_assistant_management.mdx | 2 +- api_docs/observability_logs_explorer.mdx | 2 +- api_docs/observability_onboarding.mdx | 2 +- api_docs/observability_shared.mdx | 2 +- api_docs/osquery.mdx | 2 +- api_docs/painless_lab.mdx | 2 +- api_docs/plugin_directory.mdx | 6 ++-- api_docs/presentation_panel.mdx | 2 +- api_docs/presentation_util.mdx | 2 +- api_docs/product_doc_base.mdx | 2 +- api_docs/profiling.mdx | 2 +- api_docs/profiling_data_access.mdx | 2 +- api_docs/remote_clusters.mdx | 2 +- api_docs/reporting.mdx | 2 +- api_docs/rollup.mdx | 2 +- api_docs/rule_registry.mdx | 2 +- api_docs/runtime_fields.mdx | 2 +- api_docs/saved_objects.mdx | 2 +- api_docs/saved_objects_finder.mdx | 2 +- api_docs/saved_objects_management.mdx | 2 +- api_docs/saved_objects_tagging.mdx | 2 +- api_docs/saved_objects_tagging_oss.mdx | 2 +- api_docs/saved_search.mdx | 2 +- api_docs/screenshot_mode.mdx | 2 +- api_docs/screenshotting.mdx | 2 +- api_docs/search_assistant.mdx | 2 +- api_docs/search_connectors.mdx | 2 +- api_docs/search_homepage.mdx | 2 +- api_docs/search_indices.mdx | 2 +- api_docs/search_inference_endpoints.mdx | 2 +- api_docs/search_navigation.mdx | 2 +- api_docs/search_notebooks.mdx | 2 +- api_docs/search_playground.mdx | 2 +- api_docs/security.mdx | 2 +- api_docs/security_solution.mdx | 2 +- api_docs/security_solution_ess.mdx | 2 +- api_docs/security_solution_serverless.mdx | 2 +- api_docs/serverless.mdx | 2 +- api_docs/serverless_observability.mdx | 2 +- api_docs/serverless_search.mdx | 2 +- api_docs/session_view.mdx | 2 +- api_docs/share.mdx | 2 +- api_docs/slo.mdx | 2 +- api_docs/snapshot_restore.mdx | 2 +- api_docs/spaces.mdx | 2 +- api_docs/stack_alerts.mdx | 2 +- api_docs/stack_connectors.mdx | 2 +- api_docs/streams.mdx | 2 +- api_docs/streams_app.mdx | 2 +- api_docs/task_manager.mdx | 2 +- api_docs/telemetry.mdx | 2 +- api_docs/telemetry_collection_manager.mdx | 2 +- api_docs/telemetry_management_section.mdx | 2 +- api_docs/threat_intelligence.mdx | 2 +- api_docs/timelines.mdx | 2 +- api_docs/transform.mdx | 2 +- api_docs/triggers_actions_ui.mdx | 2 +- api_docs/ui_actions.mdx | 2 +- api_docs/ui_actions_enhanced.mdx | 2 +- api_docs/unified_doc_viewer.mdx | 2 +- api_docs/unified_histogram.mdx | 2 +- api_docs/unified_search.mdx | 2 +- api_docs/unified_search_autocomplete.mdx | 2 +- api_docs/uptime.mdx | 2 +- api_docs/url_forwarding.mdx | 2 +- api_docs/usage_collection.mdx | 2 +- api_docs/ux.mdx | 2 +- api_docs/vis_default_editor.mdx | 2 +- api_docs/vis_type_gauge.mdx | 2 +- api_docs/vis_type_heatmap.mdx | 2 +- api_docs/vis_type_pie.mdx | 2 +- api_docs/vis_type_table.mdx | 2 +- api_docs/vis_type_timelion.mdx | 2 +- api_docs/vis_type_timeseries.mdx | 2 +- api_docs/vis_type_vega.mdx | 2 +- api_docs/vis_type_vislib.mdx | 2 +- api_docs/vis_type_xy.mdx | 2 +- api_docs/visualizations.mdx | 2 +- 778 files changed, 810 insertions(+), 780 deletions(-) diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index 5014b27b0e741..35f0ed0b568be 100644 --- a/api_docs/actions.mdx +++ b/api_docs/actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/actions title: "actions" image: https://source.unsplash.com/400x175/?github description: API docs for the actions plugin -date: 2024-12-21 +date: 2024-12-23 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 69e91f27a4a50..eb0f4206e205a 100644 --- a/api_docs/advanced_settings.mdx +++ b/api_docs/advanced_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/advancedSettings title: "advancedSettings" image: https://source.unsplash.com/400x175/?github description: API docs for the advancedSettings plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings'] --- import advancedSettingsObj from './advanced_settings.devdocs.json'; diff --git a/api_docs/ai_assistant_management_selection.mdx b/api_docs/ai_assistant_management_selection.mdx index 2399662625832..7d4ff53bd0711 100644 --- a/api_docs/ai_assistant_management_selection.mdx +++ b/api_docs/ai_assistant_management_selection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiAssistantManagementSelection title: "aiAssistantManagementSelection" image: https://source.unsplash.com/400x175/?github description: API docs for the aiAssistantManagementSelection plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiAssistantManagementSelection'] --- import aiAssistantManagementSelectionObj from './ai_assistant_management_selection.devdocs.json'; diff --git a/api_docs/aiops.mdx b/api_docs/aiops.mdx index 52c5eaeab5323..bf02f41cc4d47 100644 --- a/api_docs/aiops.mdx +++ b/api_docs/aiops.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiops title: "aiops" image: https://source.unsplash.com/400x175/?github description: API docs for the aiops plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiops'] --- import aiopsObj from './aiops.devdocs.json'; diff --git a/api_docs/alerting.devdocs.json b/api_docs/alerting.devdocs.json index 8ca11a439e4cd..94a5a9fe942e6 100644 --- a/api_docs/alerting.devdocs.json +++ b/api_docs/alerting.devdocs.json @@ -10599,6 +10599,36 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "alerting", + "id": "def-common.MAINTENANCE_WINDOW_DEFAULT_PER_PAGE", + "type": "number", + "tags": [], + "label": "MAINTENANCE_WINDOW_DEFAULT_PER_PAGE", + "description": [], + "signature": [ + "10" + ], + "path": "x-pack/plugins/alerting/common/maintenance_window.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "alerting", + "id": "def-common.MAINTENANCE_WINDOW_DEFAULT_TABLE_ACTIVE_PAGE", + "type": "number", + "tags": [], + "label": "MAINTENANCE_WINDOW_DEFAULT_TABLE_ACTIVE_PAGE", + "description": [], + "signature": [ + "1" + ], + "path": "x-pack/plugins/alerting/common/maintenance_window.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "alerting", "id": "def-common.MAINTENANCE_WINDOW_FEATURE_ID", diff --git a/api_docs/alerting.mdx b/api_docs/alerting.mdx index 23a2b48b4d0da..f28995534258c 100644 --- a/api_docs/alerting.mdx +++ b/api_docs/alerting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/alerting title: "alerting" image: https://source.unsplash.com/400x175/?github description: API docs for the alerting plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'alerting'] --- import alertingObj from './alerting.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-o | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 872 | 1 | 839 | 50 | +| 874 | 1 | 841 | 50 | ## Client diff --git a/api_docs/apm.mdx b/api_docs/apm.mdx index ef1ce3940b315..81f9c90011c99 100644 --- a/api_docs/apm.mdx +++ b/api_docs/apm.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apm title: "apm" image: https://source.unsplash.com/400x175/?github description: API docs for the apm plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apm'] --- import apmObj from './apm.devdocs.json'; diff --git a/api_docs/apm_data_access.mdx b/api_docs/apm_data_access.mdx index dcbd6f7316827..a988e164b6db4 100644 --- a/api_docs/apm_data_access.mdx +++ b/api_docs/apm_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apmDataAccess title: "apmDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the apmDataAccess plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apmDataAccess'] --- import apmDataAccessObj from './apm_data_access.devdocs.json'; diff --git a/api_docs/asset_inventory.mdx b/api_docs/asset_inventory.mdx index dc472054c762c..7b636006f5746 100644 --- a/api_docs/asset_inventory.mdx +++ b/api_docs/asset_inventory.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/assetInventory title: "assetInventory" image: https://source.unsplash.com/400x175/?github description: API docs for the assetInventory plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'assetInventory'] --- import assetInventoryObj from './asset_inventory.devdocs.json'; diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index 23986e02a936f..00bdf26d46a1b 100644 --- a/api_docs/banners.mdx +++ b/api_docs/banners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/banners title: "banners" image: https://source.unsplash.com/400x175/?github description: API docs for the banners plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'banners'] --- import bannersObj from './banners.devdocs.json'; diff --git a/api_docs/canvas.mdx b/api_docs/canvas.mdx index f5633760a23c4..e0e66ddff6aa5 100644 --- a/api_docs/canvas.mdx +++ b/api_docs/canvas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/canvas title: "canvas" image: https://source.unsplash.com/400x175/?github description: API docs for the canvas plugin -date: 2024-12-21 +date: 2024-12-23 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 23b5cd0e0aee4..069b939316364 100644 --- a/api_docs/cases.mdx +++ b/api_docs/cases.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cases title: "cases" image: https://source.unsplash.com/400x175/?github description: API docs for the cases plugin -date: 2024-12-21 +date: 2024-12-23 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 c20bec86f078f..7f2449f9fc70c 100644 --- a/api_docs/charts.mdx +++ b/api_docs/charts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/charts title: "charts" image: https://source.unsplash.com/400x175/?github description: API docs for the charts plugin -date: 2024-12-21 +date: 2024-12-23 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 8840e5daa9565..2a12b17788650 100644 --- a/api_docs/cloud.mdx +++ b/api_docs/cloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloud title: "cloud" image: https://source.unsplash.com/400x175/?github description: API docs for the cloud plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloud'] --- import cloudObj from './cloud.devdocs.json'; diff --git a/api_docs/cloud_data_migration.mdx b/api_docs/cloud_data_migration.mdx index 511e934564175..2084de6a06805 100644 --- a/api_docs/cloud_data_migration.mdx +++ b/api_docs/cloud_data_migration.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDataMigration title: "cloudDataMigration" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDataMigration plugin -date: 2024-12-21 +date: 2024-12-23 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 8ae85b575ecd9..af3fafdebf96d 100644 --- a/api_docs/cloud_defend.mdx +++ b/api_docs/cloud_defend.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDefend title: "cloudDefend" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDefend plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudDefend'] --- import cloudDefendObj from './cloud_defend.devdocs.json'; diff --git a/api_docs/cloud_security_posture.mdx b/api_docs/cloud_security_posture.mdx index a088a57715491..036ea4ddd2ba1 100644 --- a/api_docs/cloud_security_posture.mdx +++ b/api_docs/cloud_security_posture.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudSecurityPosture title: "cloudSecurityPosture" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudSecurityPosture plugin -date: 2024-12-21 +date: 2024-12-23 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 602a8657084d0..32ded97aa7d4b 100644 --- a/api_docs/console.mdx +++ b/api_docs/console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/console title: "console" image: https://source.unsplash.com/400x175/?github description: API docs for the console plugin -date: 2024-12-21 +date: 2024-12-23 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 cf519e0d45412..a8ef7eeabc4a1 100644 --- a/api_docs/content_management.mdx +++ b/api_docs/content_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/contentManagement title: "contentManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the contentManagement plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'contentManagement'] --- import contentManagementObj from './content_management.devdocs.json'; diff --git a/api_docs/controls.mdx b/api_docs/controls.mdx index b9f01e918f96c..547b057a1bf12 100644 --- a/api_docs/controls.mdx +++ b/api_docs/controls.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/controls title: "controls" image: https://source.unsplash.com/400x175/?github description: API docs for the controls plugin -date: 2024-12-21 +date: 2024-12-23 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 616b12ae57dac..f3c932e5a83c9 100644 --- a/api_docs/custom_integrations.mdx +++ b/api_docs/custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/customIntegrations title: "customIntegrations" image: https://source.unsplash.com/400x175/?github description: API docs for the customIntegrations plugin -date: 2024-12-21 +date: 2024-12-23 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 ce70a2406e9ba..fd8e03caf0646 100644 --- a/api_docs/dashboard.mdx +++ b/api_docs/dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboard title: "dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboard plugin -date: 2024-12-21 +date: 2024-12-23 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 446d7803b67d2..647972f4d3dc2 100644 --- a/api_docs/dashboard_enhanced.mdx +++ b/api_docs/dashboard_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboardEnhanced title: "dashboardEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboardEnhanced plugin -date: 2024-12-21 +date: 2024-12-23 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 692507eb404b5..74e871fb67dad 100644 --- a/api_docs/data.mdx +++ b/api_docs/data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data title: "data" image: https://source.unsplash.com/400x175/?github description: API docs for the data plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data'] --- import dataObj from './data.devdocs.json'; diff --git a/api_docs/data_quality.mdx b/api_docs/data_quality.mdx index 214cff3a502aa..2fe3c0386b68b 100644 --- a/api_docs/data_quality.mdx +++ b/api_docs/data_quality.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataQuality title: "dataQuality" image: https://source.unsplash.com/400x175/?github description: API docs for the dataQuality plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataQuality'] --- import dataQualityObj from './data_quality.devdocs.json'; diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx index 6cf86b8cdc49a..bab6b000ed22e 100644 --- a/api_docs/data_query.mdx +++ b/api_docs/data_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-query title: "data.query" image: https://source.unsplash.com/400x175/?github description: API docs for the data.query plugin -date: 2024-12-21 +date: 2024-12-23 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 d88981206dd3e..ef7a11e695403 100644 --- a/api_docs/data_search.mdx +++ b/api_docs/data_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-search title: "data.search" image: https://source.unsplash.com/400x175/?github description: API docs for the data.search plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.search'] --- import dataSearchObj from './data_search.devdocs.json'; diff --git a/api_docs/data_usage.mdx b/api_docs/data_usage.mdx index 8cb61f3d5c630..59754ea1fa306 100644 --- a/api_docs/data_usage.mdx +++ b/api_docs/data_usage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataUsage title: "dataUsage" image: https://source.unsplash.com/400x175/?github description: API docs for the dataUsage plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataUsage'] --- import dataUsageObj from './data_usage.devdocs.json'; diff --git a/api_docs/data_view_editor.mdx b/api_docs/data_view_editor.mdx index 208d6b7837c62..d397bc50f3536 100644 --- a/api_docs/data_view_editor.mdx +++ b/api_docs/data_view_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewEditor title: "dataViewEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewEditor plugin -date: 2024-12-21 +date: 2024-12-23 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 1ad390ff11bdd..92b3f4b54a512 100644 --- a/api_docs/data_view_field_editor.mdx +++ b/api_docs/data_view_field_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewFieldEditor title: "dataViewFieldEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewFieldEditor plugin -date: 2024-12-21 +date: 2024-12-23 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 3516ffd546ec6..dca1a2a33e56c 100644 --- a/api_docs/data_view_management.mdx +++ b/api_docs/data_view_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewManagement title: "dataViewManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewManagement plugin -date: 2024-12-21 +date: 2024-12-23 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 a386583b9e6cb..986af0bf4b45e 100644 --- a/api_docs/data_views.mdx +++ b/api_docs/data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViews title: "dataViews" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViews plugin -date: 2024-12-21 +date: 2024-12-23 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 b794814779c9a..1e09ae3693f02 100644 --- a/api_docs/data_visualizer.mdx +++ b/api_docs/data_visualizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataVisualizer title: "dataVisualizer" image: https://source.unsplash.com/400x175/?github description: API docs for the dataVisualizer plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataVisualizer'] --- import dataVisualizerObj from './data_visualizer.devdocs.json'; diff --git a/api_docs/dataset_quality.mdx b/api_docs/dataset_quality.mdx index 55ae0cbf515b7..0d73fee98d76f 100644 --- a/api_docs/dataset_quality.mdx +++ b/api_docs/dataset_quality.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/datasetQuality title: "datasetQuality" image: https://source.unsplash.com/400x175/?github description: API docs for the datasetQuality plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'datasetQuality'] --- import datasetQualityObj from './dataset_quality.devdocs.json'; diff --git a/api_docs/deprecations_by_api.mdx b/api_docs/deprecations_by_api.mdx index b399b94b8ff31..c7a67edd98408 100644 --- a/api_docs/deprecations_by_api.mdx +++ b/api_docs/deprecations_by_api.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByApi slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-api title: Deprecated API usage by API description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index aaceca125b600..a511d8d6e8b3a 100644 --- a/api_docs/deprecations_by_plugin.mdx +++ b/api_docs/deprecations_by_plugin.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByPlugin slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-plugin title: Deprecated API usage by plugin description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index a4ca61d0e01ad..6dee05ccb6c78 100644 --- a/api_docs/deprecations_by_team.mdx +++ b/api_docs/deprecations_by_team.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsDueByTeam slug: /kibana-dev-docs/api-meta/deprecations-due-by-team title: Deprecated APIs due to be removed, by team description: Lists the teams that are referencing deprecated APIs with a remove by date. -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index 91231dd48fa52..4d8790a23d63f 100644 --- a/api_docs/dev_tools.mdx +++ b/api_docs/dev_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/devTools title: "devTools" image: https://source.unsplash.com/400x175/?github description: API docs for the devTools plugin -date: 2024-12-21 +date: 2024-12-23 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 4e321e1d92711..c1c596d4fb2aa 100644 --- a/api_docs/discover.mdx +++ b/api_docs/discover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discover title: "discover" image: https://source.unsplash.com/400x175/?github description: API docs for the discover plugin -date: 2024-12-21 +date: 2024-12-23 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 1bd1da49497e4..e5dadf61fc219 100644 --- a/api_docs/discover_enhanced.mdx +++ b/api_docs/discover_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverEnhanced title: "discoverEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverEnhanced plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced'] --- import discoverEnhancedObj from './discover_enhanced.devdocs.json'; diff --git a/api_docs/discover_shared.mdx b/api_docs/discover_shared.mdx index ee9ab893c7c41..2cecef177fefc 100644 --- a/api_docs/discover_shared.mdx +++ b/api_docs/discover_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverShared title: "discoverShared" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverShared plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverShared'] --- import discoverSharedObj from './discover_shared.devdocs.json'; diff --git a/api_docs/ecs_data_quality_dashboard.mdx b/api_docs/ecs_data_quality_dashboard.mdx index 8dd727f0926aa..877a84dc5308c 100644 --- a/api_docs/ecs_data_quality_dashboard.mdx +++ b/api_docs/ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ecsDataQualityDashboard title: "ecsDataQualityDashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the ecsDataQualityDashboard plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ecsDataQualityDashboard'] --- import ecsDataQualityDashboardObj from './ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/elastic_assistant.mdx b/api_docs/elastic_assistant.mdx index 0a59c45e3f7dc..fe426b1dfae37 100644 --- a/api_docs/elastic_assistant.mdx +++ b/api_docs/elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/elasticAssistant title: "elasticAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the elasticAssistant plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'elasticAssistant'] --- import elasticAssistantObj from './elastic_assistant.devdocs.json'; diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx index 4b570d622bccb..89eaf1bbe9d6e 100644 --- a/api_docs/embeddable.mdx +++ b/api_docs/embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddable title: "embeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddable plugin -date: 2024-12-21 +date: 2024-12-23 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 be4f272e87431..6442f5768c1fb 100644 --- a/api_docs/embeddable_enhanced.mdx +++ b/api_docs/embeddable_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddableEnhanced title: "embeddableEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddableEnhanced plugin -date: 2024-12-21 +date: 2024-12-23 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 ad8a1795db027..bf687764b0246 100644 --- a/api_docs/encrypted_saved_objects.mdx +++ b/api_docs/encrypted_saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/encryptedSavedObjects title: "encryptedSavedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the encryptedSavedObjects plugin -date: 2024-12-21 +date: 2024-12-23 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 5b909385f50c2..53f514aa1aadf 100644 --- a/api_docs/enterprise_search.mdx +++ b/api_docs/enterprise_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/enterpriseSearch title: "enterpriseSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the enterpriseSearch plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'enterpriseSearch'] --- import enterpriseSearchObj from './enterprise_search.devdocs.json'; diff --git a/api_docs/entities_data_access.mdx b/api_docs/entities_data_access.mdx index fa5bf7f99162a..2de8d4ab30466 100644 --- a/api_docs/entities_data_access.mdx +++ b/api_docs/entities_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/entitiesDataAccess title: "entitiesDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the entitiesDataAccess plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'entitiesDataAccess'] --- import entitiesDataAccessObj from './entities_data_access.devdocs.json'; diff --git a/api_docs/entity_manager.mdx b/api_docs/entity_manager.mdx index c3dd86b405911..79180f1eb136f 100644 --- a/api_docs/entity_manager.mdx +++ b/api_docs/entity_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/entityManager title: "entityManager" image: https://source.unsplash.com/400x175/?github description: API docs for the entityManager plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'entityManager'] --- import entityManagerObj from './entity_manager.devdocs.json'; diff --git a/api_docs/es_ui_shared.mdx b/api_docs/es_ui_shared.mdx index 71caffcc59dc4..772ff3a8aa771 100644 --- a/api_docs/es_ui_shared.mdx +++ b/api_docs/es_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esUiShared title: "esUiShared" image: https://source.unsplash.com/400x175/?github description: API docs for the esUiShared plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared'] --- import esUiSharedObj from './es_ui_shared.devdocs.json'; diff --git a/api_docs/esql.mdx b/api_docs/esql.mdx index d6e91d400abc3..0e3ae2f72ccfe 100644 --- a/api_docs/esql.mdx +++ b/api_docs/esql.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esql title: "esql" image: https://source.unsplash.com/400x175/?github description: API docs for the esql plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esql'] --- import esqlObj from './esql.devdocs.json'; diff --git a/api_docs/esql_data_grid.mdx b/api_docs/esql_data_grid.mdx index 51af3ea26eb3a..a4c86b86e093f 100644 --- a/api_docs/esql_data_grid.mdx +++ b/api_docs/esql_data_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esqlDataGrid title: "esqlDataGrid" image: https://source.unsplash.com/400x175/?github description: API docs for the esqlDataGrid plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esqlDataGrid'] --- import esqlDataGridObj from './esql_data_grid.devdocs.json'; diff --git a/api_docs/event_annotation.mdx b/api_docs/event_annotation.mdx index 0c54debe2a889..9ff8c310125b4 100644 --- a/api_docs/event_annotation.mdx +++ b/api_docs/event_annotation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotation title: "eventAnnotation" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotation plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotation'] --- import eventAnnotationObj from './event_annotation.devdocs.json'; diff --git a/api_docs/event_annotation_listing.mdx b/api_docs/event_annotation_listing.mdx index 1dae7742f24b3..027df878fa5a2 100644 --- a/api_docs/event_annotation_listing.mdx +++ b/api_docs/event_annotation_listing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotationListing title: "eventAnnotationListing" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotationListing plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotationListing'] --- import eventAnnotationListingObj from './event_annotation_listing.devdocs.json'; diff --git a/api_docs/event_log.mdx b/api_docs/event_log.mdx index 03129d7db6674..3f3aebc6e5fe0 100644 --- a/api_docs/event_log.mdx +++ b/api_docs/event_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventLog title: "eventLog" image: https://source.unsplash.com/400x175/?github description: API docs for the eventLog plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventLog'] --- import eventLogObj from './event_log.devdocs.json'; diff --git a/api_docs/exploratory_view.mdx b/api_docs/exploratory_view.mdx index 7da9e02775d6d..1a74d3bf1c351 100644 --- a/api_docs/exploratory_view.mdx +++ b/api_docs/exploratory_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/exploratoryView title: "exploratoryView" image: https://source.unsplash.com/400x175/?github description: API docs for the exploratoryView plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'exploratoryView'] --- import exploratoryViewObj from './exploratory_view.devdocs.json'; diff --git a/api_docs/expression_error.mdx b/api_docs/expression_error.mdx index 183c54de12bd3..7184edf5adfbb 100644 --- a/api_docs/expression_error.mdx +++ b/api_docs/expression_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionError title: "expressionError" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionError plugin -date: 2024-12-21 +date: 2024-12-23 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 c52ada151e8f4..b9662854c1232 100644 --- a/api_docs/expression_gauge.mdx +++ b/api_docs/expression_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionGauge title: "expressionGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionGauge plugin -date: 2024-12-21 +date: 2024-12-23 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 4dcdc96a60443..34165dc06a2f2 100644 --- a/api_docs/expression_heatmap.mdx +++ b/api_docs/expression_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionHeatmap title: "expressionHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionHeatmap plugin -date: 2024-12-21 +date: 2024-12-23 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 1c230f566f580..88f2638390249 100644 --- a/api_docs/expression_image.mdx +++ b/api_docs/expression_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionImage title: "expressionImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionImage plugin -date: 2024-12-21 +date: 2024-12-23 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 01f9065222434..16d203d59d598 100644 --- a/api_docs/expression_legacy_metric_vis.mdx +++ b/api_docs/expression_legacy_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionLegacyMetricVis title: "expressionLegacyMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionLegacyMetricVis plugin -date: 2024-12-21 +date: 2024-12-23 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 597da36501111..012f14a7aaab6 100644 --- a/api_docs/expression_metric.mdx +++ b/api_docs/expression_metric.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetric title: "expressionMetric" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetric plugin -date: 2024-12-21 +date: 2024-12-23 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 b29a2e23de57e..7525587954746 100644 --- a/api_docs/expression_metric_vis.mdx +++ b/api_docs/expression_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetricVis title: "expressionMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetricVis plugin -date: 2024-12-21 +date: 2024-12-23 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 bdfeac1d02fd3..3f7b55879e4dc 100644 --- a/api_docs/expression_partition_vis.mdx +++ b/api_docs/expression_partition_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionPartitionVis title: "expressionPartitionVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionPartitionVis plugin -date: 2024-12-21 +date: 2024-12-23 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 297e1bd7084b0..f01620313d27c 100644 --- a/api_docs/expression_repeat_image.mdx +++ b/api_docs/expression_repeat_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRepeatImage title: "expressionRepeatImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRepeatImage plugin -date: 2024-12-21 +date: 2024-12-23 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 4318579722be4..582089ebd450f 100644 --- a/api_docs/expression_reveal_image.mdx +++ b/api_docs/expression_reveal_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRevealImage title: "expressionRevealImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRevealImage plugin -date: 2024-12-21 +date: 2024-12-23 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 64e56019df5df..de3b36dad22f8 100644 --- a/api_docs/expression_shape.mdx +++ b/api_docs/expression_shape.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionShape title: "expressionShape" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionShape plugin -date: 2024-12-21 +date: 2024-12-23 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 d64105445b312..0501f6bc69279 100644 --- a/api_docs/expression_tagcloud.mdx +++ b/api_docs/expression_tagcloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionTagcloud title: "expressionTagcloud" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionTagcloud plugin -date: 2024-12-21 +date: 2024-12-23 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 6c714fdeebbc5..adefe41eca4d8 100644 --- a/api_docs/expression_x_y.mdx +++ b/api_docs/expression_x_y.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionXY title: "expressionXY" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionXY plugin -date: 2024-12-21 +date: 2024-12-23 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 b897076de3b40..2f63c380ab35a 100644 --- a/api_docs/expressions.mdx +++ b/api_docs/expressions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressions title: "expressions" image: https://source.unsplash.com/400x175/?github description: API docs for the expressions plugin -date: 2024-12-21 +date: 2024-12-23 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 1c879a80fa8dd..44cedc0d129db 100644 --- a/api_docs/features.mdx +++ b/api_docs/features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/features title: "features" image: https://source.unsplash.com/400x175/?github description: API docs for the features plugin -date: 2024-12-21 +date: 2024-12-23 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 13d415fa3ec28..81c57e3e500cb 100644 --- a/api_docs/field_formats.mdx +++ b/api_docs/field_formats.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldFormats title: "fieldFormats" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldFormats plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldFormats'] --- import fieldFormatsObj from './field_formats.devdocs.json'; diff --git a/api_docs/fields_metadata.mdx b/api_docs/fields_metadata.mdx index afa40973bae7c..f9bea71bebbfd 100644 --- a/api_docs/fields_metadata.mdx +++ b/api_docs/fields_metadata.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldsMetadata title: "fieldsMetadata" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldsMetadata plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldsMetadata'] --- import fieldsMetadataObj from './fields_metadata.devdocs.json'; diff --git a/api_docs/file_upload.mdx b/api_docs/file_upload.mdx index 221e81a16808a..fbb13c256a3fb 100644 --- a/api_docs/file_upload.mdx +++ b/api_docs/file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fileUpload title: "fileUpload" image: https://source.unsplash.com/400x175/?github description: API docs for the fileUpload plugin -date: 2024-12-21 +date: 2024-12-23 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 6a87c4fed29ac..b2744bb827ce0 100644 --- a/api_docs/files.mdx +++ b/api_docs/files.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/files title: "files" image: https://source.unsplash.com/400x175/?github description: API docs for the files plugin -date: 2024-12-21 +date: 2024-12-23 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 676a72f40d6eb..88d19f10a6537 100644 --- a/api_docs/files_management.mdx +++ b/api_docs/files_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/filesManagement title: "filesManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the filesManagement plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'filesManagement'] --- import filesManagementObj from './files_management.devdocs.json'; diff --git a/api_docs/fleet.mdx b/api_docs/fleet.mdx index 3fc57da88c820..39f526c34d8d2 100644 --- a/api_docs/fleet.mdx +++ b/api_docs/fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fleet title: "fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the fleet plugin -date: 2024-12-21 +date: 2024-12-23 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 94b9ad8bc886b..4fb4124987c5e 100644 --- a/api_docs/global_search.mdx +++ b/api_docs/global_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/globalSearch title: "globalSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the globalSearch plugin -date: 2024-12-21 +date: 2024-12-23 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 3d2c347af05f6..e7c24a52f1d84 100644 --- a/api_docs/guided_onboarding.mdx +++ b/api_docs/guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/guidedOnboarding title: "guidedOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the guidedOnboarding plugin -date: 2024-12-21 +date: 2024-12-23 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 3176ea2385b88..4a8f77330fad0 100644 --- a/api_docs/home.mdx +++ b/api_docs/home.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/home title: "home" image: https://source.unsplash.com/400x175/?github description: API docs for the home plugin -date: 2024-12-21 +date: 2024-12-23 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 e3b759747b3a6..c91ce7e287e40 100644 --- a/api_docs/image_embeddable.mdx +++ b/api_docs/image_embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/imageEmbeddable title: "imageEmbeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the imageEmbeddable plugin -date: 2024-12-21 +date: 2024-12-23 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 ce339d60a3370..f3e1d5d9768ff 100644 --- a/api_docs/index_lifecycle_management.mdx +++ b/api_docs/index_lifecycle_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexLifecycleManagement title: "indexLifecycleManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexLifecycleManagement plugin -date: 2024-12-21 +date: 2024-12-23 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 cb03176f66237..9c51b17475c72 100644 --- a/api_docs/index_management.mdx +++ b/api_docs/index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexManagement title: "indexManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexManagement plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexManagement'] --- import indexManagementObj from './index_management.devdocs.json'; diff --git a/api_docs/inference.mdx b/api_docs/inference.mdx index da41bfbd4cbc0..c9a303e522c58 100644 --- a/api_docs/inference.mdx +++ b/api_docs/inference.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inference title: "inference" image: https://source.unsplash.com/400x175/?github description: API docs for the inference plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inference'] --- import inferenceObj from './inference.devdocs.json'; diff --git a/api_docs/infra.mdx b/api_docs/infra.mdx index c09d554350c3b..bea4e41bfef8d 100644 --- a/api_docs/infra.mdx +++ b/api_docs/infra.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/infra title: "infra" image: https://source.unsplash.com/400x175/?github description: API docs for the infra plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'infra'] --- import infraObj from './infra.devdocs.json'; diff --git a/api_docs/ingest_pipelines.mdx b/api_docs/ingest_pipelines.mdx index 45f8e8e955e73..09b4b27d1822b 100644 --- a/api_docs/ingest_pipelines.mdx +++ b/api_docs/ingest_pipelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ingestPipelines title: "ingestPipelines" image: https://source.unsplash.com/400x175/?github description: API docs for the ingestPipelines plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ingestPipelines'] --- import ingestPipelinesObj from './ingest_pipelines.devdocs.json'; diff --git a/api_docs/inspector.mdx b/api_docs/inspector.mdx index e3752dde6f56e..68476254f332e 100644 --- a/api_docs/inspector.mdx +++ b/api_docs/inspector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inspector title: "inspector" image: https://source.unsplash.com/400x175/?github description: API docs for the inspector plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inspector'] --- import inspectorObj from './inspector.devdocs.json'; diff --git a/api_docs/integration_assistant.mdx b/api_docs/integration_assistant.mdx index 472b4780a960d..c00cdd4176221 100644 --- a/api_docs/integration_assistant.mdx +++ b/api_docs/integration_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/integrationAssistant title: "integrationAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the integrationAssistant plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'integrationAssistant'] --- import integrationAssistantObj from './integration_assistant.devdocs.json'; diff --git a/api_docs/interactive_setup.mdx b/api_docs/interactive_setup.mdx index 73eec57b8fd06..376198c14ecd6 100644 --- a/api_docs/interactive_setup.mdx +++ b/api_docs/interactive_setup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/interactiveSetup title: "interactiveSetup" image: https://source.unsplash.com/400x175/?github description: API docs for the interactiveSetup plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'interactiveSetup'] --- import interactiveSetupObj from './interactive_setup.devdocs.json'; diff --git a/api_docs/inventory.mdx b/api_docs/inventory.mdx index 5cf43745a3015..f56cc583af6bf 100644 --- a/api_docs/inventory.mdx +++ b/api_docs/inventory.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inventory title: "inventory" image: https://source.unsplash.com/400x175/?github description: API docs for the inventory plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inventory'] --- import inventoryObj from './inventory.devdocs.json'; diff --git a/api_docs/investigate.mdx b/api_docs/investigate.mdx index 3d9a6d8665eae..79cec901eedc5 100644 --- a/api_docs/investigate.mdx +++ b/api_docs/investigate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/investigate title: "investigate" image: https://source.unsplash.com/400x175/?github description: API docs for the investigate plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'investigate'] --- import investigateObj from './investigate.devdocs.json'; diff --git a/api_docs/investigate_app.mdx b/api_docs/investigate_app.mdx index 4c4ea403b9c6f..273c7b5c2eccf 100644 --- a/api_docs/investigate_app.mdx +++ b/api_docs/investigate_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/investigateApp title: "investigateApp" image: https://source.unsplash.com/400x175/?github description: API docs for the investigateApp plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'investigateApp'] --- import investigateAppObj from './investigate_app.devdocs.json'; diff --git a/api_docs/kbn_actions_types.mdx b/api_docs/kbn_actions_types.mdx index 1174eda1f685b..4336fc9c7886e 100644 --- a/api_docs/kbn_actions_types.mdx +++ b/api_docs/kbn_actions_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-actions-types title: "@kbn/actions-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/actions-types plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/actions-types'] --- import kbnActionsTypesObj from './kbn_actions_types.devdocs.json'; diff --git a/api_docs/kbn_ai_assistant.mdx b/api_docs/kbn_ai_assistant.mdx index edb2907600e0c..f595e55ae4374 100644 --- a/api_docs/kbn_ai_assistant.mdx +++ b/api_docs/kbn_ai_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ai-assistant title: "@kbn/ai-assistant" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ai-assistant plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ai-assistant'] --- import kbnAiAssistantObj from './kbn_ai_assistant.devdocs.json'; diff --git a/api_docs/kbn_ai_assistant_common.mdx b/api_docs/kbn_ai_assistant_common.mdx index 152c159879560..83221def08529 100644 --- a/api_docs/kbn_ai_assistant_common.mdx +++ b/api_docs/kbn_ai_assistant_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ai-assistant-common title: "@kbn/ai-assistant-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ai-assistant-common plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ai-assistant-common'] --- import kbnAiAssistantCommonObj from './kbn_ai_assistant_common.devdocs.json'; diff --git a/api_docs/kbn_ai_assistant_icon.mdx b/api_docs/kbn_ai_assistant_icon.mdx index 9355045c41f12..bf649f8f7e501 100644 --- a/api_docs/kbn_ai_assistant_icon.mdx +++ b/api_docs/kbn_ai_assistant_icon.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ai-assistant-icon title: "@kbn/ai-assistant-icon" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ai-assistant-icon plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ai-assistant-icon'] --- import kbnAiAssistantIconObj from './kbn_ai_assistant_icon.devdocs.json'; diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx index de7329bd41c70..39c7aedaeeae2 100644 --- a/api_docs/kbn_aiops_components.mdx +++ b/api_docs/kbn_aiops_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-components title: "@kbn/aiops-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-components plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components'] --- import kbnAiopsComponentsObj from './kbn_aiops_components.devdocs.json'; diff --git a/api_docs/kbn_aiops_log_pattern_analysis.mdx b/api_docs/kbn_aiops_log_pattern_analysis.mdx index dbd6265bd7d39..459fa7ea7aca5 100644 --- a/api_docs/kbn_aiops_log_pattern_analysis.mdx +++ b/api_docs/kbn_aiops_log_pattern_analysis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-log-pattern-analysis title: "@kbn/aiops-log-pattern-analysis" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-log-pattern-analysis plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-log-pattern-analysis'] --- import kbnAiopsLogPatternAnalysisObj from './kbn_aiops_log_pattern_analysis.devdocs.json'; diff --git a/api_docs/kbn_aiops_log_rate_analysis.mdx b/api_docs/kbn_aiops_log_rate_analysis.mdx index da2b660f416e6..bf64dd142d661 100644 --- a/api_docs/kbn_aiops_log_rate_analysis.mdx +++ b/api_docs/kbn_aiops_log_rate_analysis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-log-rate-analysis title: "@kbn/aiops-log-rate-analysis" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-log-rate-analysis plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-log-rate-analysis'] --- import kbnAiopsLogRateAnalysisObj from './kbn_aiops_log_rate_analysis.devdocs.json'; diff --git a/api_docs/kbn_alerting_api_integration_helpers.mdx b/api_docs/kbn_alerting_api_integration_helpers.mdx index edc9c12de5374..b0669df4ccc81 100644 --- a/api_docs/kbn_alerting_api_integration_helpers.mdx +++ b/api_docs/kbn_alerting_api_integration_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-api-integration-helpers title: "@kbn/alerting-api-integration-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-api-integration-helpers plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-api-integration-helpers'] --- import kbnAlertingApiIntegrationHelpersObj from './kbn_alerting_api_integration_helpers.devdocs.json'; diff --git a/api_docs/kbn_alerting_comparators.mdx b/api_docs/kbn_alerting_comparators.mdx index 55e94b50e2dea..7a151d9702a1d 100644 --- a/api_docs/kbn_alerting_comparators.mdx +++ b/api_docs/kbn_alerting_comparators.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-comparators title: "@kbn/alerting-comparators" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-comparators plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-comparators'] --- import kbnAlertingComparatorsObj from './kbn_alerting_comparators.devdocs.json'; diff --git a/api_docs/kbn_alerting_state_types.mdx b/api_docs/kbn_alerting_state_types.mdx index 2a56c4b820c97..5a38f02d769eb 100644 --- a/api_docs/kbn_alerting_state_types.mdx +++ b/api_docs/kbn_alerting_state_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-state-types title: "@kbn/alerting-state-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-state-types plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-state-types'] --- import kbnAlertingStateTypesObj from './kbn_alerting_state_types.devdocs.json'; diff --git a/api_docs/kbn_alerting_types.mdx b/api_docs/kbn_alerting_types.mdx index ce1819817fa78..1da3056dbcd60 100644 --- a/api_docs/kbn_alerting_types.mdx +++ b/api_docs/kbn_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-types title: "@kbn/alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-types plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-types'] --- import kbnAlertingTypesObj from './kbn_alerting_types.devdocs.json'; diff --git a/api_docs/kbn_alerts_as_data_utils.mdx b/api_docs/kbn_alerts_as_data_utils.mdx index 8e1ad36523c4e..ba4ab73ff527b 100644 --- a/api_docs/kbn_alerts_as_data_utils.mdx +++ b/api_docs/kbn_alerts_as_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-as-data-utils title: "@kbn/alerts-as-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-as-data-utils plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-as-data-utils'] --- import kbnAlertsAsDataUtilsObj from './kbn_alerts_as_data_utils.devdocs.json'; diff --git a/api_docs/kbn_alerts_grouping.mdx b/api_docs/kbn_alerts_grouping.mdx index 00879218963a1..a43461d53333c 100644 --- a/api_docs/kbn_alerts_grouping.mdx +++ b/api_docs/kbn_alerts_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-grouping title: "@kbn/alerts-grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-grouping plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-grouping'] --- import kbnAlertsGroupingObj from './kbn_alerts_grouping.devdocs.json'; diff --git a/api_docs/kbn_alerts_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx index 4ee1f57f05454..4c63888e463ef 100644 --- a/api_docs/kbn_alerts_ui_shared.mdx +++ b/api_docs/kbn_alerts_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-ui-shared title: "@kbn/alerts-ui-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-ui-shared plugin -date: 2024-12-21 +date: 2024-12-23 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 335d312ef242d..4016c94510b0a 100644 --- a/api_docs/kbn_analytics.mdx +++ b/api_docs/kbn_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics title: "@kbn/analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics'] --- import kbnAnalyticsObj from './kbn_analytics.devdocs.json'; diff --git a/api_docs/kbn_analytics_collection_utils.mdx b/api_docs/kbn_analytics_collection_utils.mdx index 0f516268602d7..eadbcf764904c 100644 --- a/api_docs/kbn_analytics_collection_utils.mdx +++ b/api_docs/kbn_analytics_collection_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-collection-utils title: "@kbn/analytics-collection-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-collection-utils plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-collection-utils'] --- import kbnAnalyticsCollectionUtilsObj from './kbn_analytics_collection_utils.devdocs.json'; diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index 8bc052254ec24..7cf577fdf7000 100644 --- a/api_docs/kbn_apm_config_loader.mdx +++ b/api_docs/kbn_apm_config_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-config-loader title: "@kbn/apm-config-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-config-loader plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-config-loader'] --- import kbnApmConfigLoaderObj from './kbn_apm_config_loader.devdocs.json'; diff --git a/api_docs/kbn_apm_data_view.mdx b/api_docs/kbn_apm_data_view.mdx index fb051978f767c..a1cb2d7e74594 100644 --- a/api_docs/kbn_apm_data_view.mdx +++ b/api_docs/kbn_apm_data_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-data-view title: "@kbn/apm-data-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-data-view plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-data-view'] --- import kbnApmDataViewObj from './kbn_apm_data_view.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace.mdx b/api_docs/kbn_apm_synthtrace.mdx index 1fd4be6589dbb..98635241788cd 100644 --- a/api_docs/kbn_apm_synthtrace.mdx +++ b/api_docs/kbn_apm_synthtrace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace title: "@kbn/apm-synthtrace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace plugin -date: 2024-12-21 +date: 2024-12-23 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 ed3398de79077..3a50c43315f94 100644 --- a/api_docs/kbn_apm_synthtrace_client.mdx +++ b/api_docs/kbn_apm_synthtrace_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace-client title: "@kbn/apm-synthtrace-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace-client plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace-client'] --- import kbnApmSynthtraceClientObj from './kbn_apm_synthtrace_client.devdocs.json'; diff --git a/api_docs/kbn_apm_types.mdx b/api_docs/kbn_apm_types.mdx index 3c17b4956960d..d7835175a00b5 100644 --- a/api_docs/kbn_apm_types.mdx +++ b/api_docs/kbn_apm_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-types title: "@kbn/apm-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-types plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-types'] --- import kbnApmTypesObj from './kbn_apm_types.devdocs.json'; diff --git a/api_docs/kbn_apm_utils.mdx b/api_docs/kbn_apm_utils.mdx index 29d9260127d1d..35b0972664709 100644 --- a/api_docs/kbn_apm_utils.mdx +++ b/api_docs/kbn_apm_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-utils title: "@kbn/apm-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-utils plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-utils'] --- import kbnApmUtilsObj from './kbn_apm_utils.devdocs.json'; diff --git a/api_docs/kbn_avc_banner.mdx b/api_docs/kbn_avc_banner.mdx index e923930b87787..1607ea732af35 100644 --- a/api_docs/kbn_avc_banner.mdx +++ b/api_docs/kbn_avc_banner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-avc-banner title: "@kbn/avc-banner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/avc-banner plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/avc-banner'] --- import kbnAvcBannerObj from './kbn_avc_banner.devdocs.json'; diff --git a/api_docs/kbn_axe_config.mdx b/api_docs/kbn_axe_config.mdx index 28b610fa20e1b..d3ba46c669ea3 100644 --- a/api_docs/kbn_axe_config.mdx +++ b/api_docs/kbn_axe_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-axe-config title: "@kbn/axe-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/axe-config plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/axe-config'] --- import kbnAxeConfigObj from './kbn_axe_config.devdocs.json'; diff --git a/api_docs/kbn_calculate_auto.mdx b/api_docs/kbn_calculate_auto.mdx index 436ceaf684322..66577c3768917 100644 --- a/api_docs/kbn_calculate_auto.mdx +++ b/api_docs/kbn_calculate_auto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-calculate-auto title: "@kbn/calculate-auto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/calculate-auto plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/calculate-auto'] --- import kbnCalculateAutoObj from './kbn_calculate_auto.devdocs.json'; diff --git a/api_docs/kbn_calculate_width_from_char_count.mdx b/api_docs/kbn_calculate_width_from_char_count.mdx index 17a091efbd6b4..8c615a7bcb70d 100644 --- a/api_docs/kbn_calculate_width_from_char_count.mdx +++ b/api_docs/kbn_calculate_width_from_char_count.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-calculate-width-from-char-count title: "@kbn/calculate-width-from-char-count" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/calculate-width-from-char-count plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/calculate-width-from-char-count'] --- import kbnCalculateWidthFromCharCountObj from './kbn_calculate_width_from_char_count.devdocs.json'; diff --git a/api_docs/kbn_cases_components.mdx b/api_docs/kbn_cases_components.mdx index 6f34875b175ec..be2d0cd42dd5f 100644 --- a/api_docs/kbn_cases_components.mdx +++ b/api_docs/kbn_cases_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cases-components title: "@kbn/cases-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cases-components plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cases-components'] --- import kbnCasesComponentsObj from './kbn_cases_components.devdocs.json'; diff --git a/api_docs/kbn_cbor.mdx b/api_docs/kbn_cbor.mdx index 0a2c5167278ca..d1b42da94a390 100644 --- a/api_docs/kbn_cbor.mdx +++ b/api_docs/kbn_cbor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cbor title: "@kbn/cbor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cbor plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cbor'] --- import kbnCborObj from './kbn_cbor.devdocs.json'; diff --git a/api_docs/kbn_cell_actions.mdx b/api_docs/kbn_cell_actions.mdx index 043f1738a6234..e016ad7d644d1 100644 --- a/api_docs/kbn_cell_actions.mdx +++ b/api_docs/kbn_cell_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cell-actions title: "@kbn/cell-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cell-actions plugin -date: 2024-12-21 +date: 2024-12-23 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 bdc395db63bb1..64da2df13c84b 100644 --- a/api_docs/kbn_chart_expressions_common.mdx +++ b/api_docs/kbn_chart_expressions_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-expressions-common title: "@kbn/chart-expressions-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-expressions-common plugin -date: 2024-12-21 +date: 2024-12-23 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 06dcd82336179..5c5c6fb3a4ab7 100644 --- a/api_docs/kbn_chart_icons.mdx +++ b/api_docs/kbn_chart_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-icons title: "@kbn/chart-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-icons plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/chart-icons'] --- import kbnChartIconsObj from './kbn_chart_icons.devdocs.json'; diff --git a/api_docs/kbn_charts_theme.mdx b/api_docs/kbn_charts_theme.mdx index d5893a5647b7d..ad0203d2a76c2 100644 --- a/api_docs/kbn_charts_theme.mdx +++ b/api_docs/kbn_charts_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-charts-theme title: "@kbn/charts-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/charts-theme plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/charts-theme'] --- import kbnChartsThemeObj from './kbn_charts_theme.devdocs.json'; diff --git a/api_docs/kbn_ci_stats_core.mdx b/api_docs/kbn_ci_stats_core.mdx index fda49ea5775f0..93d3b48cb56df 100644 --- a/api_docs/kbn_ci_stats_core.mdx +++ b/api_docs/kbn_ci_stats_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-core title: "@kbn/ci-stats-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-core plugin -date: 2024-12-21 +date: 2024-12-23 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 5692fa4897584..6af5252e1a396 100644 --- a/api_docs/kbn_ci_stats_performance_metrics.mdx +++ b/api_docs/kbn_ci_stats_performance_metrics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-performance-metrics title: "@kbn/ci-stats-performance-metrics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-performance-metrics plugin -date: 2024-12-21 +date: 2024-12-23 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 9d37567497756..3d79f836dc30f 100644 --- a/api_docs/kbn_ci_stats_reporter.mdx +++ b/api_docs/kbn_ci_stats_reporter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-reporter title: "@kbn/ci-stats-reporter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-reporter plugin -date: 2024-12-21 +date: 2024-12-23 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 6d4adb6932444..13fde7e4c5ce1 100644 --- a/api_docs/kbn_cli_dev_mode.mdx +++ b/api_docs/kbn_cli_dev_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cli-dev-mode title: "@kbn/cli-dev-mode" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cli-dev-mode plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cli-dev-mode'] --- import kbnCliDevModeObj from './kbn_cli_dev_mode.devdocs.json'; diff --git a/api_docs/kbn_cloud_security_posture.mdx b/api_docs/kbn_cloud_security_posture.mdx index 5338d93a63a1a..ec78cb49d985a 100644 --- a/api_docs/kbn_cloud_security_posture.mdx +++ b/api_docs/kbn_cloud_security_posture.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cloud-security-posture title: "@kbn/cloud-security-posture" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cloud-security-posture plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cloud-security-posture'] --- import kbnCloudSecurityPostureObj from './kbn_cloud_security_posture.devdocs.json'; diff --git a/api_docs/kbn_cloud_security_posture_common.mdx b/api_docs/kbn_cloud_security_posture_common.mdx index 94d72eb490db1..8313281a89a6d 100644 --- a/api_docs/kbn_cloud_security_posture_common.mdx +++ b/api_docs/kbn_cloud_security_posture_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cloud-security-posture-common title: "@kbn/cloud-security-posture-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cloud-security-posture-common plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cloud-security-posture-common'] --- import kbnCloudSecurityPostureCommonObj from './kbn_cloud_security_posture_common.devdocs.json'; diff --git a/api_docs/kbn_cloud_security_posture_graph.mdx b/api_docs/kbn_cloud_security_posture_graph.mdx index f9af4c49f1387..f3d24d8881eb2 100644 --- a/api_docs/kbn_cloud_security_posture_graph.mdx +++ b/api_docs/kbn_cloud_security_posture_graph.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cloud-security-posture-graph title: "@kbn/cloud-security-posture-graph" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cloud-security-posture-graph plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cloud-security-posture-graph'] --- import kbnCloudSecurityPostureGraphObj from './kbn_cloud_security_posture_graph.devdocs.json'; diff --git a/api_docs/kbn_code_editor.mdx b/api_docs/kbn_code_editor.mdx index cb33493fcb4d0..6aac5bd525904 100644 --- a/api_docs/kbn_code_editor.mdx +++ b/api_docs/kbn_code_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor title: "@kbn/code-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor'] --- import kbnCodeEditorObj from './kbn_code_editor.devdocs.json'; diff --git a/api_docs/kbn_code_editor_mock.mdx b/api_docs/kbn_code_editor_mock.mdx index 24d0ab7cdcde5..55da47593186c 100644 --- a/api_docs/kbn_code_editor_mock.mdx +++ b/api_docs/kbn_code_editor_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor-mock title: "@kbn/code-editor-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor-mock plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor-mock'] --- import kbnCodeEditorMockObj from './kbn_code_editor_mock.devdocs.json'; diff --git a/api_docs/kbn_code_owners.mdx b/api_docs/kbn_code_owners.mdx index 4c5ae22f822ac..6612633d12363 100644 --- a/api_docs/kbn_code_owners.mdx +++ b/api_docs/kbn_code_owners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-owners title: "@kbn/code-owners" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-owners plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-owners'] --- import kbnCodeOwnersObj from './kbn_code_owners.devdocs.json'; diff --git a/api_docs/kbn_coloring.mdx b/api_docs/kbn_coloring.mdx index 2ee002e2829e1..8687db65f9325 100644 --- a/api_docs/kbn_coloring.mdx +++ b/api_docs/kbn_coloring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-coloring title: "@kbn/coloring" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/coloring plugin -date: 2024-12-21 +date: 2024-12-23 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 e920d1eef70cc..0a5354b007be6 100644 --- a/api_docs/kbn_config.mdx +++ b/api_docs/kbn_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config title: "@kbn/config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config plugin -date: 2024-12-21 +date: 2024-12-23 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 399fc05adfe2a..c916022f2d6c4 100644 --- a/api_docs/kbn_config_mocks.mdx +++ b/api_docs/kbn_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-mocks title: "@kbn/config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 9bf5a8181986f..a8043488b8b0b 100644 --- a/api_docs/kbn_config_schema.mdx +++ b/api_docs/kbn_config_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-schema title: "@kbn/config-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-schema plugin -date: 2024-12-21 +date: 2024-12-23 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 34324978dcf7f..d9f00055c7de8 100644 --- a/api_docs/kbn_content_management_content_editor.mdx +++ b/api_docs/kbn_content_management_content_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-editor title: "@kbn/content-management-content-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-editor plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-editor'] --- import kbnContentManagementContentEditorObj from './kbn_content_management_content_editor.devdocs.json'; diff --git a/api_docs/kbn_content_management_content_insights_public.mdx b/api_docs/kbn_content_management_content_insights_public.mdx index 5deefb8409571..42c23a23588da 100644 --- a/api_docs/kbn_content_management_content_insights_public.mdx +++ b/api_docs/kbn_content_management_content_insights_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-insights-public title: "@kbn/content-management-content-insights-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-insights-public plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-insights-public'] --- import kbnContentManagementContentInsightsPublicObj from './kbn_content_management_content_insights_public.devdocs.json'; diff --git a/api_docs/kbn_content_management_content_insights_server.mdx b/api_docs/kbn_content_management_content_insights_server.mdx index a6611db9e7ab7..8e53583612e25 100644 --- a/api_docs/kbn_content_management_content_insights_server.mdx +++ b/api_docs/kbn_content_management_content_insights_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-insights-server title: "@kbn/content-management-content-insights-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-insights-server plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-insights-server'] --- import kbnContentManagementContentInsightsServerObj from './kbn_content_management_content_insights_server.devdocs.json'; diff --git a/api_docs/kbn_content_management_favorites_common.mdx b/api_docs/kbn_content_management_favorites_common.mdx index 300acefce8e92..f21ea8faa17a6 100644 --- a/api_docs/kbn_content_management_favorites_common.mdx +++ b/api_docs/kbn_content_management_favorites_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-favorites-common title: "@kbn/content-management-favorites-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-favorites-common plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-favorites-common'] --- import kbnContentManagementFavoritesCommonObj from './kbn_content_management_favorites_common.devdocs.json'; diff --git a/api_docs/kbn_content_management_favorites_public.mdx b/api_docs/kbn_content_management_favorites_public.mdx index 1006263ca0620..406e9844c4fe9 100644 --- a/api_docs/kbn_content_management_favorites_public.mdx +++ b/api_docs/kbn_content_management_favorites_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-favorites-public title: "@kbn/content-management-favorites-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-favorites-public plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-favorites-public'] --- import kbnContentManagementFavoritesPublicObj from './kbn_content_management_favorites_public.devdocs.json'; diff --git a/api_docs/kbn_content_management_favorites_server.mdx b/api_docs/kbn_content_management_favorites_server.mdx index 020a4d47c34ea..814a73475d903 100644 --- a/api_docs/kbn_content_management_favorites_server.mdx +++ b/api_docs/kbn_content_management_favorites_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-favorites-server title: "@kbn/content-management-favorites-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-favorites-server plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-favorites-server'] --- import kbnContentManagementFavoritesServerObj from './kbn_content_management_favorites_server.devdocs.json'; diff --git a/api_docs/kbn_content_management_tabbed_table_list_view.mdx b/api_docs/kbn_content_management_tabbed_table_list_view.mdx index 22c136117608f..5348663b54b94 100644 --- a/api_docs/kbn_content_management_tabbed_table_list_view.mdx +++ b/api_docs/kbn_content_management_tabbed_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-tabbed-table-list-view title: "@kbn/content-management-tabbed-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-tabbed-table-list-view plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-tabbed-table-list-view'] --- import kbnContentManagementTabbedTableListViewObj from './kbn_content_management_tabbed_table_list_view.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view.mdx b/api_docs/kbn_content_management_table_list_view.mdx index 9bee9fd32629c..6b33222b72d95 100644 --- a/api_docs/kbn_content_management_table_list_view.mdx +++ b/api_docs/kbn_content_management_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view title: "@kbn/content-management-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view'] --- import kbnContentManagementTableListViewObj from './kbn_content_management_table_list_view.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view_common.mdx b/api_docs/kbn_content_management_table_list_view_common.mdx index d8295b30b60b3..6c9ad53711a54 100644 --- a/api_docs/kbn_content_management_table_list_view_common.mdx +++ b/api_docs/kbn_content_management_table_list_view_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-common title: "@kbn/content-management-table-list-view-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-common plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-common'] --- import kbnContentManagementTableListViewCommonObj from './kbn_content_management_table_list_view_common.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view_table.mdx b/api_docs/kbn_content_management_table_list_view_table.mdx index cb971a03c242a..7c959ed5c0daa 100644 --- a/api_docs/kbn_content_management_table_list_view_table.mdx +++ b/api_docs/kbn_content_management_table_list_view_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-table title: "@kbn/content-management-table-list-view-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-table plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-table'] --- import kbnContentManagementTableListViewTableObj from './kbn_content_management_table_list_view_table.devdocs.json'; diff --git a/api_docs/kbn_content_management_user_profiles.mdx b/api_docs/kbn_content_management_user_profiles.mdx index f803a3fba8a6a..911b38cae8b39 100644 --- a/api_docs/kbn_content_management_user_profiles.mdx +++ b/api_docs/kbn_content_management_user_profiles.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-user-profiles title: "@kbn/content-management-user-profiles" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-user-profiles plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-user-profiles'] --- import kbnContentManagementUserProfilesObj from './kbn_content_management_user_profiles.devdocs.json'; diff --git a/api_docs/kbn_content_management_utils.mdx b/api_docs/kbn_content_management_utils.mdx index 676066efe4f70..835715e318638 100644 --- a/api_docs/kbn_content_management_utils.mdx +++ b/api_docs/kbn_content_management_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-utils title: "@kbn/content-management-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-utils plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-utils'] --- import kbnContentManagementUtilsObj from './kbn_content_management_utils.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser.mdx b/api_docs/kbn_core_analytics_browser.mdx index 8fc76d78947c1..73faa684de805 100644 --- a/api_docs/kbn_core_analytics_browser.mdx +++ b/api_docs/kbn_core_analytics_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser title: "@kbn/core-analytics-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser plugin -date: 2024-12-21 +date: 2024-12-23 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 7dc99ae4c235d..89781356e86e3 100644 --- a/api_docs/kbn_core_analytics_browser_internal.mdx +++ b/api_docs/kbn_core_analytics_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-internal title: "@kbn/core-analytics-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-internal plugin -date: 2024-12-21 +date: 2024-12-23 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 cc61e457bf6fb..8e8e36e97643f 100644 --- a/api_docs/kbn_core_analytics_browser_mocks.mdx +++ b/api_docs/kbn_core_analytics_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-mocks title: "@kbn/core-analytics-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 f303cc15beb13..e849aa44b971d 100644 --- a/api_docs/kbn_core_analytics_server.mdx +++ b/api_docs/kbn_core_analytics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server title: "@kbn/core-analytics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server plugin -date: 2024-12-21 +date: 2024-12-23 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 29b06f2d950ac..e847a624bc14c 100644 --- a/api_docs/kbn_core_analytics_server_internal.mdx +++ b/api_docs/kbn_core_analytics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-internal title: "@kbn/core-analytics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-internal plugin -date: 2024-12-21 +date: 2024-12-23 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 420d2a77b08e7..8e65d32a71af8 100644 --- a/api_docs/kbn_core_analytics_server_mocks.mdx +++ b/api_docs/kbn_core_analytics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-mocks title: "@kbn/core-analytics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 625aaec8b9ff2..bebcd9b73a346 100644 --- a/api_docs/kbn_core_application_browser.mdx +++ b/api_docs/kbn_core_application_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser title: "@kbn/core-application-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser plugin -date: 2024-12-21 +date: 2024-12-23 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 0ee151e985f09..4b7084e0a5632 100644 --- a/api_docs/kbn_core_application_browser_internal.mdx +++ b/api_docs/kbn_core_application_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-internal title: "@kbn/core-application-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-internal plugin -date: 2024-12-21 +date: 2024-12-23 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 065b74351bccc..5409dc288b361 100644 --- a/api_docs/kbn_core_application_browser_mocks.mdx +++ b/api_docs/kbn_core_application_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-mocks title: "@kbn/core-application-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 10d17a48673fd..0bd7be6d65098 100644 --- a/api_docs/kbn_core_application_common.mdx +++ b/api_docs/kbn_core_application_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-common title: "@kbn/core-application-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-common plugin -date: 2024-12-21 +date: 2024-12-23 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 54c4dd1272735..147fe452118bb 100644 --- a/api_docs/kbn_core_apps_browser_internal.mdx +++ b/api_docs/kbn_core_apps_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-internal title: "@kbn/core-apps-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-internal plugin -date: 2024-12-21 +date: 2024-12-23 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 361f7817ae604..7ab9a763223af 100644 --- a/api_docs/kbn_core_apps_browser_mocks.mdx +++ b/api_docs/kbn_core_apps_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-mocks title: "@kbn/core-apps-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 5e0226c95f2ec..26f54ad6b8d1f 100644 --- a/api_docs/kbn_core_apps_server_internal.mdx +++ b/api_docs/kbn_core_apps_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-server-internal title: "@kbn/core-apps-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-server-internal plugin -date: 2024-12-21 +date: 2024-12-23 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 d61a3c8ec9dc5..23cc5a1b9217a 100644 --- a/api_docs/kbn_core_base_browser_mocks.mdx +++ b/api_docs/kbn_core_base_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-browser-mocks title: "@kbn/core-base-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-browser-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 6c3925274843a..81ed078d88de7 100644 --- a/api_docs/kbn_core_base_common.mdx +++ b/api_docs/kbn_core_base_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-common title: "@kbn/core-base-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-common plugin -date: 2024-12-21 +date: 2024-12-23 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 6e699db84337a..487c3974ff384 100644 --- a/api_docs/kbn_core_base_server_internal.mdx +++ b/api_docs/kbn_core_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-internal title: "@kbn/core-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-internal plugin -date: 2024-12-21 +date: 2024-12-23 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 428f6a0eec777..cf0a739830128 100644 --- a/api_docs/kbn_core_base_server_mocks.mdx +++ b/api_docs/kbn_core_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-mocks title: "@kbn/core-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 dc426342a0efd..6615294e0b10c 100644 --- a/api_docs/kbn_core_capabilities_browser_mocks.mdx +++ b/api_docs/kbn_core_capabilities_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-browser-mocks title: "@kbn/core-capabilities-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-browser-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 5d9f2d55f90bb..401b4538a70ac 100644 --- a/api_docs/kbn_core_capabilities_common.mdx +++ b/api_docs/kbn_core_capabilities_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-common title: "@kbn/core-capabilities-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-common plugin -date: 2024-12-21 +date: 2024-12-23 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 1e12eac392f45..7192e6ccd8c32 100644 --- a/api_docs/kbn_core_capabilities_server.mdx +++ b/api_docs/kbn_core_capabilities_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server title: "@kbn/core-capabilities-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server plugin -date: 2024-12-21 +date: 2024-12-23 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 434c181ccefed..be2dbf91889cc 100644 --- a/api_docs/kbn_core_capabilities_server_mocks.mdx +++ b/api_docs/kbn_core_capabilities_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server-mocks title: "@kbn/core-capabilities-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 09dd009b34e6e..add7843a1aed1 100644 --- a/api_docs/kbn_core_chrome_browser.mdx +++ b/api_docs/kbn_core_chrome_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser title: "@kbn/core-chrome-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser plugin -date: 2024-12-21 +date: 2024-12-23 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 1360648aa6a65..a2c8323765b59 100644 --- a/api_docs/kbn_core_chrome_browser_mocks.mdx +++ b/api_docs/kbn_core_chrome_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser-mocks title: "@kbn/core-chrome-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 927f74e095b5d..8dc75289aa61a 100644 --- a/api_docs/kbn_core_config_server_internal.mdx +++ b/api_docs/kbn_core_config_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-config-server-internal title: "@kbn/core-config-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-config-server-internal plugin -date: 2024-12-21 +date: 2024-12-23 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 278fcaf69b786..c603823e318fc 100644 --- a/api_docs/kbn_core_custom_branding_browser.mdx +++ b/api_docs/kbn_core_custom_branding_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser title: "@kbn/core-custom-branding-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser plugin -date: 2024-12-21 +date: 2024-12-23 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 30531b4b85a00..99ee2a38aef9f 100644 --- a/api_docs/kbn_core_custom_branding_browser_internal.mdx +++ b/api_docs/kbn_core_custom_branding_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-internal title: "@kbn/core-custom-branding-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-internal plugin -date: 2024-12-21 +date: 2024-12-23 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 39c3f7cd666ed..494ba7f1332b9 100644 --- a/api_docs/kbn_core_custom_branding_browser_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-mocks title: "@kbn/core-custom-branding-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 bfed72a9cf637..f86b14789b464 100644 --- a/api_docs/kbn_core_custom_branding_common.mdx +++ b/api_docs/kbn_core_custom_branding_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-common title: "@kbn/core-custom-branding-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-common plugin -date: 2024-12-21 +date: 2024-12-23 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 f919c6e19748d..7c3b2a7728530 100644 --- a/api_docs/kbn_core_custom_branding_server.mdx +++ b/api_docs/kbn_core_custom_branding_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server title: "@kbn/core-custom-branding-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server plugin -date: 2024-12-21 +date: 2024-12-23 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 a834c5ab004ed..c0e2816b506e2 100644 --- a/api_docs/kbn_core_custom_branding_server_internal.mdx +++ b/api_docs/kbn_core_custom_branding_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-internal title: "@kbn/core-custom-branding-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-internal plugin -date: 2024-12-21 +date: 2024-12-23 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 e70010588d246..595af1123d678 100644 --- a/api_docs/kbn_core_custom_branding_server_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-mocks title: "@kbn/core-custom-branding-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 99de80cccad29..2aec5d9315b5e 100644 --- a/api_docs/kbn_core_deprecations_browser.mdx +++ b/api_docs/kbn_core_deprecations_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser title: "@kbn/core-deprecations-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser plugin -date: 2024-12-21 +date: 2024-12-23 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 8d9aa3ef041b2..b6197812680da 100644 --- a/api_docs/kbn_core_deprecations_browser_internal.mdx +++ b/api_docs/kbn_core_deprecations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-internal title: "@kbn/core-deprecations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-internal plugin -date: 2024-12-21 +date: 2024-12-23 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 2134c48b829ef..55e21dd7861f2 100644 --- a/api_docs/kbn_core_deprecations_browser_mocks.mdx +++ b/api_docs/kbn_core_deprecations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-mocks title: "@kbn/core-deprecations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 cd309a5028f7e..85f1875db85cb 100644 --- a/api_docs/kbn_core_deprecations_common.mdx +++ b/api_docs/kbn_core_deprecations_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-common title: "@kbn/core-deprecations-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-common plugin -date: 2024-12-21 +date: 2024-12-23 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 597d858641bc0..c1abed05d6d24 100644 --- a/api_docs/kbn_core_deprecations_server.mdx +++ b/api_docs/kbn_core_deprecations_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server title: "@kbn/core-deprecations-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server plugin -date: 2024-12-21 +date: 2024-12-23 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 a1b142c1adeef..d10a8a12ba97e 100644 --- a/api_docs/kbn_core_deprecations_server_internal.mdx +++ b/api_docs/kbn_core_deprecations_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-internal title: "@kbn/core-deprecations-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-internal plugin -date: 2024-12-21 +date: 2024-12-23 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 7efda4ea0d938..19a3c30fef06c 100644 --- a/api_docs/kbn_core_deprecations_server_mocks.mdx +++ b/api_docs/kbn_core_deprecations_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-mocks title: "@kbn/core-deprecations-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 c442e75d5a9f7..2f82ccda02459 100644 --- a/api_docs/kbn_core_doc_links_browser.mdx +++ b/api_docs/kbn_core_doc_links_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser title: "@kbn/core-doc-links-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser plugin -date: 2024-12-21 +date: 2024-12-23 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 82754eab8a5a0..015ca2e919ebf 100644 --- a/api_docs/kbn_core_doc_links_browser_mocks.mdx +++ b/api_docs/kbn_core_doc_links_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser-mocks title: "@kbn/core-doc-links-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 d62d2522dabb2..71dbdfc00948b 100644 --- a/api_docs/kbn_core_doc_links_server.mdx +++ b/api_docs/kbn_core_doc_links_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server title: "@kbn/core-doc-links-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server plugin -date: 2024-12-21 +date: 2024-12-23 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 d34dba687bf39..d9733e0ecd426 100644 --- a/api_docs/kbn_core_doc_links_server_mocks.mdx +++ b/api_docs/kbn_core_doc_links_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server-mocks title: "@kbn/core-doc-links-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 36d48610a563b..cb39dfad9abeb 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-internal title: "@kbn/core-elasticsearch-client-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-internal plugin -date: 2024-12-21 +date: 2024-12-23 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 c1e1eb7dee40f..7165a2beb4bda 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-mocks title: "@kbn/core-elasticsearch-client-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 e086f3c90c4ed..11485e8f5b5c4 100644 --- a/api_docs/kbn_core_elasticsearch_server.mdx +++ b/api_docs/kbn_core_elasticsearch_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server title: "@kbn/core-elasticsearch-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server plugin -date: 2024-12-21 +date: 2024-12-23 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 ec73128e3d9a9..7d7a697d67e7c 100644 --- a/api_docs/kbn_core_elasticsearch_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-internal title: "@kbn/core-elasticsearch-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-internal plugin -date: 2024-12-21 +date: 2024-12-23 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 a1d3cd346d46d..6893550c71c65 100644 --- a/api_docs/kbn_core_elasticsearch_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-mocks title: "@kbn/core-elasticsearch-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 7f8b035254bf1..09498dd3e8c54 100644 --- a/api_docs/kbn_core_environment_server_internal.mdx +++ b/api_docs/kbn_core_environment_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-internal title: "@kbn/core-environment-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-internal plugin -date: 2024-12-21 +date: 2024-12-23 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 a592f03fbb330..269d3e4300db7 100644 --- a/api_docs/kbn_core_environment_server_mocks.mdx +++ b/api_docs/kbn_core_environment_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-mocks title: "@kbn/core-environment-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 be003b6dde3f9..15f5dc515166a 100644 --- a/api_docs/kbn_core_execution_context_browser.mdx +++ b/api_docs/kbn_core_execution_context_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser title: "@kbn/core-execution-context-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser plugin -date: 2024-12-21 +date: 2024-12-23 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 6ad18f55515f3..f87b1af55f464 100644 --- a/api_docs/kbn_core_execution_context_browser_internal.mdx +++ b/api_docs/kbn_core_execution_context_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-internal title: "@kbn/core-execution-context-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-internal plugin -date: 2024-12-21 +date: 2024-12-23 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 b4e23fcf7060b..34ce25dc47160 100644 --- a/api_docs/kbn_core_execution_context_browser_mocks.mdx +++ b/api_docs/kbn_core_execution_context_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-mocks title: "@kbn/core-execution-context-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 44e542fe129ec..90b99b614f06f 100644 --- a/api_docs/kbn_core_execution_context_common.mdx +++ b/api_docs/kbn_core_execution_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-common title: "@kbn/core-execution-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-common plugin -date: 2024-12-21 +date: 2024-12-23 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 717e67543d58f..59311dea3be93 100644 --- a/api_docs/kbn_core_execution_context_server.mdx +++ b/api_docs/kbn_core_execution_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server title: "@kbn/core-execution-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server plugin -date: 2024-12-21 +date: 2024-12-23 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 a03e733a6ee8a..a08178ee21225 100644 --- a/api_docs/kbn_core_execution_context_server_internal.mdx +++ b/api_docs/kbn_core_execution_context_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-internal title: "@kbn/core-execution-context-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-internal plugin -date: 2024-12-21 +date: 2024-12-23 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 2fe181c9fc44e..0fd07f9f2e9cb 100644 --- a/api_docs/kbn_core_execution_context_server_mocks.mdx +++ b/api_docs/kbn_core_execution_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-mocks title: "@kbn/core-execution-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 85939ebf080cc..abfb46358e4ca 100644 --- a/api_docs/kbn_core_fatal_errors_browser.mdx +++ b/api_docs/kbn_core_fatal_errors_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser title: "@kbn/core-fatal-errors-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser plugin -date: 2024-12-21 +date: 2024-12-23 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 48bb3e94a6658..a75f7e1e6cafe 100644 --- a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx +++ b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser-mocks title: "@kbn/core-fatal-errors-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser-mocks plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-fatal-errors-browser-mocks'] --- import kbnCoreFatalErrorsBrowserMocksObj from './kbn_core_fatal_errors_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_browser.mdx b/api_docs/kbn_core_feature_flags_browser.mdx index 7fa3366fde3a0..d2be91888cd5e 100644 --- a/api_docs/kbn_core_feature_flags_browser.mdx +++ b/api_docs/kbn_core_feature_flags_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-browser title: "@kbn/core-feature-flags-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-browser plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-browser'] --- import kbnCoreFeatureFlagsBrowserObj from './kbn_core_feature_flags_browser.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_browser_internal.mdx b/api_docs/kbn_core_feature_flags_browser_internal.mdx index 25dd245097435..971402bbcc6d3 100644 --- a/api_docs/kbn_core_feature_flags_browser_internal.mdx +++ b/api_docs/kbn_core_feature_flags_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-browser-internal title: "@kbn/core-feature-flags-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-browser-internal plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-browser-internal'] --- import kbnCoreFeatureFlagsBrowserInternalObj from './kbn_core_feature_flags_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_browser_mocks.mdx b/api_docs/kbn_core_feature_flags_browser_mocks.mdx index f83213a16c2db..72a5438c7b888 100644 --- a/api_docs/kbn_core_feature_flags_browser_mocks.mdx +++ b/api_docs/kbn_core_feature_flags_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-browser-mocks title: "@kbn/core-feature-flags-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-browser-mocks plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-browser-mocks'] --- import kbnCoreFeatureFlagsBrowserMocksObj from './kbn_core_feature_flags_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_server.mdx b/api_docs/kbn_core_feature_flags_server.mdx index 5d7165def3647..aa34f3ecc99b7 100644 --- a/api_docs/kbn_core_feature_flags_server.mdx +++ b/api_docs/kbn_core_feature_flags_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-server title: "@kbn/core-feature-flags-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-server plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-server'] --- import kbnCoreFeatureFlagsServerObj from './kbn_core_feature_flags_server.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_server_internal.mdx b/api_docs/kbn_core_feature_flags_server_internal.mdx index 95e23232de300..6c4316994b346 100644 --- a/api_docs/kbn_core_feature_flags_server_internal.mdx +++ b/api_docs/kbn_core_feature_flags_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-server-internal title: "@kbn/core-feature-flags-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-server-internal plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-server-internal'] --- import kbnCoreFeatureFlagsServerInternalObj from './kbn_core_feature_flags_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_server_mocks.mdx b/api_docs/kbn_core_feature_flags_server_mocks.mdx index 9d0fe7337ba19..350d76fcbaea7 100644 --- a/api_docs/kbn_core_feature_flags_server_mocks.mdx +++ b/api_docs/kbn_core_feature_flags_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-server-mocks title: "@kbn/core-feature-flags-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-server-mocks plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-server-mocks'] --- import kbnCoreFeatureFlagsServerMocksObj from './kbn_core_feature_flags_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_browser.mdx b/api_docs/kbn_core_http_browser.mdx index bd39f03d1778e..9957c33b0f718 100644 --- a/api_docs/kbn_core_http_browser.mdx +++ b/api_docs/kbn_core_http_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser title: "@kbn/core-http-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser plugin -date: 2024-12-21 +date: 2024-12-23 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 1783cf3a78c5b..3142f080ee643 100644 --- a/api_docs/kbn_core_http_browser_internal.mdx +++ b/api_docs/kbn_core_http_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-internal title: "@kbn/core-http-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-internal plugin -date: 2024-12-21 +date: 2024-12-23 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 d59456e45a92d..2eb2d3efac8ba 100644 --- a/api_docs/kbn_core_http_browser_mocks.mdx +++ b/api_docs/kbn_core_http_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-mocks title: "@kbn/core-http-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 ba61cef0066a8..827c976c8c6f1 100644 --- a/api_docs/kbn_core_http_common.mdx +++ b/api_docs/kbn_core_http_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-common title: "@kbn/core-http-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-common plugin -date: 2024-12-21 +date: 2024-12-23 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 db76e849a0a58..d3e7deb409132 100644 --- a/api_docs/kbn_core_http_context_server_mocks.mdx +++ b/api_docs/kbn_core_http_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-context-server-mocks title: "@kbn/core-http-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-context-server-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 e2303389cfd78..2072e45cdad9a 100644 --- a/api_docs/kbn_core_http_request_handler_context_server.mdx +++ b/api_docs/kbn_core_http_request_handler_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-request-handler-context-server title: "@kbn/core-http-request-handler-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-request-handler-context-server plugin -date: 2024-12-21 +date: 2024-12-23 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 e174f1db4e69a..84fa548b0c12e 100644 --- a/api_docs/kbn_core_http_resources_server.mdx +++ b/api_docs/kbn_core_http_resources_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server title: "@kbn/core-http-resources-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server plugin -date: 2024-12-21 +date: 2024-12-23 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 37d0274f0f534..22aa04e2d68d5 100644 --- a/api_docs/kbn_core_http_resources_server_internal.mdx +++ b/api_docs/kbn_core_http_resources_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-internal title: "@kbn/core-http-resources-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-internal plugin -date: 2024-12-21 +date: 2024-12-23 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 eff526fab4234..63888c00a7789 100644 --- a/api_docs/kbn_core_http_resources_server_mocks.mdx +++ b/api_docs/kbn_core_http_resources_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-mocks title: "@kbn/core-http-resources-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 413fa0163ab61..7375a0a4e0269 100644 --- a/api_docs/kbn_core_http_router_server_internal.mdx +++ b/api_docs/kbn_core_http_router_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-internal title: "@kbn/core-http-router-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-internal plugin -date: 2024-12-21 +date: 2024-12-23 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 4edb5ec9566e6..0054c6722e536 100644 --- a/api_docs/kbn_core_http_router_server_mocks.mdx +++ b/api_docs/kbn_core_http_router_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-mocks title: "@kbn/core-http-router-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 bab57a7c7c051..dcc91f7cdea17 100644 --- a/api_docs/kbn_core_http_server.mdx +++ b/api_docs/kbn_core_http_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server title: "@kbn/core-http-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server plugin -date: 2024-12-21 +date: 2024-12-23 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 ddff08358b196..1c17863c96f60 100644 --- a/api_docs/kbn_core_http_server_internal.mdx +++ b/api_docs/kbn_core_http_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-internal title: "@kbn/core-http-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-internal plugin -date: 2024-12-21 +date: 2024-12-23 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 bb17a2393bde0..df65bf8782fd4 100644 --- a/api_docs/kbn_core_http_server_mocks.mdx +++ b/api_docs/kbn_core_http_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-mocks title: "@kbn/core-http-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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_http_server_utils.mdx b/api_docs/kbn_core_http_server_utils.mdx index fbd6736874ddf..b82fc751845a5 100644 --- a/api_docs/kbn_core_http_server_utils.mdx +++ b/api_docs/kbn_core_http_server_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-utils title: "@kbn/core-http-server-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-utils plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-utils'] --- import kbnCoreHttpServerUtilsObj from './kbn_core_http_server_utils.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_browser.mdx b/api_docs/kbn_core_i18n_browser.mdx index 682d8bb8ee04c..2b0437eb832b0 100644 --- a/api_docs/kbn_core_i18n_browser.mdx +++ b/api_docs/kbn_core_i18n_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser title: "@kbn/core-i18n-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser plugin -date: 2024-12-21 +date: 2024-12-23 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 5fecd79b9b513..d0bb1c96b6a9a 100644 --- a/api_docs/kbn_core_i18n_browser_mocks.mdx +++ b/api_docs/kbn_core_i18n_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser-mocks title: "@kbn/core-i18n-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 d48d8852c65d1..015bce3778189 100644 --- a/api_docs/kbn_core_i18n_server.mdx +++ b/api_docs/kbn_core_i18n_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server title: "@kbn/core-i18n-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server plugin -date: 2024-12-21 +date: 2024-12-23 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 d3d686ef189bd..20f862283038e 100644 --- a/api_docs/kbn_core_i18n_server_internal.mdx +++ b/api_docs/kbn_core_i18n_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-internal title: "@kbn/core-i18n-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-internal plugin -date: 2024-12-21 +date: 2024-12-23 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 5fb750865168d..8b82f6be918c2 100644 --- a/api_docs/kbn_core_i18n_server_mocks.mdx +++ b/api_docs/kbn_core_i18n_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-mocks title: "@kbn/core-i18n-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 4ba0c52e96951..e0fcd59475ffc 100644 --- a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx +++ b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-injected-metadata-browser-mocks title: "@kbn/core-injected-metadata-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-injected-metadata-browser-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 c3d0046f71799..fe3f7f976e045 100644 --- a/api_docs/kbn_core_integrations_browser_internal.mdx +++ b/api_docs/kbn_core_integrations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-internal title: "@kbn/core-integrations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-internal plugin -date: 2024-12-21 +date: 2024-12-23 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 e3316f6ef2434..57ddd1fc8ecf4 100644 --- a/api_docs/kbn_core_integrations_browser_mocks.mdx +++ b/api_docs/kbn_core_integrations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-mocks title: "@kbn/core-integrations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 8e2bab1819dd9..6740beaa0ef62 100644 --- a/api_docs/kbn_core_lifecycle_browser.mdx +++ b/api_docs/kbn_core_lifecycle_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser title: "@kbn/core-lifecycle-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser plugin -date: 2024-12-21 +date: 2024-12-23 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 b5d6b9ddc4445..ace94fb125b60 100644 --- a/api_docs/kbn_core_lifecycle_browser_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser-mocks title: "@kbn/core-lifecycle-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 363d218a8b88c..57485e32b81b5 100644 --- a/api_docs/kbn_core_lifecycle_server.mdx +++ b/api_docs/kbn_core_lifecycle_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server title: "@kbn/core-lifecycle-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server plugin -date: 2024-12-21 +date: 2024-12-23 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 a3797063e525d..8afaa7a9ae715 100644 --- a/api_docs/kbn_core_lifecycle_server_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server-mocks title: "@kbn/core-lifecycle-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 3b9373514af0c..8041e6f1496ea 100644 --- a/api_docs/kbn_core_logging_browser_mocks.mdx +++ b/api_docs/kbn_core_logging_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-browser-mocks title: "@kbn/core-logging-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-browser-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 125986bd09c61..95590bfc47e59 100644 --- a/api_docs/kbn_core_logging_common_internal.mdx +++ b/api_docs/kbn_core_logging_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-common-internal title: "@kbn/core-logging-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-common-internal plugin -date: 2024-12-21 +date: 2024-12-23 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 e55fa4575a43a..d4fdd1cb2aaf9 100644 --- a/api_docs/kbn_core_logging_server.mdx +++ b/api_docs/kbn_core_logging_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server title: "@kbn/core-logging-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server plugin -date: 2024-12-21 +date: 2024-12-23 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 901236b9ed886..d02a913fb1018 100644 --- a/api_docs/kbn_core_logging_server_internal.mdx +++ b/api_docs/kbn_core_logging_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-internal title: "@kbn/core-logging-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-internal plugin -date: 2024-12-21 +date: 2024-12-23 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 82c319c5384d9..a5c6ab8d96375 100644 --- a/api_docs/kbn_core_logging_server_mocks.mdx +++ b/api_docs/kbn_core_logging_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-mocks title: "@kbn/core-logging-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 6c204fe96948f..5a9e9ce4472a1 100644 --- a/api_docs/kbn_core_metrics_collectors_server_internal.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-internal title: "@kbn/core-metrics-collectors-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-internal plugin -date: 2024-12-21 +date: 2024-12-23 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 95a66e7ef15e6..f6775be5746fe 100644 --- a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-mocks title: "@kbn/core-metrics-collectors-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 9d0cd840eb18d..de9565021cc14 100644 --- a/api_docs/kbn_core_metrics_server.mdx +++ b/api_docs/kbn_core_metrics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server title: "@kbn/core-metrics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server plugin -date: 2024-12-21 +date: 2024-12-23 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 3a0ec563de00e..0ed0eb53e53e2 100644 --- a/api_docs/kbn_core_metrics_server_internal.mdx +++ b/api_docs/kbn_core_metrics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-internal title: "@kbn/core-metrics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-internal plugin -date: 2024-12-21 +date: 2024-12-23 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 795ddb3a85791..9e9235e9bf477 100644 --- a/api_docs/kbn_core_metrics_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-mocks title: "@kbn/core-metrics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 727ef5171dd2a..41dcbf5ac38b8 100644 --- a/api_docs/kbn_core_mount_utils_browser.mdx +++ b/api_docs/kbn_core_mount_utils_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-mount-utils-browser title: "@kbn/core-mount-utils-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-mount-utils-browser plugin -date: 2024-12-21 +date: 2024-12-23 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 203c087c8a101..37cca50f6859b 100644 --- a/api_docs/kbn_core_node_server.mdx +++ b/api_docs/kbn_core_node_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server title: "@kbn/core-node-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server plugin -date: 2024-12-21 +date: 2024-12-23 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 150ae0c9a4a77..64512349afdd5 100644 --- a/api_docs/kbn_core_node_server_internal.mdx +++ b/api_docs/kbn_core_node_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-internal title: "@kbn/core-node-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-internal plugin -date: 2024-12-21 +date: 2024-12-23 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 00ce929e60596..036ee791867d3 100644 --- a/api_docs/kbn_core_node_server_mocks.mdx +++ b/api_docs/kbn_core_node_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-mocks title: "@kbn/core-node-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 80351634642fc..641e848dad37a 100644 --- a/api_docs/kbn_core_notifications_browser.mdx +++ b/api_docs/kbn_core_notifications_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser title: "@kbn/core-notifications-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser plugin -date: 2024-12-21 +date: 2024-12-23 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 242af33e83dc6..d020a4cd4573a 100644 --- a/api_docs/kbn_core_notifications_browser_internal.mdx +++ b/api_docs/kbn_core_notifications_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-internal title: "@kbn/core-notifications-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-internal plugin -date: 2024-12-21 +date: 2024-12-23 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 0d8cce446cf95..b66b894cfc13c 100644 --- a/api_docs/kbn_core_notifications_browser_mocks.mdx +++ b/api_docs/kbn_core_notifications_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-mocks title: "@kbn/core-notifications-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 742605d913893..6ecafb4fd898e 100644 --- a/api_docs/kbn_core_overlays_browser.mdx +++ b/api_docs/kbn_core_overlays_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser title: "@kbn/core-overlays-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser plugin -date: 2024-12-21 +date: 2024-12-23 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 3ca4f5ba60b7c..54db9a17e2f08 100644 --- a/api_docs/kbn_core_overlays_browser_internal.mdx +++ b/api_docs/kbn_core_overlays_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-internal title: "@kbn/core-overlays-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-internal plugin -date: 2024-12-21 +date: 2024-12-23 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 cd9da1e6251fc..f9a357f378d56 100644 --- a/api_docs/kbn_core_overlays_browser_mocks.mdx +++ b/api_docs/kbn_core_overlays_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-mocks title: "@kbn/core-overlays-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 eb0cb979c59be..32e7a49baf7b2 100644 --- a/api_docs/kbn_core_plugins_browser.mdx +++ b/api_docs/kbn_core_plugins_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser title: "@kbn/core-plugins-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser plugin -date: 2024-12-21 +date: 2024-12-23 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 eaf18e2a3f1c4..d7db67680ed41 100644 --- a/api_docs/kbn_core_plugins_browser_mocks.mdx +++ b/api_docs/kbn_core_plugins_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser-mocks title: "@kbn/core-plugins-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser-mocks plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser-mocks'] --- import kbnCorePluginsBrowserMocksObj from './kbn_core_plugins_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_contracts_browser.mdx b/api_docs/kbn_core_plugins_contracts_browser.mdx index 49aebf4a11a6f..cb8f6b8b4c8b8 100644 --- a/api_docs/kbn_core_plugins_contracts_browser.mdx +++ b/api_docs/kbn_core_plugins_contracts_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-contracts-browser title: "@kbn/core-plugins-contracts-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-contracts-browser plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-contracts-browser'] --- import kbnCorePluginsContractsBrowserObj from './kbn_core_plugins_contracts_browser.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_contracts_server.mdx b/api_docs/kbn_core_plugins_contracts_server.mdx index 3a30b36814c4d..8288605e5072d 100644 --- a/api_docs/kbn_core_plugins_contracts_server.mdx +++ b/api_docs/kbn_core_plugins_contracts_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-contracts-server title: "@kbn/core-plugins-contracts-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-contracts-server plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-contracts-server'] --- import kbnCorePluginsContractsServerObj from './kbn_core_plugins_contracts_server.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_server.mdx b/api_docs/kbn_core_plugins_server.mdx index 249a0e394d63e..23998d24a5898 100644 --- a/api_docs/kbn_core_plugins_server.mdx +++ b/api_docs/kbn_core_plugins_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server title: "@kbn/core-plugins-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server plugin -date: 2024-12-21 +date: 2024-12-23 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 1bd71845531f6..c09ec811514f3 100644 --- a/api_docs/kbn_core_plugins_server_mocks.mdx +++ b/api_docs/kbn_core_plugins_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server-mocks title: "@kbn/core-plugins-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 7a8528ff1b8b9..0465f90ba6ce1 100644 --- a/api_docs/kbn_core_preboot_server.mdx +++ b/api_docs/kbn_core_preboot_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server title: "@kbn/core-preboot-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server plugin -date: 2024-12-21 +date: 2024-12-23 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 7ef9d4b6ca20d..b5dbd080c5998 100644 --- a/api_docs/kbn_core_preboot_server_mocks.mdx +++ b/api_docs/kbn_core_preboot_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server-mocks title: "@kbn/core-preboot-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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.mdx b/api_docs/kbn_core_rendering_browser.mdx index 8fdbf2cb11dc1..73fefb4071bcf 100644 --- a/api_docs/kbn_core_rendering_browser.mdx +++ b/api_docs/kbn_core_rendering_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-browser title: "@kbn/core-rendering-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-browser plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-browser'] --- import kbnCoreRenderingBrowserObj from './kbn_core_rendering_browser.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_browser_mocks.mdx b/api_docs/kbn_core_rendering_browser_mocks.mdx index b9b989602eeef..52a312d250ee1 100644 --- a/api_docs/kbn_core_rendering_browser_mocks.mdx +++ b/api_docs/kbn_core_rendering_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-browser-mocks title: "@kbn/core-rendering-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-browser-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 b32413585786f..daaaf5359e5d8 100644 --- a/api_docs/kbn_core_rendering_server_internal.mdx +++ b/api_docs/kbn_core_rendering_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-internal title: "@kbn/core-rendering-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-internal plugin -date: 2024-12-21 +date: 2024-12-23 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 54f81f21e23b7..d939f752f1546 100644 --- a/api_docs/kbn_core_rendering_server_mocks.mdx +++ b/api_docs/kbn_core_rendering_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-mocks title: "@kbn/core-rendering-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 89161e59d2948..fa47206e84944 100644 --- a/api_docs/kbn_core_root_server_internal.mdx +++ b/api_docs/kbn_core_root_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-root-server-internal title: "@kbn/core-root-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-root-server-internal plugin -date: 2024-12-21 +date: 2024-12-23 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 263b717570586..ca5c815566b52 100644 --- a/api_docs/kbn_core_saved_objects_api_browser.mdx +++ b/api_docs/kbn_core_saved_objects_api_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-browser title: "@kbn/core-saved-objects-api-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-browser plugin -date: 2024-12-21 +date: 2024-12-23 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 130f551c93b18..148e2c3faec7d 100644 --- a/api_docs/kbn_core_saved_objects_api_server.mdx +++ b/api_docs/kbn_core_saved_objects_api_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server title: "@kbn/core-saved-objects-api-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server'] --- import kbnCoreSavedObjectsApiServerObj from './kbn_core_saved_objects_api_server.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx index 9b2e61a74873a..1aec4418a78ff 100644 --- a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-mocks title: "@kbn/core-saved-objects-api-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 c278b023d5822..e264891749bb6 100644 --- a/api_docs/kbn_core_saved_objects_base_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-internal title: "@kbn/core-saved-objects-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-internal plugin -date: 2024-12-21 +date: 2024-12-23 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 dfa99b79afc02..0dc55da42ef78 100644 --- a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-mocks title: "@kbn/core-saved-objects-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 8ea0a9d5f4f54..4a1e045f338d6 100644 --- a/api_docs/kbn_core_saved_objects_browser.mdx +++ b/api_docs/kbn_core_saved_objects_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser title: "@kbn/core-saved-objects-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser plugin -date: 2024-12-21 +date: 2024-12-23 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 d8b6725ea561c..084c86a9f4c9b 100644 --- a/api_docs/kbn_core_saved_objects_browser_internal.mdx +++ b/api_docs/kbn_core_saved_objects_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-internal title: "@kbn/core-saved-objects-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-internal plugin -date: 2024-12-21 +date: 2024-12-23 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 8e23bdd7e9950..fe5aa55473580 100644 --- a/api_docs/kbn_core_saved_objects_browser_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-mocks title: "@kbn/core-saved-objects-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 c4c75004be901..6996ee2da1571 100644 --- a/api_docs/kbn_core_saved_objects_common.mdx +++ b/api_docs/kbn_core_saved_objects_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-common title: "@kbn/core-saved-objects-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-common plugin -date: 2024-12-21 +date: 2024-12-23 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 8aca4d9e21da7..deeb095010760 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-internal title: "@kbn/core-saved-objects-import-export-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-internal plugin -date: 2024-12-21 +date: 2024-12-23 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 0952c4e22b27c..012d133fd67da 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-mocks title: "@kbn/core-saved-objects-import-export-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 32bbe896e00f1..ebe5adb48af83 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-internal title: "@kbn/core-saved-objects-migration-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-internal plugin -date: 2024-12-21 +date: 2024-12-23 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 01ff3c9fb1906..13651b06d8f09 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-mocks title: "@kbn/core-saved-objects-migration-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 22b1b5b816b17..816de3324a79f 100644 --- a/api_docs/kbn_core_saved_objects_server.mdx +++ b/api_docs/kbn_core_saved_objects_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server title: "@kbn/core-saved-objects-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server plugin -date: 2024-12-21 +date: 2024-12-23 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 96a5e7b02cab2..67942ac0db381 100644 --- a/api_docs/kbn_core_saved_objects_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-internal title: "@kbn/core-saved-objects-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-internal plugin -date: 2024-12-21 +date: 2024-12-23 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 4d1cf0c2cb698..1ff49aa6c3a5e 100644 --- a/api_docs/kbn_core_saved_objects_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-mocks title: "@kbn/core-saved-objects-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 f31bb825c23e7..8cb3362ad7a96 100644 --- a/api_docs/kbn_core_saved_objects_utils_server.mdx +++ b/api_docs/kbn_core_saved_objects_utils_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-utils-server title: "@kbn/core-saved-objects-utils-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-utils-server plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-utils-server'] --- import kbnCoreSavedObjectsUtilsServerObj from './kbn_core_saved_objects_utils_server.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser.mdx b/api_docs/kbn_core_security_browser.mdx index c84f65e560572..c74116b99423b 100644 --- a/api_docs/kbn_core_security_browser.mdx +++ b/api_docs/kbn_core_security_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser title: "@kbn/core-security-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser'] --- import kbnCoreSecurityBrowserObj from './kbn_core_security_browser.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser_internal.mdx b/api_docs/kbn_core_security_browser_internal.mdx index c0e228e2ca6bc..02b3d76e31b74 100644 --- a/api_docs/kbn_core_security_browser_internal.mdx +++ b/api_docs/kbn_core_security_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser-internal title: "@kbn/core-security-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser-internal plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser-internal'] --- import kbnCoreSecurityBrowserInternalObj from './kbn_core_security_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser_mocks.mdx b/api_docs/kbn_core_security_browser_mocks.mdx index 8abba8b3c2ee4..e4a7e57b0d2a5 100644 --- a/api_docs/kbn_core_security_browser_mocks.mdx +++ b/api_docs/kbn_core_security_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser-mocks title: "@kbn/core-security-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser-mocks plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser-mocks'] --- import kbnCoreSecurityBrowserMocksObj from './kbn_core_security_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_security_common.mdx b/api_docs/kbn_core_security_common.mdx index 9048483f20fb7..7f756333d887b 100644 --- a/api_docs/kbn_core_security_common.mdx +++ b/api_docs/kbn_core_security_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-common title: "@kbn/core-security-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-common plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-common'] --- import kbnCoreSecurityCommonObj from './kbn_core_security_common.devdocs.json'; diff --git a/api_docs/kbn_core_security_server.mdx b/api_docs/kbn_core_security_server.mdx index 98a130e92c850..1a6724e93315f 100644 --- a/api_docs/kbn_core_security_server.mdx +++ b/api_docs/kbn_core_security_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server title: "@kbn/core-security-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server'] --- import kbnCoreSecurityServerObj from './kbn_core_security_server.devdocs.json'; diff --git a/api_docs/kbn_core_security_server_internal.mdx b/api_docs/kbn_core_security_server_internal.mdx index 6c62b878d1b60..c49286fa74aa8 100644 --- a/api_docs/kbn_core_security_server_internal.mdx +++ b/api_docs/kbn_core_security_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server-internal title: "@kbn/core-security-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server-internal plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server-internal'] --- import kbnCoreSecurityServerInternalObj from './kbn_core_security_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_security_server_mocks.mdx b/api_docs/kbn_core_security_server_mocks.mdx index d6487fd144d97..3b75ec2c19fac 100644 --- a/api_docs/kbn_core_security_server_mocks.mdx +++ b/api_docs/kbn_core_security_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server-mocks title: "@kbn/core-security-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server-mocks plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server-mocks'] --- import kbnCoreSecurityServerMocksObj from './kbn_core_security_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_status_common.mdx b/api_docs/kbn_core_status_common.mdx index 5c9e15500f2ee..2f6efc6fd87ff 100644 --- a/api_docs/kbn_core_status_common.mdx +++ b/api_docs/kbn_core_status_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common title: "@kbn/core-status-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common plugin -date: 2024-12-21 +date: 2024-12-23 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_server.mdx b/api_docs/kbn_core_status_server.mdx index 34e582776c9c1..41d3363267b81 100644 --- a/api_docs/kbn_core_status_server.mdx +++ b/api_docs/kbn_core_status_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server title: "@kbn/core-status-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server plugin -date: 2024-12-21 +date: 2024-12-23 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 832b528cf9c6c..0930d425641e4 100644 --- a/api_docs/kbn_core_status_server_internal.mdx +++ b/api_docs/kbn_core_status_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-internal title: "@kbn/core-status-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-internal plugin -date: 2024-12-21 +date: 2024-12-23 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 fb51fcbfa8b1d..168ac3a0bfb6e 100644 --- a/api_docs/kbn_core_status_server_mocks.mdx +++ b/api_docs/kbn_core_status_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-mocks title: "@kbn/core-status-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 975bb5070b1d5..ae02cfa5b74ff 100644 --- a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx +++ b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-deprecations-getters title: "@kbn/core-test-helpers-deprecations-getters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-deprecations-getters plugin -date: 2024-12-21 +date: 2024-12-23 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 448c4b4ffbeed..0e955880d2306 100644 --- a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx +++ b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-http-setup-browser title: "@kbn/core-test-helpers-http-setup-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-http-setup-browser plugin -date: 2024-12-21 +date: 2024-12-23 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 4a764dd89293e..b7d4be2e0ef6d 100644 --- a/api_docs/kbn_core_test_helpers_kbn_server.mdx +++ b/api_docs/kbn_core_test_helpers_kbn_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-kbn-server title: "@kbn/core-test-helpers-kbn-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-kbn-server plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-kbn-server'] --- import kbnCoreTestHelpersKbnServerObj from './kbn_core_test_helpers_kbn_server.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_model_versions.mdx b/api_docs/kbn_core_test_helpers_model_versions.mdx index c85274cb1bb20..f9663cc44df45 100644 --- a/api_docs/kbn_core_test_helpers_model_versions.mdx +++ b/api_docs/kbn_core_test_helpers_model_versions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-model-versions title: "@kbn/core-test-helpers-model-versions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-model-versions plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-model-versions'] --- import kbnCoreTestHelpersModelVersionsObj from './kbn_core_test_helpers_model_versions.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx index 8d9a5089c29af..f8c3347452578 100644 --- a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx +++ b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-so-type-serializer title: "@kbn/core-test-helpers-so-type-serializer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-so-type-serializer plugin -date: 2024-12-21 +date: 2024-12-23 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 22740b7697141..a967d5bc3f951 100644 --- a/api_docs/kbn_core_test_helpers_test_utils.mdx +++ b/api_docs/kbn_core_test_helpers_test_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-test-utils title: "@kbn/core-test-helpers-test-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-test-utils plugin -date: 2024-12-21 +date: 2024-12-23 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 b3360ac6a03be..33658eed7d8aa 100644 --- a/api_docs/kbn_core_theme_browser.mdx +++ b/api_docs/kbn_core_theme_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser title: "@kbn/core-theme-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser'] --- import kbnCoreThemeBrowserObj from './kbn_core_theme_browser.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser_mocks.mdx b/api_docs/kbn_core_theme_browser_mocks.mdx index b3ea8bad17ebb..fa03353c33599 100644 --- a/api_docs/kbn_core_theme_browser_mocks.mdx +++ b/api_docs/kbn_core_theme_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-mocks title: "@kbn/core-theme-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 452988c698e4b..b9ed805384ce2 100644 --- a/api_docs/kbn_core_ui_settings_browser.mdx +++ b/api_docs/kbn_core_ui_settings_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser title: "@kbn/core-ui-settings-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser plugin -date: 2024-12-21 +date: 2024-12-23 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 d1adc97d16999..c9231a12befa8 100644 --- a/api_docs/kbn_core_ui_settings_browser_internal.mdx +++ b/api_docs/kbn_core_ui_settings_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-internal title: "@kbn/core-ui-settings-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-internal plugin -date: 2024-12-21 +date: 2024-12-23 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 e734b983c601c..c9ac32bdfa369 100644 --- a/api_docs/kbn_core_ui_settings_browser_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-mocks title: "@kbn/core-ui-settings-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 f015cd623c626..0e415fed8640d 100644 --- a/api_docs/kbn_core_ui_settings_common.mdx +++ b/api_docs/kbn_core_ui_settings_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-common title: "@kbn/core-ui-settings-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-common plugin -date: 2024-12-21 +date: 2024-12-23 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 a12e67e2e6e00..244b345e28691 100644 --- a/api_docs/kbn_core_ui_settings_server.mdx +++ b/api_docs/kbn_core_ui_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server title: "@kbn/core-ui-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server plugin -date: 2024-12-21 +date: 2024-12-23 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 83ee4a1a7f6f5..c434bfaf018bf 100644 --- a/api_docs/kbn_core_ui_settings_server_internal.mdx +++ b/api_docs/kbn_core_ui_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-internal title: "@kbn/core-ui-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-internal plugin -date: 2024-12-21 +date: 2024-12-23 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 c2511de25892d..b4857b0e18994 100644 --- a/api_docs/kbn_core_ui_settings_server_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-mocks title: "@kbn/core-ui-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 12854cbf35f1c..f6c12046e5d84 100644 --- a/api_docs/kbn_core_usage_data_server.mdx +++ b/api_docs/kbn_core_usage_data_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server title: "@kbn/core-usage-data-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server plugin -date: 2024-12-21 +date: 2024-12-23 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 ff9bfff3c00df..0dcaccf80da71 100644 --- a/api_docs/kbn_core_usage_data_server_internal.mdx +++ b/api_docs/kbn_core_usage_data_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-internal title: "@kbn/core-usage-data-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-internal plugin -date: 2024-12-21 +date: 2024-12-23 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 1541491551be1..46c23bfc2e7fb 100644 --- a/api_docs/kbn_core_usage_data_server_mocks.mdx +++ b/api_docs/kbn_core_usage_data_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-mocks title: "@kbn/core-usage-data-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-mocks plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-mocks'] --- import kbnCoreUsageDataServerMocksObj from './kbn_core_usage_data_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser.mdx b/api_docs/kbn_core_user_profile_browser.mdx index a48a6d4a602d6..ccec503dbeb9e 100644 --- a/api_docs/kbn_core_user_profile_browser.mdx +++ b/api_docs/kbn_core_user_profile_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser title: "@kbn/core-user-profile-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser'] --- import kbnCoreUserProfileBrowserObj from './kbn_core_user_profile_browser.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser_internal.mdx b/api_docs/kbn_core_user_profile_browser_internal.mdx index eb72873a68f8a..530c6bff113c3 100644 --- a/api_docs/kbn_core_user_profile_browser_internal.mdx +++ b/api_docs/kbn_core_user_profile_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser-internal title: "@kbn/core-user-profile-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser-internal plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser-internal'] --- import kbnCoreUserProfileBrowserInternalObj from './kbn_core_user_profile_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser_mocks.mdx b/api_docs/kbn_core_user_profile_browser_mocks.mdx index 4bc925bb493d7..a56865865ec4d 100644 --- a/api_docs/kbn_core_user_profile_browser_mocks.mdx +++ b/api_docs/kbn_core_user_profile_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser-mocks title: "@kbn/core-user-profile-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser-mocks plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser-mocks'] --- import kbnCoreUserProfileBrowserMocksObj from './kbn_core_user_profile_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_common.mdx b/api_docs/kbn_core_user_profile_common.mdx index f4215a9a1beb9..ec5416d6f6529 100644 --- a/api_docs/kbn_core_user_profile_common.mdx +++ b/api_docs/kbn_core_user_profile_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-common title: "@kbn/core-user-profile-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-common plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-common'] --- import kbnCoreUserProfileCommonObj from './kbn_core_user_profile_common.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server.mdx b/api_docs/kbn_core_user_profile_server.mdx index de2858e8966e5..9a9d9239dcebd 100644 --- a/api_docs/kbn_core_user_profile_server.mdx +++ b/api_docs/kbn_core_user_profile_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server title: "@kbn/core-user-profile-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server'] --- import kbnCoreUserProfileServerObj from './kbn_core_user_profile_server.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server_internal.mdx b/api_docs/kbn_core_user_profile_server_internal.mdx index df6162e450095..b6630b61e174b 100644 --- a/api_docs/kbn_core_user_profile_server_internal.mdx +++ b/api_docs/kbn_core_user_profile_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server-internal title: "@kbn/core-user-profile-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server-internal plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server-internal'] --- import kbnCoreUserProfileServerInternalObj from './kbn_core_user_profile_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server_mocks.mdx b/api_docs/kbn_core_user_profile_server_mocks.mdx index 860597053f047..095d0e047cdce 100644 --- a/api_docs/kbn_core_user_profile_server_mocks.mdx +++ b/api_docs/kbn_core_user_profile_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server-mocks title: "@kbn/core-user-profile-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server-mocks plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server-mocks'] --- import kbnCoreUserProfileServerMocksObj from './kbn_core_user_profile_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server.mdx b/api_docs/kbn_core_user_settings_server.mdx index b4062e4732901..63d76fb68a81d 100644 --- a/api_docs/kbn_core_user_settings_server.mdx +++ b/api_docs/kbn_core_user_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server title: "@kbn/core-user-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server'] --- import kbnCoreUserSettingsServerObj from './kbn_core_user_settings_server.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server_mocks.mdx b/api_docs/kbn_core_user_settings_server_mocks.mdx index 94d5bbf605092..b5167ece5fd57 100644 --- a/api_docs/kbn_core_user_settings_server_mocks.mdx +++ b/api_docs/kbn_core_user_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-mocks title: "@kbn/core-user-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server-mocks plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server-mocks'] --- import kbnCoreUserSettingsServerMocksObj from './kbn_core_user_settings_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_crypto.mdx b/api_docs/kbn_crypto.mdx index c2587071643c8..6fabcab2ab0c2 100644 --- a/api_docs/kbn_crypto.mdx +++ b/api_docs/kbn_crypto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto title: "@kbn/crypto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto plugin -date: 2024-12-21 +date: 2024-12-23 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 955e706f04fb9..d0a61cb00f37b 100644 --- a/api_docs/kbn_crypto_browser.mdx +++ b/api_docs/kbn_crypto_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto-browser title: "@kbn/crypto-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto-browser plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto-browser'] --- import kbnCryptoBrowserObj from './kbn_crypto_browser.devdocs.json'; diff --git a/api_docs/kbn_custom_icons.mdx b/api_docs/kbn_custom_icons.mdx index 5e38358f4dc8e..ada1c42e410dd 100644 --- a/api_docs/kbn_custom_icons.mdx +++ b/api_docs/kbn_custom_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-custom-icons title: "@kbn/custom-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/custom-icons plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/custom-icons'] --- import kbnCustomIconsObj from './kbn_custom_icons.devdocs.json'; diff --git a/api_docs/kbn_custom_integrations.mdx b/api_docs/kbn_custom_integrations.mdx index 6bb2827e3e3bb..45d0bb4924edf 100644 --- a/api_docs/kbn_custom_integrations.mdx +++ b/api_docs/kbn_custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-custom-integrations title: "@kbn/custom-integrations" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/custom-integrations plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/custom-integrations'] --- import kbnCustomIntegrationsObj from './kbn_custom_integrations.devdocs.json'; diff --git a/api_docs/kbn_cypress_config.mdx b/api_docs/kbn_cypress_config.mdx index cdc5b9fcb6a54..d9a979d059c12 100644 --- a/api_docs/kbn_cypress_config.mdx +++ b/api_docs/kbn_cypress_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cypress-config title: "@kbn/cypress-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cypress-config plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cypress-config'] --- import kbnCypressConfigObj from './kbn_cypress_config.devdocs.json'; diff --git a/api_docs/kbn_data_forge.mdx b/api_docs/kbn_data_forge.mdx index 4304c4dce4e82..b1ab75bc090dd 100644 --- a/api_docs/kbn_data_forge.mdx +++ b/api_docs/kbn_data_forge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-forge title: "@kbn/data-forge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-forge plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-forge'] --- import kbnDataForgeObj from './kbn_data_forge.devdocs.json'; diff --git a/api_docs/kbn_data_service.mdx b/api_docs/kbn_data_service.mdx index be0e460f4c852..4af8bb7e8e68d 100644 --- a/api_docs/kbn_data_service.mdx +++ b/api_docs/kbn_data_service.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-service title: "@kbn/data-service" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-service plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-service'] --- import kbnDataServiceObj from './kbn_data_service.devdocs.json'; diff --git a/api_docs/kbn_data_stream_adapter.mdx b/api_docs/kbn_data_stream_adapter.mdx index 50edbe6d01e15..f85f38eba39e5 100644 --- a/api_docs/kbn_data_stream_adapter.mdx +++ b/api_docs/kbn_data_stream_adapter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-stream-adapter title: "@kbn/data-stream-adapter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-stream-adapter plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-stream-adapter'] --- import kbnDataStreamAdapterObj from './kbn_data_stream_adapter.devdocs.json'; diff --git a/api_docs/kbn_data_view_utils.mdx b/api_docs/kbn_data_view_utils.mdx index 7b0c42383329a..64877d7306bb7 100644 --- a/api_docs/kbn_data_view_utils.mdx +++ b/api_docs/kbn_data_view_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-view-utils title: "@kbn/data-view-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-view-utils plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-view-utils'] --- import kbnDataViewUtilsObj from './kbn_data_view_utils.devdocs.json'; diff --git a/api_docs/kbn_datemath.mdx b/api_docs/kbn_datemath.mdx index 6e78a864fd93c..ea3059ef2bb56 100644 --- a/api_docs/kbn_datemath.mdx +++ b/api_docs/kbn_datemath.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-datemath title: "@kbn/datemath" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/datemath plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/datemath'] --- import kbnDatemathObj from './kbn_datemath.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_analytics.mdx b/api_docs/kbn_deeplinks_analytics.mdx index f66930921fa60..76379a5dfa750 100644 --- a/api_docs/kbn_deeplinks_analytics.mdx +++ b/api_docs/kbn_deeplinks_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-analytics title: "@kbn/deeplinks-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-analytics plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-analytics'] --- import kbnDeeplinksAnalyticsObj from './kbn_deeplinks_analytics.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_devtools.mdx b/api_docs/kbn_deeplinks_devtools.mdx index 6c0af0612afb7..89ba9885cb8a0 100644 --- a/api_docs/kbn_deeplinks_devtools.mdx +++ b/api_docs/kbn_deeplinks_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-devtools title: "@kbn/deeplinks-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-devtools plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-devtools'] --- import kbnDeeplinksDevtoolsObj from './kbn_deeplinks_devtools.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_fleet.mdx b/api_docs/kbn_deeplinks_fleet.mdx index 358c51c853d9c..136404ee0c6df 100644 --- a/api_docs/kbn_deeplinks_fleet.mdx +++ b/api_docs/kbn_deeplinks_fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-fleet title: "@kbn/deeplinks-fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-fleet plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-fleet'] --- import kbnDeeplinksFleetObj from './kbn_deeplinks_fleet.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_management.mdx b/api_docs/kbn_deeplinks_management.mdx index c123467b827d2..36a829be0e41b 100644 --- a/api_docs/kbn_deeplinks_management.mdx +++ b/api_docs/kbn_deeplinks_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-management title: "@kbn/deeplinks-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-management plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-management'] --- import kbnDeeplinksManagementObj from './kbn_deeplinks_management.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_ml.mdx b/api_docs/kbn_deeplinks_ml.mdx index 44d80bdb0b287..65bd281a41cef 100644 --- a/api_docs/kbn_deeplinks_ml.mdx +++ b/api_docs/kbn_deeplinks_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-ml title: "@kbn/deeplinks-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-ml plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-ml'] --- import kbnDeeplinksMlObj from './kbn_deeplinks_ml.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_observability.mdx b/api_docs/kbn_deeplinks_observability.mdx index aa57e6df6394d..4d2240191e6e9 100644 --- a/api_docs/kbn_deeplinks_observability.mdx +++ b/api_docs/kbn_deeplinks_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-observability title: "@kbn/deeplinks-observability" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-observability plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-observability'] --- import kbnDeeplinksObservabilityObj from './kbn_deeplinks_observability.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_search.mdx b/api_docs/kbn_deeplinks_search.mdx index 5ee037d8961dd..485c6ee29d0e9 100644 --- a/api_docs/kbn_deeplinks_search.mdx +++ b/api_docs/kbn_deeplinks_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-search title: "@kbn/deeplinks-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-search plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-search'] --- import kbnDeeplinksSearchObj from './kbn_deeplinks_search.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_security.mdx b/api_docs/kbn_deeplinks_security.mdx index ca066a4dcebf7..918afaa0294c6 100644 --- a/api_docs/kbn_deeplinks_security.mdx +++ b/api_docs/kbn_deeplinks_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-security title: "@kbn/deeplinks-security" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-security plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-security'] --- import kbnDeeplinksSecurityObj from './kbn_deeplinks_security.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_shared.mdx b/api_docs/kbn_deeplinks_shared.mdx index 1e47e6f15aa12..7a1f6326f7e86 100644 --- a/api_docs/kbn_deeplinks_shared.mdx +++ b/api_docs/kbn_deeplinks_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-shared title: "@kbn/deeplinks-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-shared plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-shared'] --- import kbnDeeplinksSharedObj from './kbn_deeplinks_shared.devdocs.json'; diff --git a/api_docs/kbn_default_nav_analytics.mdx b/api_docs/kbn_default_nav_analytics.mdx index 6754e7a7f0c1b..1f33e99ef9e52 100644 --- a/api_docs/kbn_default_nav_analytics.mdx +++ b/api_docs/kbn_default_nav_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-analytics title: "@kbn/default-nav-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-analytics plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-analytics'] --- import kbnDefaultNavAnalyticsObj from './kbn_default_nav_analytics.devdocs.json'; diff --git a/api_docs/kbn_default_nav_devtools.mdx b/api_docs/kbn_default_nav_devtools.mdx index 860c492dd2ed6..3ad00db0b6d6e 100644 --- a/api_docs/kbn_default_nav_devtools.mdx +++ b/api_docs/kbn_default_nav_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-devtools title: "@kbn/default-nav-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-devtools plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-devtools'] --- import kbnDefaultNavDevtoolsObj from './kbn_default_nav_devtools.devdocs.json'; diff --git a/api_docs/kbn_default_nav_management.mdx b/api_docs/kbn_default_nav_management.mdx index dd5a293af9fe3..443d1aee620e1 100644 --- a/api_docs/kbn_default_nav_management.mdx +++ b/api_docs/kbn_default_nav_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-management title: "@kbn/default-nav-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-management plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-management'] --- import kbnDefaultNavManagementObj from './kbn_default_nav_management.devdocs.json'; diff --git a/api_docs/kbn_default_nav_ml.mdx b/api_docs/kbn_default_nav_ml.mdx index 273eb45b5ec5a..2074cb2fb139f 100644 --- a/api_docs/kbn_default_nav_ml.mdx +++ b/api_docs/kbn_default_nav_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-ml title: "@kbn/default-nav-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-ml plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-ml'] --- import kbnDefaultNavMlObj from './kbn_default_nav_ml.devdocs.json'; diff --git a/api_docs/kbn_dev_cli_errors.mdx b/api_docs/kbn_dev_cli_errors.mdx index 86dc19df1a0f6..61877463a584b 100644 --- a/api_docs/kbn_dev_cli_errors.mdx +++ b/api_docs/kbn_dev_cli_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-errors title: "@kbn/dev-cli-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-errors plugin -date: 2024-12-21 +date: 2024-12-23 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 2200ae5925eae..1dd59986cbfa1 100644 --- a/api_docs/kbn_dev_cli_runner.mdx +++ b/api_docs/kbn_dev_cli_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-runner title: "@kbn/dev-cli-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-runner plugin -date: 2024-12-21 +date: 2024-12-23 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 df915af3eef1a..25155c4cdfe47 100644 --- a/api_docs/kbn_dev_proc_runner.mdx +++ b/api_docs/kbn_dev_proc_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-proc-runner title: "@kbn/dev-proc-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-proc-runner plugin -date: 2024-12-21 +date: 2024-12-23 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 dd25fe1f28c6c..7fd3d4cd6b251 100644 --- a/api_docs/kbn_dev_utils.mdx +++ b/api_docs/kbn_dev_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-utils title: "@kbn/dev-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-utils plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-utils'] --- import kbnDevUtilsObj from './kbn_dev_utils.devdocs.json'; diff --git a/api_docs/kbn_discover_contextual_components.mdx b/api_docs/kbn_discover_contextual_components.mdx index f1a88913f1ffb..ce9f3ede100f6 100644 --- a/api_docs/kbn_discover_contextual_components.mdx +++ b/api_docs/kbn_discover_contextual_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-discover-contextual-components title: "@kbn/discover-contextual-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/discover-contextual-components plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/discover-contextual-components'] --- import kbnDiscoverContextualComponentsObj from './kbn_discover_contextual_components.devdocs.json'; diff --git a/api_docs/kbn_discover_utils.mdx b/api_docs/kbn_discover_utils.mdx index dbe0b806a48c6..dbd213bea74aa 100644 --- a/api_docs/kbn_discover_utils.mdx +++ b/api_docs/kbn_discover_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-discover-utils title: "@kbn/discover-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/discover-utils plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/discover-utils'] --- import kbnDiscoverUtilsObj from './kbn_discover_utils.devdocs.json'; diff --git a/api_docs/kbn_doc_links.mdx b/api_docs/kbn_doc_links.mdx index c0af493bd0026..bfbed4a209434 100644 --- a/api_docs/kbn_doc_links.mdx +++ b/api_docs/kbn_doc_links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-doc-links title: "@kbn/doc-links" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/doc-links plugin -date: 2024-12-21 +date: 2024-12-23 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 1b25fb168f974..9b05ef0bce0a4 100644 --- a/api_docs/kbn_docs_utils.mdx +++ b/api_docs/kbn_docs_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-docs-utils title: "@kbn/docs-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/docs-utils plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/docs-utils'] --- import kbnDocsUtilsObj from './kbn_docs_utils.devdocs.json'; diff --git a/api_docs/kbn_dom_drag_drop.mdx b/api_docs/kbn_dom_drag_drop.mdx index 2ab6390c7bb45..1497170e7880e 100644 --- a/api_docs/kbn_dom_drag_drop.mdx +++ b/api_docs/kbn_dom_drag_drop.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dom-drag-drop title: "@kbn/dom-drag-drop" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dom-drag-drop plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dom-drag-drop'] --- import kbnDomDragDropObj from './kbn_dom_drag_drop.devdocs.json'; diff --git a/api_docs/kbn_ebt_tools.mdx b/api_docs/kbn_ebt_tools.mdx index afc0bbf880140..c87ca81eb3273 100644 --- a/api_docs/kbn_ebt_tools.mdx +++ b/api_docs/kbn_ebt_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ebt-tools title: "@kbn/ebt-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ebt-tools plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ebt-tools'] --- import kbnEbtToolsObj from './kbn_ebt_tools.devdocs.json'; diff --git a/api_docs/kbn_ecs_data_quality_dashboard.mdx b/api_docs/kbn_ecs_data_quality_dashboard.mdx index a24f8bb7d05e6..aa7be5339e200 100644 --- a/api_docs/kbn_ecs_data_quality_dashboard.mdx +++ b/api_docs/kbn_ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs-data-quality-dashboard title: "@kbn/ecs-data-quality-dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs-data-quality-dashboard plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs-data-quality-dashboard'] --- import kbnEcsDataQualityDashboardObj from './kbn_ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/kbn_elastic_agent_utils.mdx b/api_docs/kbn_elastic_agent_utils.mdx index 59b0ffa9301c2..611f555ac249f 100644 --- a/api_docs/kbn_elastic_agent_utils.mdx +++ b/api_docs/kbn_elastic_agent_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-agent-utils title: "@kbn/elastic-agent-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-agent-utils plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-agent-utils'] --- import kbnElasticAgentUtilsObj from './kbn_elastic_agent_utils.devdocs.json'; diff --git a/api_docs/kbn_elastic_assistant.mdx b/api_docs/kbn_elastic_assistant.mdx index e1a1da8cc7f47..cc85aa598581d 100644 --- a/api_docs/kbn_elastic_assistant.mdx +++ b/api_docs/kbn_elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant title: "@kbn/elastic-assistant" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant'] --- import kbnElasticAssistantObj from './kbn_elastic_assistant.devdocs.json'; diff --git a/api_docs/kbn_elastic_assistant_common.mdx b/api_docs/kbn_elastic_assistant_common.mdx index 8f40d3ecc3d88..5ca81477e01d1 100644 --- a/api_docs/kbn_elastic_assistant_common.mdx +++ b/api_docs/kbn_elastic_assistant_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant-common title: "@kbn/elastic-assistant-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant-common plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant-common'] --- import kbnElasticAssistantCommonObj from './kbn_elastic_assistant_common.devdocs.json'; diff --git a/api_docs/kbn_entities_schema.mdx b/api_docs/kbn_entities_schema.mdx index 3c7261e76820f..5c5756ea4b9c5 100644 --- a/api_docs/kbn_entities_schema.mdx +++ b/api_docs/kbn_entities_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-entities-schema title: "@kbn/entities-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/entities-schema plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/entities-schema'] --- import kbnEntitiesSchemaObj from './kbn_entities_schema.devdocs.json'; diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx index 97c8036bcc30f..c1b60a93ba378 100644 --- a/api_docs/kbn_es.mdx +++ b/api_docs/kbn_es.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es title: "@kbn/es" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es plugin -date: 2024-12-21 +date: 2024-12-23 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 c3c21b47f263f..7067a0329908a 100644 --- a/api_docs/kbn_es_archiver.mdx +++ b/api_docs/kbn_es_archiver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-archiver title: "@kbn/es-archiver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-archiver plugin -date: 2024-12-21 +date: 2024-12-23 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 f8560578b4326..a7748ebd14958 100644 --- a/api_docs/kbn_es_errors.mdx +++ b/api_docs/kbn_es_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-errors title: "@kbn/es-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-errors plugin -date: 2024-12-21 +date: 2024-12-23 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 506dd327c4367..cd944cf596111 100644 --- a/api_docs/kbn_es_query.mdx +++ b/api_docs/kbn_es_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-query title: "@kbn/es-query" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-query plugin -date: 2024-12-21 +date: 2024-12-23 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 4559d030913c2..fb51e3f283051 100644 --- a/api_docs/kbn_es_types.mdx +++ b/api_docs/kbn_es_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-types title: "@kbn/es-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-types plugin -date: 2024-12-21 +date: 2024-12-23 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 c388ace695592..fe452c2191275 100644 --- a/api_docs/kbn_eslint_plugin_imports.mdx +++ b/api_docs/kbn_eslint_plugin_imports.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-eslint-plugin-imports title: "@kbn/eslint-plugin-imports" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/eslint-plugin-imports plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports'] --- import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json'; diff --git a/api_docs/kbn_esql_ast.mdx b/api_docs/kbn_esql_ast.mdx index 1876abe29b7fb..ccee1aa9e11ff 100644 --- a/api_docs/kbn_esql_ast.mdx +++ b/api_docs/kbn_esql_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-ast title: "@kbn/esql-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-ast plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-ast'] --- import kbnEsqlAstObj from './kbn_esql_ast.devdocs.json'; diff --git a/api_docs/kbn_esql_editor.mdx b/api_docs/kbn_esql_editor.mdx index 23b108440f27c..ccd6a865d54bc 100644 --- a/api_docs/kbn_esql_editor.mdx +++ b/api_docs/kbn_esql_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-editor title: "@kbn/esql-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-editor plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-editor'] --- import kbnEsqlEditorObj from './kbn_esql_editor.devdocs.json'; diff --git a/api_docs/kbn_esql_utils.mdx b/api_docs/kbn_esql_utils.mdx index 1eb871ddf5cea..21dfa187120e1 100644 --- a/api_docs/kbn_esql_utils.mdx +++ b/api_docs/kbn_esql_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-utils title: "@kbn/esql-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-utils plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-utils'] --- import kbnEsqlUtilsObj from './kbn_esql_utils.devdocs.json'; diff --git a/api_docs/kbn_esql_validation_autocomplete.mdx b/api_docs/kbn_esql_validation_autocomplete.mdx index 7f229a6da5507..1a82133ef9809 100644 --- a/api_docs/kbn_esql_validation_autocomplete.mdx +++ b/api_docs/kbn_esql_validation_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-validation-autocomplete title: "@kbn/esql-validation-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-validation-autocomplete plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-validation-autocomplete'] --- import kbnEsqlValidationAutocompleteObj from './kbn_esql_validation_autocomplete.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_common.mdx b/api_docs/kbn_event_annotation_common.mdx index 3a150c2801473..41f9b6127a4ea 100644 --- a/api_docs/kbn_event_annotation_common.mdx +++ b/api_docs/kbn_event_annotation_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-common title: "@kbn/event-annotation-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-common plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/event-annotation-common'] --- import kbnEventAnnotationCommonObj from './kbn_event_annotation_common.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_components.mdx b/api_docs/kbn_event_annotation_components.mdx index 5305278a47c86..1e596a4fdfa92 100644 --- a/api_docs/kbn_event_annotation_components.mdx +++ b/api_docs/kbn_event_annotation_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-components title: "@kbn/event-annotation-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-components plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/event-annotation-components'] --- import kbnEventAnnotationComponentsObj from './kbn_event_annotation_components.devdocs.json'; diff --git a/api_docs/kbn_expandable_flyout.mdx b/api_docs/kbn_expandable_flyout.mdx index 40b511fcdbf54..318188031e382 100644 --- a/api_docs/kbn_expandable_flyout.mdx +++ b/api_docs/kbn_expandable_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-expandable-flyout title: "@kbn/expandable-flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/expandable-flyout plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/expandable-flyout'] --- import kbnExpandableFlyoutObj from './kbn_expandable_flyout.devdocs.json'; diff --git a/api_docs/kbn_field_types.mdx b/api_docs/kbn_field_types.mdx index 4a87b3ea3c906..4939f300882b4 100644 --- a/api_docs/kbn_field_types.mdx +++ b/api_docs/kbn_field_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-types title: "@kbn/field-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-types plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-types'] --- import kbnFieldTypesObj from './kbn_field_types.devdocs.json'; diff --git a/api_docs/kbn_field_utils.mdx b/api_docs/kbn_field_utils.mdx index a049941572a64..3865ac33065d3 100644 --- a/api_docs/kbn_field_utils.mdx +++ b/api_docs/kbn_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-utils title: "@kbn/field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-utils plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-utils'] --- import kbnFieldUtilsObj from './kbn_field_utils.devdocs.json'; diff --git a/api_docs/kbn_find_used_node_modules.mdx b/api_docs/kbn_find_used_node_modules.mdx index a47ef9b55260c..24e3d19c86bca 100644 --- a/api_docs/kbn_find_used_node_modules.mdx +++ b/api_docs/kbn_find_used_node_modules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-find-used-node-modules title: "@kbn/find-used-node-modules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/find-used-node-modules plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/find-used-node-modules'] --- import kbnFindUsedNodeModulesObj from './kbn_find_used_node_modules.devdocs.json'; diff --git a/api_docs/kbn_formatters.mdx b/api_docs/kbn_formatters.mdx index 0dbcfbd721456..e32ef39fe09f4 100644 --- a/api_docs/kbn_formatters.mdx +++ b/api_docs/kbn_formatters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-formatters title: "@kbn/formatters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/formatters plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/formatters'] --- import kbnFormattersObj from './kbn_formatters.devdocs.json'; diff --git a/api_docs/kbn_ftr_common_functional_services.mdx b/api_docs/kbn_ftr_common_functional_services.mdx index 8ba2e2c1890e8..b93c445f9a1a1 100644 --- a/api_docs/kbn_ftr_common_functional_services.mdx +++ b/api_docs/kbn_ftr_common_functional_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-services title: "@kbn/ftr-common-functional-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-services plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-services'] --- import kbnFtrCommonFunctionalServicesObj from './kbn_ftr_common_functional_services.devdocs.json'; diff --git a/api_docs/kbn_ftr_common_functional_ui_services.mdx b/api_docs/kbn_ftr_common_functional_ui_services.mdx index a1517266e1e94..a9838368c6d93 100644 --- a/api_docs/kbn_ftr_common_functional_ui_services.mdx +++ b/api_docs/kbn_ftr_common_functional_ui_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-ui-services title: "@kbn/ftr-common-functional-ui-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-ui-services plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-ui-services'] --- import kbnFtrCommonFunctionalUiServicesObj from './kbn_ftr_common_functional_ui_services.devdocs.json'; diff --git a/api_docs/kbn_gen_ai_functional_testing.mdx b/api_docs/kbn_gen_ai_functional_testing.mdx index d66f75aa98172..9417b92676e19 100644 --- a/api_docs/kbn_gen_ai_functional_testing.mdx +++ b/api_docs/kbn_gen_ai_functional_testing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-gen-ai-functional-testing title: "@kbn/gen-ai-functional-testing" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/gen-ai-functional-testing plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/gen-ai-functional-testing'] --- import kbnGenAiFunctionalTestingObj from './kbn_gen_ai_functional_testing.devdocs.json'; diff --git a/api_docs/kbn_generate.mdx b/api_docs/kbn_generate.mdx index 7d37e8f380cef..c2412978a15d0 100644 --- a/api_docs/kbn_generate.mdx +++ b/api_docs/kbn_generate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate title: "@kbn/generate" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate'] --- import kbnGenerateObj from './kbn_generate.devdocs.json'; diff --git a/api_docs/kbn_generate_console_definitions.mdx b/api_docs/kbn_generate_console_definitions.mdx index e86dc34f8aa04..d6065eff7ff05 100644 --- a/api_docs/kbn_generate_console_definitions.mdx +++ b/api_docs/kbn_generate_console_definitions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-console-definitions title: "@kbn/generate-console-definitions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-console-definitions plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-console-definitions'] --- import kbnGenerateConsoleDefinitionsObj from './kbn_generate_console_definitions.devdocs.json'; diff --git a/api_docs/kbn_generate_csv.mdx b/api_docs/kbn_generate_csv.mdx index 3268d4e879c16..830c540bb60b7 100644 --- a/api_docs/kbn_generate_csv.mdx +++ b/api_docs/kbn_generate_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-csv title: "@kbn/generate-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-csv plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv'] --- import kbnGenerateCsvObj from './kbn_generate_csv.devdocs.json'; diff --git a/api_docs/kbn_grid_layout.mdx b/api_docs/kbn_grid_layout.mdx index 6c905576c2619..6bd1bad217488 100644 --- a/api_docs/kbn_grid_layout.mdx +++ b/api_docs/kbn_grid_layout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-grid-layout title: "@kbn/grid-layout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/grid-layout plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/grid-layout'] --- import kbnGridLayoutObj from './kbn_grid_layout.devdocs.json'; diff --git a/api_docs/kbn_grouping.mdx b/api_docs/kbn_grouping.mdx index 9e77e7f83b7d0..12b50c27328a1 100644 --- a/api_docs/kbn_grouping.mdx +++ b/api_docs/kbn_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-grouping title: "@kbn/grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/grouping plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/grouping'] --- import kbnGroupingObj from './kbn_grouping.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index def52d41eb98e..49314c26387a7 100644 --- a/api_docs/kbn_guided_onboarding.mdx +++ b/api_docs/kbn_guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-guided-onboarding title: "@kbn/guided-onboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/guided-onboarding plugin -date: 2024-12-21 +date: 2024-12-23 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 08c3a8c7f6ff9..290f201e9b3ae 100644 --- a/api_docs/kbn_handlebars.mdx +++ b/api_docs/kbn_handlebars.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-handlebars title: "@kbn/handlebars" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/handlebars plugin -date: 2024-12-21 +date: 2024-12-23 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 a4e2f9e5f0c4b..bdf753063c61e 100644 --- a/api_docs/kbn_hapi_mocks.mdx +++ b/api_docs/kbn_hapi_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-hapi-mocks title: "@kbn/hapi-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/hapi-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 3f3841ee58b6f..4be7c58db58e7 100644 --- a/api_docs/kbn_health_gateway_server.mdx +++ b/api_docs/kbn_health_gateway_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-health-gateway-server title: "@kbn/health-gateway-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/health-gateway-server plugin -date: 2024-12-21 +date: 2024-12-23 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 e9ab6914bddcc..cdb67fc652704 100644 --- a/api_docs/kbn_home_sample_data_card.mdx +++ b/api_docs/kbn_home_sample_data_card.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-card title: "@kbn/home-sample-data-card" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-card plugin -date: 2024-12-21 +date: 2024-12-23 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 fe3c7bdbaeced..037e1bcabf705 100644 --- a/api_docs/kbn_home_sample_data_tab.mdx +++ b/api_docs/kbn_home_sample_data_tab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-tab title: "@kbn/home-sample-data-tab" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-tab plugin -date: 2024-12-21 +date: 2024-12-23 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 1494eb2eb6d61..a903bab23b83b 100644 --- a/api_docs/kbn_i18n.mdx +++ b/api_docs/kbn_i18n.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n title: "@kbn/i18n" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n plugin -date: 2024-12-21 +date: 2024-12-23 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 d5f033a92cd93..50d3a0e5084aa 100644 --- a/api_docs/kbn_i18n_react.mdx +++ b/api_docs/kbn_i18n_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n-react title: "@kbn/i18n-react" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n-react plugin -date: 2024-12-21 +date: 2024-12-23 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 de7d5b712f452..a09f611205fb1 100644 --- a/api_docs/kbn_import_resolver.mdx +++ b/api_docs/kbn_import_resolver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-import-resolver title: "@kbn/import-resolver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/import-resolver plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] --- import kbnImportResolverObj from './kbn_import_resolver.devdocs.json'; diff --git a/api_docs/kbn_index_adapter.mdx b/api_docs/kbn_index_adapter.mdx index 5a37624231023..b4d2074120c1d 100644 --- a/api_docs/kbn_index_adapter.mdx +++ b/api_docs/kbn_index_adapter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-index-adapter title: "@kbn/index-adapter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/index-adapter plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/index-adapter'] --- import kbnIndexAdapterObj from './kbn_index_adapter.devdocs.json'; diff --git a/api_docs/kbn_index_lifecycle_management_common_shared.mdx b/api_docs/kbn_index_lifecycle_management_common_shared.mdx index a80b3d14a5303..b18b1fceba1a1 100644 --- a/api_docs/kbn_index_lifecycle_management_common_shared.mdx +++ b/api_docs/kbn_index_lifecycle_management_common_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-index-lifecycle-management-common-shared title: "@kbn/index-lifecycle-management-common-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/index-lifecycle-management-common-shared plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/index-lifecycle-management-common-shared'] --- import kbnIndexLifecycleManagementCommonSharedObj from './kbn_index_lifecycle_management_common_shared.devdocs.json'; diff --git a/api_docs/kbn_index_management_shared_types.mdx b/api_docs/kbn_index_management_shared_types.mdx index fde9a9eb88081..db89d62eda113 100644 --- a/api_docs/kbn_index_management_shared_types.mdx +++ b/api_docs/kbn_index_management_shared_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-index-management-shared-types title: "@kbn/index-management-shared-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/index-management-shared-types plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/index-management-shared-types'] --- import kbnIndexManagementSharedTypesObj from './kbn_index_management_shared_types.devdocs.json'; diff --git a/api_docs/kbn_inference_common.mdx b/api_docs/kbn_inference_common.mdx index 55afc59db161e..702ea56f513c4 100644 --- a/api_docs/kbn_inference_common.mdx +++ b/api_docs/kbn_inference_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-inference-common title: "@kbn/inference-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/inference-common plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/inference-common'] --- import kbnInferenceCommonObj from './kbn_inference_common.devdocs.json'; diff --git a/api_docs/kbn_inference_integration_flyout.mdx b/api_docs/kbn_inference_integration_flyout.mdx index e7d0dc414b08c..514ec4eca0f1a 100644 --- a/api_docs/kbn_inference_integration_flyout.mdx +++ b/api_docs/kbn_inference_integration_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-inference_integration_flyout title: "@kbn/inference_integration_flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/inference_integration_flyout plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/inference_integration_flyout'] --- import kbnInferenceIntegrationFlyoutObj from './kbn_inference_integration_flyout.devdocs.json'; diff --git a/api_docs/kbn_infra_forge.mdx b/api_docs/kbn_infra_forge.mdx index 8d07d785dbe2f..7279c332c2955 100644 --- a/api_docs/kbn_infra_forge.mdx +++ b/api_docs/kbn_infra_forge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-infra-forge title: "@kbn/infra-forge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/infra-forge plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/infra-forge'] --- import kbnInfraForgeObj from './kbn_infra_forge.devdocs.json'; diff --git a/api_docs/kbn_interpreter.mdx b/api_docs/kbn_interpreter.mdx index 84f639850fa88..b4576c08eb28b 100644 --- a/api_docs/kbn_interpreter.mdx +++ b/api_docs/kbn_interpreter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-interpreter title: "@kbn/interpreter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/interpreter plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/interpreter'] --- import kbnInterpreterObj from './kbn_interpreter.devdocs.json'; diff --git a/api_docs/kbn_investigation_shared.mdx b/api_docs/kbn_investigation_shared.mdx index 65a863a6b6c68..197b7ea11f0dc 100644 --- a/api_docs/kbn_investigation_shared.mdx +++ b/api_docs/kbn_investigation_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-investigation-shared title: "@kbn/investigation-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/investigation-shared plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/investigation-shared'] --- import kbnInvestigationSharedObj from './kbn_investigation_shared.devdocs.json'; diff --git a/api_docs/kbn_io_ts_utils.mdx b/api_docs/kbn_io_ts_utils.mdx index 63575433295d8..1dd44794b94fa 100644 --- a/api_docs/kbn_io_ts_utils.mdx +++ b/api_docs/kbn_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-io-ts-utils title: "@kbn/io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/io-ts-utils plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/io-ts-utils'] --- import kbnIoTsUtilsObj from './kbn_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_ipynb.mdx b/api_docs/kbn_ipynb.mdx index f7012d248d339..7ae9ae44babc4 100644 --- a/api_docs/kbn_ipynb.mdx +++ b/api_docs/kbn_ipynb.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ipynb title: "@kbn/ipynb" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ipynb plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ipynb'] --- import kbnIpynbObj from './kbn_ipynb.devdocs.json'; diff --git a/api_docs/kbn_item_buffer.mdx b/api_docs/kbn_item_buffer.mdx index 677157eda2bac..028c8ecf62885 100644 --- a/api_docs/kbn_item_buffer.mdx +++ b/api_docs/kbn_item_buffer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-item-buffer title: "@kbn/item-buffer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/item-buffer plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/item-buffer'] --- import kbnItemBufferObj from './kbn_item_buffer.devdocs.json'; diff --git a/api_docs/kbn_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx index 7748199cc6c48..81e43f4cb62b8 100644 --- a/api_docs/kbn_jest_serializers.mdx +++ b/api_docs/kbn_jest_serializers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-jest-serializers title: "@kbn/jest-serializers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/jest-serializers plugin -date: 2024-12-21 +date: 2024-12-23 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 8f4a4e7f86867..d9135d21527a6 100644 --- a/api_docs/kbn_journeys.mdx +++ b/api_docs/kbn_journeys.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-journeys title: "@kbn/journeys" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/journeys plugin -date: 2024-12-21 +date: 2024-12-23 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 9dfdbabcf3235..f589c6e2b8ab5 100644 --- a/api_docs/kbn_json_ast.mdx +++ b/api_docs/kbn_json_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-ast title: "@kbn/json-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-ast plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-ast'] --- import kbnJsonAstObj from './kbn_json_ast.devdocs.json'; diff --git a/api_docs/kbn_json_schemas.mdx b/api_docs/kbn_json_schemas.mdx index c4b087c3689a5..8270973788854 100644 --- a/api_docs/kbn_json_schemas.mdx +++ b/api_docs/kbn_json_schemas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-schemas title: "@kbn/json-schemas" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-schemas plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-schemas'] --- import kbnJsonSchemasObj from './kbn_json_schemas.devdocs.json'; diff --git a/api_docs/kbn_kibana_manifest_schema.mdx b/api_docs/kbn_kibana_manifest_schema.mdx index fe7f7c1074d28..b5c76767898dc 100644 --- a/api_docs/kbn_kibana_manifest_schema.mdx +++ b/api_docs/kbn_kibana_manifest_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-kibana-manifest-schema title: "@kbn/kibana-manifest-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/kibana-manifest-schema plugin -date: 2024-12-21 +date: 2024-12-23 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.mdx b/api_docs/kbn_language_documentation.mdx index ca3c4573d74d0..36f63433fce0b 100644 --- a/api_docs/kbn_language_documentation.mdx +++ b/api_docs/kbn_language_documentation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-language-documentation title: "@kbn/language-documentation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/language-documentation plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/language-documentation'] --- import kbnLanguageDocumentationObj from './kbn_language_documentation.devdocs.json'; diff --git a/api_docs/kbn_lens_embeddable_utils.mdx b/api_docs/kbn_lens_embeddable_utils.mdx index 312238ddb723c..4dfdb53fba4cf 100644 --- a/api_docs/kbn_lens_embeddable_utils.mdx +++ b/api_docs/kbn_lens_embeddable_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-lens-embeddable-utils title: "@kbn/lens-embeddable-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/lens-embeddable-utils plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/lens-embeddable-utils'] --- import kbnLensEmbeddableUtilsObj from './kbn_lens_embeddable_utils.devdocs.json'; diff --git a/api_docs/kbn_lens_formula_docs.mdx b/api_docs/kbn_lens_formula_docs.mdx index 1021e00d2c8bd..7333945f3d32c 100644 --- a/api_docs/kbn_lens_formula_docs.mdx +++ b/api_docs/kbn_lens_formula_docs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-lens-formula-docs title: "@kbn/lens-formula-docs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/lens-formula-docs plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/lens-formula-docs'] --- import kbnLensFormulaDocsObj from './kbn_lens_formula_docs.devdocs.json'; diff --git a/api_docs/kbn_logging.mdx b/api_docs/kbn_logging.mdx index fd1975296396d..e73937d5df0a5 100644 --- a/api_docs/kbn_logging.mdx +++ b/api_docs/kbn_logging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging title: "@kbn/logging" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging plugin -date: 2024-12-21 +date: 2024-12-23 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 89491b41cdb5e..b361c0c5423d5 100644 --- a/api_docs/kbn_logging_mocks.mdx +++ b/api_docs/kbn_logging_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging-mocks title: "@kbn/logging-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging-mocks plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging-mocks'] --- import kbnLoggingMocksObj from './kbn_logging_mocks.devdocs.json'; diff --git a/api_docs/kbn_managed_content_badge.mdx b/api_docs/kbn_managed_content_badge.mdx index 4350fecc001dd..eddc5f0a66b10 100644 --- a/api_docs/kbn_managed_content_badge.mdx +++ b/api_docs/kbn_managed_content_badge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-content-badge title: "@kbn/managed-content-badge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-content-badge plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/managed-content-badge'] --- import kbnManagedContentBadgeObj from './kbn_managed_content_badge.devdocs.json'; diff --git a/api_docs/kbn_managed_vscode_config.mdx b/api_docs/kbn_managed_vscode_config.mdx index a4877ec87ec3a..951f9ffb1b62e 100644 --- a/api_docs/kbn_managed_vscode_config.mdx +++ b/api_docs/kbn_managed_vscode_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-vscode-config title: "@kbn/managed-vscode-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-vscode-config plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/managed-vscode-config'] --- import kbnManagedVscodeConfigObj from './kbn_managed_vscode_config.devdocs.json'; diff --git a/api_docs/kbn_management_cards_navigation.mdx b/api_docs/kbn_management_cards_navigation.mdx index 54c81d088cf82..9ade8488ee57f 100644 --- a/api_docs/kbn_management_cards_navigation.mdx +++ b/api_docs/kbn_management_cards_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-cards-navigation title: "@kbn/management-cards-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-cards-navigation plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-cards-navigation'] --- import kbnManagementCardsNavigationObj from './kbn_management_cards_navigation.devdocs.json'; diff --git a/api_docs/kbn_management_settings_application.mdx b/api_docs/kbn_management_settings_application.mdx index 5fb67678727c6..b8df6c8f2afda 100644 --- a/api_docs/kbn_management_settings_application.mdx +++ b/api_docs/kbn_management_settings_application.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-application title: "@kbn/management-settings-application" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-application plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-application'] --- import kbnManagementSettingsApplicationObj from './kbn_management_settings_application.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_field_category.mdx b/api_docs/kbn_management_settings_components_field_category.mdx index f902cc6188622..f6fd45f57b850 100644 --- a/api_docs/kbn_management_settings_components_field_category.mdx +++ b/api_docs/kbn_management_settings_components_field_category.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-category title: "@kbn/management-settings-components-field-category" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-category plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-category'] --- import kbnManagementSettingsComponentsFieldCategoryObj from './kbn_management_settings_components_field_category.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_field_input.mdx b/api_docs/kbn_management_settings_components_field_input.mdx index fd5dcd2c522e0..c266494038444 100644 --- a/api_docs/kbn_management_settings_components_field_input.mdx +++ b/api_docs/kbn_management_settings_components_field_input.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-input title: "@kbn/management-settings-components-field-input" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-input plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-input'] --- import kbnManagementSettingsComponentsFieldInputObj from './kbn_management_settings_components_field_input.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_field_row.mdx b/api_docs/kbn_management_settings_components_field_row.mdx index bd15b8ca6d508..11e813878ee2a 100644 --- a/api_docs/kbn_management_settings_components_field_row.mdx +++ b/api_docs/kbn_management_settings_components_field_row.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-row title: "@kbn/management-settings-components-field-row" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-row plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-row'] --- import kbnManagementSettingsComponentsFieldRowObj from './kbn_management_settings_components_field_row.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_form.mdx b/api_docs/kbn_management_settings_components_form.mdx index 954f01aad7897..c0b1aae2f65ba 100644 --- a/api_docs/kbn_management_settings_components_form.mdx +++ b/api_docs/kbn_management_settings_components_form.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-form title: "@kbn/management-settings-components-form" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-form plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-form'] --- import kbnManagementSettingsComponentsFormObj from './kbn_management_settings_components_form.devdocs.json'; diff --git a/api_docs/kbn_management_settings_field_definition.mdx b/api_docs/kbn_management_settings_field_definition.mdx index e12e004a35f0d..219b0db55c523 100644 --- a/api_docs/kbn_management_settings_field_definition.mdx +++ b/api_docs/kbn_management_settings_field_definition.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-field-definition title: "@kbn/management-settings-field-definition" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-field-definition plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-field-definition'] --- import kbnManagementSettingsFieldDefinitionObj from './kbn_management_settings_field_definition.devdocs.json'; diff --git a/api_docs/kbn_management_settings_ids.mdx b/api_docs/kbn_management_settings_ids.mdx index 76fe7ddf0faa5..842b52c99b28c 100644 --- a/api_docs/kbn_management_settings_ids.mdx +++ b/api_docs/kbn_management_settings_ids.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-ids title: "@kbn/management-settings-ids" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-ids plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-ids'] --- import kbnManagementSettingsIdsObj from './kbn_management_settings_ids.devdocs.json'; diff --git a/api_docs/kbn_management_settings_section_registry.mdx b/api_docs/kbn_management_settings_section_registry.mdx index 599944dcf9e97..4a2a6de3a7f58 100644 --- a/api_docs/kbn_management_settings_section_registry.mdx +++ b/api_docs/kbn_management_settings_section_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-section-registry title: "@kbn/management-settings-section-registry" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-section-registry plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-section-registry'] --- import kbnManagementSettingsSectionRegistryObj from './kbn_management_settings_section_registry.devdocs.json'; diff --git a/api_docs/kbn_management_settings_types.mdx b/api_docs/kbn_management_settings_types.mdx index 3e998cf807836..4e5711765a1dd 100644 --- a/api_docs/kbn_management_settings_types.mdx +++ b/api_docs/kbn_management_settings_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-types title: "@kbn/management-settings-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-types plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-types'] --- import kbnManagementSettingsTypesObj from './kbn_management_settings_types.devdocs.json'; diff --git a/api_docs/kbn_management_settings_utilities.mdx b/api_docs/kbn_management_settings_utilities.mdx index e74c79dc75a81..2de67bfdcf255 100644 --- a/api_docs/kbn_management_settings_utilities.mdx +++ b/api_docs/kbn_management_settings_utilities.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-utilities title: "@kbn/management-settings-utilities" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-utilities plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-utilities'] --- import kbnManagementSettingsUtilitiesObj from './kbn_management_settings_utilities.devdocs.json'; diff --git a/api_docs/kbn_management_storybook_config.mdx b/api_docs/kbn_management_storybook_config.mdx index bfd851d65720c..9a7d2b5f07b22 100644 --- a/api_docs/kbn_management_storybook_config.mdx +++ b/api_docs/kbn_management_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-storybook-config title: "@kbn/management-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-storybook-config plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-storybook-config'] --- import kbnManagementStorybookConfigObj from './kbn_management_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_manifest.mdx b/api_docs/kbn_manifest.mdx index ed00a057d4b79..028c7392eaae6 100644 --- a/api_docs/kbn_manifest.mdx +++ b/api_docs/kbn_manifest.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-manifest title: "@kbn/manifest" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/manifest plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/manifest'] --- import kbnManifestObj from './kbn_manifest.devdocs.json'; diff --git a/api_docs/kbn_mapbox_gl.mdx b/api_docs/kbn_mapbox_gl.mdx index 5329b287cf41a..08264ee5bbafe 100644 --- a/api_docs/kbn_mapbox_gl.mdx +++ b/api_docs/kbn_mapbox_gl.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mapbox-gl title: "@kbn/mapbox-gl" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mapbox-gl plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/mapbox-gl'] --- import kbnMapboxGlObj from './kbn_mapbox_gl.devdocs.json'; diff --git a/api_docs/kbn_maps_vector_tile_utils.mdx b/api_docs/kbn_maps_vector_tile_utils.mdx index e8ef3ae422425..9ae49d7ce0efa 100644 --- a/api_docs/kbn_maps_vector_tile_utils.mdx +++ b/api_docs/kbn_maps_vector_tile_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-maps-vector-tile-utils title: "@kbn/maps-vector-tile-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/maps-vector-tile-utils plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/maps-vector-tile-utils'] --- import kbnMapsVectorTileUtilsObj from './kbn_maps_vector_tile_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_agg_utils.mdx b/api_docs/kbn_ml_agg_utils.mdx index ca8771a453015..4a5a3c029ed0e 100644 --- a/api_docs/kbn_ml_agg_utils.mdx +++ b/api_docs/kbn_ml_agg_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-agg-utils title: "@kbn/ml-agg-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-agg-utils plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-agg-utils'] --- import kbnMlAggUtilsObj from './kbn_ml_agg_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_anomaly_utils.mdx b/api_docs/kbn_ml_anomaly_utils.mdx index bdc5b04b162b4..1f294fc11c3af 100644 --- a/api_docs/kbn_ml_anomaly_utils.mdx +++ b/api_docs/kbn_ml_anomaly_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-anomaly-utils title: "@kbn/ml-anomaly-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-anomaly-utils plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-anomaly-utils'] --- import kbnMlAnomalyUtilsObj from './kbn_ml_anomaly_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_cancellable_search.mdx b/api_docs/kbn_ml_cancellable_search.mdx index d4063b1bf6970..46f5470f8356a 100644 --- a/api_docs/kbn_ml_cancellable_search.mdx +++ b/api_docs/kbn_ml_cancellable_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-cancellable-search title: "@kbn/ml-cancellable-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-cancellable-search plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-cancellable-search'] --- import kbnMlCancellableSearchObj from './kbn_ml_cancellable_search.devdocs.json'; diff --git a/api_docs/kbn_ml_category_validator.mdx b/api_docs/kbn_ml_category_validator.mdx index 1b6a692b55d6d..8141a358ec3e3 100644 --- a/api_docs/kbn_ml_category_validator.mdx +++ b/api_docs/kbn_ml_category_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-category-validator title: "@kbn/ml-category-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-category-validator plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-category-validator'] --- import kbnMlCategoryValidatorObj from './kbn_ml_category_validator.devdocs.json'; diff --git a/api_docs/kbn_ml_chi2test.mdx b/api_docs/kbn_ml_chi2test.mdx index e04f4dd447e28..49d63102ace65 100644 --- a/api_docs/kbn_ml_chi2test.mdx +++ b/api_docs/kbn_ml_chi2test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-chi2test title: "@kbn/ml-chi2test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-chi2test plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-chi2test'] --- import kbnMlChi2testObj from './kbn_ml_chi2test.devdocs.json'; diff --git a/api_docs/kbn_ml_data_frame_analytics_utils.mdx b/api_docs/kbn_ml_data_frame_analytics_utils.mdx index 890490143cbc2..50b0eb9739391 100644 --- a/api_docs/kbn_ml_data_frame_analytics_utils.mdx +++ b/api_docs/kbn_ml_data_frame_analytics_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-frame-analytics-utils title: "@kbn/ml-data-frame-analytics-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-frame-analytics-utils plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-data-frame-analytics-utils'] --- import kbnMlDataFrameAnalyticsUtilsObj from './kbn_ml_data_frame_analytics_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_data_grid.mdx b/api_docs/kbn_ml_data_grid.mdx index f431ca931d29a..bde65283e2e92 100644 --- a/api_docs/kbn_ml_data_grid.mdx +++ b/api_docs/kbn_ml_data_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-grid title: "@kbn/ml-data-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-grid plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-data-grid'] --- import kbnMlDataGridObj from './kbn_ml_data_grid.devdocs.json'; diff --git a/api_docs/kbn_ml_date_picker.mdx b/api_docs/kbn_ml_date_picker.mdx index 27d82bd94026a..846f1e25db88f 100644 --- a/api_docs/kbn_ml_date_picker.mdx +++ b/api_docs/kbn_ml_date_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-picker title: "@kbn/ml-date-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-picker plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-date-picker'] --- import kbnMlDatePickerObj from './kbn_ml_date_picker.devdocs.json'; diff --git a/api_docs/kbn_ml_date_utils.mdx b/api_docs/kbn_ml_date_utils.mdx index 4856e8a1eca70..bf05a3360a478 100644 --- a/api_docs/kbn_ml_date_utils.mdx +++ b/api_docs/kbn_ml_date_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-utils title: "@kbn/ml-date-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-utils plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-date-utils'] --- import kbnMlDateUtilsObj from './kbn_ml_date_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_error_utils.mdx b/api_docs/kbn_ml_error_utils.mdx index ceee1ba563654..19d7b22274ee9 100644 --- a/api_docs/kbn_ml_error_utils.mdx +++ b/api_docs/kbn_ml_error_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-error-utils title: "@kbn/ml-error-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-error-utils plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-error-utils'] --- import kbnMlErrorUtilsObj from './kbn_ml_error_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_field_stats_flyout.mdx b/api_docs/kbn_ml_field_stats_flyout.mdx index 0725342786287..8f10d0839ceba 100644 --- a/api_docs/kbn_ml_field_stats_flyout.mdx +++ b/api_docs/kbn_ml_field_stats_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-field-stats-flyout title: "@kbn/ml-field-stats-flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-field-stats-flyout plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-field-stats-flyout'] --- import kbnMlFieldStatsFlyoutObj from './kbn_ml_field_stats_flyout.devdocs.json'; diff --git a/api_docs/kbn_ml_in_memory_table.mdx b/api_docs/kbn_ml_in_memory_table.mdx index fc8e46fbc914e..5c5f5c60992fb 100644 --- a/api_docs/kbn_ml_in_memory_table.mdx +++ b/api_docs/kbn_ml_in_memory_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-in-memory-table title: "@kbn/ml-in-memory-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-in-memory-table plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-in-memory-table'] --- import kbnMlInMemoryTableObj from './kbn_ml_in_memory_table.devdocs.json'; diff --git a/api_docs/kbn_ml_is_defined.mdx b/api_docs/kbn_ml_is_defined.mdx index 99eb683335157..b3e9044566faa 100644 --- a/api_docs/kbn_ml_is_defined.mdx +++ b/api_docs/kbn_ml_is_defined.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-defined title: "@kbn/ml-is-defined" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-defined plugin -date: 2024-12-21 +date: 2024-12-23 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 b2ac897e15897..b0041b58d0f27 100644 --- a/api_docs/kbn_ml_is_populated_object.mdx +++ b/api_docs/kbn_ml_is_populated_object.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-populated-object title: "@kbn/ml-is-populated-object" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-populated-object plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-is-populated-object'] --- import kbnMlIsPopulatedObjectObj from './kbn_ml_is_populated_object.devdocs.json'; diff --git a/api_docs/kbn_ml_kibana_theme.mdx b/api_docs/kbn_ml_kibana_theme.mdx index eaf6d0098156d..f1a3ed3db1955 100644 --- a/api_docs/kbn_ml_kibana_theme.mdx +++ b/api_docs/kbn_ml_kibana_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-kibana-theme title: "@kbn/ml-kibana-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-kibana-theme plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-kibana-theme'] --- import kbnMlKibanaThemeObj from './kbn_ml_kibana_theme.devdocs.json'; diff --git a/api_docs/kbn_ml_local_storage.mdx b/api_docs/kbn_ml_local_storage.mdx index 6b492f2829591..57baf8778c0a1 100644 --- a/api_docs/kbn_ml_local_storage.mdx +++ b/api_docs/kbn_ml_local_storage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-local-storage title: "@kbn/ml-local-storage" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-local-storage plugin -date: 2024-12-21 +date: 2024-12-23 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 ec8d21f08c604..14c487124c36c 100644 --- a/api_docs/kbn_ml_nested_property.mdx +++ b/api_docs/kbn_ml_nested_property.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-nested-property title: "@kbn/ml-nested-property" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-nested-property plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-nested-property'] --- import kbnMlNestedPropertyObj from './kbn_ml_nested_property.devdocs.json'; diff --git a/api_docs/kbn_ml_number_utils.mdx b/api_docs/kbn_ml_number_utils.mdx index a1856a73b3c5e..3b9d8752ff1fd 100644 --- a/api_docs/kbn_ml_number_utils.mdx +++ b/api_docs/kbn_ml_number_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-number-utils title: "@kbn/ml-number-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-number-utils plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-number-utils'] --- import kbnMlNumberUtilsObj from './kbn_ml_number_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_parse_interval.mdx b/api_docs/kbn_ml_parse_interval.mdx index 7599a74406a37..55aa1e2c3826e 100644 --- a/api_docs/kbn_ml_parse_interval.mdx +++ b/api_docs/kbn_ml_parse_interval.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-parse-interval title: "@kbn/ml-parse-interval" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-parse-interval plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-parse-interval'] --- import kbnMlParseIntervalObj from './kbn_ml_parse_interval.devdocs.json'; diff --git a/api_docs/kbn_ml_query_utils.mdx b/api_docs/kbn_ml_query_utils.mdx index afeeeac9c642e..bd4e320b52094 100644 --- a/api_docs/kbn_ml_query_utils.mdx +++ b/api_docs/kbn_ml_query_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-query-utils title: "@kbn/ml-query-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-query-utils plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-query-utils'] --- import kbnMlQueryUtilsObj from './kbn_ml_query_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_random_sampler_utils.mdx b/api_docs/kbn_ml_random_sampler_utils.mdx index cdbfe028a6ae7..56ea1d9aeda07 100644 --- a/api_docs/kbn_ml_random_sampler_utils.mdx +++ b/api_docs/kbn_ml_random_sampler_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-random-sampler-utils title: "@kbn/ml-random-sampler-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-random-sampler-utils plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-random-sampler-utils'] --- import kbnMlRandomSamplerUtilsObj from './kbn_ml_random_sampler_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_route_utils.mdx b/api_docs/kbn_ml_route_utils.mdx index 30450d734e5f9..755c70017a50a 100644 --- a/api_docs/kbn_ml_route_utils.mdx +++ b/api_docs/kbn_ml_route_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-route-utils title: "@kbn/ml-route-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-route-utils plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-route-utils'] --- import kbnMlRouteUtilsObj from './kbn_ml_route_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_runtime_field_utils.mdx b/api_docs/kbn_ml_runtime_field_utils.mdx index d4183cf52c367..5b2214291896d 100644 --- a/api_docs/kbn_ml_runtime_field_utils.mdx +++ b/api_docs/kbn_ml_runtime_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-runtime-field-utils title: "@kbn/ml-runtime-field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-runtime-field-utils plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-runtime-field-utils'] --- import kbnMlRuntimeFieldUtilsObj from './kbn_ml_runtime_field_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_string_hash.mdx b/api_docs/kbn_ml_string_hash.mdx index 28645dcae16f6..ce65f54aed17b 100644 --- a/api_docs/kbn_ml_string_hash.mdx +++ b/api_docs/kbn_ml_string_hash.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-string-hash title: "@kbn/ml-string-hash" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-string-hash plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-string-hash'] --- import kbnMlStringHashObj from './kbn_ml_string_hash.devdocs.json'; diff --git a/api_docs/kbn_ml_time_buckets.mdx b/api_docs/kbn_ml_time_buckets.mdx index 94ad3e67bed72..2ed79c3fde358 100644 --- a/api_docs/kbn_ml_time_buckets.mdx +++ b/api_docs/kbn_ml_time_buckets.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-time-buckets title: "@kbn/ml-time-buckets" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-time-buckets plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-time-buckets'] --- import kbnMlTimeBucketsObj from './kbn_ml_time_buckets.devdocs.json'; diff --git a/api_docs/kbn_ml_trained_models_utils.mdx b/api_docs/kbn_ml_trained_models_utils.mdx index b940c05a44a47..ccb140e143b79 100644 --- a/api_docs/kbn_ml_trained_models_utils.mdx +++ b/api_docs/kbn_ml_trained_models_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-trained-models-utils title: "@kbn/ml-trained-models-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-trained-models-utils plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-trained-models-utils'] --- import kbnMlTrainedModelsUtilsObj from './kbn_ml_trained_models_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_ui_actions.mdx b/api_docs/kbn_ml_ui_actions.mdx index 5d763e8bdc9a5..8561be8682976 100644 --- a/api_docs/kbn_ml_ui_actions.mdx +++ b/api_docs/kbn_ml_ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-ui-actions title: "@kbn/ml-ui-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-ui-actions plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-ui-actions'] --- import kbnMlUiActionsObj from './kbn_ml_ui_actions.devdocs.json'; diff --git a/api_docs/kbn_ml_url_state.mdx b/api_docs/kbn_ml_url_state.mdx index 8c02f6c6363c0..08c475830d8c3 100644 --- a/api_docs/kbn_ml_url_state.mdx +++ b/api_docs/kbn_ml_url_state.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-url-state title: "@kbn/ml-url-state" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-url-state plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-url-state'] --- import kbnMlUrlStateObj from './kbn_ml_url_state.devdocs.json'; diff --git a/api_docs/kbn_ml_validators.mdx b/api_docs/kbn_ml_validators.mdx index 8a3d1f21be893..ca0f29f9ac22c 100644 --- a/api_docs/kbn_ml_validators.mdx +++ b/api_docs/kbn_ml_validators.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-validators title: "@kbn/ml-validators" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-validators plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-validators'] --- import kbnMlValidatorsObj from './kbn_ml_validators.devdocs.json'; diff --git a/api_docs/kbn_mock_idp_utils.mdx b/api_docs/kbn_mock_idp_utils.mdx index a66cb125ff281..e9ede42efe5ab 100644 --- a/api_docs/kbn_mock_idp_utils.mdx +++ b/api_docs/kbn_mock_idp_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mock-idp-utils title: "@kbn/mock-idp-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mock-idp-utils plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/mock-idp-utils'] --- import kbnMockIdpUtilsObj from './kbn_mock_idp_utils.devdocs.json'; diff --git a/api_docs/kbn_monaco.mdx b/api_docs/kbn_monaco.mdx index be73463630c4f..32eb916ebc760 100644 --- a/api_docs/kbn_monaco.mdx +++ b/api_docs/kbn_monaco.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-monaco title: "@kbn/monaco" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/monaco plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/monaco'] --- import kbnMonacoObj from './kbn_monaco.devdocs.json'; diff --git a/api_docs/kbn_object_versioning.mdx b/api_docs/kbn_object_versioning.mdx index c91d1d943dc39..00ba950395c11 100644 --- a/api_docs/kbn_object_versioning.mdx +++ b/api_docs/kbn_object_versioning.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-object-versioning title: "@kbn/object-versioning" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/object-versioning plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/object-versioning'] --- import kbnObjectVersioningObj from './kbn_object_versioning.devdocs.json'; diff --git a/api_docs/kbn_object_versioning_utils.mdx b/api_docs/kbn_object_versioning_utils.mdx index 8f03406b0f7fe..58d9b2ac60b26 100644 --- a/api_docs/kbn_object_versioning_utils.mdx +++ b/api_docs/kbn_object_versioning_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-object-versioning-utils title: "@kbn/object-versioning-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/object-versioning-utils plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/object-versioning-utils'] --- import kbnObjectVersioningUtilsObj from './kbn_object_versioning_utils.devdocs.json'; diff --git a/api_docs/kbn_observability_alert_details.mdx b/api_docs/kbn_observability_alert_details.mdx index ea90ec85c5747..c1a1134d0e32b 100644 --- a/api_docs/kbn_observability_alert_details.mdx +++ b/api_docs/kbn_observability_alert_details.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alert-details title: "@kbn/observability-alert-details" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alert-details plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alert-details'] --- import kbnObservabilityAlertDetailsObj from './kbn_observability_alert_details.devdocs.json'; diff --git a/api_docs/kbn_observability_alerting_rule_utils.mdx b/api_docs/kbn_observability_alerting_rule_utils.mdx index 15131e0a19884..c197a139ecf83 100644 --- a/api_docs/kbn_observability_alerting_rule_utils.mdx +++ b/api_docs/kbn_observability_alerting_rule_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alerting-rule-utils title: "@kbn/observability-alerting-rule-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alerting-rule-utils plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alerting-rule-utils'] --- import kbnObservabilityAlertingRuleUtilsObj from './kbn_observability_alerting_rule_utils.devdocs.json'; diff --git a/api_docs/kbn_observability_alerting_test_data.mdx b/api_docs/kbn_observability_alerting_test_data.mdx index 21dc0337db9b3..2709ca24996d8 100644 --- a/api_docs/kbn_observability_alerting_test_data.mdx +++ b/api_docs/kbn_observability_alerting_test_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alerting-test-data title: "@kbn/observability-alerting-test-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alerting-test-data plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alerting-test-data'] --- import kbnObservabilityAlertingTestDataObj from './kbn_observability_alerting_test_data.devdocs.json'; diff --git a/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx b/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx index 4758ba3884d97..1239c26cbad70 100644 --- a/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx +++ b/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-get-padded-alert-time-range-util title: "@kbn/observability-get-padded-alert-time-range-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-get-padded-alert-time-range-util plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-get-padded-alert-time-range-util'] --- import kbnObservabilityGetPaddedAlertTimeRangeUtilObj from './kbn_observability_get_padded_alert_time_range_util.devdocs.json'; diff --git a/api_docs/kbn_observability_logs_overview.mdx b/api_docs/kbn_observability_logs_overview.mdx index 3623af25e4283..9ceb801d34203 100644 --- a/api_docs/kbn_observability_logs_overview.mdx +++ b/api_docs/kbn_observability_logs_overview.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-logs-overview title: "@kbn/observability-logs-overview" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-logs-overview plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-logs-overview'] --- import kbnObservabilityLogsOverviewObj from './kbn_observability_logs_overview.devdocs.json'; diff --git a/api_docs/kbn_observability_synthetics_test_data.mdx b/api_docs/kbn_observability_synthetics_test_data.mdx index 501f63109a89d..31313e8be62e1 100644 --- a/api_docs/kbn_observability_synthetics_test_data.mdx +++ b/api_docs/kbn_observability_synthetics_test_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-synthetics-test-data title: "@kbn/observability-synthetics-test-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-synthetics-test-data plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-synthetics-test-data'] --- import kbnObservabilitySyntheticsTestDataObj from './kbn_observability_synthetics_test_data.devdocs.json'; diff --git a/api_docs/kbn_openapi_bundler.mdx b/api_docs/kbn_openapi_bundler.mdx index bf3d1a202f32b..3dc4ab41164fb 100644 --- a/api_docs/kbn_openapi_bundler.mdx +++ b/api_docs/kbn_openapi_bundler.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-openapi-bundler title: "@kbn/openapi-bundler" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/openapi-bundler plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/openapi-bundler'] --- import kbnOpenapiBundlerObj from './kbn_openapi_bundler.devdocs.json'; diff --git a/api_docs/kbn_openapi_generator.mdx b/api_docs/kbn_openapi_generator.mdx index 97f7e64f23436..921f7e363d31c 100644 --- a/api_docs/kbn_openapi_generator.mdx +++ b/api_docs/kbn_openapi_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-openapi-generator title: "@kbn/openapi-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/openapi-generator plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/openapi-generator'] --- import kbnOpenapiGeneratorObj from './kbn_openapi_generator.devdocs.json'; diff --git a/api_docs/kbn_optimizer.mdx b/api_docs/kbn_optimizer.mdx index 365d6191c54a6..727ad63b31f28 100644 --- a/api_docs/kbn_optimizer.mdx +++ b/api_docs/kbn_optimizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer title: "@kbn/optimizer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer plugin -date: 2024-12-21 +date: 2024-12-23 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 3009d2ac70508..f2a1ffec91d4a 100644 --- a/api_docs/kbn_optimizer_webpack_helpers.mdx +++ b/api_docs/kbn_optimizer_webpack_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer-webpack-helpers title: "@kbn/optimizer-webpack-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer-webpack-helpers plugin -date: 2024-12-21 +date: 2024-12-23 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 94f108723ccb7..6c4524613eca6 100644 --- a/api_docs/kbn_osquery_io_ts_types.mdx +++ b/api_docs/kbn_osquery_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-osquery-io-ts-types title: "@kbn/osquery-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/osquery-io-ts-types plugin -date: 2024-12-21 +date: 2024-12-23 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_palettes.mdx b/api_docs/kbn_palettes.mdx index 17ada8b6fcb1d..db566346d7fe2 100644 --- a/api_docs/kbn_palettes.mdx +++ b/api_docs/kbn_palettes.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-palettes title: "@kbn/palettes" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/palettes plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/palettes'] --- import kbnPalettesObj from './kbn_palettes.devdocs.json'; diff --git a/api_docs/kbn_panel_loader.mdx b/api_docs/kbn_panel_loader.mdx index c13697c88f915..1a53fe8123a7f 100644 --- a/api_docs/kbn_panel_loader.mdx +++ b/api_docs/kbn_panel_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-panel-loader title: "@kbn/panel-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/panel-loader plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/panel-loader'] --- import kbnPanelLoaderObj from './kbn_panel_loader.devdocs.json'; diff --git a/api_docs/kbn_performance_testing_dataset_extractor.mdx b/api_docs/kbn_performance_testing_dataset_extractor.mdx index 3017f5ca2241c..82363ff74c2ac 100644 --- a/api_docs/kbn_performance_testing_dataset_extractor.mdx +++ b/api_docs/kbn_performance_testing_dataset_extractor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-performance-testing-dataset-extractor title: "@kbn/performance-testing-dataset-extractor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/performance-testing-dataset-extractor plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/performance-testing-dataset-extractor'] --- import kbnPerformanceTestingDatasetExtractorObj from './kbn_performance_testing_dataset_extractor.devdocs.json'; diff --git a/api_docs/kbn_plugin_check.mdx b/api_docs/kbn_plugin_check.mdx index f3f42312e5410..00e723fb01f48 100644 --- a/api_docs/kbn_plugin_check.mdx +++ b/api_docs/kbn_plugin_check.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-check title: "@kbn/plugin-check" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-check plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-check'] --- import kbnPluginCheckObj from './kbn_plugin_check.devdocs.json'; diff --git a/api_docs/kbn_plugin_generator.mdx b/api_docs/kbn_plugin_generator.mdx index 5f07df4fe8db0..0dfdf4b848cf1 100644 --- a/api_docs/kbn_plugin_generator.mdx +++ b/api_docs/kbn_plugin_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-generator title: "@kbn/plugin-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-generator plugin -date: 2024-12-21 +date: 2024-12-23 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 ed027c089dbd5..8699bb4413fb0 100644 --- a/api_docs/kbn_plugin_helpers.mdx +++ b/api_docs/kbn_plugin_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-helpers title: "@kbn/plugin-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-helpers plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-helpers'] --- import kbnPluginHelpersObj from './kbn_plugin_helpers.devdocs.json'; diff --git a/api_docs/kbn_presentation_containers.mdx b/api_docs/kbn_presentation_containers.mdx index 5a235508f53d3..093700a3ad7bd 100644 --- a/api_docs/kbn_presentation_containers.mdx +++ b/api_docs/kbn_presentation_containers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-presentation-containers title: "@kbn/presentation-containers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/presentation-containers plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-containers'] --- import kbnPresentationContainersObj from './kbn_presentation_containers.devdocs.json'; diff --git a/api_docs/kbn_presentation_publishing.mdx b/api_docs/kbn_presentation_publishing.mdx index 0b82b9e732d0a..d83acc8a77295 100644 --- a/api_docs/kbn_presentation_publishing.mdx +++ b/api_docs/kbn_presentation_publishing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-presentation-publishing title: "@kbn/presentation-publishing" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/presentation-publishing plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-publishing'] --- import kbnPresentationPublishingObj from './kbn_presentation_publishing.devdocs.json'; diff --git a/api_docs/kbn_product_doc_artifact_builder.mdx b/api_docs/kbn_product_doc_artifact_builder.mdx index a03c516ad751a..f079801bb6c30 100644 --- a/api_docs/kbn_product_doc_artifact_builder.mdx +++ b/api_docs/kbn_product_doc_artifact_builder.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-product-doc-artifact-builder title: "@kbn/product-doc-artifact-builder" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/product-doc-artifact-builder plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/product-doc-artifact-builder'] --- import kbnProductDocArtifactBuilderObj from './kbn_product_doc_artifact_builder.devdocs.json'; diff --git a/api_docs/kbn_product_doc_common.mdx b/api_docs/kbn_product_doc_common.mdx index 627f9ee6c2501..b515de194b0f1 100644 --- a/api_docs/kbn_product_doc_common.mdx +++ b/api_docs/kbn_product_doc_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-product-doc-common title: "@kbn/product-doc-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/product-doc-common plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/product-doc-common'] --- import kbnProductDocCommonObj from './kbn_product_doc_common.devdocs.json'; diff --git a/api_docs/kbn_profiling_utils.mdx b/api_docs/kbn_profiling_utils.mdx index a8fc6206688bb..5aa8ba80a3d2a 100644 --- a/api_docs/kbn_profiling_utils.mdx +++ b/api_docs/kbn_profiling_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-profiling-utils title: "@kbn/profiling-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/profiling-utils plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/profiling-utils'] --- import kbnProfilingUtilsObj from './kbn_profiling_utils.devdocs.json'; diff --git a/api_docs/kbn_random_sampling.mdx b/api_docs/kbn_random_sampling.mdx index 67b59c350eb5c..eadfbb0d8294e 100644 --- a/api_docs/kbn_random_sampling.mdx +++ b/api_docs/kbn_random_sampling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-random-sampling title: "@kbn/random-sampling" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/random-sampling plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/random-sampling'] --- import kbnRandomSamplingObj from './kbn_random_sampling.devdocs.json'; diff --git a/api_docs/kbn_react_field.mdx b/api_docs/kbn_react_field.mdx index c2fb54eb371f8..c130fc6d3044a 100644 --- a/api_docs/kbn_react_field.mdx +++ b/api_docs/kbn_react_field.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-field title: "@kbn/react-field" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-field plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field'] --- import kbnReactFieldObj from './kbn_react_field.devdocs.json'; diff --git a/api_docs/kbn_react_hooks.mdx b/api_docs/kbn_react_hooks.mdx index 103531464ce92..0e95a9cba811d 100644 --- a/api_docs/kbn_react_hooks.mdx +++ b/api_docs/kbn_react_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-hooks title: "@kbn/react-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-hooks plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-hooks'] --- import kbnReactHooksObj from './kbn_react_hooks.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_common.mdx b/api_docs/kbn_react_kibana_context_common.mdx index 5408d90e00b47..6f4d029164a19 100644 --- a/api_docs/kbn_react_kibana_context_common.mdx +++ b/api_docs/kbn_react_kibana_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-common title: "@kbn/react-kibana-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-common plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-common'] --- import kbnReactKibanaContextCommonObj from './kbn_react_kibana_context_common.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_render.mdx b/api_docs/kbn_react_kibana_context_render.mdx index 220a7629a96bd..b077b41290718 100644 --- a/api_docs/kbn_react_kibana_context_render.mdx +++ b/api_docs/kbn_react_kibana_context_render.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-render title: "@kbn/react-kibana-context-render" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-render plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-render'] --- import kbnReactKibanaContextRenderObj from './kbn_react_kibana_context_render.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_root.mdx b/api_docs/kbn_react_kibana_context_root.mdx index 98d6118114bee..c798e6a1817e1 100644 --- a/api_docs/kbn_react_kibana_context_root.mdx +++ b/api_docs/kbn_react_kibana_context_root.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-root title: "@kbn/react-kibana-context-root" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-root plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-root'] --- import kbnReactKibanaContextRootObj from './kbn_react_kibana_context_root.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_styled.mdx b/api_docs/kbn_react_kibana_context_styled.mdx index 575917118a1b5..78567522eb232 100644 --- a/api_docs/kbn_react_kibana_context_styled.mdx +++ b/api_docs/kbn_react_kibana_context_styled.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-styled title: "@kbn/react-kibana-context-styled" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-styled plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-styled'] --- import kbnReactKibanaContextStyledObj from './kbn_react_kibana_context_styled.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_theme.mdx b/api_docs/kbn_react_kibana_context_theme.mdx index 2b87057224a4a..3a7f5a62459f6 100644 --- a/api_docs/kbn_react_kibana_context_theme.mdx +++ b/api_docs/kbn_react_kibana_context_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-theme title: "@kbn/react-kibana-context-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-theme plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-theme'] --- import kbnReactKibanaContextThemeObj from './kbn_react_kibana_context_theme.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_mount.mdx b/api_docs/kbn_react_kibana_mount.mdx index 43ab34089b299..009ff8928064c 100644 --- a/api_docs/kbn_react_kibana_mount.mdx +++ b/api_docs/kbn_react_kibana_mount.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-mount title: "@kbn/react-kibana-mount" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-mount plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-mount'] --- import kbnReactKibanaMountObj from './kbn_react_kibana_mount.devdocs.json'; diff --git a/api_docs/kbn_react_mute_legacy_root_warning.mdx b/api_docs/kbn_react_mute_legacy_root_warning.mdx index d2b721003ed20..b7c495e02bd56 100644 --- a/api_docs/kbn_react_mute_legacy_root_warning.mdx +++ b/api_docs/kbn_react_mute_legacy_root_warning.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-mute-legacy-root-warning title: "@kbn/react-mute-legacy-root-warning" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-mute-legacy-root-warning plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-mute-legacy-root-warning'] --- import kbnReactMuteLegacyRootWarningObj from './kbn_react_mute_legacy_root_warning.devdocs.json'; diff --git a/api_docs/kbn_recently_accessed.mdx b/api_docs/kbn_recently_accessed.mdx index 8106f2c1618bb..e763a03774e4f 100644 --- a/api_docs/kbn_recently_accessed.mdx +++ b/api_docs/kbn_recently_accessed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-recently-accessed title: "@kbn/recently-accessed" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/recently-accessed plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/recently-accessed'] --- import kbnRecentlyAccessedObj from './kbn_recently_accessed.devdocs.json'; diff --git a/api_docs/kbn_relocate.mdx b/api_docs/kbn_relocate.mdx index c9223c8b8289f..f34335960892c 100644 --- a/api_docs/kbn_relocate.mdx +++ b/api_docs/kbn_relocate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-relocate title: "@kbn/relocate" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/relocate plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/relocate'] --- import kbnRelocateObj from './kbn_relocate.devdocs.json'; diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx index a7356f66b58b7..ee7ce6af81a88 100644 --- a/api_docs/kbn_repo_file_maps.mdx +++ b/api_docs/kbn_repo_file_maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-file-maps title: "@kbn/repo-file-maps" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-file-maps plugin -date: 2024-12-21 +date: 2024-12-23 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 82145e0cdb39f..0acc8a696962a 100644 --- a/api_docs/kbn_repo_linter.mdx +++ b/api_docs/kbn_repo_linter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-linter title: "@kbn/repo-linter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-linter plugin -date: 2024-12-21 +date: 2024-12-23 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 9a291418814d8..8cafca86c776a 100644 --- a/api_docs/kbn_repo_path.mdx +++ b/api_docs/kbn_repo_path.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-path title: "@kbn/repo-path" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-path plugin -date: 2024-12-21 +date: 2024-12-23 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 4f8af1a7c5ee6..d4ae238dd1bab 100644 --- a/api_docs/kbn_repo_source_classifier.mdx +++ b/api_docs/kbn_repo_source_classifier.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-source-classifier title: "@kbn/repo-source-classifier" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-source-classifier plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-source-classifier'] --- import kbnRepoSourceClassifierObj from './kbn_repo_source_classifier.devdocs.json'; diff --git a/api_docs/kbn_reporting_common.mdx b/api_docs/kbn_reporting_common.mdx index e9df5964cbc61..718cb0d07c4f9 100644 --- a/api_docs/kbn_reporting_common.mdx +++ b/api_docs/kbn_reporting_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-common title: "@kbn/reporting-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-common plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-common'] --- import kbnReportingCommonObj from './kbn_reporting_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_csv_share_panel.mdx b/api_docs/kbn_reporting_csv_share_panel.mdx index 2800c184124ad..32923b0a696e2 100644 --- a/api_docs/kbn_reporting_csv_share_panel.mdx +++ b/api_docs/kbn_reporting_csv_share_panel.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-csv-share-panel title: "@kbn/reporting-csv-share-panel" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-csv-share-panel plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-csv-share-panel'] --- import kbnReportingCsvSharePanelObj from './kbn_reporting_csv_share_panel.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_csv.mdx b/api_docs/kbn_reporting_export_types_csv.mdx index 130141ce64d87..cfac3996a9d6d 100644 --- a/api_docs/kbn_reporting_export_types_csv.mdx +++ b/api_docs/kbn_reporting_export_types_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-csv title: "@kbn/reporting-export-types-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-csv plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-csv'] --- import kbnReportingExportTypesCsvObj from './kbn_reporting_export_types_csv.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_csv_common.mdx b/api_docs/kbn_reporting_export_types_csv_common.mdx index b095f2730a42b..68519877ff035 100644 --- a/api_docs/kbn_reporting_export_types_csv_common.mdx +++ b/api_docs/kbn_reporting_export_types_csv_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-csv-common title: "@kbn/reporting-export-types-csv-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-csv-common plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-csv-common'] --- import kbnReportingExportTypesCsvCommonObj from './kbn_reporting_export_types_csv_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_pdf.mdx b/api_docs/kbn_reporting_export_types_pdf.mdx index 4cacebd51549e..d50f95e340889 100644 --- a/api_docs/kbn_reporting_export_types_pdf.mdx +++ b/api_docs/kbn_reporting_export_types_pdf.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-pdf title: "@kbn/reporting-export-types-pdf" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-pdf plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-pdf'] --- import kbnReportingExportTypesPdfObj from './kbn_reporting_export_types_pdf.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_pdf_common.mdx b/api_docs/kbn_reporting_export_types_pdf_common.mdx index d4134463617ee..7ed86555ad613 100644 --- a/api_docs/kbn_reporting_export_types_pdf_common.mdx +++ b/api_docs/kbn_reporting_export_types_pdf_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-pdf-common title: "@kbn/reporting-export-types-pdf-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-pdf-common plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-pdf-common'] --- import kbnReportingExportTypesPdfCommonObj from './kbn_reporting_export_types_pdf_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_png.mdx b/api_docs/kbn_reporting_export_types_png.mdx index 76c3e1cf381b8..7829b859023cd 100644 --- a/api_docs/kbn_reporting_export_types_png.mdx +++ b/api_docs/kbn_reporting_export_types_png.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-png title: "@kbn/reporting-export-types-png" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-png plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-png'] --- import kbnReportingExportTypesPngObj from './kbn_reporting_export_types_png.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_png_common.mdx b/api_docs/kbn_reporting_export_types_png_common.mdx index 51099604ee0e5..8a322d470ac30 100644 --- a/api_docs/kbn_reporting_export_types_png_common.mdx +++ b/api_docs/kbn_reporting_export_types_png_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-png-common title: "@kbn/reporting-export-types-png-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-png-common plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-png-common'] --- import kbnReportingExportTypesPngCommonObj from './kbn_reporting_export_types_png_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_mocks_server.mdx b/api_docs/kbn_reporting_mocks_server.mdx index 913a85aecef90..91fbe308e6da8 100644 --- a/api_docs/kbn_reporting_mocks_server.mdx +++ b/api_docs/kbn_reporting_mocks_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-mocks-server title: "@kbn/reporting-mocks-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-mocks-server plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-mocks-server'] --- import kbnReportingMocksServerObj from './kbn_reporting_mocks_server.devdocs.json'; diff --git a/api_docs/kbn_reporting_public.mdx b/api_docs/kbn_reporting_public.mdx index 5dd1a4e7bea2b..3f782ffb015fa 100644 --- a/api_docs/kbn_reporting_public.mdx +++ b/api_docs/kbn_reporting_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-public title: "@kbn/reporting-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-public plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-public'] --- import kbnReportingPublicObj from './kbn_reporting_public.devdocs.json'; diff --git a/api_docs/kbn_reporting_server.mdx b/api_docs/kbn_reporting_server.mdx index 9a76eff0f4b0d..1f77e14bf3398 100644 --- a/api_docs/kbn_reporting_server.mdx +++ b/api_docs/kbn_reporting_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-server title: "@kbn/reporting-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-server plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-server'] --- import kbnReportingServerObj from './kbn_reporting_server.devdocs.json'; diff --git a/api_docs/kbn_resizable_layout.mdx b/api_docs/kbn_resizable_layout.mdx index 5b18e147dfbac..b196856296b00 100644 --- a/api_docs/kbn_resizable_layout.mdx +++ b/api_docs/kbn_resizable_layout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-resizable-layout title: "@kbn/resizable-layout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/resizable-layout plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/resizable-layout'] --- import kbnResizableLayoutObj from './kbn_resizable_layout.devdocs.json'; diff --git a/api_docs/kbn_response_ops_feature_flag_service.mdx b/api_docs/kbn_response_ops_feature_flag_service.mdx index 4dd0a2e5b3b67..f4a1c64129056 100644 --- a/api_docs/kbn_response_ops_feature_flag_service.mdx +++ b/api_docs/kbn_response_ops_feature_flag_service.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-response-ops-feature-flag-service title: "@kbn/response-ops-feature-flag-service" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/response-ops-feature-flag-service plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/response-ops-feature-flag-service'] --- import kbnResponseOpsFeatureFlagServiceObj from './kbn_response_ops_feature_flag_service.devdocs.json'; diff --git a/api_docs/kbn_response_ops_rule_form.mdx b/api_docs/kbn_response_ops_rule_form.mdx index 0c753d8fba274..9e3b2401798d7 100644 --- a/api_docs/kbn_response_ops_rule_form.mdx +++ b/api_docs/kbn_response_ops_rule_form.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-response-ops-rule-form title: "@kbn/response-ops-rule-form" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/response-ops-rule-form plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/response-ops-rule-form'] --- import kbnResponseOpsRuleFormObj from './kbn_response_ops_rule_form.devdocs.json'; diff --git a/api_docs/kbn_response_ops_rule_params.mdx b/api_docs/kbn_response_ops_rule_params.mdx index f9d79bb0bf1c2..780f12f617246 100644 --- a/api_docs/kbn_response_ops_rule_params.mdx +++ b/api_docs/kbn_response_ops_rule_params.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-response-ops-rule-params title: "@kbn/response-ops-rule-params" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/response-ops-rule-params plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/response-ops-rule-params'] --- import kbnResponseOpsRuleParamsObj from './kbn_response_ops_rule_params.devdocs.json'; diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx index 9faccc3ce6d98..6b17638a261a3 100644 --- a/api_docs/kbn_rison.mdx +++ b/api_docs/kbn_rison.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rison title: "@kbn/rison" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rison plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_rollup.mdx b/api_docs/kbn_rollup.mdx index a31ea63e2a97a..ed937c366ef70 100644 --- a/api_docs/kbn_rollup.mdx +++ b/api_docs/kbn_rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rollup title: "@kbn/rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rollup plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rollup'] --- import kbnRollupObj from './kbn_rollup.devdocs.json'; diff --git a/api_docs/kbn_router_to_openapispec.mdx b/api_docs/kbn_router_to_openapispec.mdx index 281691780563f..e648dc8487f94 100644 --- a/api_docs/kbn_router_to_openapispec.mdx +++ b/api_docs/kbn_router_to_openapispec.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-router-to-openapispec title: "@kbn/router-to-openapispec" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/router-to-openapispec plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/router-to-openapispec'] --- import kbnRouterToOpenapispecObj from './kbn_router_to_openapispec.devdocs.json'; diff --git a/api_docs/kbn_router_utils.mdx b/api_docs/kbn_router_utils.mdx index f7848856499da..2ea0840b79201 100644 --- a/api_docs/kbn_router_utils.mdx +++ b/api_docs/kbn_router_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-router-utils title: "@kbn/router-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/router-utils plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/router-utils'] --- import kbnRouterUtilsObj from './kbn_router_utils.devdocs.json'; diff --git a/api_docs/kbn_rrule.mdx b/api_docs/kbn_rrule.mdx index 0017d71e13853..5fa99e11fe5e0 100644 --- a/api_docs/kbn_rrule.mdx +++ b/api_docs/kbn_rrule.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rrule title: "@kbn/rrule" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rrule plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rrule'] --- import kbnRruleObj from './kbn_rrule.devdocs.json'; diff --git a/api_docs/kbn_rule_data_utils.mdx b/api_docs/kbn_rule_data_utils.mdx index 5815776be6c55..a5268af34b5f7 100644 --- a/api_docs/kbn_rule_data_utils.mdx +++ b/api_docs/kbn_rule_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rule-data-utils title: "@kbn/rule-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rule-data-utils plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rule-data-utils'] --- import kbnRuleDataUtilsObj from './kbn_rule_data_utils.devdocs.json'; diff --git a/api_docs/kbn_saved_objects_settings.mdx b/api_docs/kbn_saved_objects_settings.mdx index 8c938b4924d1b..ad1f43091f22f 100644 --- a/api_docs/kbn_saved_objects_settings.mdx +++ b/api_docs/kbn_saved_objects_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-saved-objects-settings title: "@kbn/saved-objects-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/saved-objects-settings plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/saved-objects-settings'] --- import kbnSavedObjectsSettingsObj from './kbn_saved_objects_settings.devdocs.json'; diff --git a/api_docs/kbn_saved_search_component.mdx b/api_docs/kbn_saved_search_component.mdx index ec2dd05c9b6f7..13764aa2ab0a6 100644 --- a/api_docs/kbn_saved_search_component.mdx +++ b/api_docs/kbn_saved_search_component.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-saved-search-component title: "@kbn/saved-search-component" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/saved-search-component plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/saved-search-component'] --- import kbnSavedSearchComponentObj from './kbn_saved_search_component.devdocs.json'; diff --git a/api_docs/kbn_scout.mdx b/api_docs/kbn_scout.mdx index c432bdfdd67c6..632d195918223 100644 --- a/api_docs/kbn_scout.mdx +++ b/api_docs/kbn_scout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-scout title: "@kbn/scout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/scout plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/scout'] --- import kbnScoutObj from './kbn_scout.devdocs.json'; diff --git a/api_docs/kbn_scout_info.mdx b/api_docs/kbn_scout_info.mdx index de4dd4c281c3f..b9678faee872c 100644 --- a/api_docs/kbn_scout_info.mdx +++ b/api_docs/kbn_scout_info.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-scout-info title: "@kbn/scout-info" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/scout-info plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/scout-info'] --- import kbnScoutInfoObj from './kbn_scout_info.devdocs.json'; diff --git a/api_docs/kbn_scout_reporting.mdx b/api_docs/kbn_scout_reporting.mdx index 3342de28b613c..d6203580a2c15 100644 --- a/api_docs/kbn_scout_reporting.mdx +++ b/api_docs/kbn_scout_reporting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-scout-reporting title: "@kbn/scout-reporting" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/scout-reporting plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/scout-reporting'] --- import kbnScoutReportingObj from './kbn_scout_reporting.devdocs.json'; diff --git a/api_docs/kbn_screenshotting_server.mdx b/api_docs/kbn_screenshotting_server.mdx index 6e68ee2274402..e412572b8714b 100644 --- a/api_docs/kbn_screenshotting_server.mdx +++ b/api_docs/kbn_screenshotting_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-screenshotting-server title: "@kbn/screenshotting-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/screenshotting-server plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/screenshotting-server'] --- import kbnScreenshottingServerObj from './kbn_screenshotting_server.devdocs.json'; diff --git a/api_docs/kbn_search_api_keys_components.mdx b/api_docs/kbn_search_api_keys_components.mdx index 5b2a3685fdaba..27ee456d91d49 100644 --- a/api_docs/kbn_search_api_keys_components.mdx +++ b/api_docs/kbn_search_api_keys_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-api-keys-components title: "@kbn/search-api-keys-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-api-keys-components plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-api-keys-components'] --- import kbnSearchApiKeysComponentsObj from './kbn_search_api_keys_components.devdocs.json'; diff --git a/api_docs/kbn_search_api_keys_server.mdx b/api_docs/kbn_search_api_keys_server.mdx index 7929ed2316fbe..4e74a36e16dda 100644 --- a/api_docs/kbn_search_api_keys_server.mdx +++ b/api_docs/kbn_search_api_keys_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-api-keys-server title: "@kbn/search-api-keys-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-api-keys-server plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-api-keys-server'] --- import kbnSearchApiKeysServerObj from './kbn_search_api_keys_server.devdocs.json'; diff --git a/api_docs/kbn_search_api_panels.mdx b/api_docs/kbn_search_api_panels.mdx index 3549e3044bfe5..8bc34e82cb4d4 100644 --- a/api_docs/kbn_search_api_panels.mdx +++ b/api_docs/kbn_search_api_panels.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-api-panels title: "@kbn/search-api-panels" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-api-panels plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-api-panels'] --- import kbnSearchApiPanelsObj from './kbn_search_api_panels.devdocs.json'; diff --git a/api_docs/kbn_search_connectors.mdx b/api_docs/kbn_search_connectors.mdx index feb4a636a0c0d..423e0e75dc377 100644 --- a/api_docs/kbn_search_connectors.mdx +++ b/api_docs/kbn_search_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-connectors title: "@kbn/search-connectors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-connectors plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-connectors'] --- import kbnSearchConnectorsObj from './kbn_search_connectors.devdocs.json'; diff --git a/api_docs/kbn_search_errors.mdx b/api_docs/kbn_search_errors.mdx index abb1669b54f49..16e10bbe6ae27 100644 --- a/api_docs/kbn_search_errors.mdx +++ b/api_docs/kbn_search_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-errors title: "@kbn/search-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-errors plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-errors'] --- import kbnSearchErrorsObj from './kbn_search_errors.devdocs.json'; diff --git a/api_docs/kbn_search_index_documents.mdx b/api_docs/kbn_search_index_documents.mdx index c6d773a5ff3ed..53abbc168312e 100644 --- a/api_docs/kbn_search_index_documents.mdx +++ b/api_docs/kbn_search_index_documents.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-index-documents title: "@kbn/search-index-documents" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-index-documents plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-index-documents'] --- import kbnSearchIndexDocumentsObj from './kbn_search_index_documents.devdocs.json'; diff --git a/api_docs/kbn_search_response_warnings.mdx b/api_docs/kbn_search_response_warnings.mdx index 448a2f87ff506..bdde712ea87bc 100644 --- a/api_docs/kbn_search_response_warnings.mdx +++ b/api_docs/kbn_search_response_warnings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-response-warnings title: "@kbn/search-response-warnings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-response-warnings plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-response-warnings'] --- import kbnSearchResponseWarningsObj from './kbn_search_response_warnings.devdocs.json'; diff --git a/api_docs/kbn_search_shared_ui.mdx b/api_docs/kbn_search_shared_ui.mdx index 95058a1429229..e03d124092f4a 100644 --- a/api_docs/kbn_search_shared_ui.mdx +++ b/api_docs/kbn_search_shared_ui.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-shared-ui title: "@kbn/search-shared-ui" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-shared-ui plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-shared-ui'] --- import kbnSearchSharedUiObj from './kbn_search_shared_ui.devdocs.json'; diff --git a/api_docs/kbn_search_types.mdx b/api_docs/kbn_search_types.mdx index efb0276863498..bb9bc8a5e5f7d 100644 --- a/api_docs/kbn_search_types.mdx +++ b/api_docs/kbn_search_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-types title: "@kbn/search-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-types plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-types'] --- import kbnSearchTypesObj from './kbn_search_types.devdocs.json'; diff --git a/api_docs/kbn_security_api_key_management.mdx b/api_docs/kbn_security_api_key_management.mdx index c8b0c44240fb0..43047e0a06e3f 100644 --- a/api_docs/kbn_security_api_key_management.mdx +++ b/api_docs/kbn_security_api_key_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-api-key-management title: "@kbn/security-api-key-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-api-key-management plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-api-key-management'] --- import kbnSecurityApiKeyManagementObj from './kbn_security_api_key_management.devdocs.json'; diff --git a/api_docs/kbn_security_authorization_core.mdx b/api_docs/kbn_security_authorization_core.mdx index 398336aea1847..42069984a4140 100644 --- a/api_docs/kbn_security_authorization_core.mdx +++ b/api_docs/kbn_security_authorization_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-authorization-core title: "@kbn/security-authorization-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-authorization-core plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-authorization-core'] --- import kbnSecurityAuthorizationCoreObj from './kbn_security_authorization_core.devdocs.json'; diff --git a/api_docs/kbn_security_authorization_core_common.mdx b/api_docs/kbn_security_authorization_core_common.mdx index 1fd084f7cbf0e..63f34c1a8e67f 100644 --- a/api_docs/kbn_security_authorization_core_common.mdx +++ b/api_docs/kbn_security_authorization_core_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-authorization-core-common title: "@kbn/security-authorization-core-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-authorization-core-common plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-authorization-core-common'] --- import kbnSecurityAuthorizationCoreCommonObj from './kbn_security_authorization_core_common.devdocs.json'; diff --git a/api_docs/kbn_security_form_components.mdx b/api_docs/kbn_security_form_components.mdx index 239baffcc7c0d..74fbd9484d1b2 100644 --- a/api_docs/kbn_security_form_components.mdx +++ b/api_docs/kbn_security_form_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-form-components title: "@kbn/security-form-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-form-components plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-form-components'] --- import kbnSecurityFormComponentsObj from './kbn_security_form_components.devdocs.json'; diff --git a/api_docs/kbn_security_hardening.mdx b/api_docs/kbn_security_hardening.mdx index 6c32d484e301c..07d1a4c059f21 100644 --- a/api_docs/kbn_security_hardening.mdx +++ b/api_docs/kbn_security_hardening.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-hardening title: "@kbn/security-hardening" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-hardening plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-hardening'] --- import kbnSecurityHardeningObj from './kbn_security_hardening.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_common.mdx b/api_docs/kbn_security_plugin_types_common.mdx index 1ca24596e0f26..1ce2da3d5249f 100644 --- a/api_docs/kbn_security_plugin_types_common.mdx +++ b/api_docs/kbn_security_plugin_types_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-common title: "@kbn/security-plugin-types-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-common plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-common'] --- import kbnSecurityPluginTypesCommonObj from './kbn_security_plugin_types_common.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_public.mdx b/api_docs/kbn_security_plugin_types_public.mdx index 56456ae7cd755..6f0b1125ba161 100644 --- a/api_docs/kbn_security_plugin_types_public.mdx +++ b/api_docs/kbn_security_plugin_types_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-public title: "@kbn/security-plugin-types-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-public plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-public'] --- import kbnSecurityPluginTypesPublicObj from './kbn_security_plugin_types_public.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_server.mdx b/api_docs/kbn_security_plugin_types_server.mdx index a5fb3f9632a20..da43c92793d98 100644 --- a/api_docs/kbn_security_plugin_types_server.mdx +++ b/api_docs/kbn_security_plugin_types_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-server title: "@kbn/security-plugin-types-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-server plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-server'] --- import kbnSecurityPluginTypesServerObj from './kbn_security_plugin_types_server.devdocs.json'; diff --git a/api_docs/kbn_security_role_management_model.mdx b/api_docs/kbn_security_role_management_model.mdx index 01adeecdd58de..9ee6415692b7d 100644 --- a/api_docs/kbn_security_role_management_model.mdx +++ b/api_docs/kbn_security_role_management_model.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-role-management-model title: "@kbn/security-role-management-model" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-role-management-model plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-role-management-model'] --- import kbnSecurityRoleManagementModelObj from './kbn_security_role_management_model.devdocs.json'; diff --git a/api_docs/kbn_security_solution_distribution_bar.mdx b/api_docs/kbn_security_solution_distribution_bar.mdx index 0e0f6fbe2246b..22da77a5c2232 100644 --- a/api_docs/kbn_security_solution_distribution_bar.mdx +++ b/api_docs/kbn_security_solution_distribution_bar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-distribution-bar title: "@kbn/security-solution-distribution-bar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-distribution-bar plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-distribution-bar'] --- import kbnSecuritySolutionDistributionBarObj from './kbn_security_solution_distribution_bar.devdocs.json'; diff --git a/api_docs/kbn_security_solution_features.mdx b/api_docs/kbn_security_solution_features.mdx index 7baed49a171d6..f5e569a87328a 100644 --- a/api_docs/kbn_security_solution_features.mdx +++ b/api_docs/kbn_security_solution_features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-features title: "@kbn/security-solution-features" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-features plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-features'] --- import kbnSecuritySolutionFeaturesObj from './kbn_security_solution_features.devdocs.json'; diff --git a/api_docs/kbn_security_solution_navigation.mdx b/api_docs/kbn_security_solution_navigation.mdx index c5b99947c24c5..83e8973ed3bcd 100644 --- a/api_docs/kbn_security_solution_navigation.mdx +++ b/api_docs/kbn_security_solution_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-navigation title: "@kbn/security-solution-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-navigation plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-navigation'] --- import kbnSecuritySolutionNavigationObj from './kbn_security_solution_navigation.devdocs.json'; diff --git a/api_docs/kbn_security_solution_side_nav.mdx b/api_docs/kbn_security_solution_side_nav.mdx index 0fd8b27aa384e..303c98ad4db38 100644 --- a/api_docs/kbn_security_solution_side_nav.mdx +++ b/api_docs/kbn_security_solution_side_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-side-nav title: "@kbn/security-solution-side-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-side-nav plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-side-nav'] --- import kbnSecuritySolutionSideNavObj from './kbn_security_solution_side_nav.devdocs.json'; diff --git a/api_docs/kbn_security_solution_storybook_config.mdx b/api_docs/kbn_security_solution_storybook_config.mdx index 11fa6f588aa40..9e59f5cf38d23 100644 --- a/api_docs/kbn_security_solution_storybook_config.mdx +++ b/api_docs/kbn_security_solution_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-storybook-config title: "@kbn/security-solution-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-storybook-config plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-storybook-config'] --- import kbnSecuritySolutionStorybookConfigObj from './kbn_security_solution_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_security_ui_components.mdx b/api_docs/kbn_security_ui_components.mdx index b21abdc7e36e0..3ff802112eaea 100644 --- a/api_docs/kbn_security_ui_components.mdx +++ b/api_docs/kbn_security_ui_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-ui-components title: "@kbn/security-ui-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-ui-components plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-ui-components'] --- import kbnSecurityUiComponentsObj from './kbn_security_ui_components.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_autocomplete.mdx b/api_docs/kbn_securitysolution_autocomplete.mdx index 30b54aeb0b42e..40111f7a844ef 100644 --- a/api_docs/kbn_securitysolution_autocomplete.mdx +++ b/api_docs/kbn_securitysolution_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-autocomplete title: "@kbn/securitysolution-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-autocomplete plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-autocomplete'] --- import kbnSecuritysolutionAutocompleteObj from './kbn_securitysolution_autocomplete.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_data_table.mdx b/api_docs/kbn_securitysolution_data_table.mdx index f2509f74f828b..94500ce4cf42a 100644 --- a/api_docs/kbn_securitysolution_data_table.mdx +++ b/api_docs/kbn_securitysolution_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-data-table title: "@kbn/securitysolution-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-data-table plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-data-table'] --- import kbnSecuritysolutionDataTableObj from './kbn_securitysolution_data_table.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_ecs.mdx b/api_docs/kbn_securitysolution_ecs.mdx index 1e8d08fe8dbe4..28d47b12b78bf 100644 --- a/api_docs/kbn_securitysolution_ecs.mdx +++ b/api_docs/kbn_securitysolution_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-ecs title: "@kbn/securitysolution-ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-ecs plugin -date: 2024-12-21 +date: 2024-12-23 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 b46f66524e70d..f0e552f43cc8a 100644 --- a/api_docs/kbn_securitysolution_es_utils.mdx +++ b/api_docs/kbn_securitysolution_es_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-es-utils title: "@kbn/securitysolution-es-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-es-utils plugin -date: 2024-12-21 +date: 2024-12-23 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 87bd96ac24ba1..7618e59f74b6a 100644 --- a/api_docs/kbn_securitysolution_exception_list_components.mdx +++ b/api_docs/kbn_securitysolution_exception_list_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-exception-list-components title: "@kbn/securitysolution-exception-list-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-exception-list-components plugin -date: 2024-12-21 +date: 2024-12-23 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 8eb1423803307..6d55af2d6d65f 100644 --- a/api_docs/kbn_securitysolution_hook_utils.mdx +++ b/api_docs/kbn_securitysolution_hook_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-hook-utils title: "@kbn/securitysolution-hook-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-hook-utils plugin -date: 2024-12-21 +date: 2024-12-23 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 f4b3b0884b3f6..0e5fcb7de5344 100644 --- a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-alerting-types title: "@kbn/securitysolution-io-ts-alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-alerting-types plugin -date: 2024-12-21 +date: 2024-12-23 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 d70f79b123bb8..c3093852aca1b 100644 --- a/api_docs/kbn_securitysolution_io_ts_list_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_list_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-list-types title: "@kbn/securitysolution-io-ts-list-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-list-types plugin -date: 2024-12-21 +date: 2024-12-23 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 f683d32b6f42a..5839cd0aaccf6 100644 --- a/api_docs/kbn_securitysolution_io_ts_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-types title: "@kbn/securitysolution-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-types plugin -date: 2024-12-21 +date: 2024-12-23 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 b9379cf559270..c59ebaed69ca4 100644 --- a/api_docs/kbn_securitysolution_io_ts_utils.mdx +++ b/api_docs/kbn_securitysolution_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-utils title: "@kbn/securitysolution-io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-utils plugin -date: 2024-12-21 +date: 2024-12-23 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 168886fc58f0f..0024d4b943b99 100644 --- a/api_docs/kbn_securitysolution_list_api.mdx +++ b/api_docs/kbn_securitysolution_list_api.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-api title: "@kbn/securitysolution-list-api" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-api plugin -date: 2024-12-21 +date: 2024-12-23 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 e2b45b5e4a35b..67b3b2cc2fa20 100644 --- a/api_docs/kbn_securitysolution_list_constants.mdx +++ b/api_docs/kbn_securitysolution_list_constants.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-constants title: "@kbn/securitysolution-list-constants" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-constants plugin -date: 2024-12-21 +date: 2024-12-23 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 be064825c36e5..dcf44a7bc6284 100644 --- a/api_docs/kbn_securitysolution_list_hooks.mdx +++ b/api_docs/kbn_securitysolution_list_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-hooks title: "@kbn/securitysolution-list-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-hooks plugin -date: 2024-12-21 +date: 2024-12-23 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 3e8018c782908..f23e814a6f9ff 100644 --- a/api_docs/kbn_securitysolution_list_utils.mdx +++ b/api_docs/kbn_securitysolution_list_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-utils title: "@kbn/securitysolution-list-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-utils plugin -date: 2024-12-21 +date: 2024-12-23 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 6a36012089efe..0ed82261721fb 100644 --- a/api_docs/kbn_securitysolution_rules.mdx +++ b/api_docs/kbn_securitysolution_rules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-rules title: "@kbn/securitysolution-rules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-rules plugin -date: 2024-12-21 +date: 2024-12-23 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 67a9380d0fabb..6e1244c7d7423 100644 --- a/api_docs/kbn_securitysolution_t_grid.mdx +++ b/api_docs/kbn_securitysolution_t_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-t-grid title: "@kbn/securitysolution-t-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-t-grid plugin -date: 2024-12-21 +date: 2024-12-23 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 044c5e8d5ffee..e2a9c027bc774 100644 --- a/api_docs/kbn_securitysolution_utils.mdx +++ b/api_docs/kbn_securitysolution_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-utils title: "@kbn/securitysolution-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-utils plugin -date: 2024-12-21 +date: 2024-12-23 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 cced5050ffe2b..7e8933fa0f9b7 100644 --- a/api_docs/kbn_server_http_tools.mdx +++ b/api_docs/kbn_server_http_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-http-tools title: "@kbn/server-http-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-http-tools plugin -date: 2024-12-21 +date: 2024-12-23 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 372b3d0ac09f2..e73ab0b2c6b14 100644 --- a/api_docs/kbn_server_route_repository.mdx +++ b/api_docs/kbn_server_route_repository.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository title: "@kbn/server-route-repository" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository'] --- import kbnServerRouteRepositoryObj from './kbn_server_route_repository.devdocs.json'; diff --git a/api_docs/kbn_server_route_repository_client.mdx b/api_docs/kbn_server_route_repository_client.mdx index f35f1741e3069..bfce89653262c 100644 --- a/api_docs/kbn_server_route_repository_client.mdx +++ b/api_docs/kbn_server_route_repository_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository-client title: "@kbn/server-route-repository-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository-client plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository-client'] --- import kbnServerRouteRepositoryClientObj from './kbn_server_route_repository_client.devdocs.json'; diff --git a/api_docs/kbn_server_route_repository_utils.mdx b/api_docs/kbn_server_route_repository_utils.mdx index 417e4c2baa580..f7c7a92adcc54 100644 --- a/api_docs/kbn_server_route_repository_utils.mdx +++ b/api_docs/kbn_server_route_repository_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository-utils title: "@kbn/server-route-repository-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository-utils plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository-utils'] --- import kbnServerRouteRepositoryUtilsObj from './kbn_server_route_repository_utils.devdocs.json'; diff --git a/api_docs/kbn_serverless_common_settings.mdx b/api_docs/kbn_serverless_common_settings.mdx index 403bd5f2d4542..b007d6cca93c0 100644 --- a/api_docs/kbn_serverless_common_settings.mdx +++ b/api_docs/kbn_serverless_common_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-common-settings title: "@kbn/serverless-common-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-common-settings plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-common-settings'] --- import kbnServerlessCommonSettingsObj from './kbn_serverless_common_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_observability_settings.mdx b/api_docs/kbn_serverless_observability_settings.mdx index 78a1a266eeb58..cfa39c2783337 100644 --- a/api_docs/kbn_serverless_observability_settings.mdx +++ b/api_docs/kbn_serverless_observability_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-observability-settings title: "@kbn/serverless-observability-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-observability-settings plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-observability-settings'] --- import kbnServerlessObservabilitySettingsObj from './kbn_serverless_observability_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_project_switcher.mdx b/api_docs/kbn_serverless_project_switcher.mdx index 423a7985d2ed8..763c24c492d5e 100644 --- a/api_docs/kbn_serverless_project_switcher.mdx +++ b/api_docs/kbn_serverless_project_switcher.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-project-switcher title: "@kbn/serverless-project-switcher" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-project-switcher plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-project-switcher'] --- import kbnServerlessProjectSwitcherObj from './kbn_serverless_project_switcher.devdocs.json'; diff --git a/api_docs/kbn_serverless_search_settings.mdx b/api_docs/kbn_serverless_search_settings.mdx index 691d0cd7998d8..90ca19e90ded7 100644 --- a/api_docs/kbn_serverless_search_settings.mdx +++ b/api_docs/kbn_serverless_search_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-search-settings title: "@kbn/serverless-search-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-search-settings plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-search-settings'] --- import kbnServerlessSearchSettingsObj from './kbn_serverless_search_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_security_settings.mdx b/api_docs/kbn_serverless_security_settings.mdx index 898ef19517308..d7d0262179bed 100644 --- a/api_docs/kbn_serverless_security_settings.mdx +++ b/api_docs/kbn_serverless_security_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-security-settings title: "@kbn/serverless-security-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-security-settings plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-security-settings'] --- import kbnServerlessSecuritySettingsObj from './kbn_serverless_security_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_storybook_config.mdx b/api_docs/kbn_serverless_storybook_config.mdx index 33a65cf5605cd..b4eb5ac16d5cf 100644 --- a/api_docs/kbn_serverless_storybook_config.mdx +++ b/api_docs/kbn_serverless_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-storybook-config title: "@kbn/serverless-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-storybook-config plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-storybook-config'] --- import kbnServerlessStorybookConfigObj from './kbn_serverless_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_shared_svg.mdx b/api_docs/kbn_shared_svg.mdx index 3275020eed15c..ca7b854f619a5 100644 --- a/api_docs/kbn_shared_svg.mdx +++ b/api_docs/kbn_shared_svg.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-svg title: "@kbn/shared-svg" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-svg plugin -date: 2024-12-21 +date: 2024-12-23 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 9891de336d504..956ad384d387e 100644 --- a/api_docs/kbn_shared_ux_avatar_solution.mdx +++ b/api_docs/kbn_shared_ux_avatar_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-solution title: "@kbn/shared-ux-avatar-solution" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-solution plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-solution'] --- import kbnSharedUxAvatarSolutionObj from './kbn_shared_ux_avatar_solution.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx index 048d129e581eb..a2ac7f4864802 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen title: "@kbn/shared-ux-button-exit-full-screen" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen'] --- import kbnSharedUxButtonExitFullScreenObj from './kbn_shared_ux_button_exit_full_screen.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_toolbar.mdx b/api_docs/kbn_shared_ux_button_toolbar.mdx index 0c6961addde54..afe7bad072edb 100644 --- a/api_docs/kbn_shared_ux_button_toolbar.mdx +++ b/api_docs/kbn_shared_ux_button_toolbar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-toolbar title: "@kbn/shared-ux-button-toolbar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-toolbar plugin -date: 2024-12-21 +date: 2024-12-23 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 4d569fc1fd773..a5a1793d6ddd8 100644 --- a/api_docs/kbn_shared_ux_card_no_data.mdx +++ b/api_docs/kbn_shared_ux_card_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data title: "@kbn/shared-ux-card-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data plugin -date: 2024-12-21 +date: 2024-12-23 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 d2ea3c0307965..1c9331256d8e4 100644 --- a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data-mocks title: "@kbn/shared-ux-card-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data-mocks plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-card-no-data-mocks'] --- import kbnSharedUxCardNoDataMocksObj from './kbn_shared_ux_card_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_chrome_navigation.mdx b/api_docs/kbn_shared_ux_chrome_navigation.mdx index 0913494083da9..d4d090476ac19 100644 --- a/api_docs/kbn_shared_ux_chrome_navigation.mdx +++ b/api_docs/kbn_shared_ux_chrome_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-chrome-navigation title: "@kbn/shared-ux-chrome-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-chrome-navigation plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-chrome-navigation'] --- import kbnSharedUxChromeNavigationObj from './kbn_shared_ux_chrome_navigation.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_error_boundary.mdx b/api_docs/kbn_shared_ux_error_boundary.mdx index ec7a24fcf41c7..d5f64fb56ddfa 100644 --- a/api_docs/kbn_shared_ux_error_boundary.mdx +++ b/api_docs/kbn_shared_ux_error_boundary.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-error-boundary title: "@kbn/shared-ux-error-boundary" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-error-boundary plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-error-boundary'] --- import kbnSharedUxErrorBoundaryObj from './kbn_shared_ux_error_boundary.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_context.mdx b/api_docs/kbn_shared_ux_file_context.mdx index e680fe82bd8f3..c64475fe2ff69 100644 --- a/api_docs/kbn_shared_ux_file_context.mdx +++ b/api_docs/kbn_shared_ux_file_context.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-context title: "@kbn/shared-ux-file-context" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-context plugin -date: 2024-12-21 +date: 2024-12-23 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 2185d4419637c..e29dcc6fd8471 100644 --- a/api_docs/kbn_shared_ux_file_image.mdx +++ b/api_docs/kbn_shared_ux_file_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image title: "@kbn/shared-ux-file-image" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image plugin -date: 2024-12-21 +date: 2024-12-23 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 018fb5b7784c0..e0500b1305428 100644 --- a/api_docs/kbn_shared_ux_file_image_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_image_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image-mocks title: "@kbn/shared-ux-file-image-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 58f582e1d9d9e..47c611a77134a 100644 --- a/api_docs/kbn_shared_ux_file_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-mocks title: "@kbn/shared-ux-file-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 1a41c19254ac5..b968ee4ea62f9 100644 --- a/api_docs/kbn_shared_ux_file_picker.mdx +++ b/api_docs/kbn_shared_ux_file_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-picker title: "@kbn/shared-ux-file-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-picker plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-picker'] --- import kbnSharedUxFilePickerObj from './kbn_shared_ux_file_picker.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_types.mdx b/api_docs/kbn_shared_ux_file_types.mdx index 748d923f6d09b..8014f04d41bb9 100644 --- a/api_docs/kbn_shared_ux_file_types.mdx +++ b/api_docs/kbn_shared_ux_file_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-types title: "@kbn/shared-ux-file-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-types plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-types'] --- import kbnSharedUxFileTypesObj from './kbn_shared_ux_file_types.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_upload.mdx b/api_docs/kbn_shared_ux_file_upload.mdx index bd088861e6653..f08608ef75015 100644 --- a/api_docs/kbn_shared_ux_file_upload.mdx +++ b/api_docs/kbn_shared_ux_file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-upload title: "@kbn/shared-ux-file-upload" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-upload plugin -date: 2024-12-21 +date: 2024-12-23 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 440034c6631e2..13eabed5c75b5 100644 --- a/api_docs/kbn_shared_ux_file_util.mdx +++ b/api_docs/kbn_shared_ux_file_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-util title: "@kbn/shared-ux-file-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-util plugin -date: 2024-12-21 +date: 2024-12-23 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 d5d3d607cc37a..355e351885443 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app title: "@kbn/shared-ux-link-redirect-app" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app plugin -date: 2024-12-21 +date: 2024-12-23 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 fea3b18334386..0acd72e18c731 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app-mocks title: "@kbn/shared-ux-link-redirect-app-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 8ad62a224c9c0..c66e85e583f0b 100644 --- a/api_docs/kbn_shared_ux_markdown.mdx +++ b/api_docs/kbn_shared_ux_markdown.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown title: "@kbn/shared-ux-markdown" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown plugin -date: 2024-12-21 +date: 2024-12-23 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 64ce71753ed57..114e20c9ecb96 100644 --- a/api_docs/kbn_shared_ux_markdown_mocks.mdx +++ b/api_docs/kbn_shared_ux_markdown_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown-mocks title: "@kbn/shared-ux-markdown-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 e229b42b73323..5c0e3e6e051e4 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data title: "@kbn/shared-ux-page-analytics-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data plugin -date: 2024-12-21 +date: 2024-12-23 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 6c2756c112bb0..3997ab6b07e4d 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data-mocks title: "@kbn/shared-ux-page-analytics-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 55900f079a9ae..0b22cabe855f4 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data title: "@kbn/shared-ux-page-kibana-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data plugin -date: 2024-12-21 +date: 2024-12-23 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 b70d673b35c58..356395d72c4c9 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data-mocks title: "@kbn/shared-ux-page-kibana-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 578b5c3f99237..9ff4796789531 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template title: "@kbn/shared-ux-page-kibana-template" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template plugin -date: 2024-12-21 +date: 2024-12-23 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 345bc5b08efa8..d29587b4be4f9 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template-mocks title: "@kbn/shared-ux-page-kibana-template-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 42eb175921d1c..699d1ebb78559 100644 --- a/api_docs/kbn_shared_ux_page_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data title: "@kbn/shared-ux-page-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data plugin -date: 2024-12-21 +date: 2024-12-23 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 6a8798880c7b8..69b95559399c6 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config title: "@kbn/shared-ux-page-no-data-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config plugin -date: 2024-12-21 +date: 2024-12-23 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 496d1ebcb8d1d..d87cb49c83f43 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config-mocks title: "@kbn/shared-ux-page-no-data-config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 a9281cc7948ad..68d78104e4500 100644 --- a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-mocks title: "@kbn/shared-ux-page-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 6a27c2b4fc6dc..143f8f9456b4c 100644 --- a/api_docs/kbn_shared_ux_page_solution_nav.mdx +++ b/api_docs/kbn_shared_ux_page_solution_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-solution-nav title: "@kbn/shared-ux-page-solution-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-solution-nav plugin -date: 2024-12-21 +date: 2024-12-23 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 1f897bd14e94c..2a81e8d477b0a 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views title: "@kbn/shared-ux-prompt-no-data-views" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views plugin -date: 2024-12-21 +date: 2024-12-23 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 92eaa8c258ab6..7cbdb11b5d115 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views-mocks title: "@kbn/shared-ux-prompt-no-data-views-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 52d7400cbd7b7..6104f5d801560 100644 --- a/api_docs/kbn_shared_ux_prompt_not_found.mdx +++ b/api_docs/kbn_shared_ux_prompt_not_found.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-not-found title: "@kbn/shared-ux-prompt-not-found" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-not-found plugin -date: 2024-12-21 +date: 2024-12-23 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 d6f2d770d9411..19debd5de2ea6 100644 --- a/api_docs/kbn_shared_ux_router.mdx +++ b/api_docs/kbn_shared_ux_router.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router title: "@kbn/shared-ux-router" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router plugin -date: 2024-12-21 +date: 2024-12-23 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 2a25496fde93d..00ef6a36464c3 100644 --- a/api_docs/kbn_shared_ux_router_mocks.mdx +++ b/api_docs/kbn_shared_ux_router_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router-mocks title: "@kbn/shared-ux-router-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router-mocks plugin -date: 2024-12-21 +date: 2024-12-23 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 314880aad30bb..c6c21ff0199f4 100644 --- a/api_docs/kbn_shared_ux_storybook_config.mdx +++ b/api_docs/kbn_shared_ux_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-config title: "@kbn/shared-ux-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-config plugin -date: 2024-12-21 +date: 2024-12-23 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 aca8c716c666b..2f020420fd483 100644 --- a/api_docs/kbn_shared_ux_storybook_mock.mdx +++ b/api_docs/kbn_shared_ux_storybook_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-mock title: "@kbn/shared-ux-storybook-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-mock plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-mock'] --- import kbnSharedUxStorybookMockObj from './kbn_shared_ux_storybook_mock.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_tabbed_modal.mdx b/api_docs/kbn_shared_ux_tabbed_modal.mdx index 242887f97ed5c..3ca2bb1729e9e 100644 --- a/api_docs/kbn_shared_ux_tabbed_modal.mdx +++ b/api_docs/kbn_shared_ux_tabbed_modal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-tabbed-modal title: "@kbn/shared-ux-tabbed-modal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-tabbed-modal plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-tabbed-modal'] --- import kbnSharedUxTabbedModalObj from './kbn_shared_ux_tabbed_modal.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_table_persist.mdx b/api_docs/kbn_shared_ux_table_persist.mdx index 31d2563532f52..9f3d1bf6c2ff6 100644 --- a/api_docs/kbn_shared_ux_table_persist.mdx +++ b/api_docs/kbn_shared_ux_table_persist.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-table-persist title: "@kbn/shared-ux-table-persist" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-table-persist plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-table-persist'] --- import kbnSharedUxTablePersistObj from './kbn_shared_ux_table_persist.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx index f6ecd8fefa466..e00f35430725e 100644 --- a/api_docs/kbn_shared_ux_utility.mdx +++ b/api_docs/kbn_shared_ux_utility.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-utility title: "@kbn/shared-ux-utility" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-utility plugin -date: 2024-12-21 +date: 2024-12-23 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 e39fe2427c558..41f6113e7a94f 100644 --- a/api_docs/kbn_slo_schema.mdx +++ b/api_docs/kbn_slo_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-slo-schema title: "@kbn/slo-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/slo-schema plugin -date: 2024-12-21 +date: 2024-12-23 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 2c2ababacb841..a5c6a74f6f53f 100644 --- a/api_docs/kbn_some_dev_log.mdx +++ b/api_docs/kbn_some_dev_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-some-dev-log title: "@kbn/some-dev-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/some-dev-log plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/some-dev-log'] --- import kbnSomeDevLogObj from './kbn_some_dev_log.devdocs.json'; diff --git a/api_docs/kbn_sort_predicates.mdx b/api_docs/kbn_sort_predicates.mdx index d541324d5ee63..81ceb458d7fb6 100644 --- a/api_docs/kbn_sort_predicates.mdx +++ b/api_docs/kbn_sort_predicates.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sort-predicates title: "@kbn/sort-predicates" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sort-predicates plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sort-predicates'] --- import kbnSortPredicatesObj from './kbn_sort_predicates.devdocs.json'; diff --git a/api_docs/kbn_sse_utils.mdx b/api_docs/kbn_sse_utils.mdx index cabf92c927890..83533004684e1 100644 --- a/api_docs/kbn_sse_utils.mdx +++ b/api_docs/kbn_sse_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sse-utils title: "@kbn/sse-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sse-utils plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sse-utils'] --- import kbnSseUtilsObj from './kbn_sse_utils.devdocs.json'; diff --git a/api_docs/kbn_sse_utils_client.mdx b/api_docs/kbn_sse_utils_client.mdx index d582fef84565c..d37bdcf73a98a 100644 --- a/api_docs/kbn_sse_utils_client.mdx +++ b/api_docs/kbn_sse_utils_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sse-utils-client title: "@kbn/sse-utils-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sse-utils-client plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sse-utils-client'] --- import kbnSseUtilsClientObj from './kbn_sse_utils_client.devdocs.json'; diff --git a/api_docs/kbn_sse_utils_server.mdx b/api_docs/kbn_sse_utils_server.mdx index 3b953e4fb62aa..f0cb22c91c8fb 100644 --- a/api_docs/kbn_sse_utils_server.mdx +++ b/api_docs/kbn_sse_utils_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sse-utils-server title: "@kbn/sse-utils-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sse-utils-server plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sse-utils-server'] --- import kbnSseUtilsServerObj from './kbn_sse_utils_server.devdocs.json'; diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx index 5f98ae329d2b5..35745dde8d875 100644 --- a/api_docs/kbn_std.mdx +++ b/api_docs/kbn_std.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-std title: "@kbn/std" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/std plugin -date: 2024-12-21 +date: 2024-12-23 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 069cead8ecca3..10250a9e89ce1 100644 --- a/api_docs/kbn_stdio_dev_helpers.mdx +++ b/api_docs/kbn_stdio_dev_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-stdio-dev-helpers title: "@kbn/stdio-dev-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/stdio-dev-helpers plugin -date: 2024-12-21 +date: 2024-12-23 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 a2eaf731d910a..48cadeca0f337 100644 --- a/api_docs/kbn_storybook.mdx +++ b/api_docs/kbn_storybook.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-storybook title: "@kbn/storybook" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/storybook plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook'] --- import kbnStorybookObj from './kbn_storybook.devdocs.json'; diff --git a/api_docs/kbn_synthetics_e2e.mdx b/api_docs/kbn_synthetics_e2e.mdx index 2110580b0e913..4cfa13a978dd2 100644 --- a/api_docs/kbn_synthetics_e2e.mdx +++ b/api_docs/kbn_synthetics_e2e.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-synthetics-e2e title: "@kbn/synthetics-e2e" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/synthetics-e2e plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/synthetics-e2e'] --- import kbnSyntheticsE2eObj from './kbn_synthetics_e2e.devdocs.json'; diff --git a/api_docs/kbn_synthetics_private_location.mdx b/api_docs/kbn_synthetics_private_location.mdx index ad27bbfb11c99..581b700d43d6c 100644 --- a/api_docs/kbn_synthetics_private_location.mdx +++ b/api_docs/kbn_synthetics_private_location.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-synthetics-private-location title: "@kbn/synthetics-private-location" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/synthetics-private-location plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/synthetics-private-location'] --- import kbnSyntheticsPrivateLocationObj from './kbn_synthetics_private_location.devdocs.json'; diff --git a/api_docs/kbn_telemetry_tools.mdx b/api_docs/kbn_telemetry_tools.mdx index be9af9931d488..526ea5ad7b6f1 100644 --- a/api_docs/kbn_telemetry_tools.mdx +++ b/api_docs/kbn_telemetry_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-telemetry-tools title: "@kbn/telemetry-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/telemetry-tools plugin -date: 2024-12-21 +date: 2024-12-23 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 373735c4ae194..1e98f2f5f093c 100644 --- a/api_docs/kbn_test.mdx +++ b/api_docs/kbn_test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test title: "@kbn/test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test'] --- import kbnTestObj from './kbn_test.devdocs.json'; diff --git a/api_docs/kbn_test_eui_helpers.mdx b/api_docs/kbn_test_eui_helpers.mdx index 351bc0e530bbc..0adf5eef6f03f 100644 --- a/api_docs/kbn_test_eui_helpers.mdx +++ b/api_docs/kbn_test_eui_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-eui-helpers title: "@kbn/test-eui-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-eui-helpers plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-eui-helpers'] --- import kbnTestEuiHelpersObj from './kbn_test_eui_helpers.devdocs.json'; diff --git a/api_docs/kbn_test_jest_helpers.mdx b/api_docs/kbn_test_jest_helpers.mdx index 3026842e0471b..551334b04ee2e 100644 --- a/api_docs/kbn_test_jest_helpers.mdx +++ b/api_docs/kbn_test_jest_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-jest-helpers title: "@kbn/test-jest-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-jest-helpers plugin -date: 2024-12-21 +date: 2024-12-23 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 1b657b038a0ed..f9cab8257345b 100644 --- a/api_docs/kbn_test_subj_selector.mdx +++ b/api_docs/kbn_test_subj_selector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-subj-selector title: "@kbn/test-subj-selector" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-subj-selector plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-subj-selector'] --- import kbnTestSubjSelectorObj from './kbn_test_subj_selector.devdocs.json'; diff --git a/api_docs/kbn_timerange.mdx b/api_docs/kbn_timerange.mdx index d184f7bb0dc4b..580cd05efa4a8 100644 --- a/api_docs/kbn_timerange.mdx +++ b/api_docs/kbn_timerange.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-timerange title: "@kbn/timerange" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/timerange plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/timerange'] --- import kbnTimerangeObj from './kbn_timerange.devdocs.json'; diff --git a/api_docs/kbn_tooling_log.mdx b/api_docs/kbn_tooling_log.mdx index 10ce7a54cb52f..405648c7ef862 100644 --- a/api_docs/kbn_tooling_log.mdx +++ b/api_docs/kbn_tooling_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-tooling-log title: "@kbn/tooling-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/tooling-log plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log'] --- import kbnToolingLogObj from './kbn_tooling_log.devdocs.json'; diff --git a/api_docs/kbn_transpose_utils.mdx b/api_docs/kbn_transpose_utils.mdx index e4899efa1d76f..dbb642325d4b5 100644 --- a/api_docs/kbn_transpose_utils.mdx +++ b/api_docs/kbn_transpose_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-transpose-utils title: "@kbn/transpose-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/transpose-utils plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/transpose-utils'] --- import kbnTransposeUtilsObj from './kbn_transpose_utils.devdocs.json'; diff --git a/api_docs/kbn_triggers_actions_ui_types.mdx b/api_docs/kbn_triggers_actions_ui_types.mdx index b15217fa92831..93cbd1ac6a47b 100644 --- a/api_docs/kbn_triggers_actions_ui_types.mdx +++ b/api_docs/kbn_triggers_actions_ui_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-triggers-actions-ui-types title: "@kbn/triggers-actions-ui-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/triggers-actions-ui-types plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/triggers-actions-ui-types'] --- import kbnTriggersActionsUiTypesObj from './kbn_triggers_actions_ui_types.devdocs.json'; diff --git a/api_docs/kbn_try_in_console.mdx b/api_docs/kbn_try_in_console.mdx index d3181b34deab4..58133979bb572 100644 --- a/api_docs/kbn_try_in_console.mdx +++ b/api_docs/kbn_try_in_console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-try-in-console title: "@kbn/try-in-console" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/try-in-console plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/try-in-console'] --- import kbnTryInConsoleObj from './kbn_try_in_console.devdocs.json'; diff --git a/api_docs/kbn_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx index 314f24fc10f79..aa345304523a4 100644 --- a/api_docs/kbn_ts_projects.mdx +++ b/api_docs/kbn_ts_projects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ts-projects title: "@kbn/ts-projects" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ts-projects plugin -date: 2024-12-21 +date: 2024-12-23 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 e5ea0cc5d0a63..459fbd9d0ae24 100644 --- a/api_docs/kbn_typed_react_router_config.mdx +++ b/api_docs/kbn_typed_react_router_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-typed-react-router-config title: "@kbn/typed-react-router-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/typed-react-router-config plugin -date: 2024-12-21 +date: 2024-12-23 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 0dc10e35c770e..4b6a33ad9f041 100644 --- a/api_docs/kbn_ui_actions_browser.mdx +++ b/api_docs/kbn_ui_actions_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-actions-browser title: "@kbn/ui-actions-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-actions-browser plugin -date: 2024-12-21 +date: 2024-12-23 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 f56d0c375da27..d04b182de6e3f 100644 --- a/api_docs/kbn_ui_shared_deps_src.mdx +++ b/api_docs/kbn_ui_shared_deps_src.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-shared-deps-src title: "@kbn/ui-shared-deps-src" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-shared-deps-src plugin -date: 2024-12-21 +date: 2024-12-23 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 3611d43fdcf52..9555288f96f37 100644 --- a/api_docs/kbn_ui_theme.mdx +++ b/api_docs/kbn_ui_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-theme title: "@kbn/ui-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-theme plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-theme'] --- import kbnUiThemeObj from './kbn_ui_theme.devdocs.json'; diff --git a/api_docs/kbn_unified_data_table.mdx b/api_docs/kbn_unified_data_table.mdx index d7df74d8487a7..c4880169bade1 100644 --- a/api_docs/kbn_unified_data_table.mdx +++ b/api_docs/kbn_unified_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-data-table title: "@kbn/unified-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-data-table plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-data-table'] --- import kbnUnifiedDataTableObj from './kbn_unified_data_table.devdocs.json'; diff --git a/api_docs/kbn_unified_doc_viewer.mdx b/api_docs/kbn_unified_doc_viewer.mdx index dca73b9ede4d7..27923f26d03d2 100644 --- a/api_docs/kbn_unified_doc_viewer.mdx +++ b/api_docs/kbn_unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-doc-viewer title: "@kbn/unified-doc-viewer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-doc-viewer plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-doc-viewer'] --- import kbnUnifiedDocViewerObj from './kbn_unified_doc_viewer.devdocs.json'; diff --git a/api_docs/kbn_unified_field_list.mdx b/api_docs/kbn_unified_field_list.mdx index a126f1edc4e66..635fae42666bf 100644 --- a/api_docs/kbn_unified_field_list.mdx +++ b/api_docs/kbn_unified_field_list.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-field-list title: "@kbn/unified-field-list" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-field-list plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-field-list'] --- import kbnUnifiedFieldListObj from './kbn_unified_field_list.devdocs.json'; diff --git a/api_docs/kbn_unsaved_changes_badge.mdx b/api_docs/kbn_unsaved_changes_badge.mdx index 7e8b890ae184e..77eb5b6abe569 100644 --- a/api_docs/kbn_unsaved_changes_badge.mdx +++ b/api_docs/kbn_unsaved_changes_badge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unsaved-changes-badge title: "@kbn/unsaved-changes-badge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unsaved-changes-badge plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-badge'] --- import kbnUnsavedChangesBadgeObj from './kbn_unsaved_changes_badge.devdocs.json'; diff --git a/api_docs/kbn_unsaved_changes_prompt.mdx b/api_docs/kbn_unsaved_changes_prompt.mdx index 6a4cf0d4bff45..0f69c9075dc28 100644 --- a/api_docs/kbn_unsaved_changes_prompt.mdx +++ b/api_docs/kbn_unsaved_changes_prompt.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unsaved-changes-prompt title: "@kbn/unsaved-changes-prompt" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unsaved-changes-prompt plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-prompt'] --- import kbnUnsavedChangesPromptObj from './kbn_unsaved_changes_prompt.devdocs.json'; diff --git a/api_docs/kbn_use_tracked_promise.mdx b/api_docs/kbn_use_tracked_promise.mdx index 6f5617d5bd025..8b11a049fe8e1 100644 --- a/api_docs/kbn_use_tracked_promise.mdx +++ b/api_docs/kbn_use_tracked_promise.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-use-tracked-promise title: "@kbn/use-tracked-promise" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/use-tracked-promise plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/use-tracked-promise'] --- import kbnUseTrackedPromiseObj from './kbn_use_tracked_promise.devdocs.json'; diff --git a/api_docs/kbn_user_profile_components.mdx b/api_docs/kbn_user_profile_components.mdx index e8cb1af58fb44..2d8461df5fbdf 100644 --- a/api_docs/kbn_user_profile_components.mdx +++ b/api_docs/kbn_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-user-profile-components title: "@kbn/user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/user-profile-components plugin -date: 2024-12-21 +date: 2024-12-23 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 9a2b96f1eca81..962a91ae3501a 100644 --- a/api_docs/kbn_utility_types.mdx +++ b/api_docs/kbn_utility_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types title: "@kbn/utility-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types plugin -date: 2024-12-21 +date: 2024-12-23 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 191083ab5b373..7e5eace537199 100644 --- a/api_docs/kbn_utility_types_jest.mdx +++ b/api_docs/kbn_utility_types_jest.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types-jest title: "@kbn/utility-types-jest" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types-jest plugin -date: 2024-12-21 +date: 2024-12-23 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 f6e8a8a5878d3..fbe867aab7bae 100644 --- a/api_docs/kbn_utils.mdx +++ b/api_docs/kbn_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utils title: "@kbn/utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utils plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utils'] --- import kbnUtilsObj from './kbn_utils.devdocs.json'; diff --git a/api_docs/kbn_visualization_ui_components.mdx b/api_docs/kbn_visualization_ui_components.mdx index 64188f6da568f..60e4a4e515c6b 100644 --- a/api_docs/kbn_visualization_ui_components.mdx +++ b/api_docs/kbn_visualization_ui_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-ui-components title: "@kbn/visualization-ui-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-ui-components plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/visualization-ui-components'] --- import kbnVisualizationUiComponentsObj from './kbn_visualization_ui_components.devdocs.json'; diff --git a/api_docs/kbn_visualization_utils.mdx b/api_docs/kbn_visualization_utils.mdx index 9440222196237..9203f5fb9834a 100644 --- a/api_docs/kbn_visualization_utils.mdx +++ b/api_docs/kbn_visualization_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-utils title: "@kbn/visualization-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-utils plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/visualization-utils'] --- import kbnVisualizationUtilsObj from './kbn_visualization_utils.devdocs.json'; diff --git a/api_docs/kbn_xstate_utils.mdx b/api_docs/kbn_xstate_utils.mdx index 8a40d1b4e05c6..15c9ed00bdaf1 100644 --- a/api_docs/kbn_xstate_utils.mdx +++ b/api_docs/kbn_xstate_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-xstate-utils title: "@kbn/xstate-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/xstate-utils plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/xstate-utils'] --- import kbnXstateUtilsObj from './kbn_xstate_utils.devdocs.json'; diff --git a/api_docs/kbn_yarn_lock_validator.mdx b/api_docs/kbn_yarn_lock_validator.mdx index 72cf0ad439022..32731cf309519 100644 --- a/api_docs/kbn_yarn_lock_validator.mdx +++ b/api_docs/kbn_yarn_lock_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-yarn-lock-validator title: "@kbn/yarn-lock-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/yarn-lock-validator plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator'] --- import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json'; diff --git a/api_docs/kbn_zod.mdx b/api_docs/kbn_zod.mdx index 11bda0cf11d8a..4eadace18250f 100644 --- a/api_docs/kbn_zod.mdx +++ b/api_docs/kbn_zod.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-zod title: "@kbn/zod" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/zod plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/zod'] --- import kbnZodObj from './kbn_zod.devdocs.json'; diff --git a/api_docs/kbn_zod_helpers.mdx b/api_docs/kbn_zod_helpers.mdx index e095d78193458..30681ac580a37 100644 --- a/api_docs/kbn_zod_helpers.mdx +++ b/api_docs/kbn_zod_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-zod-helpers title: "@kbn/zod-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/zod-helpers plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/zod-helpers'] --- import kbnZodHelpersObj from './kbn_zod_helpers.devdocs.json'; diff --git a/api_docs/kibana_overview.mdx b/api_docs/kibana_overview.mdx index d5b268939f5be..8de52a5fd8309 100644 --- a/api_docs/kibana_overview.mdx +++ b/api_docs/kibana_overview.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaOverview title: "kibanaOverview" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaOverview plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaOverview'] --- import kibanaOverviewObj from './kibana_overview.devdocs.json'; diff --git a/api_docs/kibana_react.mdx b/api_docs/kibana_react.mdx index b7dbe5939515b..54ab899343dd9 100644 --- a/api_docs/kibana_react.mdx +++ b/api_docs/kibana_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaReact title: "kibanaReact" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaReact plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaReact'] --- import kibanaReactObj from './kibana_react.devdocs.json'; diff --git a/api_docs/kibana_utils.mdx b/api_docs/kibana_utils.mdx index 706c0477a6a16..e339f4fc7ee2e 100644 --- a/api_docs/kibana_utils.mdx +++ b/api_docs/kibana_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaUtils title: "kibanaUtils" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaUtils plugin -date: 2024-12-21 +date: 2024-12-23 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 777cc88cf47ae..8265697c9e030 100644 --- a/api_docs/kubernetes_security.mdx +++ b/api_docs/kubernetes_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kubernetesSecurity title: "kubernetesSecurity" image: https://source.unsplash.com/400x175/?github description: API docs for the kubernetesSecurity plugin -date: 2024-12-21 +date: 2024-12-23 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 8005200951934..9ea2619870f01 100644 --- a/api_docs/lens.mdx +++ b/api_docs/lens.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lens title: "lens" image: https://source.unsplash.com/400x175/?github description: API docs for the lens plugin -date: 2024-12-21 +date: 2024-12-23 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 e6e7f38cd12d3..253123541303c 100644 --- a/api_docs/license_api_guard.mdx +++ b/api_docs/license_api_guard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseApiGuard title: "licenseApiGuard" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseApiGuard plugin -date: 2024-12-21 +date: 2024-12-23 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 db671124884ea..928c055048cff 100644 --- a/api_docs/license_management.mdx +++ b/api_docs/license_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseManagement title: "licenseManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseManagement plugin -date: 2024-12-21 +date: 2024-12-23 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 78b426ce0e9dd..b231de9819fc6 100644 --- a/api_docs/licensing.mdx +++ b/api_docs/licensing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licensing title: "licensing" image: https://source.unsplash.com/400x175/?github description: API docs for the licensing plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licensing'] --- import licensingObj from './licensing.devdocs.json'; diff --git a/api_docs/links.mdx b/api_docs/links.mdx index 4e528bff3fa1a..b88fa158e05e1 100644 --- a/api_docs/links.mdx +++ b/api_docs/links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/links title: "links" image: https://source.unsplash.com/400x175/?github description: API docs for the links plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'links'] --- import linksObj from './links.devdocs.json'; diff --git a/api_docs/lists.mdx b/api_docs/lists.mdx index 3fcf4bb9ca78d..e9baccb2f235c 100644 --- a/api_docs/lists.mdx +++ b/api_docs/lists.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lists title: "lists" image: https://source.unsplash.com/400x175/?github description: API docs for the lists plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/llm_tasks.mdx b/api_docs/llm_tasks.mdx index 95780c6af0da7..f02685cc4419d 100644 --- a/api_docs/llm_tasks.mdx +++ b/api_docs/llm_tasks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/llmTasks title: "llmTasks" image: https://source.unsplash.com/400x175/?github description: API docs for the llmTasks plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'llmTasks'] --- import llmTasksObj from './llm_tasks.devdocs.json'; diff --git a/api_docs/logs_data_access.mdx b/api_docs/logs_data_access.mdx index c06416c2ac096..7805cd6747220 100644 --- a/api_docs/logs_data_access.mdx +++ b/api_docs/logs_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsDataAccess title: "logsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the logsDataAccess plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsDataAccess'] --- import logsDataAccessObj from './logs_data_access.devdocs.json'; diff --git a/api_docs/logs_explorer.mdx b/api_docs/logs_explorer.mdx index ff6006409fb82..24feb75671392 100644 --- a/api_docs/logs_explorer.mdx +++ b/api_docs/logs_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsExplorer title: "logsExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the logsExplorer plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsExplorer'] --- import logsExplorerObj from './logs_explorer.devdocs.json'; diff --git a/api_docs/logs_shared.mdx b/api_docs/logs_shared.mdx index e1e7031b776c8..1ee3e4779e2ba 100644 --- a/api_docs/logs_shared.mdx +++ b/api_docs/logs_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsShared title: "logsShared" image: https://source.unsplash.com/400x175/?github description: API docs for the logsShared plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsShared'] --- import logsSharedObj from './logs_shared.devdocs.json'; diff --git a/api_docs/management.mdx b/api_docs/management.mdx index 312b463f7a026..7b97e9f0dd2b5 100644 --- a/api_docs/management.mdx +++ b/api_docs/management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/management title: "management" image: https://source.unsplash.com/400x175/?github description: API docs for the management plugin -date: 2024-12-21 +date: 2024-12-23 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 a316675a78690..b3033bb08e828 100644 --- a/api_docs/maps.mdx +++ b/api_docs/maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/maps title: "maps" image: https://source.unsplash.com/400x175/?github description: API docs for the maps plugin -date: 2024-12-21 +date: 2024-12-23 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 574dc217e5bf1..8a89351e5a6ac 100644 --- a/api_docs/maps_ems.mdx +++ b/api_docs/maps_ems.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mapsEms title: "mapsEms" image: https://source.unsplash.com/400x175/?github description: API docs for the mapsEms plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mapsEms'] --- import mapsEmsObj from './maps_ems.devdocs.json'; diff --git a/api_docs/metrics_data_access.mdx b/api_docs/metrics_data_access.mdx index ff14b025262ee..c143564df2eee 100644 --- a/api_docs/metrics_data_access.mdx +++ b/api_docs/metrics_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/metricsDataAccess title: "metricsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the metricsDataAccess plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'metricsDataAccess'] --- import metricsDataAccessObj from './metrics_data_access.devdocs.json'; diff --git a/api_docs/ml.mdx b/api_docs/ml.mdx index 571b46b7d6f04..1992b750d7ffe 100644 --- a/api_docs/ml.mdx +++ b/api_docs/ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ml title: "ml" image: https://source.unsplash.com/400x175/?github description: API docs for the ml plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ml'] --- import mlObj from './ml.devdocs.json'; diff --git a/api_docs/mock_idp_plugin.mdx b/api_docs/mock_idp_plugin.mdx index 3d7f17c803047..8e66afe27614d 100644 --- a/api_docs/mock_idp_plugin.mdx +++ b/api_docs/mock_idp_plugin.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mockIdpPlugin title: "mockIdpPlugin" image: https://source.unsplash.com/400x175/?github description: API docs for the mockIdpPlugin plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mockIdpPlugin'] --- import mockIdpPluginObj from './mock_idp_plugin.devdocs.json'; diff --git a/api_docs/monitoring.mdx b/api_docs/monitoring.mdx index 9515d5ac639a8..a945d671961e2 100644 --- a/api_docs/monitoring.mdx +++ b/api_docs/monitoring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoring title: "monitoring" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoring plugin -date: 2024-12-21 +date: 2024-12-23 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 695f51921c1ac..1be0d3e291cc6 100644 --- a/api_docs/monitoring_collection.mdx +++ b/api_docs/monitoring_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoringCollection title: "monitoringCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoringCollection plugin -date: 2024-12-21 +date: 2024-12-23 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 e517ef9a9fc8e..346c4670cff35 100644 --- a/api_docs/navigation.mdx +++ b/api_docs/navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/navigation title: "navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the navigation plugin -date: 2024-12-21 +date: 2024-12-23 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 2082e7bad3f13..e0fa24dadfc38 100644 --- a/api_docs/newsfeed.mdx +++ b/api_docs/newsfeed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/newsfeed title: "newsfeed" image: https://source.unsplash.com/400x175/?github description: API docs for the newsfeed plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'newsfeed'] --- import newsfeedObj from './newsfeed.devdocs.json'; diff --git a/api_docs/no_data_page.mdx b/api_docs/no_data_page.mdx index 57a2725197d4c..bc4b1e06b3a3a 100644 --- a/api_docs/no_data_page.mdx +++ b/api_docs/no_data_page.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/noDataPage title: "noDataPage" image: https://source.unsplash.com/400x175/?github description: API docs for the noDataPage plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'noDataPage'] --- import noDataPageObj from './no_data_page.devdocs.json'; diff --git a/api_docs/notifications.mdx b/api_docs/notifications.mdx index 31d9c6c7b043d..fff40a45a84d1 100644 --- a/api_docs/notifications.mdx +++ b/api_docs/notifications.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/notifications title: "notifications" image: https://source.unsplash.com/400x175/?github description: API docs for the notifications plugin -date: 2024-12-21 +date: 2024-12-23 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 e67d059cc40e4..b7777ad8bb837 100644 --- a/api_docs/observability.mdx +++ b/api_docs/observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observability title: "observability" image: https://source.unsplash.com/400x175/?github description: API docs for the observability plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability'] --- import observabilityObj from './observability.devdocs.json'; diff --git a/api_docs/observability_a_i_assistant.mdx b/api_docs/observability_a_i_assistant.mdx index 1f1256ff2a797..83a136165a521 100644 --- a/api_docs/observability_a_i_assistant.mdx +++ b/api_docs/observability_a_i_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistant title: "observabilityAIAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAIAssistant plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistant'] --- import observabilityAIAssistantObj from './observability_a_i_assistant.devdocs.json'; diff --git a/api_docs/observability_a_i_assistant_app.mdx b/api_docs/observability_a_i_assistant_app.mdx index bcbd31a729be8..7955a20b5508c 100644 --- a/api_docs/observability_a_i_assistant_app.mdx +++ b/api_docs/observability_a_i_assistant_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistantApp title: "observabilityAIAssistantApp" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAIAssistantApp plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistantApp'] --- import observabilityAIAssistantAppObj from './observability_a_i_assistant_app.devdocs.json'; diff --git a/api_docs/observability_ai_assistant_management.mdx b/api_docs/observability_ai_assistant_management.mdx index a07de7ad946b4..d7dd59cce694b 100644 --- a/api_docs/observability_ai_assistant_management.mdx +++ b/api_docs/observability_ai_assistant_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAiAssistantManagement title: "observabilityAiAssistantManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAiAssistantManagement plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAiAssistantManagement'] --- import observabilityAiAssistantManagementObj from './observability_ai_assistant_management.devdocs.json'; diff --git a/api_docs/observability_logs_explorer.mdx b/api_docs/observability_logs_explorer.mdx index d6280a47fb31e..2b40f532e46de 100644 --- a/api_docs/observability_logs_explorer.mdx +++ b/api_docs/observability_logs_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityLogsExplorer title: "observabilityLogsExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityLogsExplorer plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityLogsExplorer'] --- import observabilityLogsExplorerObj from './observability_logs_explorer.devdocs.json'; diff --git a/api_docs/observability_onboarding.mdx b/api_docs/observability_onboarding.mdx index 413f167092eff..dec683cf41398 100644 --- a/api_docs/observability_onboarding.mdx +++ b/api_docs/observability_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityOnboarding title: "observabilityOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityOnboarding plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityOnboarding'] --- import observabilityOnboardingObj from './observability_onboarding.devdocs.json'; diff --git a/api_docs/observability_shared.mdx b/api_docs/observability_shared.mdx index 435e1e536f540..a994fc3ba52a9 100644 --- a/api_docs/observability_shared.mdx +++ b/api_docs/observability_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityShared title: "observabilityShared" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityShared plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityShared'] --- import observabilitySharedObj from './observability_shared.devdocs.json'; diff --git a/api_docs/osquery.mdx b/api_docs/osquery.mdx index c4496e5543bd4..d8decf0e40699 100644 --- a/api_docs/osquery.mdx +++ b/api_docs/osquery.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/osquery title: "osquery" image: https://source.unsplash.com/400x175/?github description: API docs for the osquery plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'osquery'] --- import osqueryObj from './osquery.devdocs.json'; diff --git a/api_docs/painless_lab.mdx b/api_docs/painless_lab.mdx index 14769fd07c3ba..2792634cc7dd8 100644 --- a/api_docs/painless_lab.mdx +++ b/api_docs/painless_lab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/painlessLab title: "painlessLab" image: https://source.unsplash.com/400x175/?github description: API docs for the painlessLab plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'painlessLab'] --- import painlessLabObj from './painless_lab.devdocs.json'; diff --git a/api_docs/plugin_directory.mdx b/api_docs/plugin_directory.mdx index e3f7b15017290..dc0877b5a9012 100644 --- a/api_docs/plugin_directory.mdx +++ b/api_docs/plugin_directory.mdx @@ -7,7 +7,7 @@ id: kibDevDocsPluginDirectory slug: /kibana-dev-docs/api-meta/plugin-api-directory title: Directory description: Directory of public APIs available through plugins or packages. -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -21,7 +21,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 54834 | 241 | 41170 | 2032 | +| 54836 | 241 | 41172 | 2032 | ## Plugin Directory @@ -31,7 +31,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 2 | 0 | 2 | 0 | | | [@elastic/obs-ai-assistant](https://github.com/orgs/elastic/teams/obs-ai-assistant) | - | 4 | 0 | 4 | 1 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | AIOps plugin maintained by ML team. | 72 | 0 | 8 | 2 | -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 872 | 1 | 839 | 50 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 874 | 1 | 841 | 50 | | | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | The user interface for Elastic APM | 29 | 0 | 29 | 119 | | | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 93 | 0 | 93 | 3 | | | [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic/teams/kibana-cloud-security-posture) | Centralized asset inventory experience within the Elastic Security solution. A central place for users to view and manage all their assets from different environments | 6 | 0 | 6 | 0 | diff --git a/api_docs/presentation_panel.mdx b/api_docs/presentation_panel.mdx index a8df67f6bc886..8e0e2a86ed2c5 100644 --- a/api_docs/presentation_panel.mdx +++ b/api_docs/presentation_panel.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationPanel title: "presentationPanel" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationPanel plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationPanel'] --- import presentationPanelObj from './presentation_panel.devdocs.json'; diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx index ba7169a12adde..b16a1f012332a 100644 --- a/api_docs/presentation_util.mdx +++ b/api_docs/presentation_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationUtil title: "presentationUtil" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationUtil plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationUtil'] --- import presentationUtilObj from './presentation_util.devdocs.json'; diff --git a/api_docs/product_doc_base.mdx b/api_docs/product_doc_base.mdx index 5ea3cc4bb7d88..aa24b852feb3e 100644 --- a/api_docs/product_doc_base.mdx +++ b/api_docs/product_doc_base.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/productDocBase title: "productDocBase" image: https://source.unsplash.com/400x175/?github description: API docs for the productDocBase plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'productDocBase'] --- import productDocBaseObj from './product_doc_base.devdocs.json'; diff --git a/api_docs/profiling.mdx b/api_docs/profiling.mdx index 178496a6f8ee8..db4ed44edf182 100644 --- a/api_docs/profiling.mdx +++ b/api_docs/profiling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profiling title: "profiling" image: https://source.unsplash.com/400x175/?github description: API docs for the profiling plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profiling'] --- import profilingObj from './profiling.devdocs.json'; diff --git a/api_docs/profiling_data_access.mdx b/api_docs/profiling_data_access.mdx index 1ba6341f5facb..c5f7704b370eb 100644 --- a/api_docs/profiling_data_access.mdx +++ b/api_docs/profiling_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profilingDataAccess title: "profilingDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the profilingDataAccess plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profilingDataAccess'] --- import profilingDataAccessObj from './profiling_data_access.devdocs.json'; diff --git a/api_docs/remote_clusters.mdx b/api_docs/remote_clusters.mdx index 7eac333fc0ed6..7ae1fd31061ad 100644 --- a/api_docs/remote_clusters.mdx +++ b/api_docs/remote_clusters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/remoteClusters title: "remoteClusters" image: https://source.unsplash.com/400x175/?github description: API docs for the remoteClusters plugin -date: 2024-12-21 +date: 2024-12-23 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 213eaa182fad0..8a369cafb8c16 100644 --- a/api_docs/reporting.mdx +++ b/api_docs/reporting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/reporting title: "reporting" image: https://source.unsplash.com/400x175/?github description: API docs for the reporting plugin -date: 2024-12-21 +date: 2024-12-23 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 db662e4487ac0..f00a4db2c8b87 100644 --- a/api_docs/rollup.mdx +++ b/api_docs/rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/rollup title: "rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the rollup plugin -date: 2024-12-21 +date: 2024-12-23 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 fdd4304b555e4..d139e207b7a92 100644 --- a/api_docs/rule_registry.mdx +++ b/api_docs/rule_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ruleRegistry title: "ruleRegistry" image: https://source.unsplash.com/400x175/?github description: API docs for the ruleRegistry plugin -date: 2024-12-21 +date: 2024-12-23 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 bca2c6dc3fba9..b786c3fdccfaa 100644 --- a/api_docs/runtime_fields.mdx +++ b/api_docs/runtime_fields.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/runtimeFields title: "runtimeFields" image: https://source.unsplash.com/400x175/?github description: API docs for the runtimeFields plugin -date: 2024-12-21 +date: 2024-12-23 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 38c97596c6b48..351cfb81b6bb0 100644 --- a/api_docs/saved_objects.mdx +++ b/api_docs/saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjects title: "savedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjects plugin -date: 2024-12-21 +date: 2024-12-23 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 5047ccb6ed140..bbf00a8d3e858 100644 --- a/api_docs/saved_objects_finder.mdx +++ b/api_docs/saved_objects_finder.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsFinder title: "savedObjectsFinder" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsFinder plugin -date: 2024-12-21 +date: 2024-12-23 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 00f657325e8e8..641b62794e7b8 100644 --- a/api_docs/saved_objects_management.mdx +++ b/api_docs/saved_objects_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsManagement title: "savedObjectsManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsManagement plugin -date: 2024-12-21 +date: 2024-12-23 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 6eb4c73e0aebc..f41fec16602e1 100644 --- a/api_docs/saved_objects_tagging.mdx +++ b/api_docs/saved_objects_tagging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTagging title: "savedObjectsTagging" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTagging plugin -date: 2024-12-21 +date: 2024-12-23 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 08c4d96695b10..a9f0be7589ef4 100644 --- a/api_docs/saved_objects_tagging_oss.mdx +++ b/api_docs/saved_objects_tagging_oss.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTaggingOss title: "savedObjectsTaggingOss" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTaggingOss plugin -date: 2024-12-21 +date: 2024-12-23 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 dcdeb93901bbd..d714fd2fd6a6b 100644 --- a/api_docs/saved_search.mdx +++ b/api_docs/saved_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedSearch title: "savedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the savedSearch plugin -date: 2024-12-21 +date: 2024-12-23 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 e28d0c47a0cb7..1ee661a7729f5 100644 --- a/api_docs/screenshot_mode.mdx +++ b/api_docs/screenshot_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotMode title: "screenshotMode" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotMode plugin -date: 2024-12-21 +date: 2024-12-23 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 6e331ce2c14a1..dc756795b6bff 100644 --- a/api_docs/screenshotting.mdx +++ b/api_docs/screenshotting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotting title: "screenshotting" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotting plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting'] --- import screenshottingObj from './screenshotting.devdocs.json'; diff --git a/api_docs/search_assistant.mdx b/api_docs/search_assistant.mdx index 8e0ca4a99b2e9..0a3892a440bca 100644 --- a/api_docs/search_assistant.mdx +++ b/api_docs/search_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchAssistant title: "searchAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the searchAssistant plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchAssistant'] --- import searchAssistantObj from './search_assistant.devdocs.json'; diff --git a/api_docs/search_connectors.mdx b/api_docs/search_connectors.mdx index 88ad488258c02..5f9dcf6cc697d 100644 --- a/api_docs/search_connectors.mdx +++ b/api_docs/search_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchConnectors title: "searchConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the searchConnectors plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchConnectors'] --- import searchConnectorsObj from './search_connectors.devdocs.json'; diff --git a/api_docs/search_homepage.mdx b/api_docs/search_homepage.mdx index d2ee5ebb013e0..cef0f18a2f943 100644 --- a/api_docs/search_homepage.mdx +++ b/api_docs/search_homepage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchHomepage title: "searchHomepage" image: https://source.unsplash.com/400x175/?github description: API docs for the searchHomepage plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchHomepage'] --- import searchHomepageObj from './search_homepage.devdocs.json'; diff --git a/api_docs/search_indices.mdx b/api_docs/search_indices.mdx index cd38902288c66..13a0cf1bda35a 100644 --- a/api_docs/search_indices.mdx +++ b/api_docs/search_indices.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchIndices title: "searchIndices" image: https://source.unsplash.com/400x175/?github description: API docs for the searchIndices plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchIndices'] --- import searchIndicesObj from './search_indices.devdocs.json'; diff --git a/api_docs/search_inference_endpoints.mdx b/api_docs/search_inference_endpoints.mdx index 1d5d18c471822..092731386422c 100644 --- a/api_docs/search_inference_endpoints.mdx +++ b/api_docs/search_inference_endpoints.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchInferenceEndpoints title: "searchInferenceEndpoints" image: https://source.unsplash.com/400x175/?github description: API docs for the searchInferenceEndpoints plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchInferenceEndpoints'] --- import searchInferenceEndpointsObj from './search_inference_endpoints.devdocs.json'; diff --git a/api_docs/search_navigation.mdx b/api_docs/search_navigation.mdx index 8a358c5301d0d..06d5e0bb226cd 100644 --- a/api_docs/search_navigation.mdx +++ b/api_docs/search_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchNavigation title: "searchNavigation" image: https://source.unsplash.com/400x175/?github description: API docs for the searchNavigation plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchNavigation'] --- import searchNavigationObj from './search_navigation.devdocs.json'; diff --git a/api_docs/search_notebooks.mdx b/api_docs/search_notebooks.mdx index 0224c6aabdf19..08f2d970ee713 100644 --- a/api_docs/search_notebooks.mdx +++ b/api_docs/search_notebooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchNotebooks title: "searchNotebooks" image: https://source.unsplash.com/400x175/?github description: API docs for the searchNotebooks plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchNotebooks'] --- import searchNotebooksObj from './search_notebooks.devdocs.json'; diff --git a/api_docs/search_playground.mdx b/api_docs/search_playground.mdx index 68815d70013be..4f613cf1d11c3 100644 --- a/api_docs/search_playground.mdx +++ b/api_docs/search_playground.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchPlayground title: "searchPlayground" image: https://source.unsplash.com/400x175/?github description: API docs for the searchPlayground plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchPlayground'] --- import searchPlaygroundObj from './search_playground.devdocs.json'; diff --git a/api_docs/security.mdx b/api_docs/security.mdx index ffe5eb78d2a85..068a27b4968e7 100644 --- a/api_docs/security.mdx +++ b/api_docs/security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/security title: "security" image: https://source.unsplash.com/400x175/?github description: API docs for the security plugin -date: 2024-12-21 +date: 2024-12-23 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 3b5feba458987..70704d40d6b33 100644 --- a/api_docs/security_solution.mdx +++ b/api_docs/security_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolution title: "securitySolution" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolution plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolution'] --- import securitySolutionObj from './security_solution.devdocs.json'; diff --git a/api_docs/security_solution_ess.mdx b/api_docs/security_solution_ess.mdx index 0908185957cb5..301d25a412047 100644 --- a/api_docs/security_solution_ess.mdx +++ b/api_docs/security_solution_ess.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionEss title: "securitySolutionEss" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionEss plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolutionEss'] --- import securitySolutionEssObj from './security_solution_ess.devdocs.json'; diff --git a/api_docs/security_solution_serverless.mdx b/api_docs/security_solution_serverless.mdx index 520a54ce27c66..50154ba4518d0 100644 --- a/api_docs/security_solution_serverless.mdx +++ b/api_docs/security_solution_serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionServerless title: "securitySolutionServerless" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionServerless plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolutionServerless'] --- import securitySolutionServerlessObj from './security_solution_serverless.devdocs.json'; diff --git a/api_docs/serverless.mdx b/api_docs/serverless.mdx index 00ae94ae23ed7..ce1e5e6caa041 100644 --- a/api_docs/serverless.mdx +++ b/api_docs/serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverless title: "serverless" image: https://source.unsplash.com/400x175/?github description: API docs for the serverless plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverless'] --- import serverlessObj from './serverless.devdocs.json'; diff --git a/api_docs/serverless_observability.mdx b/api_docs/serverless_observability.mdx index 3ada99171b077..c657d1fb101d1 100644 --- a/api_docs/serverless_observability.mdx +++ b/api_docs/serverless_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessObservability title: "serverlessObservability" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessObservability plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverlessObservability'] --- import serverlessObservabilityObj from './serverless_observability.devdocs.json'; diff --git a/api_docs/serverless_search.mdx b/api_docs/serverless_search.mdx index 8cf09c5aa74fe..b5ee4e9995ed6 100644 --- a/api_docs/serverless_search.mdx +++ b/api_docs/serverless_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessSearch title: "serverlessSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessSearch plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverlessSearch'] --- import serverlessSearchObj from './serverless_search.devdocs.json'; diff --git a/api_docs/session_view.mdx b/api_docs/session_view.mdx index 61811c4ea2ca8..65a10812821c5 100644 --- a/api_docs/session_view.mdx +++ b/api_docs/session_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/sessionView title: "sessionView" image: https://source.unsplash.com/400x175/?github description: API docs for the sessionView plugin -date: 2024-12-21 +date: 2024-12-23 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 9f3775149e532..b3ccf621f7064 100644 --- a/api_docs/share.mdx +++ b/api_docs/share.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/share title: "share" image: https://source.unsplash.com/400x175/?github description: API docs for the share plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share'] --- import shareObj from './share.devdocs.json'; diff --git a/api_docs/slo.mdx b/api_docs/slo.mdx index 45d0b4391d793..fce8ea38cad25 100644 --- a/api_docs/slo.mdx +++ b/api_docs/slo.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/slo title: "slo" image: https://source.unsplash.com/400x175/?github description: API docs for the slo plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'slo'] --- import sloObj from './slo.devdocs.json'; diff --git a/api_docs/snapshot_restore.mdx b/api_docs/snapshot_restore.mdx index 982bb1c7af239..1bd0726d2c85b 100644 --- a/api_docs/snapshot_restore.mdx +++ b/api_docs/snapshot_restore.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/snapshotRestore title: "snapshotRestore" image: https://source.unsplash.com/400x175/?github description: API docs for the snapshotRestore plugin -date: 2024-12-21 +date: 2024-12-23 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 b2983ff1de61c..cc49dfbbfcd65 100644 --- a/api_docs/spaces.mdx +++ b/api_docs/spaces.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/spaces title: "spaces" image: https://source.unsplash.com/400x175/?github description: API docs for the spaces plugin -date: 2024-12-21 +date: 2024-12-23 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 36e02d9096ae0..bb051c8c9ecf7 100644 --- a/api_docs/stack_alerts.mdx +++ b/api_docs/stack_alerts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackAlerts title: "stackAlerts" image: https://source.unsplash.com/400x175/?github description: API docs for the stackAlerts plugin -date: 2024-12-21 +date: 2024-12-23 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 7a25e6aba1565..0ba1fb866e7f8 100644 --- a/api_docs/stack_connectors.mdx +++ b/api_docs/stack_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackConnectors title: "stackConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the stackConnectors plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackConnectors'] --- import stackConnectorsObj from './stack_connectors.devdocs.json'; diff --git a/api_docs/streams.mdx b/api_docs/streams.mdx index 603f7a7aee902..7bbe527f1ca3b 100644 --- a/api_docs/streams.mdx +++ b/api_docs/streams.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/streams title: "streams" image: https://source.unsplash.com/400x175/?github description: API docs for the streams plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'streams'] --- import streamsObj from './streams.devdocs.json'; diff --git a/api_docs/streams_app.mdx b/api_docs/streams_app.mdx index 8d4cac039be64..67f9172956fc8 100644 --- a/api_docs/streams_app.mdx +++ b/api_docs/streams_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/streamsApp title: "streamsApp" image: https://source.unsplash.com/400x175/?github description: API docs for the streamsApp plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'streamsApp'] --- import streamsAppObj from './streams_app.devdocs.json'; diff --git a/api_docs/task_manager.mdx b/api_docs/task_manager.mdx index 86d2807a8bf14..0b55b3d7080f1 100644 --- a/api_docs/task_manager.mdx +++ b/api_docs/task_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/taskManager title: "taskManager" image: https://source.unsplash.com/400x175/?github description: API docs for the taskManager plugin -date: 2024-12-21 +date: 2024-12-23 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 fddec6a03f87a..bc3e6e7f6eabb 100644 --- a/api_docs/telemetry.mdx +++ b/api_docs/telemetry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetry title: "telemetry" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetry plugin -date: 2024-12-21 +date: 2024-12-23 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 0b29801ec48f9..18393bfd919c1 100644 --- a/api_docs/telemetry_collection_manager.mdx +++ b/api_docs/telemetry_collection_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionManager title: "telemetryCollectionManager" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionManager plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionManager'] --- import telemetryCollectionManagerObj from './telemetry_collection_manager.devdocs.json'; diff --git a/api_docs/telemetry_management_section.mdx b/api_docs/telemetry_management_section.mdx index 037e4ce392cc8..a926cc5fd147d 100644 --- a/api_docs/telemetry_management_section.mdx +++ b/api_docs/telemetry_management_section.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryManagementSection title: "telemetryManagementSection" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryManagementSection plugin -date: 2024-12-21 +date: 2024-12-23 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 43f1f898340d4..9949f51b1ebe9 100644 --- a/api_docs/threat_intelligence.mdx +++ b/api_docs/threat_intelligence.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/threatIntelligence title: "threatIntelligence" image: https://source.unsplash.com/400x175/?github description: API docs for the threatIntelligence plugin -date: 2024-12-21 +date: 2024-12-23 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 ff00b7f747d4b..901f5fa059499 100644 --- a/api_docs/timelines.mdx +++ b/api_docs/timelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/timelines title: "timelines" image: https://source.unsplash.com/400x175/?github description: API docs for the timelines plugin -date: 2024-12-21 +date: 2024-12-23 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 e261a7ede948c..4fdd57415699d 100644 --- a/api_docs/transform.mdx +++ b/api_docs/transform.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/transform title: "transform" image: https://source.unsplash.com/400x175/?github description: API docs for the transform plugin -date: 2024-12-21 +date: 2024-12-23 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 31b08672aa1d2..7b2aed7a72711 100644 --- a/api_docs/triggers_actions_ui.mdx +++ b/api_docs/triggers_actions_ui.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/triggersActionsUi title: "triggersActionsUi" image: https://source.unsplash.com/400x175/?github description: API docs for the triggersActionsUi plugin -date: 2024-12-21 +date: 2024-12-23 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 0d5e78b0534f5..ba8e442532951 100644 --- a/api_docs/ui_actions.mdx +++ b/api_docs/ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActions title: "uiActions" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActions plugin -date: 2024-12-21 +date: 2024-12-23 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 56e0202da126f..093c89fb9a3af 100644 --- a/api_docs/ui_actions_enhanced.mdx +++ b/api_docs/ui_actions_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActionsEnhanced title: "uiActionsEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActionsEnhanced plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActionsEnhanced'] --- import uiActionsEnhancedObj from './ui_actions_enhanced.devdocs.json'; diff --git a/api_docs/unified_doc_viewer.mdx b/api_docs/unified_doc_viewer.mdx index 69ba5da96dba5..b113342e060ed 100644 --- a/api_docs/unified_doc_viewer.mdx +++ b/api_docs/unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedDocViewer title: "unifiedDocViewer" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedDocViewer plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedDocViewer'] --- import unifiedDocViewerObj from './unified_doc_viewer.devdocs.json'; diff --git a/api_docs/unified_histogram.mdx b/api_docs/unified_histogram.mdx index 26f1472298184..1a18626b1b6ad 100644 --- a/api_docs/unified_histogram.mdx +++ b/api_docs/unified_histogram.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedHistogram title: "unifiedHistogram" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedHistogram plugin -date: 2024-12-21 +date: 2024-12-23 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 0894f9585033f..393f9d011abc9 100644 --- a/api_docs/unified_search.mdx +++ b/api_docs/unified_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch title: "unifiedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch plugin -date: 2024-12-21 +date: 2024-12-23 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 c294c0c4bf70f..43a4f9c930d39 100644 --- a/api_docs/unified_search_autocomplete.mdx +++ b/api_docs/unified_search_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch-autocomplete title: "unifiedSearch.autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch.autocomplete plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch.autocomplete'] --- import unifiedSearchAutocompleteObj from './unified_search_autocomplete.devdocs.json'; diff --git a/api_docs/uptime.mdx b/api_docs/uptime.mdx index bee481d502838..f2aeaa8d6d6c0 100644 --- a/api_docs/uptime.mdx +++ b/api_docs/uptime.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uptime title: "uptime" image: https://source.unsplash.com/400x175/?github description: API docs for the uptime plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uptime'] --- import uptimeObj from './uptime.devdocs.json'; diff --git a/api_docs/url_forwarding.mdx b/api_docs/url_forwarding.mdx index 5b2100fb8bd58..cad43f57b993b 100644 --- a/api_docs/url_forwarding.mdx +++ b/api_docs/url_forwarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/urlForwarding title: "urlForwarding" image: https://source.unsplash.com/400x175/?github description: API docs for the urlForwarding plugin -date: 2024-12-21 +date: 2024-12-23 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 c84419490492c..9d0762ecf590f 100644 --- a/api_docs/usage_collection.mdx +++ b/api_docs/usage_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/usageCollection title: "usageCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the usageCollection plugin -date: 2024-12-21 +date: 2024-12-23 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 fd1e23ac0cb76..858e597c81868 100644 --- a/api_docs/ux.mdx +++ b/api_docs/ux.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ux title: "ux" image: https://source.unsplash.com/400x175/?github description: API docs for the ux plugin -date: 2024-12-21 +date: 2024-12-23 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 2f331689077e5..a47d41d54a6bc 100644 --- a/api_docs/vis_default_editor.mdx +++ b/api_docs/vis_default_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visDefaultEditor title: "visDefaultEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the visDefaultEditor plugin -date: 2024-12-21 +date: 2024-12-23 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 cd97f3161e2ce..d82322af2d99f 100644 --- a/api_docs/vis_type_gauge.mdx +++ b/api_docs/vis_type_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeGauge title: "visTypeGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeGauge plugin -date: 2024-12-21 +date: 2024-12-23 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 4946d9952b8d8..d07fbc3228c94 100644 --- a/api_docs/vis_type_heatmap.mdx +++ b/api_docs/vis_type_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeHeatmap title: "visTypeHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeHeatmap plugin -date: 2024-12-21 +date: 2024-12-23 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 687dd4d4af126..928b24696412c 100644 --- a/api_docs/vis_type_pie.mdx +++ b/api_docs/vis_type_pie.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypePie title: "visTypePie" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypePie plugin -date: 2024-12-21 +date: 2024-12-23 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 efe006644b1fc..8326db5f006c5 100644 --- a/api_docs/vis_type_table.mdx +++ b/api_docs/vis_type_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTable title: "visTypeTable" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTable plugin -date: 2024-12-21 +date: 2024-12-23 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 e402aae56d787..19b09c6f161d0 100644 --- a/api_docs/vis_type_timelion.mdx +++ b/api_docs/vis_type_timelion.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimelion title: "visTypeTimelion" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimelion plugin -date: 2024-12-21 +date: 2024-12-23 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 78192285cec3b..61459ce8c7c28 100644 --- a/api_docs/vis_type_timeseries.mdx +++ b/api_docs/vis_type_timeseries.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimeseries title: "visTypeTimeseries" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimeseries plugin -date: 2024-12-21 +date: 2024-12-23 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 7a6af373968b2..7bc23a36e0278 100644 --- a/api_docs/vis_type_vega.mdx +++ b/api_docs/vis_type_vega.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVega title: "visTypeVega" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVega plugin -date: 2024-12-21 +date: 2024-12-23 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 87bc72ae23455..44dd2e5a7caeb 100644 --- a/api_docs/vis_type_vislib.mdx +++ b/api_docs/vis_type_vislib.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVislib title: "visTypeVislib" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVislib plugin -date: 2024-12-21 +date: 2024-12-23 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 678d5f6d86d23..c63680625bdb2 100644 --- a/api_docs/vis_type_xy.mdx +++ b/api_docs/vis_type_xy.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeXy title: "visTypeXy" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeXy plugin -date: 2024-12-21 +date: 2024-12-23 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 a955c583983a5..2be1532258bb1 100644 --- a/api_docs/visualizations.mdx +++ b/api_docs/visualizations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visualizations title: "visualizations" image: https://source.unsplash.com/400x175/?github description: API docs for the visualizations plugin -date: 2024-12-21 +date: 2024-12-23 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; From 3dcae5144034a146068566e920ade2e57d9abd08 Mon Sep 17 00:00:00 2001 From: Pierre Gayvallet Date: Mon, 23 Dec 2024 10:20:42 +0100 Subject: [PATCH 02/35] [inference] Add support for inference connectors (#204541) ## Summary ~Depends on~ https://github.com/elastic/kibana/pull/200249 merged! Fix https://github.com/elastic/kibana/issues/199082 - Add support for the `inference` stack connectors to the `inference` plugin (everything is inference) - Adapt the o11y assistant to use the `inference-common` utilities for connector filtering / compat checking ## How to test **1. Starts ES with the unified completion feature flag** ```sh yarn es snapshot --license trial ES_JAVA_OPTS="-Des.inference_unified_feature_flag_enabled=true" ``` **2. Enable the inference connector for Kibana** In the Kibana config file: ```yaml xpack.stack_connectors.enableExperimental: ['inferenceConnectorOn'] ``` **3. Start Dev Kibana** ```sh node scripts/kibana --dev --no-base-path ``` **4. Create an inference connector** Go to `http://localhost:5601/app/management/insightsAndAlerting/triggersActionsConnectors/connectors`, create an inference connector - Type: `AI connector` then - Service: `OpenAI` - API Key: Gwzk... Kidding, please ping someone - Model ID: `gpt-4o` - Task type: `completion` -> save **5. test the o11y assistant** Use the assistant as you would do for any other connector (just make sure the inference connector is selected as the one being used) and do your testing. --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../src/chat/welcome_message.tsx | 2 +- .../packages/kbn-ai-assistant/tsconfig.json | 1 + .../shared/ai-infra/inference-common/index.ts | 6 + .../inference-common/src/connectors.test.ts | 91 +++++++++ .../inference-common/src/connectors.ts | 76 +++++++ .../shared/inference/common/connectors.ts | 24 --- .../shared/inference/common/http_apis.ts | 8 +- .../plugins/shared/inference/public/types.ts | 3 +- .../inference/scripts/util/kibana_client.ts | 2 +- .../adapters/get_inference_adapter.test.ts | 7 +- .../adapters/get_inference_adapter.ts | 6 +- .../chat_complete/adapters/inference/index.ts | 8 + .../inference/inference_adapter.test.ts | 148 ++++++++++++++ .../adapters/inference/inference_adapter.ts | 85 ++++++++ .../adapters/openai/from_openai.ts | 46 +++++ .../chat_complete/adapters/openai/index.ts | 2 + .../adapters/openai/openai_adapter.test.ts | 2 +- .../adapters/openai/openai_adapter.ts | 184 +---------------- .../adapters/openai/process_openai_stream.ts | 52 +++++ .../adapters/openai/to_openai.test.ts | 187 ++++++++++++++++++ .../adapters/openai/to_openai.ts | 107 ++++++++++ .../utils/inference_executor.test.ts | 2 +- .../chat_complete/utils/inference_executor.ts | 6 +- .../server/inference_client/types.ts | 2 +- .../inference/server/routes/connectors.ts | 2 +- .../server/test_utils/inference_connector.ts | 2 +- .../server/test_utils/inference_executor.ts | 2 +- .../server/util/get_connector_by_id.test.ts | 4 +- .../server/util/get_connector_by_id.ts | 15 +- .../common/connectors.ts | 22 --- .../common/index.ts | 2 - .../public/index.ts | 1 - .../server/routes/connectors/route.ts | 5 +- .../common/inference/schema.ts | 2 +- .../inference/inference.test.ts | 33 +++- .../connector_types/inference/inference.ts | 13 +- .../scripts/evaluation/kibana_client.ts | 7 +- 37 files changed, 894 insertions(+), 273 deletions(-) create mode 100644 x-pack/platform/packages/shared/ai-infra/inference-common/src/connectors.test.ts create mode 100644 x-pack/platform/packages/shared/ai-infra/inference-common/src/connectors.ts delete mode 100644 x-pack/platform/plugins/shared/inference/common/connectors.ts create mode 100644 x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/inference/index.ts create mode 100644 x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/inference/inference_adapter.test.ts create mode 100644 x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/inference/inference_adapter.ts create mode 100644 x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/from_openai.ts create mode 100644 x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/process_openai_stream.ts create mode 100644 x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/to_openai.test.ts create mode 100644 x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/to_openai.ts delete mode 100644 x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/common/connectors.ts diff --git a/x-pack/packages/kbn-ai-assistant/src/chat/welcome_message.tsx b/x-pack/packages/kbn-ai-assistant/src/chat/welcome_message.tsx index 0783c7f64620a..6133df55c57e0 100644 --- a/x-pack/packages/kbn-ai-assistant/src/chat/welcome_message.tsx +++ b/x-pack/packages/kbn-ai-assistant/src/chat/welcome_message.tsx @@ -10,7 +10,7 @@ import { css } from '@emotion/css'; import { EuiFlexGroup, EuiFlexItem, EuiSpacer, useCurrentEuiBreakpoint } from '@elastic/eui'; import type { ActionConnector } from '@kbn/triggers-actions-ui-plugin/public'; import { GenerativeAIForObservabilityConnectorFeatureId } from '@kbn/actions-plugin/common'; -import { isSupportedConnectorType } from '@kbn/observability-ai-assistant-plugin/public'; +import { isSupportedConnectorType } from '@kbn/inference-common'; import { AssistantBeacon } from '@kbn/ai-assistant-icon'; import type { UseKnowledgeBaseResult } from '../hooks/use_knowledge_base'; import type { UseGenAIConnectorsResult } from '../hooks/use_genai_connectors'; diff --git a/x-pack/packages/kbn-ai-assistant/tsconfig.json b/x-pack/packages/kbn-ai-assistant/tsconfig.json index c23f92085c28d..d33b8642561eb 100644 --- a/x-pack/packages/kbn-ai-assistant/tsconfig.json +++ b/x-pack/packages/kbn-ai-assistant/tsconfig.json @@ -37,6 +37,7 @@ "@kbn/ml-plugin", "@kbn/share-plugin", "@kbn/ai-assistant-common", + "@kbn/inference-common", "@kbn/storybook", "@kbn/ai-assistant-icon", ] diff --git a/x-pack/platform/packages/shared/ai-infra/inference-common/index.ts b/x-pack/platform/packages/shared/ai-infra/inference-common/index.ts index 134b0f02811fe..0c6d254c0f527 100644 --- a/x-pack/platform/packages/shared/ai-infra/inference-common/index.ts +++ b/x-pack/platform/packages/shared/ai-infra/inference-common/index.ts @@ -95,3 +95,9 @@ export { } from './src/errors'; export { truncateList } from './src/truncate_list'; +export { + InferenceConnectorType, + isSupportedConnectorType, + isSupportedConnector, + type InferenceConnector, +} from './src/connectors'; diff --git a/x-pack/platform/packages/shared/ai-infra/inference-common/src/connectors.test.ts b/x-pack/platform/packages/shared/ai-infra/inference-common/src/connectors.test.ts new file mode 100644 index 0000000000000..a4729aa8a8578 --- /dev/null +++ b/x-pack/platform/packages/shared/ai-infra/inference-common/src/connectors.test.ts @@ -0,0 +1,91 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { + InferenceConnectorType, + isSupportedConnectorType, + isSupportedConnector, + RawConnector, + COMPLETION_TASK_TYPE, +} from './connectors'; + +const createRawConnector = (parts: Partial): RawConnector => { + return { + id: 'id', + actionTypeId: 'connector-type', + name: 'some connector', + config: {}, + ...parts, + }; +}; + +describe('isSupportedConnectorType', () => { + it('returns true for supported connector types', () => { + expect(isSupportedConnectorType(InferenceConnectorType.OpenAI)).toBe(true); + expect(isSupportedConnectorType(InferenceConnectorType.Bedrock)).toBe(true); + expect(isSupportedConnectorType(InferenceConnectorType.Gemini)).toBe(true); + expect(isSupportedConnectorType(InferenceConnectorType.Inference)).toBe(true); + }); + it('returns false for unsupported connector types', () => { + expect(isSupportedConnectorType('anything-else')).toBe(false); + }); +}); + +describe('isSupportedConnector', () => { + // TODO + + it('returns true for OpenAI connectors', () => { + expect( + isSupportedConnector(createRawConnector({ actionTypeId: InferenceConnectorType.OpenAI })) + ).toBe(true); + }); + + it('returns true for Bedrock connectors', () => { + expect( + isSupportedConnector(createRawConnector({ actionTypeId: InferenceConnectorType.Bedrock })) + ).toBe(true); + }); + + it('returns true for Gemini connectors', () => { + expect( + isSupportedConnector(createRawConnector({ actionTypeId: InferenceConnectorType.Gemini })) + ).toBe(true); + }); + + it('returns true for OpenAI connectors with the right taskType', () => { + expect( + isSupportedConnector( + createRawConnector({ + actionTypeId: InferenceConnectorType.Inference, + config: { taskType: COMPLETION_TASK_TYPE }, + }) + ) + ).toBe(true); + }); + + it('returns false for OpenAI connectors with a bad taskType', () => { + expect( + isSupportedConnector( + createRawConnector({ + actionTypeId: InferenceConnectorType.Inference, + config: { taskType: 'embeddings' }, + }) + ) + ).toBe(false); + }); + + it('returns false for OpenAI connectors without taskType', () => { + expect( + isSupportedConnector( + createRawConnector({ + actionTypeId: InferenceConnectorType.Inference, + config: {}, + }) + ) + ).toBe(false); + }); +}); diff --git a/x-pack/platform/packages/shared/ai-infra/inference-common/src/connectors.ts b/x-pack/platform/packages/shared/ai-infra/inference-common/src/connectors.ts new file mode 100644 index 0000000000000..da77d973614b5 --- /dev/null +++ b/x-pack/platform/packages/shared/ai-infra/inference-common/src/connectors.ts @@ -0,0 +1,76 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +/** + * The list of connector types that can be used with the inference APIs + */ +export enum InferenceConnectorType { + OpenAI = '.gen-ai', + Bedrock = '.bedrock', + Gemini = '.gemini', + Inference = '.inference', +} + +export const COMPLETION_TASK_TYPE = 'completion'; + +const allSupportedConnectorTypes = Object.values(InferenceConnectorType); + +export interface InferenceConnector { + type: InferenceConnectorType; + name: string; + connectorId: string; +} + +/** + * Checks if a given connector type is compatible for inference. + * + * Note: this check is not sufficient to assert if a given connector can be + * used for inference, as `.inference` connectors need additional check logic. + * Please use `isSupportedConnector` instead when possible. + */ +export function isSupportedConnectorType(id: string): id is InferenceConnectorType { + return allSupportedConnectorTypes.includes(id as InferenceConnectorType); +} + +/** + * Checks if a given connector is compatible for inference. + * + * A connector is compatible if: + * 1. its type is in the list of allowed types + * 2. for inference connectors, if its taskType is "completion" + */ +export function isSupportedConnector(connector: RawConnector): connector is RawInferenceConnector { + if (!isSupportedConnectorType(connector.actionTypeId)) { + return false; + } + if (connector.actionTypeId === InferenceConnectorType.Inference) { + const config = connector.config ?? {}; + if (config.taskType !== COMPLETION_TASK_TYPE) { + return false; + } + } + return true; +} + +/** + * Connector types are living in the actions plugin and we can't afford + * having dependencies from this package to some mid-level plugin, + * so we're just using our own connector mixin type. + */ +export interface RawConnector { + id: string; + actionTypeId: string; + name: string; + config?: Record; +} + +interface RawInferenceConnector { + id: string; + actionTypeId: InferenceConnectorType; + name: string; + config?: Record; +} diff --git a/x-pack/platform/plugins/shared/inference/common/connectors.ts b/x-pack/platform/plugins/shared/inference/common/connectors.ts deleted file mode 100644 index ee628f520feff..0000000000000 --- a/x-pack/platform/plugins/shared/inference/common/connectors.ts +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -export enum InferenceConnectorType { - OpenAI = '.gen-ai', - Bedrock = '.bedrock', - Gemini = '.gemini', -} - -const allSupportedConnectorTypes = Object.values(InferenceConnectorType); - -export interface InferenceConnector { - type: InferenceConnectorType; - name: string; - connectorId: string; -} - -export function isSupportedConnectorType(id: string): id is InferenceConnectorType { - return allSupportedConnectorTypes.includes(id as InferenceConnectorType); -} diff --git a/x-pack/platform/plugins/shared/inference/common/http_apis.ts b/x-pack/platform/plugins/shared/inference/common/http_apis.ts index c07fcd29b2211..f6a60051e84fb 100644 --- a/x-pack/platform/plugins/shared/inference/common/http_apis.ts +++ b/x-pack/platform/plugins/shared/inference/common/http_apis.ts @@ -5,8 +5,12 @@ * 2.0. */ -import type { FunctionCallingMode, Message, ToolOptions } from '@kbn/inference-common'; -import { InferenceConnector } from './connectors'; +import type { + FunctionCallingMode, + Message, + ToolOptions, + InferenceConnector, +} from '@kbn/inference-common'; export type ChatCompleteRequestBody = { connectorId: string; diff --git a/x-pack/platform/plugins/shared/inference/public/types.ts b/x-pack/platform/plugins/shared/inference/public/types.ts index 735abfb5459a0..f07fe1e636836 100644 --- a/x-pack/platform/plugins/shared/inference/public/types.ts +++ b/x-pack/platform/plugins/shared/inference/public/types.ts @@ -5,8 +5,7 @@ * 2.0. */ -import type { ChatCompleteAPI, OutputAPI } from '@kbn/inference-common'; -import type { InferenceConnector } from '../common/connectors'; +import type { ChatCompleteAPI, OutputAPI, InferenceConnector } from '@kbn/inference-common'; /* eslint-disable @typescript-eslint/no-empty-interface*/ diff --git a/x-pack/platform/plugins/shared/inference/scripts/util/kibana_client.ts b/x-pack/platform/plugins/shared/inference/scripts/util/kibana_client.ts index ef6f1c4fdcdce..a3a75ea980523 100644 --- a/x-pack/platform/plugins/shared/inference/scripts/util/kibana_client.ts +++ b/x-pack/platform/plugins/shared/inference/scripts/util/kibana_client.ts @@ -25,9 +25,9 @@ import { withoutOutputUpdateEvents, type ToolOptions, ChatCompleteOptions, + type InferenceConnector, } from '@kbn/inference-common'; import type { ChatCompleteRequestBody } from '../../common/http_apis'; -import type { InferenceConnector } from '../../common/connectors'; import { createOutputApi } from '../../common/output/create_output_api'; import { eventSourceStreamIntoObservable } from '../../server/util/event_source_stream_into_observable'; diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/get_inference_adapter.test.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/get_inference_adapter.test.ts index 558e0cd06ef91..f6613152f9f00 100644 --- a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/get_inference_adapter.test.ts +++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/get_inference_adapter.test.ts @@ -5,11 +5,12 @@ * 2.0. */ -import { InferenceConnectorType } from '../../../common/connectors'; +import { InferenceConnectorType } from '@kbn/inference-common'; import { getInferenceAdapter } from './get_inference_adapter'; import { openAIAdapter } from './openai'; import { geminiAdapter } from './gemini'; import { bedrockClaudeAdapter } from './bedrock'; +import { inferenceAdapter } from './inference'; describe('getInferenceAdapter', () => { it('returns the openAI adapter for OpenAI type', () => { @@ -23,4 +24,8 @@ describe('getInferenceAdapter', () => { it('returns the bedrock adapter for Bedrock type', () => { expect(getInferenceAdapter(InferenceConnectorType.Bedrock)).toBe(bedrockClaudeAdapter); }); + + it('returns the inference adapter for Inference type', () => { + expect(getInferenceAdapter(InferenceConnectorType.Inference)).toBe(inferenceAdapter); + }); }); diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/get_inference_adapter.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/get_inference_adapter.ts index f34b0c27a339f..ec5e6803ab86d 100644 --- a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/get_inference_adapter.ts +++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/get_inference_adapter.ts @@ -5,11 +5,12 @@ * 2.0. */ -import { InferenceConnectorType } from '../../../common/connectors'; +import { InferenceConnectorType } from '@kbn/inference-common'; import type { InferenceConnectorAdapter } from '../types'; import { openAIAdapter } from './openai'; import { geminiAdapter } from './gemini'; import { bedrockClaudeAdapter } from './bedrock'; +import { inferenceAdapter } from './inference'; export const getInferenceAdapter = ( connectorType: InferenceConnectorType @@ -23,6 +24,9 @@ export const getInferenceAdapter = ( case InferenceConnectorType.Bedrock: return bedrockClaudeAdapter; + + case InferenceConnectorType.Inference: + return inferenceAdapter; } return undefined; diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/inference/index.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/inference/index.ts new file mode 100644 index 0000000000000..040b4103dae80 --- /dev/null +++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/inference/index.ts @@ -0,0 +1,8 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export { inferenceAdapter } from './inference_adapter'; diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/inference/inference_adapter.test.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/inference/inference_adapter.test.ts new file mode 100644 index 0000000000000..7cf5fc7bdfb8a --- /dev/null +++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/inference/inference_adapter.test.ts @@ -0,0 +1,148 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import OpenAI from 'openai'; +import { v4 } from 'uuid'; +import { PassThrough } from 'stream'; +import { lastValueFrom, Subject, toArray } from 'rxjs'; +import type { Logger } from '@kbn/logging'; +import { loggerMock } from '@kbn/logging-mocks'; +import { ChatCompletionEventType, MessageRole } from '@kbn/inference-common'; +import { observableIntoEventSourceStream } from '../../../util/observable_into_event_source_stream'; +import { InferenceExecutor } from '../../utils/inference_executor'; +import { inferenceAdapter } from './inference_adapter'; + +function createOpenAIChunk({ + delta, + usage, +}: { + delta?: OpenAI.ChatCompletionChunk['choices'][number]['delta']; + usage?: OpenAI.ChatCompletionChunk['usage']; +}): OpenAI.ChatCompletionChunk { + return { + choices: delta + ? [ + { + finish_reason: null, + index: 0, + delta, + }, + ] + : [], + created: new Date().getTime(), + id: v4(), + model: 'gpt-4o', + object: 'chat.completion.chunk', + usage, + }; +} + +describe('inferenceAdapter', () => { + const executorMock = { + invoke: jest.fn(), + } as InferenceExecutor & { invoke: jest.MockedFn }; + + const logger = { + debug: jest.fn(), + error: jest.fn(), + } as unknown as Logger; + + beforeEach(() => { + executorMock.invoke.mockReset(); + }); + + const defaultArgs = { + executor: executorMock, + logger: loggerMock.create(), + }; + + describe('when creating the request', () => { + beforeEach(() => { + executorMock.invoke.mockImplementation(async () => { + return { + actionId: '', + status: 'ok', + data: new PassThrough(), + }; + }); + }); + + it('emits chunk events', async () => { + const source$ = new Subject>(); + + executorMock.invoke.mockImplementation(async () => { + return { + actionId: '', + status: 'ok', + data: observableIntoEventSourceStream(source$, logger), + }; + }); + + const response$ = inferenceAdapter.chatComplete({ + ...defaultArgs, + messages: [ + { + role: MessageRole.User, + content: 'Hello', + }, + ], + }); + + source$.next( + createOpenAIChunk({ + delta: { + content: 'First', + }, + }) + ); + + source$.next( + createOpenAIChunk({ + delta: { + content: ', second', + }, + }) + ); + + source$.complete(); + + const allChunks = await lastValueFrom(response$.pipe(toArray())); + + expect(allChunks).toEqual([ + { + content: 'First', + tool_calls: [], + type: ChatCompletionEventType.ChatCompletionChunk, + }, + { + content: ', second', + tool_calls: [], + type: ChatCompletionEventType.ChatCompletionChunk, + }, + ]); + }); + + it('propagates the abort signal when provided', () => { + const abortController = new AbortController(); + + inferenceAdapter.chatComplete({ + logger, + executor: executorMock, + messages: [{ role: MessageRole.User, content: 'question' }], + abortSignal: abortController.signal, + }); + + expect(executorMock.invoke).toHaveBeenCalledTimes(1); + expect(executorMock.invoke).toHaveBeenCalledWith({ + subAction: 'unified_completion_stream', + subActionParams: expect.objectContaining({ + signal: abortController.signal, + }), + }); + }); + }); +}); diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/inference/inference_adapter.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/inference/inference_adapter.ts new file mode 100644 index 0000000000000..323dec4f5789d --- /dev/null +++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/inference/inference_adapter.ts @@ -0,0 +1,85 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type OpenAI from 'openai'; +import { from, identity, switchMap, throwError } from 'rxjs'; +import { isReadable, Readable } from 'stream'; +import { createInferenceInternalError } from '@kbn/inference-common'; +import { eventSourceStreamIntoObservable } from '../../../util/event_source_stream_into_observable'; +import type { InferenceConnectorAdapter } from '../../types'; +import { + parseInlineFunctionCalls, + wrapWithSimulatedFunctionCalling, +} from '../../simulated_function_calling'; +import { + toolsToOpenAI, + toolChoiceToOpenAI, + messagesToOpenAI, + processOpenAIStream, +} from '../openai'; + +export const inferenceAdapter: InferenceConnectorAdapter = { + chatComplete: ({ + executor, + system, + messages, + toolChoice, + tools, + functionCalling, + logger, + abortSignal, + }) => { + const simulatedFunctionCalling = functionCalling === 'simulated'; + + let request: Omit & { model?: string }; + if (simulatedFunctionCalling) { + const wrapped = wrapWithSimulatedFunctionCalling({ + system, + messages, + toolChoice, + tools, + }); + request = { + messages: messagesToOpenAI({ system: wrapped.system, messages: wrapped.messages }), + }; + } else { + request = { + messages: messagesToOpenAI({ system, messages }), + tool_choice: toolChoiceToOpenAI(toolChoice), + tools: toolsToOpenAI(tools), + }; + } + + return from( + executor.invoke({ + subAction: 'unified_completion_stream', + subActionParams: { + body: request, + signal: abortSignal, + }, + }) + ).pipe( + switchMap((response) => { + if (response.status === 'error') { + return throwError(() => + createInferenceInternalError('Error calling the inference API', { + rootError: response.serviceMessage, + }) + ); + } + if (isReadable(response.data as any)) { + return eventSourceStreamIntoObservable(response.data as Readable); + } + return throwError(() => + createInferenceInternalError('Unexpected error', response.data as Record) + ); + }), + processOpenAIStream(), + simulatedFunctionCalling ? parseInlineFunctionCalls({ logger }) : identity + ); + }, +}; diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/from_openai.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/from_openai.ts new file mode 100644 index 0000000000000..750ae4710104a --- /dev/null +++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/from_openai.ts @@ -0,0 +1,46 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type OpenAI from 'openai'; +import { + ChatCompletionChunkEvent, + ChatCompletionEventType, + ChatCompletionTokenCountEvent, +} from '@kbn/inference-common'; + +export function chunkFromOpenAI(chunk: OpenAI.ChatCompletionChunk): ChatCompletionChunkEvent { + const delta = chunk.choices[0].delta; + + return { + type: ChatCompletionEventType.ChatCompletionChunk, + content: delta.content ?? '', + tool_calls: + delta.tool_calls?.map((toolCall) => { + return { + function: { + name: toolCall.function?.name ?? '', + arguments: toolCall.function?.arguments ?? '', + }, + toolCallId: toolCall.id ?? '', + index: toolCall.index, + }; + }) ?? [], + }; +} + +export function tokenCountFromOpenAI( + completionUsage: OpenAI.CompletionUsage +): ChatCompletionTokenCountEvent { + return { + type: ChatCompletionEventType.ChatCompletionTokenCount, + tokens: { + completion: completionUsage.completion_tokens, + prompt: completionUsage.prompt_tokens, + total: completionUsage.total_tokens, + }, + }; +} diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/index.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/index.ts index 9aa1d94e01a52..ddf8441756cba 100644 --- a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/index.ts +++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/index.ts @@ -6,3 +6,5 @@ */ export { openAIAdapter } from './openai_adapter'; +export { toolChoiceToOpenAI, messagesToOpenAI, toolsToOpenAI } from './to_openai'; +export { processOpenAIStream } from './process_openai_stream'; diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/openai_adapter.test.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/openai_adapter.test.ts index 9b7fbc388024f..d93dee627ec18 100644 --- a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/openai_adapter.test.ts +++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/openai_adapter.test.ts @@ -15,7 +15,7 @@ import { loggerMock } from '@kbn/logging-mocks'; import { ChatCompletionEventType, MessageRole } from '@kbn/inference-common'; import { observableIntoEventSourceStream } from '../../../util/observable_into_event_source_stream'; import { InferenceExecutor } from '../../utils/inference_executor'; -import { openAIAdapter } from '.'; +import { openAIAdapter } from './openai_adapter'; function createOpenAIChunk({ delta, diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/openai_adapter.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/openai_adapter.ts index 0529820b1bfbf..8806429882e3f 100644 --- a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/openai_adapter.ts +++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/openai_adapter.ts @@ -6,41 +6,17 @@ */ import type OpenAI from 'openai'; -import type { - ChatCompletionAssistantMessageParam, - ChatCompletionMessageParam, - ChatCompletionSystemMessageParam, - ChatCompletionToolMessageParam, - ChatCompletionUserMessageParam, -} from 'openai/resources'; -import { - filter, - from, - identity, - map, - mergeMap, - Observable, - switchMap, - tap, - throwError, -} from 'rxjs'; +import { from, identity, switchMap, throwError } from 'rxjs'; import { isReadable, Readable } from 'stream'; -import { - ChatCompletionChunkEvent, - ChatCompletionEventType, - ChatCompletionTokenCountEvent, - createInferenceInternalError, - Message, - MessageRole, - ToolOptions, -} from '@kbn/inference-common'; -import { createTokenLimitReachedError } from '../../errors'; +import { createInferenceInternalError } from '@kbn/inference-common'; import { eventSourceStreamIntoObservable } from '../../../util/event_source_stream_into_observable'; import type { InferenceConnectorAdapter } from '../../types'; import { parseInlineFunctionCalls, wrapWithSimulatedFunctionCalling, } from '../../simulated_function_calling'; +import { messagesToOpenAI, toolsToOpenAI, toolChoiceToOpenAI } from './to_openai'; +import { processOpenAIStream } from './process_openai_stream'; export const openAIAdapter: InferenceConnectorAdapter = { chatComplete: ({ @@ -95,158 +71,8 @@ export const openAIAdapter: InferenceConnectorAdapter = { createInferenceInternalError('Unexpected error', response.data as Record) ); }), - filter((line) => !!line && line !== '[DONE]'), - map( - (line) => JSON.parse(line) as OpenAI.ChatCompletionChunk | { error: { message: string } } - ), - tap((line) => { - if ('error' in line) { - throw createInferenceInternalError(line.error.message); - } - if ( - 'choices' in line && - line.choices.length && - line.choices[0].finish_reason === 'length' - ) { - throw createTokenLimitReachedError(); - } - }), - filter((line): line is OpenAI.ChatCompletionChunk => { - return 'object' in line && line.object === 'chat.completion.chunk'; - }), - mergeMap((chunk): Observable => { - const events: Array = []; - if (chunk.usage) { - events.push(tokenCountFromOpenAI(chunk.usage)); - } - if (chunk.choices?.length) { - events.push(chunkFromOpenAI(chunk)); - } - return from(events); - }), + processOpenAIStream(), simulatedFunctionCalling ? parseInlineFunctionCalls({ logger }) : identity ); }, }; - -function chunkFromOpenAI(chunk: OpenAI.ChatCompletionChunk): ChatCompletionChunkEvent { - const delta = chunk.choices[0].delta; - - return { - type: ChatCompletionEventType.ChatCompletionChunk, - content: delta.content ?? '', - tool_calls: - delta.tool_calls?.map((toolCall) => { - return { - function: { - name: toolCall.function?.name ?? '', - arguments: toolCall.function?.arguments ?? '', - }, - toolCallId: toolCall.id ?? '', - index: toolCall.index, - }; - }) ?? [], - }; -} - -function tokenCountFromOpenAI( - completionUsage: OpenAI.CompletionUsage -): ChatCompletionTokenCountEvent { - return { - type: ChatCompletionEventType.ChatCompletionTokenCount, - tokens: { - completion: completionUsage.completion_tokens, - prompt: completionUsage.prompt_tokens, - total: completionUsage.total_tokens, - }, - }; -} - -function toolsToOpenAI(tools: ToolOptions['tools']): OpenAI.ChatCompletionCreateParams['tools'] { - return tools - ? Object.entries(tools).map(([toolName, { description, schema }]) => { - return { - type: 'function', - function: { - name: toolName, - description, - parameters: (schema ?? { - type: 'object' as const, - properties: {}, - }) as unknown as Record, - }, - }; - }) - : undefined; -} - -function toolChoiceToOpenAI( - toolChoice: ToolOptions['toolChoice'] -): OpenAI.ChatCompletionCreateParams['tool_choice'] { - return typeof toolChoice === 'string' - ? toolChoice - : toolChoice - ? { - function: { - name: toolChoice.function, - }, - type: 'function' as const, - } - : undefined; -} - -function messagesToOpenAI({ - system, - messages, -}: { - system?: string; - messages: Message[]; -}): OpenAI.ChatCompletionMessageParam[] { - const systemMessage: ChatCompletionSystemMessageParam | undefined = system - ? { role: 'system', content: system } - : undefined; - - return [ - ...(systemMessage ? [systemMessage] : []), - ...messages.map((message): ChatCompletionMessageParam => { - const role = message.role; - - switch (role) { - case MessageRole.Assistant: - const assistantMessage: ChatCompletionAssistantMessageParam = { - role: 'assistant', - content: message.content, - tool_calls: message.toolCalls?.map((toolCall) => { - return { - function: { - name: toolCall.function.name, - arguments: - 'arguments' in toolCall.function - ? JSON.stringify(toolCall.function.arguments) - : '{}', - }, - id: toolCall.toolCallId, - type: 'function', - }; - }), - }; - return assistantMessage; - - case MessageRole.User: - const userMessage: ChatCompletionUserMessageParam = { - role: 'user', - content: message.content, - }; - return userMessage; - - case MessageRole.Tool: - const toolMessage: ChatCompletionToolMessageParam = { - role: 'tool', - content: JSON.stringify(message.response), - tool_call_id: message.toolCallId, - }; - return toolMessage; - } - }), - ]; -} diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/process_openai_stream.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/process_openai_stream.ts new file mode 100644 index 0000000000000..65384ed52e5ff --- /dev/null +++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/process_openai_stream.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 type OpenAI from 'openai'; +import { filter, from, map, mergeMap, Observable, tap } from 'rxjs'; +import { + ChatCompletionChunkEvent, + ChatCompletionTokenCountEvent, + createInferenceInternalError, +} from '@kbn/inference-common'; +import { createTokenLimitReachedError } from '../../errors'; +import { tokenCountFromOpenAI, chunkFromOpenAI } from './from_openai'; + +export function processOpenAIStream() { + return (source: Observable) => { + return source.pipe( + filter((line) => !!line && line !== '[DONE]'), + map( + (line) => JSON.parse(line) as OpenAI.ChatCompletionChunk | { error: { message: string } } + ), + tap((line) => { + if ('error' in line) { + throw createInferenceInternalError(line.error.message); + } + if ( + 'choices' in line && + line.choices.length && + line.choices[0].finish_reason === 'length' + ) { + throw createTokenLimitReachedError(); + } + }), + filter((line): line is OpenAI.ChatCompletionChunk => { + return 'object' in line && line.object === 'chat.completion.chunk'; + }), + mergeMap((chunk): Observable => { + const events: Array = []; + if (chunk.usage) { + events.push(tokenCountFromOpenAI(chunk.usage)); + } + if (chunk.choices?.length) { + events.push(chunkFromOpenAI(chunk)); + } + return from(events); + }) + ); + }; +} diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/to_openai.test.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/to_openai.test.ts new file mode 100644 index 0000000000000..978f775c5d3dd --- /dev/null +++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/to_openai.test.ts @@ -0,0 +1,187 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { MessageRole, ToolChoiceType } from '@kbn/inference-common'; +import { messagesToOpenAI, toolChoiceToOpenAI, toolsToOpenAI } from './to_openai'; + +describe('toolChoiceToOpenAI', () => { + it('returns the right value for tool choice types', () => { + expect(toolChoiceToOpenAI(ToolChoiceType.none)).toEqual('none'); + expect(toolChoiceToOpenAI(ToolChoiceType.auto)).toEqual('auto'); + expect(toolChoiceToOpenAI(ToolChoiceType.required)).toEqual('required'); + }); + + it('returns the right value for undefined', () => { + expect(toolChoiceToOpenAI(undefined)).toBeUndefined(); + }); + + it('returns the right value for named functions', () => { + expect(toolChoiceToOpenAI({ function: 'foo' })).toEqual({ + type: 'function', + function: { name: 'foo' }, + }); + }); +}); + +describe('toolsToOpenAI', () => { + it('converts tools to the expected format', () => { + expect( + toolsToOpenAI({ + myTool: { + description: 'my tool', + schema: { + type: 'object', + description: 'my tool schema', + properties: { + foo: { + type: 'string', + }, + }, + }, + }, + }) + ).toMatchInlineSnapshot(` + Array [ + Object { + "function": Object { + "description": "my tool", + "name": "myTool", + "parameters": Object { + "description": "my tool schema", + "properties": Object { + "foo": Object { + "type": "string", + }, + }, + "type": "object", + }, + }, + "type": "function", + }, + ] + `); + }); +}); + +describe('messagesToOpenAI', () => { + it('converts a user message', () => { + expect( + messagesToOpenAI({ + messages: [ + { + role: MessageRole.User, + content: 'question', + }, + ], + }) + ).toEqual([ + { + content: 'question', + role: 'user', + }, + ]); + }); + + it('converts single message and system', () => { + expect( + messagesToOpenAI({ + system: 'system message', + messages: [ + { + role: MessageRole.User, + content: 'question', + }, + ], + }) + ).toEqual([ + { + content: 'system message', + role: 'system', + }, + { + content: 'question', + role: 'user', + }, + ]); + }); + + it('converts a tool call', () => { + expect( + messagesToOpenAI({ + messages: [ + { + role: MessageRole.Tool, + name: 'tool', + response: {}, + toolCallId: 'callId', + }, + ], + }) + ).toEqual([ + { + content: '{}', + role: 'tool', + tool_call_id: 'callId', + }, + ]); + }); + + it('converts an assistant message', () => { + expect( + messagesToOpenAI({ + messages: [ + { + role: MessageRole.Assistant, + content: 'response', + }, + ], + }) + ).toEqual([ + { + role: 'assistant', + content: 'response', + }, + ]); + }); + + it('converts an assistant tool call', () => { + expect( + messagesToOpenAI({ + messages: [ + { + role: MessageRole.Assistant, + content: null, + toolCalls: [ + { + toolCallId: 'id', + function: { + name: 'function', + arguments: {}, + }, + }, + ], + }, + ], + }) + ).toEqual([ + { + role: 'assistant', + content: '', + tool_calls: [ + { + function: { + arguments: '{}', + name: 'function', + }, + id: 'id', + type: 'function', + }, + ], + }, + ]); + }); +}); diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/to_openai.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/to_openai.ts new file mode 100644 index 0000000000000..709b1fd4c6bfe --- /dev/null +++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/to_openai.ts @@ -0,0 +1,107 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type OpenAI from 'openai'; +import type { + ChatCompletionAssistantMessageParam, + ChatCompletionMessageParam, + ChatCompletionSystemMessageParam, + ChatCompletionToolMessageParam, + ChatCompletionUserMessageParam, +} from 'openai/resources'; +import { Message, MessageRole, ToolOptions } from '@kbn/inference-common'; + +export function toolsToOpenAI( + tools: ToolOptions['tools'] +): OpenAI.ChatCompletionCreateParams['tools'] { + return tools + ? Object.entries(tools).map(([toolName, { description, schema }]) => { + return { + type: 'function', + function: { + name: toolName, + description, + parameters: (schema ?? { + type: 'object' as const, + properties: {}, + }) as unknown as Record, + }, + }; + }) + : undefined; +} + +export function toolChoiceToOpenAI( + toolChoice: ToolOptions['toolChoice'] +): OpenAI.ChatCompletionCreateParams['tool_choice'] { + return typeof toolChoice === 'string' + ? toolChoice + : toolChoice + ? { + function: { + name: toolChoice.function, + }, + type: 'function' as const, + } + : undefined; +} + +export function messagesToOpenAI({ + system, + messages, +}: { + system?: string; + messages: Message[]; +}): OpenAI.ChatCompletionMessageParam[] { + const systemMessage: ChatCompletionSystemMessageParam | undefined = system + ? { role: 'system', content: system } + : undefined; + + return [ + ...(systemMessage ? [systemMessage] : []), + ...messages.map((message): ChatCompletionMessageParam => { + const role = message.role; + + switch (role) { + case MessageRole.Assistant: + const assistantMessage: ChatCompletionAssistantMessageParam = { + role: 'assistant', + content: message.content ?? '', + tool_calls: message.toolCalls?.map((toolCall) => { + return { + function: { + name: toolCall.function.name, + arguments: + 'arguments' in toolCall.function + ? JSON.stringify(toolCall.function.arguments) + : '{}', + }, + id: toolCall.toolCallId, + type: 'function', + }; + }), + }; + return assistantMessage; + + case MessageRole.User: + const userMessage: ChatCompletionUserMessageParam = { + role: 'user', + content: message.content, + }; + return userMessage; + + case MessageRole.Tool: + const toolMessage: ChatCompletionToolMessageParam = { + role: 'tool', + content: JSON.stringify(message.response), + tool_call_id: message.toolCallId, + }; + return toolMessage; + } + }), + ]; +} diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/utils/inference_executor.test.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/utils/inference_executor.test.ts index 1821b553dd6a9..1965d731885af 100644 --- a/x-pack/platform/plugins/shared/inference/server/chat_complete/utils/inference_executor.test.ts +++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/utils/inference_executor.test.ts @@ -6,7 +6,7 @@ */ import { actionsClientMock } from '@kbn/actions-plugin/server/mocks'; -import { InferenceConnector, InferenceConnectorType } from '../../../common/connectors'; +import { InferenceConnector, InferenceConnectorType } from '@kbn/inference-common'; import { createInferenceExecutor, type InferenceExecutor } from './inference_executor'; describe('createInferenceExecutor', () => { diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/utils/inference_executor.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/utils/inference_executor.ts index c461e6b6cdfb7..0849e71ccf975 100644 --- a/x-pack/platform/plugins/shared/inference/server/chat_complete/utils/inference_executor.ts +++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/utils/inference_executor.ts @@ -11,7 +11,7 @@ import type { ActionsClient, PluginStartContract as ActionsPluginStart, } from '@kbn/actions-plugin/server'; -import type { InferenceConnector } from '../../../common/connectors'; +import type { InferenceConnector } from '@kbn/inference-common'; import { getConnectorById } from '../../util/get_connector_by_id'; export interface InferenceInvokeOptions { @@ -28,7 +28,7 @@ export type InferenceInvokeResult = ActionTypeExecutorResult InferenceConnector; - invoke(params: InferenceInvokeOptions): Promise; + invoke(params: InferenceInvokeOptions): Promise>; } export const createInferenceExecutor = ({ @@ -40,7 +40,7 @@ export const createInferenceExecutor = ({ }): InferenceExecutor => { return { getConnector: () => connector, - async invoke({ subAction, subActionParams }): Promise { + async invoke({ subAction, subActionParams }): Promise> { return await actionsClient.execute({ actionId: connector.connectorId, params: { diff --git a/x-pack/platform/plugins/shared/inference/server/inference_client/types.ts b/x-pack/platform/plugins/shared/inference/server/inference_client/types.ts index 193ce83f6d7b6..4037eac3fb7ce 100644 --- a/x-pack/platform/plugins/shared/inference/server/inference_client/types.ts +++ b/x-pack/platform/plugins/shared/inference/server/inference_client/types.ts @@ -10,8 +10,8 @@ import type { ChatCompleteAPI, BoundOutputAPI, OutputAPI, + InferenceConnector, } from '@kbn/inference-common'; -import type { InferenceConnector } from '../../common/connectors'; /** * An inference client, scoped to a request, that can be used to interact with LLMs. diff --git a/x-pack/platform/plugins/shared/inference/server/routes/connectors.ts b/x-pack/platform/plugins/shared/inference/server/routes/connectors.ts index 240e11a37f20e..d28dfc6780af4 100644 --- a/x-pack/platform/plugins/shared/inference/server/routes/connectors.ts +++ b/x-pack/platform/plugins/shared/inference/server/routes/connectors.ts @@ -10,7 +10,7 @@ import { InferenceConnector, InferenceConnectorType, isSupportedConnectorType, -} from '../../common/connectors'; +} from '@kbn/inference-common'; import type { InferenceServerStart, InferenceStartDependencies } from '../types'; export function registerConnectorsRoute({ diff --git a/x-pack/platform/plugins/shared/inference/server/test_utils/inference_connector.ts b/x-pack/platform/plugins/shared/inference/server/test_utils/inference_connector.ts index af7f35115325d..2ef7d05bdbd50 100644 --- a/x-pack/platform/plugins/shared/inference/server/test_utils/inference_connector.ts +++ b/x-pack/platform/plugins/shared/inference/server/test_utils/inference_connector.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { InferenceConnector, InferenceConnectorType } from '../../common/connectors'; +import { InferenceConnector, InferenceConnectorType } from '@kbn/inference-common'; export const createInferenceConnectorMock = ( parts: Partial = {} diff --git a/x-pack/platform/plugins/shared/inference/server/test_utils/inference_executor.ts b/x-pack/platform/plugins/shared/inference/server/test_utils/inference_executor.ts index 64b5100a9db3d..9203f5eacf0de 100644 --- a/x-pack/platform/plugins/shared/inference/server/test_utils/inference_executor.ts +++ b/x-pack/platform/plugins/shared/inference/server/test_utils/inference_executor.ts @@ -5,7 +5,7 @@ * 2.0. */ -import type { InferenceConnector } from '../../common/connectors'; +import type { InferenceConnector } from '@kbn/inference-common'; import { InferenceExecutor } from '../chat_complete/utils'; import { createInferenceConnectorMock } from './inference_connector'; diff --git a/x-pack/platform/plugins/shared/inference/server/util/get_connector_by_id.test.ts b/x-pack/platform/plugins/shared/inference/server/util/get_connector_by_id.test.ts index 7387944950f4a..17b5cbe86d7f4 100644 --- a/x-pack/platform/plugins/shared/inference/server/util/get_connector_by_id.test.ts +++ b/x-pack/platform/plugins/shared/inference/server/util/get_connector_by_id.test.ts @@ -7,7 +7,7 @@ import type { ActionResult as ActionConnector } from '@kbn/actions-plugin/server'; import { actionsClientMock } from '@kbn/actions-plugin/server/mocks'; -import { InferenceConnectorType } from '../../common/connectors'; +import { InferenceConnectorType } from '@kbn/inference-common'; import { getConnectorById } from './get_connector_by_id'; describe('getConnectorById', () => { @@ -68,7 +68,7 @@ describe('getConnectorById', () => { await expect(() => getConnectorById({ actionsClient, connectorId }) ).rejects.toThrowErrorMatchingInlineSnapshot( - `"Type '.tcp-pigeon' not recognized as a supported connector type"` + `"Connector 'tcp-pigeon-3-0' of type '.tcp-pigeon' not recognized as a supported connector"` ); }); diff --git a/x-pack/platform/plugins/shared/inference/server/util/get_connector_by_id.ts b/x-pack/platform/plugins/shared/inference/server/util/get_connector_by_id.ts index 1dbf9a6f0d75e..4bdbff0e1fecf 100644 --- a/x-pack/platform/plugins/shared/inference/server/util/get_connector_by_id.ts +++ b/x-pack/platform/plugins/shared/inference/server/util/get_connector_by_id.ts @@ -6,8 +6,11 @@ */ import type { ActionsClient, ActionResult as ActionConnector } from '@kbn/actions-plugin/server'; -import { createInferenceRequestError } from '@kbn/inference-common'; -import { isSupportedConnectorType, type InferenceConnector } from '../../common/connectors'; +import { + createInferenceRequestError, + isSupportedConnector, + type InferenceConnector, +} from '@kbn/inference-common'; /** * Retrieves a connector given the provided `connectorId` and asserts it's an inference connector @@ -29,11 +32,9 @@ export const getConnectorById = async ({ throw createInferenceRequestError(`No connector found for id '${connectorId}'`, 400); } - const actionTypeId = connector.actionTypeId; - - if (!isSupportedConnectorType(actionTypeId)) { + if (!isSupportedConnector(connector)) { throw createInferenceRequestError( - `Type '${actionTypeId}' not recognized as a supported connector type`, + `Connector '${connector.id}' of type '${connector.actionTypeId}' not recognized as a supported connector`, 400 ); } @@ -41,6 +42,6 @@ export const getConnectorById = async ({ return { connectorId: connector.id, name: connector.name, - type: actionTypeId, + type: connector.actionTypeId, }; }; diff --git a/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/common/connectors.ts b/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/common/connectors.ts deleted file mode 100644 index f176f4009ac84..0000000000000 --- a/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/common/connectors.ts +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -export enum ObservabilityAIAssistantConnectorType { - Bedrock = '.bedrock', - OpenAI = '.gen-ai', - Gemini = '.gemini', -} - -export function isSupportedConnectorType( - type: string -): type is ObservabilityAIAssistantConnectorType { - return ( - type === ObservabilityAIAssistantConnectorType.Bedrock || - type === ObservabilityAIAssistantConnectorType.OpenAI || - type === ObservabilityAIAssistantConnectorType.Gemini - ); -} diff --git a/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/common/index.ts b/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/common/index.ts index 52afdf95d4a43..0157a6a2b0aae 100644 --- a/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/common/index.ts +++ b/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/common/index.ts @@ -47,8 +47,6 @@ export { export { concatenateChatCompletionChunks } from './utils/concatenate_chat_completion_chunks'; -export { isSupportedConnectorType } from './connectors'; - export { ShortIdTable } from './utils/short_id_table'; export { KnowledgeBaseType } from './types'; diff --git a/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/public/index.ts b/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/public/index.ts index 76e643c6ae0d5..f8ca9709a6e20 100644 --- a/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/public/index.ts +++ b/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/public/index.ts @@ -62,7 +62,6 @@ export { } from '../common/functions/visualize_esql'; export { - isSupportedConnectorType, FunctionVisibility, MessageRole, KnowledgeBaseEntryRole, diff --git a/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/server/routes/connectors/route.ts b/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/server/routes/connectors/route.ts index 80bc877e6f5f9..78e713b42e9f0 100644 --- a/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/server/routes/connectors/route.ts +++ b/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/server/routes/connectors/route.ts @@ -5,7 +5,7 @@ * 2.0. */ import { FindActionResult } from '@kbn/actions-plugin/server'; -import { isSupportedConnectorType } from '../../../common/connectors'; +import { isSupportedConnector } from '@kbn/inference-common'; import { createObservabilityAIAssistantServerRoute } from '../create_observability_ai_assistant_server_route'; const listConnectorsRoute = createObservabilityAIAssistantServerRoute({ @@ -37,8 +37,7 @@ const listConnectorsRoute = createObservabilityAIAssistantServerRoute({ return connectors.filter( (connector) => - availableTypes.includes(connector.actionTypeId) && - isSupportedConnectorType(connector.actionTypeId) + availableTypes.includes(connector.actionTypeId) && isSupportedConnector(connector) ); }, }); diff --git a/x-pack/plugins/stack_connectors/common/inference/schema.ts b/x-pack/plugins/stack_connectors/common/inference/schema.ts index c62e9782bb517..2213efef1d6e8 100644 --- a/x-pack/plugins/stack_connectors/common/inference/schema.ts +++ b/x-pack/plugins/stack_connectors/common/inference/schema.ts @@ -26,7 +26,7 @@ export const ChatCompleteParamsSchema = schema.object({ // subset of OpenAI.ChatCompletionMessageParam https://github.com/openai/openai-node/blob/master/src/resources/chat/completions.ts const AIMessage = schema.object({ role: schema.string(), - content: schema.maybe(schema.string()), + content: schema.maybe(schema.nullable(schema.string())), name: schema.maybe(schema.string()), tool_calls: schema.maybe( schema.arrayOf( diff --git a/x-pack/plugins/stack_connectors/server/connector_types/inference/inference.test.ts b/x-pack/plugins/stack_connectors/server/connector_types/inference/inference.test.ts index 4aa28d2952dba..febec4d27ff5e 100644 --- a/x-pack/plugins/stack_connectors/server/connector_types/inference/inference.test.ts +++ b/x-pack/plugins/stack_connectors/server/connector_types/inference/inference.test.ts @@ -60,11 +60,13 @@ describe('InferenceConnector', () => { }); it('uses the completion task_type is supplied', async () => { - const stream = Readable.from([ - `data: {"id":"chatcmpl-AbLKRuRMZCAcMMQdl96KMTUgAfZNg","choices":[{"delta":{"content":" you"},"index":0}],"model":"gpt-4o-2024-08-06","object":"chat.completion.chunk"}\n\n`, - `data: [DONE]\n\n`, - ]); - mockEsClient.transport.request.mockResolvedValue(stream); + mockEsClient.transport.request.mockResolvedValue({ + body: Readable.from([ + `data: {"id":"chatcmpl-AbLKRuRMZCAcMMQdl96KMTUgAfZNg","choices":[{"delta":{"content":" you"},"index":0}],"model":"gpt-4o-2024-08-06","object":"chat.completion.chunk"}\n\n`, + `data: [DONE]\n\n`, + ]), + statusCode: 200, + }); const response = await connector.performApiUnifiedCompletion({ body: { messages: [{ content: 'What is Elastic?', role: 'user' }] }, @@ -84,7 +86,7 @@ describe('InferenceConnector', () => { method: 'POST', path: '_inference/completion/test/_unified', }, - { asStream: true } + { asStream: true, meta: true } ); expect(response.choices[0].message.content).toEqual(' you'); }); @@ -264,6 +266,11 @@ describe('InferenceConnector', () => { }); it('the API call is successful with correct request parameters', async () => { + mockEsClient.transport.request.mockResolvedValue({ + body: Readable.from([`data: [DONE]\n\n`]), + statusCode: 200, + }); + await connector.performApiUnifiedCompletionStream({ body: { messages: [{ content: 'Hello world', role: 'user' }] }, }); @@ -282,11 +289,16 @@ describe('InferenceConnector', () => { method: 'POST', path: '_inference/completion/test/_unified', }, - { asStream: true } + { asStream: true, meta: true } ); }); it('signal is properly passed to streamApi', async () => { + mockEsClient.transport.request.mockResolvedValue({ + body: Readable.from([`data: [DONE]\n\n`]), + statusCode: 200, + }); + const signal = jest.fn() as unknown as AbortSignal; await connector.performApiUnifiedCompletionStream({ body: { messages: [{ content: 'Hello world', role: 'user' }] }, @@ -299,7 +311,7 @@ describe('InferenceConnector', () => { method: 'POST', path: '_inference/completion/test/_unified', }, - { asStream: true } + { asStream: true, meta: true, signal } ); }); @@ -319,7 +331,10 @@ describe('InferenceConnector', () => { `data: {"id":"chatcmpl-AbLKRuRMZCAcMMQdl96KMTUgAfZNg","choices":[{"delta":{"content":" you"},"index":0}],"model":"gpt-4o-2024-08-06","object":"chat.completion.chunk"}\n\n`, `data: [DONE]\n\n`, ]); - mockEsClient.transport.request.mockResolvedValue(stream); + mockEsClient.transport.request.mockResolvedValue({ + body: stream, + statusCode: 200, + }); const response = await connector.performApiUnifiedCompletionStream({ body: { messages: [{ content: 'What is Elastic?', role: 'user' }] }, }); diff --git a/x-pack/plugins/stack_connectors/server/connector_types/inference/inference.ts b/x-pack/plugins/stack_connectors/server/connector_types/inference/inference.ts index d6c9af0e1365e..63d8904a6af8a 100644 --- a/x-pack/plugins/stack_connectors/server/connector_types/inference/inference.ts +++ b/x-pack/plugins/stack_connectors/server/connector_types/inference/inference.ts @@ -5,6 +5,7 @@ * 2.0. */ +import { text as streamToString } from 'node:stream/consumers'; import { ServiceParams, SubActionConnector } from '@kbn/actions-plugin/server'; import { Stream } from 'openai/streaming'; import { Readable } from 'stream'; @@ -181,7 +182,7 @@ export class InferenceConnector extends SubActionConnector { * @signal abort signal */ public async performApiUnifiedCompletionStream(params: UnifiedChatCompleteParams) { - return await this.esClient.transport.request( + const response = await this.esClient.transport.request( { method: 'POST', path: `_inference/completion/${this.inferenceId}/_unified`, @@ -189,8 +190,18 @@ export class InferenceConnector extends SubActionConnector { }, { asStream: true, + meta: true, + signal: params.signal, } ); + + // errors should be thrown as it will not be a stream response + if (response.statusCode >= 400) { + const error = await streamToString(response.body as unknown as Readable); + throw new Error(error); + } + + return response.body; } /** diff --git a/x-pack/solutions/observability/plugins/observability_ai_assistant_app/scripts/evaluation/kibana_client.ts b/x-pack/solutions/observability/plugins/observability_ai_assistant_app/scripts/evaluation/kibana_client.ts index f3b5ca357231b..69f6715da2dbe 100644 --- a/x-pack/solutions/observability/plugins/observability_ai_assistant_app/scripts/evaluation/kibana_client.ts +++ b/x-pack/solutions/observability/plugins/observability_ai_assistant_app/scripts/evaluation/kibana_client.ts @@ -5,6 +5,7 @@ * 2.0. */ +import { isSupportedConnectorType } from '@kbn/inference-common'; import { BufferFlushEvent, ChatCompletionChunkEvent, @@ -21,11 +22,7 @@ import { import type { ObservabilityAIAssistantScreenContext } from '@kbn/observability-ai-assistant-plugin/common/types'; import type { AssistantScope } from '@kbn/ai-assistant-common'; import { throwSerializedChatCompletionErrors } from '@kbn/observability-ai-assistant-plugin/common/utils/throw_serialized_chat_completion_errors'; -import { - isSupportedConnectorType, - Message, - MessageRole, -} from '@kbn/observability-ai-assistant-plugin/common'; +import { Message, MessageRole } from '@kbn/observability-ai-assistant-plugin/common'; import { streamIntoObservable } from '@kbn/observability-ai-assistant-plugin/server'; import { ToolingLog } from '@kbn/tooling-log'; import axios, { AxiosInstance, AxiosResponse, isAxiosError } from 'axios'; From 0cc887be92df434671ad37fe89cb4ebcc0d5af3d Mon Sep 17 00:00:00 2001 From: Robert Jaszczurek <92210485+rbrtj@users.noreply.github.com> Date: Mon, 23 Dec 2024 11:56:12 +0100 Subject: [PATCH 03/35] [ML][UX]: Consistent Layout and UI Enhancements for ML Pages (#203813) ## Summary * Updated alignment for `Add to` action buttons across various ML pages - see: #184109 * Fixed the overflowing date picker on `Anomaly Detection` pages - see: [#204394](https://github.com/elastic/kibana/issues/204394) * Standardized gaps around items on pages to maintain consistent values of `8px` (`gutterSize = 's'`) * Fixed the header on the Data Visualizer page - see: [#204393](https://github.com/elastic/kibana/issues/204393) * Adjusted the layout for Change Point Detection * Updated toast messages & toast action button - see: #184109 * Added icons for attachments actions Exploration around new `Add to` actions buttons - the right column is the most recent one, see: #184109 : | Before | After (add_to button) | After (icon button) - current | | ------------- | ------------- | ------------- | | ![Screenshot 2024-12-12 at 11 45 14](https://github.com/user-attachments/assets/08dc0be5-0b98-481d-9906-d3434f03f634) | ![Screenshot 2024-12-12 at 11 37 38](https://github.com/user-attachments/assets/0b2cbdcd-cad0-49aa-842f-123eebec1716) | ![Screenshot 2024-12-12 at 12 42 58](https://github.com/user-attachments/assets/c0a0c732-bbc0-4007-998e-df413fae612b) | | ![Screenshot 2024-12-12 at 11 45 49](https://github.com/user-attachments/assets/9ff45cf8-1c24-4ef4-ab59-2b54f1569c6e) | ![Screenshot 2024-12-12 at 11 39 34](https://github.com/user-attachments/assets/293255eb-eba5-4d90-a10b-0f41de0cc195) | ![Screenshot 2024-12-12 at 12 44 58](https://github.com/user-attachments/assets/740da2fb-ceed-4e6a-add6-9a8d695776a6) | | ![Screenshot 2024-12-12 at 11 46 30](https://github.com/user-attachments/assets/71cea9f4-7658-4776-865d-0f7c5682e67a) | ![Screenshot 2024-12-12 at 11 40 18](https://github.com/user-attachments/assets/b03e8a75-68d3-4c26-942c-1d41072a62ee) | ![image](https://github.com/user-attachments/assets/6a259924-7081-426c-8bd2-346e4f0ae152) | | ![Screenshot 2024-12-12 at 11 48 07](https://github.com/user-attachments/assets/2b340d38-26a5-45bc-851e-8b1956503500) | ![Screenshot 2024-12-12 at 11 42 03](https://github.com/user-attachments/assets/ecef0b37-a43c-42a3-911f-31d4acf9ac7b) | ![Screenshot 2024-12-12 at 12 46 14](https://github.com/user-attachments/assets/f9dddfe0-7296-4394-bb2f-94d702361f49) | | ![Screenshot 2024-12-12 at 11 49 05](https://github.com/user-attachments/assets/d670ad40-58d4-40fb-a88d-7ac5e6c1fbbd) | ![Screenshot 2024-12-12 at 11 43 40](https://github.com/user-attachments/assets/856f9476-c6ff-4405-8865-fb8784f3d818) | ![image](https://github.com/user-attachments/assets/b18f624b-e648-403f-9595-442b2723bdde) | Toasts: | Before | After | | ------ | ------ | | | ![image](https://github.com/user-attachments/assets/36955456-026a-4abe-b872-c72c115a2dbe) | Other changes: | Before | After | | ------ | ------ | | ![Screenshot 2024-12-13 at 17 57 36](https://github.com/user-attachments/assets/263940ea-9396-4f82-b14e-c9086c6d36e8) | ![Screenshot 2024-12-13 at 18 00 26](https://github.com/user-attachments/assets/49430be4-356b-4902-b855-7fc1b252fbdb) | | ![Screenshot 2024-12-13 at 18 06 59](https://github.com/user-attachments/assets/67ad0faf-42f7-44e1-9290-857e28a9d5e4) | ![Screenshot 2024-12-13 at 18 02 04](https://github.com/user-attachments/assets/357d7296-7b5f-4df5-b664-8bd99c93205b) | | ![Screenshot 2024-12-13 at 18 08 20](https://github.com/user-attachments/assets/819a7c33-9c7a-4423-be1b-cbec30dd8a97) | ![Screenshot 2024-12-13 at 18 09 30](https://github.com/user-attachments/assets/c4b3cb40-f572-4828-888b-4cfff6b565b9) | | ![Screenshot 2024-12-13 at 18 11 52](https://github.com/user-attachments/assets/c63ccdf3-aeaa-4047-a3b5-f67c11690020) | ![Screenshot 2024-12-13 at 18 10 34](https://github.com/user-attachments/assets/6a6343d5-a7f7-45da-bf40-46b14b257e41) | | ![Screenshot 2024-12-13 at 18 30 32](https://github.com/user-attachments/assets/7aa13ad8-ba6f-4801-b0fe-ff90dd9038c1) | ![Screenshot 2024-12-13 at 18 32 59](https://github.com/user-attachments/assets/17774c78-003d-46fd-b7bb-d21cdee7df47) | | ![Screenshot 2024-12-13 at 18 35 56](https://github.com/user-attachments/assets/b7b003c6-11a6-4a1d-97c2-c1b920c0fd1a) | ![Screenshot 2024-12-13 at 18 34 25](https://github.com/user-attachments/assets/5af49323-cb9c-433d-aa6f-91af21dfa5bf) | | | | - [ ] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md) --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../src/components/date_picker_wrapper.tsx | 7 +- .../components/full_time_range_selector.tsx | 2 +- .../data_drift/data_drift_page.tsx | 1 - .../index_data_visualizer_view.tsx | 79 ++++---- .../shared/aiops/public/cases/constants.ts | 32 ++++ .../change_point_detection/fields_config.tsx | 81 ++++---- .../log_categorization/attachments_menu.tsx | 13 +- .../log_categorization_page.tsx | 88 +++++---- .../sampling_menu/sampling_menu.tsx | 10 +- .../log_rate_analysis_attachments_menu.tsx | 13 +- .../components/page_header/page_header.tsx | 1 - .../aiops/public/hooks/use_cases_modal.ts | 22 ++- .../contexts/kibana/use_cases_modal.ts | 23 ++- .../explorer/anomaly_context_menu.tsx | 9 +- .../application/explorer/anomaly_timeline.tsx | 10 +- .../forecasting_modal/forecast_button.tsx | 2 + .../series_controls/series_controls.tsx | 4 +- .../timeseriesexplorer_controls.tsx | 179 ++++++++++++------ .../timeseriesexplorer/timeseriesexplorer.js | 60 +++--- .../shared/ml/public/cases/constants.ts | 27 +++ .../cases/public/common/translations.ts | 2 +- .../public/common/use_cases_toast.test.tsx | 2 +- .../cases/public/common/use_cases_toast.tsx | 28 ++- .../apps/cases/group2/attachment_framework.ts | 8 +- .../cases/attachment_framework.ts | 4 +- 25 files changed, 447 insertions(+), 260 deletions(-) create mode 100644 x-pack/platform/plugins/shared/aiops/public/cases/constants.ts create mode 100644 x-pack/platform/plugins/shared/ml/public/cases/constants.ts diff --git a/x-pack/platform/packages/private/ml/date_picker/src/components/date_picker_wrapper.tsx b/x-pack/platform/packages/private/ml/date_picker/src/components/date_picker_wrapper.tsx index 3925b51b6c38e..060b0ee997d00 100644 --- a/x-pack/platform/packages/private/ml/date_picker/src/components/date_picker_wrapper.tsx +++ b/x-pack/platform/packages/private/ml/date_picker/src/components/date_picker_wrapper.tsx @@ -87,10 +87,6 @@ interface DatePickerWrapperProps { * Width setting to be passed on to `EuiSuperDatePicker` */ width?: EuiSuperDatePickerProps['width']; - /** - * Boolean flag to set use of flex group wrapper - */ - flexGroup?: boolean; /** * Boolean flag to disable the date picker */ @@ -123,7 +119,6 @@ export const DatePickerWrapper: FC = (props) => { isLoading = false, showRefresh, width, - flexGroup = true, isDisabled = false, needsUpdate, onRefresh, @@ -363,6 +358,8 @@ export const DatePickerWrapper: FC = (props) => { > ); + const flexGroup = !isTimeRangeSelectorEnabled || isAutoRefreshOnly === true; + const wrapped = flexGroup ? ( {flexItems} diff --git a/x-pack/platform/packages/private/ml/date_picker/src/components/full_time_range_selector.tsx b/x-pack/platform/packages/private/ml/date_picker/src/components/full_time_range_selector.tsx index da0740f884ea9..f6e0aa1850cb9 100644 --- a/x-pack/platform/packages/private/ml/date_picker/src/components/full_time_range_selector.tsx +++ b/x-pack/platform/packages/private/ml/date_picker/src/components/full_time_range_selector.tsx @@ -220,7 +220,7 @@ export const FullTimeRangeSelector: FC = (props) => }, [frozenDataPreference, showFrozenDataTierChoice]); return ( - + = ({ onRefresh, needsUpdate }) => { isAutoRefreshOnly={!hasValidTimeField} showRefresh={!hasValidTimeField} width="full" - flexGroup={!hasValidTimeField} onRefresh={onRefresh} needsUpdate={needsUpdate} />, diff --git a/x-pack/platform/plugins/private/data_visualizer/public/application/index_data_visualizer/components/index_data_visualizer_view/index_data_visualizer_view.tsx b/x-pack/platform/plugins/private/data_visualizer/public/application/index_data_visualizer/components/index_data_visualizer_view/index_data_visualizer_view.tsx index 5f1f78af90073..b6ab99583cf49 100644 --- a/x-pack/platform/plugins/private/data_visualizer/public/application/index_data_visualizer/components/index_data_visualizer_view/index_data_visualizer_view.tsx +++ b/x-pack/platform/plugins/private/data_visualizer/public/application/index_data_visualizer/components/index_data_visualizer_view/index_data_visualizer_view.tsx @@ -12,7 +12,6 @@ import type { Required } from 'utility-types'; import { getEsQueryConfig } from '@kbn/data-plugin/common'; import { - useEuiTheme, useEuiBreakpoint, useIsWithinMaxBreakpoint, EuiFlexGroup, @@ -21,7 +20,6 @@ import { EuiPanel, EuiProgress, EuiSpacer, - EuiTitle, } from '@elastic/eui'; import { type Filter, FilterStateStore, type Query, buildEsQuery } from '@kbn/es-query'; @@ -108,8 +106,6 @@ export interface IndexDataVisualizerViewProps { } export const IndexDataVisualizerView: FC = (dataVisualizerProps) => { - const { euiTheme } = useEuiTheme(); - const [savedRandomSamplerPreference, saveRandomSamplerPreference] = useStorage< DVKey, DVStorageMapped @@ -515,49 +511,40 @@ export const IndexDataVisualizerView: FC = (dataVi paddingSize="none" > - - - - {currentDataView.getName()} - - - - - {isWithinLargeBreakpoint ? : null} - - {hasValidTimeField ? ( - - - - ) : null} - - + {currentDataView.getName()} + {/* TODO: This management section shouldn't live inside the header */} + + > + } + rightSideGroupProps={{ + gutterSize: 's', + 'data-test-subj': 'dataVisualizerTimeRangeSelectorSection', + }} + rightSideItems={[ + , + hasValidTimeField && ( + - - - + ), + ]} + /> diff --git a/x-pack/platform/plugins/shared/aiops/public/cases/constants.ts b/x-pack/platform/plugins/shared/aiops/public/cases/constants.ts new file mode 100644 index 0000000000000..547734955cbbb --- /dev/null +++ b/x-pack/platform/plugins/shared/aiops/public/cases/constants.ts @@ -0,0 +1,32 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { ChangePointDetectionViewType } from '@kbn/aiops-change-point-detection/constants'; +import { i18n } from '@kbn/i18n'; + +/** + * Titles for the cases toast messages + */ +export const CASES_TOAST_MESSAGES_TITLES = { + CHANGE_POINT_DETECTION: (viewType: ChangePointDetectionViewType, chartsCount: number) => + viewType === 'table' + ? i18n.translate('xpack.aiops.cases.changePointDetectionTableTitle', { + defaultMessage: 'Change point table', + }) + : i18n.translate('xpack.aiops.cases.changePointDetectionChartsTitle', { + defaultMessage: 'Change point {chartsCount, plural, one {chart} other {charts}}', + values: { + chartsCount, + }, + }), + LOG_RATE_ANALYSIS: i18n.translate('xpack.aiops.cases.logRateAnalysisTitle', { + defaultMessage: 'Log rate analysis', + }), + PATTERN_ANALYSIS: i18n.translate('xpack.aiops.cases.logPatternAnalysisTitle', { + defaultMessage: 'Log pattern analysis', + }), +}; diff --git a/x-pack/platform/plugins/shared/aiops/public/components/change_point_detection/fields_config.tsx b/x-pack/platform/plugins/shared/aiops/public/components/change_point_detection/fields_config.tsx index fb1a51c311668..226eb6fbbc2fc 100644 --- a/x-pack/platform/plugins/shared/aiops/public/components/change_point_detection/fields_config.tsx +++ b/x-pack/platform/plugins/shared/aiops/public/components/change_point_detection/fields_config.tsx @@ -56,6 +56,7 @@ import { import { useChangePointResults } from './use_change_point_agg_request'; import { useSplitFieldCardinality } from './use_split_field_cardinality'; import { ViewTypeSelector } from './view_type_selector'; +import { CASES_TOAST_MESSAGES_TITLES } from '../../cases/constants'; const selectControlCss = { width: '350px' }; @@ -215,12 +216,18 @@ const FieldPanel: FC = ({ progress, } = useChangePointResults(fieldConfig, requestParams, combinedQuery, splitFieldCardinality); - const openCasesModalCallback = useCasesModal(EMBEDDABLE_CHANGE_POINT_CHART_TYPE); - const selectedPartitions = useMemo(() => { return (selectedChangePoints[panelIndex] ?? []).map((v) => v.group?.value as string); }, [selectedChangePoints, panelIndex]); + const openCasesModalCallback = useCasesModal( + EMBEDDABLE_CHANGE_POINT_CHART_TYPE, + CASES_TOAST_MESSAGES_TITLES.CHANGE_POINT_DETECTION( + caseAttachment.viewType, + selectedPartitions.length + ) + ); + const caseAttachmentButtonDisabled = isDefined(fieldConfig.splitField) && selectedPartitions.length === 0; @@ -283,6 +290,7 @@ const FieldPanel: FC = ({ defaultMessage: 'To dashboard', }), panel: 'attachToDashboardPanel', + icon: 'dashboardApp', 'data-test-subj': 'aiopsChangePointDetectionAttachToDashboardButton', }, ] @@ -307,6 +315,7 @@ const FieldPanel: FC = ({ : {}), 'data-test-subj': 'aiopsChangePointDetectionAttachToCaseButton', panel: 'attachToCasePanel', + icon: 'casesApp', }, ] : []), @@ -513,42 +522,37 @@ const FieldPanel: FC = ({ return ( - + - - - !prevState)} - aria-label={i18n.translate('xpack.aiops.changePointDetection.expandConfigLabel', { - defaultMessage: 'Expand configuration', - })} - /> - - - - - - } - value={progress ?? 0} - max={100} - valueText - size="m" + !prevState)} + aria-label={i18n.translate('xpack.aiops.changePointDetection.expandConfigLabel', { + defaultMessage: 'Expand configuration', + })} + size="s" + /> + + + + + + - - - + } + value={progress ?? 0} + max={100} + valueText + size="m" + /> + - + @@ -565,8 +569,11 @@ const FieldPanel: FC = ({ defaultMessage: 'Context menu', } )} - iconType="boxesHorizontal" color="text" + display="base" + size="s" + isSelected={isActionMenuOpen} + iconType="boxesHorizontal" onClick={setIsActionMenuOpen.bind(null, !isActionMenuOpen)} /> } @@ -678,7 +685,7 @@ export const FieldsControls: FC> = ({ : undefined } > - + onChangeFn('fn', v)} /> diff --git a/x-pack/platform/plugins/shared/aiops/public/components/log_categorization/attachments_menu.tsx b/x-pack/platform/plugins/shared/aiops/public/components/log_categorization/attachments_menu.tsx index 409b489ff4510..a82e1a4b087ed 100644 --- a/x-pack/platform/plugins/shared/aiops/public/components/log_categorization/attachments_menu.tsx +++ b/x-pack/platform/plugins/shared/aiops/public/components/log_categorization/attachments_menu.tsx @@ -34,6 +34,7 @@ import type { PatternAnalysisEmbeddableState } from '../../embeddables/pattern_a import type { RandomSamplerOption, RandomSamplerProbability } from './sampling_menu/random_sampler'; import { useCasesModal } from '../../hooks/use_cases_modal'; import { useAiopsAppContext } from '../../hooks/use_aiops_app_context'; +import { CASES_TOAST_MESSAGES_TITLES } from '../../cases/constants'; const SavedObjectSaveModalDashboard = withSuspense(LazySavedObjectSaveModalDashboard); @@ -66,7 +67,10 @@ export const AttachmentsMenu = ({ update: false, }; - const openCasesModalCallback = useCasesModal(EMBEDDABLE_PATTERN_ANALYSIS_TYPE); + const openCasesModalCallback = useCasesModal( + EMBEDDABLE_PATTERN_ANALYSIS_TYPE, + CASES_TOAST_MESSAGES_TITLES.PATTERN_ANALYSIS + ); const timeRange = useTimeRangeUpdates(); @@ -123,6 +127,7 @@ export const AttachmentsMenu = ({ defaultMessage: 'Add to dashboard', }), panel: 'attachToDashboardPanel', + icon: 'dashboardApp', 'data-test-subj': 'aiopsLogPatternAnalysisAttachToDashboardButton', }, ] @@ -133,6 +138,7 @@ export const AttachmentsMenu = ({ name: i18n.translate('xpack.aiops.logCategorization.attachToCaseLabel', { defaultMessage: 'Add to case', }), + icon: 'casesApp', 'data-test-subj': 'aiopsLogPatternAnalysisAttachToCaseButton', onClick: () => { setIsActionMenuOpen(false); @@ -218,8 +224,11 @@ export const AttachmentsMenu = ({ defaultMessage: 'Attachments', } )} - iconType="boxesHorizontal" + size="m" color="text" + display="base" + isSelected={isActionMenuOpen} + iconType="boxesHorizontal" onClick={() => setIsActionMenuOpen(!isActionMenuOpen)} /> } diff --git a/x-pack/platform/plugins/shared/aiops/public/components/log_categorization/log_categorization_page.tsx b/x-pack/platform/plugins/shared/aiops/public/components/log_categorization/log_categorization_page.tsx index 9bebf4d9b731a..482ef5801183d 100644 --- a/x-pack/platform/plugins/shared/aiops/public/components/log_categorization/log_categorization_page.tsx +++ b/x-pack/platform/plugins/shared/aiops/public/components/log_categorization/log_categorization_page.tsx @@ -357,48 +357,56 @@ export const LogCategorizationPage: FC = () => { - - - - - - - - {loading === false ? ( - { - loadCategories(); - }} - data-test-subj="aiopsLogPatternAnalysisRunButton" + + + + - - - ) : ( - cancelRequest()} - > - Cancel - - )} - - - + + + + {loading === false ? ( + { + loadCategories(); + }} + data-test-subj="aiopsLogPatternAnalysisRunButton" + > + + + ) : ( + cancelRequest()} + > + Cancel + + )} + + + loadCategories()} /> diff --git a/x-pack/platform/plugins/shared/aiops/public/components/log_categorization/sampling_menu/sampling_menu.tsx b/x-pack/platform/plugins/shared/aiops/public/components/log_categorization/sampling_menu/sampling_menu.tsx index d2dd9591e76f7..7da2736fdd453 100644 --- a/x-pack/platform/plugins/shared/aiops/public/components/log_categorization/sampling_menu/sampling_menu.tsx +++ b/x-pack/platform/plugins/shared/aiops/public/components/log_categorization/sampling_menu/sampling_menu.tsx @@ -8,7 +8,7 @@ import type { FC } from 'react'; import { useMemo } from 'react'; import React, { useState } from 'react'; -import { EuiPopover, EuiButtonEmpty, EuiPanel } from '@elastic/eui'; +import { EuiPopover, EuiPanel, EuiButton } from '@elastic/eui'; import useObservable from 'react-use/lib/useObservable'; import type { RandomSampler } from './random_sampler'; @@ -34,14 +34,16 @@ export const SamplingMenu: FC = ({ randomSampler, reload }) => { data-test-subj="aiopsRandomSamplerOptionsPopover" id="aiopsSamplingOptions" button={ - setShowSamplingOptionsPopover(!showSamplingOptionsPopover)} + color="text" iconSide="right" - iconType="arrowDown" + isSelected={showSamplingOptionsPopover} + iconType={showSamplingOptionsPopover ? 'arrowUp' : 'arrowDown'} > {buttonText} - + } isOpen={showSamplingOptionsPopover} closePopover={() => setShowSamplingOptionsPopover(false)} diff --git a/x-pack/platform/plugins/shared/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_attachments_menu.tsx b/x-pack/platform/plugins/shared/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_attachments_menu.tsx index d7e68ae42799c..def6721c2adb3 100644 --- a/x-pack/platform/plugins/shared/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_attachments_menu.tsx +++ b/x-pack/platform/plugins/shared/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_attachments_menu.tsx @@ -28,6 +28,7 @@ import { } from '@elastic/eui'; import type { WindowParameters } from '@kbn/aiops-log-rate-analysis/window_parameters'; import type { SignificantItem } from '@kbn/ml-agg-utils'; +import { CASES_TOAST_MESSAGES_TITLES } from '../../../cases/constants'; import { useCasesModal } from '../../../hooks/use_cases_modal'; import { useDataSource } from '../../../hooks/use_data_source'; import type { LogRateAnalysisEmbeddableState } from '../../../embeddables/log_rate_analysis/types'; @@ -60,7 +61,10 @@ export const LogRateAnalysisAttachmentsMenu = ({ const timeRange = useTimeRangeUpdates(); const absoluteTimeRange = useTimeRangeUpdates(true); - const openCasesModalCallback = useCasesModal(EMBEDDABLE_LOG_RATE_ANALYSIS_TYPE); + const openCasesModalCallback = useCasesModal( + EMBEDDABLE_LOG_RATE_ANALYSIS_TYPE, + CASES_TOAST_MESSAGES_TITLES.LOG_RATE_ANALYSIS + ); const canEditDashboards = capabilities.dashboard.createNew; @@ -120,6 +124,7 @@ export const LogRateAnalysisAttachmentsMenu = ({ name: i18n.translate('xpack.aiops.logRateAnalysis.addToDashboardTitle', { defaultMessage: 'Add to dashboard', }), + icon: 'dashboardApp', panel: 'attachToDashboardPanel', 'data-test-subj': 'aiopsLogRateAnalysisAttachToDashboardButton', }, @@ -131,6 +136,7 @@ export const LogRateAnalysisAttachmentsMenu = ({ name: i18n.translate('xpack.aiops.logRateAnalysis.attachToCaseLabel', { defaultMessage: 'Add to case', }), + icon: 'casesApp', 'data-test-subj': 'aiopsLogRateAnalysisAttachToCaseButton', disabled: !isCasesAttachmentEnabled, ...(!isCasesAttachmentEnabled @@ -217,8 +223,11 @@ export const LogRateAnalysisAttachmentsMenu = ({ aria-label={i18n.translate('xpack.aiops.logRateAnalysis.attachmentsMenuAriaLabel', { defaultMessage: 'Attachments', })} - iconType="boxesHorizontal" color="text" + display="base" + size="s" + isSelected={isActionMenuOpen} + iconType="boxesHorizontal" onClick={() => setIsActionMenuOpen(!isActionMenuOpen)} /> } diff --git a/x-pack/platform/plugins/shared/aiops/public/components/page_header/page_header.tsx b/x-pack/platform/plugins/shared/aiops/public/components/page_header/page_header.tsx index a01e715e86272..3efed2b74093e 100644 --- a/x-pack/platform/plugins/shared/aiops/public/components/page_header/page_header.tsx +++ b/x-pack/platform/plugins/shared/aiops/public/components/page_header/page_header.tsx @@ -80,7 +80,6 @@ export const PageHeader: FC = () => { isAutoRefreshOnly={!hasValidTimeField} showRefresh={!hasValidTimeField} width="full" - flexGroup={!hasValidTimeField} />, hasValidTimeField && ( = * Returns a callback for opening the cases modal with provided attachment state. */ export const useCasesModal = ( - embeddableType: EmbeddableType + embeddableType: EmbeddableType, + title: string ) => { const { cases } = useAiopsAppContext(); - const selectCaseModal = cases?.hooks.useCasesAddToExistingCaseModal(); + const successMessage = useMemo(() => { + return i18n.translate('xpack.aiops.useCasesModal.successMessage', { + defaultMessage: '{title} added to case.', + values: { title }, + }); + }, [title]); + + const selectCaseModal = cases?.hooks.useCasesAddToExistingCaseModal({ + successToaster: { + content: successMessage, + }, + }); return useCallback( (persistableState: Partial, 'id'>>) => { @@ -64,7 +77,6 @@ export const useCasesModal = ( ], }); }, - // eslint-disable-next-line react-hooks/exhaustive-deps - [embeddableType] + [embeddableType, selectCaseModal] ); }; diff --git a/x-pack/platform/plugins/shared/ml/public/application/contexts/kibana/use_cases_modal.ts b/x-pack/platform/plugins/shared/ml/public/application/contexts/kibana/use_cases_modal.ts index c6142e715bad7..f24a541884555 100644 --- a/x-pack/platform/plugins/shared/ml/public/application/contexts/kibana/use_cases_modal.ts +++ b/x-pack/platform/plugins/shared/ml/public/application/contexts/kibana/use_cases_modal.ts @@ -5,9 +5,10 @@ * 2.0. */ -import { useCallback } from 'react'; +import { useCallback, useMemo } from 'react'; import { stringHash } from '@kbn/ml-string-hash'; import { AttachmentType } from '@kbn/cases-plugin/common'; +import { i18n } from '@kbn/i18n'; import { useMlKibana } from './kibana_context'; import type { MappedEmbeddableTypeOf, MlEmbeddableTypes } from '../../../embeddables'; @@ -15,13 +16,25 @@ import type { MappedEmbeddableTypeOf, MlEmbeddableTypes } from '../../../embedda * Returns a callback for opening the cases modal with provided attachment state. */ export const useCasesModal = ( - embeddableType: EmbeddableType + embeddableType: EmbeddableType, + title: string ) => { const { services: { cases }, } = useMlKibana(); - const selectCaseModal = cases?.hooks.useCasesAddToExistingCaseModal(); + const successMessage = useMemo(() => { + return i18n.translate('xpack.ml.useCasesModal.successMessage', { + defaultMessage: '{title} added to case.', + values: { title }, + }); + }, [title]); + + const selectCaseModal = cases?.hooks.useCasesAddToExistingCaseModal({ + successToaster: { + content: successMessage, + }, + }); return useCallback( (persistableState: Partial, 'id'>>) => { @@ -48,7 +61,7 @@ export const useCasesModal = ( ], }); }, - // eslint-disable-next-line react-hooks/exhaustive-deps - [embeddableType] + + [embeddableType, selectCaseModal] ); }; diff --git a/x-pack/platform/plugins/shared/ml/public/application/explorer/anomaly_context_menu.tsx b/x-pack/platform/plugins/shared/ml/public/application/explorer/anomaly_context_menu.tsx index 7904a55264d08..ccee7f8fa1be5 100644 --- a/x-pack/platform/plugins/shared/ml/public/application/explorer/anomaly_context_menu.tsx +++ b/x-pack/platform/plugins/shared/ml/public/application/explorer/anomaly_context_menu.tsx @@ -52,6 +52,7 @@ import { useMlKibana } from '../contexts/kibana'; import type { AppStateSelectedCells, ExplorerJob } from './explorer_utils'; import { getSelectionInfluencers, getSelectionTimeRange } from './explorer_utils'; import { getDefaultExplorerChartsPanelTitle } from '../../embeddables/anomaly_charts/utils'; +import { CASES_TOAST_MESSAGES_TITLES } from '../../cases/constants'; interface AnomalyContextMenuProps { selectedJobs: ExplorerJob[]; @@ -99,7 +100,10 @@ export const AnomalyContextMenu: FC = ({ [setIsMenuOpen] ); - const openCasesModal = useCasesModal(ANOMALY_EXPLORER_CHARTS_EMBEDDABLE_TYPE); + const openCasesModal = useCasesModal( + ANOMALY_EXPLORER_CHARTS_EMBEDDABLE_TYPE, + CASES_TOAST_MESSAGES_TITLES.ANOMALY_CHARTS(maxSeriesToPlot) + ); const canEditDashboards = capabilities.dashboard?.createNew ?? false; const casesPrivileges = cases?.helpers.canUseCases(); @@ -266,6 +270,7 @@ export const AnomalyContextMenu: FC = ({ /> ), panel: 'addToDashboardPanel', + icon: 'dashboardApp', 'data-test-subj': 'mlAnomalyAddChartsToDashboardButton', }); @@ -286,6 +291,7 @@ export const AnomalyContextMenu: FC = ({ name: ( ), + icon: 'casesApp', panel: 'addToCasePanel', 'data-test-subj': 'mlAnomalyAttachChartsToCasesButton', }); @@ -329,6 +335,7 @@ export const AnomalyContextMenu: FC = ({ defaultMessage: 'Actions', })} color="text" + display="base" iconType="boxesHorizontal" onClick={setIsMenuOpen.bind(null, !isMenuOpen)} data-test-subj="mlExplorerAnomalyPanelMenu" diff --git a/x-pack/platform/plugins/shared/ml/public/application/explorer/anomaly_timeline.tsx b/x-pack/platform/plugins/shared/ml/public/application/explorer/anomaly_timeline.tsx index cad2ef9376890..e70ca44772ed8 100644 --- a/x-pack/platform/plugins/shared/ml/public/application/explorer/anomaly_timeline.tsx +++ b/x-pack/platform/plugins/shared/ml/public/application/explorer/anomaly_timeline.tsx @@ -66,6 +66,7 @@ import { useAnomalyExplorerContext } from './anomaly_explorer_context'; import { getTimeBoundsFromSelection } from './hooks/use_selected_cells'; import { SwimLaneWrapper } from './alerts'; import { Y_AXIS_LABEL_WIDTH } from './constants'; +import { CASES_TOAST_MESSAGES_TITLES } from '../../cases/constants'; import type { ExplorerState } from './explorer_data'; import { useJobSelection } from './hooks/use_job_selection'; @@ -187,7 +188,10 @@ export const AnomalyTimeline: FC = React.memo( [severityUpdate, swimLaneSeverity] ); - const openCasesModalCallback = useCasesModal(ANOMALY_SWIMLANE_EMBEDDABLE_TYPE); + const openCasesModalCallback = useCasesModal( + ANOMALY_SWIMLANE_EMBEDDABLE_TYPE, + CASES_TOAST_MESSAGES_TITLES.ANOMALY_TIMELINE + ); const openCasesModal = useCallback( (swimLaneType: SwimlaneType) => { @@ -235,6 +239,7 @@ export const AnomalyTimeline: FC = React.memo( /> ), panel: 'addToDashboardPanel', + icon: 'dashboardApp', 'data-test-subj': 'mlAnomalyTimelinePanelAddToDashboardButton', }); @@ -280,6 +285,7 @@ export const AnomalyTimeline: FC = React.memo( defaultMessage="Add to case" /> ), + icon: 'casesApp', 'data-test-subj': 'mlAnomalyTimelinePanelAttachToCaseButton', }); @@ -428,6 +434,8 @@ export const AnomalyTimeline: FC = React.memo( defaultMessage: 'Actions', })} color="text" + display="base" + isSelected={isMenuOpen} iconType="boxesHorizontal" onClick={setIsMenuOpen.bind(null, !isMenuOpen)} data-test-subj="mlAnomalyTimelinePanelMenu" diff --git a/x-pack/platform/plugins/shared/ml/public/application/timeseriesexplorer/components/forecasting_modal/forecast_button.tsx b/x-pack/platform/plugins/shared/ml/public/application/timeseriesexplorer/components/forecasting_modal/forecast_button.tsx index c989bb6ebd38d..cf94ada9c35c9 100644 --- a/x-pack/platform/plugins/shared/ml/public/application/timeseriesexplorer/components/forecasting_modal/forecast_button.tsx +++ b/x-pack/platform/plugins/shared/ml/public/application/timeseriesexplorer/components/forecasting_modal/forecast_button.tsx @@ -20,6 +20,8 @@ export const ForecastButton: FC = ({ isDisabled, onClick, mode = 'full' } const Button = mode === 'full' ? EuiButton : EuiButtonEmpty; return ( > = ({ return ( - - + + void; onShowAnnotationsChange: () => void; onShowForecastChange: () => void; + fullRefresh: boolean; + loading: boolean; + hasResults: boolean; + selectedJob: CombinedJobWithStats; + selectedJobId: string; + jobs: CombinedJobWithStats[]; + setForecastId: (forecastId: string) => void; + entities: Entity[]; + jobState: MlJobState; + earliestRecordTimestamp: number; + latestRecordTimestamp: number; } const SavedObjectSaveModalDashboard = withSuspense(LazySavedObjectSaveModalDashboard); @@ -74,6 +90,16 @@ export const TimeSeriesExplorerControls: FC = ({ onShowAnnotationsChange, onShowModelBoundsChange, onShowForecastChange, + fullRefresh, + loading, + hasResults, + setForecastId, + selectedJob, + entities, + jobs, + jobState, + earliestRecordTimestamp, + latestRecordTimestamp, }) => { const [isMenuOpen, setIsMenuOpen] = useState(false); const [createInDashboard, setCreateInDashboard] = useState(false); @@ -100,7 +126,13 @@ export const TimeSeriesExplorerControls: FC = ({ [setIsMenuOpen] ); - const openCasesModalCallback = useCasesModal(ANOMALY_SINGLE_METRIC_VIEWER_EMBEDDABLE_TYPE); + const openCasesModalCallback = useCasesModal( + ANOMALY_SINGLE_METRIC_VIEWER_EMBEDDABLE_TYPE, + CASES_TOAST_MESSAGES_TITLES.SINGLE_METRIC_VIEWER + ); + + const showControls = + (fullRefresh === false || loading === false) && hasResults === true && jobs.length > 0; const menuPanels: EuiContextMenuPanelDescriptor[] = [ { @@ -113,6 +145,7 @@ export const TimeSeriesExplorerControls: FC = ({ defaultMessage="Add to dashboard" /> ), + icon: 'dashboardApp', onClick: closePopoverOnAction(() => { setCreateInDashboard(true); }), @@ -131,6 +164,7 @@ export const TimeSeriesExplorerControls: FC = ({ defaultMessage="Add to case" /> ), + icon: 'casesApp', onClick: closePopoverOnAction(() => { openCasesModalCallback({ forecastId, @@ -175,72 +209,101 @@ export const TimeSeriesExplorerControls: FC = ({ return ( <> - - {showModelBoundsCheckbox && ( - - + + {showModelBoundsCheckbox && showControls && ( + + + + )} - {showAnnotationsCheckbox && ( + {showAnnotationsCheckbox && showControls && ( - + + + )} - {showForecastCheckbox && ( - - - {i18n.translate('xpack.ml.timeSeriesExplorer.showForecastLabel', { - defaultMessage: 'show forecast', - })} - - } - checked={showForecast} - onChange={onShowForecastChange} - /> + {showForecastCheckbox && showControls && ( + + + + {i18n.translate('xpack.ml.timeSeriesExplorer.showForecastLabel', { + defaultMessage: 'show forecast', + })} + + } + checked={showForecast} + onChange={onShowForecastChange} + /> + )} - {canEditDashboards ? ( - - - } - isOpen={isMenuOpen} - closePopover={setIsMenuOpen.bind(null, false)} - panelPaddingSize="none" - anchorPosition="downLeft" - > - - + + + + + {canEditDashboards && showControls ? ( + + + + } + isOpen={isMenuOpen} + closePopover={setIsMenuOpen.bind(null, false)} + panelPaddingSize="none" + anchorPosition="downLeft" + > + + + ) : null} diff --git a/x-pack/platform/plugins/shared/ml/public/application/timeseriesexplorer/timeseriesexplorer.js b/x-pack/platform/plugins/shared/ml/public/application/timeseriesexplorer/timeseriesexplorer.js index 92b3c480a47ee..6de20da5847f1 100644 --- a/x-pack/platform/plugins/shared/ml/public/application/timeseriesexplorer/timeseriesexplorer.js +++ b/x-pack/platform/plugins/shared/ml/public/application/timeseriesexplorer/timeseriesexplorer.js @@ -28,7 +28,6 @@ import { EuiCallOut, EuiFlexGroup, EuiFlexItem, - EuiFormRow, EuiSpacer, EuiPanel, EuiTitle, @@ -64,7 +63,6 @@ import { mlJobServiceFactory } from '../services/job_service'; import { mlResultsServiceProvider } from '../services/results_service'; import { toastNotificationServiceProvider } from '../services/toast_notification_service'; -import { ForecastingModal } from './components/forecasting_modal/forecasting_modal'; import { TimeseriesexplorerNoChartData } from './components/timeseriesexplorer_no_chart_data'; import { TimeSeriesExplorerPage } from './timeseriesexplorer_page'; import { TimeSeriesExplorerHelpPopover } from './timeseriesexplorer_help_popover'; @@ -1080,20 +1078,34 @@ export class TimeSeriesExplorer extends React.Component { setFunctionDescription={this.setFunctionDescription} > {arePartitioningFieldsProvided && ( - - - - + + )} @@ -1192,22 +1204,6 @@ export class TimeSeriesExplorer extends React.Component { - - + i18n.translate('xpack.ml.cases.anomalyChartsTitle', { + defaultMessage: 'Anomaly {chartsCount, plural, one {chart} other {charts}}', + values: { + chartsCount, + }, + }), + SINGLE_METRIC_VIEWER: i18n.translate('xpack.ml.cases.singleMetricViewerTitle', { + defaultMessage: 'Single metric viewer', + }), +}; diff --git a/x-pack/plugins/cases/public/common/translations.ts b/x-pack/plugins/cases/public/common/translations.ts index 7fa5b54db00ec..474edc33c6e27 100644 --- a/x-pack/plugins/cases/public/common/translations.ts +++ b/x-pack/plugins/cases/public/common/translations.ts @@ -319,7 +319,7 @@ export const LINK_APPROPRIATE_LICENSE = i18n.translate('xpack.cases.common.appro export const CASE_SUCCESS_TOAST = (title: string) => i18n.translate('xpack.cases.actions.caseSuccessToast', { values: { title }, - defaultMessage: '{title} has been updated', + defaultMessage: 'Case {title} updated', }); export const CASE_ALERT_SUCCESS_TOAST = (title: string, quantity: number = 1) => diff --git a/x-pack/plugins/cases/public/common/use_cases_toast.test.tsx b/x-pack/plugins/cases/public/common/use_cases_toast.test.tsx index c1f7d67a8b8b1..03b65029bc816 100644 --- a/x-pack/plugins/cases/public/common/use_cases_toast.test.tsx +++ b/x-pack/plugins/cases/public/common/use_cases_toast.test.tsx @@ -144,7 +144,7 @@ describe('Use cases toast hook', () => { theCase: mockCase, attachments: [basicComment as SupportedCaseAttachment], }); - validateTitle('Another horrible breach!! has been updated'); + validateTitle('Case Another horrible breach!! updated'); }); }); diff --git a/x-pack/plugins/cases/public/common/use_cases_toast.tsx b/x-pack/plugins/cases/public/common/use_cases_toast.tsx index 05c8e2f186a8b..3292a648a9b24 100644 --- a/x-pack/plugins/cases/public/common/use_cases_toast.tsx +++ b/x-pack/plugins/cases/public/common/use_cases_toast.tsx @@ -6,7 +6,14 @@ */ import type { ErrorToastOptions } from '@kbn/core/public'; -import { EuiButtonEmpty, EuiText, logicalCSS, useEuiTheme } from '@elastic/eui'; +import { + EuiButton, + EuiFlexGroup, + EuiFlexItem, + EuiText, + logicalCSS, + useEuiTheme, +} from '@elastic/eui'; import React, { useMemo } from 'react'; import { css } from '@emotion/react'; import { toMountPoint } from '@kbn/react-kibana-mount'; @@ -203,14 +210,17 @@ export const CaseToastSuccessContent = ({ ) : null} {onViewCaseClick !== undefined ? ( - - {VIEW_CASE} - + + + + {VIEW_CASE} + + + ) : null} > ); diff --git a/x-pack/test/functional_with_es_ssl/apps/cases/group2/attachment_framework.ts b/x-pack/test/functional_with_es_ssl/apps/cases/group2/attachment_framework.ts index e887f6ee80e38..322e777f9c172 100644 --- a/x-pack/test/functional_with_es_ssl/apps/cases/group2/attachment_framework.ts +++ b/x-pack/test/functional_with_es_ssl/apps/cases/group2/attachment_framework.ts @@ -255,7 +255,7 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { * The flyout close automatically after submitting a case */ await cases.create.createCase({ owner }); - await cases.common.expectToasterToContain('has been updated'); + await cases.common.expectToasterToContain('updated'); await toasts.dismissAllWithChecks(); } @@ -352,7 +352,7 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { await cases.casesTable.getCaseById(currentCaseId); await testSubjects.click(`cases-table-row-select-${currentCaseId}`); - await cases.common.expectToasterToContain('has been updated'); + await cases.common.expectToasterToContain('updated'); await toasts.dismissAllWithChecks(); await ensureFirstCommentOwner(currentCaseId, owner); } @@ -412,7 +412,7 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { }); await testSubjects.click('create-case-submit'); - await cases.common.expectToasterToContain(`${caseTitle} has been updated`); + await cases.common.expectToasterToContain(`Case ${caseTitle} updated`); await testSubjects.click('toaster-content-case-view-link'); await toasts.dismissAllWithChecks(); @@ -438,7 +438,7 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { await testSubjects.click(`cases-table-row-select-${theCase.id}`); - await cases.common.expectToasterToContain(`${theCaseTitle} has been updated`); + await cases.common.expectToasterToContain(`Case ${theCaseTitle} updated`); await testSubjects.click('toaster-content-case-view-link'); await toasts.dismissAllWithChecks(); diff --git a/x-pack/test_serverless/functional/test_suites/observability/cases/attachment_framework.ts b/x-pack/test_serverless/functional/test_suites/observability/cases/attachment_framework.ts index 17caa3d6560f2..83a05fd9e05c2 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/cases/attachment_framework.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/cases/attachment_framework.ts @@ -82,7 +82,7 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { await testSubjects.missingOrFail('caseOwnerSelector'); await testSubjects.click('create-case-submit'); - await cases.common.expectToasterToContain(`${caseTitle} has been updated`); + await cases.common.expectToasterToContain(`Case ${caseTitle} updated`); await testSubjects.click('toaster-content-case-view-link'); await toasts.dismissAllWithChecks(); @@ -115,7 +115,7 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { await testSubjects.click(`cases-table-row-select-${theCase.id}`); - await cases.common.expectToasterToContain(`${theCaseTitle} has been updated`); + await cases.common.expectToasterToContain(`Case ${theCaseTitle} updated`); await testSubjects.click('toaster-content-case-view-link'); await toasts.dismissAllWithChecks(); From 29984c48bdca25336fc5da69484380dc3232b73d Mon Sep 17 00:00:00 2001 From: Robert Jaszczurek <92210485+rbrtj@users.noreply.github.com> Date: Mon, 23 Dec 2024 11:57:31 +0100 Subject: [PATCH 04/35] [ML] Anomaly Detection: Datafeed counts job messages table responsiveness fix (#204625) Fix for: [#204589](https://github.com/elastic/kibana/issues/204589) DFA jobs table: AD jobs table: Datafeed counts job messages table: https://github.com/user-attachments/assets/62cb6708-bdc2-4f79-b016-b3c43486dd3b --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../components/job_messages/job_messages.tsx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/x-pack/platform/plugins/shared/ml/public/application/components/job_messages/job_messages.tsx b/x-pack/platform/plugins/shared/ml/public/application/components/job_messages/job_messages.tsx index 44a9d4f860ecd..988e982614747 100644 --- a/x-pack/platform/plugins/shared/ml/public/application/components/job_messages/job_messages.tsx +++ b/x-pack/platform/plugins/shared/ml/public/application/components/job_messages/job_messages.tsx @@ -66,7 +66,8 @@ export const JobMessages: FC = ({ '' ), render: (message: JobMessage) => , - width: `${euiTheme.size.l}`, + width: `${euiTheme.size.xl}`, + align: 'center', }, { field: 'timestamp', @@ -74,7 +75,7 @@ export const JobMessages: FC = ({ defaultMessage: 'Time', }), render: timeFormatter, - width: '120px', + width: '25%', sortable: true, }, { @@ -82,7 +83,6 @@ export const JobMessages: FC = ({ name: i18n.translate('xpack.ml.jobMessages.messageLabel', { defaultMessage: 'Message', }), - width: '50%', }, ]; @@ -92,7 +92,7 @@ export const JobMessages: FC = ({ name: i18n.translate('xpack.ml.jobMessages.nodeLabel', { defaultMessage: 'Node', }), - width: '150px', + width: '15%', }); } @@ -101,7 +101,7 @@ export const JobMessages: FC = ({ name: i18n.translate('xpack.ml.jobMessages.actionsLabel', { defaultMessage: 'Actions', }), - width: '10%', + width: '15%', actions: [ { render: (message: JobMessage) => { @@ -131,7 +131,7 @@ export const JobMessages: FC = ({ } return cols; - }, [showNodeInfo, refreshMessage, actionHandler, euiTheme]); + }, [refreshMessage, euiTheme.size.xl, showNodeInfo, actionHandler]); const defaultSorting = { sort: { From 8e0561a27b99a99d1b279e6f152b17622a685f1c Mon Sep 17 00:00:00 2001 From: Georgii Gorbachev Date: Mon, 23 Dec 2024 12:36:28 +0100 Subject: [PATCH 05/35] [Security Solution] Fix flaky test for multiLineStringDiffAlgorithm (#205038) **Fixes: https://github.com/elastic/kibana/issues/205014** ## Summary This test on CI runs at least 10x slower than locally, and apparently even 1000ms timeout is not enough. Bumping it to 2000ms and hopefully that will be it. Not sure if it makes sense to bump it even higher, because we need this threshold to be reasonably low, and more than 2 seconds doesn't sound low for local test runs. ### Checklist - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [ ] [Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was used on any tests changed --- .../algorithms/multi_line_string_diff_algorithm.test.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/calculation/algorithms/multi_line_string_diff_algorithm.test.ts b/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/calculation/algorithms/multi_line_string_diff_algorithm.test.ts index 8f0b3586066fa..4ecb828a77d4c 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/calculation/algorithms/multi_line_string_diff_algorithm.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/calculation/algorithms/multi_line_string_diff_algorithm.test.ts @@ -174,11 +174,11 @@ describe('multiLineStringDiffAlgorithm', () => { const result = multiLineStringDiffAlgorithm(mockVersions); const endTime = performance.now(); - // If the regex merge in this function takes over 1 sec, this test fails + // If the regex merge in this function takes over 2 sec, this test fails // Performance measurements: https://github.com/elastic/kibana/pull/199388 // NOTE: despite the fact that this test runs in ~50ms locally, on CI it - // runs slower and can be flaky even with a 500ms threshold. - expect(endTime - startTime).toBeLessThan(1000); + // runs ~10x slower and can be flaky even with a 1000ms threshold. + expect(endTime - startTime).toBeLessThan(2000); expect(result).toEqual( expect.objectContaining({ From 3083706bc9541d84700b81252f0e4880949e4ea0 Mon Sep 17 00:00:00 2001 From: Luke Gmys <11671118+lgestc@users.noreply.github.com> Date: Mon, 23 Dec 2024 14:25:58 +0100 Subject: [PATCH 06/35] [Security Solution] [Cases] Introduce case observables (phase 0 & 1) (#190237) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary ### Introducting Case Observables - _phases 0 and 1_ This pull request introduces case observables to Kibana, enhancing the platform's case management capabilities. It adds support for capturing and displaying observables (e.g., IP addresses, URLs, file hashes) linked to cases. The feature integrates with the Cases UI, allowing users to easily associate observables with cases for better tracking and analysis in incident response workflows. This improves investigative efficiency by correlating observables across multiple cases. #### Requirements: https://docs.google.com/document/d/12hZTpyn0eXy3Xnq8qLBd6_sJxBhNZoI7vXztxWHhUds/edit#heading=h.srf6mb8ifiad #### Design document: https://docs.google.com/document/d/1MeDLl6OEWast1RC1M3_hQXnRCd8frrXdGkFnypIYKJQ/edit#heading=h.kb5lrp2j62id Notable Cases sections are added in this pr: **1. Observables section in the case view, allowing for adding and listing up to 10 observables for the case** ![image](https://github.com/user-attachments/assets/f517803d-a6a3-4428-b3e3-478e70c60050) **2. Similar cases view for every case, allowing for similar case discovery** ![image](https://github.com/user-attachments/assets/388fddfb-9533-4f0d-aa8b-f5601e5323e0) **3. Observable types management view in Cases settings** ![image](https://github.com/user-attachments/assets/2d76f8be-c234-4f24-a419-da54228fb111) Original issue: https://github.com/elastic/kibana/issues/180360 Things skipped for now from MVP: - [ ] Allow users to manually create observables from the cases alerts table using the table actions (Phase 1) - [ ] Allow users to manually create observables of type “hash” from the files table using the table actions (Phase 1) --------- Co-authored-by: Christos Nasikas Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Christos Nasikas --- .../current_fields.json | 3 + .../current_mappings.json | 11 + .../check_registered_types.test.ts | 2 +- x-pack/plugins/cases/common/api/helpers.ts | 26 ++ .../plugins/cases/common/constants/index.ts | 69 +++++ x-pack/plugins/cases/common/types.ts | 2 + .../cases/common/types/api/case/v1.test.ts | 10 + .../plugins/cases/common/types/api/case/v1.ts | 17 +- .../common/types/api/configure/v1.test.ts | 121 +++++++++ .../cases/common/types/api/configure/v1.ts | 23 ++ .../plugins/cases/common/types/api/index.ts | 2 + .../common/types/api/observable/latest.ts | 8 + .../common/types/api/observable/v1.test.ts | 45 ++++ .../cases/common/types/api/observable/v1.ts | 33 +++ .../cases/common/types/domain/case/v1.test.ts | 2 + .../cases/common/types/domain/case/v1.ts | 17 ++ .../common/types/domain/configure/v1.test.ts | 12 + .../cases/common/types/domain/configure/v1.ts | 9 + .../cases/common/types/domain/index.ts | 2 + .../common/types/domain/observable/latest.ts | 8 + .../common/types/domain/observable/v1.test.ts | 28 +++ .../common/types/domain/observable/v1.ts | 31 +++ x-pack/plugins/cases/common/ui/types.ts | 13 + x-pack/plugins/cases/public/api/decoders.ts | 8 + x-pack/plugins/cases/public/api/utils.test.ts | 9 + x-pack/plugins/cases/public/api/utils.ts | 32 ++- .../public/common/use_cases_features.test.tsx | 3 + .../public/common/use_cases_features.tsx | 2 + .../cases/public/components/app/routes.tsx | 10 +- .../case_view/case_view_page.test.tsx | 16 ++ .../components/case_view/case_view_page.tsx | 8 + .../case_view/case_view_tabs.test.tsx | 81 +++++- .../components/case_view/case_view_tabs.tsx | 127 ++++++++-- .../components/case_view_activity.test.tsx | 3 +- .../components/case_view_observables.test.tsx | 36 +++ .../components/case_view_observables.tsx | 52 ++++ .../case_view_similar_cases.test.tsx | 36 +++ .../components/case_view_similar_cases.tsx | 67 +++++ .../components/case_view/translations.ts | 8 + .../case_view/use_case_observables.test.ts | 94 +++++++ .../case_view/use_case_observables.ts | 34 +++ .../configure_cases/__mock__/index.tsx | 1 + .../configure_cases/flyout.test.tsx | 1 + .../components/configure_cases/index.test.tsx | 176 ++++++++++++- .../components/configure_cases/index.tsx | 131 +++++++++- .../configure_cases/translations.ts | 14 ++ .../experimental_badge/experimental_badge.tsx | 4 +- .../delete_confirmation_modal.test.tsx | 52 ++++ .../delete_confirmation_modal.tsx | 40 +++ .../components/observable_types/form.test.tsx | 127 ++++++++++ .../components/observable_types/form.tsx | 48 ++++ .../observable_types/form_fields.test.tsx | 34 +++ .../observable_types/form_fields.tsx | 39 +++ .../observable_types/index.test.tsx | 79 ++++++ .../components/observable_types/index.tsx | 120 +++++++++ .../observable_types_list/index.test.tsx | 131 ++++++++++ .../observable_types_list/index.tsx | 116 +++++++++ .../components/observable_types/schema.tsx | 39 +++ .../observable_types/translations.ts | 59 +++++ .../observables/add_observable.test.tsx | 102 ++++++++ .../components/observables/add_observable.tsx | 81 ++++++ .../public/components/observables/builder.tsx | 57 +++++ .../edit_observable_modal.test.tsx | 62 +++++ .../observables/edit_observable_modal.tsx | 56 +++++ .../observables/fields_config.test.ts | 146 +++++++++++ .../components/observables/fields_config.ts | 209 ++++++++++++++++ ...observable_actions_popover_button.test.tsx | 148 +++++++++++ .../observable_actions_popover_button.tsx | 137 ++++++++++ .../observables/observable_form.test.tsx | 30 +++ .../observables/observable_form.tsx | 143 +++++++++++ .../observables/observables_table.test.tsx | 43 ++++ .../observables/observables_table.tsx | 120 +++++++++ .../observables_utility_bar.test.tsx | 30 +++ .../observables/observables_utility_bar.tsx | 26 ++ .../components/observables/translations.tsx | 124 +++++++++ .../components/similar_cases/table.test.tsx | 38 +++ .../public/components/similar_cases/table.tsx | 72 ++++++ .../components/similar_cases/translations.ts | 28 +++ .../use_similar_cases_columns.tsx | 191 ++++++++++++++ .../public/components/templates/form.test.tsx | 2 + .../components/templates/form_fields.test.tsx | 1 + .../user_actions/comment/comment.tsx | 3 +- .../cases/public/containers/__mocks__/api.ts | 7 + .../cases/public/containers/api.test.tsx | 167 +++++++++++++ x-pack/plugins/cases/public/containers/api.ts | 71 +++++- .../cases/public/containers/configure/api.ts | 27 +- .../cases/public/containers/configure/mock.ts | 8 +- .../use_get_all_case_configurations.test.ts | 2 + .../use_persist_configuration.test.tsx | 42 +++- .../configure/use_persist_configuration.tsx | 12 +- .../public/containers/configure/utils.ts | 1 + .../cases/public/containers/constants.ts | 5 + .../plugins/cases/public/containers/mock.ts | 60 ++++- .../cases/public/containers/translations.ts | 12 + .../use_delete_observables.test.tsx | 67 +++++ .../containers/use_delete_observables.tsx | 38 +++ .../containers/use_get_similar_cases.test.tsx | 72 ++++++ .../containers/use_get_similar_cases.tsx | 53 ++++ .../containers/use_patch_observables.test.tsx | 75 ++++++ .../containers/use_patch_observables.tsx | 38 +++ .../containers/use_post_observables.test.tsx | 103 ++++++++ .../containers/use_post_observables.tsx | 38 +++ .../server/client/cases/bulk_create.test.ts | 4 + .../server/client/cases/bulk_update.test.ts | 2 + .../cases/server/client/cases/client.ts | 34 +++ .../cases/server/client/cases/create.test.ts | 6 + .../server/client/cases/observables.test.ts | 228 +++++++++++++++++ .../cases/server/client/cases/observables.ts | 235 +++++++++++++++++ .../cases/server/client/cases/similar.test.ts | 236 ++++++++++++++++++ .../cases/server/client/cases/similar.ts | 163 ++++++++++++ .../server/client/configure/client.test.ts | 57 +++++ .../cases/server/client/configure/client.ts | 14 +- x-pack/plugins/cases/server/client/mocks.ts | 4 + .../server/client/observable_types.test.ts | 58 +++++ .../cases/server/client/observable_types.ts | 26 ++ .../plugins/cases/server/client/utils.test.ts | 115 ++++++--- x-pack/plugins/cases/server/client/utils.ts | 22 ++ .../cases/server/client/validators.test.ts | 169 ++++++++++++- .../plugins/cases/server/client/validators.ts | 93 +++++++ .../plugins/cases/server/common/constants.ts | 7 +- .../cases/server/common/types/case.test.ts | 1 + .../plugins/cases/server/common/types/case.ts | 3 +- .../cases/server/common/types/configure.ts | 6 + .../plugins/cases/server/common/utils.test.ts | 14 ++ x-pack/plugins/cases/server/common/utils.ts | 1 + x-pack/plugins/cases/server/mocks.ts | 4 + x-pack/plugins/cases/server/plugin.ts | 6 +- .../cases/server/routes/api/cases/similar.ts | 48 ++++ .../server/routes/api/get_internal_routes.ts | 8 + .../api/observables/delete_observable.ts | 43 ++++ .../api/observables/patch_observable.ts | 50 ++++ .../routes/api/observables/post_observable.ts | 46 ++++ .../server/saved_object_types/cases/cases.ts | 14 +- .../cases/model_versions.test.ts | 25 +- .../cases/model_versions.ts | 29 ++- .../saved_object_types/cases/schemas/index.ts | 1 + .../cases/schemas/latest.ts | 2 +- .../saved_object_types/cases/schemas/v2.ts | 27 ++ .../cases/server/services/cases/index.test.ts | 16 +- .../server/services/cases/transform.test.ts | 44 ++++ .../cases/server/services/cases/transform.ts | 2 + .../server/services/configure/index.test.ts | 18 ++ .../cases/server/services/configure/index.ts | 6 + .../cases/server/services/test_utils.ts | 1 + .../common/lib/api/configuration.ts | 1 + .../common/lib/api/index.ts | 129 ++++++++++ .../cases_api_integration/common/lib/mock.ts | 1 + .../tests/common/cases/migrations.ts | 1 + .../tests/common/configure/patch_configure.ts | 44 ++++ .../trial/connectors/cases/cases_connector.ts | 5 + .../security_and_spaces/tests/trial/index.ts | 2 + .../tests/trial/internal/observables.ts | 223 +++++++++++++++++ .../tests/trial/internal/similar_cases.ts | 152 +++++++++++ .../cypress/objects/case.ts | 1 + .../api_integration/services/svl_cases/api.ts | 1 + 155 files changed, 7434 insertions(+), 92 deletions(-) create mode 100644 x-pack/plugins/cases/common/types/api/observable/latest.ts create mode 100644 x-pack/plugins/cases/common/types/api/observable/v1.test.ts create mode 100644 x-pack/plugins/cases/common/types/api/observable/v1.ts create mode 100644 x-pack/plugins/cases/common/types/domain/observable/latest.ts create mode 100644 x-pack/plugins/cases/common/types/domain/observable/v1.test.ts create mode 100644 x-pack/plugins/cases/common/types/domain/observable/v1.ts create mode 100644 x-pack/plugins/cases/public/components/case_view/components/case_view_observables.test.tsx create mode 100644 x-pack/plugins/cases/public/components/case_view/components/case_view_observables.tsx create mode 100644 x-pack/plugins/cases/public/components/case_view/components/case_view_similar_cases.test.tsx create mode 100644 x-pack/plugins/cases/public/components/case_view/components/case_view_similar_cases.tsx create mode 100644 x-pack/plugins/cases/public/components/case_view/use_case_observables.test.ts create mode 100644 x-pack/plugins/cases/public/components/case_view/use_case_observables.ts create mode 100644 x-pack/plugins/cases/public/components/observable_types/delete_confirmation_modal.test.tsx create mode 100644 x-pack/plugins/cases/public/components/observable_types/delete_confirmation_modal.tsx create mode 100644 x-pack/plugins/cases/public/components/observable_types/form.test.tsx create mode 100644 x-pack/plugins/cases/public/components/observable_types/form.tsx create mode 100644 x-pack/plugins/cases/public/components/observable_types/form_fields.test.tsx create mode 100644 x-pack/plugins/cases/public/components/observable_types/form_fields.tsx create mode 100644 x-pack/plugins/cases/public/components/observable_types/index.test.tsx create mode 100644 x-pack/plugins/cases/public/components/observable_types/index.tsx create mode 100644 x-pack/plugins/cases/public/components/observable_types/observable_types_list/index.test.tsx create mode 100644 x-pack/plugins/cases/public/components/observable_types/observable_types_list/index.tsx create mode 100644 x-pack/plugins/cases/public/components/observable_types/schema.tsx create mode 100644 x-pack/plugins/cases/public/components/observable_types/translations.ts create mode 100644 x-pack/plugins/cases/public/components/observables/add_observable.test.tsx create mode 100644 x-pack/plugins/cases/public/components/observables/add_observable.tsx create mode 100644 x-pack/plugins/cases/public/components/observables/builder.tsx create mode 100644 x-pack/plugins/cases/public/components/observables/edit_observable_modal.test.tsx create mode 100644 x-pack/plugins/cases/public/components/observables/edit_observable_modal.tsx create mode 100644 x-pack/plugins/cases/public/components/observables/fields_config.test.ts create mode 100644 x-pack/plugins/cases/public/components/observables/fields_config.ts create mode 100644 x-pack/plugins/cases/public/components/observables/observable_actions_popover_button.test.tsx create mode 100644 x-pack/plugins/cases/public/components/observables/observable_actions_popover_button.tsx create mode 100644 x-pack/plugins/cases/public/components/observables/observable_form.test.tsx create mode 100644 x-pack/plugins/cases/public/components/observables/observable_form.tsx create mode 100644 x-pack/plugins/cases/public/components/observables/observables_table.test.tsx create mode 100644 x-pack/plugins/cases/public/components/observables/observables_table.tsx create mode 100644 x-pack/plugins/cases/public/components/observables/observables_utility_bar.test.tsx create mode 100644 x-pack/plugins/cases/public/components/observables/observables_utility_bar.tsx create mode 100644 x-pack/plugins/cases/public/components/observables/translations.tsx create mode 100644 x-pack/plugins/cases/public/components/similar_cases/table.test.tsx create mode 100644 x-pack/plugins/cases/public/components/similar_cases/table.tsx create mode 100644 x-pack/plugins/cases/public/components/similar_cases/translations.ts create mode 100644 x-pack/plugins/cases/public/components/similar_cases/use_similar_cases_columns.tsx create mode 100644 x-pack/plugins/cases/public/containers/use_delete_observables.test.tsx create mode 100644 x-pack/plugins/cases/public/containers/use_delete_observables.tsx create mode 100644 x-pack/plugins/cases/public/containers/use_get_similar_cases.test.tsx create mode 100644 x-pack/plugins/cases/public/containers/use_get_similar_cases.tsx create mode 100644 x-pack/plugins/cases/public/containers/use_patch_observables.test.tsx create mode 100644 x-pack/plugins/cases/public/containers/use_patch_observables.tsx create mode 100644 x-pack/plugins/cases/public/containers/use_post_observables.test.tsx create mode 100644 x-pack/plugins/cases/public/containers/use_post_observables.tsx create mode 100644 x-pack/plugins/cases/server/client/cases/observables.test.ts create mode 100644 x-pack/plugins/cases/server/client/cases/observables.ts create mode 100644 x-pack/plugins/cases/server/client/cases/similar.test.ts create mode 100644 x-pack/plugins/cases/server/client/cases/similar.ts create mode 100644 x-pack/plugins/cases/server/client/observable_types.test.ts create mode 100644 x-pack/plugins/cases/server/client/observable_types.ts create mode 100644 x-pack/plugins/cases/server/routes/api/cases/similar.ts create mode 100644 x-pack/plugins/cases/server/routes/api/observables/delete_observable.ts create mode 100644 x-pack/plugins/cases/server/routes/api/observables/patch_observable.ts create mode 100644 x-pack/plugins/cases/server/routes/api/observables/post_observable.ts create mode 100644 x-pack/plugins/cases/server/saved_object_types/cases/schemas/v2.ts create mode 100644 x-pack/test/cases_api_integration/security_and_spaces/tests/trial/internal/observables.ts create mode 100644 x-pack/test/cases_api_integration/security_and_spaces/tests/trial/internal/similar_cases.ts diff --git a/packages/kbn-check-mappings-update-cli/current_fields.json b/packages/kbn-check-mappings-update-cli/current_fields.json index b902407b92e7a..5f3ec0c8552b1 100644 --- a/packages/kbn-check-mappings-update-cli/current_fields.json +++ b/packages/kbn-check-mappings-update-cli/current_fields.json @@ -169,6 +169,9 @@ "external_service.pushed_by.full_name", "external_service.pushed_by.profile_uid", "external_service.pushed_by.username", + "observables", + "observables.typeKey", + "observables.value", "owner", "settings", "settings.syncAlerts", diff --git a/packages/kbn-check-mappings-update-cli/current_mappings.json b/packages/kbn-check-mappings-update-cli/current_mappings.json index 352e753162a36..64dc6150ab4b0 100644 --- a/packages/kbn-check-mappings-update-cli/current_mappings.json +++ b/packages/kbn-check-mappings-update-cli/current_mappings.json @@ -585,6 +585,17 @@ } } }, + "observables": { + "properties": { + "typeKey": { + "type": "keyword" + }, + "value": { + "type": "keyword" + } + }, + "type": "nested" + }, "owner": { "type": "keyword" }, diff --git a/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts b/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts index 5aca6f1c04446..f2bbcd85834ff 100644 --- a/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts +++ b/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts @@ -73,7 +73,7 @@ describe('checking migration metadata changes on all registered SO types', () => "canvas-element": "cdedc2123eb8a1506b87a56b0bcce60f4ec08bc8", "canvas-workpad": "9d82aafb19586b119e5c9382f938abe28c26ca5c", "canvas-workpad-template": "c077b0087346776bb3542b51e1385d172cb24179", - "cases": "5433a9f1277f8f17bbc4fd20d33b1fc6d997931e", + "cases": "91771732e2e488e4c1b1ac468057925d1c6b32b5", "cases-comments": "5cb0a421588831c2a950e50f486048b8aabbae25", "cases-configure": "44ed7b8e0f44df39516b8870589b89e32224d2bf", "cases-connector-mappings": "f9d1ac57e484e69506c36a8051e4d61f4a8cfd25", diff --git a/x-pack/plugins/cases/common/api/helpers.ts b/x-pack/plugins/cases/common/api/helpers.ts index 230fe8128855e..fcdf2be6b6159 100644 --- a/x-pack/plugins/cases/common/api/helpers.ts +++ b/x-pack/plugins/cases/common/api/helpers.ts @@ -22,6 +22,10 @@ import { INTERNAL_DELETE_FILE_ATTACHMENTS_URL, CASE_FIND_ATTACHMENTS_URL, INTERNAL_PUT_CUSTOM_FIELDS_URL, + INTERNAL_CASE_OBSERVABLES_URL, + INTERNAL_CASE_OBSERVABLES_PATCH_URL, + INTERNAL_CASE_SIMILAR_CASES_URL, + INTERNAL_CASE_OBSERVABLES_DELETE_URL, } from '../constants'; export const getCaseDetailsUrl = (id: string): string => { @@ -90,3 +94,25 @@ export const getCustomFieldReplaceUrl = (caseId: string, customFieldId: string): customFieldId ); }; + +export const getCaseCreateObservableUrl = (id: string): string => { + return INTERNAL_CASE_OBSERVABLES_URL.replace('{case_id}', id); +}; + +export const getCaseUpdateObservableUrl = (id: string, observableId: string): string => { + return INTERNAL_CASE_OBSERVABLES_PATCH_URL.replace('{case_id}', id).replace( + '{observable_id}', + observableId + ); +}; + +export const getCaseDeleteObservableUrl = (id: string, observableId: string): string => { + return INTERNAL_CASE_OBSERVABLES_DELETE_URL.replace('{case_id}', id).replace( + '{observable_id}', + observableId + ); +}; + +export const getCaseSimilarCasesUrl = (caseId: string) => { + return INTERNAL_CASE_SIMILAR_CASES_URL.replace('{case_id}', caseId); +}; diff --git a/x-pack/plugins/cases/common/constants/index.ts b/x-pack/plugins/cases/common/constants/index.ts index 1fee73f8608c8..70a7f73bd4526 100644 --- a/x-pack/plugins/cases/common/constants/index.ts +++ b/x-pack/plugins/cases/common/constants/index.ts @@ -85,7 +85,14 @@ export const INTERNAL_DELETE_FILE_ATTACHMENTS_URL = export const INTERNAL_GET_CASE_CATEGORIES_URL = `${CASES_INTERNAL_URL}/categories` as const; export const INTERNAL_CASE_METRICS_URL = `${CASES_INTERNAL_URL}/metrics` as const; export const INTERNAL_CASE_METRICS_DETAILS_URL = `${CASES_INTERNAL_URL}/metrics/{case_id}` as const; +export const INTERNAL_CASE_SIMILAR_CASES_URL = `${CASES_INTERNAL_URL}/{case_id}/_similar` as const; export const INTERNAL_PUT_CUSTOM_FIELDS_URL = `${CASES_INTERNAL_URL}/{case_id}/custom_fields/{custom_field_id}`; +export const INTERNAL_CASE_OBSERVABLES_URL = `${CASES_INTERNAL_URL}/{case_id}/observables` as const; +export const INTERNAL_CASE_OBSERVABLES_PATCH_URL = + `${INTERNAL_CASE_OBSERVABLES_URL}/{observable_id}` as const; +export const INTERNAL_CASE_OBSERVABLES_DELETE_URL = + `${INTERNAL_CASE_OBSERVABLES_URL}/{observable_id}` as const; + /** * Action routes */ @@ -142,6 +149,7 @@ export const MAX_TEMPLATES_LENGTH = 10 as const; export const MAX_TEMPLATE_TAG_LENGTH = 50 as const; export const MAX_TAGS_PER_TEMPLATE = 10 as const; export const MAX_FILENAME_LENGTH = 160 as const; +export const MAX_CUSTOM_OBSERVABLE_TYPES_LABEL_LENGTH = 50 as const; /** * Cases features @@ -204,6 +212,7 @@ export const DEFAULT_USER_SIZE = 10; export const MAX_ASSIGNEES_PER_CASE = 10; export const NO_ASSIGNEES_FILTERING_KEYWORD = 'none'; export const KIBANA_SYSTEM_USERNAME = 'elastic/kibana'; +export const MAX_OBSERVABLES_PER_CASE = 50; /** * Delays @@ -262,3 +271,63 @@ export const CASES_CONNECTOR_TIME_WINDOW_REGEX = '^[1-9][0-9]*[d,w]$'; * operation continues, otherwise we throw a 403. */ export const OWNER_FIELD = 'owner'; + +export const MAX_OBSERVABLE_TYPE_KEY_LENGTH = 36; + +export const MAX_OBSERVABLE_TYPE_LABEL_LENGTH = 50; + +export const MAX_CUSTOM_OBSERVABLE_TYPES = 10; + +export const OBSERVABLE_TYPE_EMAIL = { + label: 'Email', + key: 'observable-type-email', +} as const; + +export const OBSERVABLE_TYPE_DOMAIN = { + label: 'Domain', + key: 'observable-type-domain', +} as const; + +export const OBSERVABLE_TYPE_IPV4 = { + label: 'IPv4', + key: 'observable-type-ipv4', +} as const; + +export const OBSERVABLE_TYPE_IPV6 = { + label: 'IPv6', + key: 'observable-type-ipv6', +} as const; + +export const OBSERVABLE_TYPE_URL = { + label: 'URL', + key: 'observable-type-url', +} as const; + +/** + * Exporting an array of built-in observable types for use in the application + */ +export const OBSERVABLE_TYPES_BUILTIN = [ + OBSERVABLE_TYPE_IPV4, + OBSERVABLE_TYPE_IPV6, + OBSERVABLE_TYPE_URL, + { + label: 'Hostname', + key: 'observable-type-hostname', + }, + { + label: 'File hash', + key: 'observable-type-file-hash', + }, + { + label: 'File path', + key: 'observable-type-file-path', + }, + { + ...OBSERVABLE_TYPE_EMAIL, + }, + { + ...OBSERVABLE_TYPE_DOMAIN, + }, +]; + +export const OBSERVABLE_TYPES_BUILTIN_KEYS = OBSERVABLE_TYPES_BUILTIN.map(({ key }) => key); diff --git a/x-pack/plugins/cases/common/types.ts b/x-pack/plugins/cases/common/types.ts index 32d6b34b11c16..bb57a712033ae 100644 --- a/x-pack/plugins/cases/common/types.ts +++ b/x-pack/plugins/cases/common/types.ts @@ -25,4 +25,6 @@ export enum CASE_VIEW_PAGE_TABS { ALERTS = 'alerts', ACTIVITY = 'activity', FILES = 'files', + OBSERVABLES = 'observables', + SIMILAR_CASES = 'similar_cases', } diff --git a/x-pack/plugins/cases/common/types/api/case/v1.test.ts b/x-pack/plugins/cases/common/types/api/case/v1.test.ts index baf9626d3562e..fc8737c6bbfb1 100644 --- a/x-pack/plugins/cases/common/types/api/case/v1.test.ts +++ b/x-pack/plugins/cases/common/types/api/case/v1.test.ts @@ -124,6 +124,16 @@ const basicCase: Case = { value: 3, }, ], + observables: [ + { + value: 'test', + typeKey: '9b557398-0289-4e00-b696-5b277608789c', + id: 'df927ab8-54ed-47d6-be07-9948c255c097', + createdAt: '2024-11-14', + updatedAt: '2024-11-14', + description: null, + }, + ], }; describe('CasePostRequestRt', () => { diff --git a/x-pack/plugins/cases/common/types/api/case/v1.ts b/x-pack/plugins/cases/common/types/api/case/v1.ts index f66df68169e5b..0e1b9ae9894ac 100644 --- a/x-pack/plugins/cases/common/types/api/case/v1.ts +++ b/x-pack/plugins/cases/common/types/api/case/v1.ts @@ -41,6 +41,7 @@ import { CasesRt, CaseStatusRt, RelatedCaseRt, + SimilarCaseRt, } from '../../domain/case/v1'; import { CaseConnectorRt } from '../../domain/connector/v1'; import { CaseUserProfileRt, UserRt } from '../../domain/user/v1'; @@ -394,6 +395,13 @@ export const CasesFindResponseRt = rt.intersection([ CasesStatusResponseRt, ]); +export const CasesSimilarResponseRt = rt.strict({ + cases: rt.array(SimilarCaseRt), + page: rt.number, + per_page: rt.number, + total: rt.number, +}); + /** * Delete cases */ @@ -452,7 +460,10 @@ export const CasePatchRequestRt = rt.intersection([ /** * The saved object ID and version */ - rt.strict({ id: rt.string, version: rt.string }), + rt.strict({ + id: rt.string, + version: rt.string, + }), ]); export const CasesPatchRequestRt = rt.strict({ @@ -519,6 +530,8 @@ export const CasesByAlertIDRequestRt = rt.exact( export const GetRelatedCasesByAlertResponseRt = rt.array(RelatedCaseRt); +export const SimilarCasesSearchRequestRt = paginationSchema({ maxPerPage: MAX_CASES_PER_PAGE }); + export type CasePostRequest = rt.TypeOf; export type CaseResolveResponse = rt.TypeOf; export type CasesDeleteRequest = rt.TypeOf; @@ -542,3 +555,5 @@ export type CaseRequestCustomFields = rt.TypeOf; export type BulkCreateCasesRequest = rt.TypeOf; export type BulkCreateCasesResponse = rt.TypeOf; +export type SimilarCasesSearchRequest = rt.TypeOf; +export type CasesSimilarResponse = rt.TypeOf; diff --git a/x-pack/plugins/cases/common/types/api/configure/v1.test.ts b/x-pack/plugins/cases/common/types/api/configure/v1.test.ts index 64baf7b2e46f4..2952246b1759a 100644 --- a/x-pack/plugins/cases/common/types/api/configure/v1.test.ts +++ b/x-pack/plugins/cases/common/types/api/configure/v1.test.ts @@ -14,8 +14,11 @@ import { MAX_CUSTOM_FIELD_KEY_LENGTH, MAX_CUSTOM_FIELD_LABEL_LENGTH, MAX_CUSTOM_FIELD_TEXT_VALUE_LENGTH, + MAX_CUSTOM_OBSERVABLE_TYPES, MAX_DESCRIPTION_LENGTH, MAX_LENGTH_PER_TAG, + MAX_OBSERVABLE_TYPE_KEY_LENGTH, + MAX_OBSERVABLE_TYPE_LABEL_LENGTH, MAX_TAGS_PER_CASE, MAX_TAGS_PER_TEMPLATE, MAX_TEMPLATES_LENGTH, @@ -38,6 +41,7 @@ import { ToggleCustomFieldConfigurationRt, NumberCustomFieldConfigurationRt, TemplateConfigurationRt, + ObservableTypesConfigurationRt, } from './v1'; describe('configure', () => { @@ -96,6 +100,24 @@ describe('configure', () => { }); }); + it('has expected attributes in request with observableTypes', () => { + const request = { + ...defaultRequest, + observableTypes: [ + { + key: '371357ae-77ce-44bd-88b7-fbba9c80501f', + label: 'Example Label', + }, + ], + }; + const query = ConfigurationRequestRt.decode(request); + + expect(query).toStrictEqual({ + _tag: 'Right', + right: request, + }); + }); + it(`limits customFields to ${MAX_CUSTOM_FIELDS_PER_CASE}`, () => { const customFields = new Array(MAX_CUSTOM_FIELDS_PER_CASE + 1).fill({ key: 'text_custom_field', @@ -270,6 +292,24 @@ describe('configure', () => { ).toContain(`The length of the field templates is too long. Array must be of length <= 10.`); }); + it('has expected attributes in request with observableTypes', () => { + const request = { + ...defaultRequest, + observableTypes: [ + { + key: '371357ae-77ce-44bd-88b7-fbba9c80501f', + label: 'Example Label', + }, + ], + }; + const query = ConfigurationPatchRequestRt.decode(request); + + expect(query).toStrictEqual({ + _tag: 'Right', + right: request, + }); + }); + it('removes foo:bar attributes from request', () => { const query = ConfigurationPatchRequestRt.decode({ ...defaultRequest, foo: 'bar' }); @@ -926,4 +966,85 @@ describe('configure', () => { }); }); }); + + describe('ObservableTypesConfigurationRt', () => { + it('should validate a correct observable types configuration', () => { + const validData = [ + { key: 'observable_key_1', label: 'Observable Label 1' }, + { key: 'observable_key_2', label: 'Observable Label 2' }, + ]; + + const result = ObservableTypesConfigurationRt.decode(validData); + expect(PathReporter.report(result).join()).toContain('No errors!'); + }); + + it('should invalidate an observable types configuration with an invalid key', () => { + const invalidData = [{ key: 'Invalid Key!', label: 'Observable Label 1' }]; + + const result = ObservableTypesConfigurationRt.decode(invalidData); + expect(PathReporter.report(result).join()).not.toContain('No errors!'); + }); + + it('should invalidate an observable types configuration with a missing label', () => { + const invalidData = [{ key: 'observable_key_1' }]; + + const result = ObservableTypesConfigurationRt.decode(invalidData); + expect(PathReporter.report(result).join()).not.toContain('No errors!'); + }); + + it('should accept an observable types configuration with an empty array', () => { + const invalidData: unknown[] = []; + + const result = ObservableTypesConfigurationRt.decode(invalidData); + expect(PathReporter.report(result).join()).toContain('No errors!'); + }); + + it('should invalidate an observable types configuration with a label exceeding max length', () => { + const invalidData = [ + { key: 'observable_key_1', label: 'a'.repeat(MAX_OBSERVABLE_TYPE_LABEL_LENGTH + 1) }, + ]; + + const result = ObservableTypesConfigurationRt.decode(invalidData); + expect(PathReporter.report(result).join()).not.toContain('No errors!'); + }); + + it('should invalidate an observable types configuration with a key exceeding max length', () => { + const invalidData = [{ key: 'a'.repeat(MAX_OBSERVABLE_TYPE_KEY_LENGTH + 1), label: 'label' }]; + + const result = ObservableTypesConfigurationRt.decode(invalidData); + expect(PathReporter.report(result).join()).not.toContain('No errors!'); + }); + + it('should invalidate an observable types configuration with observableTypes count exceeding max', () => { + const invalidData = new Array(MAX_CUSTOM_OBSERVABLE_TYPES + 1).fill({ + key: 'foo', + label: 'label', + }); + + const result = ObservableTypesConfigurationRt.decode(invalidData); + expect(PathReporter.report(result).join()).not.toContain('No errors!'); + }); + + it('accepts a uuid as an key', () => { + const key = uuidv4(); + + const query = ObservableTypesConfigurationRt.decode([{ key, label: 'Observable Label 1' }]); + + expect(query).toStrictEqual({ + _tag: 'Right', + right: [{ key, label: 'Observable Label 1' }], + }); + }); + + it('accepts a slug as an key', () => { + const key = 'abc_key-1'; + + const query = ObservableTypesConfigurationRt.decode([{ key, label: 'Observable Label 1' }]); + + expect(query).toStrictEqual({ + _tag: 'Right', + right: [{ key, label: 'Observable Label 1' }], + }); + }); + }); }); diff --git a/x-pack/plugins/cases/common/types/api/configure/v1.ts b/x-pack/plugins/cases/common/types/api/configure/v1.ts index 52843da1ac1ad..e5682d314f726 100644 --- a/x-pack/plugins/cases/common/types/api/configure/v1.ts +++ b/x-pack/plugins/cases/common/types/api/configure/v1.ts @@ -10,6 +10,9 @@ import { MAX_CUSTOM_FIELDS_PER_CASE, MAX_CUSTOM_FIELD_KEY_LENGTH, MAX_CUSTOM_FIELD_LABEL_LENGTH, + MAX_CUSTOM_OBSERVABLE_TYPES, + MAX_OBSERVABLE_TYPE_KEY_LENGTH, + MAX_OBSERVABLE_TYPE_LABEL_LENGTH, MAX_TAGS_PER_TEMPLATE, MAX_TEMPLATES_LENGTH, MAX_TEMPLATE_DESCRIPTION_LENGTH, @@ -95,6 +98,24 @@ export const CustomFieldsConfigurationRt = limitedArraySchema({ fieldName: 'customFields', }); +export const ObservableTypesConfigurationRt = limitedArraySchema({ + min: 0, + max: MAX_CUSTOM_OBSERVABLE_TYPES, + fieldName: 'observableTypes', + codec: rt.strict({ + key: regexStringRt({ + codec: limitedStringSchema({ fieldName: 'key', min: 1, max: MAX_OBSERVABLE_TYPE_KEY_LENGTH }), + pattern: '^[a-z0-9_-]+$', + message: `Key must be lower case, a-z, 0-9, '_', and '-' are allowed`, + }), + label: limitedStringSchema({ + fieldName: 'label', + min: 1, + max: MAX_OBSERVABLE_TYPE_LABEL_LENGTH, + }), + }), +}); + export const TemplateConfigurationRt = rt.intersection([ rt.strict({ /** @@ -167,6 +188,7 @@ export const ConfigurationRequestRt = rt.intersection([ rt.partial({ customFields: CustomFieldsConfigurationRt, templates: TemplatesConfigurationRt, + observableTypes: ObservableTypesConfigurationRt, }) ), ]); @@ -192,6 +214,7 @@ export const ConfigurationPatchRequestRt = rt.intersection([ connector: ConfigurationBasicWithoutOwnerRt.type.props.connector, customFields: CustomFieldsConfigurationRt, templates: TemplatesConfigurationRt, + observableTypes: ObservableTypesConfigurationRt, }) ), rt.strict({ version: rt.string }), diff --git a/x-pack/plugins/cases/common/types/api/index.ts b/x-pack/plugins/cases/common/types/api/index.ts index 9e8459dd6894b..ddd8392fd0950 100644 --- a/x-pack/plugins/cases/common/types/api/index.ts +++ b/x-pack/plugins/cases/common/types/api/index.ts @@ -17,6 +17,7 @@ export * from './connector/latest'; export * from './attachment/latest'; export * from './metrics/latest'; export * from './custom_field/latest'; +export * from './observable/latest'; // V1 export * as configureApiV1 from './configure/v1'; @@ -30,3 +31,4 @@ export * as connectorApiV1 from './connector/v1'; export * as attachmentApiV1 from './attachment/v1'; export * as metricsApiV1 from './metrics/v1'; export * as customFieldsApiV1 from './custom_field/v1'; +export * as observableApiV1 from './observable/v1'; diff --git a/x-pack/plugins/cases/common/types/api/observable/latest.ts b/x-pack/plugins/cases/common/types/api/observable/latest.ts new file mode 100644 index 0000000000000..25300c97a6d2e --- /dev/null +++ b/x-pack/plugins/cases/common/types/api/observable/latest.ts @@ -0,0 +1,8 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export * from './v1'; diff --git a/x-pack/plugins/cases/common/types/api/observable/v1.test.ts b/x-pack/plugins/cases/common/types/api/observable/v1.test.ts new file mode 100644 index 0000000000000..c13d24dfcab31 --- /dev/null +++ b/x-pack/plugins/cases/common/types/api/observable/v1.test.ts @@ -0,0 +1,45 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { AddObservableRequestRt, UpdateObservableRequestRt } from './v1'; + +describe('AddObservableRequestRT', () => { + it('has expected attributes in request', () => { + const defaultRequest = { + observable: { + description: null, + typeKey: 'ef528526-2af9-4345-9b78-046512c5bbd6', + value: 'email@example.com', + }, + }; + + const query = AddObservableRequestRt.decode(defaultRequest); + + expect(query).toStrictEqual({ + _tag: 'Right', + right: defaultRequest, + }); + }); +}); + +describe('UpdateObservableRequestRT', () => { + it('has expected attributes in request', () => { + const defaultRequest = { + observable: { + description: null, + value: 'email@example.com', + }, + }; + + const query = UpdateObservableRequestRt.decode(defaultRequest); + + expect(query).toStrictEqual({ + _tag: 'Right', + right: defaultRequest, + }); + }); +}); diff --git a/x-pack/plugins/cases/common/types/api/observable/v1.ts b/x-pack/plugins/cases/common/types/api/observable/v1.ts new file mode 100644 index 0000000000000..c665184a3d20c --- /dev/null +++ b/x-pack/plugins/cases/common/types/api/observable/v1.ts @@ -0,0 +1,33 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import * as rt from 'io-ts'; +import { CaseObservableBaseRt } from '../../domain/observable/v1'; + +/** + * Observables + */ +export const ObservablePostRt = CaseObservableBaseRt; + +export const ObservablePatchRt = rt.strict({ + value: rt.string, + description: rt.union([rt.string, rt.null]), +}); + +export type ObservablePatch = rt.TypeOf; +export type ObservablePost = rt.TypeOf; + +export const AddObservableRequestRt = rt.strict({ + observable: ObservablePostRt, +}); + +export const UpdateObservableRequestRt = rt.strict({ + observable: ObservablePatchRt, +}); + +export type AddObservableRequest = rt.TypeOf; +export type UpdateObservableRequest = rt.TypeOf; diff --git a/x-pack/plugins/cases/common/types/domain/case/v1.test.ts b/x-pack/plugins/cases/common/types/domain/case/v1.test.ts index b0a6f96bcacd0..b4af10013513a 100644 --- a/x-pack/plugins/cases/common/types/domain/case/v1.test.ts +++ b/x-pack/plugins/cases/common/types/domain/case/v1.test.ts @@ -91,6 +91,7 @@ const basicCase = { value: 0, }, ], + observables: [], }; describe('RelatedCaseRt', () => { @@ -204,6 +205,7 @@ describe('CaseAttributesRt', () => { value: 0, }, ], + observables: [], }; it('has expected attributes in request', () => { diff --git a/x-pack/plugins/cases/common/types/domain/case/v1.ts b/x-pack/plugins/cases/common/types/domain/case/v1.ts index 83d48df363bd2..14051228452ed 100644 --- a/x-pack/plugins/cases/common/types/domain/case/v1.ts +++ b/x-pack/plugins/cases/common/types/domain/case/v1.ts @@ -12,6 +12,7 @@ import { CaseAssigneesRt, UserRt } from '../user/v1'; import { CaseConnectorRt } from '../connector/v1'; import { AttachmentRt } from '../attachment/v1'; import { CaseCustomFieldsRt } from '../custom_field/v1'; +import { CaseObservableRt } from '../observable/v1'; export { CaseStatuses }; @@ -90,6 +91,10 @@ const CaseBaseFields = { * The alert sync settings */ settings: CaseSettingsRt, + /** + * Observables + */ + observables: rt.array(CaseObservableRt), }; export const CaseBaseOptionalFieldsRt = rt.exact( @@ -155,6 +160,16 @@ export const RelatedCaseRt = rt.strict({ totals: AttachmentTotalsRt, }); +export const SimilarityRt = rt.strict({ + typeKey: rt.string, + value: rt.string, +}); + +export const SimilarCaseRt = rt.intersection([ + CaseRt, + rt.strict({ similarities: rt.strict({ observables: rt.array(SimilarityRt) }) }), +]); + export type Case = rt.TypeOf; export type Cases = rt.TypeOf; export type CaseAttributes = rt.TypeOf; @@ -162,3 +177,5 @@ export type CaseSettings = rt.TypeOf; export type RelatedCase = rt.TypeOf; export type AttachmentTotals = rt.TypeOf; export type CaseBaseOptionalFields = rt.TypeOf; +export type SimilarCase = rt.TypeOf; +export type SimilarCases = SimilarCase[]; diff --git a/x-pack/plugins/cases/common/types/domain/configure/v1.test.ts b/x-pack/plugins/cases/common/types/domain/configure/v1.test.ts index 59682de1e7c7a..179439d65697d 100644 --- a/x-pack/plugins/cases/common/types/domain/configure/v1.test.ts +++ b/x-pack/plugins/cases/common/types/domain/configure/v1.test.ts @@ -121,6 +121,12 @@ describe('configure', () => { username: 'lknope', email: 'leslie.knope@elastic.co', }, + observableTypes: [ + { + key: '8498cd52-e311-4467-9073-c6056960e2ca', + label: 'Email', + }, + ], }; it('has expected attributes in request', () => { @@ -188,6 +194,12 @@ describe('configure', () => { version: 'WzQ3LDFd', id: 'case-id', error: null, + observableTypes: [ + { + key: '8498cd52-e311-4467-9073-c6056960e2ca', + label: 'Email', + }, + ], }; it('has expected attributes in request', () => { diff --git a/x-pack/plugins/cases/common/types/domain/configure/v1.ts b/x-pack/plugins/cases/common/types/domain/configure/v1.ts index 17760922d2cda..b7d9a09791590 100644 --- a/x-pack/plugins/cases/common/types/domain/configure/v1.ts +++ b/x-pack/plugins/cases/common/types/domain/configure/v1.ts @@ -14,6 +14,7 @@ import { CustomFieldNumberTypeRt, } from '../custom_field/v1'; import { CaseBaseOptionalFieldsRt } from '../case/v1'; +import { CaseObservableTypeRt } from '../observable/v1'; export const ClosureTypeRt = rt.union([ rt.literal('close-by-user'), @@ -73,6 +74,8 @@ export const CustomFieldConfigurationRt = rt.union([ export const CustomFieldsConfigurationRt = rt.array(CustomFieldConfigurationRt); +export const ObservableTypesConfigurationRt = rt.array(CaseObservableTypeRt); + export const TemplateConfigurationRt = rt.intersection([ rt.strict({ /** @@ -121,6 +124,10 @@ export const ConfigurationBasicWithoutOwnerRt = rt.strict({ * Templates configured for the case */ templates: TemplatesConfigurationRt, + /** + * Observable types configured for the case + */ + observableTypes: ObservableTypesConfigurationRt, }); export const CasesConfigureBasicRt = rt.intersection([ @@ -166,3 +173,5 @@ export type ClosureType = rt.TypeOf; export type ConfigurationAttributes = rt.TypeOf; export type Configuration = rt.TypeOf; export type Configurations = rt.TypeOf; +export type ObservableTypesConfiguration = rt.TypeOf; +export type ObservableTypeConfiguration = rt.TypeOf; diff --git a/x-pack/plugins/cases/common/types/domain/index.ts b/x-pack/plugins/cases/common/types/domain/index.ts index ef317908b4627..b6d3cbb8dd76c 100644 --- a/x-pack/plugins/cases/common/types/domain/index.ts +++ b/x-pack/plugins/cases/common/types/domain/index.ts @@ -14,6 +14,7 @@ export * from './case/latest'; export * from './user/latest'; export * from './connector/latest'; export * from './attachment/latest'; +export * from './observable/latest'; // V1 export * as configureDomainV1 from './configure/v1'; @@ -24,3 +25,4 @@ export * as caseDomainV1 from './case/v1'; export * as userDomainV1 from './user/v1'; export * as connectorDomainV1 from './connector/v1'; export * as attachmentDomainV1 from './attachment/v1'; +export * as observableDomainV1 from './observable/v1'; diff --git a/x-pack/plugins/cases/common/types/domain/observable/latest.ts b/x-pack/plugins/cases/common/types/domain/observable/latest.ts new file mode 100644 index 0000000000000..25300c97a6d2e --- /dev/null +++ b/x-pack/plugins/cases/common/types/domain/observable/latest.ts @@ -0,0 +1,8 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export * from './v1'; diff --git a/x-pack/plugins/cases/common/types/domain/observable/v1.test.ts b/x-pack/plugins/cases/common/types/domain/observable/v1.test.ts new file mode 100644 index 0000000000000..a0ed481a2d322 --- /dev/null +++ b/x-pack/plugins/cases/common/types/domain/observable/v1.test.ts @@ -0,0 +1,28 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { CaseObservableRt } from './v1'; + +describe('CaseObservableRt', () => { + it('has expected attributes in request', () => { + const observable = { + description: null, + id: '274fcbfc-87b8-47d0-9f17-bfe98e5453e9', + typeKey: 'ef528526-2af9-4345-9b78-046512c5bbd6', + value: 'email@example.com', + createdAt: '2024-10-01', + updatedAt: '2024-10-01', + }; + + const query = CaseObservableRt.decode(observable); + + expect(query).toStrictEqual({ + _tag: 'Right', + right: observable, + }); + }); +}); diff --git a/x-pack/plugins/cases/common/types/domain/observable/v1.ts b/x-pack/plugins/cases/common/types/domain/observable/v1.ts new file mode 100644 index 0000000000000..7fff862acac68 --- /dev/null +++ b/x-pack/plugins/cases/common/types/domain/observable/v1.ts @@ -0,0 +1,31 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import * as rt from 'io-ts'; + +export const CaseObservableBaseRt = rt.strict({ + typeKey: rt.string, + value: rt.string, + description: rt.union([rt.string, rt.null]), +}); + +export const CaseObservableRt = rt.intersection([ + rt.strict({ + id: rt.string, + createdAt: rt.string, + updatedAt: rt.union([rt.string, rt.null]), + }), + CaseObservableBaseRt, +]); + +export const CaseObservableTypeRt = rt.strict({ + key: rt.string, + label: rt.string, +}); + +export type Observable = rt.TypeOf; +export type ObservableType = rt.TypeOf; diff --git a/x-pack/plugins/cases/common/ui/types.ts b/x-pack/plugins/cases/common/ui/types.ts index a03f38979ceac..2bc12101d65b9 100644 --- a/x-pack/plugins/cases/common/ui/types.ts +++ b/x-pack/plugins/cases/common/ui/types.ts @@ -45,6 +45,7 @@ import type { CaseMetricsFeature, CasesMetricsResponse, SingleCaseMetricsResponse, + CasesSimilarResponse, } from '../types/api'; type DeepRequired = { [K in keyof T]: DeepRequired } & Required; @@ -100,6 +101,8 @@ export type CaseUserActionsStats = SnakeToCamelCase export type CaseUI = Omit, 'comments'> & { comments: AttachmentUI[]; }; +export type ObservableUI = CaseUI['observables'][0]; + export type CasesUI = CaseUI[]; export type CasesFindResponseUI = Omit, 'cases'> & { cases: CasesUI; @@ -109,6 +112,9 @@ export type CaseUpdateRequest = SnakeToCamelCase; export type CaseConnectors = SnakeToCamelCase; export type CaseUsers = GetCaseUsersResponse; export type CaseUICustomField = CaseUI['customFields'][number]; +export type CasesSimilarResponseUI = SnakeToCamelCase; +export type SimilarCaseUI = Omit, 'comments'>; +export type SimilarCasesUI = SimilarCaseUI[]; export interface ResolvedCase { case: CaseUI; @@ -127,6 +133,7 @@ export type CasesConfigurationUI = Pick< | 'id' | 'version' | 'owner' + | 'observableTypes' >; export type CasesConfigurationUICustomField = CasesConfigurationUI['customFields'][number]; @@ -191,6 +198,12 @@ export interface FetchCasesProps extends ApiProps { filterOptions?: FilterOptions; } +export interface SimilarCasesProps extends ApiProps { + caseId: string; + perPage: number; + page: number; +} + export interface ApiProps { signal?: AbortSignal; } diff --git a/x-pack/plugins/cases/public/api/decoders.ts b/x-pack/plugins/cases/public/api/decoders.ts index c2f9f466ec69d..3bd6ff84af710 100644 --- a/x-pack/plugins/cases/public/api/decoders.ts +++ b/x-pack/plugins/cases/public/api/decoders.ts @@ -13,11 +13,13 @@ import type { CasesFindResponse, CasesBulkGetResponse, CasesMetricsResponse, + CasesSimilarResponse, } from '../../common/types/api'; import { CasesFindResponseRt, CasesBulkGetResponseRt, CasesMetricsResponseRt, + CasesSimilarResponseRt, } from '../../common/types/api'; import { createToasterPlainError } from '../containers/utils'; import { throwErrors } from '../../common'; @@ -35,3 +37,9 @@ export const decodeCasesBulkGetResponse = (res: CasesBulkGetResponse) => { return res; }; + +export const decodeCasesSimilarResponse = (respCases?: CasesSimilarResponse) => + pipe( + CasesSimilarResponseRt.decode(respCases), + fold(throwErrors(createToasterPlainError), identity) + ); diff --git a/x-pack/plugins/cases/public/api/utils.test.ts b/x-pack/plugins/cases/public/api/utils.test.ts index e7dd99938e3cf..c909b2303aa85 100644 --- a/x-pack/plugins/cases/public/api/utils.test.ts +++ b/x-pack/plugins/cases/public/api/utils.test.ts @@ -16,6 +16,8 @@ import { persistableStateAttachment, caseUserActionsWithRegisteredAttachments, caseUserActionsWithRegisteredAttachmentsSnake, + similarCasesSnake, + similarCases, } from '../containers/mock'; import { convertAllCasesToCamel, @@ -27,6 +29,7 @@ import { convertAttachmentsToCamelCase, convertAttachmentToCamelCase, convertUserActionsToCamelCase, + convertSimilarCasesToCamel, } from './utils'; describe('utils', () => { @@ -120,4 +123,10 @@ describe('utils', () => { ); }); }); + + describe('convertSimilarCasesToCamel', () => { + it('convert similar cases to camel case', () => { + expect(convertSimilarCasesToCamel(similarCasesSnake)).toEqual(similarCases); + }); + }); }); diff --git a/x-pack/plugins/cases/public/api/utils.ts b/x-pack/plugins/cases/public/api/utils.ts index 99e6ceb6f312c..12d820fdfce77 100644 --- a/x-pack/plugins/cases/public/api/utils.ts +++ b/x-pack/plugins/cases/public/api/utils.ts @@ -11,8 +11,16 @@ import type { AttachmentRequest, CaseResolveResponse, CasesFindResponse, + CasesSimilarResponse, } from '../../common/types/api'; -import type { Attachment, Case, Cases, UserActions } from '../../common/types/domain'; +import type { + Attachment, + Case, + Cases, + SimilarCase, + SimilarCases, + UserActions, +} from '../../common/types/domain'; import { isCommentRequestTypeExternalReference, isCommentRequestTypePersistableState, @@ -24,6 +32,9 @@ import type { CaseUI, AttachmentUI, ResolvedCase, + CasesSimilarResponseUI, + SimilarCasesUI, + SimilarCaseUI, } from '../containers/types'; export const convertArrayToCamelCase = (arrayOfSnakes: unknown[]): unknown[] => @@ -60,6 +71,16 @@ export const convertCaseToCamelCase = (theCase: Case): CaseUI => { export const convertCasesToCamelCase = (cases: Cases): CasesUI => cases.map(convertCaseToCamelCase); +export const convertSimilarCaseToCamelCase = (theCase: SimilarCase): SimilarCaseUI => { + const { comments, ...restCase } = theCase; + return { + ...convertToCamelCase(restCase), + }; +}; + +export const convertSimilarCasesToCamelCase = (cases: SimilarCases): SimilarCasesUI => + cases.map(convertSimilarCaseToCamelCase); + export const convertCaseResolveToCamelCase = (res: CaseResolveResponse): ResolvedCase => { const { case: theCase, ...rest } = res; return { @@ -125,3 +146,12 @@ export const convertAllCasesToCamel = (snakeCases: CasesFindResponse): CasesFind perPage: snakeCases.per_page, total: snakeCases.total, }); + +export const convertSimilarCasesToCamel = ( + snakeCases: CasesSimilarResponse +): CasesSimilarResponseUI => ({ + cases: convertSimilarCasesToCamelCase(snakeCases.cases), + page: snakeCases.page, + perPage: snakeCases.per_page, + total: snakeCases.total, +}); diff --git a/x-pack/plugins/cases/public/common/use_cases_features.test.tsx b/x-pack/plugins/cases/public/common/use_cases_features.test.tsx index c4c54af0b1c42..887ece71aef2c 100644 --- a/x-pack/plugins/cases/public/common/use_cases_features.test.tsx +++ b/x-pack/plugins/cases/public/common/use_cases_features.test.tsx @@ -46,6 +46,7 @@ describe('useCasesFeatures', () => { metricsFeatures: [], caseAssignmentAuthorized: false, pushToServiceAuthorized: false, + observablesAuthorized: false, }); } ); @@ -65,6 +66,7 @@ describe('useCasesFeatures', () => { metricsFeatures: [CaseMetricsFeature.CONNECTORS], caseAssignmentAuthorized: false, pushToServiceAuthorized: false, + observablesAuthorized: false, }); }); @@ -92,6 +94,7 @@ describe('useCasesFeatures', () => { metricsFeatures: [], caseAssignmentAuthorized: expectedResult, pushToServiceAuthorized: expectedResult, + observablesAuthorized: expectedResult, }); } ); diff --git a/x-pack/plugins/cases/public/common/use_cases_features.tsx b/x-pack/plugins/cases/public/common/use_cases_features.tsx index 2f064df9a97a9..b9910c366fb11 100644 --- a/x-pack/plugins/cases/public/common/use_cases_features.tsx +++ b/x-pack/plugins/cases/public/common/use_cases_features.tsx @@ -13,6 +13,7 @@ import { useLicense } from './use_license'; export interface UseCasesFeatures { isAlertsEnabled: boolean; isSyncAlertsEnabled: boolean; + observablesAuthorized: boolean; caseAssignmentAuthorized: boolean; pushToServiceAuthorized: boolean; metricsFeatures: SingleCaseMetricsFeature[]; @@ -38,6 +39,7 @@ export const useCasesFeatures = (): UseCasesFeatures => { metricsFeatures: features.metrics, caseAssignmentAuthorized: hasLicenseGreaterThanPlatinum, pushToServiceAuthorized: hasLicenseGreaterThanPlatinum, + observablesAuthorized: hasLicenseGreaterThanPlatinum, }), [features.alerts.enabled, features.alerts.sync, features.metrics, hasLicenseGreaterThanPlatinum] ); diff --git a/x-pack/plugins/cases/public/components/app/routes.tsx b/x-pack/plugins/cases/public/components/app/routes.tsx index ee2c82777dbf6..aee24f946eade 100644 --- a/x-pack/plugins/cases/public/components/app/routes.tsx +++ b/x-pack/plugins/cases/public/components/app/routes.tsx @@ -6,7 +6,7 @@ */ import React, { lazy, Suspense, useCallback } from 'react'; -import { Redirect } from 'react-router-dom'; +import { Redirect, useLocation } from 'react-router-dom'; import { Routes, Route } from '@kbn/shared-ux-router'; import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; @@ -45,6 +45,7 @@ const CasesRoutesComponent: React.FC = ({ const { navigateToAllCases } = useAllCasesNavigation(); const { navigateToCaseView } = useCaseViewNavigation(); useReadonlyHeader(); + const location = useLocation(); const onCreateCaseSuccess: CreateCaseFormProps['onSuccess'] = useCallback( async ({ id }) => navigateToCaseView({ detailName: id }), @@ -79,7 +80,12 @@ const CasesRoutesComponent: React.FC = ({ )} - + {/* NOTE: current case view implementation retains some local state between renders, eg. when going from one case directly to another one. as a short term fix, we are forcing the component remount. */} + }> ({ .mockReturnValue({'Case view files'}), })); +jest.mock('./components/case_view_observables', () => ({ + CaseViewObservables: jest + .fn() + .mockReturnValue( + {'Case view observables'} + ), +})); + +jest.mock('./components/case_view_similar_cases', () => ({ + CaseViewSimilarCases: jest + .fn() + .mockReturnValue( + {'Case view similar cases'} + ), +})); + const useUrlParamsMock = useUrlParams as jest.Mock; const useCasesTitleBreadcrumbsMock = useCasesTitleBreadcrumbs as jest.Mock; diff --git a/x-pack/plugins/cases/public/components/case_view/case_view_page.tsx b/x-pack/plugins/cases/public/components/case_view/case_view_page.tsx index add85202d0e55..51bc2a8eb29fb 100644 --- a/x-pack/plugins/cases/public/components/case_view/case_view_page.tsx +++ b/x-pack/plugins/cases/public/components/case_view/case_view_page.tsx @@ -17,10 +17,12 @@ import { useCasesTitleBreadcrumbs } from '../use_breadcrumbs'; import { CaseViewActivity } from './components/case_view_activity'; import { CaseViewAlerts } from './components/case_view_alerts'; import { CaseViewFiles } from './components/case_view_files'; +import { CaseViewObservables } from './components/case_view_observables'; import { CaseViewMetrics } from './metrics'; import type { CaseViewPageProps } from './types'; import { useRefreshCaseViewPage } from './use_on_refresh_case_view_page'; import { useOnUpdateField } from './use_on_update_field'; +import { CaseViewSimilarCases } from './components/case_view_similar_cases'; const getActiveTabId = (tabId?: string) => { if (tabId && Object.values(CASE_VIEW_PAGE_TABS).includes(tabId as CASE_VIEW_PAGE_TABS)) { @@ -122,6 +124,12 @@ export const CaseViewPage = React.memo( )} {activeTabId === CASE_VIEW_PAGE_TABS.FILES && } + {activeTabId === CASE_VIEW_PAGE_TABS.OBSERVABLES && ( + + )} + {activeTabId === CASE_VIEW_PAGE_TABS.SIMILAR_CASES && ( + + )} > ); diff --git a/x-pack/plugins/cases/public/components/case_view/case_view_tabs.test.tsx b/x-pack/plugins/cases/public/components/case_view/case_view_tabs.test.tsx index 14e6e94f91194..0c4de8ca2ece0 100644 --- a/x-pack/plugins/cases/public/components/case_view/case_view_tabs.test.tsx +++ b/x-pack/plugins/cases/public/components/case_view/case_view_tabs.test.tsx @@ -8,6 +8,7 @@ import React from 'react'; import { screen, waitFor } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; +import { licensingMock } from '@kbn/licensing-plugin/public/mocks'; import type { AppMockRenderer } from '../../common/mock'; import type { UseGetCase } from '../../containers/use_get_case'; @@ -20,15 +21,18 @@ import { useGetCase } from '../../containers/use_get_case'; import { CaseViewTabs } from './case_view_tabs'; import { caseData, defaultGetCase } from './mocks'; import { useGetCaseFileStats } from '../../containers/use_get_case_file_stats'; +import { useCaseObservables } from './use_case_observables'; jest.mock('../../containers/use_get_case'); jest.mock('../../common/navigation/hooks'); jest.mock('../../common/hooks'); jest.mock('../../containers/use_get_case_file_stats'); +jest.mock('./use_case_observables'); const useFetchCaseMock = useGetCase as jest.Mock; const useCaseViewNavigationMock = useCaseViewNavigation as jest.Mock; const useGetCaseFileStatsMock = useGetCaseFileStats as jest.Mock; +const useGetCaseObservablesMock = useCaseObservables as jest.Mock; const mockGetCase = (props: Partial = {}) => { const data = { @@ -57,10 +61,15 @@ describe('CaseViewTabs', () => { const data = { total: 3 }; beforeEach(() => { + useGetCaseObservablesMock.mockReturnValue({ isLoading: false, observables: [] }); useGetCaseFileStatsMock.mockReturnValue({ data }); mockGetCase(); - appMockRenderer = createAppMockRenderer(); + const license = licensingMock.createLicense({ + license: { type: 'basic' }, + }); + + appMockRenderer = createAppMockRenderer({ license }); }); afterEach(() => { @@ -230,4 +239,74 @@ describe('CaseViewTabs', () => { await screen.findByTestId('case-view-alerts-table-experimental-badge') ).toBeInTheDocument(); }); + + it('should not show observable tabs in non-platinum tiers', async () => { + appMockRenderer = createAppMockRenderer(); + + appMockRenderer.render( + + ); + + expect(screen.queryByTestId('case-view-tab-title-observables')).not.toBeInTheDocument(); + expect(screen.queryByTestId('case-view-tab-title-similar_cases')).not.toBeInTheDocument(); + }); + + describe('show observable tabs in platinum tier or higher', () => { + beforeEach(() => { + const license = licensingMock.createLicense({ + license: { type: 'platinum' }, + }); + appMockRenderer = createAppMockRenderer({ license }); + }); + + it('should show the observables tab', async () => { + appMockRenderer.render( + + ); + + expect(await screen.findByTestId('case-view-tab-title-observables')).toBeInTheDocument(); + }); + + it('should show the similar cases tab', async () => { + appMockRenderer.render( + + ); + + expect(await screen.findByTestId('case-view-tab-title-similar_cases')).toBeInTheDocument(); + }); + + it('navigates to the similar cases tab when the similar cases tab is clicked', async () => { + const navigateToCaseViewMock = useCaseViewNavigationMock().navigateToCaseView; + appMockRenderer.render(); + + await userEvent.click(await screen.findByTestId('case-view-tab-title-similar_cases')); + + await waitFor(() => { + expect(navigateToCaseViewMock).toHaveBeenCalledWith({ + detailName: caseData.id, + tabId: CASE_VIEW_PAGE_TABS.SIMILAR_CASES, + }); + }); + }); + + it('shows the observables tab with the correct count', async () => { + appMockRenderer.render( + + ); + + const badge = await screen.findByTestId('case-view-observables-stats-badge'); + + expect(badge).toHaveTextContent('0'); + }); + + it('do not show count on the observables tab if the call isLoading', async () => { + useGetCaseObservablesMock.mockReturnValue({ isLoading: true, observables: [] }); + + appMockRenderer.render( + + ); + + expect(screen.queryByTestId('case-view-observables-stats-badge')).not.toBeInTheDocument(); + }); + }); }); diff --git a/x-pack/plugins/cases/public/components/case_view/case_view_tabs.tsx b/x-pack/plugins/cases/public/components/case_view/case_view_tabs.tsx index 1dbfbad2c2630..62fe227d5cdb5 100644 --- a/x-pack/plugins/cases/public/components/case_view/case_view_tabs.tsx +++ b/x-pack/plugins/cases/public/components/case_view/case_view_tabs.tsx @@ -7,7 +7,6 @@ import type { EuiThemeComputed } from '@elastic/eui'; import { - EuiBetaBadge, EuiNotificationBadge, EuiSpacer, EuiTab, @@ -20,10 +19,19 @@ import { css } from '@emotion/react'; import { CASE_VIEW_PAGE_TABS } from '../../../common/types'; import { useCaseViewNavigation } from '../../common/navigation'; import { useCasesContext } from '../cases_context/use_cases_context'; -import { EXPERIMENTAL_DESC, EXPERIMENTAL_LABEL } from '../header_page/translations'; -import { ACTIVITY_TAB, ALERTS_TAB, FILES_TAB } from './translations'; +import { + ACTIVITY_TAB, + ALERTS_TAB, + FILES_TAB, + OBSERVABLES_TAB, + SIMILAR_CASES_TAB, +} from './translations'; import type { CaseUI } from '../../../common'; import { useGetCaseFileStats } from '../../containers/use_get_case_file_stats'; +import { useCaseObservables } from './use_case_observables'; +import { ExperimentalBadge } from '../experimental_badge/experimental_badge'; +import { useGetSimilarCases } from '../../containers/use_get_similar_cases'; +import { useCasesFeatures } from '../../common/use_cases_features'; const TabTitle = ({ title }: { title: string }) => ( @@ -61,6 +69,60 @@ const FilesBadge = ({ FilesBadge.displayName = 'FilesBadge'; +const ObservablesBadge = ({ + activeTab, + isLoading, + euiTheme, + count, +}: { + activeTab: string; + count: number; + isLoading: boolean; + euiTheme: EuiThemeComputed<{}>; +}) => ( + <> + {!isLoading && ( + + {count} + + )} + > +); + +ObservablesBadge.displayName = 'ObservablesBadge'; + +const SimilarCasesBadge = ({ + activeTab, + count, + euiTheme, +}: { + activeTab: string; + count?: number; + euiTheme: EuiThemeComputed<{}>; +}) => ( + <> + { + + {count ?? 0} + + } + > +); + +SimilarCasesBadge.displayName = 'SimilarCasesBadge'; + const AlertsBadge = ({ activeTab, totalAlerts, @@ -83,17 +145,7 @@ const AlertsBadge = ({ {totalAlerts || 0} {isExperimental && ( - + )} > ); @@ -109,9 +161,17 @@ export const CaseViewTabs = React.memo(({ caseData, activeTab const { features } = useCasesContext(); const { navigateToCaseView } = useCaseViewNavigation(); const { euiTheme } = useEuiTheme(); - const { data: fileStatsData, isLoading } = useGetCaseFileStats({ + const { data: fileStatsData, isLoading: isLoadingFiles } = useGetCaseFileStats({ + caseId: caseData.id, + }); + const { observables, isLoading: isLoadingObservables } = useCaseObservables(caseData); + + const { data: similarCasesData } = useGetSimilarCases({ caseId: caseData.id, + perPage: 0, + page: 0, }); + const { observablesAuthorized: canShowObservableTabs } = useCasesFeatures(); const tabs = useMemo( () => [ @@ -140,22 +200,53 @@ export const CaseViewTabs = React.memo(({ caseData, activeTab name: FILES_TAB, badge: ( ), }, + ...(canShowObservableTabs + ? [ + { + id: CASE_VIEW_PAGE_TABS.OBSERVABLES, + name: OBSERVABLES_TAB, + badge: ( + + ), + }, + { + id: CASE_VIEW_PAGE_TABS.SIMILAR_CASES, + name: SIMILAR_CASES_TAB, + badge: ( + + ), + }, + ] + : []), ], [ features.alerts.enabled, features.alerts.isExperimental, caseData.totalAlerts, activeTab, - isLoading, - fileStatsData, euiTheme, + isLoadingFiles, + fileStatsData, + canShowObservableTabs, + isLoadingObservables, + observables.length, + similarCasesData?.total, ] ); diff --git a/x-pack/plugins/cases/public/components/case_view/components/case_view_activity.test.tsx b/x-pack/plugins/cases/public/components/case_view/components/case_view_activity.test.tsx index 606a364896ecf..fafc67fd1a5a2 100644 --- a/x-pack/plugins/cases/public/components/case_view/components/case_view_activity.test.tsx +++ b/x-pack/plugins/cases/public/components/case_view/components/case_view_activity.test.tsx @@ -67,7 +67,7 @@ jest.mock('../../../containers/user_profiles/use_get_current_user_profile'); (useGetTags as jest.Mock).mockReturnValue({ data: ['coke', 'pepsi'], refetch: jest.fn() }); (useGetCategories as jest.Mock).mockReturnValue({ data: ['foo', 'bar'], refetch: jest.fn() }); -(useGetCaseConfiguration as jest.Mock).mockReturnValue({ data: {} }); +(useGetCaseConfiguration as jest.Mock).mockReturnValue({ data: { observableTypes: [] } }); (useGetCurrentUserProfile as jest.Mock).mockReturnValue({ data: {}, isFetching: false }); const caseData: CaseUI = { @@ -364,6 +364,7 @@ describe('Case View Page activity tab', () => { (useGetCaseConfiguration as jest.Mock).mockReturnValue({ data: { customFields: [customFieldsConfigurationMock[1]], + observableTypes: [], }, }); appMockRender.render( diff --git a/x-pack/plugins/cases/public/components/case_view/components/case_view_observables.test.tsx b/x-pack/plugins/cases/public/components/case_view/components/case_view_observables.test.tsx new file mode 100644 index 0000000000000..7e030febfca6e --- /dev/null +++ b/x-pack/plugins/cases/public/components/case_view/components/case_view_observables.test.tsx @@ -0,0 +1,36 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { screen } from '@testing-library/react'; + +import type { AppMockRenderer } from '../../../common/mock'; + +import { createAppMockRenderer } from '../../../common/mock'; +import { basicCase } from '../../../containers/mock'; +import { CaseViewObservables } from './case_view_observables'; + +describe('Case View Page observables tab', () => { + let appMockRender: AppMockRenderer; + + beforeEach(() => { + appMockRender = createAppMockRenderer(); + jest.clearAllMocks(); + }); + + it('should render the utility bar for the observables table', async () => { + appMockRender.render(); + + expect((await screen.findAllByTestId('cases-observables-add')).length).toBe(2); + }); + + it('should render the observable table', async () => { + appMockRender.render(); + + expect(await screen.findByTestId('cases-observables-table')).toBeInTheDocument(); + }); +}); diff --git a/x-pack/plugins/cases/public/components/case_view/components/case_view_observables.tsx b/x-pack/plugins/cases/public/components/case_view/components/case_view_observables.tsx new file mode 100644 index 0000000000000..65fa3d634207a --- /dev/null +++ b/x-pack/plugins/cases/public/components/case_view/components/case_view_observables.tsx @@ -0,0 +1,52 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import React, { useMemo } from 'react'; + +import { EuiFlexItem, EuiFlexGroup } from '@elastic/eui'; + +import type { CaseUI } from '../../../../common/ui/types'; + +import { CASE_VIEW_PAGE_TABS } from '../../../../common/types'; +import { CaseViewTabs } from '../case_view_tabs'; +import { ObservablesTable } from '../../observables/observables_table'; +import { ObservablesUtilityBar } from '../../observables/observables_utility_bar'; +import { useCaseObservables } from '../use_case_observables'; + +interface CaseViewObservablesProps { + caseData: CaseUI; + isLoading: boolean; +} + +export const CaseViewObservables = ({ caseData, isLoading }: CaseViewObservablesProps) => { + const { observables, isLoading: isLoadingObservables } = useCaseObservables(caseData); + + const caseDataWithFilteredObservables: CaseUI = useMemo(() => { + return { + ...caseData, + observables, + }; + }, [caseData, observables]); + + return ( + + + + + + + + + + + + ); +}; + +CaseViewObservables.displayName = 'CaseViewObservables'; diff --git a/x-pack/plugins/cases/public/components/case_view/components/case_view_similar_cases.test.tsx b/x-pack/plugins/cases/public/components/case_view/components/case_view_similar_cases.test.tsx new file mode 100644 index 0000000000000..a7b4631b1ac77 --- /dev/null +++ b/x-pack/plugins/cases/public/components/case_view/components/case_view_similar_cases.test.tsx @@ -0,0 +1,36 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { screen } from '@testing-library/react'; + +import type { CaseUI } from '../../../../common'; +import type { AppMockRenderer } from '../../../common/mock'; + +import { createAppMockRenderer } from '../../../common/mock'; +import { alertCommentWithIndices, basicCase } from '../../../containers/mock'; +import { CaseViewSimilarCases } from './case_view_similar_cases'; + +const caseData: CaseUI = { + ...basicCase, + comments: [...basicCase.comments, alertCommentWithIndices], +}; + +describe('Case View Page similar cases tab', () => { + let appMockRender: AppMockRenderer; + + beforeEach(() => { + appMockRender = createAppMockRenderer(); + jest.clearAllMocks(); + }); + + it('should render the similar cases table', async () => { + appMockRender.render(); + + expect(await screen.findByTestId('similar-cases-table')).toBeInTheDocument(); + }); +}); diff --git a/x-pack/plugins/cases/public/components/case_view/components/case_view_similar_cases.tsx b/x-pack/plugins/cases/public/components/case_view/components/case_view_similar_cases.tsx new file mode 100644 index 0000000000000..cb72af1fa0e1f --- /dev/null +++ b/x-pack/plugins/cases/public/components/case_view/components/case_view_similar_cases.tsx @@ -0,0 +1,67 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import React, { useCallback, useMemo, useState } from 'react'; + +import { EuiFlexItem, EuiFlexGroup } from '@elastic/eui'; + +import { useGetSimilarCases, initialData } from '../../../containers/use_get_similar_cases'; +import type { CaseUI } from '../../../../common/ui/types'; + +import { CASE_VIEW_PAGE_TABS } from '../../../../common/types'; +import { CaseViewTabs } from '../case_view_tabs'; +import { CASES_TABLE_PER_PAGE_VALUES, type EuiBasicTableOnChange } from '../../all_cases/types'; +import { SimilarCasesTable } from '../../similar_cases/table'; + +interface CaseViewSimilarCasesProps { + caseData: CaseUI; +} + +export const CaseViewSimilarCases = ({ caseData }: CaseViewSimilarCasesProps) => { + const [pageIndex, setPageIndex] = useState(0); + const [pageSize, setPageSize] = useState(CASES_TABLE_PER_PAGE_VALUES[0]); + + const { data = initialData, isFetching: isLoadingCases } = useGetSimilarCases({ + caseId: caseData.id, + page: pageIndex + 1, + perPage: pageSize, + }); + + const tableOnChangeCallback = useCallback(({ page, sort }: EuiBasicTableOnChange) => { + setPageIndex(page.index); + setPageSize(page.size); + }, []); + + const pagination = useMemo( + () => ({ + pageIndex, + pageSize, + totalItemCount: data.total ?? 0, + pageSizeOptions: CASES_TABLE_PER_PAGE_VALUES, + }), + [data.total, pageIndex, pageSize] + ); + + return ( + + + + + + + + + + + ); +}; + +CaseViewSimilarCases.displayName = 'CaseViewObservables'; diff --git a/x-pack/plugins/cases/public/components/case_view/translations.ts b/x-pack/plugins/cases/public/components/case_view/translations.ts index b876e94d760ec..341b7db784029 100644 --- a/x-pack/plugins/cases/public/components/case_view/translations.ts +++ b/x-pack/plugins/cases/public/components/case_view/translations.ts @@ -187,6 +187,14 @@ export const FILES_TAB = i18n.translate('xpack.cases.caseView.tabs.files', { defaultMessage: 'Files', }); +export const OBSERVABLES_TAB = i18n.translate('xpack.cases.caseView.tabs.observables', { + defaultMessage: 'Observables', +}); + +export const SIMILAR_CASES_TAB = i18n.translate('xpack.cases.caseView.tabs.similar', { + defaultMessage: 'Similar cases', +}); + export const ALERTS_EMPTY_DESCRIPTION = i18n.translate( 'xpack.cases.caseView.tabs.alerts.emptyDescription', { diff --git a/x-pack/plugins/cases/public/components/case_view/use_case_observables.test.ts b/x-pack/plugins/cases/public/components/case_view/use_case_observables.test.ts new file mode 100644 index 0000000000000..183619786deea --- /dev/null +++ b/x-pack/plugins/cases/public/components/case_view/use_case_observables.test.ts @@ -0,0 +1,94 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { renderHook } from '@testing-library/react-hooks'; +import { useCaseObservables } from './use_case_observables'; +import { useGetCaseConfiguration } from '../../containers/configure/use_get_case_configuration'; +import { OBSERVABLE_TYPES_BUILTIN_KEYS } from '../../../common/constants'; +import { caseData } from './mocks'; + +const mockCaseData = { + ...caseData, + observables: [ + { + typeKey: 'type1', + value: '127.0.0.1', + description: null, + id: '6d44e478-3b35-4c48-929a-b22e98bfe178', + createdAt: '2024-12-02', + updatedAt: '2024-12-02', + }, + { + typeKey: 'unknown-type', + value: '127.0.0.1', + description: null, + id: '6d44e478-3b35-4c48-929a-b22e98bfe178', + createdAt: '2024-12-02', + updatedAt: '2024-12-02', + }, + ], +}; + +jest.mock('../../containers/configure/use_get_case_configuration'); + +describe('useCaseObservables', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('returns loading state when configuration is loading', () => { + (useGetCaseConfiguration as jest.Mock).mockReturnValue({ + data: { observableTypes: [] }, + isLoading: true, + }); + + const { result } = renderHook(() => useCaseObservables(mockCaseData)); + + expect(result.current).toEqual({ + observables: [], + isLoading: true, + }); + }); + + it('filters observables based on available types', () => { + (useGetCaseConfiguration as jest.Mock).mockReturnValue({ + data: { observableTypes: [{ key: 'type1' }] }, + isLoading: false, + }); + + const { result } = renderHook(() => useCaseObservables(mockCaseData)); + + expect(result.current).toEqual({ + observables: [ + { + typeKey: 'type1', + value: '127.0.0.1', + description: null, + id: '6d44e478-3b35-4c48-929a-b22e98bfe178', + createdAt: '2024-12-02', + updatedAt: '2024-12-02', + }, + ], + isLoading: false, + }); + }); + + it('includes built-in observable types', () => { + (useGetCaseConfiguration as jest.Mock).mockReturnValue({ + data: { observableTypes: [] }, + isLoading: false, + }); + + const { result } = renderHook(() => useCaseObservables(mockCaseData)); + + expect(result.current.observables).toEqual( + mockCaseData.observables.filter(({ typeKey }) => + OBSERVABLE_TYPES_BUILTIN_KEYS.includes(typeKey) + ) + ); + }); +}); diff --git a/x-pack/plugins/cases/public/components/case_view/use_case_observables.ts b/x-pack/plugins/cases/public/components/case_view/use_case_observables.ts new file mode 100644 index 0000000000000..6853295ce75d3 --- /dev/null +++ b/x-pack/plugins/cases/public/components/case_view/use_case_observables.ts @@ -0,0 +1,34 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useMemo } from 'react'; +import { OBSERVABLE_TYPES_BUILTIN_KEYS } from '../../../common/constants'; +import type { CaseUI } from '../../../common'; +import { useGetCaseConfiguration } from '../../containers/configure/use_get_case_configuration'; + +export const useCaseObservables = (caseData: CaseUI) => { + const { data: currentConfiguration, isLoading: loadingCaseConfigure } = useGetCaseConfiguration(); + + return useMemo(() => { + if (loadingCaseConfigure) { + return { + observables: [], + isLoading: true, + }; + } + + const availableTypesSet = new Set([ + ...OBSERVABLE_TYPES_BUILTIN_KEYS, + ...currentConfiguration.observableTypes.map(({ key }) => key), + ]); + + return { + observables: caseData.observables.filter(({ typeKey }) => availableTypesSet.has(typeKey)), + isLoading: loadingCaseConfigure, + }; + }, [caseData.observables, currentConfiguration.observableTypes, loadingCaseConfigure]); +}; diff --git a/x-pack/plugins/cases/public/components/configure_cases/__mock__/index.tsx b/x-pack/plugins/cases/public/components/configure_cases/__mock__/index.tsx index bf1ace60ced91..c7781bc9fcad9 100644 --- a/x-pack/plugins/cases/public/components/configure_cases/__mock__/index.tsx +++ b/x-pack/plugins/cases/public/components/configure_cases/__mock__/index.tsx @@ -32,6 +32,7 @@ const mockConfigurationData = { version: '', id: '', owner: mockedTestProvidersOwner[0], + observableTypes: [], }; export const useCaseConfigureResponse = { diff --git a/x-pack/plugins/cases/public/components/configure_cases/flyout.test.tsx b/x-pack/plugins/cases/public/components/configure_cases/flyout.test.tsx index 8b42dd7df6f0d..0920950ed65b2 100644 --- a/x-pack/plugins/cases/public/components/configure_cases/flyout.test.tsx +++ b/x-pack/plugins/cases/public/components/configure_cases/flyout.test.tsx @@ -365,6 +365,7 @@ describe('CommonFlyout ', () => { version: '', id: '', owner: mockedTestProvidersOwner[0], + observableTypes: [], }; const renderBody = ({ onChange }: FlyOutBodyProps) => ( diff --git a/x-pack/plugins/cases/public/components/configure_cases/index.test.tsx b/x-pack/plugins/cases/public/components/configure_cases/index.test.tsx index c309509d563a3..d0ee4fcebab9f 100644 --- a/x-pack/plugins/cases/public/components/configure_cases/index.test.tsx +++ b/x-pack/plugins/cases/public/components/configure_cases/index.test.tsx @@ -12,8 +12,12 @@ import { waitFor, screen, within } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { ConfigureCases } from '.'; -import { noCasesSettingsPermission, TestProviders, createAppMockRenderer } from '../../common/mock'; -import { customFieldsConfigurationMock, templatesConfigurationMock } from '../../containers/mock'; +import { + observableTypesMock, + customFieldsConfigurationMock, + templatesConfigurationMock, +} from '../../containers/mock'; +import { TestProviders, createAppMockRenderer, noCasesSettingsPermission } from '../../common/mock'; import type { AppMockRenderer } from '../../common/mock'; import { Connectors } from './connectors'; import { ClosureOptions } from './closure_options'; @@ -71,7 +75,7 @@ describe('ConfigureCases', () => { beforeEach(() => { useGetActionTypesMock.mockImplementation(() => useActionTypesResponse); - useLicenseMock.mockReturnValue({ isAtLeastGold: () => true }); + useLicenseMock.mockReturnValue({ isAtLeastGold: () => true, isAtLeastPlatinum: () => false }); }); describe('rendering', () => { @@ -1257,6 +1261,160 @@ describe('ConfigureCases', () => { }); }); + describe('observable types', () => { + let appMockRender: AppMockRenderer; + const persistCaseConfigure = jest.fn(); + + beforeEach(() => { + jest.clearAllMocks(); + appMockRender = createAppMockRenderer(); + usePersistConfigurationMock.mockImplementation(() => ({ + ...usePersistConfigurationMockResponse, + mutate: persistCaseConfigure, + })); + useLicenseMock.mockReturnValue({ isAtLeastPlatinum: () => true, isAtLeastGold: () => true }); + }); + + it('should render observable types section', async () => { + appMockRender.render(); + + expect(await screen.findByTestId('observable-types-form-group')).toBeInTheDocument(); + expect(await screen.findByTestId('add-observable-type')).toBeInTheDocument(); + }); + + it('opens fly out for when click on add observable type', async () => { + appMockRender.render(); + + await userEvent.click(screen.getByTestId('add-observable-type')); + + expect(await screen.findByTestId('common-flyout')).toBeInTheDocument(); + }); + + it('closes fly out for when click on cancel', async () => { + appMockRender.render(); + + await userEvent.click(screen.getByTestId('add-observable-type')); + + expect(await screen.findByTestId('common-flyout')).toBeInTheDocument(); + + await userEvent.click(screen.getByTestId('common-flyout-cancel')); + + expect(await screen.findByTestId('observable-types-form-group')).toBeInTheDocument(); + expect(screen.queryByTestId('common-flyout')).not.toBeInTheDocument(); + }); + + it('closes fly out and updates the data when click on save', async () => { + appMockRender.render(); + + await userEvent.click(screen.getByTestId('add-observable-type')); + + expect(await screen.findByTestId('common-flyout')).toBeInTheDocument(); + + await userEvent.click(screen.getByTestId('observable-type-label-input')); + await userEvent.paste('added'); + + await userEvent.click(screen.getByTestId('common-flyout-save')); + + await waitFor(() => { + expect(persistCaseConfigure).toHaveBeenCalledWith( + expect.objectContaining({ + observableTypes: [expect.objectContaining({ key: expect.any(String), label: 'added' })], + }) + ); + }); + + expect(await screen.findByTestId('observable-types-form-group')).toBeInTheDocument(); + expect(screen.queryByTestId('common-flyout')).not.toBeInTheDocument(); + }); + + it('updates observable type correctly', async () => { + useGetCaseConfigurationMock.mockImplementation(() => ({ + ...useCaseConfigureResponse, + data: { + ...useCaseConfigureResponse.data, + observableTypes: observableTypesMock, + }, + })); + + appMockRender.render(); + + const list = screen.getByTestId('observable-types-list'); + + await userEvent.click( + within(list).getByTestId(`${observableTypesMock[0].key}-observable-type-edit`) + ); + + expect(await screen.findByTestId('common-flyout')).toBeInTheDocument(); + + expect(await screen.findByTestId('common-flyout-header')).toHaveTextContent( + i18n.EDIT_OBSERVABLE_TYPE + ); + + await userEvent.click(screen.getByTestId('observable-type-label-input')); + await userEvent.paste('updated'); + await userEvent.click(screen.getByTestId('common-flyout-save')); + + const updatedObservableTypes = structuredClone(observableTypesMock); + updatedObservableTypes[0].label = 'test_observable_type_1updated'; + + await waitFor(() => { + expect(persistCaseConfigure).toHaveBeenCalledWith({ + connector: { + id: 'none', + name: 'none', + type: ConnectorTypes.none, + fields: null, + }, + closureType: 'close-by-user', + customFields: [], + templates: [], + observableTypes: updatedObservableTypes, + id: '', + version: '', + }); + }); + }); + + it('deletes observable types correctly', async () => { + useGetCaseConfigurationMock.mockImplementation(() => ({ + ...useCaseConfigureResponse, + data: { + ...useCaseConfigureResponse.data, + observableTypes: observableTypesMock, + }, + })); + + appMockRender.render(); + + const list = screen.getByTestId('observable-types-list'); + + await userEvent.click( + within(list).getByTestId(`${observableTypesMock[0].key}-observable-type-delete`) + ); + + expect(await screen.findByTestId('confirm-delete-modal')).toBeInTheDocument(); + + await userEvent.click(screen.getByText('Delete')); + + await waitFor(() => { + expect(persistCaseConfigure).toHaveBeenCalledWith({ + connector: { + id: 'none', + name: 'none', + type: ConnectorTypes.none, + fields: null, + }, + customFields: [], + closureType: 'close-by-user', + observableTypes: [observableTypesMock[1]], + templates: [], + id: '', + version: '', + }); + }); + }); + }); + describe('rendering with license limitations', () => { let appMockRender: AppMockRenderer; let persistCaseConfigure: jest.Mock; @@ -1273,7 +1431,10 @@ describe('ConfigureCases', () => { useGetCaseConfigurationMock.mockImplementation(() => useCaseConfigureResponse); // Updated - useLicenseMock.mockReturnValue({ isAtLeastGold: () => false }); + useLicenseMock.mockReturnValue({ + isAtLeastGold: () => false, + isAtLeastPlatinum: () => false, + }); }); it('should not render connectors and closure options', () => { @@ -1287,6 +1448,13 @@ describe('ConfigureCases', () => { expect(screen.getByTestId('custom-fields-form-group')).toBeInTheDocument(); }); + it('should not render observable types section', async () => { + appMockRender.render(); + + expect(screen.queryByTestId('observable-types-form-group')).not.toBeInTheDocument(); + expect(screen.queryByTestId('add-observable-type')).not.toBeInTheDocument(); + }); + describe('when the previously selected connector doesnt appear due to license downgrade or because it was deleted', () => { beforeEach(() => { useGetCaseConfigurationMock.mockImplementation(() => ({ 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 071a4c5cfac4e..371369ee105a4 100644 --- a/x-pack/plugins/cases/public/components/configure_cases/index.tsx +++ b/x-pack/plugins/cases/public/components/configure_cases/index.tsx @@ -29,6 +29,7 @@ import type { TemplateConfiguration, CustomFieldTypes, ActionConnector, + ObservableTypeConfiguration, } from '../../../common/types/domain'; import { useKibana } from '../../common/lib/kibana'; import { useGetActionTypes } from '../../containers/configure/use_action_types'; @@ -55,6 +56,8 @@ import { CustomFieldsForm } from '../custom_fields/form'; import { TemplateForm } from '../templates/form'; import type { CasesConfigurationUI, CaseUI } from '../../containers/types'; import { builderMap as customFieldsBuilderMap } from '../custom_fields/builder'; +import { ObservableTypes } from '../observable_types'; +import { ObservableTypesForm } from '../observable_types/form'; const sectionWrapperCss = css` box-sizing: content-box; @@ -71,7 +74,7 @@ const getFormWrapperCss = (euiTheme: EuiThemeComputed<{}>) => css` `; interface Flyout { - type: 'addConnector' | 'editConnector' | 'customField' | 'template'; + type: 'addConnector' | 'editConnector' | 'customField' | 'template' | 'observableTypes'; visible: boolean; } @@ -115,6 +118,7 @@ export const ConfigureCases: React.FC = React.memo(() => { useCasesBreadcrumbs(CasesDeepLinkId.casesConfigure); const license = useLicense(); const hasMinimumLicensePermissions = license.isAtLeastGold(); + const hasMinimumLicensePermissionsForObservables = license.isAtLeastPlatinum(); const [connectorIsValid, setConnectorIsValid] = useState(true); const [flyOutVisibility, setFlyOutVisibility] = useState(null); @@ -123,6 +127,8 @@ export const ConfigureCases: React.FC = React.memo(() => { ); const [customFieldToEdit, setCustomFieldToEdit] = useState(null); const [templateToEdit, setTemplateToEdit] = useState(null); + const [observableTypeToEdit, setObservableTypeToEdit] = + useState(null); const { euiTheme } = useEuiTheme(); const { @@ -139,6 +145,7 @@ export const ConfigureCases: React.FC = React.memo(() => { mappings, customFields, templates, + observableTypes, } = currentConfiguration; const { @@ -375,6 +382,87 @@ export const ConfigureCases: React.FC = React.memo(() => { setCustomFieldToEdit(null); }, [setFlyOutVisibility, setCustomFieldToEdit]); + const onEditObservableType = useCallback( + (key: string) => { + const selectedObservableType = observableTypes.find((item) => item.key === key); + + if (selectedObservableType) { + setObservableTypeToEdit(selectedObservableType); + } + setFlyOutVisibility({ type: 'observableTypes', visible: true }); + }, + [setFlyOutVisibility, observableTypes] + ); + + const onDeleteObservableType = useCallback( + (key: string) => { + const remainingObservableTypes = observableTypes.filter((field) => field.key !== key); + + persistCaseConfigure({ + connector, + observableTypes: remainingObservableTypes, + id: configurationId, + version: configurationVersion, + closureType, + customFields, + templates, + }); + }, + [ + closureType, + configurationId, + configurationVersion, + connector, + observableTypes, + persistCaseConfigure, + customFields, + templates, + ] + ); + + const onCloseObservableTypesFlyout = useCallback(() => { + setFlyOutVisibility({ type: 'observableTypes', visible: false }); + setObservableTypeToEdit(null); + }, [setFlyOutVisibility]); + + const onObservableTypeSave = useCallback( + (data: ObservableTypeConfiguration) => { + const existingObservableIndex = observableTypes.findIndex((item) => item.key === data.key); + + let updatedObservableTypes = []; + + if (existingObservableIndex === -1) { + updatedObservableTypes = [...structuredClone(observableTypes), data]; + } else { + updatedObservableTypes = structuredClone(observableTypes); + updatedObservableTypes[existingObservableIndex] = data; + } + + persistCaseConfigure({ + connector, + id: configurationId, + version: configurationVersion, + closureType, + observableTypes: updatedObservableTypes, + customFields, + templates, + }); + + onCloseObservableTypesFlyout(); + }, + [ + observableTypes, + persistCaseConfigure, + connector, + configurationId, + configurationVersion, + closureType, + customFields, + templates, + onCloseObservableTypesFlyout, + ] + ); + const onCustomFieldSave = useCallback( (data: CustomFieldConfiguration) => { const updatedCustomFields = addOrReplaceField(customFields, data); @@ -516,6 +604,23 @@ export const ConfigureCases: React.FC = React.memo(() => { ) : null; + const AddOrEditObservableTypeFlyout = + flyOutVisibility?.type === 'observableTypes' && flyOutVisibility?.visible ? ( + + isLoading={loadingCaseConfigure || isPersistingConfiguration} + disabled={!permissions.settings || loadingCaseConfigure || isPersistingConfiguration} + onCloseFlyout={onCloseObservableTypesFlyout} + onSaveField={onObservableTypeSave} + renderHeader={() => ( + {observableTypeToEdit ? i18n.EDIT_OBSERVABLE_TYPE : i18n.ADD_OBSERVABLE_TYPE} + )} + > + {({ onChange }) => ( + + )} + + ) : null; + return ( { /> + + {hasMinimumLicensePermissionsForObservables && ( + <> + + + + + + setFlyOutVisibility({ type: 'observableTypes', visible: true }) + } + handleDeleteObservableType={onDeleteObservableType} + handleEditObservableType={onEditObservableType} + /> + + + > + )} + + {ConnectorAddFlyout} {ConnectorEditFlyout} {AddOrEditCustomFieldFlyout} {AddOrEditTemplateFlyout} + {AddOrEditObservableTypeFlyout} diff --git a/x-pack/plugins/cases/public/components/configure_cases/translations.ts b/x-pack/plugins/cases/public/components/configure_cases/translations.ts index 4fe462655dcc1..174bb5fafecd7 100644 --- a/x-pack/plugins/cases/public/components/configure_cases/translations.ts +++ b/x-pack/plugins/cases/public/components/configure_cases/translations.ts @@ -186,3 +186,17 @@ export const CREATE_TEMPLATE = i18n.translate('xpack.cases.configureCases.templa export const EDIT_TEMPLATE = i18n.translate('xpack.cases.configureCases.templates.editTemplate', { defaultMessage: 'Edit template', }); + +export const ADD_OBSERVABLE_TYPE = i18n.translate( + 'xpack.cases.configureCases.observableTypes.addObservableType', + { + defaultMessage: 'Add observable type', + } +); + +export const EDIT_OBSERVABLE_TYPE = i18n.translate( + 'xpack.cases.configureCases.observableTypes.editObservableType', + { + defaultMessage: 'Edit observable type', + } +); diff --git a/x-pack/plugins/cases/public/components/experimental_badge/experimental_badge.tsx b/x-pack/plugins/cases/public/components/experimental_badge/experimental_badge.tsx index ef3f4a8584141..73ae8590f1376 100644 --- a/x-pack/plugins/cases/public/components/experimental_badge/experimental_badge.tsx +++ b/x-pack/plugins/cases/public/components/experimental_badge/experimental_badge.tsx @@ -15,12 +15,14 @@ interface Props { icon?: boolean; size?: EuiBetaBadgeProps['size']; compact?: boolean; + 'data-test-subj'?: string; } const ExperimentalBadgeComponent: React.FC = ({ icon = false, size = 's', compact = false, + 'data-test-subj': testSubj = 'case-experimental-badge', }) => { const props: EuiBetaBadgeProps = { label: compact ? null : EXPERIMENTAL_LABEL, @@ -28,7 +30,7 @@ const ExperimentalBadgeComponent: React.FC = ({ ...((icon || compact) && { iconType: 'beaker' }), tooltipContent: EXPERIMENTAL_DESC, tooltipPosition: 'bottom' as const, - 'data-test-subj': 'case-experimental-badge', + 'data-test-subj': testSubj, }; const { euiTheme } = useEuiTheme(); diff --git a/x-pack/plugins/cases/public/components/observable_types/delete_confirmation_modal.test.tsx b/x-pack/plugins/cases/public/components/observable_types/delete_confirmation_modal.test.tsx new file mode 100644 index 0000000000000..caa622c2c32cd --- /dev/null +++ b/x-pack/plugins/cases/public/components/observable_types/delete_confirmation_modal.test.tsx @@ -0,0 +1,52 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import userEvent from '@testing-library/user-event'; +import React from 'react'; +import type { AppMockRenderer } from '../../common/mock'; +import { createAppMockRenderer } from '../../common/mock'; +import { DeleteConfirmationModal } from './delete_confirmation_modal'; + +describe('DeleteConfirmationModal', () => { + let appMock: AppMockRenderer; + const props = { + label: 'Delete observable', + onCancel: jest.fn(), + onConfirm: jest.fn(), + }; + + beforeEach(() => { + appMock = createAppMockRenderer(); + jest.clearAllMocks(); + }); + + it('renders correctly', async () => { + const result = appMock.render(); + + expect(result.getByTestId('confirm-delete-observable-modal')).toBeInTheDocument(); + expect(result.getByText('Delete')).toBeInTheDocument(); + expect(result.getByText('Cancel')).toBeInTheDocument(); + }); + + it('calls onConfirm', async () => { + const result = appMock.render(); + + expect(result.getByText('Delete')).toBeInTheDocument(); + await userEvent.click(result.getByText('Delete')); + + expect(props.onConfirm).toHaveBeenCalled(); + }); + + it('calls onCancel', async () => { + const result = appMock.render(); + + expect(result.getByText('Cancel')).toBeInTheDocument(); + await userEvent.click(result.getByText('Cancel')); + + expect(props.onCancel).toHaveBeenCalled(); + }); +}); diff --git a/x-pack/plugins/cases/public/components/observable_types/delete_confirmation_modal.tsx b/x-pack/plugins/cases/public/components/observable_types/delete_confirmation_modal.tsx new file mode 100644 index 0000000000000..7b3d7bd0a48b9 --- /dev/null +++ b/x-pack/plugins/cases/public/components/observable_types/delete_confirmation_modal.tsx @@ -0,0 +1,40 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { EuiConfirmModal } from '@elastic/eui'; +import * as i18n from './translations'; + +interface ConfirmDeleteCaseModalProps { + label: string; + onCancel: () => void; + onConfirm: () => void; +} + +const DeleteConfirmationModalComponent: React.FC = ({ + label, + onCancel, + onConfirm, +}) => { + return ( + + {i18n.DELETE_OBSERVABLE_TYPE_DESCRIPTION} + + ); +}; +DeleteConfirmationModalComponent.displayName = 'DeleteConfirmationModal'; + +export const DeleteConfirmationModal = React.memo(DeleteConfirmationModalComponent); diff --git a/x-pack/plugins/cases/public/components/observable_types/form.test.tsx b/x-pack/plugins/cases/public/components/observable_types/form.test.tsx new file mode 100644 index 0000000000000..a4feb8fa0b467 --- /dev/null +++ b/x-pack/plugins/cases/public/components/observable_types/form.test.tsx @@ -0,0 +1,127 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import type { AppMockRenderer } from '../../common/mock'; +import { createAppMockRenderer } from '../../common/mock'; +import { ObservableTypesForm, type ObservableTypesFormProps } from './form'; +import { fireEvent, screen, waitFor } from '@testing-library/react'; +import type { FormState } from '../configure_cases/flyout'; +import type { ObservableTypeConfiguration } from '../../../common/types/domain/configure/v1'; +import { MAX_CUSTOM_OBSERVABLE_TYPES_LABEL_LENGTH } from '../../../common/constants'; + +describe('ObservableTypesForm ', () => { + let appMock: AppMockRenderer; + + const props: ObservableTypesFormProps = { + onChange: jest.fn(), + initialValue: null, + }; + + beforeEach(() => { + appMock = createAppMockRenderer(); + jest.clearAllMocks(); + }); + + it('renders correctly', async () => { + appMock.render(); + expect(await screen.findByTestId('observable-types-form')).toBeInTheDocument(); + }); + + describe('when initial value is set', () => { + let formState: FormState; + const onChangeState = (state: FormState) => (formState = state); + + it('should pass initial key to onChange handler', async () => { + appMock.render( + + ); + + await waitFor(() => { + expect(formState).not.toBeUndefined(); + }); + + const labelInput = await screen.findByTestId('observable-type-label-input'); + + expect(labelInput).toBeInTheDocument(); + + fireEvent.change(labelInput, { + target: { value: 'changed label' }, + }); + + const { data, isValid } = await formState!.submit(); + + expect(isValid).toEqual(true); + expect(data.key).toEqual('initial-key'); + expect(data.label).toEqual('changed label'); + }); + + it('should not allow invalid labels', async () => { + appMock.render( + + ); + + await waitFor(() => { + expect(formState).not.toBeUndefined(); + }); + + const labelInput = await screen.findByTestId('observable-type-label-input'); + + expect(labelInput).toBeInTheDocument(); + + fireEvent.change(labelInput, { + target: { value: '' }, + }); + + const { isValid } = await formState!.submit(); + + expect(isValid).toEqual(false); + + fireEvent.change(labelInput, { + target: { value: 'a'.repeat(MAX_CUSTOM_OBSERVABLE_TYPES_LABEL_LENGTH + 1) }, + }); + + const { isValid: isValidWithTooLongLabel } = await formState!.submit(); + + expect(isValidWithTooLongLabel).toEqual(false); + }); + }); + + describe('when initial value is missing', () => { + it('should pass generated key to onChange handler', async () => { + let formState: FormState; + + const onChangeState = (state: FormState) => (formState = state); + + appMock.render(); + + await waitFor(() => { + expect(formState).not.toBeUndefined(); + }); + + const labelInput = await screen.findByTestId('observable-type-label-input'); + + expect(labelInput).toBeInTheDocument(); + + fireEvent.change(labelInput, { + target: { value: 'changed label' }, + }); + + const { data, isValid } = await formState!.submit(); + + expect(isValid).toEqual(true); + expect(data.key).toEqual(expect.any(String)); + expect(data.label).toEqual('changed label'); + }); + }); +}); diff --git a/x-pack/plugins/cases/public/components/observable_types/form.tsx b/x-pack/plugins/cases/public/components/observable_types/form.tsx new file mode 100644 index 0000000000000..ce51953a1cbeb --- /dev/null +++ b/x-pack/plugins/cases/public/components/observable_types/form.tsx @@ -0,0 +1,48 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { Form, useForm } from '@kbn/es-ui-shared-plugin/static/forms/hook_form_lib'; +import React, { useEffect, useMemo } from 'react'; +import { v4 as uuidv4 } from 'uuid'; + +import { schema } from './schema'; +import { FormFields } from './form_fields'; +import type { ObservableTypeConfiguration } from '../../../common/types/domain'; +import type { FormState } from '../configure_cases/flyout'; + +export interface ObservableTypesFormProps { + onChange: (state: FormState) => void; + initialValue: ObservableTypeConfiguration | null; +} + +const FormComponent: React.FC = ({ onChange, initialValue }) => { + const defaultValue = useMemo(() => ({ key: uuidv4(), label: '' }), []); + + const { form } = useForm({ + defaultValue: initialValue || defaultValue, + options: { stripEmptyFields: false }, + schema, + }); + + const { submit, isValid, isSubmitting } = form; + + useEffect(() => { + if (onChange) { + onChange({ isValid, submit }); + } + }, [onChange, isValid, submit]); + + return ( + + + + ); +}; + +FormComponent.displayName = 'ObservableTypesForm '; + +export const ObservableTypesForm = React.memo(FormComponent); diff --git a/x-pack/plugins/cases/public/components/observable_types/form_fields.test.tsx b/x-pack/plugins/cases/public/components/observable_types/form_fields.test.tsx new file mode 100644 index 0000000000000..74dd03bb0959e --- /dev/null +++ b/x-pack/plugins/cases/public/components/observable_types/form_fields.test.tsx @@ -0,0 +1,34 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { screen } from '@testing-library/react'; + +import type { AppMockRenderer } from '../../common/mock'; +import { createAppMockRenderer } from '../../common/mock'; +import { FormTestComponent } from '../../common/test_utils'; +import { FormFields } from './form_fields'; + +describe('FormFields ', () => { + let appMockRender: AppMockRenderer; + const onSubmit = jest.fn(); + + beforeEach(() => { + jest.clearAllMocks(); + appMockRender = createAppMockRenderer(); + }); + + it('renders correctly', async () => { + appMockRender.render( + + + + ); + + expect(await screen.findByTestId('observable-type-label-input')).toBeInTheDocument(); + }); +}); diff --git a/x-pack/plugins/cases/public/components/observable_types/form_fields.tsx b/x-pack/plugins/cases/public/components/observable_types/form_fields.tsx new file mode 100644 index 0000000000000..ea4b21dbd8acb --- /dev/null +++ b/x-pack/plugins/cases/public/components/observable_types/form_fields.tsx @@ -0,0 +1,39 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { memo, useMemo } from 'react'; +import { UseField } from '@kbn/es-ui-shared-plugin/static/forms/hook_form_lib'; +import { TextField, HiddenField } from '@kbn/es-ui-shared-plugin/static/forms/components'; + +interface FormFieldsProps { + isSubmitting?: boolean; +} + +const FormFieldsComponent: React.FC = ({ isSubmitting }) => { + const labelFieldProps = useMemo( + () => ({ + euiFieldProps: { + 'data-test-subj': 'observable-type-label-input', + fullWidth: true, + autoFocus: true, + isLoading: isSubmitting, + }, + }), + [isSubmitting] + ); + + return ( + <> + + + > + ); +}; + +FormFieldsComponent.displayName = 'FormFields'; + +export const FormFields = memo(FormFieldsComponent); diff --git a/x-pack/plugins/cases/public/components/observable_types/index.test.tsx b/x-pack/plugins/cases/public/components/observable_types/index.test.tsx new file mode 100644 index 0000000000000..6709e6f5f811d --- /dev/null +++ b/x-pack/plugins/cases/public/components/observable_types/index.test.tsx @@ -0,0 +1,79 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { screen } from '@testing-library/react'; + +import type { AppMockRenderer } from '../../common/mock'; +import { createAppMockRenderer, noCasesPermissions } from '../../common/mock'; +import type { ObservableTypesProps } from '.'; +import { ObservableTypes } from '.'; +import { observableTypesMock } from '../../containers/mock'; +import * as i18n from './translations'; +import { MAX_CUSTOM_OBSERVABLE_TYPES } from '../../../common/constants'; + +describe('ObservableTypes', () => { + let appMock: AppMockRenderer; + + const props: ObservableTypesProps = { + disabled: false, + isLoading: false, + observableTypes: [], + handleAddObservableType: jest.fn(), + handleEditObservableType: jest.fn(), + handleDeleteObservableType: jest.fn(), + }; + + describe('with sufficient permissions', () => { + beforeEach(() => { + appMock = createAppMockRenderer(); + jest.clearAllMocks(); + }); + + it('renders correctly when there are no observable types', async () => { + appMock.render(); + expect(await screen.findByTestId('observable-types-form-group')).toBeInTheDocument(); + expect(screen.queryByTestId('observable-types-list')).not.toBeInTheDocument(); + }); + + it('renders correctly when there are observable types', async () => { + appMock.render(); + expect(await screen.findByTestId('observable-types-form-group')).toBeInTheDocument(); + expect(await screen.findByTestId('observable-types-list')).toBeInTheDocument(); + }); + + it('shows error when custom fields reaches the limit', async () => { + const generatedMockCustomFields = []; + + for (let i = 0; i < 11; i++) { + generatedMockCustomFields.push({ + key: `field_key_${i + 1}`, + label: `My custom label ${i + 1}`, + }); + } + + const observableTypes = [...generatedMockCustomFields]; + + appMock.render(); + + expect(await screen.findByText(i18n.MAX_OBSERVABLE_TYPES_LIMIT(MAX_CUSTOM_OBSERVABLE_TYPES))); + expect(screen.queryByTestId('add-observable-type')).not.toBeInTheDocument(); + }); + }); + + describe('with insufficient permissions', () => { + beforeEach(() => { + appMock = createAppMockRenderer({ permissions: noCasesPermissions() }); + jest.clearAllMocks(); + }); + + it('renders correctly when there are no observable types', async () => { + appMock.render(); + expect(screen.queryByTestId('observable-types-form-group')).not.toBeInTheDocument(); + }); + }); +}); diff --git a/x-pack/plugins/cases/public/components/observable_types/index.tsx b/x-pack/plugins/cases/public/components/observable_types/index.tsx new file mode 100644 index 0000000000000..c1106ef692132 --- /dev/null +++ b/x-pack/plugins/cases/public/components/observable_types/index.tsx @@ -0,0 +1,120 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useCallback } from 'react'; +import { + EuiButtonEmpty, + EuiPanel, + EuiDescribedFormGroup, + EuiSpacer, + EuiFlexGroup, + EuiFlexItem, + EuiText, +} from '@elastic/eui'; + +import { MAX_CUSTOM_OBSERVABLE_TYPES } from '../../../common/constants'; +import * as i18n from './translations'; +import { useCasesContext } from '../cases_context/use_cases_context'; +import type { ObservableTypesConfiguration } from '../../../common/types/domain'; +import { ObservableTypesList } from './observable_types_list'; + +export interface ObservableTypesProps { + observableTypes: ObservableTypesConfiguration; + disabled: boolean; + isLoading: boolean; + handleAddObservableType: () => void; + handleDeleteObservableType: (key: string) => void; + handleEditObservableType: (key: string) => void; +} +const ObservableTypesComponent: React.FC = ({ + disabled, + isLoading, + handleAddObservableType, + handleDeleteObservableType, + handleEditObservableType, + observableTypes, +}) => { + const { permissions } = useCasesContext(); + const canModifyObservableTypes = !disabled && permissions.settings; + + const onAddObservableType = useCallback(() => { + handleAddObservableType(); + }, [handleAddObservableType]); + + const onEditObservableType = useCallback( + (key: string) => { + handleEditObservableType(key); + }, + [handleEditObservableType] + ); + + if (!permissions.settings) { + return null; + } + + return ( + + {i18n.TITLE} + + } + description={{i18n.DESCRIPTION}} + data-test-subj="observable-types-form-group" + > + + {observableTypes.length ? ( + <> + + > + ) : null} + + {!observableTypes.length ? ( + + + {i18n.NO_OBSERVABLE_TYPES} + + + + ) : null} + + + {observableTypes.length < MAX_CUSTOM_OBSERVABLE_TYPES ? ( + + {i18n.ADD_OBSERVABLE_TYPE} + + ) : ( + + + {i18n.MAX_OBSERVABLE_TYPES_LIMIT(MAX_CUSTOM_OBSERVABLE_TYPES)} + + + )} + + + + + + + ); +}; +ObservableTypesComponent.displayName = 'CustomFields'; + +export const ObservableTypes = React.memo(ObservableTypesComponent); diff --git a/x-pack/plugins/cases/public/components/observable_types/observable_types_list/index.test.tsx b/x-pack/plugins/cases/public/components/observable_types/observable_types_list/index.test.tsx new file mode 100644 index 0000000000000..db2d6adb3234c --- /dev/null +++ b/x-pack/plugins/cases/public/components/observable_types/observable_types_list/index.test.tsx @@ -0,0 +1,131 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { screen, within, waitFor } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; + +import type { AppMockRenderer } from '../../../common/mock'; +import { createAppMockRenderer } from '../../../common/mock'; +import { ObservableTypesList, type ObservableTypesListProps } from '.'; + +const observableTypes = [ + { label: 'Test Observable Type', key: 'deb68304-da86-483c-b5ed-ff5b3420e340' }, + { label: 'Test Observable Type vol 2', key: '532433db-045f-4ccc-b73c-db9441f0eefa' }, +]; + +describe('ObservableTypesList', () => { + let appMockRender: AppMockRenderer; + + const props: ObservableTypesListProps = { + disabled: false, + observableTypes, + onDeleteObservableType: jest.fn(), + onEditObservableType: jest.fn(), + }; + + beforeEach(() => { + jest.clearAllMocks(); + appMockRender = createAppMockRenderer(); + }); + + it('renders correctly', () => { + appMockRender.render(); + + expect(screen.getByTestId('observable-types-list')).toBeInTheDocument(); + }); + + it('shows ObservableTypesList correctly', async () => { + appMockRender.render(); + + expect(await screen.findByTestId('observable-types-list')).toBeInTheDocument(); + + expect( + await screen.findByTestId(`observable-type-${observableTypes[0].key}`) + ).toBeInTheDocument(); + expect(await screen.findByText('Test Observable Type')).toBeInTheDocument(); + expect( + await screen.findByTestId(`observable-type-${observableTypes[1].key}`) + ).toBeInTheDocument(); + }); + + describe('Delete', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('shows confirmation modal when deleting a field ', async () => { + appMockRender.render(); + + const list = await screen.findByTestId('observable-types-list'); + + await userEvent.click( + await within(list).findByTestId(`${observableTypes[0].key}-observable-type-delete`) + ); + + expect(await screen.findByTestId('confirm-delete-modal')).toBeInTheDocument(); + }); + + it('calls onDeleteObservableType when confirm', async () => { + appMockRender.render(); + + const list = await screen.findByTestId('observable-types-list'); + + await userEvent.click( + await within(list).findByTestId(`${observableTypes[0].key}-observable-type-delete`) + ); + + expect(await screen.findByTestId('confirm-delete-modal')).toBeInTheDocument(); + + await userEvent.click(await screen.findByText('Delete')); + + await waitFor(() => { + expect(screen.queryByTestId('confirm-delete-modal')).not.toBeInTheDocument(); + expect(props.onDeleteObservableType).toHaveBeenCalledWith(observableTypes[0].key); + }); + }); + + it('does not call onDeleteObservableType when cancel', async () => { + appMockRender.render(); + + const list = await screen.findByTestId('observable-types-list'); + + await userEvent.click( + await within(list).findByTestId(`${observableTypes[0].key}-observable-type-delete`) + ); + + expect(await screen.findByTestId('confirm-delete-modal')).toBeInTheDocument(); + + await userEvent.click(await screen.findByText('Cancel')); + + await waitFor(() => { + expect(screen.queryByTestId('confirm-delete-modal')).not.toBeInTheDocument(); + expect(props.onDeleteObservableType).not.toHaveBeenCalledWith(); + }); + }); + }); + + describe('Edit', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('calls onEditObservableType correctly', async () => { + appMockRender.render(); + + const list = await screen.findByTestId('observable-types-list'); + + await userEvent.click( + await within(list).findByTestId(`${observableTypes[0].key}-observable-type-edit`) + ); + + await waitFor(() => { + expect(props.onEditObservableType).toHaveBeenCalledWith(observableTypes[0].key); + }); + }); + }); +}); diff --git a/x-pack/plugins/cases/public/components/observable_types/observable_types_list/index.tsx b/x-pack/plugins/cases/public/components/observable_types/observable_types_list/index.tsx new file mode 100644 index 0000000000000..bdb898c718e8b --- /dev/null +++ b/x-pack/plugins/cases/public/components/observable_types/observable_types_list/index.tsx @@ -0,0 +1,116 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useCallback, useState } from 'react'; +import { + EuiPanel, + EuiFlexGroup, + EuiFlexItem, + EuiSpacer, + EuiText, + EuiButtonIcon, +} from '@elastic/eui'; +import * as i18n from '../translations'; + +import type { ObservableTypesConfiguration } from '../../../../common/types/domain'; +import { DeleteConfirmationModal } from '../../configure_cases/delete_confirmation_modal'; + +export interface ObservableTypesListProps { + disabled: boolean; + observableTypes: ObservableTypesConfiguration; + onDeleteObservableType: (key: string) => void; + onEditObservableType: (key: string) => void; +} + +const ObservableTypesListComponent: React.FC = (props) => { + const { observableTypes, onDeleteObservableType, onEditObservableType } = props; + const [selectedItem, setSelectedItem] = useState( + null + ); + + const onConfirm = useCallback(() => { + if (selectedItem) { + onDeleteObservableType(selectedItem.key); + } + + setSelectedItem(null); + }, [onDeleteObservableType, setSelectedItem, selectedItem]); + + const onCancel = useCallback(() => { + setSelectedItem(null); + }, []); + + const showModal = Boolean(selectedItem); + + return observableTypes.length ? ( + <> + + + + {observableTypes.map((observableType) => ( + + + + + + + + {observableType.label} + + + + + + + + onEditObservableType(observableType.key)} + /> + + + setSelectedItem(observableType)} + /> + + + + + + + + ))} + + {showModal && selectedItem ? ( + + ) : null} + + > + ) : null; +}; + +ObservableTypesListComponent.displayName = 'ObservableTypesListComponent'; + +export const ObservableTypesList = React.memo(ObservableTypesListComponent); diff --git a/x-pack/plugins/cases/public/components/observable_types/schema.tsx b/x-pack/plugins/cases/public/components/observable_types/schema.tsx new file mode 100644 index 0000000000000..53a54cc5bddd9 --- /dev/null +++ b/x-pack/plugins/cases/public/components/observable_types/schema.tsx @@ -0,0 +1,39 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { fieldValidators } from '@kbn/es-ui-shared-plugin/static/forms/helpers'; +import * as i18n from './translations'; +import { MAX_CUSTOM_OBSERVABLE_TYPES_LABEL_LENGTH } from '../../../common/constants'; + +const { emptyField, maxLengthField } = fieldValidators; + +export const schema = { + key: { + validations: [ + { + validator: emptyField('key'), + }, + ], + }, + label: { + label: i18n.OBSERVABLE_TYPE_LABEL, + validations: [ + { + validator: emptyField(i18n.REQUIRED_FIELD(i18n.OBSERVABLE_TYPE_LABEL.toLocaleLowerCase())), + }, + { + validator: maxLengthField({ + length: MAX_CUSTOM_OBSERVABLE_TYPES_LABEL_LENGTH, + message: i18n.MAX_LENGTH_ERROR( + i18n.OBSERVABLE_TYPE_LABEL.toLocaleLowerCase(), + MAX_CUSTOM_OBSERVABLE_TYPES_LABEL_LENGTH + ), + }), + }, + ], + }, +}; diff --git a/x-pack/plugins/cases/public/components/observable_types/translations.ts b/x-pack/plugins/cases/public/components/observable_types/translations.ts new file mode 100644 index 0000000000000..61218e536ae90 --- /dev/null +++ b/x-pack/plugins/cases/public/components/observable_types/translations.ts @@ -0,0 +1,59 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; + +export * from '../../common/translations'; + +export const TITLE = i18n.translate('xpack.cases.observableTypes.title', { + defaultMessage: 'Observable types', +}); + +export const DESCRIPTION = i18n.translate('xpack.cases.observableTypes.description', { + defaultMessage: 'Add observable types for customized case collaboration.', +}); + +export const NO_OBSERVABLE_TYPES = i18n.translate('xpack.cases.observableTypes.noObservableTypes', { + defaultMessage: 'You do not have any observable types yet', +}); + +export const ADD_OBSERVABLE_TYPE = i18n.translate('xpack.cases.observableTypes.addObservableType', { + defaultMessage: 'Add observable type', +}); + +export const OBSERVABLE_TYPE_LABEL = i18n.translate('xpack.cases.observableTypes.fieldLabel', { + defaultMessage: 'Observable type label', +}); + +export const REQUIRED_FIELD = (fieldName: string): string => + i18n.translate('xpack.cases.observableTypes.requiredField', { + values: { fieldName }, + defaultMessage: '{fieldName} is required.', + }); + +export const DELETE_OBSERVABLE_TYPE_TITLE = (fieldName: string) => + i18n.translate('xpack.cases.observableTypes.deleteField', { + values: { fieldName }, + defaultMessage: 'Delete observable type "{fieldName}"?', + }); + +export const DELETE_OBSERVABLE_TYPE_DESCRIPTION = i18n.translate( + 'xpack.cases.observableTypes.deleteObservableTypeDescription', + { + defaultMessage: 'The observable type will be removed from all cases and data will be lost.', + } +); + +export const DELETE = i18n.translate('xpack.cases.observableTypes.options.Delete', { + defaultMessage: 'Delete', +}); + +export const MAX_OBSERVABLE_TYPES_LIMIT = (maxObservableTypesLimit: number) => + i18n.translate('xpack.cases.observableTypes.maxObservableTypesLimit', { + values: { maxObservableTypesLimit }, + defaultMessage: 'Maximum number of {maxObservableTypesLimit} observable types reached.', + }); diff --git a/x-pack/plugins/cases/public/components/observables/add_observable.test.tsx b/x-pack/plugins/cases/public/components/observables/add_observable.test.tsx new file mode 100644 index 0000000000000..7e88b78db49d3 --- /dev/null +++ b/x-pack/plugins/cases/public/components/observables/add_observable.test.tsx @@ -0,0 +1,102 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { createAppMockRenderer, noCasesPermissions } from '../../common/mock'; +import type { AddObservableProps } from './add_observable'; +import { AddObservable } from './add_observable'; +import { mockCase } from '../../containers/mock'; +import { licensingMock } from '@kbn/licensing-plugin/public/mocks'; +import userEvent from '@testing-library/user-event'; +import { screen } from '@testing-library/react'; +import { OBSERVABLE_TYPE_IPV4 } from '../../../common/constants'; +import { postObservable } from '../../containers/api'; + +jest.mock('../../containers/api'); + +const platinumLicense = licensingMock.createLicense({ + license: { type: 'platinum' }, +}); + +const basicLicense = licensingMock.createLicense({ + license: { type: 'basic' }, +}); + +describe('AddObservable', () => { + const props: AddObservableProps = { + caseData: mockCase, + }; + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('renders the button as enabled when subscribed to platinum', async () => { + const appMock = createAppMockRenderer({ license: platinumLicense }); + const result = appMock.render(); + + const addButton = result.getByTestId('cases-observables-add'); + + expect(addButton).toBeInTheDocument(); + expect(addButton).toBeEnabled(); + }); + + it('opens the modal when clicked', async () => { + const appMock = createAppMockRenderer({ license: platinumLicense }); + const result = appMock.render(); + + const addButton = result.getByTestId('cases-observables-add'); + + expect(addButton).toBeInTheDocument(); + expect(addButton).toBeEnabled(); + + await userEvent.click(addButton); + + expect(await screen.findByTestId('cases-observables-add-modal')).toBeInTheDocument(); + }); + + it('submits the data on save', async () => { + const appMock = createAppMockRenderer({ license: platinumLicense }); + const result = appMock.render(); + + await userEvent.click(result.getByTestId('cases-observables-add')); + + await userEvent.selectOptions( + result.getByTestId('observable-type-select'), + OBSERVABLE_TYPE_IPV4.key + ); + + await userEvent.click(screen.getByTestId('observable-value-field')); + await userEvent.paste('127.0.0.1'); + + await userEvent.click(result.getByTestId('save-observable')); + + expect(screen.queryByTestId('cases-observables-add-modal')).not.toBeInTheDocument(); + + expect(jest.mocked(postObservable)).toHaveBeenCalledWith( + { observable: { description: '', typeKey: 'observable-type-ipv4', value: '127.0.0.1' } }, + 'mock-id' + ); + }); + + it('renders the button as disabled when license is too low', async () => { + const appMock = createAppMockRenderer({ license: basicLicense }); + const result = appMock.render(); + + const addButton = result.getByTestId('cases-observables-add'); + + expect(addButton).toBeInTheDocument(); + expect(addButton).toBeDisabled(); + }); + + it('does not render the button with insufficient permissions', async () => { + const appMock = createAppMockRenderer({ permissions: noCasesPermissions() }); + const result = appMock.render(); + + expect(result.queryByTestId('cases-observables-add')).not.toBeInTheDocument(); + }); +}); diff --git a/x-pack/plugins/cases/public/components/observables/add_observable.tsx b/x-pack/plugins/cases/public/components/observables/add_observable.tsx new file mode 100644 index 0000000000000..d8241b46e18f8 --- /dev/null +++ b/x-pack/plugins/cases/public/components/observables/add_observable.tsx @@ -0,0 +1,81 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { + EuiButton, + EuiFlexItem, + EuiModal, + EuiModalBody, + EuiModalHeader, + EuiModalHeaderTitle, +} from '@elastic/eui'; +import React, { useState, useCallback } from 'react'; + +import type { ObservablePost } from '../../../common/types/api/observable/v1'; +import type { CaseUI } from '../../../common'; +import { useCasesContext } from '../cases_context/use_cases_context'; +import * as i18n from './translations'; +import { usePostObservable } from '../../containers/use_post_observables'; +import { ObservableForm, type ObservableFormProps } from './observable_form'; +import { useCasesFeatures } from '../../common/use_cases_features'; + +export interface AddObservableProps { + caseData: CaseUI; +} + +const AddObservableComponent: React.FC = ({ caseData }) => { + const { permissions } = useCasesContext(); + const [isModalVisible, setIsModalVisible] = useState(false); + const { isLoading, mutateAsync: postObservables } = usePostObservable(caseData.id); + const { observablesAuthorized: isObservablesEnabled } = useCasesFeatures(); + + const closeModal = () => setIsModalVisible(false); + const showModal = () => setIsModalVisible(true); + + const handleCreateObservable = useCallback( + async (observable: ObservablePost) => { + await postObservables({ + observable, + }); + + closeModal(); + }, + [postObservables] + ); + + return permissions.create && permissions.update ? ( + + + {i18n.ADD_OBSERVABLE} + + {isModalVisible && ( + + + {i18n.ADD_OBSERVABLE} + + + + + + )} + + ) : null; +}; + +AddObservableComponent.displayName = 'AddObservable'; + +export const AddObservable = React.memo(AddObservableComponent); diff --git a/x-pack/plugins/cases/public/components/observables/builder.tsx b/x-pack/plugins/cases/public/components/observables/builder.tsx new file mode 100644 index 0000000000000..9c715f03d854f --- /dev/null +++ b/x-pack/plugins/cases/public/components/observables/builder.tsx @@ -0,0 +1,57 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +/* eslint-disable react/display-name */ + +import React, { type ComponentType } from 'react'; +import { UseField } from '@kbn/es-ui-shared-plugin/static/forms/hook_form_lib'; +import { TextField } from '@kbn/es-ui-shared-plugin/static/forms/components'; +import { + OBSERVABLE_TYPE_DOMAIN, + OBSERVABLE_TYPE_EMAIL, + OBSERVABLE_TYPE_IPV4, + OBSERVABLE_TYPE_IPV6, + OBSERVABLE_TYPE_URL, +} from '../../../common/constants'; +import { fieldsConfig } from './fields_config'; +import * as i18n from './translations'; + +const sharedProps = { + path: 'value', + componentProps: { + placeholder: i18n.VALUE_PLACEHOLDER, + euiFieldProps: { + 'data-test-subj': 'observable-value-field', + }, + }, + component: TextField, +} as const; + +const cachedComponents = Object.freeze({ + generic: () => , + [OBSERVABLE_TYPE_EMAIL.key]: () => ( + + ), + [OBSERVABLE_TYPE_URL.key]: () => ( + + ), + [OBSERVABLE_TYPE_IPV4.key]: () => ( + + ), + [OBSERVABLE_TYPE_IPV6.key]: () => ( + + ), + [OBSERVABLE_TYPE_DOMAIN.key]: () => ( + + ), +} as const) as Record; + +/* + * Returns value component with validation config matching the type (or generic value component if the specialized field is not found). + */ +export const getDynamicValueField = (observableType: string) => + cachedComponents[observableType] ?? cachedComponents.generic; diff --git a/x-pack/plugins/cases/public/components/observables/edit_observable_modal.test.tsx b/x-pack/plugins/cases/public/components/observables/edit_observable_modal.test.tsx new file mode 100644 index 0000000000000..68dc7e8a74b5d --- /dev/null +++ b/x-pack/plugins/cases/public/components/observables/edit_observable_modal.test.tsx @@ -0,0 +1,62 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import userEvent from '@testing-library/user-event'; +import React from 'react'; +import type { AppMockRenderer } from '../../common/mock'; +import { createAppMockRenderer } from '../../common/mock'; +import { EditObservableModal, type EditObservableModalProps } from './edit_observable_modal'; +import { mockCase } from '../../containers/mock'; +import { patchObservable } from '../../containers/api'; + +jest.mock('../../containers/api'); + +describe('EditObservableModal', () => { + let appMock: AppMockRenderer; + const props: EditObservableModalProps = { + onCloseModal: jest.fn(), + caseData: mockCase, + observable: { + value: 'test', + typeKey: '67ac7899-2cc0-4ce5-80d3-0f4a2d2af33e', + id: '84279197-3746-47fb-ba4d-c7946a7feb88', + createdAt: '2024-10-01', + updatedAt: '2024-10-01', + description: '', + }, + }; + + beforeEach(() => { + appMock = createAppMockRenderer(); + jest.clearAllMocks(); + }); + + it('renders correctly', async () => { + const result = appMock.render(); + + expect(result.getByTestId('case-observables-edit-modal')).toBeInTheDocument(); + expect(result.getByText('Save observable')).toBeInTheDocument(); + }); + + it('calls handleUpdateObservable', async () => { + const result = appMock.render(); + + expect(result.getByText('Save observable')).toBeInTheDocument(); + await userEvent.click(result.getByText('Save observable')); + + expect(patchObservable).toHaveBeenCalled(); + }); + + it('calls onCancel', async () => { + const result = appMock.render(); + + expect(result.getByText('Cancel')).toBeInTheDocument(); + await userEvent.click(result.getByText('Cancel')); + + expect(props.onCloseModal).toHaveBeenCalled(); + }); +}); diff --git a/x-pack/plugins/cases/public/components/observables/edit_observable_modal.tsx b/x-pack/plugins/cases/public/components/observables/edit_observable_modal.tsx new file mode 100644 index 0000000000000..e76fe417eae00 --- /dev/null +++ b/x-pack/plugins/cases/public/components/observables/edit_observable_modal.tsx @@ -0,0 +1,56 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { EuiModal, EuiModalHeader, EuiModalHeaderTitle, EuiModalBody } from '@elastic/eui'; +import React, { type FC } from 'react'; +import type { ObservablePatch } from '../../../common/types/api/observable/v1'; +import type { Observable } from '../../../common/types/domain/observable/v1'; +import { ObservableForm } from './observable_form'; +import * as i18n from './translations'; +import { usePatchObservable } from '../../containers/use_patch_observables'; +import { type CaseUI } from '../../containers/types'; + +export interface EditObservableModalProps { + onCloseModal: VoidFunction; + observable: Observable; + caseData: CaseUI; +} + +export const EditObservableModal: FC = ({ + onCloseModal: closeModal, + observable, + caseData, +}) => { + const { isLoading, mutateAsync: patchObservable } = usePatchObservable( + caseData.id, + observable.id + ); + const handleUpdateObservable = async (updatedObservable: ObservablePatch) => { + patchObservable({ + observable: updatedObservable, + }); + closeModal(); + }; + + return ( + + + {i18n.EDIT_OBSERVABLE} + + + + + + ); +}; + +EditObservableModal.displayName = 'EditObservableModal'; diff --git a/x-pack/plugins/cases/public/components/observables/fields_config.test.ts b/x-pack/plugins/cases/public/components/observables/fields_config.test.ts new file mode 100644 index 0000000000000..348b5b1ca27b5 --- /dev/null +++ b/x-pack/plugins/cases/public/components/observables/fields_config.test.ts @@ -0,0 +1,146 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { ValidationFunc } from '@kbn/es-ui-shared-plugin/static/forms/hook_form_lib/types'; +import { domainValidator, emailValidator, genericValidator, ipv4Validator } from './fields_config'; + +describe('emailValidator', () => { + it('should return an error if the value is not a string', () => { + const result = emailValidator({ + value: undefined, + path: 'email', + } as Parameters[0]); + + expect(result).toEqual({ + code: 'ERR_NOT_STRING', + message: 'Value should be a string', + path: 'email', + }); + }); + + it('should return an error if the value is not a valid email', () => { + const result = emailValidator({ + value: 'invalid-email', + path: 'email', + } as Parameters[0]); + expect(result).toEqual({ + code: 'ERR_NOT_EMAIL', + message: 'Value should be a valid email', + path: 'email', + }); + }); + + it('should return undefined if the value is a valid email', () => { + const result = emailValidator({ + value: 'test@example.com', + path: 'email', + } as Parameters[0]); + expect(result).toBeUndefined(); + }); +}); + +describe('genericValidator', () => { + it('should return an error if the value is not a string', () => { + const result = genericValidator({ + value: 123, + path: 'generic', + } as Parameters[0]); + expect(result).toEqual({ + code: 'ERR_NOT_STRING', + message: 'Value should be a string', + path: 'generic', + }); + }); + + it('should return an error if the value is not valid', () => { + const result = genericValidator({ + value: 'invalid value!', + path: 'generic', + } as Parameters[0]); + expect(result).toEqual({ + code: 'ERR_NOT_VALID', + message: 'Value is invalid', + path: 'generic', + }); + }); + + it('should return undefined if the value is valid', () => { + const result = genericValidator({ + value: 'valid_value', + path: 'generic', + } as Parameters[0]); + expect(result).toBeUndefined(); + }); +}); + +describe('domainValidator', () => { + it('should return undefined for a valid domain', () => { + const result = domainValidator({ + value: 'example.com', + path: 'domain', + } as Parameters[0]); + expect(result).toBeUndefined(); + }); + + it('should return an error for an invalid domain', () => { + const result = domainValidator({ + value: '-invalid.com', + path: 'domain', + } as Parameters[0]); + expect(result).toEqual({ + code: 'ERR_NOT_VALID', + message: 'Value is invalid', + path: 'domain', + }); + }); + + it('should return an error for hyphen-spaced strings', () => { + const result = domainValidator({ + value: 'test-test', + path: 'domain', + } as Parameters[0]); + expect(result).toEqual({ + code: 'ERR_NOT_VALID', + message: 'Value is invalid', + path: 'domain', + }); + }); + + it('should return an error for a non-string value', () => { + const result = domainValidator({ + value: 12345, + path: 'domain', + } as Parameters[0]); + expect(result).toEqual({ + code: 'ERR_NOT_STRING', + message: 'Value should be a string', + path: 'domain', + }); + }); +}); + +describe('ipv4Validator', () => { + it('should return undefined for a valid ipv4', () => { + const result = ipv4Validator({ + value: '127.0.0.1', + path: 'ipv4', + } as Parameters[0]); + expect(result).toBeUndefined(); + }); + + it('should return an error for invalid ipv4', () => { + const result = domainValidator({ + value: 'invalid ip', + path: 'ipv4', + } as Parameters[0]); + expect(result).toEqual({ + code: 'ERR_NOT_VALID', + message: 'Value is invalid', + path: 'ipv4', + }); + }); +}); diff --git a/x-pack/plugins/cases/public/components/observables/fields_config.ts b/x-pack/plugins/cases/public/components/observables/fields_config.ts new file mode 100644 index 0000000000000..b858bb1251bb2 --- /dev/null +++ b/x-pack/plugins/cases/public/components/observables/fields_config.ts @@ -0,0 +1,209 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license 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 ValidationFunc } from '@kbn/es-ui-shared-plugin/static/forms/hook_form_lib'; +import { parseAddressList } from 'email-addresses'; +import ipaddr from 'ipaddr.js'; +import { fieldValidators } from '@kbn/es-ui-shared-plugin/static/forms/helpers'; + +import { + OBSERVABLE_TYPE_DOMAIN, + OBSERVABLE_TYPE_EMAIL, + OBSERVABLE_TYPE_IPV4, + OBSERVABLE_TYPE_IPV6, + OBSERVABLE_TYPE_URL, +} from '../../../common/constants'; +import * as i18n from './translations'; + +export const normalizeValueType = (value: string): keyof typeof fieldsConfig.value | 'generic' => { + if (value in fieldsConfig.value) { + return value as keyof typeof fieldsConfig.value; + } + + return 'generic'; +}; + +const DOMAIN_REGEX = /^(?!-)[A-Za-z0-9-]{1,63}(? ({ + code: 'ERR_NOT_STRING', + message: 'Value should be a string', + path, +}); + +const { emptyField } = fieldValidators; + +const validatorFactory = + ( + regex: RegExp, + message: string = i18n.INVALID_VALUE, + code: string = 'ERR_NOT_VALID' + ): ValidationFunc => + (...args: Parameters) => { + const [{ value, path }] = args; + + if (typeof value !== 'string') { + return notStringError(path); + } + + if (!regex.test(value)) { + return { + code, + message, + path, + }; + } + }; + +export const genericValidator = validatorFactory(GENERIC_REGEX); +export const domainValidator = validatorFactory(DOMAIN_REGEX); + +const ipValidatorFactory = + (kind: 'ipv6' | 'ipv4') => + (...args: Parameters) => { + const [{ value, path }] = args; + + if (typeof value !== 'string') { + return notStringError(path); + } + + try { + const parsed = ipaddr.parse(value); + + if (parsed.kind() !== kind) { + return { + code: 'ERR_NOT_VALID', + message: i18n.INVALID_VALUE, + path, + }; + } + } catch (error) { + return { + code: 'ERR_NOT_VALID', + message: i18n.INVALID_VALUE, + path, + }; + } + }; + +export const ipv6Validator = ipValidatorFactory('ipv6'); +export const ipv4Validator = ipValidatorFactory('ipv4'); + +export const urlValidator = (...args: Parameters) => { + const [{ value, path }] = args; + + if (typeof value !== 'string') { + return notStringError(path); + } + + try { + new URL(value); + } catch (error) { + return { + code: 'ERR_NOT_VALID', + message: i18n.INVALID_VALUE, + path, + }; + } +}; + +export const emailValidator = (...args: Parameters) => { + const [{ value, path }] = args; + + if (typeof value !== 'string') { + return notStringError(path); + } + + const emailAddresses = parseAddressList(value); + + if (emailAddresses == null) { + return { message: i18n.INVALID_EMAIL, code: 'ERR_NOT_EMAIL', path }; + } +}; + +export const fieldsConfig = { + value: { + generic: { + validations: [ + { + validator: emptyField(i18n.REQUIRED_VALUE), + }, + { + validator: genericValidator, + }, + ], + label: i18n.FIELD_LABEL_VALUE, + }, + [OBSERVABLE_TYPE_EMAIL.key]: { + validations: [ + { + validator: emptyField(i18n.REQUIRED_VALUE), + }, + { + validator: emailValidator, + }, + ], + label: 'Email', + }, + [OBSERVABLE_TYPE_DOMAIN.key]: { + validations: [ + { + validator: emptyField(i18n.REQUIRED_VALUE), + }, + { + validator: domainValidator, + }, + ], + label: 'Domain', + }, + [OBSERVABLE_TYPE_IPV4.key]: { + validations: [ + { + validator: emptyField(i18n.REQUIRED_VALUE), + }, + { + validator: ipv4Validator, + }, + ], + label: 'IPv4', + }, + [OBSERVABLE_TYPE_IPV6.key]: { + validations: [ + { + validator: emptyField(i18n.REQUIRED_VALUE), + }, + { + validator: ipv6Validator, + }, + ], + label: 'IPv6', + }, + [OBSERVABLE_TYPE_URL.key]: { + validations: [ + { + validator: emptyField(i18n.REQUIRED_VALUE), + }, + { + validator: urlValidator, + }, + ], + label: 'URL', + }, + }, + typeKey: { + validations: [ + { + validator: emptyField(i18n.REQUIRED_VALUE), + }, + ], + label: i18n.FIELD_LABEL_TYPE, + }, + description: { + label: i18n.FIELD_LABEL_DESCRIPTION, + }, +}; diff --git a/x-pack/plugins/cases/public/components/observables/observable_actions_popover_button.test.tsx b/x-pack/plugins/cases/public/components/observables/observable_actions_popover_button.test.tsx new file mode 100644 index 0000000000000..8a3befb11e2f3 --- /dev/null +++ b/x-pack/plugins/cases/public/components/observables/observable_actions_popover_button.test.tsx @@ -0,0 +1,148 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; + +import { screen, waitFor } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; + +import type { AppMockRenderer } from '../../common/mock'; +import { buildCasesPermissions, createAppMockRenderer } from '../../common/mock'; + +import { ObservableActionsPopoverButton } from './observable_actions_popover_button'; +import type { CaseUI } from '../../../common'; +import type { Observable } from '../../../common/types/domain/observable/v1'; +import { mockCase } from '../../containers/mock'; +import { usePostObservable } from '../../containers/use_post_observables'; +import { useDeleteObservable } from '../../containers/use_delete_observables'; + +jest.mock('../../containers/use_post_observables'); +jest.mock('../../containers/use_delete_observables'); + +describe('ObservableActionsPopoverButton', () => { + let appMockRender: AppMockRenderer; + const addObservable = jest.fn().mockResolvedValue({}); + const deleteObservable = jest.fn().mockResolvedValue({}); + + const caseData: CaseUI = { ...mockCase }; + const observable = { id: '05041f40-ac9f-4192-b367-7e6a5dafcee5' } as Observable; + + beforeEach(() => { + jest + .mocked(usePostObservable) + .mockReturnValue({ mutateAsync: addObservable, isLoading: false } as unknown as ReturnType< + typeof usePostObservable + >); + jest + .mocked(useDeleteObservable) + .mockReturnValue({ mutateAsync: deleteObservable, isLoading: false } as unknown as ReturnType< + typeof useDeleteObservable + >); + jest.clearAllMocks(); + appMockRender = createAppMockRenderer(); + }); + + it('renders observable actions popover button correctly', async () => { + appMockRender.render( + + ); + + expect( + await screen.findByTestId(`cases-observables-actions-popover-button-${observable.id}`) + ).toBeInTheDocument(); + }); + + it('clicking the button opens the popover', async () => { + appMockRender.render( + + ); + + await userEvent.click( + await screen.findByTestId(`cases-observables-actions-popover-button-${observable.id}`) + ); + + expect( + await screen.findByTestId(`cases-observables-popover-${observable.id}`) + ).toBeInTheDocument(); + expect(await screen.findByTestId('cases-observables-delete-button')).toBeInTheDocument(); + expect(await screen.findByTestId('cases-observables-edit-button')).toBeInTheDocument(); + }); + + describe('edit buttton', () => { + it('clicking edit button opens the edit modal', async () => { + appMockRender.render( + + ); + + await userEvent.click( + await screen.findByTestId(`cases-observables-actions-popover-button-${observable.id}`) + ); + + await userEvent.click(await screen.findByTestId('cases-observables-edit-button'), { + pointerEventsCheck: 0, + }); + + expect(await screen.findByTestId('case-observables-edit-modal')).toBeInTheDocument(); + }); + }); + + describe('delete button', () => { + it('clicking delete button opens the confirmation modal', async () => { + appMockRender.render( + + ); + + await userEvent.click( + await screen.findByTestId(`cases-observables-actions-popover-button-${observable.id}`) + ); + + await userEvent.click(await screen.findByTestId('cases-observables-delete-button'), { + pointerEventsCheck: 0, + }); + + expect(await screen.findByTestId('property-actions-confirm-modal')).toBeInTheDocument(); + }); + + it('clicking delete button in the confirmation modal calls deleteObservable with proper params', async () => { + appMockRender.render( + + ); + + await userEvent.click( + await screen.findByTestId(`cases-observables-actions-popover-button-${observable.id}`) + ); + + await userEvent.click(await screen.findByTestId('cases-observables-delete-button'), { + pointerEventsCheck: 0, + }); + + expect(await screen.findByTestId('property-actions-confirm-modal')).toBeInTheDocument(); + + await userEvent.click(await screen.findByTestId('confirmModalConfirmButton')); + + await waitFor(() => { + expect(deleteObservable).toHaveBeenCalledTimes(1); + }); + }); + + it('delete button is not rendered if user has no update permission', async () => { + appMockRender = createAppMockRenderer({ + permissions: buildCasesPermissions({ update: false }), + }); + + appMockRender.render( + + ); + + await userEvent.click( + await screen.findByTestId(`cases-observables-actions-popover-button-${observable.id}`) + ); + + expect(screen.queryByTestId('cases-observables-delete-button')).not.toBeInTheDocument(); + }); + }); +}); diff --git a/x-pack/plugins/cases/public/components/observables/observable_actions_popover_button.tsx b/x-pack/plugins/cases/public/components/observables/observable_actions_popover_button.tsx new file mode 100644 index 0000000000000..1717abcaae469 --- /dev/null +++ b/x-pack/plugins/cases/public/components/observables/observable_actions_popover_button.tsx @@ -0,0 +1,137 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useCallback, useMemo, useState } from 'react'; +import type { + EuiContextMenuPanelDescriptor, + EuiContextMenuPanelItemDescriptor, +} from '@elastic/eui'; +import { EuiButtonIcon, EuiPopover, EuiContextMenu, EuiIcon, EuiTextColor } from '@elastic/eui'; +import type { Observable } from '../../../common/types/domain/observable/v1'; +import * as i18n from './translations'; + +import { useCasesContext } from '../cases_context/use_cases_context'; +import { DeleteAttachmentConfirmationModal } from '../user_actions/delete_attachment_confirmation_modal'; +import { useDeletePropertyAction } from '../user_actions/property_actions/use_delete_property_action'; +import { type CaseUI } from '../../containers/types'; +import { EditObservableModal } from './edit_observable_modal'; +import { useDeleteObservable } from '../../containers/use_delete_observables'; + +export const ObservableActionsPopoverButton: React.FC<{ + caseData: CaseUI; + observable: Observable; +}> = ({ caseData, observable }) => { + const [isPopoverOpen, setIsPopoverOpen] = useState(false); + const { permissions } = useCasesContext(); + const [showEditModal, setShowEditModal] = useState(false); + + const { isLoading: isDeleteLoading, mutateAsync: deleteObservable } = useDeleteObservable( + caseData.id, + observable.id + ); + + const isLoading = isDeleteLoading; + + const { + showDeletionModal, + onModalOpen: onDeletionModalOpen, + onConfirm, + onCancel, + } = useDeletePropertyAction({ + onDelete: () => { + deleteObservable(); + }, + }); + + const tooglePopover = useCallback(() => setIsPopoverOpen((prevValue) => !prevValue), []); + const closePopover = useCallback(() => setIsPopoverOpen(false), []); + + const panels = useMemo((): EuiContextMenuPanelDescriptor[] => { + const mainPanelItems: EuiContextMenuPanelItemDescriptor[] = []; + + const panelsToBuild = [ + { + id: 0, + title: i18n.OBSERVABLE_ACTIONS, + items: mainPanelItems, + }, + ]; + + if (permissions.update) { + mainPanelItems.push({ + name: {i18n.DELETE_OBSERVABLE}, + icon: , + onClick: () => { + closePopover(); + onDeletionModalOpen(); + }, + disabled: isLoading, + 'data-test-subj': 'cases-observables-delete-button', + }); + + mainPanelItems.push({ + name: {i18n.EDIT_OBSERVABLE}, + icon: , + onClick: () => { + setShowEditModal(true); + closePopover(); + }, + disabled: isLoading, + 'data-test-subj': 'cases-observables-edit-button', + }); + } + + return panelsToBuild; + }, [closePopover, isLoading, onDeletionModalOpen, permissions]); + + return ( + <> + + } + isOpen={isPopoverOpen} + closePopover={closePopover} + panelPaddingSize="none" + anchorPosition="downLeft" + > + + + {showDeletionModal && ( + + )} + {showEditModal && ( + setShowEditModal(false)} + /> + )} + > + ); +}; + +ObservableActionsPopoverButton.displayName = 'FileActionsPopoverButton'; diff --git a/x-pack/plugins/cases/public/components/observables/observable_form.test.tsx b/x-pack/plugins/cases/public/components/observables/observable_form.test.tsx new file mode 100644 index 0000000000000..c2bd6b096f47e --- /dev/null +++ b/x-pack/plugins/cases/public/components/observables/observable_form.test.tsx @@ -0,0 +1,30 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { type AppMockRenderer, createAppMockRenderer } from '../../common/mock'; +import { ObservableForm, type ObservableFormProps } from './observable_form'; + +describe('ObservableForm', () => { + let appMock: AppMockRenderer; + const props: ObservableFormProps = { + isLoading: false, + onSubmit: jest.fn(), + onCancel: jest.fn(), + }; + + beforeEach(() => { + appMock = createAppMockRenderer(); + jest.clearAllMocks(); + }); + + it('renders correctly', async () => { + const result = appMock.render(); + + expect(result.getByTestId('save-observable')).toBeInTheDocument(); + }); +}); diff --git a/x-pack/plugins/cases/public/components/observables/observable_form.tsx b/x-pack/plugins/cases/public/components/observables/observable_form.tsx new file mode 100644 index 0000000000000..5e2cb9656b14e --- /dev/null +++ b/x-pack/plugins/cases/public/components/observables/observable_form.tsx @@ -0,0 +1,143 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { type FC, useCallback, useMemo, memo, useState } from 'react'; +import { + useForm, + Form, + UseField, + useFormContext, +} from '@kbn/es-ui-shared-plugin/static/forms/hook_form_lib'; +import { EuiButton, EuiFlexGroup, EuiSpacer } from '@elastic/eui'; + +import { TextAreaField, SelectField } from '@kbn/es-ui-shared-plugin/static/forms/components'; + +import { OBSERVABLE_TYPES_BUILTIN } from '../../../common/constants'; +import type { ObservablePatch, ObservablePost } from '../../../common/types/api'; +import type { Observable } from '../../../common/types/domain'; +import { useGetCaseConfiguration } from '../../containers/configure/use_get_case_configuration'; +import * as i18n from './translations'; +import { fieldsConfig, normalizeValueType } from './fields_config'; +import { getDynamicValueField } from './builder'; + +export interface ObservableFormFieldsProps { + observable?: Observable; +} + +export const ObservableFormFields = memo(({ observable }: ObservableFormFieldsProps) => { + const { data, isLoading } = useGetCaseConfiguration(); + const [selectedTypeKey, setSelectedTypeKey] = useState(observable?.typeKey ?? ''); + + const { validateFields } = useFormContext(); + + const options = useMemo(() => { + return [...OBSERVABLE_TYPES_BUILTIN, ...data.observableTypes].map((observableType) => ({ + value: observableType.key, + text: observableType.label, + })); + }, [data.observableTypes]); + + const handleSelectedTypeChange = useCallback( + (selectedTypeKeyValue: string) => { + validateFields(['value']); + setSelectedTypeKey(selectedTypeKeyValue); + }, + [validateFields] + ); + + // NOTE: dynamic, because of field config changes, depending on the selectedTypeKey + const ValueComponent = useMemo( + () => getDynamicValueField(normalizeValueType(selectedTypeKey)), + [selectedTypeKey] + ); + + return ( + <> + {!observable && ( + + )} + + + > + ); +}); +ObservableFormFields.displayName = 'ObservableFormFields'; + +export interface ObservableFormProps { + isLoading: boolean; + onSubmit: (observable: ObservablePatch | ObservablePost) => Promise; + observable?: Observable; + onCancel: VoidFunction; +} + +export const ObservableForm: FC = ({ + isLoading, + onSubmit, + observable, + onCancel, +}) => { + const { form } = useForm({ + defaultValue: observable ?? { + typeKey: '', + value: '', + description: '', + }, + options: { stripEmptyFields: false }, + }); + + const handleSubmitClick = useCallback( + async (e: React.MouseEvent) => { + const { isValid, data } = await form.submit(e); + + if (isValid) { + return onSubmit({ + ...data, + }); + } + }, + [form, onSubmit] + ); + + return ( + + + + + + {i18n.CANCEL} + + + {observable ? i18n.SAVE_OBSERVABLE : i18n.ADD_OBSERVABLE} + + + + ); +}; + +ObservableForm.displayName = 'ObservableForm'; diff --git a/x-pack/plugins/cases/public/components/observables/observables_table.test.tsx b/x-pack/plugins/cases/public/components/observables/observables_table.test.tsx new file mode 100644 index 0000000000000..bdbefc49240f8 --- /dev/null +++ b/x-pack/plugins/cases/public/components/observables/observables_table.test.tsx @@ -0,0 +1,43 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { type AppMockRenderer, createAppMockRenderer } from '../../common/mock'; +import { mockCase, mockObservables } from '../../containers/mock'; +import { ObservablesTable, type ObservablesTableProps } from './observables_table'; + +describe('ObservablesTable', () => { + let appMock: AppMockRenderer; + const props: ObservablesTableProps = { + caseData: { + ...mockCase, + observables: mockObservables, + }, + isLoading: false, + }; + + beforeEach(() => { + appMock = createAppMockRenderer(); + jest.clearAllMocks(); + }); + + it('renders correctly', async () => { + const result = appMock.render(); + + expect(result.getByTestId('cases-observables-table')).toBeInTheDocument(); + + expect(result.getByText('Showing 2 observables')).toBeInTheDocument(); + expect(result.getByText('Observable type')).toBeInTheDocument(); + expect(result.getByText('Observable value')).toBeInTheDocument(); + }); + + it('renders loading indicator when loading', async () => { + const result = appMock.render(); + expect(result.queryByTestId('cases-observables-table')).not.toBeInTheDocument(); + expect(result.getByTestId('cases-observables-table-loading')).toBeInTheDocument(); + }); +}); diff --git a/x-pack/plugins/cases/public/components/observables/observables_table.tsx b/x-pack/plugins/cases/public/components/observables/observables_table.tsx new file mode 100644 index 0000000000000..423fd31a07ea6 --- /dev/null +++ b/x-pack/plugins/cases/public/components/observables/observables_table.tsx @@ -0,0 +1,120 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import React, { useCallback, useMemo } from 'react'; + +import type { EuiBasicTableColumn } from '@elastic/eui'; + +import { EuiBasicTable, EuiSkeletonText, EuiSpacer, EuiText, EuiEmptyPrompt } from '@elastic/eui'; + +import { OBSERVABLE_TYPES_BUILTIN } from '../../../common/constants'; +import type { Observable, ObservableType } from '../../../common/types/domain'; +import type { CaseUI } from '../../../common/ui'; +import * as i18n from './translations'; +import { AddObservable } from './add_observable'; +import { ObservableActionsPopoverButton } from './observable_actions_popover_button'; +import { useGetCaseConfiguration } from '../../containers/configure/use_get_case_configuration'; + +const getColumns = ( + caseData: CaseUI, + observableTypes: ObservableType[] +): Array> => [ + { + name: i18n.DATE_ADDED, + field: 'createdAt', + 'data-test-subj': 'cases-observables-table-date-added', + dataType: 'date', + }, + { + name: i18n.OBSERVABLE_TYPE, + field: 'typeKey', + 'data-test-subj': 'cases-observables-table-type', + render: (typeKey: string) => + observableTypes.find((observableType) => observableType.key === typeKey)?.label || '-', + }, + { + name: i18n.OBSERVABLE_VALUE, + field: 'value', + 'data-test-subj': 'cases-observables-table-value', + }, + { + name: i18n.OBSERVABLE_ACTIONS, + field: 'actions', + 'data-test-subj': 'cases-observables-table-actions', + width: '120px', + actions: [ + { + name: i18n.OBSERVABLE_ACTIONS, + render: (observable: Observable) => { + return ; + }, + }, + ], + }, +]; + +const EmptyObservablesTable = ({ caseData }: { caseData: CaseUI }) => ( + {i18n.NO_OBSERVABLES}} + data-test-subj="cases-observables-table-empty" + titleSize="xs" + actions={} + /> +); + +EmptyObservablesTable.displayName = 'EmptyObservablesTable'; + +export interface ObservablesTableProps { + caseData: CaseUI; + isLoading: boolean; +} + +export const ObservablesTable = ({ caseData, isLoading }: ObservablesTableProps) => { + const filesTableRowProps = useCallback( + (observable: Observable) => ({ + 'data-test-subj': `cases-observables-table-row-${observable.id}`, + }), + [] + ); + + const { data: currentConfiguration, isLoading: loadingCaseConfigure } = useGetCaseConfiguration(); + + const columns = useMemo( + () => + getColumns(caseData, [...OBSERVABLE_TYPES_BUILTIN, ...currentConfiguration.observableTypes]), + [caseData, currentConfiguration.observableTypes] + ); + + return isLoading || loadingCaseConfigure ? ( + <> + + + > + ) : ( + <> + {caseData.observables.length > 0 && ( + <> + + + {i18n.SHOWING_OBSERVABLES(caseData.observables.length)} + + > + )} + + } + rowProps={filesTableRowProps} + /> + > + ); +}; + +ObservablesTable.displayName = 'ObservablesTable'; diff --git a/x-pack/plugins/cases/public/components/observables/observables_utility_bar.test.tsx b/x-pack/plugins/cases/public/components/observables/observables_utility_bar.test.tsx new file mode 100644 index 0000000000000..9c35939785a0d --- /dev/null +++ b/x-pack/plugins/cases/public/components/observables/observables_utility_bar.test.tsx @@ -0,0 +1,30 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { type AppMockRenderer, createAppMockRenderer } from '../../common/mock'; +import type { AddObservableProps } from './add_observable'; +import { mockCase } from '../../containers/mock'; +import { ObservablesUtilityBar } from './observables_utility_bar'; + +describe('ObservablesUtilityBar', () => { + let appMock: AppMockRenderer; + const props: AddObservableProps = { + caseData: mockCase, + }; + + beforeEach(() => { + appMock = createAppMockRenderer(); + jest.clearAllMocks(); + }); + + it('renders correctly', async () => { + const result = appMock.render(); + + expect(result.getByTestId('cases-observables-add')).toBeInTheDocument(); + }); +}); diff --git a/x-pack/plugins/cases/public/components/observables/observables_utility_bar.tsx b/x-pack/plugins/cases/public/components/observables/observables_utility_bar.tsx new file mode 100644 index 0000000000000..3888b1d31c1a0 --- /dev/null +++ b/x-pack/plugins/cases/public/components/observables/observables_utility_bar.tsx @@ -0,0 +1,26 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import React from 'react'; + +import { EuiFlexGroup } from '@elastic/eui'; + +import type { CaseUI } from '../../../common'; +import { AddObservable } from './add_observable'; + +interface ObservablesUtilityBarProps { + caseData: CaseUI; +} + +export const ObservablesUtilityBar = ({ caseData }: ObservablesUtilityBarProps) => { + return ( + + + + ); +}; + +ObservablesUtilityBar.displayName = 'ObservablesUtilityBar'; diff --git a/x-pack/plugins/cases/public/components/observables/translations.tsx b/x-pack/plugins/cases/public/components/observables/translations.tsx new file mode 100644 index 0000000000000..5eb77528e52a5 --- /dev/null +++ b/x-pack/plugins/cases/public/components/observables/translations.tsx @@ -0,0 +1,124 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; + +export const ADD_OBSERVABLE = i18n.translate('xpack.cases.caseView.observables.addObservable', { + defaultMessage: 'Add observable', +}); + +export const EDIT_OBSERVABLE = i18n.translate('xpack.cases.caseView.observables.edit', { + defaultMessage: 'Edit observable', +}); + +export const NO_OBSERVABLES = i18n.translate( + 'xpack.cases.caseView.observables.noObservablesAvailable', + { + defaultMessage: 'No observables available', + } +); + +export const SHOWING_OBSERVABLES = (totalObservables: number) => + i18n.translate('xpack.cases.caseView.observables.showingObservablesTitle', { + values: { totalObservables }, + defaultMessage: + 'Showing {totalObservables} {totalObservables, plural, =1 {observable} other {observables}}', + }); + +export const OBSERVABLES_TABLE = i18n.translate( + 'xpack.cases.caseView.observables.observablesTable', + { + defaultMessage: 'Observables table', + } +); + +export const SEARCH_PLACEHOLDER = i18n.translate( + 'xpack.cases.caseView.observables.searchPlaceholder', + { + defaultMessage: 'Search observables', + } +); + +export const DATE_ADDED = i18n.translate('xpack.cases.caseView.observables.dateAdded', { + defaultMessage: 'Date added', +}); + +export const OBSERVABLE_TYPE = i18n.translate('xpack.cases.caseView.observables.type', { + defaultMessage: 'Observable type', +}); + +export const OBSERVABLE_VALUE = i18n.translate('xpack.cases.caseView.observables.value', { + defaultMessage: 'Observable value', +}); + +export const OBSERVABLE_ACTIONS = i18n.translate('xpack.cases.caseView.observables.actions', { + defaultMessage: 'Actions', +}); + +export const DELETE_OBSERVABLE = i18n.translate('xpack.cases.caseView.observables.delete', { + defaultMessage: 'Delete observable', +}); + +export const CANCEL = i18n.translate('xpack.cases.caseView.observables.cancel', { + defaultMessage: 'Cancel', +}); + +export const VALUE_PLACEHOLDER = i18n.translate( + 'xpack.cases.caseView.observables.valuePlaceholder', + { + defaultMessage: 'Observable value', + } +); + +export const DELETE_OBSERVABLE_CONFIRM = i18n.translate( + 'xpack.cases.caseView.observables.deleteConfirmation', + { + defaultMessage: 'Are you sure you want to delete this observable?', + } +); + +export const SAVE_OBSERVABLE = i18n.translate('xpack.cases.caseView.observables.save', { + defaultMessage: 'Save observable', +}); + +export const ADDED = (type: string, value: string) => + i18n.translate('xpack.cases.caseView.observables.added', { + defaultMessage: 'observable value "{value}" of type {type} added', + values: { type, value }, + }); + +export const PLATINUM_NOTICE = i18n.translate('xpack.cases.caseView.observables.platinumNotice', { + defaultMessage: + 'In order to assign observables to cases, you must be subscribed to an Elastic Platinum license', +}); + +export const REQUIRED_VALUE = i18n.translate('xpack.cases.caseView.observables.requiredValue', { + defaultMessage: 'Value is required', +}); + +export const INVALID_VALUE = i18n.translate('xpack.cases.caseView.observables.invalidValue', { + defaultMessage: 'Value is invalid', +}); + +export const INVALID_EMAIL = i18n.translate('xpack.cases.caseView.observables.invalidEmail', { + defaultMessage: 'Value should be a valid email', +}); + +export const FIELD_LABEL_VALUE = i18n.translate('xpack.cases.caseView.observables.labelValue', { + defaultMessage: 'Value', +}); + +export const FIELD_LABEL_DESCRIPTION = i18n.translate( + 'xpack.cases.caseView.observables.labelDescription', + { + defaultMessage: 'Description', + } +); + +export const FIELD_LABEL_TYPE = i18n.translate('xpack.cases.caseView.observables.labelType', { + defaultMessage: 'Type', +}); diff --git a/x-pack/plugins/cases/public/components/similar_cases/table.test.tsx b/x-pack/plugins/cases/public/components/similar_cases/table.test.tsx new file mode 100644 index 0000000000000..2d3de8b54ae93 --- /dev/null +++ b/x-pack/plugins/cases/public/components/similar_cases/table.test.tsx @@ -0,0 +1,38 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { type AppMockRenderer, createAppMockRenderer } from '../../common/mock'; +import { SimilarCasesTable, type SimilarCasesTableProps } from './table'; +import { mockCase, mockObservables } from '../../containers/mock'; + +describe('SimilarCasesTable', () => { + let appMock: AppMockRenderer; + const props: SimilarCasesTableProps = { + cases: [{ ...mockCase, similarities: { observables: mockObservables } }], + isLoading: false, + onChange: jest.fn(), + pagination: { pageIndex: 0, totalItemCount: 1 }, + }; + + beforeEach(() => { + appMock = createAppMockRenderer(); + jest.clearAllMocks(); + }); + + it('renders correctly', async () => { + const result = appMock.render(); + + expect(result.getByTestId('similar-cases-table')).toBeInTheDocument(); + }); + + it('renders loading indicator when loading', async () => { + const result = appMock.render(); + expect(result.queryByTestId('similar-cases-table')).not.toBeInTheDocument(); + expect(result.getByTestId('similar-cases-table-loading')).toBeInTheDocument(); + }); +}); diff --git a/x-pack/plugins/cases/public/components/similar_cases/table.tsx b/x-pack/plugins/cases/public/components/similar_cases/table.tsx new file mode 100644 index 0000000000000..6ceb299bc1501 --- /dev/null +++ b/x-pack/plugins/cases/public/components/similar_cases/table.tsx @@ -0,0 +1,72 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { FunctionComponent } from 'react'; +import React, { useCallback } from 'react'; +import { css } from '@emotion/react'; +import type { EuiBasicTableProps, Pagination } from '@elastic/eui'; +import { EuiEmptyPrompt, EuiSkeletonText, EuiBasicTable, useEuiTheme } from '@elastic/eui'; + +import type { SimilarCaseUI } from '../../../common/ui/types'; + +import * as i18n from './translations'; +import { useSimilarCasesColumns } from './use_similar_cases_columns'; + +export interface SimilarCasesTableProps { + cases: SimilarCaseUI[]; + isLoading: boolean; + onChange: EuiBasicTableProps['onChange']; + pagination: Pagination; +} + +export const SimilarCasesTable: FunctionComponent = ({ + cases, + isLoading, + onChange, + pagination, +}) => { + const { euiTheme } = useEuiTheme(); + + const { columns } = useSimilarCasesColumns(); + + const tableRowProps = useCallback( + (theCase: SimilarCaseUI) => ({ + 'data-test-subj': `similar-cases-table-row-${theCase.id}`, + }), + [] + ); + + return isLoading ? ( + + + + ) : ( + <> + {i18n.NO_CASES}} + titleSize="xs" + body={i18n.NO_CASES_BODY} + /> + } + rowProps={tableRowProps} + /> + > + ); +}; +SimilarCasesTable.displayName = 'SimilarCasesTable'; diff --git a/x-pack/plugins/cases/public/components/similar_cases/translations.ts b/x-pack/plugins/cases/public/components/similar_cases/translations.ts new file mode 100644 index 0000000000000..3b0f1179d3877 --- /dev/null +++ b/x-pack/plugins/cases/public/components/similar_cases/translations.ts @@ -0,0 +1,28 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; + +export * from '../../common/translations'; +export * from '../user_profiles/translations'; +export { + OPEN as STATUS_OPEN, + IN_PROGRESS as STATUS_IN_PROGRESS, + CLOSED as STATUS_CLOSED, +} from '@kbn/cases-components/src/status/translations'; + +export const NO_CASES = i18n.translate('xpack.cases.similarCaseTable.noCases.title', { + defaultMessage: 'No cases to display', +}); + +export const NO_CASES_BODY = i18n.translate('xpack.cases.similarCaseTable.noCases.readonly.body', { + defaultMessage: 'Edit your filter settings.', +}); + +export const SIMILARITY_REASON = i18n.translate('xpack.cases.similarCaseTable.similarities.title', { + defaultMessage: 'Similar observable values', +}); diff --git a/x-pack/plugins/cases/public/components/similar_cases/use_similar_cases_columns.tsx b/x-pack/plugins/cases/public/components/similar_cases/use_similar_cases_columns.tsx new file mode 100644 index 0000000000000..54ad38363f14e --- /dev/null +++ b/x-pack/plugins/cases/public/components/similar_cases/use_similar_cases_columns.tsx @@ -0,0 +1,191 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license 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 { css } from '@emotion/react'; +import type { + EuiTableActionsColumnType, + EuiTableComputedColumnType, + EuiTableFieldDataColumnType, +} from '@elastic/eui'; +import { EuiBadgeGroup, EuiBadge, EuiHealth, EuiToolTip } from '@elastic/eui'; +import { Status } from '@kbn/cases-components/src/status/status'; + +import { CaseSeverity } from '../../../common/types/domain'; +import type { CaseUI, SimilarCaseUI } from '../../../common/ui/types'; +import { getEmptyCellValue } from '../empty_value'; +import { CaseDetailsLink } from '../links'; +import { TruncatedText } from '../truncated_text'; +import { severities } from '../severity/config'; +import { useCasesColumnsConfiguration } from '../all_cases/use_cases_columns_configuration'; +import * as i18n from './translations'; + +type SimilarCasesColumns = + | EuiTableActionsColumnType + | EuiTableComputedColumnType + | EuiTableFieldDataColumnType; + +const LINE_CLAMP = 3; +const getLineClampedCss = css` + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: ${LINE_CLAMP}; + -webkit-box-orient: vertical; + overflow: hidden; + word-break: normal; +`; + +const SIMILARITIES_FIELD = 'similarities' as const; + +export interface UseSimilarCasesColumnsReturnValue { + columns: SimilarCasesColumns[]; + rowHeader: string; +} + +export const useSimilarCasesColumns = (): UseSimilarCasesColumnsReturnValue => { + const casesColumnsConfig = useCasesColumnsConfiguration(false); + const columns: SimilarCasesColumns[] = useMemo( + () => [ + { + field: casesColumnsConfig.title.field, + name: casesColumnsConfig.title.name, + sortable: false, + render: (title: string, theCase: SimilarCaseUI) => { + if (theCase.id != null && theCase.title != null) { + const caseDetailsLinkComponent = ( + + + + ); + + return caseDetailsLinkComponent; + } + return getEmptyCellValue(); + }, + width: '20%', + }, + { + field: casesColumnsConfig.tags.field, + name: casesColumnsConfig.tags.name, + render: (tags: CaseUI['tags']) => { + if (tags != null && tags.length > 0) { + const clampedBadges = ( + + {tags.map((tag: string, i: number) => ( + + {tag} + + ))} + + ); + + const unclampedBadges = ( + + {tags.map((tag: string, i: number) => ( + + {tag} + + ))} + + ); + + return ( + + {clampedBadges} + + ); + } + return getEmptyCellValue(); + }, + width: '12%', + }, + { + field: casesColumnsConfig.category.field, + name: casesColumnsConfig.category.name, + sortable: false, + render: (category: CaseUI['category']) => { + if (category != null) { + return ( + + {category} + + ); + } + return getEmptyCellValue(); + }, + width: '120px', + }, + { + field: casesColumnsConfig.status.field, + name: casesColumnsConfig.status.name, + sortable: false, + render: (status: CaseUI['status']) => { + if (status != null) { + return ; + } + + return getEmptyCellValue(); + }, + width: '110px', + }, + { + field: casesColumnsConfig.severity.field, + name: casesColumnsConfig.severity.name, + sortable: false, + render: (severity: CaseUI['severity']) => { + if (severity != null) { + const severityData = severities[severity ?? CaseSeverity.LOW]; + return ( + + {severityData.label} + + ); + } + return getEmptyCellValue(); + }, + width: '90px', + }, + { + field: SIMILARITIES_FIELD, + name: i18n.SIMILARITY_REASON, + sortable: false, + render: (similarities: SimilarCaseUI['similarities'], theCase: SimilarCaseUI) => { + if (theCase.id != null && theCase.title != null) { + return similarities.observables.map((similarity) => similarity.value).join(', '); + } + return getEmptyCellValue(); + }, + width: '20%', + }, + ], + [casesColumnsConfig] + ); + + return { columns, rowHeader: casesColumnsConfig.title.field }; +}; diff --git a/x-pack/plugins/cases/public/components/templates/form.test.tsx b/x-pack/plugins/cases/public/components/templates/form.test.tsx index 349457c2be98f..60fb63c64e8b3 100644 --- a/x-pack/plugins/cases/public/components/templates/form.test.tsx +++ b/x-pack/plugins/cases/public/components/templates/form.test.tsx @@ -57,6 +57,7 @@ describe('TemplateForm', () => { version: '', id: '', owner: mockedTestProvidersOwner[0], + observableTypes: [], }, onChange: jest.fn(), initialValue: null, @@ -343,6 +344,7 @@ describe('TemplateForm', () => { description: undefined, name: 'Template 1', tags: [], + observables: [], }, isValid: true, }) diff --git a/x-pack/plugins/cases/public/components/templates/form_fields.test.tsx b/x-pack/plugins/cases/public/components/templates/form_fields.test.tsx index 48c6f956ccc7c..b1f08415acdec 100644 --- a/x-pack/plugins/cases/public/components/templates/form_fields.test.tsx +++ b/x-pack/plugins/cases/public/components/templates/form_fields.test.tsx @@ -43,6 +43,7 @@ describe('form fields', () => { version: '', id: '', owner: mockedTestProvidersOwner[0], + observableTypes: [], }, }; diff --git a/x-pack/plugins/cases/public/components/user_actions/comment/comment.tsx b/x-pack/plugins/cases/public/components/user_actions/comment/comment.tsx index 36dd0c5325e48..48d00f075c81f 100644 --- a/x-pack/plugins/cases/public/components/user_actions/comment/comment.tsx +++ b/x-pack/plugins/cases/public/components/user_actions/comment/comment.tsx @@ -10,7 +10,7 @@ import type { EuiCommentProps } from '@elastic/eui'; import type { SnakeToCamelCase } from '../../../../common/types'; import type { CommentUserAction } from '../../../../common/types/domain'; import { UserActionActions, AttachmentType } from '../../../../common/types/domain'; -import type { AttachmentTypeRegistry } from '../../../../common/registry'; +import { type AttachmentTypeRegistry } from '../../../../common/registry'; import type { UserActionBuilder, UserActionBuilderArgs } from '../types'; import { createCommonUpdateUserActionBuilder } from '../common'; import type { AttachmentUI } from '../../../containers/types'; @@ -242,6 +242,7 @@ const getCreateCommentUserAction = ({ }); return persistableBuilder.build(); + default: return []; } diff --git a/x-pack/plugins/cases/public/containers/__mocks__/api.ts b/x-pack/plugins/cases/public/containers/__mocks__/api.ts index 2e792fbd134cc..ab12561e2c733 100644 --- a/x-pack/plugins/cases/public/containers/__mocks__/api.ts +++ b/x-pack/plugins/cases/public/containers/__mocks__/api.ts @@ -30,6 +30,7 @@ import { getCaseUserActionsStatsResponse, getCaseUsersMockResponse, customFieldsMock, + allCasesSnake, } from '../mock'; import type { CaseConnectors, @@ -187,3 +188,9 @@ export const replaceCustomField = async ({ customFieldValue: string | boolean | null; caseVersion: string; }): Promise => Promise.resolve(customFieldsMock[0]); + +export const getSimilarCases = async () => allCasesSnake; + +export const postObservable = jest.fn(); +export const patchObservable = jest.fn(); +export const deleteObservable = jest.fn(); diff --git a/x-pack/plugins/cases/public/containers/api.test.tsx b/x-pack/plugins/cases/public/containers/api.test.tsx index d72eece49e1e3..2934c4d1f3432 100644 --- a/x-pack/plugins/cases/public/containers/api.test.tsx +++ b/x-pack/plugins/cases/public/containers/api.test.tsx @@ -40,6 +40,10 @@ import { deleteFileAttachments, getCategories, replaceCustomField, + postObservable, + getSimilarCases, + patchObservable, + deleteObservable, } from './api'; import { @@ -63,6 +67,9 @@ import { getCaseUserActionsStatsResponse, basicFileMock, customFieldsMock, + mockCase, + similarCases, + similarCasesSnake, } from './mock'; import { DEFAULT_FILTER_OPTIONS, DEFAULT_QUERY_PARAMS } from './constants'; @@ -1154,4 +1161,164 @@ describe('Cases API', () => { expect(resp).toEqual(customFieldsMock[0]); }); }); + + describe('getSimilarCases', () => { + beforeEach(() => { + fetchMock.mockClear(); + fetchMock.mockResolvedValue(similarCasesSnake); + }); + + it('should be called with correct url, method, signal', async () => { + await getSimilarCases({ + caseId: mockCase.id, + signal: abortCtrl.signal, + page: 0, + perPage: 10, + }); + expect(fetchMock).toHaveBeenCalledWith(`${CASES_INTERNAL_URL}/${mockCase.id}/_similar`, { + method: 'POST', + body: JSON.stringify({ + page: 0, + perPage: 10, + }), + signal: abortCtrl.signal, + }); + }); + + it('should return correct response', async () => { + const resp = await getSimilarCases({ + caseId: mockCase.id, + signal: abortCtrl.signal, + page: 1, + perPage: 10, + }); + expect(resp).toEqual(similarCases); + }); + }); + + describe('postObservable', () => { + beforeEach(() => { + fetchMock.mockClear(); + fetchMock.mockResolvedValue(basicCaseSnake); + }); + + it('should be called with correct check url, method, signal', async () => { + await postObservable( + { + observable: { + typeKey: '18b62f19-8c60-415e-8a08-706d1078c556', + value: 'test value', + description: '', + }, + }, + mockCase.id, + abortCtrl.signal + ); + + expect(fetchMock).toHaveBeenCalledWith(`${CASES_INTERNAL_URL}/${mockCase.id}/observables`, { + method: 'POST', + body: JSON.stringify({ + observable: { + typeKey: '18b62f19-8c60-415e-8a08-706d1078c556', + value: 'test value', + description: '', + }, + }), + signal: abortCtrl.signal, + }); + }); + + it('should return correct response', async () => { + const resp = await postObservable( + { + observable: { + typeKey: '18b62f19-8c60-415e-8a08-706d1078c556', + value: 'test value', + description: '', + }, + }, + mockCase.id, + abortCtrl.signal + ); + expect(resp).toEqual(basicCase); + }); + }); + + describe('patchObservable', () => { + const observableId = 'afa44220-862c-4a21-b574-351ab4d0a732'; + + beforeEach(() => { + fetchMock.mockClear(); + fetchMock.mockResolvedValue(basicCaseSnake); + }); + + it('should be called with correct check url, method, signal', async () => { + await patchObservable( + { + observable: { + value: 'test value', + description: '', + }, + }, + mockCase.id, + observableId, + abortCtrl.signal + ); + + expect(fetchMock).toHaveBeenCalledWith( + `${CASES_INTERNAL_URL}/${mockCase.id}/observables/${observableId}`, + { + method: 'PATCH', + body: JSON.stringify({ + observable: { + value: 'test value', + description: '', + }, + }), + signal: abortCtrl.signal, + } + ); + }); + + it('should return correct response', async () => { + const resp = await patchObservable( + { + observable: { + value: 'test value', + description: '', + }, + }, + mockCase.id, + observableId, + abortCtrl.signal + ); + expect(resp).toEqual(basicCase); + }); + }); + + describe('deleteObservable', () => { + const observableId = 'afa44220-862c-4a21-b574-351ab4d0a732'; + + beforeEach(() => { + fetchMock.mockClear(); + fetchMock.mockResolvedValue(basicCaseSnake); + }); + + it('should be called with correct check url, method, signal', async () => { + await deleteObservable(mockCase.id, observableId, abortCtrl.signal); + + expect(fetchMock).toHaveBeenCalledWith( + `${CASES_INTERNAL_URL}/${mockCase.id}/observables/${observableId}`, + { + method: 'DELETE', + signal: abortCtrl.signal, + } + ); + }); + + it('should return correct response', async () => { + const resp = await deleteObservable(mockCase.id, observableId, abortCtrl.signal); + expect(resp).toEqual(undefined); + }); + }); }); diff --git a/x-pack/plugins/cases/public/containers/api.ts b/x-pack/plugins/cases/public/containers/api.ts index 020a4629552f4..4216421892b8c 100644 --- a/x-pack/plugins/cases/public/containers/api.ts +++ b/x-pack/plugins/cases/public/containers/api.ts @@ -22,6 +22,9 @@ import type { UserActionFindResponse, SingleCaseMetricsResponse, CustomFieldPutRequest, + CasesSimilarResponse, + AddObservableRequest, + UpdateObservableRequest, } from '../../common/types/api'; import type { CaseConnectors, @@ -36,6 +39,8 @@ import type { CasesUI, FilterOptions, CaseUICustomField, + SimilarCasesProps, + CasesSimilarResponseUI, } from '../../common/ui/types'; import { SortFieldCase } from '../../common/ui/types'; import { @@ -50,6 +55,10 @@ import { getCaseUsersUrl, getCaseUserActionStatsUrl, getCustomFieldReplaceUrl, + getCaseCreateObservableUrl, + getCaseUpdateObservableUrl, + getCaseDeleteObservableUrl, + getCaseSimilarCasesUrl, } from '../../common/api'; import { CASE_REPORTERS_URL, @@ -71,6 +80,7 @@ import { convertCaseToCamelCase, convertCasesToCamelCase, convertCaseResolveToCamelCase, + convertSimilarCasesToCamel, } from '../api/utils'; import type { @@ -93,7 +103,7 @@ import { decodeCaseUserActionStatsResponse, constructCustomFieldsFilter, } from './utils'; -import { decodeCasesFindResponse } from '../api/decoders'; +import { decodeCasesFindResponse, decodeCasesSimilarResponse } from '../api/decoders'; export const getCase = async ( caseId: string, @@ -608,3 +618,62 @@ export const getCaseUsers = async ({ signal, }); }; + +export const postObservable = async ( + request: AddObservableRequest, + caseId: string, + signal?: AbortSignal +): Promise => { + const response = await KibanaServices.get().http.fetch(getCaseCreateObservableUrl(caseId), { + method: 'POST', + body: JSON.stringify({ observable: request.observable }), + signal, + }); + return convertCaseToCamelCase(decodeCaseResponse(response)); +}; + +export const patchObservable = async ( + request: UpdateObservableRequest, + caseId: string, + observableId: string, + signal?: AbortSignal +): Promise => { + const response = await KibanaServices.get().http.fetch( + getCaseUpdateObservableUrl(caseId, observableId), + { + method: 'PATCH', + body: JSON.stringify({ observable: request.observable }), + signal, + } + ); + return convertCaseToCamelCase(decodeCaseResponse(response)); +}; + +export const deleteObservable = async ( + caseId: string, + observableId: string, + signal?: AbortSignal +): Promise => { + await KibanaServices.get().http.fetch(getCaseDeleteObservableUrl(caseId, observableId), { + method: 'DELETE', + signal, + }); +}; + +export const getSimilarCases = async ({ + caseId, + signal, + perPage, + page, +}: SimilarCasesProps): Promise => { + const response = await KibanaServices.get().http.fetch( + getCaseSimilarCasesUrl(caseId), + { + method: 'POST', + body: JSON.stringify({ page, perPage }), + signal, + } + ); + + return convertSimilarCasesToCamel(decodeCasesSimilarResponse(response)); +}; diff --git a/x-pack/plugins/cases/public/containers/configure/api.ts b/x-pack/plugins/cases/public/containers/configure/api.ts index b67e8f53f2268..4fb6149e3cb2b 100644 --- a/x-pack/plugins/cases/public/containers/configure/api.ts +++ b/x-pack/plugins/cases/public/containers/configure/api.ts @@ -115,8 +115,27 @@ export const fetchActionTypes = async ({ signal }: ApiProps): Promise ): CasesConfigurationUI => { - const { id, version, mappings, customFields, templates, closureType, connector, owner } = - configuration; - - return { id, version, mappings, customFields, templates, closureType, connector, owner }; + const { + id, + version, + mappings, + customFields, + templates, + closureType, + connector, + owner, + observableTypes, + } = configuration; + + return { + id, + version, + mappings, + customFields, + templates, + closureType, + connector, + owner, + observableTypes, + }; }; diff --git a/x-pack/plugins/cases/public/containers/configure/mock.ts b/x-pack/plugins/cases/public/containers/configure/mock.ts index 1124283e5aa94..b699fe753656e 100644 --- a/x-pack/plugins/cases/public/containers/configure/mock.ts +++ b/x-pack/plugins/cases/public/containers/configure/mock.ts @@ -11,7 +11,11 @@ import { ConnectorTypes } from '../../../common/types/domain'; import { SECURITY_SOLUTION_OWNER } from '../../../common/constants'; import type { CaseConnectorMapping } from './types'; import type { CasesConfigurationUI } from '../types'; -import { customFieldsConfigurationMock, templatesConfigurationMock } from '../mock'; +import { + customFieldsConfigurationMock, + observableTypesMock, + templatesConfigurationMock, +} from '../mock'; export const mappings: CaseConnectorMapping[] = [ { @@ -50,6 +54,7 @@ export const caseConfigurationResponseMock: Configuration = { version: 'WzHJ12', customFields: customFieldsConfigurationMock, templates: templatesConfigurationMock, + observableTypes: observableTypesMock, }; export const caseConfigurationRequest: ConfigurationRequest = { @@ -77,4 +82,5 @@ export const casesConfigurationsMock: CasesConfigurationUI = { customFields: customFieldsConfigurationMock, templates: templatesConfigurationMock, owner: 'securitySolution', + observableTypes: observableTypesMock, }; diff --git a/x-pack/plugins/cases/public/containers/configure/use_get_all_case_configurations.test.ts b/x-pack/plugins/cases/public/containers/configure/use_get_all_case_configurations.test.ts index 52d4df20e5401..395675d37cb87 100644 --- a/x-pack/plugins/cases/public/containers/configure/use_get_all_case_configurations.test.ts +++ b/x-pack/plugins/cases/public/containers/configure/use_get_all_case_configurations.test.ts @@ -46,6 +46,7 @@ describe('Use get all case configurations hook', () => { mappings: [], version: '', owner: '', + observableTypes: [], }, ]); @@ -77,6 +78,7 @@ describe('Use get all case configurations hook', () => { mappings: [], version: '', owner: '', + observableTypes: [], }, ]) ); diff --git a/x-pack/plugins/cases/public/containers/configure/use_persist_configuration.test.tsx b/x-pack/plugins/cases/public/containers/configure/use_persist_configuration.test.tsx index 04b266478f667..a8929a32212f5 100644 --- a/x-pack/plugins/cases/public/containers/configure/use_persist_configuration.test.tsx +++ b/x-pack/plugins/cases/public/containers/configure/use_persist_configuration.test.tsx @@ -14,7 +14,11 @@ import type { AppMockRenderer } from '../../common/mock'; import { createAppMockRenderer } from '../../common/mock'; import { ConnectorTypes } from '../../../common'; import { casesQueriesKeys } from '../constants'; -import { customFieldsConfigurationMock, templatesConfigurationMock } from '../mock'; +import { + customFieldsConfigurationMock, + observableTypesMock, + templatesConfigurationMock, +} from '../mock'; jest.mock('./api'); jest.mock('../../common/lib/kibana'); @@ -42,6 +46,7 @@ describe('usePersistConfiguration', () => { templates: [], version: '', id: '', + observableTypes: observableTypesMock, }; let appMockRender: AppMockRenderer; @@ -70,6 +75,7 @@ describe('usePersistConfiguration', () => { customFields: [], owner: 'securitySolution', templates: [], + observableTypes: observableTypesMock, }); }); @@ -95,6 +101,7 @@ describe('usePersistConfiguration', () => { customFields: [], templates: [], owner: 'securitySolution', + observableTypes: observableTypesMock, }); }); @@ -125,6 +132,7 @@ describe('usePersistConfiguration', () => { customFields: customFieldsConfigurationMock, templates: templatesConfigurationMock, owner: 'securitySolution', + observableTypes: observableTypesMock, }); }); }); @@ -148,6 +156,7 @@ describe('usePersistConfiguration', () => { customFields: [], templates: [], version: 'test-version', + observableTypes: observableTypesMock, }); }); @@ -171,6 +180,37 @@ describe('usePersistConfiguration', () => { result.current.mutate({ ...newRequest, id: 'test-id', version: 'test-version' }); }); + await waitFor(() => { + expect(spyPatch).toHaveBeenCalledWith('test-id', { + closure_type: 'close-by-user', + connector: { fields: null, id: 'none', name: 'none', type: '.none' }, + customFields: customFieldsConfigurationMock, + templates: templatesConfigurationMock, + version: 'test-version', + observableTypes: observableTypesMock, + }); + }); + }); + + it('calls patchCaseConfigure without observableTypes if it is not specified', async () => { + const spyPatch = jest.spyOn(api, 'patchCaseConfigure'); + + const { result } = renderHook(() => usePersistConfiguration(), { + wrapper: appMockRender.AppWrapper, + }); + + const { observableTypes, ...rest } = request; + + const newRequest = { + ...rest, + customFields: customFieldsConfigurationMock, + templates: templatesConfigurationMock, + }; + + act(() => { + result.current.mutate({ ...newRequest, id: 'test-id', version: 'test-version' }); + }); + await waitFor(() => { expect(spyPatch).toHaveBeenCalledWith('test-id', { closure_type: 'close-by-user', diff --git a/x-pack/plugins/cases/public/containers/configure/use_persist_configuration.tsx b/x-pack/plugins/cases/public/containers/configure/use_persist_configuration.tsx index dc9bed95d1df8..b2943c9f0b128 100644 --- a/x-pack/plugins/cases/public/containers/configure/use_persist_configuration.tsx +++ b/x-pack/plugins/cases/public/containers/configure/use_persist_configuration.tsx @@ -27,7 +27,15 @@ export const usePersistConfiguration = () => { const { showErrorToast, showSuccessToast } = useCasesToast(); return useMutation( - ({ id, version, closureType, customFields, templates, connector }: Request) => { + ({ + id, + version, + closureType, + customFields, + templates, + connector, + observableTypes, + }: Request) => { if (isEmpty(id) || isEmpty(version)) { return postCaseConfigure({ closure_type: closureType, @@ -35,6 +43,7 @@ export const usePersistConfiguration = () => { customFields: customFields ?? [], templates: templates ?? [], owner: owner[0], + observableTypes, }); } @@ -44,6 +53,7 @@ export const usePersistConfiguration = () => { connector, customFields: customFields ?? [], templates: templates ?? [], + observableTypes, }); }, { diff --git a/x-pack/plugins/cases/public/containers/configure/utils.ts b/x-pack/plugins/cases/public/containers/configure/utils.ts index e4416beb5ce57..91d06721f65af 100644 --- a/x-pack/plugins/cases/public/containers/configure/utils.ts +++ b/x-pack/plugins/cases/public/containers/configure/utils.ts @@ -21,6 +21,7 @@ export const initialConfiguration: CasesConfigurationUI = { version: '', id: '', owner: '', + observableTypes: [], }; export const getConfigurationByOwner = ({ diff --git a/x-pack/plugins/cases/public/containers/constants.ts b/x-pack/plugins/cases/public/containers/constants.ts index 0f57a729bc58b..b89f261fdd46c 100644 --- a/x-pack/plugins/cases/public/containers/constants.ts +++ b/x-pack/plugins/cases/public/containers/constants.ts @@ -23,6 +23,8 @@ export const casesQueriesKeys = { casesMetrics: () => [...casesQueriesKeys.casesList(), 'metrics'] as const, casesStatuses: () => [...casesQueriesKeys.casesList(), 'statuses'] as const, cases: (params: unknown) => [...casesQueriesKeys.casesList(), 'all-cases', params] as const, + similarCases: (id: string, params: unknown) => + [...casesQueriesKeys.caseView(), id, 'similar', params] as const, caseView: () => [...casesQueriesKeys.all, 'case'] as const, case: (id: string) => [...casesQueriesKeys.caseView(), id] as const, caseFiles: (id: string, params: unknown) => @@ -64,6 +66,9 @@ export const casesMutationsKeys = { bulkCreateAttachments: ['bulk-create-attachments'] as const, persistCaseConfiguration: ['persist-case-configuration'] as const, replaceCustomField: ['replace-custom-field'] as const, + postObservable: ['post-observable'] as const, + patchObservable: ['patch-observable'] as const, + deleteObservable: ['delete-observable'] as const, }; const DEFAULT_SEARCH_FIELDS = ['title', 'description']; diff --git a/x-pack/plugins/cases/public/containers/mock.ts b/x-pack/plugins/cases/public/containers/mock.ts index 1ed160cf1847b..e45fd7c10bd43 100644 --- a/x-pack/plugins/cases/public/containers/mock.ts +++ b/x-pack/plugins/cases/public/containers/mock.ts @@ -16,6 +16,7 @@ import type { Cases, CaseConnector, Attachment, + ObservableType, } from '../../common/types/domain'; import { CaseSeverity, @@ -46,9 +47,11 @@ import type { CaseUICustomField, CasesConfigurationUICustomField, CasesConfigurationUITemplate, + CasesSimilarResponseUI, + ObservableUI, } from '../../common/ui/types'; import { CaseMetricsFeature } from '../../common/types/api'; -import { SECURITY_SOLUTION_OWNER } from '../../common/constants'; +import { OBSERVABLE_TYPE_IPV4, SECURITY_SOLUTION_OWNER } from '../../common/constants'; import type { SnakeToCamelCase } from '../../common/types'; import { covertToSnakeCase } from './utils'; import type { @@ -56,7 +59,11 @@ import type { AttachmentViewObject, PersistableStateAttachmentType, } from '../client/attachment_framework/types'; -import type { CasesFindResponse, UserActionWithResponse } from '../../common/types/api'; +import type { + CasesFindResponse, + CasesSimilarResponse, + UserActionWithResponse, +} from '../../common/types/api'; export { connectorsMock } from '../common/mock/connectors'; export const basicCaseId = 'basic-case-id'; @@ -248,6 +255,7 @@ export const basicCase: CaseUI = { assignees: [{ uid: 'u_J41Oh6L9ki-Vo2tOogS8WRTENzhHurGtRc87NgEAlkc_0' }], category: null, customFields: [], + observables: [], }; export const basicFileMock: FileJSON = { @@ -371,6 +379,7 @@ export const mockCase: CaseUI = { assignees: [], category: null, customFields: [], + observables: [], }; export const basicCasePost: CaseUI = { @@ -461,6 +470,16 @@ export const allCases: CasesFindResponseUI = { countClosedCases: 130, }; +export const similarCases: CasesSimilarResponseUI = { + cases: cases.map(({ comments, ...theCase }) => ({ + ...theCase, + similarities: { observables: [] }, + })), + page: 1, + perPage: 5, + total: 10, +}; + export const actionLicenses: ActionLicense[] = [ { id: '.servicenow', @@ -622,6 +641,13 @@ export const allCasesSnake: CasesFindResponse = { count_open_cases: 20, }; +export const similarCasesSnake: CasesSimilarResponse = { + cases: casesSnake.map(({ ...theCase }) => ({ ...theCase, similarities: { observables: [] } })), + page: 1, + per_page: 5, + total: 10, +}; + export const getUserAction = ( type: UserActionType, action: UserActionAction, @@ -1267,3 +1293,33 @@ export const templatesConfigurationMock: CasesConfigurationUITemplate[] = [ }, }, ]; + +export const observableTypesMock: ObservableType[] = [ + { + label: 'test_observable_type_1', + key: '26f3f226-6611-4371-9242-c959b37c7af6', + }, + { + label: 'test_observable_type_2', + key: '67ec9e77-f64c-47d9-900c-1142239e0d25', + }, +]; + +export const mockObservables: ObservableUI[] = [ + { + id: 'fa6dfb79-7fd5-44d0-a582-ca196e3a5e69', + value: '127.0.0.1', + typeKey: OBSERVABLE_TYPE_IPV4.key, + description: null, + createdAt: '2024-12-11', + updatedAt: '2024-12-11', + }, + { + id: '096ca782-bd39-4dbf-8cf1-253d18277fdc', + value: '10.0.0.1', + typeKey: OBSERVABLE_TYPE_IPV4.key, + description: null, + createdAt: '2024-12-11', + updatedAt: '2024-12-11', + }, +]; diff --git a/x-pack/plugins/cases/public/containers/translations.ts b/x-pack/plugins/cases/public/containers/translations.ts index 5e78e1a71e2b2..4c1e332f7b67a 100644 --- a/x-pack/plugins/cases/public/containers/translations.ts +++ b/x-pack/plugins/cases/public/containers/translations.ts @@ -68,3 +68,15 @@ export const CATEGORIES_ERROR_TITLE = i18n.translate( defaultMessage: 'Error fetching categories', } ); + +export const OBSERVABLE_CREATED = i18n.translate('xpack.cases.caseView.observables.created', { + defaultMessage: 'Observable created', +}); + +export const OBSERVABLE_REMOVED = i18n.translate('xpack.cases.caseView.observables.removed', { + defaultMessage: 'Observable removed', +}); + +export const OBSERVABLE_UPDATED = i18n.translate('xpack.cases.caseView.observables.updated', { + defaultMessage: 'Observable updated', +}); diff --git a/x-pack/plugins/cases/public/containers/use_delete_observables.test.tsx b/x-pack/plugins/cases/public/containers/use_delete_observables.test.tsx new file mode 100644 index 0000000000000..adf0921820e72 --- /dev/null +++ b/x-pack/plugins/cases/public/containers/use_delete_observables.test.tsx @@ -0,0 +1,67 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { renderHook, act } from '@testing-library/react-hooks'; +import { useDeleteObservable } from './use_delete_observables'; +import { deleteObservable } from './api'; +import { useCasesToast } from '../common/use_cases_toast'; +import { useRefreshCaseViewPage } from '../components/case_view/use_on_refresh_case_view_page'; +import type { AppMockRenderer } from '../common/mock'; +import { createAppMockRenderer } from '../common/mock'; + +jest.mock('./api'); +jest.mock('../common/use_cases_toast'); +jest.mock('../components/case_view/use_on_refresh_case_view_page'); + +describe('useDeleteObservable', () => { + const caseId = 'test-case-id'; + const observableId = 'test-observable-id'; + const showErrorToast = jest.fn(); + const showSuccessToast = jest.fn(); + const refreshCaseViewPage = useRefreshCaseViewPage(); + + let appMockRender: AppMockRenderer; + + beforeEach(() => { + appMockRender = createAppMockRenderer(); + jest.clearAllMocks(); + (useCasesToast as jest.Mock).mockReturnValue({ showErrorToast, showSuccessToast }); + }); + + it('should call deleteObservable and show success toast on success', async () => { + (deleteObservable as jest.Mock).mockResolvedValue({}); + + const { result, waitFor } = renderHook(() => useDeleteObservable(caseId, observableId), { + wrapper: appMockRender.AppWrapper, + }); + + act(() => { + result.current.mutate(); + }); + + await waitFor(() => expect(deleteObservable).toHaveBeenCalledWith(caseId, observableId)); + expect(showSuccessToast).toHaveBeenCalledWith(expect.any(String)); + expect(refreshCaseViewPage).toHaveBeenCalled(); + }); + + it('should show error toast on failure', async () => { + const error = new Error('Failed to delete observable'); + (deleteObservable as jest.Mock).mockRejectedValue(error); + + const { result, waitFor } = renderHook(() => useDeleteObservable(caseId, observableId), { + wrapper: appMockRender.AppWrapper, + }); + + act(() => { + result.current.mutate(); + }); + + await waitFor(() => + expect(showErrorToast).toHaveBeenCalledWith(error, { title: expect.any(String) }) + ); + }); +}); diff --git a/x-pack/plugins/cases/public/containers/use_delete_observables.tsx b/x-pack/plugins/cases/public/containers/use_delete_observables.tsx new file mode 100644 index 0000000000000..76ce836094faa --- /dev/null +++ b/x-pack/plugins/cases/public/containers/use_delete_observables.tsx @@ -0,0 +1,38 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useMutation } from '@tanstack/react-query'; +import { deleteObservable } from './api'; +import * as i18n from './translations'; +import type { ServerError } from '../types'; +import { useCasesToast } from '../common/use_cases_toast'; +import { casesMutationsKeys } from './constants'; +import { useRefreshCaseViewPage } from '../components/case_view/use_on_refresh_case_view_page'; + +export const useDeleteObservable = (caseId: string, observableId: string) => { + const { showErrorToast } = useCasesToast(); + const refreshCaseViewPage = useRefreshCaseViewPage(); + const { showSuccessToast } = useCasesToast(); + + return useMutation( + () => { + return deleteObservable(caseId, observableId); + }, + { + mutationKey: casesMutationsKeys.deleteObservable, + onError: (error: ServerError) => { + showErrorToast(error, { title: i18n.ERROR_TITLE }); + }, + onSuccess: () => { + showSuccessToast(i18n.OBSERVABLE_REMOVED); + refreshCaseViewPage(); + }, + } + ); +}; + +export type UseDeleteObservables = ReturnType; diff --git a/x-pack/plugins/cases/public/containers/use_get_similar_cases.test.tsx b/x-pack/plugins/cases/public/containers/use_get_similar_cases.test.tsx new file mode 100644 index 0000000000000..25bcadec2e7af --- /dev/null +++ b/x-pack/plugins/cases/public/containers/use_get_similar_cases.test.tsx @@ -0,0 +1,72 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { renderHook } from '@testing-library/react-hooks'; +import * as api from './api'; +import type { AppMockRenderer } from '../common/mock'; +import { createAppMockRenderer } from '../common/mock'; +import { useToasts } from '../common/lib/kibana/hooks'; +import { useGetSimilarCases } from './use_get_similar_cases'; +import { mockCase } from './mock'; + +jest.mock('./api'); +jest.mock('../common/lib/kibana/hooks'); + +describe('useGetSimilarCases', () => { + const abortCtrl = new AbortController(); + const addSuccess = jest.fn(); + (useToasts as jest.Mock).mockReturnValue({ addSuccess, addError: jest.fn() }); + + let appMockRender: AppMockRenderer; + + beforeEach(() => { + jest.clearAllMocks(); + appMockRender = createAppMockRenderer(); + }); + + it('calls getSimilarCases with correct arguments', async () => { + const spyOnGetCases = jest.spyOn(api, 'getSimilarCases'); + const { waitFor } = renderHook( + () => useGetSimilarCases({ caseId: mockCase.id, perPage: 10, page: 0 }), + { + wrapper: appMockRender.AppWrapper, + } + ); + + await waitFor(() => { + expect(spyOnGetCases).toBeCalled(); + }); + + expect(spyOnGetCases).toBeCalledWith({ + caseId: mockCase.id, + signal: abortCtrl.signal, + page: 0, + perPage: 10, + }); + }); + + it('shows a toast error message when an error occurs in the response', async () => { + const spyOnGetCases = jest.spyOn(api, 'getSimilarCases'); + spyOnGetCases.mockImplementation(() => { + throw new Error('Something went wrong'); + }); + + const addError = jest.fn(); + (useToasts as jest.Mock).mockReturnValue({ addSuccess, addError }); + + const { waitFor } = renderHook( + () => useGetSimilarCases({ caseId: mockCase.id, perPage: 10, page: 0 }), + { + wrapper: appMockRender.AppWrapper, + } + ); + + await waitFor(() => { + expect(addError).toHaveBeenCalled(); + }); + }); +}); diff --git a/x-pack/plugins/cases/public/containers/use_get_similar_cases.tsx b/x-pack/plugins/cases/public/containers/use_get_similar_cases.tsx new file mode 100644 index 0000000000000..e5df1b6a6fac0 --- /dev/null +++ b/x-pack/plugins/cases/public/containers/use_get_similar_cases.tsx @@ -0,0 +1,53 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { UseQueryResult } from '@tanstack/react-query'; +import { useQuery } from '@tanstack/react-query'; +import { casesQueriesKeys } from './constants'; +import type { CasesSimilarResponseUI } from './types'; +import { useToasts } from '../common/lib/kibana'; +import * as i18n from './translations'; +import { getSimilarCases } from './api'; +import type { ServerError } from '../types'; + +export const initialData: CasesSimilarResponseUI = { + cases: [], + page: 0, + perPage: 0, + total: 0, +}; + +export const useGetSimilarCases = (params: { + caseId: string; + perPage: number; + page: number; +}): UseQueryResult => { + const toasts = useToasts(); + + return useQuery( + casesQueriesKeys.similarCases(params.caseId, params), + ({ signal }) => { + return getSimilarCases({ + caseId: params.caseId, + perPage: params.perPage, + page: params.page, + signal, + }); + }, + { + keepPreviousData: true, + onError: (error: ServerError) => { + if (error.name !== 'AbortError') { + toasts.addError( + error.body && error.body.message ? new Error(error.body.message) : error, + { title: i18n.ERROR_TITLE } + ); + } + }, + } + ); +}; diff --git a/x-pack/plugins/cases/public/containers/use_patch_observables.test.tsx b/x-pack/plugins/cases/public/containers/use_patch_observables.test.tsx new file mode 100644 index 0000000000000..98f1d50e77658 --- /dev/null +++ b/x-pack/plugins/cases/public/containers/use_patch_observables.test.tsx @@ -0,0 +1,75 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { renderHook, act } from '@testing-library/react-hooks'; +import { usePatchObservable } from './use_patch_observables'; +import { patchObservable } from './api'; +import { useCasesToast } from '../common/use_cases_toast'; +import { useRefreshCaseViewPage } from '../components/case_view/use_on_refresh_case_view_page'; +import * as i18n from './translations'; +import type { AppMockRenderer } from '../common/mock'; +import { createAppMockRenderer } from '../common/mock'; + +jest.mock('../common/use_cases_toast'); +jest.mock('../components/case_view/use_on_refresh_case_view_page'); + +jest.mock('./api'); +jest.mock('../common/lib/kibana'); + +describe('usePatchObservable', () => { + const caseId = 'test-case-id'; + const observableId = 'test-observable-id'; + const showErrorToast = jest.fn(); + const showSuccessToast = jest.fn(); + const refreshCaseViewPage = useRefreshCaseViewPage(); + + const mockRequest = { observable: { value: 'value', typeKey: 'test', description: null } }; + + let appMockRender: AppMockRenderer; + + beforeEach(() => { + jest.clearAllMocks(); + (useCasesToast as jest.Mock).mockReturnValue({ showErrorToast, showSuccessToast }); + + appMockRender = createAppMockRenderer(); + }); + + it('should call patchObservable and show success toast on success', async () => { + (patchObservable as jest.Mock).mockResolvedValue({}); + + const { result, waitFor } = renderHook(() => usePatchObservable(caseId, observableId), { + wrapper: appMockRender.AppWrapper, + }); + + act(() => { + result.current.mutate(mockRequest); + }); + + await waitFor(() => + expect(patchObservable).toHaveBeenCalledWith(mockRequest, caseId, observableId) + ); + expect(showSuccessToast).toHaveBeenCalledWith(i18n.OBSERVABLE_UPDATED); + expect(refreshCaseViewPage).toHaveBeenCalled(); + }); + + it('should show error toast on failure', async () => { + const error = new Error('Failed to patch observable'); + (patchObservable as jest.Mock).mockRejectedValue(error); + + const { result, waitFor } = renderHook(() => usePatchObservable(caseId, observableId), { + wrapper: appMockRender.AppWrapper, + }); + + act(() => { + result.current.mutate(mockRequest); + }); + + await waitFor(() => + expect(showErrorToast).toHaveBeenCalledWith(error, { title: i18n.ERROR_TITLE }) + ); + }); +}); diff --git a/x-pack/plugins/cases/public/containers/use_patch_observables.tsx b/x-pack/plugins/cases/public/containers/use_patch_observables.tsx new file mode 100644 index 0000000000000..772997435436a --- /dev/null +++ b/x-pack/plugins/cases/public/containers/use_patch_observables.tsx @@ -0,0 +1,38 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useMutation } from '@tanstack/react-query'; +import type { UpdateObservableRequest } from '../../common/types/api'; +import { patchObservable } from './api'; +import * as i18n from './translations'; +import type { ServerError } from '../types'; +import { useCasesToast } from '../common/use_cases_toast'; +import { casesMutationsKeys } from './constants'; +import { useRefreshCaseViewPage } from '../components/case_view/use_on_refresh_case_view_page'; + +export const usePatchObservable = (caseId: string, observableId: string) => { + const { showErrorToast, showSuccessToast } = useCasesToast(); + const refreshCaseViewPage = useRefreshCaseViewPage(); + + return useMutation( + (request: UpdateObservableRequest) => { + return patchObservable(request, caseId, observableId); + }, + { + mutationKey: casesMutationsKeys.patchObservable, + onError: (error: ServerError) => { + showErrorToast(error, { title: i18n.ERROR_TITLE }); + }, + onSuccess: () => { + showSuccessToast(i18n.OBSERVABLE_UPDATED); + refreshCaseViewPage(); + }, + } + ); +}; + +export type UsePatchObservables = ReturnType; diff --git a/x-pack/plugins/cases/public/containers/use_post_observables.test.tsx b/x-pack/plugins/cases/public/containers/use_post_observables.test.tsx new file mode 100644 index 0000000000000..177b18d6b36de --- /dev/null +++ b/x-pack/plugins/cases/public/containers/use_post_observables.test.tsx @@ -0,0 +1,103 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { renderHook, act } from '@testing-library/react-hooks'; +import * as api from './api'; +import { useToasts } from '../common/lib/kibana'; +import type { AppMockRenderer } from '../common/mock'; +import { createAppMockRenderer } from '../common/mock'; +import { usePostObservable } from './use_post_observables'; +import { casesQueriesKeys } from './constants'; +import { mockCase } from './mock'; +import type { AddObservableRequest } from '../../common/types/api'; + +jest.mock('./api'); +jest.mock('../common/lib/kibana'); + +const observableMock: AddObservableRequest = { + observable: { + typeKey: '80a3cc9b-500a-45fa-909a-b4f78751726c', + value: 'test_value', + description: '', + }, +}; + +describe('usePostObservables', () => { + const addSuccess = jest.fn(); + const addError = jest.fn(); + + (useToasts as jest.Mock).mockReturnValue({ addSuccess, addError }); + + let appMockRender: AppMockRenderer; + + beforeEach(() => { + appMockRender = createAppMockRenderer(); + jest.clearAllMocks(); + }); + + it('calls the api when invoked with the correct parameters', async () => { + const spy = jest.spyOn(api, 'postObservable'); + const { waitForNextUpdate, result } = renderHook(() => usePostObservable(mockCase.id), { + wrapper: appMockRender.AppWrapper, + }); + + act(() => { + result.current.mutate(observableMock); + }); + + await waitForNextUpdate(); + + expect(spy).toHaveBeenCalledWith({ observable: observableMock.observable }, mockCase.id); + }); + + it('invalidates the queries correctly', async () => { + const queryClientSpy = jest.spyOn(appMockRender.queryClient, 'invalidateQueries'); + const { waitForNextUpdate, result } = renderHook(() => usePostObservable(mockCase.id), { + wrapper: appMockRender.AppWrapper, + }); + + act(() => { + result.current.mutate(observableMock); + }); + + await waitForNextUpdate(); + + expect(queryClientSpy).toHaveBeenCalledWith(casesQueriesKeys.caseView()); + }); + + it('does shows a success toaster', async () => { + const { waitForNextUpdate, result } = renderHook(() => usePostObservable(mockCase.id), { + wrapper: appMockRender.AppWrapper, + }); + + act(() => { + result.current.mutate(observableMock); + }); + + await waitForNextUpdate(); + + expect(addSuccess).toHaveBeenCalled(); + }); + + it('shows a toast error when the api return an error', async () => { + jest + .spyOn(api, 'postObservable') + .mockRejectedValue(new Error('usePostObservables: Test error')); + + const { waitForNextUpdate, result } = renderHook(() => usePostObservable(mockCase.id), { + wrapper: appMockRender.AppWrapper, + }); + + act(() => { + result.current.mutate(observableMock); + }); + + await waitForNextUpdate(); + + expect(addError).toHaveBeenCalled(); + }); +}); diff --git a/x-pack/plugins/cases/public/containers/use_post_observables.tsx b/x-pack/plugins/cases/public/containers/use_post_observables.tsx new file mode 100644 index 0000000000000..401b0c0e33da4 --- /dev/null +++ b/x-pack/plugins/cases/public/containers/use_post_observables.tsx @@ -0,0 +1,38 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useMutation } from '@tanstack/react-query'; +import type { AddObservableRequest } from '../../common/types/api'; +import { postObservable } from './api'; +import * as i18n from './translations'; +import type { ServerError } from '../types'; +import { useCasesToast } from '../common/use_cases_toast'; +import { casesMutationsKeys } from './constants'; +import { useRefreshCaseViewPage } from '../components/case_view/use_on_refresh_case_view_page'; + +export const usePostObservable = (caseId: string) => { + const { showErrorToast, showSuccessToast } = useCasesToast(); + const refreshCaseViewPage = useRefreshCaseViewPage(); + + return useMutation( + (request: AddObservableRequest) => { + return postObservable(request, caseId); + }, + { + mutationKey: casesMutationsKeys.postObservable, + onError: (error: ServerError) => { + showErrorToast(error, { title: i18n.ERROR_TITLE }); + }, + onSuccess: () => { + refreshCaseViewPage(); + showSuccessToast(i18n.OBSERVABLE_CREATED); + }, + } + ); +}; + +export type UsePostObservables = ReturnType; diff --git a/x-pack/plugins/cases/server/client/cases/bulk_create.test.ts b/x-pack/plugins/cases/server/client/cases/bulk_create.test.ts index c7f047aa6b385..ace3c39d31e0a 100644 --- a/x-pack/plugins/cases/server/client/cases/bulk_create.test.ts +++ b/x-pack/plugins/cases/server/client/cases/bulk_create.test.ts @@ -121,6 +121,7 @@ describe('bulkCreate', () => { "duration": null, "external_service": null, "id": "mock-id-1", + "observables": Array [], "owner": "securitySolution", "settings": Object { "syncAlerts": true, @@ -164,6 +165,7 @@ describe('bulkCreate', () => { "duration": null, "external_service": null, "id": "mock-id-1", + "observables": Array [], "owner": "securitySolution", "settings": Object { "syncAlerts": true, @@ -243,6 +245,7 @@ describe('bulkCreate', () => { "duration": null, "external_service": null, "id": "mock-saved-object-id", + "observables": Array [], "owner": "securitySolution", "settings": Object { "syncAlerts": true, @@ -281,6 +284,7 @@ describe('bulkCreate', () => { "duration": null, "external_service": null, "id": "mock-saved-object-id", + "observables": Array [], "owner": "securitySolution", "settings": Object { "syncAlerts": true, diff --git a/x-pack/plugins/cases/server/client/cases/bulk_update.test.ts b/x-pack/plugins/cases/server/client/cases/bulk_update.test.ts index 5cdd4c943b944..bfde249171009 100644 --- a/x-pack/plugins/cases/server/client/cases/bulk_update.test.ts +++ b/x-pack/plugins/cases/server/client/cases/bulk_update.test.ts @@ -794,6 +794,7 @@ describe('update', () => { "duration": null, "external_service": null, "id": "mock-id-1", + "observables": Array [], "owner": "securitySolution", "settings": Object { "syncAlerts": true, @@ -837,6 +838,7 @@ describe('update', () => { "duration": null, "external_service": null, "id": "mock-id-2", + "observables": Array [], "owner": "securitySolution", "settings": Object { "syncAlerts": true, diff --git a/x-pack/plugins/cases/server/client/cases/client.ts b/x-pack/plugins/cases/server/client/cases/client.ts index 68ee6f003f8b2..c615cb4ac6508 100644 --- a/x-pack/plugins/cases/server/client/cases/client.ts +++ b/x-pack/plugins/cases/server/client/cases/client.ts @@ -20,6 +20,10 @@ import type { BulkCreateCasesRequest, BulkCreateCasesResponse, CasesSearchRequest, + SimilarCasesSearchRequest, + CasesSimilarResponse, + AddObservableRequest, + UpdateObservableRequest, } from '../../../common/types/api'; import type { CasesClient } from '../client'; import type { CasesClientInternal } from '../client_internal'; @@ -36,6 +40,8 @@ import { bulkUpdate } from './bulk_update'; import { bulkCreate } from './bulk_create'; import type { ReplaceCustomFieldArgs } from './replace_custom_field'; import { replaceCustomField } from './replace_custom_field'; +import { similar } from './similar'; +import { addObservable, deleteObservable, updateObservable } from './observables'; /** * API for interacting with the cases entities. @@ -102,6 +108,26 @@ export interface CasesSubClient { * Replace custom field with specific customFieldId and CaseId */ replaceCustomField(params: ReplaceCustomFieldArgs): Promise; + /** + * Returns cases that are similar to given case (by observables) + */ + similar(caseId: string, params: SimilarCasesSearchRequest): Promise; + /** + * Adds observable to the case + */ + addObservable(caseId: string, params: AddObservableRequest): Promise; + /** + * Updates observable + */ + updateObservable( + caseId: string, + observableId: string, + params: UpdateObservableRequest + ): Promise; + /** + * Removes observable + */ + deleteObservable(caseId: string, observableId: string): Promise; } /** @@ -130,6 +156,14 @@ export const createCasesSubClient = ( getCasesByAlertID: (params: CasesByAlertIDParams) => getCasesByAlertID(params, clientArgs), replaceCustomField: (params: ReplaceCustomFieldArgs) => replaceCustomField(params, clientArgs, casesClient), + similar: (caseId: string, params: SimilarCasesSearchRequest) => + similar(caseId, params, clientArgs, casesClient), + addObservable: (caseId: string, params: AddObservableRequest) => + addObservable(caseId, params, clientArgs, casesClient), + updateObservable: (caseId: string, observableId: string, params: UpdateObservableRequest) => + updateObservable(caseId, observableId, params, clientArgs, casesClient), + deleteObservable: (caseId: string, observableId: string) => + deleteObservable(caseId, observableId, clientArgs, casesClient), }; return Object.freeze(casesSubClient); diff --git a/x-pack/plugins/cases/server/client/cases/create.test.ts b/x-pack/plugins/cases/server/client/cases/create.test.ts index 8b24c79c530b0..5a3eb7bd4f54f 100644 --- a/x-pack/plugins/cases/server/client/cases/create.test.ts +++ b/x-pack/plugins/cases/server/client/cases/create.test.ts @@ -197,6 +197,7 @@ describe('create', () => { status: CaseStatuses.open, category: null, customFields: [], + observables: [], }, id: expect.any(String), refresh: false, @@ -274,6 +275,7 @@ describe('create', () => { status: CaseStatuses.open, category: null, customFields: [], + observables: [], }, id: expect.any(String), refresh: false, @@ -353,6 +355,7 @@ describe('create', () => { status: CaseStatuses.open, category: null, customFields: [], + observables: [], }, id: expect.any(String), refresh: false, @@ -419,6 +422,7 @@ describe('create', () => { duration: null, status: CaseStatuses.open, customFields: [], + observables: [], }, id: expect.any(String), refresh: false, @@ -498,6 +502,7 @@ describe('create', () => { duration: null, status: CaseStatuses.open, customFields: theCustomFields, + observables: [], }, id: expect.any(String), refresh: false, @@ -526,6 +531,7 @@ describe('create', () => { { key: 'first_key', type: 'text', value: 'default value' }, { key: 'second_key', type: 'toggle', value: null }, ], + observables: [], }, id: expect.any(String), refresh: false, diff --git a/x-pack/plugins/cases/server/client/cases/observables.test.ts b/x-pack/plugins/cases/server/client/cases/observables.test.ts new file mode 100644 index 0000000000000..1d211615cab7a --- /dev/null +++ b/x-pack/plugins/cases/server/client/cases/observables.test.ts @@ -0,0 +1,228 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { addObservable, deleteObservable, updateObservable } from './observables'; +import Boom from '@hapi/boom'; +import { LICENSING_CASE_OBSERVABLES_FEATURE } from '../../common/constants'; +import { createCasesClientMock, createCasesClientMockArgs } from '../mocks'; +import { mockCases } from '../../mocks'; +import { OBSERVABLE_TYPE_IPV4 } from '../../../common/constants'; + +const caseSO = mockCases[0]; + +const mockCasesClient = createCasesClientMock(); +const mockClientArgs = createCasesClientMockArgs(); + +const mockLicensingService = mockClientArgs.services.licensingService; +const mockCaseService = mockClientArgs.services.caseService; + +const mockObservable = { + value: '127.0.0.1', + typeKey: OBSERVABLE_TYPE_IPV4.key, + id: '5c431380-c6ef-459f-b0fe-1699e978517b', + description: null, + createdAt: '2024-12-05', + updatedAt: '2024-12-05', +}; +const caseSOWithObservables = { + ...caseSO, + attributes: { + ...caseSO.attributes, + observables: [mockObservable], + }, +}; +describe('addObservable', () => { + beforeEach(() => { + mockCaseService.patchCase.mockResolvedValue(caseSO); + mockCaseService.getCase.mockResolvedValue(caseSO); + jest.clearAllMocks(); + }); + + it('should add an observable successfully', async () => { + mockLicensingService.isAtLeastPlatinum.mockResolvedValue(true); + const result = await addObservable( + 'case-id', + { observable: { typeKey: OBSERVABLE_TYPE_IPV4.key, value: '127.0.0.1', description: '' } }, + mockClientArgs, + mockCasesClient + ); + + expect(mockLicensingService.notifyUsage).toHaveBeenCalledWith( + LICENSING_CASE_OBSERVABLES_FEATURE + ); + expect(result).toBeDefined(); + }); + + it('should throw an error if license is not platinum', async () => { + mockLicensingService.isAtLeastPlatinum.mockResolvedValue(false); + + await expect( + addObservable( + 'case-id', + { observable: { typeKey: OBSERVABLE_TYPE_IPV4.key, value: '127.0.0.1', description: '' } }, + mockClientArgs, + mockCasesClient + ) + ).rejects.toThrow( + Boom.forbidden( + 'In order to assign observables to cases, you must be subscribed to an Elastic Platinum license' + ) + ); + }); + + it('should throw an error if observable type is invalid', async () => { + mockLicensingService.isAtLeastPlatinum.mockResolvedValue(true); + + await expect( + addObservable( + 'case-id', + { observable: { typeKey: 'invalid type', value: '127.0.0.1', description: '' } }, + mockClientArgs, + mockCasesClient + ) + ).rejects.toThrow( + Boom.badRequest( + 'Failed to add observable: Error: Invalid observable type, key does not exist: invalid type' + ) + ); + }); + + it('should throw an error if duplicate observable is posted', async () => { + mockLicensingService.isAtLeastPlatinum.mockResolvedValue(true); + + mockCaseService.getCase.mockResolvedValue(caseSOWithObservables); + + await expect( + addObservable( + 'case-id', + { observable: { typeKey: OBSERVABLE_TYPE_IPV4.key, value: '127.0.0.1', description: '' } }, + mockClientArgs, + mockCasesClient + ) + ).rejects.toThrow( + Boom.badRequest('Failed to add observable: Error: Invalid duplicated observables in request.') + ); + }); + + it('should handle errors and throw boom', async () => { + mockLicensingService.isAtLeastPlatinum.mockResolvedValue(true); + mockCaseService.getCase.mockRejectedValue(new Error('Case not found')); + + await expect( + addObservable( + 'case-id', + { observable: { typeKey: 'typeKey', value: 'test', description: '' } }, + mockClientArgs, + mockCasesClient + ) + ).rejects.toThrow(); + }); +}); + +describe('updateObservable', () => { + beforeEach(() => { + mockCaseService.patchCase.mockResolvedValue(caseSOWithObservables); + mockCaseService.getCase.mockResolvedValue(caseSOWithObservables); + jest.clearAllMocks(); + }); + + it('should update an observable successfully', async () => { + mockLicensingService.isAtLeastPlatinum.mockResolvedValue(true); + const result = await updateObservable( + 'case-id', + mockObservable.id, + { + observable: { + value: '192.168.0.1', + description: 'Updated description', + }, + }, + mockClientArgs, + mockCasesClient + ); + + expect(mockLicensingService.notifyUsage).toHaveBeenCalledWith( + LICENSING_CASE_OBSERVABLES_FEATURE + ); + expect(result).toBeDefined(); + }); + + it('should throw an error if license is not platinum', async () => { + mockLicensingService.isAtLeastPlatinum.mockResolvedValue(false); + + await expect( + updateObservable( + 'case-id', + 'observable-id', + { + observable: { + value: '192.168.0.1', + description: 'Updated description', + }, + }, + mockClientArgs, + mockCasesClient + ) + ).rejects.toThrow( + Boom.forbidden( + 'In order to update observables in cases, you must be subscribed to an Elastic Platinum license' + ) + ); + }); + + it('should handle errors and throw boom', async () => { + mockLicensingService.isAtLeastPlatinum.mockResolvedValue(true); + mockCaseService.getCase.mockRejectedValue(new Error('Case not found')); + + await expect( + updateObservable( + 'case-id', + 'observable-id', + { observable: { value: 'test', description: 'Updated description' } }, + mockClientArgs, + mockCasesClient + ) + ).rejects.toThrow(); + }); +}); + +describe('deleteObservable', () => { + beforeEach(() => { + mockCaseService.patchCase.mockResolvedValue(caseSOWithObservables); + mockCaseService.getCase.mockResolvedValue(caseSOWithObservables); + jest.clearAllMocks(); + }); + + it('should delete an observable successfully', async () => { + mockLicensingService.isAtLeastPlatinum.mockResolvedValue(true); + await deleteObservable('case-id', mockObservable.id, mockClientArgs, mockCasesClient); + + expect(mockLicensingService.notifyUsage).toHaveBeenCalledWith( + LICENSING_CASE_OBSERVABLES_FEATURE + ); + }); + + it('should throw an error if license is not platinum', async () => { + mockLicensingService.isAtLeastPlatinum.mockResolvedValue(false); + + await expect( + deleteObservable('case-id', 'observable-id', mockClientArgs, mockCasesClient) + ).rejects.toThrow( + Boom.forbidden( + 'In order to delete observables from cases, you must be subscribed to an Elastic Platinum license' + ) + ); + }); + + it('should handle errors and throw boom', async () => { + mockLicensingService.isAtLeastPlatinum.mockResolvedValue(true); + mockCaseService.getCase.mockRejectedValue(new Error('Case not found')); + + await expect( + deleteObservable('case-id', 'observable-id', mockClientArgs, mockCasesClient) + ).rejects.toThrow(); + }); +}); diff --git a/x-pack/plugins/cases/server/client/cases/observables.ts b/x-pack/plugins/cases/server/client/cases/observables.ts new file mode 100644 index 0000000000000..732dbd73e4a39 --- /dev/null +++ b/x-pack/plugins/cases/server/client/cases/observables.ts @@ -0,0 +1,235 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license 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 { PublicMethodsOf } from '@kbn/utility-types'; +import { v4 } from 'uuid'; +import Boom from '@hapi/boom'; + +import { MAX_OBSERVABLES_PER_CASE } from '../../../common/constants'; +import { CaseRt } from '../../../common/types/domain'; +import { + AddObservableRequestRt, + type AddObservableRequest, + type UpdateObservableRequest, + UpdateObservableRequestRt, +} from '../../../common/types/api'; +import type { CasesClient } from '../client'; +import type { CasesClientArgs } from '../types'; +import { decodeOrThrow, decodeWithExcessOrThrow } from '../../common/runtime_types'; +import type { Authorization } from '../../authorization'; +import { Operations } from '../../authorization'; +import type { CaseSavedObjectTransformed } from '../../common/types/case'; +import { flattenCaseSavedObject } from '../../common/utils'; +import { LICENSING_CASE_OBSERVABLES_FEATURE } from '../../common/constants'; +import { + validateDuplicatedObservablesInRequest, + validateObservableTypeKeyExists, +} from '../validators'; + +const ensureUpdateAuthorized = async ( + authorization: PublicMethodsOf, + theCase: CaseSavedObjectTransformed +) => { + return authorization.ensureAuthorized({ + operation: Operations.updateCase, + entities: [ + { + id: theCase.id, + owner: theCase.attributes.owner, + }, + ], + }); +}; + +export const addObservable = async ( + caseId: string, + params: AddObservableRequest, + clientArgs: CasesClientArgs, + casesClient: CasesClient +) => { + const { + services: { caseService, licensingService }, + authorization, + } = clientArgs; + + const hasPlatinumLicenseOrGreater = await licensingService.isAtLeastPlatinum(); + + if (!hasPlatinumLicenseOrGreater) { + throw Boom.forbidden( + 'In order to assign observables to cases, you must be subscribed to an Elastic Platinum license' + ); + } + + licensingService.notifyUsage(LICENSING_CASE_OBSERVABLES_FEATURE); + + try { + const paramArgs = decodeWithExcessOrThrow(AddObservableRequestRt)(params); + const retrievedCase = await caseService.getCase({ id: caseId }); + await ensureUpdateAuthorized(authorization, retrievedCase); + + await validateObservableTypeKeyExists(casesClient, { + caseOwner: retrievedCase.attributes.owner, + observableTypeKey: params.observable.typeKey, + }); + + const currentObservables = retrievedCase.attributes.observables ?? []; + + if (currentObservables.length === MAX_OBSERVABLES_PER_CASE) { + throw Boom.forbidden(`Max ${MAX_OBSERVABLES_PER_CASE} observables per case is allowed.`); + } + + const updatedObservables = [ + ...currentObservables, + { + ...paramArgs.observable, + id: v4(), + createdAt: new Date().toISOString(), + updatedAt: new Date().toISOString(), + }, + ]; + + validateDuplicatedObservablesInRequest({ + requestFields: updatedObservables, + }); + + const updatedCase = await caseService.patchCase({ + caseId: retrievedCase.id, + originalCase: retrievedCase, + updatedAttributes: { + observables: updatedObservables, + }, + }); + + const res = flattenCaseSavedObject({ + savedObject: { + ...retrievedCase, + ...updatedCase, + attributes: { ...retrievedCase.attributes, ...updatedCase?.attributes }, + references: retrievedCase.references, + }, + }); + + return decodeOrThrow(CaseRt)(res); + } catch (error) { + throw Boom.badRequest(`Failed to add observable: ${error}`); + } +}; + +export const updateObservable = async ( + caseId: string, + observableId: string, + params: UpdateObservableRequest, + clientArgs: CasesClientArgs, + casesClient: CasesClient +) => { + const { + services: { caseService, licensingService }, + authorization, + } = clientArgs; + + const hasPlatinumLicenseOrGreater = await licensingService.isAtLeastPlatinum(); + + if (!hasPlatinumLicenseOrGreater) { + throw Boom.forbidden( + 'In order to update observables in cases, you must be subscribed to an Elastic Platinum license' + ); + } + + licensingService.notifyUsage(LICENSING_CASE_OBSERVABLES_FEATURE); + + try { + const paramArgs = decodeWithExcessOrThrow(UpdateObservableRequestRt)(params); + const retrievedCase = await caseService.getCase({ id: caseId }); + await ensureUpdateAuthorized(authorization, retrievedCase); + + const currentObservables = retrievedCase.attributes.observables ?? []; + + const observableIndex = currentObservables.findIndex( + (observable) => observable.id === observableId + ); + + if (observableIndex === -1) { + throw Boom.notFound(`Failed to update observable: observable id ${observableId} not found`); + } + + const updatedObservables = [...currentObservables]; + updatedObservables[observableIndex] = { + ...updatedObservables[observableIndex], + ...paramArgs.observable, + updatedAt: new Date().toISOString(), + }; + + validateDuplicatedObservablesInRequest({ + requestFields: updatedObservables, + }); + + const updatedCase = await caseService.patchCase({ + caseId: retrievedCase.id, + originalCase: retrievedCase, + updatedAttributes: { + observables: updatedObservables, + }, + }); + + const res = flattenCaseSavedObject({ + savedObject: { + ...retrievedCase, + ...updatedCase, + attributes: { ...retrievedCase.attributes, ...updatedCase?.attributes }, + references: retrievedCase.references, + }, + }); + + return decodeOrThrow(CaseRt)(res); + } catch (error) { + throw Boom.badRequest(`Failed to update observable: ${error}`); + } +}; + +export const deleteObservable = async ( + caseId: string, + observableId: string, + clientArgs: CasesClientArgs, + casesClient: CasesClient +) => { + const { + services: { caseService, licensingService }, + authorization, + } = clientArgs; + + const hasPlatinumLicenseOrGreater = await licensingService.isAtLeastPlatinum(); + + if (!hasPlatinumLicenseOrGreater) { + throw Boom.forbidden( + 'In order to delete observables from cases, you must be subscribed to an Elastic Platinum license' + ); + } + + licensingService.notifyUsage(LICENSING_CASE_OBSERVABLES_FEATURE); + + try { + const retrievedCase = await caseService.getCase({ id: caseId }); + await ensureUpdateAuthorized(authorization, retrievedCase); + + const updatedObservables = retrievedCase.attributes.observables.filter( + (observable) => observable.id !== observableId + ); + + // NOTE: same length of observables pre and post filter means that the observable id has not been found + if (updatedObservables.length === retrievedCase.attributes.observables.length) { + throw Boom.notFound(`Failed to delete observable: observable id ${observableId} not found`); + } + + await caseService.patchCase({ + caseId: retrievedCase.id, + originalCase: retrievedCase, + updatedAttributes: { observables: updatedObservables }, + }); + } catch (error) { + throw Boom.badRequest(`Failed to delete observable id: ${observableId}: ${error}`); + } +}; diff --git a/x-pack/plugins/cases/server/client/cases/similar.test.ts b/x-pack/plugins/cases/server/client/cases/similar.test.ts new file mode 100644 index 0000000000000..9ded5b9c4f987 --- /dev/null +++ b/x-pack/plugins/cases/server/client/cases/similar.test.ts @@ -0,0 +1,236 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { mockCases } from '../../mocks'; +import { createCasesClientMock, createCasesClientMockArgs } from '../mocks'; +import { similar } from './similar'; +import { mockCase } from '../../../public/containers/mock'; +import { OBSERVABLE_TYPE_IPV4 } from '../../../common/constants'; +import Boom from '@hapi/boom'; + +const mockClientArgs = createCasesClientMockArgs(); +const mockCasesClient = createCasesClientMock(); + +const mockLicensingService = mockClientArgs.services.licensingService; + +describe('similar', () => { + beforeEach(() => { + mockLicensingService.isAtLeastPlatinum.mockResolvedValue(true); + + jest.mocked(mockClientArgs.services.caseService.getCase).mockResolvedValue({ + ...mockCases[0], + attributes: { + ...mockCases[0].attributes, + observables: [ + { + id: 'ddfb207d-4b46-4545-bae8-5193c1551e50', + value: '127.0.0.1', + typeKey: OBSERVABLE_TYPE_IPV4.key, + createdAt: '2024-11-07', + updatedAt: '2024-11-07', + description: '', + }, + ], + }, + }); + + mockClientArgs.services.caseService.findCases.mockResolvedValue({ + page: 1, + per_page: 10, + total: mockCases.length, + saved_objects: [], + }); + + mockClientArgs.services.caseConfigureService.find.mockResolvedValue({ + saved_objects: [], + page: 1, + per_page: 10, + total: 0, + }); + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + it('should execute query with observable type key and value and proper filters', async () => { + await similar( + mockCase.id, + { + page: 1, + perPage: 10, + }, + mockClientArgs, + mockCasesClient + ); + expect(mockClientArgs.services.caseService.findCases).toHaveBeenCalled(); + + const call = mockClientArgs.services.caseService.findCases.mock.calls[0][0]; + + expect(call).toMatchInlineSnapshot(` + Object { + "filter": Object { + "arguments": Array [ + Object { + "arguments": Array [ + Object { + "isQuoted": false, + "type": "literal", + "value": "cases.attributes.observables", + }, + Object { + "arguments": Array [ + Object { + "arguments": Array [ + Object { + "isQuoted": false, + "type": "literal", + "value": "value", + }, + Object { + "isQuoted": true, + "type": "literal", + "value": "127.0.0.1", + }, + ], + "function": "is", + "type": "function", + }, + Object { + "arguments": Array [ + Object { + "isQuoted": false, + "type": "literal", + "value": "typeKey", + }, + Object { + "isQuoted": true, + "type": "literal", + "value": "observable-type-ipv4", + }, + ], + "function": "is", + "type": "function", + }, + ], + "function": "and", + "type": "function", + }, + ], + "function": "nested", + "type": "function", + }, + Object { + "arguments": Array [ + Object { + "isQuoted": false, + "type": "literal", + "value": "cases.attributes.owner", + }, + Object { + "isQuoted": false, + "type": "literal", + "value": "securitySolution", + }, + ], + "function": "is", + "type": "function", + }, + ], + "function": "and", + "type": "function", + }, + "page": 1, + "perPage": 10, + "rootSearchFields": Array [ + "_id", + ], + "search": "-\\"cases:mock-id\\"", + "sortField": "created_at", + } + `); + }); + + it('should throw an error if license is not platinum', async () => { + mockLicensingService.isAtLeastPlatinum.mockResolvedValue(false); + + await expect( + similar( + mockCase.id, + { + page: 1, + perPage: 10, + }, + mockClientArgs, + mockCasesClient + ) + ).rejects.toThrow( + Boom.forbidden( + 'In order to use the similar cases feature, you must be subscribed to an Elastic Platinum license' + ) + ); + }); + + it('should not call findCases when the case has no observables', async () => { + jest.mocked(mockClientArgs.services.caseService.getCase).mockResolvedValue({ + ...mockCases[0], + attributes: { + ...mockCases[0].attributes, + observables: [], + }, + }); + + await similar( + mockCase.id, + { + page: 1, + perPage: 10, + }, + mockClientArgs, + mockCasesClient + ); + expect(mockClientArgs.services.caseService.findCases).not.toHaveBeenCalled(); + }); + + it('should not call findCases when unknown typeKey is specified for an observable', async () => { + jest.mocked(mockClientArgs.services.caseService.getCase).mockResolvedValue({ + ...mockCases[0], + attributes: { + ...mockCases[0].attributes, + observables: [ + { + id: '4491eedc-2336-41e3-bf98-29147c133b95', + typeKey: 'unknown', + value: 'some value', + createdAt: '2024-12-16', + updatedAt: '2024-12-16', + description: null, + }, + { + id: 'e7d3f99d-c8be-41df-ada0-640021571bd4', + typeKey: 'unknown', + value: 'some value', + createdAt: '2024-12-16', + updatedAt: '2024-12-16', + description: null, + }, + ], + }, + }); + + await similar( + mockCase.id, + { + page: 1, + perPage: 10, + }, + mockClientArgs, + mockCasesClient + ); + expect(mockClientArgs.services.caseService.findCases).not.toHaveBeenCalled(); + }); +}); diff --git a/x-pack/plugins/cases/server/client/cases/similar.ts b/x-pack/plugins/cases/server/client/cases/similar.ts new file mode 100644 index 0000000000000..daca8d1e6b573 --- /dev/null +++ b/x-pack/plugins/cases/server/client/cases/similar.ts @@ -0,0 +1,163 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { intersection } from 'lodash'; +import Boom from '@hapi/boom'; +import { OWNER_FIELD } from '../../../common/constants'; +import type { CasesSimilarResponse, SimilarCasesSearchRequest } from '../../../common/types/api'; +import { SimilarCasesSearchRequestRt, CasesSimilarResponseRt } from '../../../common/types/api'; +import { decodeWithExcessOrThrow, decodeOrThrow } from '../../common/runtime_types'; + +import { createCaseError } from '../../common/error'; +import type { CasesClient, CasesClientArgs } from '..'; +import { defaultSortField, flattenCaseSavedObject } from '../../common/utils'; +import { Operations } from '../../authorization'; +import { buildFilter, buildObservablesFieldsFilter, combineFilters } from '../utils'; +import { combineFilterWithAuthorizationFilter } from '../../authorization/utils'; +import type { CaseSavedObjectTransformed } from '../../common/types/case'; +import { getAvailableObservableTypesSet } from '../observable_types'; + +interface Similarity { + typeKey: string; + value: string; +} + +const getSimilarities = ( + a: CaseSavedObjectTransformed, + b: CaseSavedObjectTransformed, + availableObservableTypes: Set +): Similarity[] => { + const stringify = (observable: { typeKey: string; value: string }) => + [observable.typeKey, observable.value].join(','); + + const setA = new Set(a.attributes.observables.map(stringify)); + const setB = new Set(b.attributes.observables.map(stringify)); + + const intersectingObservables: string[] = intersection([...setA], [...setB]); + + return intersectingObservables + .map((item) => { + const [typeKey, value] = item.split(','); + + return { + typeKey, + value, + }; + }) + .filter((observable) => availableObservableTypes.has(observable.typeKey)); +}; + +/** + * Retrieves cases similar to a given Case + */ +export const similar = async ( + caseId: string, + params: SimilarCasesSearchRequest, + clientArgs: CasesClientArgs, + casesClient: CasesClient +): Promise => { + const { + services: { caseService, licensingService }, + logger, + authorization, + } = clientArgs; + + const hasPlatinumLicenseOrGreater = await licensingService.isAtLeastPlatinum(); + + if (!hasPlatinumLicenseOrGreater) { + throw Boom.forbidden( + 'In order to use the similar cases feature, you must be subscribed to an Elastic Platinum license' + ); + } + + try { + const paramArgs = decodeWithExcessOrThrow(SimilarCasesSearchRequestRt)(params); + const retrievedCase = await caseService.getCase({ id: caseId }); + + const availableObservableTypesSet = await getAvailableObservableTypesSet( + casesClient, + retrievedCase.attributes.owner + ); + + const ownerFilter = buildFilter({ + filters: retrievedCase.attributes.owner, + field: OWNER_FIELD, + operator: 'or', + }); + + const { filter: authorizationFilter, ensureSavedObjectsAreAuthorized } = + await authorization.getAuthorizationFilter(Operations.findCases); + + const similarCasesFilter = buildObservablesFieldsFilter( + retrievedCase.attributes.observables.reduce((observableMap, observable) => { + // NOTE: skip non-existent observable types + if (!availableObservableTypesSet.has(observable.typeKey)) { + return observableMap; + } + + if (!observableMap[observable.typeKey]) { + observableMap[observable.typeKey] = []; + } + + observableMap[observable.typeKey].push(observable.value); + + return observableMap; + }, {} as Record) + ); + + // NOTE: empty similar cases filter means that we are unable to show similar cases + // and should not combine it with general filters below. + if (!similarCasesFilter) { + return { + cases: [], + page: 1, + per_page: paramArgs.perPage ?? 0, + total: 0, + }; + } + + const filters = combineFilters([similarCasesFilter, ownerFilter]); + + const finalCasesFilter = combineFilterWithAuthorizationFilter(filters, authorizationFilter); + + const cases = await caseService.findCases({ + filter: finalCasesFilter, + sortField: defaultSortField, + search: `-"cases:${caseId}"`, + rootSearchFields: ['_id'], + page: paramArgs.page, + perPage: paramArgs.perPage, + }); + + ensureSavedObjectsAreAuthorized( + cases.saved_objects.map((caseSavedObject) => ({ + id: caseSavedObject.id, + owner: caseSavedObject.attributes.owner, + })) + ); + + const res = { + cases: cases.saved_objects.map((so) => ({ + ...flattenCaseSavedObject({ savedObject: so }), + similarities: { + observables: getSimilarities(retrievedCase, so, availableObservableTypesSet), + }, + })), + page: cases.page, + per_page: cases.per_page, + total: cases.total, + }; + + return decodeOrThrow(CasesSimilarResponseRt)(res); + } catch (error) { + throw createCaseError({ + message: `Failed to find cases: ${JSON.stringify(params)}: ${error}`, + error, + logger, + }); + } +}; diff --git a/x-pack/plugins/cases/server/client/configure/client.test.ts b/x-pack/plugins/cases/server/client/configure/client.test.ts index aab8937591f9e..323d872d4b10e 100644 --- a/x-pack/plugins/cases/server/client/configure/client.test.ts +++ b/x-pack/plugins/cases/server/client/configure/client.test.ts @@ -16,6 +16,7 @@ import { MAX_CUSTOM_FIELDS_PER_CASE, MAX_SUPPORTED_CONNECTORS_RETURNED, MAX_TEMPLATES_LENGTH, + OBSERVABLE_TYPE_IPV4, } from '../../../common/constants'; import { ConnectorTypes } from '../../../common'; import type { TemplatesConfiguration } from '../../../common/types/domain'; @@ -403,6 +404,7 @@ describe('client', () => { email: 'testemail@elastic.co', username: 'elastic', }, + observableTypes: [], }, }); @@ -463,6 +465,7 @@ describe('client', () => { }, }, ], + observableTypes: [], }, version: 'test-version', }); @@ -474,6 +477,7 @@ describe('client', () => { namespaces: ['default'], references: [], attributes: { + observableTypes: [], templates: [], created_at: '2019-11-25T21:54:48.952Z', created_by: { @@ -1063,6 +1067,7 @@ describe('client', () => { ], closure_type: 'close-by-user', owner: 'cases', + observableTypes: [], }, id: 'test-id', version: 'test-version', @@ -1130,6 +1135,7 @@ describe('client', () => { name: 'template 1', }, ], + observableTypes: [], }, id: 'test-id', version: 'test-version', @@ -1197,6 +1203,31 @@ describe('client', () => { ); }); }); + + describe('observableTypes', () => { + it('throws when trying to set duplicate observableTypes', async () => { + clientArgs.services.licensingService.isAtLeastPlatinum.mockResolvedValue(true); + + await expect( + update( + 'test-id', + { + version: 'test-version', + observableTypes: [ + { + key: 'e638af17-ebb6-4678-a937-b734bffee36a', + label: OBSERVABLE_TYPE_IPV4.label, + }, + ], + }, + clientArgs, + casesClientInternal + ) + ).rejects.toThrow( + 'Failed to get patch configure in route: Error: Invalid duplicated observable types in request: ipv4' + ); + }); + }); }); }); @@ -1363,6 +1394,7 @@ describe('client', () => { }, updated_at: null, updated_by: null, + observableTypes: [], }, score: 0, }, @@ -1388,6 +1420,7 @@ describe('client', () => { }, updated_at: null, updated_by: null, + observableTypes: [], }, }); @@ -1576,6 +1609,30 @@ describe('client', () => { ); }); }); + + describe('observableTypes', () => { + it('throws when trying to set duplicate observableTypes', async () => { + clientArgs.services.licensingService.isAtLeastPlatinum.mockResolvedValue(true); + + await expect( + create( + { + ...baseRequest, + observableTypes: [ + { + key: 'e638af17-ebb6-4678-a937-b734bffee36a', + label: OBSERVABLE_TYPE_IPV4.label, + }, + ], + }, + clientArgs, + casesClientInternal + ) + ).rejects.toThrow( + 'Failed to create case configuration: Error: Invalid duplicated observable types in request: ipv4' + ); + }); + }); }); }); }); diff --git a/x-pack/plugins/cases/server/client/configure/client.ts b/x-pack/plugins/cases/server/client/configure/client.ts index 00810cb742323..4b4800f3c8657 100644 --- a/x-pack/plugins/cases/server/client/configure/client.ts +++ b/x-pack/plugins/cases/server/client/configure/client.ts @@ -49,7 +49,10 @@ import type { MappingsArgs, CreateMappingsArgs, UpdateMappingsArgs } from './typ import { createMappings } from './create_mappings'; import { updateMappings } from './update_mappings'; import { ConfigurationRt, ConfigurationsRt } from '../../../common/types/domain'; -import { validateDuplicatedKeysInRequest } from '../validators'; +import { + validateDuplicatedKeysInRequest, + validateDuplicatedObservableTypesInRequest, +} from '../validators'; import { validateCustomFieldTypesInRequest, validateTemplatesCustomFieldsInRequest, @@ -308,6 +311,10 @@ export async function update( fieldName: 'customFields', }); + validateDuplicatedObservableTypesInRequest({ + requestFields: request.observableTypes, + }); + const { version, templates, ...queryWithoutVersion } = request; const configuration = await caseConfigureService.get({ @@ -442,6 +449,10 @@ export async function create( customFields: validatedConfigurationRequest.customFields, }); + validateDuplicatedObservableTypesInRequest({ + requestFields: validatedConfigurationRequest.observableTypes, + }); + let error = null; const { filter: authorizationFilter, ensureSavedObjectsAreAuthorized } = @@ -521,6 +532,7 @@ export async function create( created_by: user, updated_at: null, updated_by: null, + observableTypes: validatedConfigurationRequest.observableTypes ?? [], }, id: savedObjectID, }); diff --git a/x-pack/plugins/cases/server/client/mocks.ts b/x-pack/plugins/cases/server/client/mocks.ts index 50dca1920b625..f305fbec6d536 100644 --- a/x-pack/plugins/cases/server/client/mocks.ts +++ b/x-pack/plugins/cases/server/client/mocks.ts @@ -72,6 +72,10 @@ const createCasesSubClientMock = (): CasesSubClientMock => { getCasesByAlertID: jest.fn(), getCategories: jest.fn(), replaceCustomField: jest.fn(), + similar: jest.fn(), + addObservable: jest.fn(), + updateObservable: jest.fn(), + deleteObservable: jest.fn(), }; }; diff --git a/x-pack/plugins/cases/server/client/observable_types.test.ts b/x-pack/plugins/cases/server/client/observable_types.test.ts new file mode 100644 index 0000000000000..d5ba5d21cbe29 --- /dev/null +++ b/x-pack/plugins/cases/server/client/observable_types.test.ts @@ -0,0 +1,58 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { Configurations } from '../../common/types/domain/configure/v1'; +import { OBSERVABLE_TYPES_BUILTIN_KEYS } from '../../common/constants'; +import { createCasesClientMock } from './mocks'; +import { getAvailableObservableTypesSet } from './observable_types'; + +const mockCasesClient = createCasesClientMock(); + +describe('getAvailableObservableTypesSet', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('should return a set of available observable types', async () => { + const mockObservableTypes = [ + { key: 'type1', label: 'test 1' }, + { key: 'type2', label: 'test 2' }, + ]; + + jest.mocked(mockCasesClient.configure.get).mockResolvedValue([ + { + observableTypes: mockObservableTypes, + }, + ] as unknown as Configurations); + + const result = await getAvailableObservableTypesSet(mockCasesClient, 'mock-owner'); + + expect(result).toEqual(new Set(['type1', 'type2', ...OBSERVABLE_TYPES_BUILTIN_KEYS])); + }); + + it('should return only built-in observable types if no types are configured', async () => { + jest.mocked(mockCasesClient.configure.get).mockResolvedValue([ + { + observableTypes: [], + }, + ] as unknown as Configurations); + + const result = await getAvailableObservableTypesSet(mockCasesClient, 'mock-owner'); + + expect(result).toEqual(new Set(OBSERVABLE_TYPES_BUILTIN_KEYS)); + }); + + it('should handle errors and return an empty set', async () => { + jest + .mocked(mockCasesClient.configure.get) + .mockRejectedValue(new Error('Failed to fetch configuration')); + + const result = await getAvailableObservableTypesSet(mockCasesClient, 'mock-owner'); + + expect(result).toEqual(new Set()); + }); +}); diff --git a/x-pack/plugins/cases/server/client/observable_types.ts b/x-pack/plugins/cases/server/client/observable_types.ts new file mode 100644 index 0000000000000..a6183fc6833b5 --- /dev/null +++ b/x-pack/plugins/cases/server/client/observable_types.ts @@ -0,0 +1,26 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { OBSERVABLE_TYPES_BUILTIN } from '../../common/constants'; +import type { CasesClient } from './client'; + +export const getAvailableObservableTypesSet = async (casesClient: CasesClient, owner: string) => { + try { + const configurations = await casesClient.configure.get({ + owner, + }); + const observableTypes = configurations?.[0]?.observableTypes ?? []; + + const availableObservableTypesSet = new Set( + [...observableTypes, ...OBSERVABLE_TYPES_BUILTIN].map(({ key }) => key) + ); + + return availableObservableTypesSet; + } catch (error) { + return new Set(); + } +}; diff --git a/x-pack/plugins/cases/server/client/utils.test.ts b/x-pack/plugins/cases/server/client/utils.test.ts index 7b5d692f6aa79..fbb269e20db70 100644 --- a/x-pack/plugins/cases/server/client/utils.test.ts +++ b/x-pack/plugins/cases/server/client/utils.test.ts @@ -5,8 +5,6 @@ * 2.0. */ -import { v1 as uuidv1 } from 'uuid'; - import { DEFAULT_NAMESPACE_STRING } from '@kbn/core-saved-objects-utils-server'; import type { KueryNode } from '@kbn/es-query'; import { toElasticsearchQuery, toKqlExpression } from '@kbn/es-query'; @@ -16,6 +14,7 @@ import { arraysDifference, buildAttachmentRequestFromFileJSON, buildFilter, + buildObservablesFieldsFilter, buildRangeFilter, constructQueryOptions, constructSearch, @@ -497,24 +496,14 @@ describe('utils', () => { [CaseStatuses['in-progress'], CasePersistedStatus.IN_PROGRESS], [CaseStatuses.closed, CasePersistedStatus.CLOSED], ])('creates a filter for status "%s"', (status, expectedStatus) => { - expect(constructQueryOptions({ status }).filter).toMatchInlineSnapshot(` - Object { - "arguments": Array [ - Object { - "isQuoted": false, - "type": "literal", - "value": "cases.attributes.status", - }, - Object { - "isQuoted": false, - "type": "literal", - "value": "${expectedStatus}", - }, - ], - "function": "is", - "type": "function", - } - `); + expect(constructQueryOptions({ status }).filter).toMatchObject({ + arguments: [ + { isQuoted: false, type: 'literal', value: 'cases.attributes.status' }, + { isQuoted: false, type: 'literal', value: `${expectedStatus}` }, + ], + function: 'is', + type: 'function', + }); }); it('should create a filter for multiple status values', () => { @@ -567,24 +556,14 @@ describe('utils', () => { [CaseSeverity.HIGH, CasePersistedSeverity.HIGH], [CaseSeverity.CRITICAL, CasePersistedSeverity.CRITICAL], ])('creates a filter for severity "%s"', (severity, expectedSeverity) => { - expect(constructQueryOptions({ severity }).filter).toMatchInlineSnapshot(` - Object { - "arguments": Array [ - Object { - "isQuoted": false, - "type": "literal", - "value": "cases.attributes.severity", - }, - Object { - "isQuoted": false, - "type": "literal", - "value": "${expectedSeverity}", - }, - ], - "function": "is", - "type": "function", - } - `); + expect(constructQueryOptions({ severity }).filter).toMatchObject({ + arguments: [ + { isQuoted: false, type: 'literal', value: 'cases.attributes.severity' }, + { isQuoted: false, type: 'literal', value: `${expectedSeverity}` }, + ], + function: 'is', + type: 'function', + }); }); it('should create a filter for multiple severity values', () => { @@ -1106,7 +1085,7 @@ describe('utils', () => { const savedObjectsSerializer = createSavedObjectsSerializerMock(); it('returns the rootSearchFields and search with correct values when given a uuid', () => { - const uuid = uuidv1(); // the specific version is irrelevant + const uuid = 'b52e293e-4a37-4e67-9aa6-716bb6e69b42'; // the specific version is irrelevant expect(constructSearch(uuid, DEFAULT_NAMESPACE_STRING, savedObjectsSerializer)) .toMatchInlineSnapshot(` @@ -1114,7 +1093,7 @@ describe('utils', () => { "rootSearchFields": Array [ "_id", ], - "search": "\\"${uuid}\\" \\"cases:${uuid}\\"", + "search": "\\"b52e293e-4a37-4e67-9aa6-716bb6e69b42\\" \\"cases:b52e293e-4a37-4e67-9aa6-716bb6e69b42\\"", } `); }); @@ -1579,6 +1558,62 @@ describe('utils', () => { }); }); + describe('buildObservablesFieldsFilter', () => { + it('builds the filter escaping quotes in the value', () => { + expect(buildObservablesFieldsFilter({ type: ['{"json":"value"}'] })).toMatchInlineSnapshot(` + Object { + "arguments": Array [ + Object { + "isQuoted": false, + "type": "literal", + "value": "cases.attributes.observables", + }, + Object { + "arguments": Array [ + Object { + "arguments": Array [ + Object { + "isQuoted": false, + "type": "literal", + "value": "value", + }, + Object { + "isQuoted": true, + "type": "literal", + "value": "{\\"json\\":\\"value\\"}", + }, + ], + "function": "is", + "type": "function", + }, + Object { + "arguments": Array [ + Object { + "isQuoted": false, + "type": "literal", + "value": "typeKey", + }, + Object { + "isQuoted": true, + "type": "literal", + "value": "type", + }, + ], + "function": "is", + "type": "function", + }, + ], + "function": "and", + "type": "function", + }, + ], + "function": "nested", + "type": "function", + } + `); + }); + }); + describe('buildAttachmentRequestFromFileJSON', () => { it('builds attachment request correctly', () => { expect( diff --git a/x-pack/plugins/cases/server/client/utils.ts b/x-pack/plugins/cases/server/client/utils.ts index 6447b53abd00a..80c2339551b1e 100644 --- a/x-pack/plugins/cases/server/client/utils.ts +++ b/x-pack/plugins/cases/server/client/utils.ts @@ -16,8 +16,10 @@ import type { KueryNode } from '@kbn/es-query'; import { nodeBuilder, fromKueryExpression, escapeKuery } from '@kbn/es-query'; import { spaceIdToNamespace } from '@kbn/spaces-plugin/server/lib/utils/namespace'; +import { escapeQuotes } from '@kbn/es-query/src/kuery/utils/escape_kuery'; import type { FileJSON } from '@kbn/shared-ux-file-types'; import { FILE_SO_TYPE } from '@kbn/files-plugin/common/constants'; + import type { CaseCustomField, CaseSeverity, @@ -665,6 +667,26 @@ export const transformTemplateCustomFields = ({ }); }; +export const buildObservablesFieldsFilter = (observables: Record) => { + // NOTE: empty observables mean that we should not construct the filter and it should lead + // to early return in the calling context (it is required). + if (!Object.keys(observables).length) { + return; + } + + const filterExpressions = Object.keys(observables).flatMap((typeKey) => { + return Object.values(observables[typeKey]).map((observableValue) => { + return fromKueryExpression( + `cases.attributes.observables:{value: "${escapeQuotes( + observableValue + )}" AND typeKey: "${typeKey}"}` + ); + }); + }); + + return nodeBuilder.or(filterExpressions); +}; + export const buildAttachmentRequestFromFileJSON = ({ owner, fileMetadata, diff --git a/x-pack/plugins/cases/server/client/validators.test.ts b/x-pack/plugins/cases/server/client/validators.test.ts index 77867aedbcb4a..869c32cae06e8 100644 --- a/x-pack/plugins/cases/server/client/validators.test.ts +++ b/x-pack/plugins/cases/server/client/validators.test.ts @@ -5,7 +5,14 @@ * 2.0. */ -import { validateDuplicatedKeysInRequest } from './validators'; +import { OBSERVABLE_TYPE_IPV4 } from '../../common/constants'; +import { createCasesClientMock } from './mocks'; +import { + validateDuplicatedKeysInRequest, + validateDuplicatedObservableTypesInRequest, + validateDuplicatedObservablesInRequest, + validateObservableTypeKeyExists, +} from './validators'; describe('validators', () => { describe('validateDuplicatedKeysInRequest', () => { @@ -53,4 +60,164 @@ describe('validators', () => { ).not.toThrow(); }); }); + + describe('validateDuplicatedObservableTypesInRequest', () => { + it('returns fields in request that have duplicated observable types (by labels)', () => { + expect(() => + validateDuplicatedObservableTypesInRequest({ + requestFields: [ + { + label: 'triplicated_label', + key: '3aa53239-a608-4ccd-a69f-cb7d08d0b5cb', + }, + { + label: 'triplicated_label', + key: 'a71629ae-05eb-48d5-a669-bb9f3eec81b6', + }, + { + label: 'triplicated_label', + key: 'd5ff16a2-ead3-4f1d-b888-39376bfad8f2', + }, + { + label: 'duplicated_label', + key: '9774be21-abc7-4aa4-9443-86636fea40bc', + }, + { + label: 'duplicated_label', + key: 'fb638551-3b76-4bd9-8b45-7a86ddcb3b80', + }, + ], + }) + ).toThrowErrorMatchingInlineSnapshot( + `"Invalid duplicated observable types in request: triplicated_label,duplicated_label"` + ); + }); + + it('returns fields in request that have duplicated observable types (by keys)', () => { + expect(() => + validateDuplicatedObservableTypesInRequest({ + requestFields: [ + { + label: 'a', + key: 'triplicated_key', + }, + { + label: 'b', + key: 'triplicated_key', + }, + { + label: 'c', + key: 'triplicated_key', + }, + { + label: 'd', + key: 'duplicated_key', + }, + { + label: 'e', + key: 'duplicated_key', + }, + ], + }) + ).toThrowErrorMatchingInlineSnapshot( + `"Invalid duplicated observable types in request: b,c,e"` + ); + }); + + it('does not throw if no fields in request have duplicated observable types', () => { + expect(() => + validateDuplicatedObservableTypesInRequest({ + requestFields: [ + { + label: '1', + key: '1', + }, + { + label: '2', + key: '2', + }, + ], + }) + ).not.toThrow(); + }); + + it('does throw if the provided label duplicates builtin type', () => { + expect(() => + validateDuplicatedObservableTypesInRequest({ + requestFields: [ + { + label: 'email', + key: 'email', + }, + ], + }) + ).toThrowErrorMatchingInlineSnapshot( + `"Invalid duplicated observable types in request: email"` + ); + }); + }); + + describe('validateDuplicatedObservablesInRequest', () => { + it('returns observables in request that have duplicated labels', () => { + expect(() => + validateDuplicatedObservablesInRequest({ + requestFields: [ + { + value: 'value', + typeKey: 'typeKey', + }, + { + value: 'value', + typeKey: 'typeKey', + }, + ], + }) + ).toThrowErrorMatchingInlineSnapshot(`"Invalid duplicated observables in request."`); + }); + + it('does not throw if no fields in request have duplicated observables', () => { + expect(() => + validateDuplicatedObservablesInRequest({ + requestFields: [ + { + value: 'value', + typeKey: 'typeKey', + }, + { + value: 'value 1', + typeKey: 'typeKey', + }, + { + value: 'value', + typeKey: 'typeKey 2', + }, + ], + }) + ).not.toThrow(); + }); + }); + + describe('validateObservableTypeKeyExists', () => { + const mockCasesClient = createCasesClientMock(); + + it('does not throw if all observable type keys exist', async () => { + await expect( + validateObservableTypeKeyExists(mockCasesClient, { + caseOwner: 'securityFixture', + observableTypeKey: OBSERVABLE_TYPE_IPV4.key, + }) + ).resolves.not.toThrow(); + }); + + it('throws an error if any observable type key does not exist', async () => { + await expect(() => + validateObservableTypeKeyExists(mockCasesClient, { + caseOwner: 'securityFixture', + observableTypeKey: 'random key', + }) + ).rejects.toThrowErrorMatchingInlineSnapshot( + `"Invalid observable type, key does not exist: random key"` + ); + }); + }); }); diff --git a/x-pack/plugins/cases/server/client/validators.ts b/x-pack/plugins/cases/server/client/validators.ts index 24527ac81155b..23f26d2321e78 100644 --- a/x-pack/plugins/cases/server/client/validators.ts +++ b/x-pack/plugins/cases/server/client/validators.ts @@ -6,6 +6,9 @@ */ import Boom from '@hapi/boom'; +import { OBSERVABLE_TYPES_BUILTIN } from '../../common/constants'; +import { type CasesClient } from './client'; +import { getAvailableObservableTypesSet } from './observable_types'; /** * Throws an error if the request has custom fields with duplicated keys. @@ -34,3 +37,93 @@ export const validateDuplicatedKeysInRequest = ({ ); } }; + +/** + * Throws an error if the request has observable types with duplicated labels. + */ +export const validateDuplicatedObservableTypesInRequest = ({ + requestFields = [], +}: { + requestFields?: Array<{ label: string; key: string }>; +}) => { + const extractLabelFromItem = (item: { label: string }) => item.label.toLowerCase(); + const extractKeyFromItem = (item: { key: string }) => item.key.toLowerCase(); + + // NOTE: this prevents adding duplicates for the builtin types + const builtinLabels = OBSERVABLE_TYPES_BUILTIN.map(extractLabelFromItem); + const builtinKeys = OBSERVABLE_TYPES_BUILTIN.map(extractKeyFromItem); + + const uniqueLabels = new Set(builtinLabels); + const uniqueKeys = new Set(builtinKeys); + + const duplicatedLabels = new Set(); + + requestFields.forEach((item) => { + const observableTypeLabel = extractLabelFromItem(item); + const observableTypeKey = extractKeyFromItem(item); + + if (uniqueKeys.has(observableTypeKey)) { + duplicatedLabels.add(observableTypeLabel); + } else { + uniqueKeys.add(observableTypeKey); + } + + if (uniqueLabels.has(observableTypeLabel)) { + duplicatedLabels.add(observableTypeLabel); + } else { + uniqueLabels.add(observableTypeLabel); + } + }); + + if (duplicatedLabels.size > 0) { + throw Boom.badRequest( + `Invalid duplicated observable types in request: ${Array.from(duplicatedLabels.values())}` + ); + } +}; + +/** + * Throws an error if the request has observable types with duplicated labels. + */ +export const validateDuplicatedObservablesInRequest = ({ + requestFields = [], +}: { + requestFields?: Array<{ typeKey: string; value: string }>; +}) => { + const stringifyItem = (item: { value: string; typeKey: string }) => + [item.typeKey, item.value].join(); + + const uniqueObservables = new Set(); + const duplicatedObservables = new Set(); + + requestFields.forEach((item) => { + if (uniqueObservables.has(stringifyItem(item))) { + duplicatedObservables.add(stringifyItem(item)); + } else { + uniqueObservables.add(stringifyItem(item)); + } + }); + + if (duplicatedObservables.size > 0) { + throw Boom.badRequest(`Invalid duplicated observables in request.`); + } +}; + +/** + * Throws an error if observable type key is not valid + */ +export const validateObservableTypeKeyExists = async ( + casesClient: CasesClient, + { + caseOwner, + observableTypeKey, + }: { + caseOwner: string; + observableTypeKey: string; + } +) => { + const observableTypesSet = await getAvailableObservableTypesSet(casesClient, caseOwner); + if (!observableTypesSet.has(observableTypeKey)) { + throw Boom.badRequest(`Invalid observable type, key does not exist: ${observableTypeKey}`); + } +}; diff --git a/x-pack/plugins/cases/server/common/constants.ts b/x-pack/plugins/cases/server/common/constants.ts index e7f2ba1e3ff5b..a57f15e346a78 100644 --- a/x-pack/plugins/cases/server/common/constants.ts +++ b/x-pack/plugins/cases/server/common/constants.ts @@ -38,7 +38,12 @@ export const EXTERNAL_REFERENCE_REF_NAME = 'externalReferenceId'; /** * The name of the licensing feature to notify for feature usage with the licensing plugin */ -export const LICENSING_CASE_ASSIGNMENT_FEATURE = 'Cases user assignment'; +export const LICENSING_CASE_ASSIGNMENT_FEATURE = 'Cases user usage'; + +/** + * The name of the licensing feature to notify for cases feature usage with the licensing plugin + */ +export const LICENSING_CASE_OBSERVABLES_FEATURE = 'Cases observable assignment'; export const SEVERITY_EXTERNAL_TO_ESMODEL: Record = { [CaseSeverity.LOW]: CasePersistedSeverity.LOW, diff --git a/x-pack/plugins/cases/server/common/types/case.test.ts b/x-pack/plugins/cases/server/common/types/case.test.ts index ed7356546e56d..cec16b9293be7 100644 --- a/x-pack/plugins/cases/server/common/types/case.test.ts +++ b/x-pack/plugins/cases/server/common/types/case.test.ts @@ -50,6 +50,7 @@ describe('case types', () => { }, owner: SECURITY_SOLUTION_OWNER, assignees: [], + observables: [], }; const caseTransformedAttributesProps = CaseTransformedAttributesRt.types.reduce( (acc, type) => ({ ...acc, ...type.type.props }), diff --git a/x-pack/plugins/cases/server/common/types/case.ts b/x-pack/plugins/cases/server/common/types/case.ts index 9a9a0e79104e7..b0d82af762438 100644 --- a/x-pack/plugins/cases/server/common/types/case.ts +++ b/x-pack/plugins/cases/server/common/types/case.ts @@ -8,7 +8,7 @@ import type { SavedObject } from '@kbn/core-saved-objects-server'; import type { Type } from 'io-ts'; import { exact, partial, strict, string } from 'io-ts'; -import type { CaseAttributes } from '../../../common/types/domain'; +import type { CaseAttributes, Observable } from '../../../common/types/domain'; import { CaseAttributesRt } from '../../../common/types/domain'; import type { ConnectorPersisted } from './connectors'; import type { ExternalServicePersisted } from './external_service'; @@ -49,6 +49,7 @@ export interface CasePersistedAttributes { updated_by: User | null; category?: string | null; customFields?: CasePersistedCustomFields; + observables?: Observable[]; } type CasePersistedCustomFields = Array<{ diff --git a/x-pack/plugins/cases/server/common/types/configure.ts b/x-pack/plugins/cases/server/common/types/configure.ts index 27e66ba76eb02..630b4020634f5 100644 --- a/x-pack/plugins/cases/server/common/types/configure.ts +++ b/x-pack/plugins/cases/server/common/types/configure.ts @@ -32,8 +32,14 @@ export interface ConfigurationPersistedAttributes { updated_by: User | null; customFields?: PersistedCustomFieldsConfiguration; templates?: PersistedTemplatesConfiguration; + observableTypes?: PersistedObservableTypesConfiguration; } +type PersistedObservableTypesConfiguration = Array<{ + key: string; + label: string; +}>; + type PersistedCustomFieldsConfiguration = Array<{ key: string; type: string; diff --git a/x-pack/plugins/cases/server/common/utils.test.ts b/x-pack/plugins/cases/server/common/utils.test.ts index a12146b30b193..15bcceafc256e 100644 --- a/x-pack/plugins/cases/server/common/utils.test.ts +++ b/x-pack/plugins/cases/server/common/utils.test.ts @@ -150,6 +150,7 @@ describe('common utils', () => { "description": "A description", "duration": null, "external_service": null, + "observables": Array [], "owner": "securitySolution", "settings": Object { "syncAlerts": true, @@ -205,6 +206,7 @@ describe('common utils', () => { "description": "A description", "duration": null, "external_service": null, + "observables": Array [], "owner": "securitySolution", "settings": Object { "syncAlerts": true, @@ -264,6 +266,7 @@ describe('common utils', () => { "description": "A description", "duration": null, "external_service": null, + "observables": Array [], "owner": "securitySolution", "settings": Object { "syncAlerts": true, @@ -329,6 +332,7 @@ describe('common utils', () => { "description": "A description", "duration": null, "external_service": null, + "observables": Array [], "owner": "securitySolution", "settings": Object { "syncAlerts": true, @@ -389,6 +393,7 @@ describe('common utils', () => { "duration": null, "external_service": null, "id": "mock-id-1", + "observables": Array [], "owner": "securitySolution", "settings": Object { "syncAlerts": true, @@ -432,6 +437,7 @@ describe('common utils', () => { "duration": null, "external_service": null, "id": "mock-id-2", + "observables": Array [], "owner": "securitySolution", "settings": Object { "syncAlerts": true, @@ -479,6 +485,7 @@ describe('common utils', () => { "duration": null, "external_service": null, "id": "mock-id-3", + "observables": Array [], "owner": "securitySolution", "settings": Object { "syncAlerts": true, @@ -530,6 +537,7 @@ describe('common utils', () => { "duration": null, "external_service": null, "id": "mock-id-4", + "observables": Array [], "owner": "securitySolution", "settings": Object { "syncAlerts": true, @@ -610,6 +618,7 @@ describe('common utils', () => { "duration": null, "external_service": null, "id": "mock-id-1", + "observables": Array [], "owner": "securitySolution", "settings": Object { "syncAlerts": true, @@ -678,6 +687,7 @@ describe('common utils', () => { "duration": null, "external_service": null, "id": "mock-id-3", + "observables": Array [], "owner": "securitySolution", "settings": Object { "syncAlerts": true, @@ -737,6 +747,7 @@ describe('common utils', () => { "duration": null, "external_service": null, "id": "mock-id-3", + "observables": Array [], "owner": "securitySolution", "settings": Object { "syncAlerts": true, @@ -819,6 +830,7 @@ describe('common utils', () => { "duration": null, "external_service": null, "id": "mock-id-3", + "observables": Array [], "owner": "securitySolution", "settings": Object { "syncAlerts": true, @@ -876,6 +888,7 @@ describe('common utils', () => { "duration": null, "external_service": null, "id": "mock-id-1", + "observables": Array [], "owner": "securitySolution", "settings": Object { "syncAlerts": true, @@ -938,6 +951,7 @@ describe('common utils', () => { "duration": null, "external_service": null, "id": "mock-id-1", + "observables": Array [], "owner": "securitySolution", "settings": Object { "syncAlerts": true, diff --git a/x-pack/plugins/cases/server/common/utils.ts b/x-pack/plugins/cases/server/common/utils.ts index aad86d988705d..0b9852e61cad1 100644 --- a/x-pack/plugins/cases/server/common/utils.ts +++ b/x-pack/plugins/cases/server/common/utils.ts @@ -88,6 +88,7 @@ export const transformNewCase = ({ assignees: dedupAssignees(newCase.assignees) ?? [], category: newCase.category ?? null, customFields: newCase.customFields ?? [], + observables: [], }); export const transformCases = ({ diff --git a/x-pack/plugins/cases/server/mocks.ts b/x-pack/plugins/cases/server/mocks.ts index 637cee85ed84b..d05d949142e6a 100644 --- a/x-pack/plugins/cases/server/mocks.ts +++ b/x-pack/plugins/cases/server/mocks.ts @@ -150,6 +150,7 @@ export const mockCases: CaseSavedObjectTransformed[] = [ title: 'Super Bad Security Issue', status: CaseStatuses.open, tags: ['defacement'], + observables: [], updated_at: '2019-11-25T21:54:48.952Z', updated_by: { full_name: 'elastic', @@ -202,6 +203,7 @@ export const mockCases: CaseSavedObjectTransformed[] = [ settings: { syncAlerts: true, }, + observables: [], owner: SECURITY_SOLUTION_OWNER, assignees: [], category: null, @@ -245,6 +247,7 @@ export const mockCases: CaseSavedObjectTransformed[] = [ settings: { syncAlerts: true, }, + observables: [], owner: SECURITY_SOLUTION_OWNER, assignees: [], category: null, @@ -292,6 +295,7 @@ export const mockCases: CaseSavedObjectTransformed[] = [ settings: { syncAlerts: true, }, + observables: [], owner: SECURITY_SOLUTION_OWNER, assignees: [], category: null, diff --git a/x-pack/plugins/cases/server/plugin.ts b/x-pack/plugins/cases/server/plugin.ts index 5a4bd7b20b9db..d62aa5582ec32 100644 --- a/x-pack/plugins/cases/server/plugin.ts +++ b/x-pack/plugins/cases/server/plugin.ts @@ -38,7 +38,10 @@ import { getInternalRoutes } from './routes/api/get_internal_routes'; import { PersistableStateAttachmentTypeRegistry } from './attachment_framework/persistable_state_registry'; import { ExternalReferenceAttachmentTypeRegistry } from './attachment_framework/external_reference_registry'; import { UserProfileService } from './services'; -import { LICENSING_CASE_ASSIGNMENT_FEATURE } from './common/constants'; +import { + LICENSING_CASE_ASSIGNMENT_FEATURE, + LICENSING_CASE_OBSERVABLES_FEATURE, +} from './common/constants'; import { registerInternalAttachments } from './internal_attachments'; import { registerCaseFileKinds } from './files'; import type { ConfigType } from './config'; @@ -140,6 +143,7 @@ export class CasePlugin }); plugins.licensing.featureUsage.register(LICENSING_CASE_ASSIGNMENT_FEATURE, 'platinum'); + plugins.licensing.featureUsage.register(LICENSING_CASE_OBSERVABLES_FEATURE, 'platinum'); const getCasesClient = async (request: KibanaRequest): Promise => { const [coreStart] = await core.getStartServices(); diff --git a/x-pack/plugins/cases/server/routes/api/cases/similar.ts b/x-pack/plugins/cases/server/routes/api/cases/similar.ts new file mode 100644 index 0000000000000..c1516d7648082 --- /dev/null +++ b/x-pack/plugins/cases/server/routes/api/cases/similar.ts @@ -0,0 +1,48 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { schema } from '@kbn/config-schema'; +import { INTERNAL_CASE_SIMILAR_CASES_URL } from '../../../../common/constants'; +import { createCaseError } from '../../../common/error'; +import { createCasesRoute } from '../create_cases_route'; +import type { caseApiV1 } from '../../../../common/types/api'; + +export const similarCaseRoute = createCasesRoute({ + method: 'post', + path: INTERNAL_CASE_SIMILAR_CASES_URL, + params: { + params: schema.object({ + case_id: schema.string(), + }), + }, + routerOptions: { + access: 'internal', + summary: `Similar cases`, + }, + handler: async ({ context, request, response }) => { + const options = request.body as caseApiV1.SimilarCasesSearchRequest; + const caseId = request.params.case_id; + + try { + const caseContext = await context.cases; + const casesClient = await caseContext.getCasesClient(); + + const res: caseApiV1.CasesSimilarResponse = await casesClient.cases.similar(caseId, { + ...options, + }); + + return response.ok({ + body: res, + }); + } catch (error) { + throw createCaseError({ + message: `Failed to find similar cases in route for case with ID ${caseId}: ${error}`, + error, + }); + } + }, +}); diff --git a/x-pack/plugins/cases/server/routes/api/get_internal_routes.ts b/x-pack/plugins/cases/server/routes/api/get_internal_routes.ts index 79e5189c02f57..63c5953b3ea32 100644 --- a/x-pack/plugins/cases/server/routes/api/get_internal_routes.ts +++ b/x-pack/plugins/cases/server/routes/api/get_internal_routes.ts @@ -20,6 +20,10 @@ import { getCaseMetricRoute } from './internal/get_case_metrics'; import { getCasesMetricRoute } from './internal/get_cases_metrics'; import { searchCasesRoute } from './internal/search_cases'; import { replaceCustomFieldRoute } from './internal/replace_custom_field'; +import { postObservableRoute } from './observables/post_observable'; +import { similarCaseRoute } from './cases/similar'; +import { patchObservableRoute } from './observables/patch_observable'; +import { deleteObservableRoute } from './observables/delete_observable'; export const getInternalRoutes = (userProfileService: UserProfileService) => [ @@ -36,4 +40,8 @@ export const getInternalRoutes = (userProfileService: UserProfileService) => getCasesMetricRoute, searchCasesRoute, replaceCustomFieldRoute, + postObservableRoute, + patchObservableRoute, + deleteObservableRoute, + similarCaseRoute, ] as CaseRoute[]; diff --git a/x-pack/plugins/cases/server/routes/api/observables/delete_observable.ts b/x-pack/plugins/cases/server/routes/api/observables/delete_observable.ts new file mode 100644 index 0000000000000..49f2b27fc0064 --- /dev/null +++ b/x-pack/plugins/cases/server/routes/api/observables/delete_observable.ts @@ -0,0 +1,43 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { schema } from '@kbn/config-schema'; +import { INTERNAL_CASE_OBSERVABLES_DELETE_URL } from '../../../../common/constants'; +import { createCaseError } from '../../../common/error'; +import { createCasesRoute } from '../create_cases_route'; + +export const deleteObservableRoute = createCasesRoute({ + method: 'delete', + path: INTERNAL_CASE_OBSERVABLES_DELETE_URL, + params: { + params: schema.object({ + case_id: schema.string(), + observable_id: schema.string(), + }), + }, + routerOptions: { + access: 'internal', + summary: `Delete a case observable`, + }, + handler: async ({ context, request, response }) => { + try { + const caseContext = await context.cases; + const casesClient = await caseContext.getCasesClient(); + const caseId = request.params.case_id; + const observableId = request.params.observable_id; + + await casesClient.cases.deleteObservable(caseId, observableId); + + return response.noContent(); + } catch (error) { + throw createCaseError({ + message: `Failed to delete observable in route case id: ${request.params.case_id}, observable id: ${request.params.observable_id}: ${error}`, + error, + }); + } + }, +}); diff --git a/x-pack/plugins/cases/server/routes/api/observables/patch_observable.ts b/x-pack/plugins/cases/server/routes/api/observables/patch_observable.ts new file mode 100644 index 0000000000000..49630bb12ded6 --- /dev/null +++ b/x-pack/plugins/cases/server/routes/api/observables/patch_observable.ts @@ -0,0 +1,50 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { schema } from '@kbn/config-schema'; +import { INTERNAL_CASE_OBSERVABLES_PATCH_URL } from '../../../../common/constants'; +import { createCaseError } from '../../../common/error'; +import { createCasesRoute } from '../create_cases_route'; +import type { observableApiV1 } from '../../../../common/types/api'; + +export const patchObservableRoute = createCasesRoute({ + method: 'patch', + path: INTERNAL_CASE_OBSERVABLES_PATCH_URL, + params: { + params: schema.object({ + case_id: schema.string(), + observable_id: schema.string(), + }), + }, + routerOptions: { + access: 'internal', + summary: `Update a case observable`, + }, + handler: async ({ context, request, response }) => { + try { + const caseContext = await context.cases; + const casesClient = await caseContext.getCasesClient(); + const caseId = request.params.case_id; + const observableId = request.params.observable_id; + + const { observable } = request.body as observableApiV1.UpdateObservableRequest; + + const theCase = await casesClient.cases.updateObservable(caseId, observableId, { + observable, + }); + + return response.ok({ + body: theCase, + }); + } catch (error) { + throw createCaseError({ + message: `Failed to patch observable in route case id: ${request.params.case_id}, observable id: ${request.params.observable_id}: ${error}`, + error, + }); + } + }, +}); diff --git a/x-pack/plugins/cases/server/routes/api/observables/post_observable.ts b/x-pack/plugins/cases/server/routes/api/observables/post_observable.ts new file mode 100644 index 0000000000000..6cffa0861bab4 --- /dev/null +++ b/x-pack/plugins/cases/server/routes/api/observables/post_observable.ts @@ -0,0 +1,46 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { schema } from '@kbn/config-schema'; +import { INTERNAL_CASE_OBSERVABLES_URL } from '../../../../common/constants'; +import { createCaseError } from '../../../common/error'; +import { createCasesRoute } from '../create_cases_route'; +import type { observableApiV1 } from '../../../../common/types/api'; + +export const postObservableRoute = createCasesRoute({ + method: 'post', + path: INTERNAL_CASE_OBSERVABLES_URL, + params: { + params: schema.object({ + case_id: schema.string(), + }), + }, + routerOptions: { + access: 'internal', + summary: `Add a case observable`, + description: 'Each case can have a maximum of 10 observables.', + // You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the case you're creating. + }, + handler: async ({ context, request, response }) => { + try { + const caseContext = await context.cases; + const casesClient = await caseContext.getCasesClient(); + const caseId = request.params.case_id; + const { observable } = request.body as observableApiV1.AddObservableRequest; + const theCase = await casesClient.cases.addObservable(caseId, { observable }); + + return response.ok({ + body: theCase, + }); + } catch (error) { + throw createCaseError({ + message: `Failed to post observable in route case id: ${request.params.case_id}: ${error}`, + error, + }); + } + }, +}); diff --git a/x-pack/plugins/cases/server/saved_object_types/cases/cases.ts b/x-pack/plugins/cases/server/saved_object_types/cases/cases.ts index 8e9160604a69d..0cf1905ca0cf4 100644 --- a/x-pack/plugins/cases/server/saved_object_types/cases/cases.ts +++ b/x-pack/plugins/cases/server/saved_object_types/cases/cases.ts @@ -17,7 +17,7 @@ import { CASE_SAVED_OBJECT } from '../../../common/constants'; import type { CasePersistedAttributes } from '../../common/types/case'; import { handleExport } from '../import_export/export'; import { caseMigrations } from '../migrations'; -import { modelVersion1 } from './model_versions'; +import { modelVersion1, modelVersion2 } from './model_versions'; export const createCaseSavedObjectType = ( coreSetup: CoreSetup, @@ -229,11 +229,23 @@ export const createCaseSavedObjectType = ( }, }, }, + observables: { + type: 'nested', + properties: { + typeKey: { + type: 'keyword', + }, + value: { + type: 'keyword', + }, + }, + }, }, }, migrations: caseMigrations, modelVersions: { 1: modelVersion1, + 2: modelVersion2, }, management: { importableAndExportable: true, diff --git a/x-pack/plugins/cases/server/saved_object_types/cases/model_versions.test.ts b/x-pack/plugins/cases/server/saved_object_types/cases/model_versions.test.ts index 2c301709ca5c9..67e89cd9b18b6 100644 --- a/x-pack/plugins/cases/server/saved_object_types/cases/model_versions.test.ts +++ b/x-pack/plugins/cases/server/saved_object_types/cases/model_versions.test.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { modelVersion1 } from './model_versions'; +import { modelVersion1, modelVersion2 } from './model_versions'; describe('Model versions', () => { describe('1', () => { @@ -56,4 +56,27 @@ describe('Model versions', () => { `); }); }); + + describe('2', () => { + expect(modelVersion2.changes).toMatchInlineSnapshot(` + Array [ + Object { + "addedMappings": Object { + "observables": Object { + "properties": Object { + "typeKey": Object { + "type": "keyword", + }, + "value": Object { + "type": "keyword", + }, + }, + "type": "nested", + }, + }, + "type": "mappings_addition", + }, + ] + `); + }); }); diff --git a/x-pack/plugins/cases/server/saved_object_types/cases/model_versions.ts b/x-pack/plugins/cases/server/saved_object_types/cases/model_versions.ts index 7d46789a3b79f..522c51eb8e30f 100644 --- a/x-pack/plugins/cases/server/saved_object_types/cases/model_versions.ts +++ b/x-pack/plugins/cases/server/saved_object_types/cases/model_versions.ts @@ -6,7 +6,7 @@ */ import type { SavedObjectsModelVersion } from '@kbn/core-saved-objects-server'; -import { casesSchemaV1 } from './schemas'; +import { casesSchemaV1, casesSchemaV2 } from './schemas'; /** * Adds custom fields to the cases SO. @@ -59,3 +59,30 @@ export const modelVersion1: SavedObjectsModelVersion = { forwardCompatibility: casesSchemaV1.extends({}, { unknowns: 'ignore' }), }, }; + +/** + * Adds case observables to the cases SO. + */ +export const modelVersion2: SavedObjectsModelVersion = { + changes: [ + { + type: 'mappings_addition', + addedMappings: { + observables: { + type: 'nested', + properties: { + typeKey: { + type: 'keyword', + }, + value: { + type: 'keyword', + }, + }, + }, + }, + }, + ], + schemas: { + forwardCompatibility: casesSchemaV2.extends({}, { unknowns: 'ignore' }), + }, +}; diff --git a/x-pack/plugins/cases/server/saved_object_types/cases/schemas/index.ts b/x-pack/plugins/cases/server/saved_object_types/cases/schemas/index.ts index 85d9239f72dba..a38b3a1134911 100644 --- a/x-pack/plugins/cases/server/saved_object_types/cases/schemas/index.ts +++ b/x-pack/plugins/cases/server/saved_object_types/cases/schemas/index.ts @@ -8,3 +8,4 @@ export * from './latest'; export { casesSchema as casesSchemaV1 } from './v1'; +export { casesSchema as casesSchemaV2 } from './v2'; diff --git a/x-pack/plugins/cases/server/saved_object_types/cases/schemas/latest.ts b/x-pack/plugins/cases/server/saved_object_types/cases/schemas/latest.ts index 25300c97a6d2e..a0841d392cbc1 100644 --- a/x-pack/plugins/cases/server/saved_object_types/cases/schemas/latest.ts +++ b/x-pack/plugins/cases/server/saved_object_types/cases/schemas/latest.ts @@ -5,4 +5,4 @@ * 2.0. */ -export * from './v1'; +export * from './v2'; diff --git a/x-pack/plugins/cases/server/saved_object_types/cases/schemas/v2.ts b/x-pack/plugins/cases/server/saved_object_types/cases/schemas/v2.ts new file mode 100644 index 0000000000000..6368e08a621a7 --- /dev/null +++ b/x-pack/plugins/cases/server/saved_object_types/cases/schemas/v2.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 { schema } from '@kbn/config-schema'; + +import { casesSchema as casesSchemaV1 } from './v1'; + +export const casesSchema = casesSchemaV1.extends({ + observables: schema.maybe( + schema.nullable( + schema.arrayOf( + schema.object({ + id: schema.string(), + createdAt: schema.string(), + updatedAt: schema.nullable(schema.string()), + description: schema.nullable(schema.string()), + typeKey: schema.string(), + value: schema.any(), + }) + ) + ) + ), +}); diff --git a/x-pack/plugins/cases/server/services/cases/index.test.ts b/x-pack/plugins/cases/server/services/cases/index.test.ts index 045701ce77aad..7fea2c6b27548 100644 --- a/x-pack/plugins/cases/server/services/cases/index.test.ts +++ b/x-pack/plugins/cases/server/services/cases/index.test.ts @@ -238,6 +238,7 @@ describe('CasesService', () => { "username": "elastic", }, }, + "observables": Array [], "owner": "securitySolution", "settings": Object { "syncAlerts": true, @@ -314,6 +315,7 @@ describe('CasesService', () => { "customFields": Array [], "description": "This is a brand new case of a bad meanie defacing data", "duration": null, + "observables": Array [], "owner": "securitySolution", "settings": Object { "syncAlerts": true, @@ -838,6 +840,7 @@ describe('CasesService', () => { "username": "elastic", }, }, + "observables": Array [], "owner": "securitySolution", "settings": Object { "syncAlerts": true, @@ -1058,6 +1061,7 @@ describe('CasesService', () => { "description": "This is a brand new case of a bad meanie defacing data", "duration": null, "external_service": null, + "observables": Array [], "owner": "securitySolution", "settings": Object { "syncAlerts": true, @@ -1690,6 +1694,7 @@ describe('CasesService', () => { "username": "elastic", }, }, + "observables": Array [], "owner": "securitySolution", "settings": Object { "syncAlerts": true, @@ -2202,7 +2207,8 @@ describe('CasesService', () => { 'connector', 'external_service', 'category', - 'customFields' + 'customFields', + 'observables' ); describe('getCaseIdsByAlertId', () => { @@ -2302,6 +2308,7 @@ describe('CasesService', () => { "description": "This is a brand new case of a bad meanie defacing data", "duration": null, "external_service": null, + "observables": Array [], "owner": "securitySolution", "settings": Object { "syncAlerts": true, @@ -2404,6 +2411,7 @@ describe('CasesService', () => { "username": "elastic", }, }, + "observables": Array [], "owner": "securitySolution", "settings": Object { "syncAlerts": true, @@ -2497,6 +2505,7 @@ describe('CasesService', () => { "username": "elastic", }, }, + "observables": Array [], "owner": "securitySolution", "settings": Object { "syncAlerts": true, @@ -2590,6 +2599,7 @@ describe('CasesService', () => { "username": "elastic", }, }, + "observables": Array [], "owner": "securitySolution", "settings": Object { "syncAlerts": true, @@ -2696,6 +2706,7 @@ describe('CasesService', () => { "username": "elastic", }, }, + "observables": Array [], "owner": "securitySolution", "settings": Object { "syncAlerts": true, @@ -2752,6 +2763,7 @@ describe('CasesService', () => { "username": "elastic", }, }, + "observables": Array [], "owner": "securitySolution", "settings": Object { "syncAlerts": true, @@ -2854,6 +2866,7 @@ describe('CasesService', () => { "username": "elastic", }, }, + "observables": Array [], "owner": "securitySolution", "settings": Object { "syncAlerts": true, @@ -2972,6 +2985,7 @@ describe('CasesService', () => { "username": "elastic", }, }, + "observables": Array [], "owner": "securitySolution", "settings": Object { "syncAlerts": true, diff --git a/x-pack/plugins/cases/server/services/cases/transform.test.ts b/x-pack/plugins/cases/server/services/cases/transform.test.ts index e6dc9dfb48768..e267263ccb880 100644 --- a/x-pack/plugins/cases/server/services/cases/transform.test.ts +++ b/x-pack/plugins/cases/server/services/cases/transform.test.ts @@ -582,5 +582,49 @@ describe('case transforms', () => { transformSavedObjectToExternalModel(CaseSOResponseWithoutCategory).attributes.category ).toBe('foobar'); }); + + it('returns observables array when it is defined', () => { + const CaseSOResponseWithObservables = createCaseSavedObjectResponse({ + overrides: { + observables: [ + { + id: '27318f00-334b-44b1-b29c-0cfaefbeeb8a', + value: 'test', + typeKey: 'c661b01e-24f5-44aa-a172-d5d219cd1bd4', + createdAt: '2024-11-07', + updatedAt: '2024-11-07', + description: '', + }, + ], + }, + }); + + expect( + transformSavedObjectToExternalModel(CaseSOResponseWithObservables).attributes.observables + ).toMatchInlineSnapshot(` + Array [ + Object { + "createdAt": "2024-11-07", + "description": "", + "id": "27318f00-334b-44b1-b29c-0cfaefbeeb8a", + "typeKey": "c661b01e-24f5-44aa-a172-d5d219cd1bd4", + "updatedAt": "2024-11-07", + "value": "test", + }, + ] + `); + }); + + it('returns observables array when it is not defined', () => { + const CaseSOResponseWithObservables = createCaseSavedObjectResponse({ + overrides: { + observables: undefined, + }, + }); + + expect( + transformSavedObjectToExternalModel(CaseSOResponseWithObservables).attributes.observables + ).toMatchInlineSnapshot(`Array []`); + }); }); }); diff --git a/x-pack/plugins/cases/server/services/cases/transform.ts b/x-pack/plugins/cases/server/services/cases/transform.ts index 10eb6fc292323..beba8be79902f 100644 --- a/x-pack/plugins/cases/server/services/cases/transform.ts +++ b/x-pack/plugins/cases/server/services/cases/transform.ts @@ -181,6 +181,7 @@ export function transformSavedObjectToExternalModel( const customFields = !caseSavedObjectAttributes.customFields ? [] : (caseSavedObjectAttributes.customFields as CaseCustomFields); + const observables = caseSavedObjectAttributes.observables ?? []; return { ...caseSavedObject, @@ -192,6 +193,7 @@ export function transformSavedObjectToExternalModel( external_service: externalService, category, customFields, + observables, }, }; } diff --git a/x-pack/plugins/cases/server/services/configure/index.test.ts b/x-pack/plugins/cases/server/services/configure/index.test.ts index 627263de50849..751a6f4c9a25b 100644 --- a/x-pack/plugins/cases/server/services/configure/index.test.ts +++ b/x-pack/plugins/cases/server/services/configure/index.test.ts @@ -97,6 +97,12 @@ const basicConfigFields = { }, }, ], + observableTypes: [ + { + key: '011c2c4e-794f-4837-8d94-22b07722ab14', + label: 'test observable type', + }, + ], }; const createConfigUpdateParams = (connector?: CaseConnector): Partial => ({ @@ -241,6 +247,12 @@ describe('CaseConfigureService', () => { "type": "text", }, ], + "observableTypes": Array [ + Object { + "key": "011c2c4e-794f-4837-8d94-22b07722ab14", + "label": "test observable type", + }, + ], "owner": "securitySolution", "templates": Array [ Object { @@ -567,6 +579,12 @@ describe('CaseConfigureService', () => { "type": "text", }, ], + "observableTypes": Array [ + Object { + "key": "011c2c4e-794f-4837-8d94-22b07722ab14", + "label": "test observable type", + }, + ], "owner": "securitySolution", "templates": Array [ Object { diff --git a/x-pack/plugins/cases/server/services/configure/index.ts b/x-pack/plugins/cases/server/services/configure/index.ts index f50ac271bc4ff..1eadc2a258d28 100644 --- a/x-pack/plugins/cases/server/services/configure/index.ts +++ b/x-pack/plugins/cases/server/services/configure/index.ts @@ -232,6 +232,11 @@ function transformToExternalModel( ? [] : (configuration.attributes.templates as ConfigurationTransformedAttributes['templates']); + const observableTypes = !configuration.attributes.observableTypes + ? [] + : (configuration.attributes + .observableTypes as ConfigurationTransformedAttributes['observableTypes']); + return { ...configuration, attributes: { @@ -239,6 +244,7 @@ function transformToExternalModel( connector, customFields, templates, + observableTypes, }, }; } diff --git a/x-pack/plugins/cases/server/services/test_utils.ts b/x-pack/plugins/cases/server/services/test_utils.ts index cd0f16d66e4cb..c37fe87ee7088 100644 --- a/x-pack/plugins/cases/server/services/test_utils.ts +++ b/x-pack/plugins/cases/server/services/test_utils.ts @@ -165,6 +165,7 @@ export const basicCaseFields: CaseAttributes = { assignees: [], category: null, customFields: [], + observables: [], }; export const createCaseSavedObjectResponse = ({ diff --git a/x-pack/test/cases_api_integration/common/lib/api/configuration.ts b/x-pack/test/cases_api_integration/common/lib/api/configuration.ts index 09f828c44dd73..e898082134b43 100644 --- a/x-pack/test/cases_api_integration/common/lib/api/configuration.ts +++ b/x-pack/test/cases_api_integration/common/lib/api/configuration.ts @@ -56,6 +56,7 @@ export const getConfigurationOutput = (update = false, overwrite = {}): Partial< created_by: { email: null, full_name: null, username: 'elastic' }, updated_by: update ? { email: null, full_name: null, username: 'elastic' } : null, customFields: [], + observableTypes: [], ...overwrite, }; }; diff --git a/x-pack/test/cases_api_integration/common/lib/api/index.ts b/x-pack/test/cases_api_integration/common/lib/api/index.ts index 59d91a388f6ea..5b174cc406f60 100644 --- a/x-pack/test/cases_api_integration/common/lib/api/index.ts +++ b/x-pack/test/cases_api_integration/common/lib/api/index.ts @@ -25,6 +25,7 @@ import { CASE_USER_ACTION_SAVED_OBJECT, INTERNAL_CASE_METRICS_URL, INTERNAL_GET_CASE_CATEGORIES_URL, + INTERNAL_CASE_SIMILAR_CASES_URL, } from '@kbn/cases-plugin/common/constants'; import { CaseMetricsFeature } from '@kbn/cases-plugin/common'; import type { SingleCaseMetricsResponse, CasesMetricsResponse } from '@kbn/cases-plugin/common'; @@ -40,6 +41,8 @@ import { CaseCustomField, } from '@kbn/cases-plugin/common/types/domain'; import { + AddObservableRequest, + UpdateObservableRequest, AlertResponse, CaseResolveResponse, CasesBulkGetResponse, @@ -48,7 +51,14 @@ import { CasesStatusResponse, CustomFieldPutRequest, GetRelatedCasesByAlertResponse, + SimilarCasesSearchRequest, + CasesSimilarResponse, } from '@kbn/cases-plugin/common/types/api'; +import { + getCaseCreateObservableUrl, + getCaseUpdateObservableUrl, + getCaseDeleteObservableUrl, +} from '@kbn/cases-plugin/common/api'; import { User } from '../authentication/types'; import { superUser } from '../authentication/users'; import { getSpaceUrlPrefix, setupAuth } from './helpers'; @@ -846,3 +856,122 @@ export const replaceCustomField = async ({ return theCustomField; }; + +export const addObservable = async ({ + supertest, + params, + expectedHttpCode = 200, + auth = { user: superUser, space: null }, + headers = {}, + caseId, +}: { + supertest: SuperTest.Agent; + params: AddObservableRequest; + expectedHttpCode?: number; + auth?: { user: User; space: string | null } | null; + headers?: Record; + caseId: string; +}): Promise => { + const apiCall = supertest.post( + `${getSpaceUrlPrefix(auth?.space)}${getCaseCreateObservableUrl(caseId)}` + ); + + void setupAuth({ apiCall, headers, auth }); + + const { body: updatedCase } = await apiCall + .set('kbn-xsrf', 'true') + .set('x-elastic-internal-origin', 'foo') + .set(headers) + .send(params) + .expect(expectedHttpCode); + + return updatedCase; +}; + +export const updateObservable = async ({ + supertest, + params, + expectedHttpCode = 200, + auth = { user: superUser, space: null }, + headers = {}, + caseId, + observableId, +}: { + supertest: SuperTest.Agent; + params: UpdateObservableRequest; + expectedHttpCode?: number; + auth?: { user: User; space: string | null } | null; + headers?: Record; + caseId: string; + observableId: string; +}): Promise => { + const apiCall = supertest.patch( + `${getSpaceUrlPrefix(auth?.space)}${getCaseUpdateObservableUrl(caseId, observableId)}` + ); + void setupAuth({ apiCall, headers, auth }); + + const { body: updatedCase } = await apiCall + .set('kbn-xsrf', 'true') + .set('x-elastic-internal-origin', 'foo') + .set(headers) + .send(params) + .expect(expectedHttpCode); + + return updatedCase; +}; + +export const deleteObservable = async ({ + supertest, + expectedHttpCode = 200, + auth = { user: superUser, space: null }, + headers = {}, + caseId, + observableId, +}: { + supertest: SuperTest.Agent; + expectedHttpCode?: number; + auth?: { user: User; space: string | null } | null; + headers?: Record; + caseId: string; + observableId: string; +}): Promise => { + const apiCall = supertest.delete( + `${getSpaceUrlPrefix(auth?.space)}${getCaseDeleteObservableUrl(caseId, observableId)}` + ); + void setupAuth({ apiCall, headers, auth }); + + await apiCall + .set('kbn-xsrf', 'true') + .set('x-elastic-internal-origin', 'foo') + .set(headers) + .send() + .expect(expectedHttpCode); +}; + +export const similarCases = async ({ + supertest, + body, + expectedHttpCode = 200, + auth = { user: superUser, space: null }, + caseId, +}: { + supertest: SuperTest.Agent; + body: SimilarCasesSearchRequest; + expectedHttpCode?: number; + auth?: { user: User; space: string | null }; + caseId: string; +}): Promise => { + const { body: res } = await supertest + .post( + `${getSpaceUrlPrefix(auth.space)}${INTERNAL_CASE_SIMILAR_CASES_URL.replace( + '{case_id}', + caseId + )}` + ) + .auth(auth.user.username, auth.user.password) + .set('kbn-xsrf', 'true') + .send({ ...body }) + .expect(expectedHttpCode); + + return res; +}; diff --git a/x-pack/test/cases_api_integration/common/lib/mock.ts b/x-pack/test/cases_api_integration/common/lib/mock.ts index 2461cded5aeaa..b027cab5298be 100644 --- a/x-pack/test/cases_api_integration/common/lib/mock.ts +++ b/x-pack/test/cases_api_integration/common/lib/mock.ts @@ -183,6 +183,7 @@ export const postCaseResp = ( updated_by: null, category: null, customFields: [], + observables: [], }); interface CommentRequestWithID { diff --git a/x-pack/test/cases_api_integration/security_and_spaces/tests/common/cases/migrations.ts b/x-pack/test/cases_api_integration/security_and_spaces/tests/common/cases/migrations.ts index 0a3bd5ab1519d..b0979759e7072 100644 --- a/x-pack/test/cases_api_integration/security_and_spaces/tests/common/cases/migrations.ts +++ b/x-pack/test/cases_api_integration/security_and_spaces/tests/common/cases/migrations.ts @@ -128,6 +128,7 @@ export default function createGetTests({ getService }: FtrProviderContext) { totalComment: 1, updated_at: null, updated_by: null, + observables: [], }); }); }); diff --git a/x-pack/test/cases_api_integration/security_and_spaces/tests/common/configure/patch_configure.ts b/x-pack/test/cases_api_integration/security_and_spaces/tests/common/configure/patch_configure.ts index 1e3d69d28d7fe..fb627b41c9d5a 100644 --- a/x-pack/test/cases_api_integration/security_and_spaces/tests/common/configure/patch_configure.ts +++ b/x-pack/test/cases_api_integration/security_and_spaces/tests/common/configure/patch_configure.ts @@ -98,6 +98,50 @@ export default ({ getService }: FtrProviderContext): void => { expect(data).to.eql({ ...getConfigurationOutput(true), customFields }); }); + it('should patch a configuration with observableTypes', async () => { + const observableTypes = [ + { + key: '50d4d08c-12b4-4055-a343-b303e0ab3724', + label: 'type 1', + }, + ] as ConfigurationPatchRequest['observableTypes']; + const configuration = await createConfiguration(supertest); + expect(configuration.observableTypes.length).to.be(0); + + const updatedConfiguration = await updateConfiguration(supertest, configuration.id, { + version: configuration.version, + observableTypes, + }); + + expect(updatedConfiguration.observableTypes.length).to.be.greaterThan(0); + expect(updatedConfiguration.observableTypes[0].key).to.equal(observableTypes?.[0].key); + expect(updatedConfiguration.observableTypes[0].label).to.equal(observableTypes?.[0].label); + }); + + it('should not patch a configuration with duplicated observableTypes', async () => { + const observableTypes = [ + { + key: '50d4d08c-12b4-4055-a343-b303e0ab3724', + label: 'duplicate', + }, + { + key: 'fc3ff698-589a-44fd-bbc4-ffaa0b7211f7', + label: 'duplicate', + }, + ] as ConfigurationPatchRequest['observableTypes']; + const configuration = await createConfiguration(supertest); + + await updateConfiguration( + supertest, + configuration.id, + { + version: configuration.version, + observableTypes, + }, + 400 + ); + }); + it('should update mapping when changing connector', async () => { const configuration = await createConfiguration(supertest); await updateConfiguration(supertest, configuration.id, { diff --git a/x-pack/test/cases_api_integration/security_and_spaces/tests/trial/connectors/cases/cases_connector.ts b/x-pack/test/cases_api_integration/security_and_spaces/tests/trial/connectors/cases/cases_connector.ts index 6d4a095a5da02..ddf58f33bd40c 100644 --- a/x-pack/test/cases_api_integration/security_and_spaces/tests/trial/connectors/cases/cases_connector.ts +++ b/x-pack/test/cases_api_integration/security_and_spaces/tests/trial/connectors/cases/cases_connector.ts @@ -342,6 +342,7 @@ export default ({ getService }: FtrProviderContext): void => { full_name: null, username: 'elastic', }, + observables: [], }); }); @@ -454,6 +455,7 @@ export default ({ getService }: FtrProviderContext): void => { full_name: null, username: 'elastic', }, + observables: [], }); }); @@ -831,6 +833,7 @@ export default ({ getService }: FtrProviderContext): void => { full_name: null, username: 'elastic', }, + observables: [], }); expect(secondCase).to.eql({ @@ -878,6 +881,7 @@ export default ({ getService }: FtrProviderContext): void => { full_name: null, username: 'elastic', }, + observables: [], }); }); @@ -1415,6 +1419,7 @@ const createCaseWithId = async ({ external_service: null, total_alerts: 0, total_comments: 0, + observables: [], }, overwrite: false, }); diff --git a/x-pack/test/cases_api_integration/security_and_spaces/tests/trial/index.ts b/x-pack/test/cases_api_integration/security_and_spaces/tests/trial/index.ts index 3112dfab7ec66..2b3c282ad6c2b 100644 --- a/x-pack/test/cases_api_integration/security_and_spaces/tests/trial/index.ts +++ b/x-pack/test/cases_api_integration/security_and_spaces/tests/trial/index.ts @@ -38,6 +38,8 @@ export default ({ loadTestFile, getService }: FtrProviderContext): void => { loadTestFile(require.resolve('./delete_sub_privilege')); loadTestFile(require.resolve('./create_comment_sub_privilege.ts')); loadTestFile(require.resolve('./user_profiles/get_current')); + // case observables are only available with a license above basic + loadTestFile(require.resolve('./internal/observables')); // Internal routes loadTestFile(require.resolve('./internal/get_user_action_stats')); diff --git a/x-pack/test/cases_api_integration/security_and_spaces/tests/trial/internal/observables.ts b/x-pack/test/cases_api_integration/security_and_spaces/tests/trial/internal/observables.ts new file mode 100644 index 0000000000000..6945711b0d148 --- /dev/null +++ b/x-pack/test/cases_api_integration/security_and_spaces/tests/trial/internal/observables.ts @@ -0,0 +1,223 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license 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 { OBSERVABLE_TYPE_IPV4 } from '@kbn/cases-plugin/common/constants'; +import { secOnly } from '../../../../common/lib/authentication/users'; +import { getPostCaseRequest } from '../../../../common/lib/mock'; +import { + createCase, + deleteAllCaseItems, + addObservable, + updateObservable, + deleteObservable, + getCase, +} from '../../../../common/lib/api'; + +import { FtrProviderContext } from '../../../../common/ftr_provider_context'; + +// eslint-disable-next-line import/no-default-export +export default ({ getService }: FtrProviderContext): void => { + const es = getService('es'); + const supertest = getService('supertest'); + + describe('observables', () => { + afterEach(async () => { + await deleteAllCaseItems(es); + }); + + describe('add observable to a case', () => { + it('can add an observable to a case', async () => { + const postedCase = await createCase(supertest, getPostCaseRequest()); + expect(postedCase.observables).to.eql([]); + + const newObservableData = { + value: '127.0.0.1', + typeKey: OBSERVABLE_TYPE_IPV4.key, + description: '', + }; + + const updatedCase = await addObservable({ + supertest, + caseId: postedCase.id, + params: { + observable: newObservableData, + }, + }); + + expect(updatedCase.observables.length).to.be.greaterThan(0); + }); + + it('returns bad request when using unknown observable type', async () => { + const postedCase = await createCase(supertest, getPostCaseRequest()); + expect(postedCase.observables).to.eql([]); + + const newObservableData = { + value: 'test', + typeKey: 'unknown type', + description: '', + }; + + await addObservable({ + supertest, + caseId: postedCase.id, + params: { + observable: newObservableData, + }, + expectedHttpCode: 400, + }); + }); + }); + + describe('update observable', () => { + it('updates an observable on a case', async () => { + const postedCase = await createCase(supertest, getPostCaseRequest()); + + const newObservableData = { + value: '127.0.0.1', + typeKey: OBSERVABLE_TYPE_IPV4.key, + description: '', + }; + + const { + observables: [observable], + } = await addObservable({ + supertest, + caseId: postedCase.id, + params: { + observable: newObservableData, + }, + }); + + const updatedObservable = await updateObservable({ + supertest, + params: { observable: { description: '', value: '192.168.68.1' } }, + caseId: postedCase.id, + observableId: observable.id as string, + }); + + expect(updatedObservable.observables[0].value).to.be('192.168.68.1'); + }); + }); + + describe('delete observable', () => { + it('deletes an observable on a case', async () => { + const postedCase = await createCase(supertest, getPostCaseRequest()); + + const newObservableData = { + value: '127.0.0.1', + typeKey: OBSERVABLE_TYPE_IPV4.key, + description: '', + }; + + const { + observables: [observable], + } = await addObservable({ + supertest, + caseId: postedCase.id, + params: { + observable: newObservableData, + }, + }); + + await deleteObservable({ + supertest, + caseId: postedCase.id, + observableId: observable.id as string, + expectedHttpCode: 204, + }); + + const { observables } = await getCase({ supertest, caseId: postedCase.id }); + + expect(observables.length).to.be(0); + }); + }); + + describe('rbac', () => { + const supertestWithoutAuth = getService('supertestWithoutAuth'); + + it('should not allow creating observables without permissions', async () => { + const postedCase = await createCase(supertest, getPostCaseRequest()); + expect(postedCase.observables).to.eql([]); + + const newObservableData = { + value: '127.0.0.1', + typeKey: OBSERVABLE_TYPE_IPV4.key, + description: '', + }; + + await addObservable({ + supertest: supertestWithoutAuth, + caseId: postedCase.id, + params: { + observable: newObservableData, + }, + auth: { user: secOnly, space: null }, + expectedHttpCode: 403, + }); + }); + + it('should not allow deleting an observable without permissions', async () => { + const postedCase = await createCase(supertest, getPostCaseRequest()); + + const newObservableData = { + value: '127.0.0.1', + typeKey: OBSERVABLE_TYPE_IPV4.key, + description: '', + }; + + const { + observables: [observable], + } = await addObservable({ + supertest, + caseId: postedCase.id, + params: { + observable: newObservableData, + }, + }); + + await deleteObservable({ + supertest: supertestWithoutAuth, + caseId: postedCase.id, + observableId: observable.id as string, + auth: { user: secOnly, space: null }, + expectedHttpCode: 403, + }); + }); + + it('should not allow updating an observable without premissions', async () => { + const postedCase = await createCase(supertest, getPostCaseRequest()); + + const newObservableData = { + value: '127.0.0.1', + typeKey: OBSERVABLE_TYPE_IPV4.key, + description: '', + }; + + const { + observables: [observable], + } = await addObservable({ + supertest, + caseId: postedCase.id, + params: { + observable: newObservableData, + }, + }); + + await updateObservable({ + supertest: supertestWithoutAuth, + params: { observable: { description: '', value: '192.168.68.1' } }, + caseId: postedCase.id, + observableId: observable.id as string, + auth: { user: secOnly, space: null }, + expectedHttpCode: 403, + }); + }); + }); + }); +}; diff --git a/x-pack/test/cases_api_integration/security_and_spaces/tests/trial/internal/similar_cases.ts b/x-pack/test/cases_api_integration/security_and_spaces/tests/trial/internal/similar_cases.ts new file mode 100644 index 0000000000000..2430e70dba6c6 --- /dev/null +++ b/x-pack/test/cases_api_integration/security_and_spaces/tests/trial/internal/similar_cases.ts @@ -0,0 +1,152 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license 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 { OBSERVABLE_TYPES_BUILTIN } from '@kbn/cases-plugin/common/constants'; +import { getPostCaseRequest } from '../../../../common/lib/mock'; +import { + createCase, + deleteAllCaseItems, + addObservable, + similarCases, +} from '../../../../common/lib/api'; + +import { FtrProviderContext } from '../../../../common/ftr_provider_context'; + +// eslint-disable-next-line import/no-default-export +export default ({ getService }: FtrProviderContext): void => { + const es = getService('es'); + const supertest = getService('supertest'); + + describe('similar case', () => { + afterEach(async () => { + await deleteAllCaseItems(es); + }); + + describe('shows similar cases', () => { + it('returns cases similar to given case', async () => { + const [caseA, caseB] = await Promise.all([ + createCase(supertest, getPostCaseRequest()), + createCase(supertest, getPostCaseRequest()), + createCase(supertest, getPostCaseRequest()), + ]); + + const newObservableData = { + value: 'value', + typeKey: OBSERVABLE_TYPES_BUILTIN[0].key, + description: '', + }; + + const { cases } = await similarCases({ + supertest, + body: { perPage: 10, page: 1 }, + caseId: caseA.id, + }); + expect(cases.length).to.be(0); + + await addObservable({ + supertest, + caseId: caseA.id, + params: { + observable: newObservableData, + }, + }); + + await addObservable({ + supertest, + caseId: caseB.id, + params: { + observable: newObservableData, + }, + }); + + const { cases: casesSimilarToA } = await similarCases({ + supertest, + body: { perPage: 10, page: 1 }, + caseId: caseA.id, + }); + + expect(casesSimilarToA.length).to.be(1); + + const { cases: casesSimilarToB } = await similarCases({ + supertest, + body: { perPage: 10, page: 1 }, + caseId: caseB.id, + }); + + expect(casesSimilarToB.length).to.be(1); + }); + + it('does not return cases similar to given case if the owner does not match', async () => { + const [caseA, caseB] = await Promise.all([ + createCase(supertest, { ...getPostCaseRequest(), owner: 'observabilityFixture' }), + createCase(supertest, getPostCaseRequest()), + createCase(supertest, getPostCaseRequest()), + ]); + + const newObservableData = { + value: 'value', + typeKey: OBSERVABLE_TYPES_BUILTIN[0].key, + description: '', + }; + + const { cases } = await similarCases({ + supertest, + body: { perPage: 10, page: 1 }, + caseId: caseA.id, + }); + expect(cases.length).to.be(0); + + await addObservable({ + supertest, + caseId: caseA.id, + params: { + observable: newObservableData, + }, + }); + + await addObservable({ + supertest, + caseId: caseB.id, + params: { + observable: newObservableData, + }, + }); + + const { cases: casesSimilarToA } = await similarCases({ + supertest, + body: { perPage: 10, page: 1 }, + caseId: caseA.id, + }); + + expect(casesSimilarToA.length).to.be(0); + + const { cases: casesSimilarToB } = await similarCases({ + supertest, + body: { perPage: 10, page: 1 }, + caseId: caseB.id, + }); + + expect(casesSimilarToB.length).to.be(0); + }); + }); + + describe('rbac', () => { + const supertestWithoutAuth = getService('supertestWithoutAuth'); + + it('should not getting similar cases without permissions', async () => { + await similarCases({ + supertest: supertestWithoutAuth, + body: { perPage: 10, page: 1 }, + caseId: 'mock-case-id', + expectedHttpCode: 403, + }); + }); + }); + }); +}; diff --git a/x-pack/test/security_solution_cypress/cypress/objects/case.ts b/x-pack/test/security_solution_cypress/cypress/objects/case.ts index 59ec7dccefa99..a0192df069471 100644 --- a/x-pack/test/security_solution_cypress/cypress/objects/case.ts +++ b/x-pack/test/security_solution_cypress/cypress/objects/case.ts @@ -103,6 +103,7 @@ export const getCaseResponse = (): Case => ({ totalAlerts: 0, version: 'test-version', category: null, + observables: [], }); export const getServiceNowConnector = (): Connector => ({ diff --git a/x-pack/test_serverless/api_integration/services/svl_cases/api.ts b/x-pack/test_serverless/api_integration/services/svl_cases/api.ts index 6886c894c1110..2e3cdab5a48cc 100644 --- a/x-pack/test_serverless/api_integration/services/svl_cases/api.ts +++ b/x-pack/test_serverless/api_integration/services/svl_cases/api.ts @@ -113,6 +113,7 @@ export function SvlCasesApiServiceProvider({ getService }: FtrProviderContext) { updated_by: null, category: null, customFields: [], + observables: [], }; }, From 1df66ad4c709709f7b27dccb05375e84e9bb13a4 Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Tue, 24 Dec 2024 01:05:43 +1100 Subject: [PATCH 07/35] Unauthorized route migration for routes owned by response-ops (#198336) ### Authz API migration for unauthorized routes This PR migrates unauthorized routes owned by your team to a new security configuration. Please refer to the documentation for more information: [Authorization API](https://docs.elastic.dev/kibana-dev-docs/key-concepts/security-api-authorization) ### **Before migration:** ```ts router.get({ path: '/api/path', ... }, handler); ``` ### **After migration:** ```ts router.get({ path: '/api/path', security: { authz: { enabled: false, reason: 'This route is opted out from authorization because ...', }, }, ... }, handler); ``` ### What to do next? 1. Review the changes in this PR. 2. Elaborate on the reasoning to opt-out of authorization. 3. Routes without a compelling reason to opt-out of authorization should plan to introduce them as soon as possible. 2. You might need to update your tests to reflect the new security configuration: - If you have snapshot tests that include the route definition. ## Any questions? If you have any questions or need help with API authorization, please reach out to the `@elastic/kibana-security` team. --------- Co-authored-by: adcoelho --- .../server/routes/background_task_utilization.ts | 7 +++++++ x-pack/plugins/task_manager/server/routes/health.ts | 8 ++++++++ x-pack/plugins/task_manager/server/routes/metrics.ts | 7 +++++++ .../triggers_actions_ui/server/data/routes/fields.ts | 7 +++++++ .../triggers_actions_ui/server/data/routes/indices.ts | 7 +++++++ .../server/data/routes/time_series_query.ts | 7 +++++++ 6 files changed, 43 insertions(+) diff --git a/x-pack/plugins/task_manager/server/routes/background_task_utilization.ts b/x-pack/plugins/task_manager/server/routes/background_task_utilization.ts index 43cc2a69fe11c..58c89a5bc8740 100644 --- a/x-pack/plugins/task_manager/server/routes/background_task_utilization.ts +++ b/x-pack/plugins/task_manager/server/routes/background_task_utilization.ts @@ -111,6 +111,13 @@ export function backgroundTaskUtilizationRoute( router.get( { path: `/${routeOption.basePath}/task_manager/_background_task_utilization`, + security: { + authz: { + enabled: false, + reason: + 'This route is opted out from authorization. It can be accessed with JWT credentials.', + }, + }, // Uncomment when we determine that we can restrict API usage to Global admins based on telemetry // options: { tags: ['access:taskManager'] }, validate: false, diff --git a/x-pack/plugins/task_manager/server/routes/health.ts b/x-pack/plugins/task_manager/server/routes/health.ts index 7bcebfabdca60..694bcef1dc053 100644 --- a/x-pack/plugins/task_manager/server/routes/health.ts +++ b/x-pack/plugins/task_manager/server/routes/health.ts @@ -139,6 +139,14 @@ export function healthRoute(params: HealthRouteParams): { router.get( { path: '/api/task_manager/_health', + security: { + authz: { + enabled: false, + // https://github.com/elastic/kibana/issues/136157 + reason: + 'This route is opted out from authorization. Authorization is planned but not implemented yet(breaking change).', + }, + }, // Uncomment when we determine that we can restrict API usage to Global admins based on telemetry // options: { tags: ['access:taskManager'] }, validate: false, diff --git a/x-pack/plugins/task_manager/server/routes/metrics.ts b/x-pack/plugins/task_manager/server/routes/metrics.ts index 808675f25818b..bd2b912fe9469 100644 --- a/x-pack/plugins/task_manager/server/routes/metrics.ts +++ b/x-pack/plugins/task_manager/server/routes/metrics.ts @@ -48,6 +48,13 @@ export function metricsRoute(params: MetricsRouteParams) { router.get( { path: `/api/task_manager/metrics`, + security: { + authz: { + enabled: false, + reason: + 'This route is opted out from authorization. It can be accessed with JWT credentials.', + }, + }, options: { access: 'public', // The `security:acceptJWT` tag allows route to be accessed with JWT credentials. It points to diff --git a/x-pack/plugins/triggers_actions_ui/server/data/routes/fields.ts b/x-pack/plugins/triggers_actions_ui/server/data/routes/fields.ts index 677d90066f182..a5bd9931aae12 100644 --- a/x-pack/plugins/triggers_actions_ui/server/data/routes/fields.ts +++ b/x-pack/plugins/triggers_actions_ui/server/data/routes/fields.ts @@ -29,6 +29,13 @@ export function createFieldsRoute(logger: Logger, router: IRouter, baseRoute: st router.post( { path, + security: { + authz: { + enabled: false, + reason: + 'This route is opted out of authorization as it relies on ES authorization instead.', + }, + }, validate: { body: bodySchema, }, diff --git a/x-pack/plugins/triggers_actions_ui/server/data/routes/indices.ts b/x-pack/plugins/triggers_actions_ui/server/data/routes/indices.ts index ddca5d8f1dd6b..2e42016659d88 100644 --- a/x-pack/plugins/triggers_actions_ui/server/data/routes/indices.ts +++ b/x-pack/plugins/triggers_actions_ui/server/data/routes/indices.ts @@ -33,6 +33,13 @@ export function createIndicesRoute(logger: Logger, router: IRouter, baseRoute: s router.post( { path, + security: { + authz: { + enabled: false, + reason: + 'This route is opted out of authorization as it relies on ES authorization instead.', + }, + }, validate: { body: bodySchema, }, diff --git a/x-pack/plugins/triggers_actions_ui/server/data/routes/time_series_query.ts b/x-pack/plugins/triggers_actions_ui/server/data/routes/time_series_query.ts index f549e46576939..956631a1d2726 100644 --- a/x-pack/plugins/triggers_actions_ui/server/data/routes/time_series_query.ts +++ b/x-pack/plugins/triggers_actions_ui/server/data/routes/time_series_query.ts @@ -28,6 +28,13 @@ export function createTimeSeriesQueryRoute( router.post( { path, + security: { + authz: { + enabled: false, + reason: + 'This route is opted out of authorization as it relies on ES authorization instead.', + }, + }, validate: { body: TimeSeriesQuerySchema, }, From 19f24b31d9dec5ec6d6c97a9bcbcd26657f181e8 Mon Sep 17 00:00:00 2001 From: Gerard Soldevila Date: Mon, 23 Dec 2024 15:17:44 +0100 Subject: [PATCH 08/35] SKA: Relocate script 6.1 (#205086) ## Summary * Exclude example modules from relocation. * Add an extra path transform to simplify packages folders. --- packages/kbn-relocate/relocate.ts | 6 ++++-- packages/kbn-relocate/utils/transforms.ts | 2 ++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/kbn-relocate/relocate.ts b/packages/kbn-relocate/relocate.ts index a96c58629bab7..f9ead5f815736 100644 --- a/packages/kbn-relocate/relocate.ts +++ b/packages/kbn-relocate/relocate.ts @@ -110,11 +110,13 @@ const findModules = ({ teams, paths, included, excluded }: FindModulesParams, lo .filter(({ manifest }) => !manifest.devOnly) // explicit exclusions .filter(({ id }) => !EXCLUDED_MODULES.includes(id) && !excluded.includes(id)) - // we don't want to move test modules (just yet) + // we don't want to move test and example modules (just yet) .filter( ({ directory }) => !directory.includes(`/${KIBANA_FOLDER}/test/`) && - !directory.includes(`/${KIBANA_FOLDER}/x-pack/test/`) + !directory.includes(`/${KIBANA_FOLDER}/x-pack/test/`) && + !directory.includes(`/${KIBANA_FOLDER}/examples/`) && + !directory.includes(`/${KIBANA_FOLDER}/x-pack/examples/`) ) // the module is under the umbrella specified by the user .filter( diff --git a/packages/kbn-relocate/utils/transforms.ts b/packages/kbn-relocate/utils/transforms.ts index ed584abeb55ab..267d570169d67 100644 --- a/packages/kbn-relocate/utils/transforms.ts +++ b/packages/kbn-relocate/utils/transforms.ts @@ -14,6 +14,8 @@ const TRANSFORMS: Record = { 'x-pack/solutions/security/packages/security-solution/': 'x-pack/solutions/security/packages/', 'x-pack/solutions/observability/plugins/observability_solution/': 'x-pack/solutions/observability/plugins/', + 'x-pack/solutions/observability/packages/observability/observability_utils/observability_': + 'x-pack/solutions/observability/packages/', 'x-pack/solutions/observability/packages/observability/': 'x-pack/solutions/observability/packages/', 'src/core/packages/core/': (path: string) => { From de1064e10363203fbf58ff9c479d40c0cb5b2c23 Mon Sep 17 00:00:00 2001 From: Georgii Gorbachev Date: Mon, 23 Dec 2024 16:27:46 +0100 Subject: [PATCH 09/35] [Security Solution] Fix prebuilt rules bootstrap endpoint (#205060) **Fixes: https://github.com/elastic/kibana/issues/203471** ## Summary The `xpack.securitySolution.prebuiltRulesPackageVersion` config setting now only affects the version of the prebuilt rules package. The bootstrap endpoint always installs the latest version of the `endpoint` package. ```yaml xpack.securitySolution.prebuiltRulesPackageVersion: 8.16.2-beta.1 ``` ### Checklist - [ ] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [ ] [Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was used on any tests changed --- .../install_prebuilt_rules_package.ts | 37 ++++++++++--------- 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/api/install_prebuilt_rules_and_timelines/install_prebuilt_rules_package.ts b/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/api/install_prebuilt_rules_and_timelines/install_prebuilt_rules_package.ts index 23bcc654eb780..768a0deeeaa2b 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/api/install_prebuilt_rules_and_timelines/install_prebuilt_rules_package.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/api/install_prebuilt_rules_and_timelines/install_prebuilt_rules_package.ts @@ -22,7 +22,12 @@ export async function installPrebuiltRulesPackage( config: ConfigType, context: SecuritySolutionApiRequestHandlerContext ) { - const pkgVersion = await findLatestPackageVersion(config, context, PREBUILT_RULES_PACKAGE_NAME); + let pkgVersion = config.prebuiltRulesPackageVersion; + + if (!pkgVersion) { + // Find latest package if the version isn't specified in the config + pkgVersion = await findLatestPackageVersion(context, PREBUILT_RULES_PACKAGE_NAME); + } return context .getInternalFleetServices() @@ -33,7 +38,7 @@ export async function installEndpointPackage( config: ConfigType, context: SecuritySolutionApiRequestHandlerContext ) { - const pkgVersion = await findLatestPackageVersion(config, context, ENDPOINT_PACKAGE_NAME); + const pkgVersion = await findLatestPackageVersion(context, ENDPOINT_PACKAGE_NAME); return context.getInternalFleetServices().packages.ensureInstalledPackage({ pkgName: ENDPOINT_PACKAGE_NAME, @@ -42,25 +47,21 @@ export async function installEndpointPackage( } async function findLatestPackageVersion( - config: ConfigType, context: SecuritySolutionApiRequestHandlerContext, packageName: string ) { - let pkgVersion = config.prebuiltRulesPackageVersion; + const securityAppClient = context.getAppClient(); + const packageClient = context.getInternalFleetServices().packages; - // Find latest package if the version isn't specified in the config - if (!pkgVersion) { - const securityAppClient = context.getAppClient(); - // Use prerelease versions in dev environment - const isPrerelease = - securityAppClient.getBuildFlavor() === 'traditional' && - (securityAppClient.getKibanaVersion().includes('-SNAPSHOT') || - securityAppClient.getKibanaBranch() === 'main'); + // Use prerelease versions in dev environment + const isPrerelease = + securityAppClient.getBuildFlavor() === 'traditional' && + (securityAppClient.getKibanaVersion().includes('-SNAPSHOT') || + securityAppClient.getKibanaBranch() === 'main'); - const result = await context - .getInternalFleetServices() - .packages.fetchFindLatestPackage(packageName, { prerelease: isPrerelease }); - pkgVersion = result.version; - } - return pkgVersion; + const result = await packageClient.fetchFindLatestPackage(packageName, { + prerelease: isPrerelease, + }); + + return result.version; } From f2a50ef30de03d1da9da3b968892ada5300024bf Mon Sep 17 00:00:00 2001 From: Gerard Soldevila Date: Mon, 23 Dec 2024 16:36:49 +0100 Subject: [PATCH 10/35] Sustainable Kibana Architecture: Move 11 modules under `packages/core` (#203638) ## Summary This PR aims at relocating some of the Kibana modules (plugins and packages) into a new folder structure, according to the _Sustainable Kibana Architecture_ initiative. > [!IMPORTANT] > * We kindly ask you to: > * Manually fix the errors in the error section below (if there are any). > * Search for the `packages[\/\\]` and `plugins[\/\\]` patterns in the source code (Babel and Eslint config files), and update them appropriately. > * Manually review `.buildkite/scripts/pipelines/pull_request/pipeline.ts` to ensure that any CI pipeline customizations continue to be correctly applied after the changed path names > * Review all of the updated files, specially the `.ts` and `.js` files listed in the sections below, as some of them contain relative paths that have been updated. > * Think of potential impact of the move, including tooling and configuration files that can be pointing to the relocated modules. E.g.: > * customised eslint rules > * docs pointing to source code > [!NOTE] > This PR has been auto-generated. > Do not attempt to push any changes unless you know what you are doing. > Please use [#sustainable_kibana_architecture](https://elastic.slack.com/archives/C07TCKTA22E) Slack channel for feedback. #### 11 package(s) are going to be relocated: | Id | Target folder | | -- | ------------- | | @kbn/core-analytics-browser | src/core/packages/analytics/browser | | @kbn/core-analytics-browser-internal | src/core/packages/analytics/browser-internal | | @kbn/core-analytics-server | src/core/packages/analytics/server | | @kbn/core-analytics-server-internal | src/core/packages/analytics/server-internal | | @kbn/core-application-browser | src/core/packages/application/browser | | @kbn/core-application-browser-internal | src/core/packages/application/browser-internal | | @kbn/core-application-common | src/core/packages/application/common | | @kbn/core-apps-browser-internal | src/core/packages/apps/browser-internal | | @kbn/core-apps-server-internal | src/core/packages/apps/server-internal | | @kbn/core-base-browser-internal | src/core/packages/base/browser-internal | | @kbn/core-base-common | src/core/packages/base/common | --- .github/CODEOWNERS | 22 ++++----- .../core/application_service.asciidoc | 2 +- .../security/feature-registration.asciidoc | 2 +- .../best-practices/navigation.asciidoc | 16 +++---- package.json | 22 ++++----- .../jest.config.js | 14 ------ .../jest.config.js | 14 ------ .../core-application-browser/jest.config.js | 14 ------ .../react/kibana_context/root/BUILD.bazel | 2 +- .../analytics/browser-internal}/README.md | 0 .../analytics/browser-internal}/index.ts | 0 .../browser-internal}/jest.config.js | 4 +- .../analytics/browser-internal}/kibana.jsonc | 0 .../analytics/browser-internal}/package.json | 0 .../src/analytics_service.test.mocks.ts | 0 .../src/analytics_service.test.ts | 0 .../src/analytics_service.ts | 0 .../src/get_session_id.test.ts | 0 .../browser-internal}/src/get_session_id.ts | 0 .../src/track_clicks.test.ts | 0 .../browser-internal}/src/track_clicks.ts | 0 .../track_performance_measure_entries.test.ts | 0 .../src/track_performance_measure_entries.ts | 0 .../src/track_viewport_size.test.ts | 0 .../src/track_viewport_size.ts | 0 .../analytics/browser-internal}/tsconfig.json | 2 +- .../packages/analytics/browser}/README.md | 0 .../core/packages/analytics/browser}/index.ts | 0 .../analytics/browser}/jest.config.js | 4 +- .../packages/analytics/browser}/kibana.jsonc | 0 .../packages/analytics/browser}/package.json | 0 .../packages/analytics/browser}/src/types.ts | 0 .../packages/analytics/browser}/tsconfig.json | 2 +- .../analytics/server-internal}/README.md | 0 .../analytics/server-internal}/index.ts | 0 .../analytics/server-internal}/jest.config.js | 4 +- .../analytics/server-internal}/kibana.jsonc | 0 .../analytics/server-internal}/package.json | 0 .../src/analytics_service.test.mocks.ts | 0 .../src/analytics_service.test.ts | 0 .../server-internal}/src/analytics_service.ts | 0 .../analytics/server-internal}/tsconfig.json | 2 +- .../core/packages/analytics/server}/README.md | 0 .../core/packages/analytics/server}/index.ts | 0 .../packages/analytics/server}/jest.config.js | 4 +- .../packages/analytics/server}/kibana.jsonc | 0 .../packages/analytics/server}/package.json | 0 .../analytics/server}/src/contracts.ts | 0 .../packages/analytics/server}/tsconfig.json | 2 +- .../application/browser-internal}/README.md | 0 .../application/browser-internal}/index.ts | 0 .../application_service.test.tsx | 0 .../integration_tests/router.test.tsx | 0 .../integration_tests/utils.tsx | 0 .../browser-internal/jest.config.js | 14 ++++++ .../jest.integration.config.js | 4 +- .../browser-internal}/kibana.jsonc | 0 .../browser-internal}/package.json | 0 .../application_service.test.ts.snap | 0 .../src/application_leave.test.ts | 0 .../src/application_leave.tsx | 0 .../src/application_service.test.mocks.ts | 0 .../src/application_service.test.ts | 0 .../src/application_service.tsx | 0 .../src/navigation_confirm.test.ts | 0 .../src/navigation_confirm.ts | 0 ...egister_analytics_context_provider.test.ts | 0 .../register_analytics_context_provider.ts | 0 .../src/scoped_history.test.ts | 0 .../browser-internal}/src/scoped_history.ts | 0 .../src/test_helpers/test_types.ts | 0 .../browser-internal}/src/types.ts | 0 .../src/ui/app_container.test.tsx | 0 .../src/ui/app_container.tsx | 0 .../src/ui/app_not_found_screen.tsx | 0 .../browser-internal}/src/ui/app_router.tsx | 0 .../browser-internal}/src/ui/index.ts | 0 .../src/utils/append_app_path.test.ts | 0 .../src/utils/append_app_path.ts | 0 .../browser-internal}/src/utils/constants.ts | 0 .../src/utils/get_app_info.test.ts | 0 .../src/utils/get_app_info.ts | 0 .../src/utils/get_location_observable.test.ts | 0 .../src/utils/get_location_observable.ts | 0 .../browser-internal}/src/utils/index.ts | 0 .../src/utils/parse_app_url.test.ts | 0 .../src/utils/parse_app_url.ts | 0 .../src/utils/relative_to_absolute.test.ts | 0 .../src/utils/relative_to_absolute.ts | 0 .../src/utils/remove_slashes.test.ts | 0 .../src/utils/remove_slashes.ts | 0 .../browser-internal}/tsconfig.json | 2 +- .../packages/application/browser}/README.md | 0 .../packages/application/browser}/index.ts | 0 .../application/browser}/jest.config.js | 4 +- .../application/browser}/kibana.jsonc | 0 .../application/browser}/package.json | 0 .../application/browser}/src/app_leave.ts | 0 .../application/browser}/src/app_mount.ts | 0 .../application/browser}/src/application.ts | 0 .../application/browser}/src/contracts.ts | 2 +- .../browser}/src/scoped_history.ts | 0 .../application/browser}/tsconfig.json | 2 +- .../packages/application/common}/README.md | 0 .../packages/application/common}/index.ts | 0 .../application/common}/jest.config.js | 4 +- .../packages/application/common}/kibana.jsonc | 0 .../packages/application/common}/package.json | 0 .../application/common}/src/app_category.ts | 0 .../common}/src/app_wrapper_class.ts | 0 .../common}/src/default_app_categories.ts | 0 .../common}/src/global_app_style.tsx | 0 .../application/common}/tsconfig.json | 2 +- .../packages/apps/browser-internal}/README.md | 0 .../packages/apps/browser-internal}/index.ts | 0 .../apps/browser-internal/jest.config.js | 14 ++++++ .../apps/browser-internal}/kibana.jsonc | 0 .../apps/browser-internal}/package.json | 0 .../apps/browser-internal}/src/core_app.ts | 0 .../src/errors/error_application.test.ts | 0 .../src/errors/error_application.tsx | 0 .../browser-internal}/src/errors/index.ts | 0 .../src/errors/public_base_url.test.tsx | 0 .../src/errors/public_base_url.tsx | 0 .../src/errors/url_overflow.test.ts | 0 .../src/errors/url_overflow.tsx | 0 .../src/errors/url_overflow_ui.tsx | 0 .../apps/browser-internal}/src/index.ts | 0 .../__snapshots__/metric_tiles.test.tsx.snap | 0 .../__snapshots__/server_status.test.tsx.snap | 0 .../__snapshots__/status_table.test.tsx.snap | 0 .../src/status/components/index.ts | 0 .../status/components/metric_tiles.test.tsx | 0 .../src/status/components/metric_tiles.tsx | 0 .../status/components/server_status.test.tsx | 0 .../src/status/components/server_status.tsx | 0 .../status/components/status_badge.test.tsx | 0 .../src/status/components/status_badge.tsx | 0 .../status/components/status_expanded_row.tsx | 0 .../src/status/components/status_section.tsx | 0 .../status/components/status_table.test.tsx | 0 .../src/status/components/status_table.tsx | 0 .../status/components/version_header.test.tsx | 0 .../src/status/components/version_header.tsx | 0 .../browser-internal}/src/status/index.ts | 0 .../src/status/lib/format_number.test.ts | 0 .../src/status/lib/format_number.ts | 0 .../browser-internal}/src/status/lib/index.ts | 0 .../src/status/lib/load_status.test.ts | 0 .../src/status/lib/load_status.ts | 0 .../src/status/lib/status_level.test.ts | 0 .../src/status/lib/status_level.ts | 0 .../src/status/render_app.tsx | 0 .../src/status/status_app.tsx | 0 .../apps/browser-internal}/tsconfig.json | 2 +- .../packages/apps/server-internal}/README.md | 0 .../assets/favicons/favicon.distribution.ico | Bin .../assets/favicons/favicon.distribution.png | Bin .../assets/favicons/favicon.distribution.svg | 0 .../assets/favicons/favicon.ico | Bin .../assets/favicons/favicon.png | Bin .../assets/favicons/favicon.svg | 0 .../assets/fonts/inter/Inter-Black.woff | Bin .../assets/fonts/inter/Inter-Black.woff2 | Bin .../assets/fonts/inter/Inter-BlackItalic.woff | Bin .../fonts/inter/Inter-BlackItalic.woff2 | Bin .../assets/fonts/inter/Inter-Bold.woff | Bin .../assets/fonts/inter/Inter-Bold.woff2 | Bin .../assets/fonts/inter/Inter-BoldItalic.woff | Bin .../assets/fonts/inter/Inter-BoldItalic.woff2 | Bin .../assets/fonts/inter/Inter-ExtraBold.woff | Bin .../assets/fonts/inter/Inter-ExtraBold.woff2 | Bin .../fonts/inter/Inter-ExtraBoldItalic.woff | Bin .../fonts/inter/Inter-ExtraBoldItalic.woff2 | Bin .../assets/fonts/inter/Inter-ExtraLight.woff | Bin .../assets/fonts/inter/Inter-ExtraLight.woff2 | Bin .../fonts/inter/Inter-ExtraLightItalic.woff | Bin .../fonts/inter/Inter-ExtraLightItalic.woff2 | Bin .../assets/fonts/inter/Inter-Italic.woff | Bin .../assets/fonts/inter/Inter-Italic.woff2 | Bin .../assets/fonts/inter/Inter-Light.woff | Bin .../assets/fonts/inter/Inter-Light.woff2 | Bin .../assets/fonts/inter/Inter-LightItalic.woff | Bin .../fonts/inter/Inter-LightItalic.woff2 | Bin .../assets/fonts/inter/Inter-Medium.woff | Bin .../assets/fonts/inter/Inter-Medium.woff2 | Bin .../fonts/inter/Inter-MediumItalic.woff | Bin .../fonts/inter/Inter-MediumItalic.woff2 | Bin .../assets/fonts/inter/Inter-Regular.woff | Bin .../assets/fonts/inter/Inter-Regular.woff2 | Bin .../assets/fonts/inter/Inter-SemiBold.woff | Bin .../assets/fonts/inter/Inter-SemiBold.woff2 | Bin .../fonts/inter/Inter-SemiBoldItalic.woff | Bin .../fonts/inter/Inter-SemiBoldItalic.woff2 | Bin .../assets/fonts/inter/Inter-Thin.woff | Bin .../assets/fonts/inter/Inter-Thin.woff2 | Bin .../assets/fonts/inter/Inter-ThinItalic.woff | Bin .../assets/fonts/inter/Inter-ThinItalic.woff2 | Bin .../assets/fonts/inter/Inter-italic.var.woff2 | Bin .../assets/fonts/inter/Inter-roman.var.woff2 | Bin .../assets/fonts/inter/Inter.var.woff2 | Bin .../assets/fonts/inter/LICENSE.txt | 0 .../server-internal}/assets/fonts/readme.md | 0 .../assets/fonts/roboto_mono/LICENSE.txt | 0 .../fonts/roboto_mono/RobotoMono-Bold.ttf | Bin .../roboto_mono/RobotoMono-BoldItalic.ttf | Bin .../fonts/roboto_mono/RobotoMono-Italic.ttf | Bin .../fonts/roboto_mono/RobotoMono-Light.ttf | Bin .../roboto_mono/RobotoMono-LightItalic.ttf | Bin .../fonts/roboto_mono/RobotoMono-Medium.ttf | Bin .../roboto_mono/RobotoMono-MediumItalic.ttf | Bin .../fonts/roboto_mono/RobotoMono-Regular.ttf | Bin .../fonts/roboto_mono/RobotoMono-Thin.ttf | Bin .../roboto_mono/RobotoMono-ThinItalic.ttf | Bin .../assets/legacy_dark_theme.css | 0 .../assets/legacy_dark_theme.min.css | 0 .../assets/legacy_light_theme.css | 0 .../assets/legacy_light_theme.min.css | 0 .../server-internal}/assets/legacy_styles.css | 0 .../server-internal}/assets/legacy_theme.js | 0 .../packages/apps/server-internal}/index.ts | 0 .../apps/server-internal}/jest.config.js | 4 +- .../apps/server-internal}/kibana.jsonc | 0 .../apps/server-internal}/package.json | 0 .../bundle_routes/bundle_route.test.mocks.ts | 0 .../src/bundle_routes/bundle_route.test.ts | 0 .../src/bundle_routes/bundles_route.ts | 0 .../dynamic_asset_response.test.ts | 0 .../bundle_routes/dynamic_asset_response.ts | 0 .../src/bundle_routes/file_hash.test.mocks.ts | 0 .../src/bundle_routes/file_hash.test.ts | 0 .../src/bundle_routes/file_hash.ts | 0 .../src/bundle_routes/file_hash_cache.test.ts | 0 .../src/bundle_routes/file_hash_cache.ts | 0 .../server-internal}/src/bundle_routes/fs.ts | 0 .../src/bundle_routes/index.ts | 0 .../register_bundle_routes.test.mocks.ts | 0 .../register_bundle_routes.test.ts | 0 .../bundle_routes/register_bundle_routes.ts | 0 .../bundle_routes/select_compressed_file.ts | 0 .../src/bundle_routes/utils.ts | 0 .../src/core_app.test.mocks.ts | 0 .../server-internal}/src/core_app.test.ts | 0 .../apps/server-internal}/src/core_app.ts | 0 .../src/core_app_config.test.ts | 0 .../server-internal}/src/core_app_config.ts | 0 .../apps/server-internal}/src/index.ts | 0 .../server-internal}/src/internal_types.ts | 0 .../apps/server-internal}/tsconfig.json | 2 +- .../packages/base/browser-internal}/README.md | 0 .../packages/base/browser-internal}/index.ts | 0 .../base/browser-internal/jest.config.js | 14 ++++++ .../base/browser-internal}/kibana.jsonc | 0 .../base/browser-internal}/package.json | 0 .../browser-internal}/src/core_context.ts | 0 .../base/browser-internal}/src/services.ts | 0 .../base/browser-internal}/tsconfig.json | 2 +- .../core/packages/base/common}/BUILD.bazel | 0 .../core/packages/base/common}/README.md | 0 .../core/packages/base/common}/index.ts | 0 .../core/packages/base/common}/jest.config.js | 4 +- .../core/packages/base/common}/kibana.jsonc | 0 .../core/packages/base/common}/package.json | 0 .../core/packages/base/common}/src/eui.ts | 0 .../core/packages/base/common}/src/plugins.ts | 0 .../core/packages/base/common}/tsconfig.json | 2 +- src/dev/build/tasks/create_cdn_assets_task.ts | 8 ++-- src/dev/build/tasks/replace_favicon.ts | 12 ++--- src/dev/precommit_hook/casing_check_config.js | 2 +- tsconfig.base.json | 44 +++++++++--------- yarn.lock | 22 ++++----- 271 files changed, 149 insertions(+), 149 deletions(-) delete mode 100644 packages/core/analytics/core-analytics-browser-internal/jest.config.js delete mode 100644 packages/core/application/core-application-browser-internal/jest.config.js delete mode 100644 packages/core/application/core-application-browser/jest.config.js rename {packages/core/analytics/core-analytics-browser-internal => src/core/packages/analytics/browser-internal}/README.md (100%) rename {packages/core/analytics/core-analytics-browser-internal => src/core/packages/analytics/browser-internal}/index.ts (100%) rename {packages/core/application/core-application-common => src/core/packages/analytics/browser-internal}/jest.config.js (83%) rename {packages/core/analytics/core-analytics-browser-internal => src/core/packages/analytics/browser-internal}/kibana.jsonc (100%) rename {packages/core/analytics/core-analytics-browser-internal => src/core/packages/analytics/browser-internal}/package.json (100%) rename {packages/core/analytics/core-analytics-browser-internal => src/core/packages/analytics/browser-internal}/src/analytics_service.test.mocks.ts (100%) rename {packages/core/analytics/core-analytics-browser-internal => src/core/packages/analytics/browser-internal}/src/analytics_service.test.ts (100%) rename {packages/core/analytics/core-analytics-browser-internal => src/core/packages/analytics/browser-internal}/src/analytics_service.ts (100%) rename {packages/core/analytics/core-analytics-browser-internal => src/core/packages/analytics/browser-internal}/src/get_session_id.test.ts (100%) rename {packages/core/analytics/core-analytics-browser-internal => src/core/packages/analytics/browser-internal}/src/get_session_id.ts (100%) rename {packages/core/analytics/core-analytics-browser-internal => src/core/packages/analytics/browser-internal}/src/track_clicks.test.ts (100%) rename {packages/core/analytics/core-analytics-browser-internal => src/core/packages/analytics/browser-internal}/src/track_clicks.ts (100%) rename {packages/core/analytics/core-analytics-browser-internal => src/core/packages/analytics/browser-internal}/src/track_performance_measure_entries.test.ts (100%) rename {packages/core/analytics/core-analytics-browser-internal => src/core/packages/analytics/browser-internal}/src/track_performance_measure_entries.ts (100%) rename {packages/core/analytics/core-analytics-browser-internal => src/core/packages/analytics/browser-internal}/src/track_viewport_size.test.ts (100%) rename {packages/core/analytics/core-analytics-browser-internal => src/core/packages/analytics/browser-internal}/src/track_viewport_size.ts (100%) rename {packages/core/analytics/core-analytics-browser-internal => src/core/packages/analytics/browser-internal}/tsconfig.json (89%) rename {packages/core/analytics/core-analytics-browser => src/core/packages/analytics/browser}/README.md (100%) rename {packages/core/analytics/core-analytics-browser => src/core/packages/analytics/browser}/index.ts (100%) rename {packages/core/apps/core-apps-browser-internal => src/core/packages/analytics/browser}/jest.config.js (84%) rename {packages/core/analytics/core-analytics-browser => src/core/packages/analytics/browser}/kibana.jsonc (100%) rename {packages/core/analytics/core-analytics-browser => src/core/packages/analytics/browser}/package.json (100%) rename {packages/core/analytics/core-analytics-browser => src/core/packages/analytics/browser}/src/types.ts (100%) rename {packages/core/analytics/core-analytics-server => src/core/packages/analytics/browser}/tsconfig.json (80%) rename {packages/core/analytics/core-analytics-server-internal => src/core/packages/analytics/server-internal}/README.md (100%) rename {packages/core/analytics/core-analytics-server-internal => src/core/packages/analytics/server-internal}/index.ts (100%) rename {packages/core/analytics/core-analytics-server-internal => src/core/packages/analytics/server-internal}/jest.config.js (83%) rename {packages/core/analytics/core-analytics-server-internal => src/core/packages/analytics/server-internal}/kibana.jsonc (100%) rename {packages/core/analytics/core-analytics-server-internal => src/core/packages/analytics/server-internal}/package.json (100%) rename {packages/core/analytics/core-analytics-server-internal => src/core/packages/analytics/server-internal}/src/analytics_service.test.mocks.ts (100%) rename {packages/core/analytics/core-analytics-server-internal => src/core/packages/analytics/server-internal}/src/analytics_service.test.ts (100%) rename {packages/core/analytics/core-analytics-server-internal => src/core/packages/analytics/server-internal}/src/analytics_service.ts (100%) rename {packages/core/analytics/core-analytics-server-internal => src/core/packages/analytics/server-internal}/tsconfig.json (87%) rename {packages/core/analytics/core-analytics-server => src/core/packages/analytics/server}/README.md (100%) rename {packages/core/analytics/core-analytics-server => src/core/packages/analytics/server}/index.ts (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/analytics/server}/jest.config.js (84%) rename {packages/core/analytics/core-analytics-server => src/core/packages/analytics/server}/kibana.jsonc (100%) rename {packages/core/analytics/core-analytics-server => src/core/packages/analytics/server}/package.json (100%) rename {packages/core/analytics/core-analytics-server => src/core/packages/analytics/server}/src/contracts.ts (100%) rename {packages/core/analytics/core-analytics-browser => src/core/packages/analytics/server}/tsconfig.json (80%) rename {packages/core/application/core-application-browser-internal => src/core/packages/application/browser-internal}/README.md (100%) rename {packages/core/application/core-application-browser-internal => src/core/packages/application/browser-internal}/index.ts (100%) rename {packages/core/application/core-application-browser-internal => src/core/packages/application/browser-internal}/integration_tests/application_service.test.tsx (100%) rename {packages/core/application/core-application-browser-internal => src/core/packages/application/browser-internal}/integration_tests/router.test.tsx (100%) rename {packages/core/application/core-application-browser-internal => src/core/packages/application/browser-internal}/integration_tests/utils.tsx (100%) create mode 100644 src/core/packages/application/browser-internal/jest.config.js rename {packages/core/application/core-application-browser-internal => src/core/packages/application/browser-internal}/jest.integration.config.js (82%) rename {packages/core/application/core-application-browser-internal => src/core/packages/application/browser-internal}/kibana.jsonc (100%) rename {packages/core/application/core-application-browser-internal => src/core/packages/application/browser-internal}/package.json (100%) rename {packages/core/application/core-application-browser-internal => src/core/packages/application/browser-internal}/src/__snapshots__/application_service.test.ts.snap (100%) rename {packages/core/application/core-application-browser-internal => src/core/packages/application/browser-internal}/src/application_leave.test.ts (100%) rename {packages/core/application/core-application-browser-internal => src/core/packages/application/browser-internal}/src/application_leave.tsx (100%) rename {packages/core/application/core-application-browser-internal => src/core/packages/application/browser-internal}/src/application_service.test.mocks.ts (100%) rename {packages/core/application/core-application-browser-internal => src/core/packages/application/browser-internal}/src/application_service.test.ts (100%) rename {packages/core/application/core-application-browser-internal => src/core/packages/application/browser-internal}/src/application_service.tsx (100%) rename {packages/core/application/core-application-browser-internal => src/core/packages/application/browser-internal}/src/navigation_confirm.test.ts (100%) rename {packages/core/application/core-application-browser-internal => src/core/packages/application/browser-internal}/src/navigation_confirm.ts (100%) rename {packages/core/application/core-application-browser-internal => src/core/packages/application/browser-internal}/src/register_analytics_context_provider.test.ts (100%) rename {packages/core/application/core-application-browser-internal => src/core/packages/application/browser-internal}/src/register_analytics_context_provider.ts (100%) rename {packages/core/application/core-application-browser-internal => src/core/packages/application/browser-internal}/src/scoped_history.test.ts (100%) rename {packages/core/application/core-application-browser-internal => src/core/packages/application/browser-internal}/src/scoped_history.ts (100%) rename {packages/core/application/core-application-browser-internal => src/core/packages/application/browser-internal}/src/test_helpers/test_types.ts (100%) rename {packages/core/application/core-application-browser-internal => src/core/packages/application/browser-internal}/src/types.ts (100%) rename {packages/core/application/core-application-browser-internal => src/core/packages/application/browser-internal}/src/ui/app_container.test.tsx (100%) rename {packages/core/application/core-application-browser-internal => src/core/packages/application/browser-internal}/src/ui/app_container.tsx (100%) rename {packages/core/application/core-application-browser-internal => src/core/packages/application/browser-internal}/src/ui/app_not_found_screen.tsx (100%) rename {packages/core/application/core-application-browser-internal => src/core/packages/application/browser-internal}/src/ui/app_router.tsx (100%) rename {packages/core/application/core-application-browser-internal => src/core/packages/application/browser-internal}/src/ui/index.ts (100%) rename {packages/core/application/core-application-browser-internal => src/core/packages/application/browser-internal}/src/utils/append_app_path.test.ts (100%) rename {packages/core/application/core-application-browser-internal => src/core/packages/application/browser-internal}/src/utils/append_app_path.ts (100%) rename {packages/core/application/core-application-browser-internal => src/core/packages/application/browser-internal}/src/utils/constants.ts (100%) rename {packages/core/application/core-application-browser-internal => src/core/packages/application/browser-internal}/src/utils/get_app_info.test.ts (100%) rename {packages/core/application/core-application-browser-internal => src/core/packages/application/browser-internal}/src/utils/get_app_info.ts (100%) rename {packages/core/application/core-application-browser-internal => src/core/packages/application/browser-internal}/src/utils/get_location_observable.test.ts (100%) rename {packages/core/application/core-application-browser-internal => src/core/packages/application/browser-internal}/src/utils/get_location_observable.ts (100%) rename {packages/core/application/core-application-browser-internal => src/core/packages/application/browser-internal}/src/utils/index.ts (100%) rename {packages/core/application/core-application-browser-internal => src/core/packages/application/browser-internal}/src/utils/parse_app_url.test.ts (100%) rename {packages/core/application/core-application-browser-internal => src/core/packages/application/browser-internal}/src/utils/parse_app_url.ts (100%) rename {packages/core/application/core-application-browser-internal => src/core/packages/application/browser-internal}/src/utils/relative_to_absolute.test.ts (100%) rename {packages/core/application/core-application-browser-internal => src/core/packages/application/browser-internal}/src/utils/relative_to_absolute.ts (100%) rename {packages/core/application/core-application-browser-internal => src/core/packages/application/browser-internal}/src/utils/remove_slashes.test.ts (100%) rename {packages/core/application/core-application-browser-internal => src/core/packages/application/browser-internal}/src/utils/remove_slashes.ts (100%) rename {packages/core/application/core-application-browser-internal => src/core/packages/application/browser-internal}/tsconfig.json (95%) rename {packages/core/application/core-application-browser => src/core/packages/application/browser}/README.md (100%) rename {packages/core/application/core-application-browser => src/core/packages/application/browser}/index.ts (100%) rename {packages/core/base/core-base-browser-internal => src/core/packages/application/browser}/jest.config.js (84%) rename {packages/core/application/core-application-browser => src/core/packages/application/browser}/kibana.jsonc (100%) rename {packages/core/application/core-application-browser => src/core/packages/application/browser}/package.json (100%) rename {packages/core/application/core-application-browser => src/core/packages/application/browser}/src/app_leave.ts (100%) rename {packages/core/application/core-application-browser => src/core/packages/application/browser}/src/app_mount.ts (100%) rename {packages/core/application/core-application-browser => src/core/packages/application/browser}/src/application.ts (100%) rename {packages/core/application/core-application-browser => src/core/packages/application/browser}/src/contracts.ts (98%) rename {packages/core/application/core-application-browser => src/core/packages/application/browser}/src/scoped_history.ts (100%) rename {packages/core/application/core-application-browser => src/core/packages/application/browser}/tsconfig.json (88%) rename {packages/core/application/core-application-common => src/core/packages/application/common}/README.md (100%) rename {packages/core/application/core-application-common => src/core/packages/application/common}/index.ts (100%) rename {packages/core/analytics/core-analytics-browser => src/core/packages/application/common}/jest.config.js (84%) rename {packages/core/application/core-application-common => src/core/packages/application/common}/kibana.jsonc (100%) rename {packages/core/application/core-application-common => src/core/packages/application/common}/package.json (100%) rename {packages/core/application/core-application-common => src/core/packages/application/common}/src/app_category.ts (100%) rename {packages/core/application/core-application-common => src/core/packages/application/common}/src/app_wrapper_class.ts (100%) rename {packages/core/application/core-application-common => src/core/packages/application/common}/src/default_app_categories.ts (100%) rename {packages/core/application/core-application-common => src/core/packages/application/common}/src/global_app_style.tsx (100%) rename {packages/core/application/core-application-common => src/core/packages/application/common}/tsconfig.json (82%) rename {packages/core/apps/core-apps-browser-internal => src/core/packages/apps/browser-internal}/README.md (100%) rename {packages/core/apps/core-apps-browser-internal => src/core/packages/apps/browser-internal}/index.ts (100%) create mode 100644 src/core/packages/apps/browser-internal/jest.config.js rename {packages/core/apps/core-apps-browser-internal => src/core/packages/apps/browser-internal}/kibana.jsonc (100%) rename {packages/core/apps/core-apps-browser-internal => src/core/packages/apps/browser-internal}/package.json (100%) rename {packages/core/apps/core-apps-browser-internal => src/core/packages/apps/browser-internal}/src/core_app.ts (100%) rename {packages/core/apps/core-apps-browser-internal => src/core/packages/apps/browser-internal}/src/errors/error_application.test.ts (100%) rename {packages/core/apps/core-apps-browser-internal => src/core/packages/apps/browser-internal}/src/errors/error_application.tsx (100%) rename {packages/core/apps/core-apps-browser-internal => src/core/packages/apps/browser-internal}/src/errors/index.ts (100%) rename {packages/core/apps/core-apps-browser-internal => src/core/packages/apps/browser-internal}/src/errors/public_base_url.test.tsx (100%) rename {packages/core/apps/core-apps-browser-internal => src/core/packages/apps/browser-internal}/src/errors/public_base_url.tsx (100%) rename {packages/core/apps/core-apps-browser-internal => src/core/packages/apps/browser-internal}/src/errors/url_overflow.test.ts (100%) rename {packages/core/apps/core-apps-browser-internal => src/core/packages/apps/browser-internal}/src/errors/url_overflow.tsx (100%) rename {packages/core/apps/core-apps-browser-internal => src/core/packages/apps/browser-internal}/src/errors/url_overflow_ui.tsx (100%) rename {packages/core/apps/core-apps-browser-internal => src/core/packages/apps/browser-internal}/src/index.ts (100%) rename {packages/core/apps/core-apps-browser-internal => src/core/packages/apps/browser-internal}/src/status/components/__snapshots__/metric_tiles.test.tsx.snap (100%) rename {packages/core/apps/core-apps-browser-internal => src/core/packages/apps/browser-internal}/src/status/components/__snapshots__/server_status.test.tsx.snap (100%) rename {packages/core/apps/core-apps-browser-internal => src/core/packages/apps/browser-internal}/src/status/components/__snapshots__/status_table.test.tsx.snap (100%) rename {packages/core/apps/core-apps-browser-internal => src/core/packages/apps/browser-internal}/src/status/components/index.ts (100%) rename {packages/core/apps/core-apps-browser-internal => src/core/packages/apps/browser-internal}/src/status/components/metric_tiles.test.tsx (100%) rename {packages/core/apps/core-apps-browser-internal => src/core/packages/apps/browser-internal}/src/status/components/metric_tiles.tsx (100%) rename {packages/core/apps/core-apps-browser-internal => src/core/packages/apps/browser-internal}/src/status/components/server_status.test.tsx (100%) rename {packages/core/apps/core-apps-browser-internal => src/core/packages/apps/browser-internal}/src/status/components/server_status.tsx (100%) rename {packages/core/apps/core-apps-browser-internal => src/core/packages/apps/browser-internal}/src/status/components/status_badge.test.tsx (100%) rename {packages/core/apps/core-apps-browser-internal => src/core/packages/apps/browser-internal}/src/status/components/status_badge.tsx (100%) rename {packages/core/apps/core-apps-browser-internal => src/core/packages/apps/browser-internal}/src/status/components/status_expanded_row.tsx (100%) rename {packages/core/apps/core-apps-browser-internal => src/core/packages/apps/browser-internal}/src/status/components/status_section.tsx (100%) rename {packages/core/apps/core-apps-browser-internal => src/core/packages/apps/browser-internal}/src/status/components/status_table.test.tsx (100%) rename {packages/core/apps/core-apps-browser-internal => src/core/packages/apps/browser-internal}/src/status/components/status_table.tsx (100%) rename {packages/core/apps/core-apps-browser-internal => src/core/packages/apps/browser-internal}/src/status/components/version_header.test.tsx (100%) rename {packages/core/apps/core-apps-browser-internal => src/core/packages/apps/browser-internal}/src/status/components/version_header.tsx (100%) rename {packages/core/apps/core-apps-browser-internal => src/core/packages/apps/browser-internal}/src/status/index.ts (100%) rename {packages/core/apps/core-apps-browser-internal => src/core/packages/apps/browser-internal}/src/status/lib/format_number.test.ts (100%) rename {packages/core/apps/core-apps-browser-internal => src/core/packages/apps/browser-internal}/src/status/lib/format_number.ts (100%) rename {packages/core/apps/core-apps-browser-internal => src/core/packages/apps/browser-internal}/src/status/lib/index.ts (100%) rename {packages/core/apps/core-apps-browser-internal => src/core/packages/apps/browser-internal}/src/status/lib/load_status.test.ts (100%) rename {packages/core/apps/core-apps-browser-internal => src/core/packages/apps/browser-internal}/src/status/lib/load_status.ts (100%) rename {packages/core/apps/core-apps-browser-internal => src/core/packages/apps/browser-internal}/src/status/lib/status_level.test.ts (100%) rename {packages/core/apps/core-apps-browser-internal => src/core/packages/apps/browser-internal}/src/status/lib/status_level.ts (100%) rename {packages/core/apps/core-apps-browser-internal => src/core/packages/apps/browser-internal}/src/status/render_app.tsx (100%) rename {packages/core/apps/core-apps-browser-internal => src/core/packages/apps/browser-internal}/src/status/status_app.tsx (100%) rename {packages/core/apps/core-apps-browser-internal => src/core/packages/apps/browser-internal}/tsconfig.json (96%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/README.md (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/favicons/favicon.distribution.ico (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/favicons/favicon.distribution.png (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/favicons/favicon.distribution.svg (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/favicons/favicon.ico (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/favicons/favicon.png (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/favicons/favicon.svg (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/fonts/inter/Inter-Black.woff (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/fonts/inter/Inter-Black.woff2 (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/fonts/inter/Inter-BlackItalic.woff (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/fonts/inter/Inter-BlackItalic.woff2 (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/fonts/inter/Inter-Bold.woff (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/fonts/inter/Inter-Bold.woff2 (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/fonts/inter/Inter-BoldItalic.woff (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/fonts/inter/Inter-BoldItalic.woff2 (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/fonts/inter/Inter-ExtraBold.woff (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/fonts/inter/Inter-ExtraBold.woff2 (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/fonts/inter/Inter-ExtraBoldItalic.woff (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/fonts/inter/Inter-ExtraBoldItalic.woff2 (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/fonts/inter/Inter-ExtraLight.woff (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/fonts/inter/Inter-ExtraLight.woff2 (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/fonts/inter/Inter-ExtraLightItalic.woff (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/fonts/inter/Inter-ExtraLightItalic.woff2 (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/fonts/inter/Inter-Italic.woff (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/fonts/inter/Inter-Italic.woff2 (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/fonts/inter/Inter-Light.woff (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/fonts/inter/Inter-Light.woff2 (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/fonts/inter/Inter-LightItalic.woff (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/fonts/inter/Inter-LightItalic.woff2 (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/fonts/inter/Inter-Medium.woff (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/fonts/inter/Inter-Medium.woff2 (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/fonts/inter/Inter-MediumItalic.woff (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/fonts/inter/Inter-MediumItalic.woff2 (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/fonts/inter/Inter-Regular.woff (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/fonts/inter/Inter-Regular.woff2 (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/fonts/inter/Inter-SemiBold.woff (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/fonts/inter/Inter-SemiBold.woff2 (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/fonts/inter/Inter-SemiBoldItalic.woff (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/fonts/inter/Inter-SemiBoldItalic.woff2 (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/fonts/inter/Inter-Thin.woff (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/fonts/inter/Inter-Thin.woff2 (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/fonts/inter/Inter-ThinItalic.woff (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/fonts/inter/Inter-ThinItalic.woff2 (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/fonts/inter/Inter-italic.var.woff2 (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/fonts/inter/Inter-roman.var.woff2 (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/fonts/inter/Inter.var.woff2 (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/fonts/inter/LICENSE.txt (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/fonts/readme.md (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/fonts/roboto_mono/LICENSE.txt (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/fonts/roboto_mono/RobotoMono-Bold.ttf (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/fonts/roboto_mono/RobotoMono-BoldItalic.ttf (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/fonts/roboto_mono/RobotoMono-Italic.ttf (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/fonts/roboto_mono/RobotoMono-Light.ttf (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/fonts/roboto_mono/RobotoMono-LightItalic.ttf (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/fonts/roboto_mono/RobotoMono-Medium.ttf (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/fonts/roboto_mono/RobotoMono-MediumItalic.ttf (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/fonts/roboto_mono/RobotoMono-Regular.ttf (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/fonts/roboto_mono/RobotoMono-Thin.ttf (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/fonts/roboto_mono/RobotoMono-ThinItalic.ttf (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/legacy_dark_theme.css (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/legacy_dark_theme.min.css (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/legacy_light_theme.css (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/legacy_light_theme.min.css (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/legacy_styles.css (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/assets/legacy_theme.js (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/index.ts (100%) rename {packages/core/analytics/core-analytics-server => src/core/packages/apps/server-internal}/jest.config.js (84%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/kibana.jsonc (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/package.json (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/src/bundle_routes/bundle_route.test.mocks.ts (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/src/bundle_routes/bundle_route.test.ts (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/src/bundle_routes/bundles_route.ts (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/src/bundle_routes/dynamic_asset_response.test.ts (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/src/bundle_routes/dynamic_asset_response.ts (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/src/bundle_routes/file_hash.test.mocks.ts (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/src/bundle_routes/file_hash.test.ts (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/src/bundle_routes/file_hash.ts (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/src/bundle_routes/file_hash_cache.test.ts (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/src/bundle_routes/file_hash_cache.ts (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/src/bundle_routes/fs.ts (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/src/bundle_routes/index.ts (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/src/bundle_routes/register_bundle_routes.test.mocks.ts (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/src/bundle_routes/register_bundle_routes.test.ts (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/src/bundle_routes/register_bundle_routes.ts (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/src/bundle_routes/select_compressed_file.ts (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/src/bundle_routes/utils.ts (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/src/core_app.test.mocks.ts (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/src/core_app.test.ts (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/src/core_app.ts (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/src/core_app_config.test.ts (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/src/core_app_config.ts (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/src/index.ts (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/src/internal_types.ts (100%) rename {packages/core/apps/core-apps-server-internal => src/core/packages/apps/server-internal}/tsconfig.json (95%) rename {packages/core/base/core-base-browser-internal => src/core/packages/base/browser-internal}/README.md (100%) rename {packages/core/base/core-base-browser-internal => src/core/packages/base/browser-internal}/index.ts (100%) create mode 100644 src/core/packages/base/browser-internal/jest.config.js rename {packages/core/base/core-base-browser-internal => src/core/packages/base/browser-internal}/kibana.jsonc (100%) rename {packages/core/base/core-base-browser-internal => src/core/packages/base/browser-internal}/package.json (100%) rename {packages/core/base/core-base-browser-internal => src/core/packages/base/browser-internal}/src/core_context.ts (100%) rename {packages/core/base/core-base-browser-internal => src/core/packages/base/browser-internal}/src/services.ts (100%) rename {packages/core/base/core-base-browser-internal => src/core/packages/base/browser-internal}/tsconfig.json (86%) rename {packages/core/base/core-base-common => src/core/packages/base/common}/BUILD.bazel (100%) rename {packages/core/base/core-base-common => src/core/packages/base/common}/README.md (100%) rename {packages/core/base/core-base-common => src/core/packages/base/common}/index.ts (100%) rename {packages/core/base/core-base-common => src/core/packages/base/common}/jest.config.js (85%) rename {packages/core/base/core-base-common => src/core/packages/base/common}/kibana.jsonc (100%) rename {packages/core/base/core-base-common => src/core/packages/base/common}/package.json (100%) rename {packages/core/base/core-base-common => src/core/packages/base/common}/src/eui.ts (100%) rename {packages/core/base/core-base-common => src/core/packages/base/common}/src/plugins.ts (100%) rename {packages/core/base/core-base-common => src/core/packages/base/common}/tsconfig.json (81%) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 9051c3580057a..1a172217bf9e6 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -54,22 +54,11 @@ packages/content-management/table_list_view @elastic/appex-sharedux packages/content-management/table_list_view_common @elastic/appex-sharedux packages/content-management/table_list_view_table @elastic/appex-sharedux packages/content-management/user_profiles @elastic/appex-sharedux -packages/core/analytics/core-analytics-browser @elastic/kibana-core -packages/core/analytics/core-analytics-browser-internal @elastic/kibana-core packages/core/analytics/core-analytics-browser-mocks @elastic/kibana-core -packages/core/analytics/core-analytics-server @elastic/kibana-core -packages/core/analytics/core-analytics-server-internal @elastic/kibana-core packages/core/analytics/core-analytics-server-mocks @elastic/kibana-core -packages/core/application/core-application-browser @elastic/kibana-core -packages/core/application/core-application-browser-internal @elastic/kibana-core packages/core/application/core-application-browser-mocks @elastic/kibana-core -packages/core/application/core-application-common @elastic/kibana-core -packages/core/apps/core-apps-browser-internal @elastic/kibana-core packages/core/apps/core-apps-browser-mocks @elastic/kibana-core -packages/core/apps/core-apps-server-internal @elastic/kibana-core -packages/core/base/core-base-browser-internal @elastic/kibana-core packages/core/base/core-base-browser-mocks @elastic/kibana-core -packages/core/base/core-base-common @elastic/kibana-core packages/core/base/core-base-common-internal @elastic/kibana-core packages/core/base/core-base-server-internal @elastic/kibana-core packages/core/base/core-base-server-mocks @elastic/kibana-core @@ -558,6 +547,17 @@ packages/shared-ux/storybook/config @elastic/appex-sharedux packages/shared-ux/storybook/mock @elastic/appex-sharedux packages/shared-ux/table_persist @elastic/appex-sharedux src/core @elastic/kibana-core +src/core/packages/analytics/browser @elastic/kibana-core +src/core/packages/analytics/browser-internal @elastic/kibana-core +src/core/packages/analytics/server @elastic/kibana-core +src/core/packages/analytics/server-internal @elastic/kibana-core +src/core/packages/application/browser @elastic/kibana-core +src/core/packages/application/browser-internal @elastic/kibana-core +src/core/packages/application/common @elastic/kibana-core +src/core/packages/apps/browser-internal @elastic/kibana-core +src/core/packages/apps/server-internal @elastic/kibana-core +src/core/packages/base/browser-internal @elastic/kibana-core +src/core/packages/base/common @elastic/kibana-core src/platform/packages/private/default-nav/devtools @elastic/kibana-management src/platform/packages/private/default-nav/management @elastic/kibana-management src/platform/packages/private/default-nav/ml @elastic/ml-ui diff --git a/docs/developer/architecture/core/application_service.asciidoc b/docs/developer/architecture/core/application_service.asciidoc index 31b0a3d2a4356..66a0c09c60eb3 100644 --- a/docs/developer/architecture/core/application_service.asciidoc +++ b/docs/developer/architecture/core/application_service.asciidoc @@ -29,7 +29,7 @@ export class MyPlugin implements Plugin { } } ---- -<1> Refer to {kib-repo}/blob/8.9/packages/core/application/core-application-browser/src/contracts.ts[application.register interface] +<1> Refer to {kib-repo}tree/{branch}/packages/core/application/core-application-browser/src/contracts.ts[application.register interface] <2> Application specific URL. <3> `mount` callback is invoked when a user navigates to the application-specific URL. <4> `core.getStartServices` method provides API available during `start` lifecycle. diff --git a/docs/developer/architecture/security/feature-registration.asciidoc b/docs/developer/architecture/security/feature-registration.asciidoc index b16142311cc75..b53df66f9a94e 100644 --- a/docs/developer/architecture/security/feature-registration.asciidoc +++ b/docs/developer/architecture/security/feature-registration.asciidoc @@ -39,7 +39,7 @@ Registering a feature consists of the following fields. For more information, co |A human readable name for your feature. |`category` (required) -|{kib-repo}blob/{branch}/packages/core/application/core-application-common/src/app_category.ts[`AppCategory`] +|{kib-repo}blob/{branch}/src/core/packages/application/common/src/app_category.ts[`AppCategory`] |`DEFAULT_APP_CATEGORIES.kibana` |The `AppCategory` which best represents your feature. Used to organize the display of features within the management screens. diff --git a/docs/developer/best-practices/navigation.asciidoc b/docs/developer/best-practices/navigation.asciidoc index 6d6ebb38e558b..05247574641af 100644 --- a/docs/developer/best-practices/navigation.asciidoc +++ b/docs/developer/best-practices/navigation.asciidoc @@ -87,13 +87,13 @@ window.location.href = urlToADashboard; To navigate between different {kib} apps without a page reload (by default) there are APIs in `core`: -* {kib-repo}tree/{branch}/packages/core/application/core-application-browser/src/contracts.ts[core.application.navigateToApp] -* {kib-repo}tree/{branch}/packages/core/application/core-application-browser/src/contracts.ts[core.application.navigateToUrl] +* {kib-repo}tree/{branch}/src/core/packages/application/browser/src/contracts.ts[core.application.navigateToApp] +* {kib-repo}tree/{branch}/src/core/packages/application/browser/src/contracts.ts[core.application.navigateToUrl] Both methods offer customization such as opening the target in a new page, with an `options` parameter. All the options are optional be default. -* {kib-repo}tree/{branch}/packages/core/application/core-application-browser/src/contracts.ts[core.application.navigateToApp options] -* {kib-repo}tree/{branch}/packages/core/application/core-application-browser/src/contracts.ts[core.application.navigateToUrl options] +* {kib-repo}tree/{branch}/src/core/packages/application/browser/src/contracts.ts[core.application.navigateToApp options] +* {kib-repo}tree/{branch}/src/core/packages/application/browser/src/contracts.ts[core.application.navigateToUrl options] *Rendering a link to a different {kib} app on its own would also cause a full page reload:* @@ -163,8 +163,8 @@ Common rules to follow in this scenario: This is required to make sure `core` is aware of navigations triggered inside your app, so it could act accordingly when needed. -* `Core`'s {kib-repo}tree/{branch}/packages/core/application/core-application-browser/src/scoped_history.ts[ScopedHistory] instance. -* {kib-repo}tree/{branch}/packages/core/application/core-application-browser/src/app_mount.ts[Example usage] +* `Core`'s {kib-repo}tree/{branch}/src/core/packages/application/browser/src/scoped_history.ts[ScopedHistory] instance. +* {kib-repo}tree/{branch}/src/core/packages/application/browser/src/app_mount.ts[Example usage] * {kib-repo}tree/{branch}/test/plugin_functional/plugins/core_plugin_a/public/application.tsx#L120[Example plugin] Relative links will be resolved relative to your app's route (e.g.: `http://localhost5601/app/{your-app-id}`) @@ -181,14 +181,14 @@ const MyInternalLink = () => === Using history and browser location Try to avoid using `window.location` and `window.history` directly. + -Instead, consider using {kib-repo}tree/{branch}/packages/core/application/core-application-browser/src/scoped_history.ts[ScopedHistory] +Instead, consider using {kib-repo}tree/{branch}/src/core/packages/application/browser/src/scoped_history.ts[ScopedHistory] instance provided by `core`. * This way `core` will know about location changes triggered within your app, and it would act accordingly. * Some plugins are listening to location changes. Triggering location change manually could lead to unpredictable and hard-to-catch bugs. Common use-case for using -`core`'s {kib-repo}tree/{branch}/packages/core/application/core-application-browser/src/scoped_history.ts[ScopedHistory] directly: +`core`'s {kib-repo}tree/{branch}/src/core/packages/application/browser/src/scoped_history.ts[ScopedHistory] directly: * Reading/writing query params or hash. * Imperatively triggering internal navigations within your app. diff --git a/package.json b/package.json index b0d9f7c093c1f..e648aec17410b 100644 --- a/package.json +++ b/package.json @@ -245,18 +245,18 @@ "@kbn/controls-example-plugin": "link:examples/controls_example", "@kbn/controls-plugin": "link:src/plugins/controls", "@kbn/core": "link:src/core", - "@kbn/core-analytics-browser": "link:packages/core/analytics/core-analytics-browser", - "@kbn/core-analytics-browser-internal": "link:packages/core/analytics/core-analytics-browser-internal", - "@kbn/core-analytics-server": "link:packages/core/analytics/core-analytics-server", - "@kbn/core-analytics-server-internal": "link:packages/core/analytics/core-analytics-server-internal", + "@kbn/core-analytics-browser": "link:src/core/packages/analytics/browser", + "@kbn/core-analytics-browser-internal": "link:src/core/packages/analytics/browser-internal", + "@kbn/core-analytics-server": "link:src/core/packages/analytics/server", + "@kbn/core-analytics-server-internal": "link:src/core/packages/analytics/server-internal", "@kbn/core-app-status-plugin": "link:test/plugin_functional/plugins/core_app_status", - "@kbn/core-application-browser": "link:packages/core/application/core-application-browser", - "@kbn/core-application-browser-internal": "link:packages/core/application/core-application-browser-internal", - "@kbn/core-application-common": "link:packages/core/application/core-application-common", - "@kbn/core-apps-browser-internal": "link:packages/core/apps/core-apps-browser-internal", - "@kbn/core-apps-server-internal": "link:packages/core/apps/core-apps-server-internal", - "@kbn/core-base-browser-internal": "link:packages/core/base/core-base-browser-internal", - "@kbn/core-base-common": "link:packages/core/base/core-base-common", + "@kbn/core-application-browser": "link:src/core/packages/application/browser", + "@kbn/core-application-browser-internal": "link:src/core/packages/application/browser-internal", + "@kbn/core-application-common": "link:src/core/packages/application/common", + "@kbn/core-apps-browser-internal": "link:src/core/packages/apps/browser-internal", + "@kbn/core-apps-server-internal": "link:src/core/packages/apps/server-internal", + "@kbn/core-base-browser-internal": "link:src/core/packages/base/browser-internal", + "@kbn/core-base-common": "link:src/core/packages/base/common", "@kbn/core-base-common-internal": "link:packages/core/base/core-base-common-internal", "@kbn/core-base-server-internal": "link:packages/core/base/core-base-server-internal", "@kbn/core-capabilities-browser-internal": "link:packages/core/capabilities/core-capabilities-browser-internal", diff --git a/packages/core/analytics/core-analytics-browser-internal/jest.config.js b/packages/core/analytics/core-analytics-browser-internal/jest.config.js deleted file mode 100644 index 4432335062f1e..0000000000000 --- a/packages/core/analytics/core-analytics-browser-internal/jest.config.js +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -module.exports = { - preset: '@kbn/test', - rootDir: '../../../..', - roots: ['/packages/core/analytics/core-analytics-browser-internal'], -}; diff --git a/packages/core/application/core-application-browser-internal/jest.config.js b/packages/core/application/core-application-browser-internal/jest.config.js deleted file mode 100644 index 223e310d5daf3..0000000000000 --- a/packages/core/application/core-application-browser-internal/jest.config.js +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -module.exports = { - preset: '@kbn/test', - rootDir: '../../../..', - roots: ['/packages/core/application/core-application-browser-internal'], -}; diff --git a/packages/core/application/core-application-browser/jest.config.js b/packages/core/application/core-application-browser/jest.config.js deleted file mode 100644 index 13f7c9e97b7e1..0000000000000 --- a/packages/core/application/core-application-browser/jest.config.js +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -module.exports = { - preset: '@kbn/test', - rootDir: '../../../..', - roots: ['/packages/core/application/core-application-browser'], -}; diff --git a/packages/react/kibana_context/root/BUILD.bazel b/packages/react/kibana_context/root/BUILD.bazel index fc073da074a61..e78f513deeac6 100644 --- a/packages/react/kibana_context/root/BUILD.bazel +++ b/packages/react/kibana_context/root/BUILD.bazel @@ -25,7 +25,7 @@ DEPS = [ "@npm//react", "@npm//tslib", "@npm//@elastic/eui", - "//packages/core/base/core-base-common", + "//src/core/packages/base/common:core-base-common", "//packages/shared-ux/router/impl:shared-ux-router", ] diff --git a/packages/core/analytics/core-analytics-browser-internal/README.md b/src/core/packages/analytics/browser-internal/README.md similarity index 100% rename from packages/core/analytics/core-analytics-browser-internal/README.md rename to src/core/packages/analytics/browser-internal/README.md diff --git a/packages/core/analytics/core-analytics-browser-internal/index.ts b/src/core/packages/analytics/browser-internal/index.ts similarity index 100% rename from packages/core/analytics/core-analytics-browser-internal/index.ts rename to src/core/packages/analytics/browser-internal/index.ts diff --git a/packages/core/application/core-application-common/jest.config.js b/src/core/packages/analytics/browser-internal/jest.config.js similarity index 83% rename from packages/core/application/core-application-common/jest.config.js rename to src/core/packages/analytics/browser-internal/jest.config.js index bf825b81c6e01..53a81b4d9c6ef 100644 --- a/packages/core/application/core-application-common/jest.config.js +++ b/src/core/packages/analytics/browser-internal/jest.config.js @@ -9,6 +9,6 @@ module.exports = { preset: '@kbn/test', - rootDir: '../../../..', - roots: ['/packages/core/application/core-application-common'], + rootDir: '../../../../..', + roots: ['/src/core/packages/analytics/browser-internal'], }; diff --git a/packages/core/analytics/core-analytics-browser-internal/kibana.jsonc b/src/core/packages/analytics/browser-internal/kibana.jsonc similarity index 100% rename from packages/core/analytics/core-analytics-browser-internal/kibana.jsonc rename to src/core/packages/analytics/browser-internal/kibana.jsonc diff --git a/packages/core/analytics/core-analytics-browser-internal/package.json b/src/core/packages/analytics/browser-internal/package.json similarity index 100% rename from packages/core/analytics/core-analytics-browser-internal/package.json rename to src/core/packages/analytics/browser-internal/package.json diff --git a/packages/core/analytics/core-analytics-browser-internal/src/analytics_service.test.mocks.ts b/src/core/packages/analytics/browser-internal/src/analytics_service.test.mocks.ts similarity index 100% rename from packages/core/analytics/core-analytics-browser-internal/src/analytics_service.test.mocks.ts rename to src/core/packages/analytics/browser-internal/src/analytics_service.test.mocks.ts diff --git a/packages/core/analytics/core-analytics-browser-internal/src/analytics_service.test.ts b/src/core/packages/analytics/browser-internal/src/analytics_service.test.ts similarity index 100% rename from packages/core/analytics/core-analytics-browser-internal/src/analytics_service.test.ts rename to src/core/packages/analytics/browser-internal/src/analytics_service.test.ts diff --git a/packages/core/analytics/core-analytics-browser-internal/src/analytics_service.ts b/src/core/packages/analytics/browser-internal/src/analytics_service.ts similarity index 100% rename from packages/core/analytics/core-analytics-browser-internal/src/analytics_service.ts rename to src/core/packages/analytics/browser-internal/src/analytics_service.ts diff --git a/packages/core/analytics/core-analytics-browser-internal/src/get_session_id.test.ts b/src/core/packages/analytics/browser-internal/src/get_session_id.test.ts similarity index 100% rename from packages/core/analytics/core-analytics-browser-internal/src/get_session_id.test.ts rename to src/core/packages/analytics/browser-internal/src/get_session_id.test.ts diff --git a/packages/core/analytics/core-analytics-browser-internal/src/get_session_id.ts b/src/core/packages/analytics/browser-internal/src/get_session_id.ts similarity index 100% rename from packages/core/analytics/core-analytics-browser-internal/src/get_session_id.ts rename to src/core/packages/analytics/browser-internal/src/get_session_id.ts diff --git a/packages/core/analytics/core-analytics-browser-internal/src/track_clicks.test.ts b/src/core/packages/analytics/browser-internal/src/track_clicks.test.ts similarity index 100% rename from packages/core/analytics/core-analytics-browser-internal/src/track_clicks.test.ts rename to src/core/packages/analytics/browser-internal/src/track_clicks.test.ts diff --git a/packages/core/analytics/core-analytics-browser-internal/src/track_clicks.ts b/src/core/packages/analytics/browser-internal/src/track_clicks.ts similarity index 100% rename from packages/core/analytics/core-analytics-browser-internal/src/track_clicks.ts rename to src/core/packages/analytics/browser-internal/src/track_clicks.ts diff --git a/packages/core/analytics/core-analytics-browser-internal/src/track_performance_measure_entries.test.ts b/src/core/packages/analytics/browser-internal/src/track_performance_measure_entries.test.ts similarity index 100% rename from packages/core/analytics/core-analytics-browser-internal/src/track_performance_measure_entries.test.ts rename to src/core/packages/analytics/browser-internal/src/track_performance_measure_entries.test.ts diff --git a/packages/core/analytics/core-analytics-browser-internal/src/track_performance_measure_entries.ts b/src/core/packages/analytics/browser-internal/src/track_performance_measure_entries.ts similarity index 100% rename from packages/core/analytics/core-analytics-browser-internal/src/track_performance_measure_entries.ts rename to src/core/packages/analytics/browser-internal/src/track_performance_measure_entries.ts diff --git a/packages/core/analytics/core-analytics-browser-internal/src/track_viewport_size.test.ts b/src/core/packages/analytics/browser-internal/src/track_viewport_size.test.ts similarity index 100% rename from packages/core/analytics/core-analytics-browser-internal/src/track_viewport_size.test.ts rename to src/core/packages/analytics/browser-internal/src/track_viewport_size.test.ts diff --git a/packages/core/analytics/core-analytics-browser-internal/src/track_viewport_size.ts b/src/core/packages/analytics/browser-internal/src/track_viewport_size.ts similarity index 100% rename from packages/core/analytics/core-analytics-browser-internal/src/track_viewport_size.ts rename to src/core/packages/analytics/browser-internal/src/track_viewport_size.ts diff --git a/packages/core/analytics/core-analytics-browser-internal/tsconfig.json b/src/core/packages/analytics/browser-internal/tsconfig.json similarity index 89% rename from packages/core/analytics/core-analytics-browser-internal/tsconfig.json rename to src/core/packages/analytics/browser-internal/tsconfig.json index 152fbeeaa9edd..9dc1d2c37c791 100644 --- a/packages/core/analytics/core-analytics-browser-internal/tsconfig.json +++ b/src/core/packages/analytics/browser-internal/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../tsconfig.base.json", + "extends": "../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": ["jest", "node"] diff --git a/packages/core/analytics/core-analytics-browser/README.md b/src/core/packages/analytics/browser/README.md similarity index 100% rename from packages/core/analytics/core-analytics-browser/README.md rename to src/core/packages/analytics/browser/README.md diff --git a/packages/core/analytics/core-analytics-browser/index.ts b/src/core/packages/analytics/browser/index.ts similarity index 100% rename from packages/core/analytics/core-analytics-browser/index.ts rename to src/core/packages/analytics/browser/index.ts diff --git a/packages/core/apps/core-apps-browser-internal/jest.config.js b/src/core/packages/analytics/browser/jest.config.js similarity index 84% rename from packages/core/apps/core-apps-browser-internal/jest.config.js rename to src/core/packages/analytics/browser/jest.config.js index 70aafc13bdadb..67d507722acad 100644 --- a/packages/core/apps/core-apps-browser-internal/jest.config.js +++ b/src/core/packages/analytics/browser/jest.config.js @@ -9,6 +9,6 @@ module.exports = { preset: '@kbn/test', - rootDir: '../../../..', - roots: ['/packages/core/apps/core-apps-browser-internal'], + rootDir: '../../../../..', + roots: ['/src/core/packages/analytics/browser'], }; diff --git a/packages/core/analytics/core-analytics-browser/kibana.jsonc b/src/core/packages/analytics/browser/kibana.jsonc similarity index 100% rename from packages/core/analytics/core-analytics-browser/kibana.jsonc rename to src/core/packages/analytics/browser/kibana.jsonc diff --git a/packages/core/analytics/core-analytics-browser/package.json b/src/core/packages/analytics/browser/package.json similarity index 100% rename from packages/core/analytics/core-analytics-browser/package.json rename to src/core/packages/analytics/browser/package.json diff --git a/packages/core/analytics/core-analytics-browser/src/types.ts b/src/core/packages/analytics/browser/src/types.ts similarity index 100% rename from packages/core/analytics/core-analytics-browser/src/types.ts rename to src/core/packages/analytics/browser/src/types.ts diff --git a/packages/core/analytics/core-analytics-server/tsconfig.json b/src/core/packages/analytics/browser/tsconfig.json similarity index 80% rename from packages/core/analytics/core-analytics-server/tsconfig.json rename to src/core/packages/analytics/browser/tsconfig.json index 99505f519996c..c6bb0972b56ae 100644 --- a/packages/core/analytics/core-analytics-server/tsconfig.json +++ b/src/core/packages/analytics/browser/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../tsconfig.base.json", + "extends": "../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [ diff --git a/packages/core/analytics/core-analytics-server-internal/README.md b/src/core/packages/analytics/server-internal/README.md similarity index 100% rename from packages/core/analytics/core-analytics-server-internal/README.md rename to src/core/packages/analytics/server-internal/README.md diff --git a/packages/core/analytics/core-analytics-server-internal/index.ts b/src/core/packages/analytics/server-internal/index.ts similarity index 100% rename from packages/core/analytics/core-analytics-server-internal/index.ts rename to src/core/packages/analytics/server-internal/index.ts diff --git a/packages/core/analytics/core-analytics-server-internal/jest.config.js b/src/core/packages/analytics/server-internal/jest.config.js similarity index 83% rename from packages/core/analytics/core-analytics-server-internal/jest.config.js rename to src/core/packages/analytics/server-internal/jest.config.js index 8999f9acbc468..c272930b953d6 100644 --- a/packages/core/analytics/core-analytics-server-internal/jest.config.js +++ b/src/core/packages/analytics/server-internal/jest.config.js @@ -9,6 +9,6 @@ module.exports = { preset: '@kbn/test/jest_node', - rootDir: '../../../..', - roots: ['/packages/core/analytics/core-analytics-server-internal'], + rootDir: '../../../../..', + roots: ['/src/core/packages/analytics/server-internal'], }; diff --git a/packages/core/analytics/core-analytics-server-internal/kibana.jsonc b/src/core/packages/analytics/server-internal/kibana.jsonc similarity index 100% rename from packages/core/analytics/core-analytics-server-internal/kibana.jsonc rename to src/core/packages/analytics/server-internal/kibana.jsonc diff --git a/packages/core/analytics/core-analytics-server-internal/package.json b/src/core/packages/analytics/server-internal/package.json similarity index 100% rename from packages/core/analytics/core-analytics-server-internal/package.json rename to src/core/packages/analytics/server-internal/package.json diff --git a/packages/core/analytics/core-analytics-server-internal/src/analytics_service.test.mocks.ts b/src/core/packages/analytics/server-internal/src/analytics_service.test.mocks.ts similarity index 100% rename from packages/core/analytics/core-analytics-server-internal/src/analytics_service.test.mocks.ts rename to src/core/packages/analytics/server-internal/src/analytics_service.test.mocks.ts diff --git a/packages/core/analytics/core-analytics-server-internal/src/analytics_service.test.ts b/src/core/packages/analytics/server-internal/src/analytics_service.test.ts similarity index 100% rename from packages/core/analytics/core-analytics-server-internal/src/analytics_service.test.ts rename to src/core/packages/analytics/server-internal/src/analytics_service.test.ts diff --git a/packages/core/analytics/core-analytics-server-internal/src/analytics_service.ts b/src/core/packages/analytics/server-internal/src/analytics_service.ts similarity index 100% rename from packages/core/analytics/core-analytics-server-internal/src/analytics_service.ts rename to src/core/packages/analytics/server-internal/src/analytics_service.ts diff --git a/packages/core/analytics/core-analytics-server-internal/tsconfig.json b/src/core/packages/analytics/server-internal/tsconfig.json similarity index 87% rename from packages/core/analytics/core-analytics-server-internal/tsconfig.json rename to src/core/packages/analytics/server-internal/tsconfig.json index a9d2e7cf47b9d..d62b5cf6aea65 100644 --- a/packages/core/analytics/core-analytics-server-internal/tsconfig.json +++ b/src/core/packages/analytics/server-internal/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../tsconfig.base.json", + "extends": "../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [ diff --git a/packages/core/analytics/core-analytics-server/README.md b/src/core/packages/analytics/server/README.md similarity index 100% rename from packages/core/analytics/core-analytics-server/README.md rename to src/core/packages/analytics/server/README.md diff --git a/packages/core/analytics/core-analytics-server/index.ts b/src/core/packages/analytics/server/index.ts similarity index 100% rename from packages/core/analytics/core-analytics-server/index.ts rename to src/core/packages/analytics/server/index.ts diff --git a/packages/core/apps/core-apps-server-internal/jest.config.js b/src/core/packages/analytics/server/jest.config.js similarity index 84% rename from packages/core/apps/core-apps-server-internal/jest.config.js rename to src/core/packages/analytics/server/jest.config.js index a8f73275f70a8..d9d5d56cdb9d0 100644 --- a/packages/core/apps/core-apps-server-internal/jest.config.js +++ b/src/core/packages/analytics/server/jest.config.js @@ -9,6 +9,6 @@ module.exports = { preset: '@kbn/test/jest_node', - rootDir: '../../../..', - roots: ['/packages/core/apps/core-apps-server-internal'], + rootDir: '../../../../..', + roots: ['/src/core/packages/analytics/server'], }; diff --git a/packages/core/analytics/core-analytics-server/kibana.jsonc b/src/core/packages/analytics/server/kibana.jsonc similarity index 100% rename from packages/core/analytics/core-analytics-server/kibana.jsonc rename to src/core/packages/analytics/server/kibana.jsonc diff --git a/packages/core/analytics/core-analytics-server/package.json b/src/core/packages/analytics/server/package.json similarity index 100% rename from packages/core/analytics/core-analytics-server/package.json rename to src/core/packages/analytics/server/package.json diff --git a/packages/core/analytics/core-analytics-server/src/contracts.ts b/src/core/packages/analytics/server/src/contracts.ts similarity index 100% rename from packages/core/analytics/core-analytics-server/src/contracts.ts rename to src/core/packages/analytics/server/src/contracts.ts diff --git a/packages/core/analytics/core-analytics-browser/tsconfig.json b/src/core/packages/analytics/server/tsconfig.json similarity index 80% rename from packages/core/analytics/core-analytics-browser/tsconfig.json rename to src/core/packages/analytics/server/tsconfig.json index 99505f519996c..c6bb0972b56ae 100644 --- a/packages/core/analytics/core-analytics-browser/tsconfig.json +++ b/src/core/packages/analytics/server/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../tsconfig.base.json", + "extends": "../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [ diff --git a/packages/core/application/core-application-browser-internal/README.md b/src/core/packages/application/browser-internal/README.md similarity index 100% rename from packages/core/application/core-application-browser-internal/README.md rename to src/core/packages/application/browser-internal/README.md diff --git a/packages/core/application/core-application-browser-internal/index.ts b/src/core/packages/application/browser-internal/index.ts similarity index 100% rename from packages/core/application/core-application-browser-internal/index.ts rename to src/core/packages/application/browser-internal/index.ts diff --git a/packages/core/application/core-application-browser-internal/integration_tests/application_service.test.tsx b/src/core/packages/application/browser-internal/integration_tests/application_service.test.tsx similarity index 100% rename from packages/core/application/core-application-browser-internal/integration_tests/application_service.test.tsx rename to src/core/packages/application/browser-internal/integration_tests/application_service.test.tsx diff --git a/packages/core/application/core-application-browser-internal/integration_tests/router.test.tsx b/src/core/packages/application/browser-internal/integration_tests/router.test.tsx similarity index 100% rename from packages/core/application/core-application-browser-internal/integration_tests/router.test.tsx rename to src/core/packages/application/browser-internal/integration_tests/router.test.tsx diff --git a/packages/core/application/core-application-browser-internal/integration_tests/utils.tsx b/src/core/packages/application/browser-internal/integration_tests/utils.tsx similarity index 100% rename from packages/core/application/core-application-browser-internal/integration_tests/utils.tsx rename to src/core/packages/application/browser-internal/integration_tests/utils.tsx diff --git a/src/core/packages/application/browser-internal/jest.config.js b/src/core/packages/application/browser-internal/jest.config.js new file mode 100644 index 0000000000000..fac6160093b0a --- /dev/null +++ b/src/core/packages/application/browser-internal/jest.config.js @@ -0,0 +1,14 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +module.exports = { + preset: '@kbn/test', + rootDir: '../../../../..', + roots: ['/src/core/packages/application/browser-internal'], +}; diff --git a/packages/core/application/core-application-browser-internal/jest.integration.config.js b/src/core/packages/application/browser-internal/jest.integration.config.js similarity index 82% rename from packages/core/application/core-application-browser-internal/jest.integration.config.js rename to src/core/packages/application/browser-internal/jest.integration.config.js index dac107a009695..ba7f5c3320f66 100644 --- a/packages/core/application/core-application-browser-internal/jest.integration.config.js +++ b/src/core/packages/application/browser-internal/jest.integration.config.js @@ -9,6 +9,6 @@ module.exports = { preset: '@kbn/test/jest_integration', - rootDir: '../../../..', - roots: ['/packages/core/application/core-application-browser-internal'], + rootDir: '../../../../..', + roots: ['/src/core/packages/application/browser-internal'], }; diff --git a/packages/core/application/core-application-browser-internal/kibana.jsonc b/src/core/packages/application/browser-internal/kibana.jsonc similarity index 100% rename from packages/core/application/core-application-browser-internal/kibana.jsonc rename to src/core/packages/application/browser-internal/kibana.jsonc diff --git a/packages/core/application/core-application-browser-internal/package.json b/src/core/packages/application/browser-internal/package.json similarity index 100% rename from packages/core/application/core-application-browser-internal/package.json rename to src/core/packages/application/browser-internal/package.json diff --git a/packages/core/application/core-application-browser-internal/src/__snapshots__/application_service.test.ts.snap b/src/core/packages/application/browser-internal/src/__snapshots__/application_service.test.ts.snap similarity index 100% rename from packages/core/application/core-application-browser-internal/src/__snapshots__/application_service.test.ts.snap rename to src/core/packages/application/browser-internal/src/__snapshots__/application_service.test.ts.snap diff --git a/packages/core/application/core-application-browser-internal/src/application_leave.test.ts b/src/core/packages/application/browser-internal/src/application_leave.test.ts similarity index 100% rename from packages/core/application/core-application-browser-internal/src/application_leave.test.ts rename to src/core/packages/application/browser-internal/src/application_leave.test.ts diff --git a/packages/core/application/core-application-browser-internal/src/application_leave.tsx b/src/core/packages/application/browser-internal/src/application_leave.tsx similarity index 100% rename from packages/core/application/core-application-browser-internal/src/application_leave.tsx rename to src/core/packages/application/browser-internal/src/application_leave.tsx diff --git a/packages/core/application/core-application-browser-internal/src/application_service.test.mocks.ts b/src/core/packages/application/browser-internal/src/application_service.test.mocks.ts similarity index 100% rename from packages/core/application/core-application-browser-internal/src/application_service.test.mocks.ts rename to src/core/packages/application/browser-internal/src/application_service.test.mocks.ts diff --git a/packages/core/application/core-application-browser-internal/src/application_service.test.ts b/src/core/packages/application/browser-internal/src/application_service.test.ts similarity index 100% rename from packages/core/application/core-application-browser-internal/src/application_service.test.ts rename to src/core/packages/application/browser-internal/src/application_service.test.ts diff --git a/packages/core/application/core-application-browser-internal/src/application_service.tsx b/src/core/packages/application/browser-internal/src/application_service.tsx similarity index 100% rename from packages/core/application/core-application-browser-internal/src/application_service.tsx rename to src/core/packages/application/browser-internal/src/application_service.tsx diff --git a/packages/core/application/core-application-browser-internal/src/navigation_confirm.test.ts b/src/core/packages/application/browser-internal/src/navigation_confirm.test.ts similarity index 100% rename from packages/core/application/core-application-browser-internal/src/navigation_confirm.test.ts rename to src/core/packages/application/browser-internal/src/navigation_confirm.test.ts diff --git a/packages/core/application/core-application-browser-internal/src/navigation_confirm.ts b/src/core/packages/application/browser-internal/src/navigation_confirm.ts similarity index 100% rename from packages/core/application/core-application-browser-internal/src/navigation_confirm.ts rename to src/core/packages/application/browser-internal/src/navigation_confirm.ts diff --git a/packages/core/application/core-application-browser-internal/src/register_analytics_context_provider.test.ts b/src/core/packages/application/browser-internal/src/register_analytics_context_provider.test.ts similarity index 100% rename from packages/core/application/core-application-browser-internal/src/register_analytics_context_provider.test.ts rename to src/core/packages/application/browser-internal/src/register_analytics_context_provider.test.ts diff --git a/packages/core/application/core-application-browser-internal/src/register_analytics_context_provider.ts b/src/core/packages/application/browser-internal/src/register_analytics_context_provider.ts similarity index 100% rename from packages/core/application/core-application-browser-internal/src/register_analytics_context_provider.ts rename to src/core/packages/application/browser-internal/src/register_analytics_context_provider.ts diff --git a/packages/core/application/core-application-browser-internal/src/scoped_history.test.ts b/src/core/packages/application/browser-internal/src/scoped_history.test.ts similarity index 100% rename from packages/core/application/core-application-browser-internal/src/scoped_history.test.ts rename to src/core/packages/application/browser-internal/src/scoped_history.test.ts diff --git a/packages/core/application/core-application-browser-internal/src/scoped_history.ts b/src/core/packages/application/browser-internal/src/scoped_history.ts similarity index 100% rename from packages/core/application/core-application-browser-internal/src/scoped_history.ts rename to src/core/packages/application/browser-internal/src/scoped_history.ts diff --git a/packages/core/application/core-application-browser-internal/src/test_helpers/test_types.ts b/src/core/packages/application/browser-internal/src/test_helpers/test_types.ts similarity index 100% rename from packages/core/application/core-application-browser-internal/src/test_helpers/test_types.ts rename to src/core/packages/application/browser-internal/src/test_helpers/test_types.ts diff --git a/packages/core/application/core-application-browser-internal/src/types.ts b/src/core/packages/application/browser-internal/src/types.ts similarity index 100% rename from packages/core/application/core-application-browser-internal/src/types.ts rename to src/core/packages/application/browser-internal/src/types.ts diff --git a/packages/core/application/core-application-browser-internal/src/ui/app_container.test.tsx b/src/core/packages/application/browser-internal/src/ui/app_container.test.tsx similarity index 100% rename from packages/core/application/core-application-browser-internal/src/ui/app_container.test.tsx rename to src/core/packages/application/browser-internal/src/ui/app_container.test.tsx diff --git a/packages/core/application/core-application-browser-internal/src/ui/app_container.tsx b/src/core/packages/application/browser-internal/src/ui/app_container.tsx similarity index 100% rename from packages/core/application/core-application-browser-internal/src/ui/app_container.tsx rename to src/core/packages/application/browser-internal/src/ui/app_container.tsx diff --git a/packages/core/application/core-application-browser-internal/src/ui/app_not_found_screen.tsx b/src/core/packages/application/browser-internal/src/ui/app_not_found_screen.tsx similarity index 100% rename from packages/core/application/core-application-browser-internal/src/ui/app_not_found_screen.tsx rename to src/core/packages/application/browser-internal/src/ui/app_not_found_screen.tsx diff --git a/packages/core/application/core-application-browser-internal/src/ui/app_router.tsx b/src/core/packages/application/browser-internal/src/ui/app_router.tsx similarity index 100% rename from packages/core/application/core-application-browser-internal/src/ui/app_router.tsx rename to src/core/packages/application/browser-internal/src/ui/app_router.tsx diff --git a/packages/core/application/core-application-browser-internal/src/ui/index.ts b/src/core/packages/application/browser-internal/src/ui/index.ts similarity index 100% rename from packages/core/application/core-application-browser-internal/src/ui/index.ts rename to src/core/packages/application/browser-internal/src/ui/index.ts diff --git a/packages/core/application/core-application-browser-internal/src/utils/append_app_path.test.ts b/src/core/packages/application/browser-internal/src/utils/append_app_path.test.ts similarity index 100% rename from packages/core/application/core-application-browser-internal/src/utils/append_app_path.test.ts rename to src/core/packages/application/browser-internal/src/utils/append_app_path.test.ts diff --git a/packages/core/application/core-application-browser-internal/src/utils/append_app_path.ts b/src/core/packages/application/browser-internal/src/utils/append_app_path.ts similarity index 100% rename from packages/core/application/core-application-browser-internal/src/utils/append_app_path.ts rename to src/core/packages/application/browser-internal/src/utils/append_app_path.ts diff --git a/packages/core/application/core-application-browser-internal/src/utils/constants.ts b/src/core/packages/application/browser-internal/src/utils/constants.ts similarity index 100% rename from packages/core/application/core-application-browser-internal/src/utils/constants.ts rename to src/core/packages/application/browser-internal/src/utils/constants.ts diff --git a/packages/core/application/core-application-browser-internal/src/utils/get_app_info.test.ts b/src/core/packages/application/browser-internal/src/utils/get_app_info.test.ts similarity index 100% rename from packages/core/application/core-application-browser-internal/src/utils/get_app_info.test.ts rename to src/core/packages/application/browser-internal/src/utils/get_app_info.test.ts diff --git a/packages/core/application/core-application-browser-internal/src/utils/get_app_info.ts b/src/core/packages/application/browser-internal/src/utils/get_app_info.ts similarity index 100% rename from packages/core/application/core-application-browser-internal/src/utils/get_app_info.ts rename to src/core/packages/application/browser-internal/src/utils/get_app_info.ts diff --git a/packages/core/application/core-application-browser-internal/src/utils/get_location_observable.test.ts b/src/core/packages/application/browser-internal/src/utils/get_location_observable.test.ts similarity index 100% rename from packages/core/application/core-application-browser-internal/src/utils/get_location_observable.test.ts rename to src/core/packages/application/browser-internal/src/utils/get_location_observable.test.ts diff --git a/packages/core/application/core-application-browser-internal/src/utils/get_location_observable.ts b/src/core/packages/application/browser-internal/src/utils/get_location_observable.ts similarity index 100% rename from packages/core/application/core-application-browser-internal/src/utils/get_location_observable.ts rename to src/core/packages/application/browser-internal/src/utils/get_location_observable.ts diff --git a/packages/core/application/core-application-browser-internal/src/utils/index.ts b/src/core/packages/application/browser-internal/src/utils/index.ts similarity index 100% rename from packages/core/application/core-application-browser-internal/src/utils/index.ts rename to src/core/packages/application/browser-internal/src/utils/index.ts diff --git a/packages/core/application/core-application-browser-internal/src/utils/parse_app_url.test.ts b/src/core/packages/application/browser-internal/src/utils/parse_app_url.test.ts similarity index 100% rename from packages/core/application/core-application-browser-internal/src/utils/parse_app_url.test.ts rename to src/core/packages/application/browser-internal/src/utils/parse_app_url.test.ts diff --git a/packages/core/application/core-application-browser-internal/src/utils/parse_app_url.ts b/src/core/packages/application/browser-internal/src/utils/parse_app_url.ts similarity index 100% rename from packages/core/application/core-application-browser-internal/src/utils/parse_app_url.ts rename to src/core/packages/application/browser-internal/src/utils/parse_app_url.ts diff --git a/packages/core/application/core-application-browser-internal/src/utils/relative_to_absolute.test.ts b/src/core/packages/application/browser-internal/src/utils/relative_to_absolute.test.ts similarity index 100% rename from packages/core/application/core-application-browser-internal/src/utils/relative_to_absolute.test.ts rename to src/core/packages/application/browser-internal/src/utils/relative_to_absolute.test.ts diff --git a/packages/core/application/core-application-browser-internal/src/utils/relative_to_absolute.ts b/src/core/packages/application/browser-internal/src/utils/relative_to_absolute.ts similarity index 100% rename from packages/core/application/core-application-browser-internal/src/utils/relative_to_absolute.ts rename to src/core/packages/application/browser-internal/src/utils/relative_to_absolute.ts diff --git a/packages/core/application/core-application-browser-internal/src/utils/remove_slashes.test.ts b/src/core/packages/application/browser-internal/src/utils/remove_slashes.test.ts similarity index 100% rename from packages/core/application/core-application-browser-internal/src/utils/remove_slashes.test.ts rename to src/core/packages/application/browser-internal/src/utils/remove_slashes.test.ts diff --git a/packages/core/application/core-application-browser-internal/src/utils/remove_slashes.ts b/src/core/packages/application/browser-internal/src/utils/remove_slashes.ts similarity index 100% rename from packages/core/application/core-application-browser-internal/src/utils/remove_slashes.ts rename to src/core/packages/application/browser-internal/src/utils/remove_slashes.ts diff --git a/packages/core/application/core-application-browser-internal/tsconfig.json b/src/core/packages/application/browser-internal/tsconfig.json similarity index 95% rename from packages/core/application/core-application-browser-internal/tsconfig.json rename to src/core/packages/application/browser-internal/tsconfig.json index 497d069efc596..8db83fe2e2e2e 100644 --- a/packages/core/application/core-application-browser-internal/tsconfig.json +++ b/src/core/packages/application/browser-internal/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../tsconfig.base.json", + "extends": "../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [ diff --git a/packages/core/application/core-application-browser/README.md b/src/core/packages/application/browser/README.md similarity index 100% rename from packages/core/application/core-application-browser/README.md rename to src/core/packages/application/browser/README.md diff --git a/packages/core/application/core-application-browser/index.ts b/src/core/packages/application/browser/index.ts similarity index 100% rename from packages/core/application/core-application-browser/index.ts rename to src/core/packages/application/browser/index.ts diff --git a/packages/core/base/core-base-browser-internal/jest.config.js b/src/core/packages/application/browser/jest.config.js similarity index 84% rename from packages/core/base/core-base-browser-internal/jest.config.js rename to src/core/packages/application/browser/jest.config.js index 3456994fafa4b..21356fe119018 100644 --- a/packages/core/base/core-base-browser-internal/jest.config.js +++ b/src/core/packages/application/browser/jest.config.js @@ -9,6 +9,6 @@ module.exports = { preset: '@kbn/test', - rootDir: '../../../..', - roots: ['/packages/core/base/core-base-browser-internal'], + rootDir: '../../../../..', + roots: ['/src/core/packages/application/browser'], }; diff --git a/packages/core/application/core-application-browser/kibana.jsonc b/src/core/packages/application/browser/kibana.jsonc similarity index 100% rename from packages/core/application/core-application-browser/kibana.jsonc rename to src/core/packages/application/browser/kibana.jsonc diff --git a/packages/core/application/core-application-browser/package.json b/src/core/packages/application/browser/package.json similarity index 100% rename from packages/core/application/core-application-browser/package.json rename to src/core/packages/application/browser/package.json diff --git a/packages/core/application/core-application-browser/src/app_leave.ts b/src/core/packages/application/browser/src/app_leave.ts similarity index 100% rename from packages/core/application/core-application-browser/src/app_leave.ts rename to src/core/packages/application/browser/src/app_leave.ts diff --git a/packages/core/application/core-application-browser/src/app_mount.ts b/src/core/packages/application/browser/src/app_mount.ts similarity index 100% rename from packages/core/application/core-application-browser/src/app_mount.ts rename to src/core/packages/application/browser/src/app_mount.ts diff --git a/packages/core/application/core-application-browser/src/application.ts b/src/core/packages/application/browser/src/application.ts similarity index 100% rename from packages/core/application/core-application-browser/src/application.ts rename to src/core/packages/application/browser/src/application.ts diff --git a/packages/core/application/core-application-browser/src/contracts.ts b/src/core/packages/application/browser/src/contracts.ts similarity index 98% rename from packages/core/application/core-application-browser/src/contracts.ts rename to src/core/packages/application/browser/src/contracts.ts index e8b2cd77028f6..7aada384d8378 100644 --- a/packages/core/application/core-application-browser/src/contracts.ts +++ b/src/core/packages/application/browser/src/contracts.ts @@ -109,7 +109,7 @@ export interface ApplicationStart { * application.navigateToUrl('/app/discover/some-path') // does not include the current basePath * application.navigateToUrl('/base-path/s/my-space/app/unknown-app/some-path') // unknown application * application.navigateToUrl('../discover') // resolve to `/base-path/s/my-space/discover` which is not a path of a known app. - * application.navigateToUrl('../../other-space/discover') // resolve to `/base-path/s/other-space/discover` which is not within the current basePath. + * application.navigateToUrl('../../../other-space/discover') // resolve to `/base-path/s/other-space/discover` which is not within the current basePath. * ``` * * @param url - an absolute URL, an absolute path or a relative path, to navigate to. diff --git a/packages/core/application/core-application-browser/src/scoped_history.ts b/src/core/packages/application/browser/src/scoped_history.ts similarity index 100% rename from packages/core/application/core-application-browser/src/scoped_history.ts rename to src/core/packages/application/browser/src/scoped_history.ts diff --git a/packages/core/application/core-application-browser/tsconfig.json b/src/core/packages/application/browser/tsconfig.json similarity index 88% rename from packages/core/application/core-application-browser/tsconfig.json rename to src/core/packages/application/browser/tsconfig.json index d22e0c337382a..c7b86c46c1ee2 100644 --- a/packages/core/application/core-application-browser/tsconfig.json +++ b/src/core/packages/application/browser/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../tsconfig.base.json", + "extends": "../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [ diff --git a/packages/core/application/core-application-common/README.md b/src/core/packages/application/common/README.md similarity index 100% rename from packages/core/application/core-application-common/README.md rename to src/core/packages/application/common/README.md diff --git a/packages/core/application/core-application-common/index.ts b/src/core/packages/application/common/index.ts similarity index 100% rename from packages/core/application/core-application-common/index.ts rename to src/core/packages/application/common/index.ts diff --git a/packages/core/analytics/core-analytics-browser/jest.config.js b/src/core/packages/application/common/jest.config.js similarity index 84% rename from packages/core/analytics/core-analytics-browser/jest.config.js rename to src/core/packages/application/common/jest.config.js index 3d19085e50e12..4724ccc6350c8 100644 --- a/packages/core/analytics/core-analytics-browser/jest.config.js +++ b/src/core/packages/application/common/jest.config.js @@ -9,6 +9,6 @@ module.exports = { preset: '@kbn/test', - rootDir: '../../../..', - roots: ['/packages/core/analytics/core-analytics-browser'], + rootDir: '../../../../..', + roots: ['/src/core/packages/application/common'], }; diff --git a/packages/core/application/core-application-common/kibana.jsonc b/src/core/packages/application/common/kibana.jsonc similarity index 100% rename from packages/core/application/core-application-common/kibana.jsonc rename to src/core/packages/application/common/kibana.jsonc diff --git a/packages/core/application/core-application-common/package.json b/src/core/packages/application/common/package.json similarity index 100% rename from packages/core/application/core-application-common/package.json rename to src/core/packages/application/common/package.json diff --git a/packages/core/application/core-application-common/src/app_category.ts b/src/core/packages/application/common/src/app_category.ts similarity index 100% rename from packages/core/application/core-application-common/src/app_category.ts rename to src/core/packages/application/common/src/app_category.ts diff --git a/packages/core/application/core-application-common/src/app_wrapper_class.ts b/src/core/packages/application/common/src/app_wrapper_class.ts similarity index 100% rename from packages/core/application/core-application-common/src/app_wrapper_class.ts rename to src/core/packages/application/common/src/app_wrapper_class.ts diff --git a/packages/core/application/core-application-common/src/default_app_categories.ts b/src/core/packages/application/common/src/default_app_categories.ts similarity index 100% rename from packages/core/application/core-application-common/src/default_app_categories.ts rename to src/core/packages/application/common/src/default_app_categories.ts diff --git a/packages/core/application/core-application-common/src/global_app_style.tsx b/src/core/packages/application/common/src/global_app_style.tsx similarity index 100% rename from packages/core/application/core-application-common/src/global_app_style.tsx rename to src/core/packages/application/common/src/global_app_style.tsx diff --git a/packages/core/application/core-application-common/tsconfig.json b/src/core/packages/application/common/tsconfig.json similarity index 82% rename from packages/core/application/core-application-common/tsconfig.json rename to src/core/packages/application/common/tsconfig.json index da0657512bb06..e4d2c85fd93d6 100644 --- a/packages/core/application/core-application-common/tsconfig.json +++ b/src/core/packages/application/common/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../tsconfig.base.json", + "extends": "../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [ diff --git a/packages/core/apps/core-apps-browser-internal/README.md b/src/core/packages/apps/browser-internal/README.md similarity index 100% rename from packages/core/apps/core-apps-browser-internal/README.md rename to src/core/packages/apps/browser-internal/README.md diff --git a/packages/core/apps/core-apps-browser-internal/index.ts b/src/core/packages/apps/browser-internal/index.ts similarity index 100% rename from packages/core/apps/core-apps-browser-internal/index.ts rename to src/core/packages/apps/browser-internal/index.ts diff --git a/src/core/packages/apps/browser-internal/jest.config.js b/src/core/packages/apps/browser-internal/jest.config.js new file mode 100644 index 0000000000000..8346aa238f169 --- /dev/null +++ b/src/core/packages/apps/browser-internal/jest.config.js @@ -0,0 +1,14 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +module.exports = { + preset: '@kbn/test', + rootDir: '../../../../..', + roots: ['/src/core/packages/apps/browser-internal'], +}; diff --git a/packages/core/apps/core-apps-browser-internal/kibana.jsonc b/src/core/packages/apps/browser-internal/kibana.jsonc similarity index 100% rename from packages/core/apps/core-apps-browser-internal/kibana.jsonc rename to src/core/packages/apps/browser-internal/kibana.jsonc diff --git a/packages/core/apps/core-apps-browser-internal/package.json b/src/core/packages/apps/browser-internal/package.json similarity index 100% rename from packages/core/apps/core-apps-browser-internal/package.json rename to src/core/packages/apps/browser-internal/package.json diff --git a/packages/core/apps/core-apps-browser-internal/src/core_app.ts b/src/core/packages/apps/browser-internal/src/core_app.ts similarity index 100% rename from packages/core/apps/core-apps-browser-internal/src/core_app.ts rename to src/core/packages/apps/browser-internal/src/core_app.ts diff --git a/packages/core/apps/core-apps-browser-internal/src/errors/error_application.test.ts b/src/core/packages/apps/browser-internal/src/errors/error_application.test.ts similarity index 100% rename from packages/core/apps/core-apps-browser-internal/src/errors/error_application.test.ts rename to src/core/packages/apps/browser-internal/src/errors/error_application.test.ts diff --git a/packages/core/apps/core-apps-browser-internal/src/errors/error_application.tsx b/src/core/packages/apps/browser-internal/src/errors/error_application.tsx similarity index 100% rename from packages/core/apps/core-apps-browser-internal/src/errors/error_application.tsx rename to src/core/packages/apps/browser-internal/src/errors/error_application.tsx diff --git a/packages/core/apps/core-apps-browser-internal/src/errors/index.ts b/src/core/packages/apps/browser-internal/src/errors/index.ts similarity index 100% rename from packages/core/apps/core-apps-browser-internal/src/errors/index.ts rename to src/core/packages/apps/browser-internal/src/errors/index.ts diff --git a/packages/core/apps/core-apps-browser-internal/src/errors/public_base_url.test.tsx b/src/core/packages/apps/browser-internal/src/errors/public_base_url.test.tsx similarity index 100% rename from packages/core/apps/core-apps-browser-internal/src/errors/public_base_url.test.tsx rename to src/core/packages/apps/browser-internal/src/errors/public_base_url.test.tsx diff --git a/packages/core/apps/core-apps-browser-internal/src/errors/public_base_url.tsx b/src/core/packages/apps/browser-internal/src/errors/public_base_url.tsx similarity index 100% rename from packages/core/apps/core-apps-browser-internal/src/errors/public_base_url.tsx rename to src/core/packages/apps/browser-internal/src/errors/public_base_url.tsx diff --git a/packages/core/apps/core-apps-browser-internal/src/errors/url_overflow.test.ts b/src/core/packages/apps/browser-internal/src/errors/url_overflow.test.ts similarity index 100% rename from packages/core/apps/core-apps-browser-internal/src/errors/url_overflow.test.ts rename to src/core/packages/apps/browser-internal/src/errors/url_overflow.test.ts diff --git a/packages/core/apps/core-apps-browser-internal/src/errors/url_overflow.tsx b/src/core/packages/apps/browser-internal/src/errors/url_overflow.tsx similarity index 100% rename from packages/core/apps/core-apps-browser-internal/src/errors/url_overflow.tsx rename to src/core/packages/apps/browser-internal/src/errors/url_overflow.tsx diff --git a/packages/core/apps/core-apps-browser-internal/src/errors/url_overflow_ui.tsx b/src/core/packages/apps/browser-internal/src/errors/url_overflow_ui.tsx similarity index 100% rename from packages/core/apps/core-apps-browser-internal/src/errors/url_overflow_ui.tsx rename to src/core/packages/apps/browser-internal/src/errors/url_overflow_ui.tsx diff --git a/packages/core/apps/core-apps-browser-internal/src/index.ts b/src/core/packages/apps/browser-internal/src/index.ts similarity index 100% rename from packages/core/apps/core-apps-browser-internal/src/index.ts rename to src/core/packages/apps/browser-internal/src/index.ts diff --git a/packages/core/apps/core-apps-browser-internal/src/status/components/__snapshots__/metric_tiles.test.tsx.snap b/src/core/packages/apps/browser-internal/src/status/components/__snapshots__/metric_tiles.test.tsx.snap similarity index 100% rename from packages/core/apps/core-apps-browser-internal/src/status/components/__snapshots__/metric_tiles.test.tsx.snap rename to src/core/packages/apps/browser-internal/src/status/components/__snapshots__/metric_tiles.test.tsx.snap diff --git a/packages/core/apps/core-apps-browser-internal/src/status/components/__snapshots__/server_status.test.tsx.snap b/src/core/packages/apps/browser-internal/src/status/components/__snapshots__/server_status.test.tsx.snap similarity index 100% rename from packages/core/apps/core-apps-browser-internal/src/status/components/__snapshots__/server_status.test.tsx.snap rename to src/core/packages/apps/browser-internal/src/status/components/__snapshots__/server_status.test.tsx.snap diff --git a/packages/core/apps/core-apps-browser-internal/src/status/components/__snapshots__/status_table.test.tsx.snap b/src/core/packages/apps/browser-internal/src/status/components/__snapshots__/status_table.test.tsx.snap similarity index 100% rename from packages/core/apps/core-apps-browser-internal/src/status/components/__snapshots__/status_table.test.tsx.snap rename to src/core/packages/apps/browser-internal/src/status/components/__snapshots__/status_table.test.tsx.snap diff --git a/packages/core/apps/core-apps-browser-internal/src/status/components/index.ts b/src/core/packages/apps/browser-internal/src/status/components/index.ts similarity index 100% rename from packages/core/apps/core-apps-browser-internal/src/status/components/index.ts rename to src/core/packages/apps/browser-internal/src/status/components/index.ts diff --git a/packages/core/apps/core-apps-browser-internal/src/status/components/metric_tiles.test.tsx b/src/core/packages/apps/browser-internal/src/status/components/metric_tiles.test.tsx similarity index 100% rename from packages/core/apps/core-apps-browser-internal/src/status/components/metric_tiles.test.tsx rename to src/core/packages/apps/browser-internal/src/status/components/metric_tiles.test.tsx diff --git a/packages/core/apps/core-apps-browser-internal/src/status/components/metric_tiles.tsx b/src/core/packages/apps/browser-internal/src/status/components/metric_tiles.tsx similarity index 100% rename from packages/core/apps/core-apps-browser-internal/src/status/components/metric_tiles.tsx rename to src/core/packages/apps/browser-internal/src/status/components/metric_tiles.tsx diff --git a/packages/core/apps/core-apps-browser-internal/src/status/components/server_status.test.tsx b/src/core/packages/apps/browser-internal/src/status/components/server_status.test.tsx similarity index 100% rename from packages/core/apps/core-apps-browser-internal/src/status/components/server_status.test.tsx rename to src/core/packages/apps/browser-internal/src/status/components/server_status.test.tsx diff --git a/packages/core/apps/core-apps-browser-internal/src/status/components/server_status.tsx b/src/core/packages/apps/browser-internal/src/status/components/server_status.tsx similarity index 100% rename from packages/core/apps/core-apps-browser-internal/src/status/components/server_status.tsx rename to src/core/packages/apps/browser-internal/src/status/components/server_status.tsx diff --git a/packages/core/apps/core-apps-browser-internal/src/status/components/status_badge.test.tsx b/src/core/packages/apps/browser-internal/src/status/components/status_badge.test.tsx similarity index 100% rename from packages/core/apps/core-apps-browser-internal/src/status/components/status_badge.test.tsx rename to src/core/packages/apps/browser-internal/src/status/components/status_badge.test.tsx diff --git a/packages/core/apps/core-apps-browser-internal/src/status/components/status_badge.tsx b/src/core/packages/apps/browser-internal/src/status/components/status_badge.tsx similarity index 100% rename from packages/core/apps/core-apps-browser-internal/src/status/components/status_badge.tsx rename to src/core/packages/apps/browser-internal/src/status/components/status_badge.tsx diff --git a/packages/core/apps/core-apps-browser-internal/src/status/components/status_expanded_row.tsx b/src/core/packages/apps/browser-internal/src/status/components/status_expanded_row.tsx similarity index 100% rename from packages/core/apps/core-apps-browser-internal/src/status/components/status_expanded_row.tsx rename to src/core/packages/apps/browser-internal/src/status/components/status_expanded_row.tsx diff --git a/packages/core/apps/core-apps-browser-internal/src/status/components/status_section.tsx b/src/core/packages/apps/browser-internal/src/status/components/status_section.tsx similarity index 100% rename from packages/core/apps/core-apps-browser-internal/src/status/components/status_section.tsx rename to src/core/packages/apps/browser-internal/src/status/components/status_section.tsx diff --git a/packages/core/apps/core-apps-browser-internal/src/status/components/status_table.test.tsx b/src/core/packages/apps/browser-internal/src/status/components/status_table.test.tsx similarity index 100% rename from packages/core/apps/core-apps-browser-internal/src/status/components/status_table.test.tsx rename to src/core/packages/apps/browser-internal/src/status/components/status_table.test.tsx diff --git a/packages/core/apps/core-apps-browser-internal/src/status/components/status_table.tsx b/src/core/packages/apps/browser-internal/src/status/components/status_table.tsx similarity index 100% rename from packages/core/apps/core-apps-browser-internal/src/status/components/status_table.tsx rename to src/core/packages/apps/browser-internal/src/status/components/status_table.tsx diff --git a/packages/core/apps/core-apps-browser-internal/src/status/components/version_header.test.tsx b/src/core/packages/apps/browser-internal/src/status/components/version_header.test.tsx similarity index 100% rename from packages/core/apps/core-apps-browser-internal/src/status/components/version_header.test.tsx rename to src/core/packages/apps/browser-internal/src/status/components/version_header.test.tsx diff --git a/packages/core/apps/core-apps-browser-internal/src/status/components/version_header.tsx b/src/core/packages/apps/browser-internal/src/status/components/version_header.tsx similarity index 100% rename from packages/core/apps/core-apps-browser-internal/src/status/components/version_header.tsx rename to src/core/packages/apps/browser-internal/src/status/components/version_header.tsx diff --git a/packages/core/apps/core-apps-browser-internal/src/status/index.ts b/src/core/packages/apps/browser-internal/src/status/index.ts similarity index 100% rename from packages/core/apps/core-apps-browser-internal/src/status/index.ts rename to src/core/packages/apps/browser-internal/src/status/index.ts diff --git a/packages/core/apps/core-apps-browser-internal/src/status/lib/format_number.test.ts b/src/core/packages/apps/browser-internal/src/status/lib/format_number.test.ts similarity index 100% rename from packages/core/apps/core-apps-browser-internal/src/status/lib/format_number.test.ts rename to src/core/packages/apps/browser-internal/src/status/lib/format_number.test.ts diff --git a/packages/core/apps/core-apps-browser-internal/src/status/lib/format_number.ts b/src/core/packages/apps/browser-internal/src/status/lib/format_number.ts similarity index 100% rename from packages/core/apps/core-apps-browser-internal/src/status/lib/format_number.ts rename to src/core/packages/apps/browser-internal/src/status/lib/format_number.ts diff --git a/packages/core/apps/core-apps-browser-internal/src/status/lib/index.ts b/src/core/packages/apps/browser-internal/src/status/lib/index.ts similarity index 100% rename from packages/core/apps/core-apps-browser-internal/src/status/lib/index.ts rename to src/core/packages/apps/browser-internal/src/status/lib/index.ts diff --git a/packages/core/apps/core-apps-browser-internal/src/status/lib/load_status.test.ts b/src/core/packages/apps/browser-internal/src/status/lib/load_status.test.ts similarity index 100% rename from packages/core/apps/core-apps-browser-internal/src/status/lib/load_status.test.ts rename to src/core/packages/apps/browser-internal/src/status/lib/load_status.test.ts diff --git a/packages/core/apps/core-apps-browser-internal/src/status/lib/load_status.ts b/src/core/packages/apps/browser-internal/src/status/lib/load_status.ts similarity index 100% rename from packages/core/apps/core-apps-browser-internal/src/status/lib/load_status.ts rename to src/core/packages/apps/browser-internal/src/status/lib/load_status.ts diff --git a/packages/core/apps/core-apps-browser-internal/src/status/lib/status_level.test.ts b/src/core/packages/apps/browser-internal/src/status/lib/status_level.test.ts similarity index 100% rename from packages/core/apps/core-apps-browser-internal/src/status/lib/status_level.test.ts rename to src/core/packages/apps/browser-internal/src/status/lib/status_level.test.ts diff --git a/packages/core/apps/core-apps-browser-internal/src/status/lib/status_level.ts b/src/core/packages/apps/browser-internal/src/status/lib/status_level.ts similarity index 100% rename from packages/core/apps/core-apps-browser-internal/src/status/lib/status_level.ts rename to src/core/packages/apps/browser-internal/src/status/lib/status_level.ts diff --git a/packages/core/apps/core-apps-browser-internal/src/status/render_app.tsx b/src/core/packages/apps/browser-internal/src/status/render_app.tsx similarity index 100% rename from packages/core/apps/core-apps-browser-internal/src/status/render_app.tsx rename to src/core/packages/apps/browser-internal/src/status/render_app.tsx diff --git a/packages/core/apps/core-apps-browser-internal/src/status/status_app.tsx b/src/core/packages/apps/browser-internal/src/status/status_app.tsx similarity index 100% rename from packages/core/apps/core-apps-browser-internal/src/status/status_app.tsx rename to src/core/packages/apps/browser-internal/src/status/status_app.tsx diff --git a/packages/core/apps/core-apps-browser-internal/tsconfig.json b/src/core/packages/apps/browser-internal/tsconfig.json similarity index 96% rename from packages/core/apps/core-apps-browser-internal/tsconfig.json rename to src/core/packages/apps/browser-internal/tsconfig.json index 499f4b975f6d8..23c8d34721eaa 100644 --- a/packages/core/apps/core-apps-browser-internal/tsconfig.json +++ b/src/core/packages/apps/browser-internal/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../tsconfig.base.json", + "extends": "../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [ diff --git a/packages/core/apps/core-apps-server-internal/README.md b/src/core/packages/apps/server-internal/README.md similarity index 100% rename from packages/core/apps/core-apps-server-internal/README.md rename to src/core/packages/apps/server-internal/README.md diff --git a/packages/core/apps/core-apps-server-internal/assets/favicons/favicon.distribution.ico b/src/core/packages/apps/server-internal/assets/favicons/favicon.distribution.ico similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/favicons/favicon.distribution.ico rename to src/core/packages/apps/server-internal/assets/favicons/favicon.distribution.ico diff --git a/packages/core/apps/core-apps-server-internal/assets/favicons/favicon.distribution.png b/src/core/packages/apps/server-internal/assets/favicons/favicon.distribution.png similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/favicons/favicon.distribution.png rename to src/core/packages/apps/server-internal/assets/favicons/favicon.distribution.png diff --git a/packages/core/apps/core-apps-server-internal/assets/favicons/favicon.distribution.svg b/src/core/packages/apps/server-internal/assets/favicons/favicon.distribution.svg similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/favicons/favicon.distribution.svg rename to src/core/packages/apps/server-internal/assets/favicons/favicon.distribution.svg diff --git a/packages/core/apps/core-apps-server-internal/assets/favicons/favicon.ico b/src/core/packages/apps/server-internal/assets/favicons/favicon.ico similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/favicons/favicon.ico rename to src/core/packages/apps/server-internal/assets/favicons/favicon.ico diff --git a/packages/core/apps/core-apps-server-internal/assets/favicons/favicon.png b/src/core/packages/apps/server-internal/assets/favicons/favicon.png similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/favicons/favicon.png rename to src/core/packages/apps/server-internal/assets/favicons/favicon.png diff --git a/packages/core/apps/core-apps-server-internal/assets/favicons/favicon.svg b/src/core/packages/apps/server-internal/assets/favicons/favicon.svg similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/favicons/favicon.svg rename to src/core/packages/apps/server-internal/assets/favicons/favicon.svg diff --git a/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Black.woff b/src/core/packages/apps/server-internal/assets/fonts/inter/Inter-Black.woff similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Black.woff rename to src/core/packages/apps/server-internal/assets/fonts/inter/Inter-Black.woff diff --git a/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Black.woff2 b/src/core/packages/apps/server-internal/assets/fonts/inter/Inter-Black.woff2 similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Black.woff2 rename to src/core/packages/apps/server-internal/assets/fonts/inter/Inter-Black.woff2 diff --git a/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-BlackItalic.woff b/src/core/packages/apps/server-internal/assets/fonts/inter/Inter-BlackItalic.woff similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-BlackItalic.woff rename to src/core/packages/apps/server-internal/assets/fonts/inter/Inter-BlackItalic.woff diff --git a/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-BlackItalic.woff2 b/src/core/packages/apps/server-internal/assets/fonts/inter/Inter-BlackItalic.woff2 similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-BlackItalic.woff2 rename to src/core/packages/apps/server-internal/assets/fonts/inter/Inter-BlackItalic.woff2 diff --git a/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Bold.woff b/src/core/packages/apps/server-internal/assets/fonts/inter/Inter-Bold.woff similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Bold.woff rename to src/core/packages/apps/server-internal/assets/fonts/inter/Inter-Bold.woff diff --git a/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Bold.woff2 b/src/core/packages/apps/server-internal/assets/fonts/inter/Inter-Bold.woff2 similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Bold.woff2 rename to src/core/packages/apps/server-internal/assets/fonts/inter/Inter-Bold.woff2 diff --git a/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-BoldItalic.woff b/src/core/packages/apps/server-internal/assets/fonts/inter/Inter-BoldItalic.woff similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-BoldItalic.woff rename to src/core/packages/apps/server-internal/assets/fonts/inter/Inter-BoldItalic.woff diff --git a/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-BoldItalic.woff2 b/src/core/packages/apps/server-internal/assets/fonts/inter/Inter-BoldItalic.woff2 similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-BoldItalic.woff2 rename to src/core/packages/apps/server-internal/assets/fonts/inter/Inter-BoldItalic.woff2 diff --git a/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-ExtraBold.woff b/src/core/packages/apps/server-internal/assets/fonts/inter/Inter-ExtraBold.woff similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-ExtraBold.woff rename to src/core/packages/apps/server-internal/assets/fonts/inter/Inter-ExtraBold.woff diff --git a/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-ExtraBold.woff2 b/src/core/packages/apps/server-internal/assets/fonts/inter/Inter-ExtraBold.woff2 similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-ExtraBold.woff2 rename to src/core/packages/apps/server-internal/assets/fonts/inter/Inter-ExtraBold.woff2 diff --git a/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-ExtraBoldItalic.woff b/src/core/packages/apps/server-internal/assets/fonts/inter/Inter-ExtraBoldItalic.woff similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-ExtraBoldItalic.woff rename to src/core/packages/apps/server-internal/assets/fonts/inter/Inter-ExtraBoldItalic.woff diff --git a/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-ExtraBoldItalic.woff2 b/src/core/packages/apps/server-internal/assets/fonts/inter/Inter-ExtraBoldItalic.woff2 similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-ExtraBoldItalic.woff2 rename to src/core/packages/apps/server-internal/assets/fonts/inter/Inter-ExtraBoldItalic.woff2 diff --git a/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-ExtraLight.woff b/src/core/packages/apps/server-internal/assets/fonts/inter/Inter-ExtraLight.woff similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-ExtraLight.woff rename to src/core/packages/apps/server-internal/assets/fonts/inter/Inter-ExtraLight.woff diff --git a/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-ExtraLight.woff2 b/src/core/packages/apps/server-internal/assets/fonts/inter/Inter-ExtraLight.woff2 similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-ExtraLight.woff2 rename to src/core/packages/apps/server-internal/assets/fonts/inter/Inter-ExtraLight.woff2 diff --git a/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-ExtraLightItalic.woff b/src/core/packages/apps/server-internal/assets/fonts/inter/Inter-ExtraLightItalic.woff similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-ExtraLightItalic.woff rename to src/core/packages/apps/server-internal/assets/fonts/inter/Inter-ExtraLightItalic.woff diff --git a/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-ExtraLightItalic.woff2 b/src/core/packages/apps/server-internal/assets/fonts/inter/Inter-ExtraLightItalic.woff2 similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-ExtraLightItalic.woff2 rename to src/core/packages/apps/server-internal/assets/fonts/inter/Inter-ExtraLightItalic.woff2 diff --git a/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Italic.woff b/src/core/packages/apps/server-internal/assets/fonts/inter/Inter-Italic.woff similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Italic.woff rename to src/core/packages/apps/server-internal/assets/fonts/inter/Inter-Italic.woff diff --git a/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Italic.woff2 b/src/core/packages/apps/server-internal/assets/fonts/inter/Inter-Italic.woff2 similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Italic.woff2 rename to src/core/packages/apps/server-internal/assets/fonts/inter/Inter-Italic.woff2 diff --git a/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Light.woff b/src/core/packages/apps/server-internal/assets/fonts/inter/Inter-Light.woff similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Light.woff rename to src/core/packages/apps/server-internal/assets/fonts/inter/Inter-Light.woff diff --git a/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Light.woff2 b/src/core/packages/apps/server-internal/assets/fonts/inter/Inter-Light.woff2 similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Light.woff2 rename to src/core/packages/apps/server-internal/assets/fonts/inter/Inter-Light.woff2 diff --git a/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-LightItalic.woff b/src/core/packages/apps/server-internal/assets/fonts/inter/Inter-LightItalic.woff similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-LightItalic.woff rename to src/core/packages/apps/server-internal/assets/fonts/inter/Inter-LightItalic.woff diff --git a/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-LightItalic.woff2 b/src/core/packages/apps/server-internal/assets/fonts/inter/Inter-LightItalic.woff2 similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-LightItalic.woff2 rename to src/core/packages/apps/server-internal/assets/fonts/inter/Inter-LightItalic.woff2 diff --git a/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Medium.woff b/src/core/packages/apps/server-internal/assets/fonts/inter/Inter-Medium.woff similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Medium.woff rename to src/core/packages/apps/server-internal/assets/fonts/inter/Inter-Medium.woff diff --git a/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Medium.woff2 b/src/core/packages/apps/server-internal/assets/fonts/inter/Inter-Medium.woff2 similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Medium.woff2 rename to src/core/packages/apps/server-internal/assets/fonts/inter/Inter-Medium.woff2 diff --git a/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-MediumItalic.woff b/src/core/packages/apps/server-internal/assets/fonts/inter/Inter-MediumItalic.woff similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-MediumItalic.woff rename to src/core/packages/apps/server-internal/assets/fonts/inter/Inter-MediumItalic.woff diff --git a/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-MediumItalic.woff2 b/src/core/packages/apps/server-internal/assets/fonts/inter/Inter-MediumItalic.woff2 similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-MediumItalic.woff2 rename to src/core/packages/apps/server-internal/assets/fonts/inter/Inter-MediumItalic.woff2 diff --git a/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Regular.woff b/src/core/packages/apps/server-internal/assets/fonts/inter/Inter-Regular.woff similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Regular.woff rename to src/core/packages/apps/server-internal/assets/fonts/inter/Inter-Regular.woff diff --git a/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Regular.woff2 b/src/core/packages/apps/server-internal/assets/fonts/inter/Inter-Regular.woff2 similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Regular.woff2 rename to src/core/packages/apps/server-internal/assets/fonts/inter/Inter-Regular.woff2 diff --git a/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-SemiBold.woff b/src/core/packages/apps/server-internal/assets/fonts/inter/Inter-SemiBold.woff similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-SemiBold.woff rename to src/core/packages/apps/server-internal/assets/fonts/inter/Inter-SemiBold.woff diff --git a/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-SemiBold.woff2 b/src/core/packages/apps/server-internal/assets/fonts/inter/Inter-SemiBold.woff2 similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-SemiBold.woff2 rename to src/core/packages/apps/server-internal/assets/fonts/inter/Inter-SemiBold.woff2 diff --git a/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-SemiBoldItalic.woff b/src/core/packages/apps/server-internal/assets/fonts/inter/Inter-SemiBoldItalic.woff similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-SemiBoldItalic.woff rename to src/core/packages/apps/server-internal/assets/fonts/inter/Inter-SemiBoldItalic.woff diff --git a/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-SemiBoldItalic.woff2 b/src/core/packages/apps/server-internal/assets/fonts/inter/Inter-SemiBoldItalic.woff2 similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-SemiBoldItalic.woff2 rename to src/core/packages/apps/server-internal/assets/fonts/inter/Inter-SemiBoldItalic.woff2 diff --git a/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Thin.woff b/src/core/packages/apps/server-internal/assets/fonts/inter/Inter-Thin.woff similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Thin.woff rename to src/core/packages/apps/server-internal/assets/fonts/inter/Inter-Thin.woff diff --git a/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Thin.woff2 b/src/core/packages/apps/server-internal/assets/fonts/inter/Inter-Thin.woff2 similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Thin.woff2 rename to src/core/packages/apps/server-internal/assets/fonts/inter/Inter-Thin.woff2 diff --git a/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-ThinItalic.woff b/src/core/packages/apps/server-internal/assets/fonts/inter/Inter-ThinItalic.woff similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-ThinItalic.woff rename to src/core/packages/apps/server-internal/assets/fonts/inter/Inter-ThinItalic.woff diff --git a/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-ThinItalic.woff2 b/src/core/packages/apps/server-internal/assets/fonts/inter/Inter-ThinItalic.woff2 similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-ThinItalic.woff2 rename to src/core/packages/apps/server-internal/assets/fonts/inter/Inter-ThinItalic.woff2 diff --git a/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-italic.var.woff2 b/src/core/packages/apps/server-internal/assets/fonts/inter/Inter-italic.var.woff2 similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-italic.var.woff2 rename to src/core/packages/apps/server-internal/assets/fonts/inter/Inter-italic.var.woff2 diff --git a/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-roman.var.woff2 b/src/core/packages/apps/server-internal/assets/fonts/inter/Inter-roman.var.woff2 similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-roman.var.woff2 rename to src/core/packages/apps/server-internal/assets/fonts/inter/Inter-roman.var.woff2 diff --git a/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter.var.woff2 b/src/core/packages/apps/server-internal/assets/fonts/inter/Inter.var.woff2 similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter.var.woff2 rename to src/core/packages/apps/server-internal/assets/fonts/inter/Inter.var.woff2 diff --git a/packages/core/apps/core-apps-server-internal/assets/fonts/inter/LICENSE.txt b/src/core/packages/apps/server-internal/assets/fonts/inter/LICENSE.txt similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/fonts/inter/LICENSE.txt rename to src/core/packages/apps/server-internal/assets/fonts/inter/LICENSE.txt diff --git a/packages/core/apps/core-apps-server-internal/assets/fonts/readme.md b/src/core/packages/apps/server-internal/assets/fonts/readme.md similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/fonts/readme.md rename to src/core/packages/apps/server-internal/assets/fonts/readme.md diff --git a/packages/core/apps/core-apps-server-internal/assets/fonts/roboto_mono/LICENSE.txt b/src/core/packages/apps/server-internal/assets/fonts/roboto_mono/LICENSE.txt similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/fonts/roboto_mono/LICENSE.txt rename to src/core/packages/apps/server-internal/assets/fonts/roboto_mono/LICENSE.txt diff --git a/packages/core/apps/core-apps-server-internal/assets/fonts/roboto_mono/RobotoMono-Bold.ttf b/src/core/packages/apps/server-internal/assets/fonts/roboto_mono/RobotoMono-Bold.ttf similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/fonts/roboto_mono/RobotoMono-Bold.ttf rename to src/core/packages/apps/server-internal/assets/fonts/roboto_mono/RobotoMono-Bold.ttf diff --git a/packages/core/apps/core-apps-server-internal/assets/fonts/roboto_mono/RobotoMono-BoldItalic.ttf b/src/core/packages/apps/server-internal/assets/fonts/roboto_mono/RobotoMono-BoldItalic.ttf similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/fonts/roboto_mono/RobotoMono-BoldItalic.ttf rename to src/core/packages/apps/server-internal/assets/fonts/roboto_mono/RobotoMono-BoldItalic.ttf diff --git a/packages/core/apps/core-apps-server-internal/assets/fonts/roboto_mono/RobotoMono-Italic.ttf b/src/core/packages/apps/server-internal/assets/fonts/roboto_mono/RobotoMono-Italic.ttf similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/fonts/roboto_mono/RobotoMono-Italic.ttf rename to src/core/packages/apps/server-internal/assets/fonts/roboto_mono/RobotoMono-Italic.ttf diff --git a/packages/core/apps/core-apps-server-internal/assets/fonts/roboto_mono/RobotoMono-Light.ttf b/src/core/packages/apps/server-internal/assets/fonts/roboto_mono/RobotoMono-Light.ttf similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/fonts/roboto_mono/RobotoMono-Light.ttf rename to src/core/packages/apps/server-internal/assets/fonts/roboto_mono/RobotoMono-Light.ttf diff --git a/packages/core/apps/core-apps-server-internal/assets/fonts/roboto_mono/RobotoMono-LightItalic.ttf b/src/core/packages/apps/server-internal/assets/fonts/roboto_mono/RobotoMono-LightItalic.ttf similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/fonts/roboto_mono/RobotoMono-LightItalic.ttf rename to src/core/packages/apps/server-internal/assets/fonts/roboto_mono/RobotoMono-LightItalic.ttf diff --git a/packages/core/apps/core-apps-server-internal/assets/fonts/roboto_mono/RobotoMono-Medium.ttf b/src/core/packages/apps/server-internal/assets/fonts/roboto_mono/RobotoMono-Medium.ttf similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/fonts/roboto_mono/RobotoMono-Medium.ttf rename to src/core/packages/apps/server-internal/assets/fonts/roboto_mono/RobotoMono-Medium.ttf diff --git a/packages/core/apps/core-apps-server-internal/assets/fonts/roboto_mono/RobotoMono-MediumItalic.ttf b/src/core/packages/apps/server-internal/assets/fonts/roboto_mono/RobotoMono-MediumItalic.ttf similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/fonts/roboto_mono/RobotoMono-MediumItalic.ttf rename to src/core/packages/apps/server-internal/assets/fonts/roboto_mono/RobotoMono-MediumItalic.ttf diff --git a/packages/core/apps/core-apps-server-internal/assets/fonts/roboto_mono/RobotoMono-Regular.ttf b/src/core/packages/apps/server-internal/assets/fonts/roboto_mono/RobotoMono-Regular.ttf similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/fonts/roboto_mono/RobotoMono-Regular.ttf rename to src/core/packages/apps/server-internal/assets/fonts/roboto_mono/RobotoMono-Regular.ttf diff --git a/packages/core/apps/core-apps-server-internal/assets/fonts/roboto_mono/RobotoMono-Thin.ttf b/src/core/packages/apps/server-internal/assets/fonts/roboto_mono/RobotoMono-Thin.ttf similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/fonts/roboto_mono/RobotoMono-Thin.ttf rename to src/core/packages/apps/server-internal/assets/fonts/roboto_mono/RobotoMono-Thin.ttf diff --git a/packages/core/apps/core-apps-server-internal/assets/fonts/roboto_mono/RobotoMono-ThinItalic.ttf b/src/core/packages/apps/server-internal/assets/fonts/roboto_mono/RobotoMono-ThinItalic.ttf similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/fonts/roboto_mono/RobotoMono-ThinItalic.ttf rename to src/core/packages/apps/server-internal/assets/fonts/roboto_mono/RobotoMono-ThinItalic.ttf diff --git a/packages/core/apps/core-apps-server-internal/assets/legacy_dark_theme.css b/src/core/packages/apps/server-internal/assets/legacy_dark_theme.css similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/legacy_dark_theme.css rename to src/core/packages/apps/server-internal/assets/legacy_dark_theme.css diff --git a/packages/core/apps/core-apps-server-internal/assets/legacy_dark_theme.min.css b/src/core/packages/apps/server-internal/assets/legacy_dark_theme.min.css similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/legacy_dark_theme.min.css rename to src/core/packages/apps/server-internal/assets/legacy_dark_theme.min.css diff --git a/packages/core/apps/core-apps-server-internal/assets/legacy_light_theme.css b/src/core/packages/apps/server-internal/assets/legacy_light_theme.css similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/legacy_light_theme.css rename to src/core/packages/apps/server-internal/assets/legacy_light_theme.css diff --git a/packages/core/apps/core-apps-server-internal/assets/legacy_light_theme.min.css b/src/core/packages/apps/server-internal/assets/legacy_light_theme.min.css similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/legacy_light_theme.min.css rename to src/core/packages/apps/server-internal/assets/legacy_light_theme.min.css diff --git a/packages/core/apps/core-apps-server-internal/assets/legacy_styles.css b/src/core/packages/apps/server-internal/assets/legacy_styles.css similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/legacy_styles.css rename to src/core/packages/apps/server-internal/assets/legacy_styles.css diff --git a/packages/core/apps/core-apps-server-internal/assets/legacy_theme.js b/src/core/packages/apps/server-internal/assets/legacy_theme.js similarity index 100% rename from packages/core/apps/core-apps-server-internal/assets/legacy_theme.js rename to src/core/packages/apps/server-internal/assets/legacy_theme.js diff --git a/packages/core/apps/core-apps-server-internal/index.ts b/src/core/packages/apps/server-internal/index.ts similarity index 100% rename from packages/core/apps/core-apps-server-internal/index.ts rename to src/core/packages/apps/server-internal/index.ts diff --git a/packages/core/analytics/core-analytics-server/jest.config.js b/src/core/packages/apps/server-internal/jest.config.js similarity index 84% rename from packages/core/analytics/core-analytics-server/jest.config.js rename to src/core/packages/apps/server-internal/jest.config.js index 92cead0f9e0a7..50706961a694a 100644 --- a/packages/core/analytics/core-analytics-server/jest.config.js +++ b/src/core/packages/apps/server-internal/jest.config.js @@ -9,6 +9,6 @@ module.exports = { preset: '@kbn/test/jest_node', - rootDir: '../../../..', - roots: ['/packages/core/analytics/core-analytics-server'], + rootDir: '../../../../..', + roots: ['/src/core/packages/apps/server-internal'], }; diff --git a/packages/core/apps/core-apps-server-internal/kibana.jsonc b/src/core/packages/apps/server-internal/kibana.jsonc similarity index 100% rename from packages/core/apps/core-apps-server-internal/kibana.jsonc rename to src/core/packages/apps/server-internal/kibana.jsonc diff --git a/packages/core/apps/core-apps-server-internal/package.json b/src/core/packages/apps/server-internal/package.json similarity index 100% rename from packages/core/apps/core-apps-server-internal/package.json rename to src/core/packages/apps/server-internal/package.json diff --git a/packages/core/apps/core-apps-server-internal/src/bundle_routes/bundle_route.test.mocks.ts b/src/core/packages/apps/server-internal/src/bundle_routes/bundle_route.test.mocks.ts similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/bundle_routes/bundle_route.test.mocks.ts rename to src/core/packages/apps/server-internal/src/bundle_routes/bundle_route.test.mocks.ts diff --git a/packages/core/apps/core-apps-server-internal/src/bundle_routes/bundle_route.test.ts b/src/core/packages/apps/server-internal/src/bundle_routes/bundle_route.test.ts similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/bundle_routes/bundle_route.test.ts rename to src/core/packages/apps/server-internal/src/bundle_routes/bundle_route.test.ts diff --git a/packages/core/apps/core-apps-server-internal/src/bundle_routes/bundles_route.ts b/src/core/packages/apps/server-internal/src/bundle_routes/bundles_route.ts similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/bundle_routes/bundles_route.ts rename to src/core/packages/apps/server-internal/src/bundle_routes/bundles_route.ts diff --git a/packages/core/apps/core-apps-server-internal/src/bundle_routes/dynamic_asset_response.test.ts b/src/core/packages/apps/server-internal/src/bundle_routes/dynamic_asset_response.test.ts similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/bundle_routes/dynamic_asset_response.test.ts rename to src/core/packages/apps/server-internal/src/bundle_routes/dynamic_asset_response.test.ts diff --git a/packages/core/apps/core-apps-server-internal/src/bundle_routes/dynamic_asset_response.ts b/src/core/packages/apps/server-internal/src/bundle_routes/dynamic_asset_response.ts similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/bundle_routes/dynamic_asset_response.ts rename to src/core/packages/apps/server-internal/src/bundle_routes/dynamic_asset_response.ts diff --git a/packages/core/apps/core-apps-server-internal/src/bundle_routes/file_hash.test.mocks.ts b/src/core/packages/apps/server-internal/src/bundle_routes/file_hash.test.mocks.ts similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/bundle_routes/file_hash.test.mocks.ts rename to src/core/packages/apps/server-internal/src/bundle_routes/file_hash.test.mocks.ts diff --git a/packages/core/apps/core-apps-server-internal/src/bundle_routes/file_hash.test.ts b/src/core/packages/apps/server-internal/src/bundle_routes/file_hash.test.ts similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/bundle_routes/file_hash.test.ts rename to src/core/packages/apps/server-internal/src/bundle_routes/file_hash.test.ts diff --git a/packages/core/apps/core-apps-server-internal/src/bundle_routes/file_hash.ts b/src/core/packages/apps/server-internal/src/bundle_routes/file_hash.ts similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/bundle_routes/file_hash.ts rename to src/core/packages/apps/server-internal/src/bundle_routes/file_hash.ts diff --git a/packages/core/apps/core-apps-server-internal/src/bundle_routes/file_hash_cache.test.ts b/src/core/packages/apps/server-internal/src/bundle_routes/file_hash_cache.test.ts similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/bundle_routes/file_hash_cache.test.ts rename to src/core/packages/apps/server-internal/src/bundle_routes/file_hash_cache.test.ts diff --git a/packages/core/apps/core-apps-server-internal/src/bundle_routes/file_hash_cache.ts b/src/core/packages/apps/server-internal/src/bundle_routes/file_hash_cache.ts similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/bundle_routes/file_hash_cache.ts rename to src/core/packages/apps/server-internal/src/bundle_routes/file_hash_cache.ts diff --git a/packages/core/apps/core-apps-server-internal/src/bundle_routes/fs.ts b/src/core/packages/apps/server-internal/src/bundle_routes/fs.ts similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/bundle_routes/fs.ts rename to src/core/packages/apps/server-internal/src/bundle_routes/fs.ts diff --git a/packages/core/apps/core-apps-server-internal/src/bundle_routes/index.ts b/src/core/packages/apps/server-internal/src/bundle_routes/index.ts similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/bundle_routes/index.ts rename to src/core/packages/apps/server-internal/src/bundle_routes/index.ts diff --git a/packages/core/apps/core-apps-server-internal/src/bundle_routes/register_bundle_routes.test.mocks.ts b/src/core/packages/apps/server-internal/src/bundle_routes/register_bundle_routes.test.mocks.ts similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/bundle_routes/register_bundle_routes.test.mocks.ts rename to src/core/packages/apps/server-internal/src/bundle_routes/register_bundle_routes.test.mocks.ts diff --git a/packages/core/apps/core-apps-server-internal/src/bundle_routes/register_bundle_routes.test.ts b/src/core/packages/apps/server-internal/src/bundle_routes/register_bundle_routes.test.ts similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/bundle_routes/register_bundle_routes.test.ts rename to src/core/packages/apps/server-internal/src/bundle_routes/register_bundle_routes.test.ts diff --git a/packages/core/apps/core-apps-server-internal/src/bundle_routes/register_bundle_routes.ts b/src/core/packages/apps/server-internal/src/bundle_routes/register_bundle_routes.ts similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/bundle_routes/register_bundle_routes.ts rename to src/core/packages/apps/server-internal/src/bundle_routes/register_bundle_routes.ts diff --git a/packages/core/apps/core-apps-server-internal/src/bundle_routes/select_compressed_file.ts b/src/core/packages/apps/server-internal/src/bundle_routes/select_compressed_file.ts similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/bundle_routes/select_compressed_file.ts rename to src/core/packages/apps/server-internal/src/bundle_routes/select_compressed_file.ts diff --git a/packages/core/apps/core-apps-server-internal/src/bundle_routes/utils.ts b/src/core/packages/apps/server-internal/src/bundle_routes/utils.ts similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/bundle_routes/utils.ts rename to src/core/packages/apps/server-internal/src/bundle_routes/utils.ts diff --git a/packages/core/apps/core-apps-server-internal/src/core_app.test.mocks.ts b/src/core/packages/apps/server-internal/src/core_app.test.mocks.ts similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/core_app.test.mocks.ts rename to src/core/packages/apps/server-internal/src/core_app.test.mocks.ts diff --git a/packages/core/apps/core-apps-server-internal/src/core_app.test.ts b/src/core/packages/apps/server-internal/src/core_app.test.ts similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/core_app.test.ts rename to src/core/packages/apps/server-internal/src/core_app.test.ts diff --git a/packages/core/apps/core-apps-server-internal/src/core_app.ts b/src/core/packages/apps/server-internal/src/core_app.ts similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/core_app.ts rename to src/core/packages/apps/server-internal/src/core_app.ts diff --git a/packages/core/apps/core-apps-server-internal/src/core_app_config.test.ts b/src/core/packages/apps/server-internal/src/core_app_config.test.ts similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/core_app_config.test.ts rename to src/core/packages/apps/server-internal/src/core_app_config.test.ts diff --git a/packages/core/apps/core-apps-server-internal/src/core_app_config.ts b/src/core/packages/apps/server-internal/src/core_app_config.ts similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/core_app_config.ts rename to src/core/packages/apps/server-internal/src/core_app_config.ts diff --git a/packages/core/apps/core-apps-server-internal/src/index.ts b/src/core/packages/apps/server-internal/src/index.ts similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/index.ts rename to src/core/packages/apps/server-internal/src/index.ts diff --git a/packages/core/apps/core-apps-server-internal/src/internal_types.ts b/src/core/packages/apps/server-internal/src/internal_types.ts similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/internal_types.ts rename to src/core/packages/apps/server-internal/src/internal_types.ts diff --git a/packages/core/apps/core-apps-server-internal/tsconfig.json b/src/core/packages/apps/server-internal/tsconfig.json similarity index 95% rename from packages/core/apps/core-apps-server-internal/tsconfig.json rename to src/core/packages/apps/server-internal/tsconfig.json index cc84d62f4faa4..5fc120ad7dc15 100644 --- a/packages/core/apps/core-apps-server-internal/tsconfig.json +++ b/src/core/packages/apps/server-internal/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../tsconfig.base.json", + "extends": "../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "stripInternal": false, diff --git a/packages/core/base/core-base-browser-internal/README.md b/src/core/packages/base/browser-internal/README.md similarity index 100% rename from packages/core/base/core-base-browser-internal/README.md rename to src/core/packages/base/browser-internal/README.md diff --git a/packages/core/base/core-base-browser-internal/index.ts b/src/core/packages/base/browser-internal/index.ts similarity index 100% rename from packages/core/base/core-base-browser-internal/index.ts rename to src/core/packages/base/browser-internal/index.ts diff --git a/src/core/packages/base/browser-internal/jest.config.js b/src/core/packages/base/browser-internal/jest.config.js new file mode 100644 index 0000000000000..b4bdea09b3803 --- /dev/null +++ b/src/core/packages/base/browser-internal/jest.config.js @@ -0,0 +1,14 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +module.exports = { + preset: '@kbn/test', + rootDir: '../../../../..', + roots: ['/src/core/packages/base/browser-internal'], +}; diff --git a/packages/core/base/core-base-browser-internal/kibana.jsonc b/src/core/packages/base/browser-internal/kibana.jsonc similarity index 100% rename from packages/core/base/core-base-browser-internal/kibana.jsonc rename to src/core/packages/base/browser-internal/kibana.jsonc diff --git a/packages/core/base/core-base-browser-internal/package.json b/src/core/packages/base/browser-internal/package.json similarity index 100% rename from packages/core/base/core-base-browser-internal/package.json rename to src/core/packages/base/browser-internal/package.json diff --git a/packages/core/base/core-base-browser-internal/src/core_context.ts b/src/core/packages/base/browser-internal/src/core_context.ts similarity index 100% rename from packages/core/base/core-base-browser-internal/src/core_context.ts rename to src/core/packages/base/browser-internal/src/core_context.ts diff --git a/packages/core/base/core-base-browser-internal/src/services.ts b/src/core/packages/base/browser-internal/src/services.ts similarity index 100% rename from packages/core/base/core-base-browser-internal/src/services.ts rename to src/core/packages/base/browser-internal/src/services.ts diff --git a/packages/core/base/core-base-browser-internal/tsconfig.json b/src/core/packages/base/browser-internal/tsconfig.json similarity index 86% rename from packages/core/base/core-base-browser-internal/tsconfig.json rename to src/core/packages/base/browser-internal/tsconfig.json index a3e5d5fc950b9..6ee4dfcc17547 100644 --- a/packages/core/base/core-base-browser-internal/tsconfig.json +++ b/src/core/packages/base/browser-internal/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../tsconfig.base.json", + "extends": "../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [ diff --git a/packages/core/base/core-base-common/BUILD.bazel b/src/core/packages/base/common/BUILD.bazel similarity index 100% rename from packages/core/base/core-base-common/BUILD.bazel rename to src/core/packages/base/common/BUILD.bazel diff --git a/packages/core/base/core-base-common/README.md b/src/core/packages/base/common/README.md similarity index 100% rename from packages/core/base/core-base-common/README.md rename to src/core/packages/base/common/README.md diff --git a/packages/core/base/core-base-common/index.ts b/src/core/packages/base/common/index.ts similarity index 100% rename from packages/core/base/core-base-common/index.ts rename to src/core/packages/base/common/index.ts diff --git a/packages/core/base/core-base-common/jest.config.js b/src/core/packages/base/common/jest.config.js similarity index 85% rename from packages/core/base/core-base-common/jest.config.js rename to src/core/packages/base/common/jest.config.js index 2d868d29fa4bf..8d4d5a7856044 100644 --- a/packages/core/base/core-base-common/jest.config.js +++ b/src/core/packages/base/common/jest.config.js @@ -9,6 +9,6 @@ module.exports = { preset: '@kbn/test/jest_node', - rootDir: '../../../..', - roots: ['/packages/core/base/core-base-common'], + rootDir: '../../../../..', + roots: ['/src/core/packages/base/common'], }; diff --git a/packages/core/base/core-base-common/kibana.jsonc b/src/core/packages/base/common/kibana.jsonc similarity index 100% rename from packages/core/base/core-base-common/kibana.jsonc rename to src/core/packages/base/common/kibana.jsonc diff --git a/packages/core/base/core-base-common/package.json b/src/core/packages/base/common/package.json similarity index 100% rename from packages/core/base/core-base-common/package.json rename to src/core/packages/base/common/package.json diff --git a/packages/core/base/core-base-common/src/eui.ts b/src/core/packages/base/common/src/eui.ts similarity index 100% rename from packages/core/base/core-base-common/src/eui.ts rename to src/core/packages/base/common/src/eui.ts diff --git a/packages/core/base/core-base-common/src/plugins.ts b/src/core/packages/base/common/src/plugins.ts similarity index 100% rename from packages/core/base/core-base-common/src/plugins.ts rename to src/core/packages/base/common/src/plugins.ts diff --git a/packages/core/base/core-base-common/tsconfig.json b/src/core/packages/base/common/tsconfig.json similarity index 81% rename from packages/core/base/core-base-common/tsconfig.json rename to src/core/packages/base/common/tsconfig.json index 40ac62b671e04..20ffd85947c56 100644 --- a/packages/core/base/core-base-common/tsconfig.json +++ b/src/core/packages/base/common/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../tsconfig.base.json", + "extends": "../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [ diff --git a/src/dev/build/tasks/create_cdn_assets_task.ts b/src/dev/build/tasks/create_cdn_assets_task.ts index c7316a9030c98..97e6dc884fd1e 100644 --- a/src/dev/build/tasks/create_cdn_assets_task.ts +++ b/src/dev/build/tasks/create_cdn_assets_task.ts @@ -51,7 +51,7 @@ export const CreateCdnAssets: Task = { const manifest = Jsonc.parse(readFileSync(path, 'utf8')) as any; if (manifest?.plugin?.id) { const pluginRoot = resolve(dirname(path)); - // packages/core/apps/core-apps-server-internal/src/core_app.ts + // src/core/packages/apps/server-internal/src/core_app.ts const assetsSource = resolve(pluginRoot, 'public', 'assets'); const assetsDest = resolve(assets, buildSha, 'plugins', manifest.plugin.id, 'assets'); try { @@ -63,7 +63,7 @@ export const CreateCdnAssets: Task = { } try { - // packages/core/apps/core-apps-server-internal/src/bundle_routes/register_bundle_routes.ts + // src/core/packages/apps/server-internal/src/bundle_routes/register_bundle_routes.ts const bundlesSource = resolve(pluginRoot, 'target', 'public'); const bundlesDest = resolve(bundles, 'plugin', manifest.plugin.id, '1.0.0'); await access(bundlesSource); @@ -76,7 +76,7 @@ export const CreateCdnAssets: Task = { } }); - // packages/core/apps/core-apps-server-internal/src/bundle_routes/register_bundle_routes.ts + // src/core/packages/apps/server-internal/src/bundle_routes/register_bundle_routes.ts await copyAll( resolve(buildSource, 'node_modules/@kbn/ui-shared-deps-npm/shared_built_assets'), resolve(bundles, 'kbn-ui-shared-deps-npm') @@ -94,7 +94,7 @@ export const CreateCdnAssets: Task = { resolve(bundles, 'kbn-monaco') ); - // packages/core/apps/core-apps-server-internal/src/core_app.ts + // src/core/packages/apps/server-internal/src/core_app.ts await copyAll( resolve(buildSource, 'node_modules/@kbn/core-apps-server-internal/assets'), resolve(assets, buildSha, 'ui') diff --git a/src/dev/build/tasks/replace_favicon.ts b/src/dev/build/tasks/replace_favicon.ts index b2f63d40aba1c..4b55c0a6b749d 100644 --- a/src/dev/build/tasks/replace_favicon.ts +++ b/src/dev/build/tasks/replace_favicon.ts @@ -15,23 +15,23 @@ export const ReplaceFavicon: Task = { async run(config, log, build) { await copy( config.resolveFromRepo( - 'packages/core/apps/core-apps-server-internal/assets/favicons/favicon.distribution.ico' + 'src/core/packages/apps/server-internal/assets/favicons/favicon.distribution.ico' ), - build.resolvePath('packages/core/apps/core-apps-server-internal/assets/favicons/favicon.ico') + build.resolvePath('src/core/packages/apps/server-internal/assets/favicons/favicon.ico') ); await copy( config.resolveFromRepo( - 'packages/core/apps/core-apps-server-internal/assets/favicons/favicon.distribution.png' + 'src/core/packages/apps/server-internal/assets/favicons/favicon.distribution.png' ), - build.resolvePath('packages/core/apps/core-apps-server-internal/assets/favicons/favicon.png') + build.resolvePath('src/core/packages/apps/server-internal/assets/favicons/favicon.png') ); await copy( config.resolveFromRepo( - 'packages/core/apps/core-apps-server-internal/assets/favicons/favicon.distribution.svg' + 'src/core/packages/apps/server-internal/assets/favicons/favicon.distribution.svg' ), - build.resolvePath('packages/core/apps/core-apps-server-internal/assets/favicons/favicon.svg') + build.resolvePath('src/core/packages/apps/server-internal/assets/favicons/favicon.svg') ); }, }; diff --git a/src/dev/precommit_hook/casing_check_config.js b/src/dev/precommit_hook/casing_check_config.js index 3d90324426247..28897457278eb 100644 --- a/src/dev/precommit_hook/casing_check_config.js +++ b/src/dev/precommit_hook/casing_check_config.js @@ -36,7 +36,7 @@ export const IGNORE_FILE_GLOBS = [ '**/.*', '**/__mocks__/**/*', 'x-pack/docs/**/*', - 'packages/core/apps/core-apps-server-internal/assets/fonts/**/*', + 'src/core/packages/apps/server-internal/assets/fonts/**/*', 'src/dev/code_coverage/ingest_coverage/integration_tests/mocks/**/*', 'packages/kbn-utility-types/test-d/**/*', 'Dockerfile*', diff --git a/tsconfig.base.json b/tsconfig.base.json index 84c8cb68d811a..c5bc388c4c96d 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -232,40 +232,40 @@ "@kbn/controls-plugin/*": ["src/plugins/controls/*"], "@kbn/core": ["src/core"], "@kbn/core/*": ["src/core/*"], - "@kbn/core-analytics-browser": ["packages/core/analytics/core-analytics-browser"], - "@kbn/core-analytics-browser/*": ["packages/core/analytics/core-analytics-browser/*"], - "@kbn/core-analytics-browser-internal": ["packages/core/analytics/core-analytics-browser-internal"], - "@kbn/core-analytics-browser-internal/*": ["packages/core/analytics/core-analytics-browser-internal/*"], + "@kbn/core-analytics-browser": ["src/core/packages/analytics/browser"], + "@kbn/core-analytics-browser/*": ["src/core/packages/analytics/browser/*"], + "@kbn/core-analytics-browser-internal": ["src/core/packages/analytics/browser-internal"], + "@kbn/core-analytics-browser-internal/*": ["src/core/packages/analytics/browser-internal/*"], "@kbn/core-analytics-browser-mocks": ["packages/core/analytics/core-analytics-browser-mocks"], "@kbn/core-analytics-browser-mocks/*": ["packages/core/analytics/core-analytics-browser-mocks/*"], - "@kbn/core-analytics-server": ["packages/core/analytics/core-analytics-server"], - "@kbn/core-analytics-server/*": ["packages/core/analytics/core-analytics-server/*"], - "@kbn/core-analytics-server-internal": ["packages/core/analytics/core-analytics-server-internal"], - "@kbn/core-analytics-server-internal/*": ["packages/core/analytics/core-analytics-server-internal/*"], + "@kbn/core-analytics-server": ["src/core/packages/analytics/server"], + "@kbn/core-analytics-server/*": ["src/core/packages/analytics/server/*"], + "@kbn/core-analytics-server-internal": ["src/core/packages/analytics/server-internal"], + "@kbn/core-analytics-server-internal/*": ["src/core/packages/analytics/server-internal/*"], "@kbn/core-analytics-server-mocks": ["packages/core/analytics/core-analytics-server-mocks"], "@kbn/core-analytics-server-mocks/*": ["packages/core/analytics/core-analytics-server-mocks/*"], "@kbn/core-app-status-plugin": ["test/plugin_functional/plugins/core_app_status"], "@kbn/core-app-status-plugin/*": ["test/plugin_functional/plugins/core_app_status/*"], - "@kbn/core-application-browser": ["packages/core/application/core-application-browser"], - "@kbn/core-application-browser/*": ["packages/core/application/core-application-browser/*"], - "@kbn/core-application-browser-internal": ["packages/core/application/core-application-browser-internal"], - "@kbn/core-application-browser-internal/*": ["packages/core/application/core-application-browser-internal/*"], + "@kbn/core-application-browser": ["src/core/packages/application/browser"], + "@kbn/core-application-browser/*": ["src/core/packages/application/browser/*"], + "@kbn/core-application-browser-internal": ["src/core/packages/application/browser-internal"], + "@kbn/core-application-browser-internal/*": ["src/core/packages/application/browser-internal/*"], "@kbn/core-application-browser-mocks": ["packages/core/application/core-application-browser-mocks"], "@kbn/core-application-browser-mocks/*": ["packages/core/application/core-application-browser-mocks/*"], - "@kbn/core-application-common": ["packages/core/application/core-application-common"], - "@kbn/core-application-common/*": ["packages/core/application/core-application-common/*"], - "@kbn/core-apps-browser-internal": ["packages/core/apps/core-apps-browser-internal"], - "@kbn/core-apps-browser-internal/*": ["packages/core/apps/core-apps-browser-internal/*"], + "@kbn/core-application-common": ["src/core/packages/application/common"], + "@kbn/core-application-common/*": ["src/core/packages/application/common/*"], + "@kbn/core-apps-browser-internal": ["src/core/packages/apps/browser-internal"], + "@kbn/core-apps-browser-internal/*": ["src/core/packages/apps/browser-internal/*"], "@kbn/core-apps-browser-mocks": ["packages/core/apps/core-apps-browser-mocks"], "@kbn/core-apps-browser-mocks/*": ["packages/core/apps/core-apps-browser-mocks/*"], - "@kbn/core-apps-server-internal": ["packages/core/apps/core-apps-server-internal"], - "@kbn/core-apps-server-internal/*": ["packages/core/apps/core-apps-server-internal/*"], - "@kbn/core-base-browser-internal": ["packages/core/base/core-base-browser-internal"], - "@kbn/core-base-browser-internal/*": ["packages/core/base/core-base-browser-internal/*"], + "@kbn/core-apps-server-internal": ["src/core/packages/apps/server-internal"], + "@kbn/core-apps-server-internal/*": ["src/core/packages/apps/server-internal/*"], + "@kbn/core-base-browser-internal": ["src/core/packages/base/browser-internal"], + "@kbn/core-base-browser-internal/*": ["src/core/packages/base/browser-internal/*"], "@kbn/core-base-browser-mocks": ["packages/core/base/core-base-browser-mocks"], "@kbn/core-base-browser-mocks/*": ["packages/core/base/core-base-browser-mocks/*"], - "@kbn/core-base-common": ["packages/core/base/core-base-common"], - "@kbn/core-base-common/*": ["packages/core/base/core-base-common/*"], + "@kbn/core-base-common": ["src/core/packages/base/common"], + "@kbn/core-base-common/*": ["src/core/packages/base/common/*"], "@kbn/core-base-common-internal": ["packages/core/base/core-base-common-internal"], "@kbn/core-base-common-internal/*": ["packages/core/base/core-base-common-internal/*"], "@kbn/core-base-server-internal": ["packages/core/base/core-base-server-internal"], diff --git a/yarn.lock b/yarn.lock index 84be1ce3cd650..1b7f2b20ddc2b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4277,7 +4277,7 @@ version "0.0.0" uid "" -"@kbn/core-analytics-browser-internal@link:packages/core/analytics/core-analytics-browser-internal": +"@kbn/core-analytics-browser-internal@link:src/core/packages/analytics/browser-internal": version "0.0.0" uid "" @@ -4285,11 +4285,11 @@ version "0.0.0" uid "" -"@kbn/core-analytics-browser@link:packages/core/analytics/core-analytics-browser": +"@kbn/core-analytics-browser@link:src/core/packages/analytics/browser": version "0.0.0" uid "" -"@kbn/core-analytics-server-internal@link:packages/core/analytics/core-analytics-server-internal": +"@kbn/core-analytics-server-internal@link:src/core/packages/analytics/server-internal": version "0.0.0" uid "" @@ -4297,7 +4297,7 @@ version "0.0.0" uid "" -"@kbn/core-analytics-server@link:packages/core/analytics/core-analytics-server": +"@kbn/core-analytics-server@link:src/core/packages/analytics/server": version "0.0.0" uid "" @@ -4305,7 +4305,7 @@ version "0.0.0" uid "" -"@kbn/core-application-browser-internal@link:packages/core/application/core-application-browser-internal": +"@kbn/core-application-browser-internal@link:src/core/packages/application/browser-internal": version "0.0.0" uid "" @@ -4313,15 +4313,15 @@ version "0.0.0" uid "" -"@kbn/core-application-browser@link:packages/core/application/core-application-browser": +"@kbn/core-application-browser@link:src/core/packages/application/browser": version "0.0.0" uid "" -"@kbn/core-application-common@link:packages/core/application/core-application-common": +"@kbn/core-application-common@link:src/core/packages/application/common": version "0.0.0" uid "" -"@kbn/core-apps-browser-internal@link:packages/core/apps/core-apps-browser-internal": +"@kbn/core-apps-browser-internal@link:src/core/packages/apps/browser-internal": version "0.0.0" uid "" @@ -4329,11 +4329,11 @@ version "0.0.0" uid "" -"@kbn/core-apps-server-internal@link:packages/core/apps/core-apps-server-internal": +"@kbn/core-apps-server-internal@link:src/core/packages/apps/server-internal": version "0.0.0" uid "" -"@kbn/core-base-browser-internal@link:packages/core/base/core-base-browser-internal": +"@kbn/core-base-browser-internal@link:src/core/packages/base/browser-internal": version "0.0.0" uid "" @@ -4345,7 +4345,7 @@ version "0.0.0" uid "" -"@kbn/core-base-common@link:packages/core/base/core-base-common": +"@kbn/core-base-common@link:src/core/packages/base/common": version "0.0.0" uid "" From 96264d29237f0b7cfc8c651393f12d248f0d84e0 Mon Sep 17 00:00:00 2001 From: Philippe Oberti Date: Mon, 23 Dec 2024 09:55:30 -0600 Subject: [PATCH 11/35] [Security Solution] - fixing infinite look on host flyout panel due to lack of memoization (#204999) ## Summary This PR fixes [an issue](https://github.com/elastic/security-team/issues/11424) raised recently where opening a preview panel for a host of user on top of a flyout already showing a host or user was getting the UI stuck into an infinite loop. While we found a few ways to fix the issue - primarily adding memoization to the UI components within the HostPanel and UserPanel, the approach in this PR fixes the issue at a more root level. Infinite loop behavior https://github.com/user-attachments/assets/92cb60ad-7801-43ec-a247-8943e091b6a8 Issue fixed https://github.com/user-attachments/assets/30b30b42-f32e-4c02-9407-9d0f671d7216 This fix should also potentially bring some performance improvement to all the components that are using the hook (we have a few). --- .../alerts_by_status/use_alerts_by_status.ts | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/x-pack/solutions/security/plugins/security_solution/public/overview/components/detection_response/alerts_by_status/use_alerts_by_status.ts b/x-pack/solutions/security/plugins/security_solution/public/overview/components/detection_response/alerts_by_status/use_alerts_by_status.ts index e80f3ec0a0caf..9af905cab8580 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/overview/components/detection_response/alerts_by_status/use_alerts_by_status.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/overview/components/detection_response/alerts_by_status/use_alerts_by_status.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { useCallback, useEffect, useState } from 'react'; +import { useCallback, useEffect, useMemo, useState } from 'react'; import type { Severity } from '@kbn/securitysolution-io-ts-alerting-types'; import { useDispatch } from 'react-redux'; @@ -200,12 +200,17 @@ export const useAlertsByStatus: UseAlertsByStatus = ({ } }, [skip, refetchQuery]); - useQueryInspector({ - deleteQuery, - inspect: { + const inspect = useMemo( + () => ({ dsl: [request], response: [response], - }, + }), + [request, response] + ); + + useQueryInspector({ + deleteQuery, + inspect, refetch, setQuery, queryId, From d4bc9befdef02a80545e65507c15780fcf6933f5 Mon Sep 17 00:00:00 2001 From: Pierre Gayvallet Date: Mon, 23 Dec 2024 17:16:33 +0100 Subject: [PATCH 12/35] OpenAI connector: send default model for "other" openAI provider (#204934) ## Summary Part of https://github.com/elastic/kibana/issues/204116 When model is not present in the payload, use the default model as specified in the connector configuration. We were already doing that for OpenAI-OpenAI, but not for "Other"-OpenAI. ### Some section because I downloaded ollama just for that issue --- .../openai/lib/other_openai_utils.test.ts | 37 +++++++++++++++++++ .../openai/lib/other_openai_utils.ts | 10 ++++- .../connector_types/openai/lib/utils.test.ts | 14 ++++++- .../connector_types/openai/lib/utils.ts | 2 +- 4 files changed, 58 insertions(+), 5 deletions(-) diff --git a/x-pack/plugins/stack_connectors/server/connector_types/openai/lib/other_openai_utils.test.ts b/x-pack/plugins/stack_connectors/server/connector_types/openai/lib/other_openai_utils.test.ts index 33722314f5422..1cdcd40b11a30 100644 --- a/x-pack/plugins/stack_connectors/server/connector_types/openai/lib/other_openai_utils.test.ts +++ b/x-pack/plugins/stack_connectors/server/connector_types/openai/lib/other_openai_utils.test.ts @@ -112,5 +112,42 @@ describe('Other (OpenAI Compatible Service) Utils', () => { const sanitizedBodyString = getRequestWithStreamOption(bodyString, false); expect(sanitizedBodyString).toEqual(bodyString); }); + + it('sets model parameter if specified and not present in the body', () => { + const body = { + messages: [ + { + role: 'user', + content: 'This is a test', + }, + ], + }; + + const sanitizedBodyString = getRequestWithStreamOption(JSON.stringify(body), true, 'llama-3'); + expect(JSON.parse(sanitizedBodyString)).toEqual({ + messages: [{ content: 'This is a test', role: 'user' }], + model: 'llama-3', + stream: true, + }); + }); + + it('does not overrides model parameter if present in the body', () => { + const body = { + model: 'mistral', + messages: [ + { + role: 'user', + content: 'This is a test', + }, + ], + }; + + const sanitizedBodyString = getRequestWithStreamOption(JSON.stringify(body), true, 'llama-3'); + expect(JSON.parse(sanitizedBodyString)).toEqual({ + messages: [{ content: 'This is a test', role: 'user' }], + model: 'mistral', + stream: true, + }); + }); }); }); diff --git a/x-pack/plugins/stack_connectors/server/connector_types/openai/lib/other_openai_utils.ts b/x-pack/plugins/stack_connectors/server/connector_types/openai/lib/other_openai_utils.ts index 8288e0dba9ad1..0d3fb88ccc739 100644 --- a/x-pack/plugins/stack_connectors/server/connector_types/openai/lib/other_openai_utils.ts +++ b/x-pack/plugins/stack_connectors/server/connector_types/openai/lib/other_openai_utils.ts @@ -23,13 +23,19 @@ export const sanitizeRequest = (body: string): string => { * The stream parameter is accepted in the ChatCompletion * API and the Completion API only */ -export const getRequestWithStreamOption = (body: string, stream: boolean): string => { +export const getRequestWithStreamOption = ( + body: string, + stream: boolean, + defaultModel?: string +): string => { try { const jsonBody = JSON.parse(body); if (jsonBody) { jsonBody.stream = stream; } - + if (defaultModel && !jsonBody.model) { + jsonBody.model = defaultModel; + } return JSON.stringify(jsonBody); } catch (err) { // swallow the error diff --git a/x-pack/plugins/stack_connectors/server/connector_types/openai/lib/utils.test.ts b/x-pack/plugins/stack_connectors/server/connector_types/openai/lib/utils.test.ts index 142f3a319eeb6..08389a1195706 100644 --- a/x-pack/plugins/stack_connectors/server/connector_types/openai/lib/utils.test.ts +++ b/x-pack/plugins/stack_connectors/server/connector_types/openai/lib/utils.test.ts @@ -111,9 +111,19 @@ describe('Utils', () => { }); it('calls other_openai_utils getRequestWithStreamOption when provider is Other OpenAi', () => { - getRequestWithStreamOption(OpenAiProviderType.Other, OPENAI_CHAT_URL, bodyString, true); + getRequestWithStreamOption( + OpenAiProviderType.Other, + OPENAI_CHAT_URL, + bodyString, + true, + 'default-model' + ); - expect(mockOtherOpenAiGetRequestWithStreamOption).toHaveBeenCalledWith(bodyString, true); + expect(mockOtherOpenAiGetRequestWithStreamOption).toHaveBeenCalledWith( + bodyString, + true, + 'default-model' + ); expect(mockOpenAiGetRequestWithStreamOption).not.toHaveBeenCalled(); expect(mockAzureAiGetRequestWithStreamOption).not.toHaveBeenCalled(); }); diff --git a/x-pack/plugins/stack_connectors/server/connector_types/openai/lib/utils.ts b/x-pack/plugins/stack_connectors/server/connector_types/openai/lib/utils.ts index 3028433656503..ebe1d3bac578e 100644 --- a/x-pack/plugins/stack_connectors/server/connector_types/openai/lib/utils.ts +++ b/x-pack/plugins/stack_connectors/server/connector_types/openai/lib/utils.ts @@ -75,7 +75,7 @@ export function getRequestWithStreamOption( case OpenAiProviderType.AzureAi: return azureAiGetRequestWithStreamOption(url, body, stream); case OpenAiProviderType.Other: - return otherOpenAiGetRequestWithStreamOption(body, stream); + return otherOpenAiGetRequestWithStreamOption(body, stream, defaultModel); default: return body; } From 795cf28f0b27509adb58037e958208fd39707a97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Fern=C3=A1ndez=20Haro?= Date: Mon, 23 Dec 2024 17:24:51 +0100 Subject: [PATCH 13/35] [ES `body` removal] `@elastic/kibana-cloud-security-posture` (#204860) --- .../public/src/components/vulnerability_badges.tsx | 2 +- .../public/src/hooks/use_misconfiguration_findings.ts | 7 +++++-- .../public/src/hooks/use_misconfiguration_preview.ts | 7 +++++-- .../public/src/hooks/use_vulnerabilities_findings.ts | 4 ++-- .../public/src/hooks/use_vulnerabilities_preview.ts | 4 ++-- .../kbn-cloud-security-posture/public/src/types.ts | 2 +- .../public/src/utils/hooks_utils.test.ts | 2 +- .../public/src/utils/hooks_utils.ts | 2 +- .../runtime_mappings/get_package_policy_id_mapping.ts | 2 +- .../latest_findings/use_grouped_findings.tsx | 2 +- .../configurations/latest_findings/use_latest_findings.ts | 8 ++++++-- .../vulnerabilities/hooks/use_grouped_vulnerabilities.tsx | 2 +- .../vulnerabilities/hooks/use_latest_vulnerabilities.tsx | 4 ++-- .../cloud_security_posture/server/create_indices/types.ts | 5 +---- .../server/routes/benchmark_rules/get_states/v1.ts | 2 +- .../cloud_security_posture/server/routes/benchmarks/v2.ts | 2 +- .../get_detection_engine_alerts_count_by_rule_tags.ts | 2 +- .../kubernetes_security/server/routes/aggregate.ts | 2 +- 18 files changed, 34 insertions(+), 27 deletions(-) diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/public/src/components/vulnerability_badges.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/public/src/components/vulnerability_badges.tsx index e13d33c0e11cb..4a5572e6f8fbb 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/public/src/components/vulnerability_badges.tsx +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/public/src/components/vulnerability_badges.tsx @@ -8,7 +8,7 @@ import { EuiBadge, EuiIcon, EuiTextColor } from '@elastic/eui'; import React from 'react'; import { css } from '@emotion/react'; -import { float } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import { float } from '@elastic/elasticsearch/lib/api/types'; import type { VulnSeverity } from '@kbn/cloud-security-posture-common'; import { getCvsScoreColor, getSeverityStatusColor } from '../utils/get_vulnerability_colors'; diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/public/src/hooks/use_misconfiguration_findings.ts b/x-pack/solutions/security/packages/kbn-cloud-security-posture/public/src/hooks/use_misconfiguration_findings.ts index fa060738651a1..d07ac51cc6075 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/public/src/hooks/use_misconfiguration_findings.ts +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/public/src/hooks/use_misconfiguration_findings.ts @@ -37,8 +37,11 @@ export const useMisconfigurationFindings = (options: UseCspOptions) => { rawResponse: { hits, aggregations }, } = await lastValueFrom( data.search.search({ - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - params: buildMisconfigurationsFindingsQuery(options, rulesStates!), + params: buildMisconfigurationsFindingsQuery( + options, + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + rulesStates! + ) as LatestFindingsRequest['params'], }) ); if (!aggregations && options.ignore_unavailable === false) diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/public/src/hooks/use_misconfiguration_preview.ts b/x-pack/solutions/security/packages/kbn-cloud-security-posture/public/src/hooks/use_misconfiguration_preview.ts index d2f4d4f522111..019125bde1f03 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/public/src/hooks/use_misconfiguration_preview.ts +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/public/src/hooks/use_misconfiguration_preview.ts @@ -35,8 +35,11 @@ export const useMisconfigurationPreview = (options: UseCspOptions) => { rawResponse: { aggregations }, } = await lastValueFrom( data.search.search({ - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - params: buildMisconfigurationsFindingsQuery(options, rulesStates!), + params: buildMisconfigurationsFindingsQuery( + options, + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + rulesStates! + ) as LatestFindingsRequest['params'], }) ); if (!aggregations && options.ignore_unavailable === false) diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/public/src/hooks/use_vulnerabilities_findings.ts b/x-pack/solutions/security/packages/kbn-cloud-security-posture/public/src/hooks/use_vulnerabilities_findings.ts index 062f5c7740c73..d8e44ad5c4328 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/public/src/hooks/use_vulnerabilities_findings.ts +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/public/src/hooks/use_vulnerabilities_findings.ts @@ -13,7 +13,7 @@ import { SearchResponse, AggregationsMultiBucketAggregateBase, AggregationsStringRareTermsBucketKeys, -} from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +} from '@elastic/elasticsearch/lib/api/types'; import type { CspVulnerabilityFinding } from '@kbn/cloud-security-posture-common/schema/vulnerabilities/latest'; import type { CoreStart } from '@kbn/core/public'; import type { CspClientPluginStartDeps, UseCspOptions } from '../types'; @@ -47,7 +47,7 @@ export const useVulnerabilitiesFindings = (options: UseCspOptions) => { rawResponse: { aggregations, hits }, } = await lastValueFrom( data.search.search({ - params: getVulnerabilitiesQuery(options, pageParam), + params: getVulnerabilitiesQuery(options, pageParam) as LatestFindingsRequest['params'], }) ); diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/public/src/hooks/use_vulnerabilities_preview.ts b/x-pack/solutions/security/packages/kbn-cloud-security-posture/public/src/hooks/use_vulnerabilities_preview.ts index ac34636720143..05b810c361be6 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/public/src/hooks/use_vulnerabilities_preview.ts +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/public/src/hooks/use_vulnerabilities_preview.ts @@ -13,7 +13,7 @@ import { SearchResponse, AggregationsMultiBucketAggregateBase, AggregationsStringRareTermsBucketKeys, -} from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +} from '@elastic/elasticsearch/lib/api/types'; import type { CspVulnerabilityFinding } from '@kbn/cloud-security-posture-common/schema/vulnerabilities/latest'; import type { CoreStart } from '@kbn/core/public'; import type { CspClientPluginStartDeps, UseCspOptions } from '../types'; @@ -42,7 +42,7 @@ export const useVulnerabilitiesPreview = (options: UseCspOptions) => { rawResponse: { aggregations }, } = await lastValueFrom( data.search.search({ - params: getVulnerabilitiesQuery(options, true), + params: getVulnerabilitiesQuery(options, true) as LatestFindingsRequest['params'], }) ); diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/public/src/types.ts b/x-pack/solutions/security/packages/kbn-cloud-security-posture/public/src/types.ts index 2c7be37de50dd..03fa60479806b 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/public/src/types.ts +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/public/src/types.ts @@ -23,7 +23,7 @@ import type { UsageCollectionStart } from '@kbn/usage-collection-plugin/public'; import { SharePluginStart } from '@kbn/share-plugin/public'; import { SpacesPluginStart } from '@kbn/spaces-plugin/public'; import { CspFinding } from '@kbn/cloud-security-posture-common'; -import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import type * as estypes from '@elastic/elasticsearch/lib/api/types'; import type { IKibanaSearchResponse, IKibanaSearchRequest } from '@kbn/search-types'; import type { BoolQuery } from '@kbn/es-query'; diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/public/src/utils/hooks_utils.test.ts b/x-pack/solutions/security/packages/kbn-cloud-security-posture/public/src/utils/hooks_utils.test.ts index 86e8f3c8f668b..8bf53fcddebe4 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/public/src/utils/hooks_utils.test.ts +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/public/src/utils/hooks_utils.test.ts @@ -5,7 +5,7 @@ * 2.0. */ -import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import type * as estypes from '@elastic/elasticsearch/lib/api/types'; import { AggregationBuckets, getVulnerabilitiesAggregationCount, diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/public/src/utils/hooks_utils.ts b/x-pack/solutions/security/packages/kbn-cloud-security-posture/public/src/utils/hooks_utils.ts index e52b66a0db685..88416477021ca 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/public/src/utils/hooks_utils.ts +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/public/src/utils/hooks_utils.ts @@ -5,7 +5,7 @@ * 2.0. */ -import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import type * as estypes from '@elastic/elasticsearch/lib/api/types'; import { buildMutedRulesFilter, CDR_MISCONFIGURATIONS_INDEX_PATTERN, diff --git a/x-pack/solutions/security/plugins/cloud_security_posture/common/runtime_mappings/get_package_policy_id_mapping.ts b/x-pack/solutions/security/plugins/cloud_security_posture/common/runtime_mappings/get_package_policy_id_mapping.ts index 5d76176758af6..228ea25ef76ba 100644 --- a/x-pack/solutions/security/plugins/cloud_security_posture/common/runtime_mappings/get_package_policy_id_mapping.ts +++ b/x-pack/solutions/security/plugins/cloud_security_posture/common/runtime_mappings/get_package_policy_id_mapping.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { MappingRuntimeFields } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import { MappingRuntimeFields } from '@elastic/elasticsearch/lib/api/types'; export const getPackagePolicyIdRuntimeMapping = (): MappingRuntimeFields => ({ package_policy_identifier: { diff --git a/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/configurations/latest_findings/use_grouped_findings.tsx b/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/configurations/latest_findings/use_grouped_findings.tsx index b98ff432a3c96..842e21c58a971 100644 --- a/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/configurations/latest_findings/use_grouped_findings.tsx +++ b/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/configurations/latest_findings/use_grouped_findings.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { SearchResponse } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import { SearchResponse } from '@elastic/elasticsearch/lib/api/types'; import type { IKibanaSearchResponse } from '@kbn/search-types'; import { GenericBuckets, GroupingQuery, RootAggregation } from '@kbn/grouping/src'; import { useQuery } from '@tanstack/react-query'; diff --git a/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/configurations/latest_findings/use_latest_findings.ts b/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/configurations/latest_findings/use_latest_findings.ts index 64353230211bc..33ec005b33750 100644 --- a/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/configurations/latest_findings/use_latest_findings.ts +++ b/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/configurations/latest_findings/use_latest_findings.ts @@ -8,7 +8,7 @@ import { useInfiniteQuery } from '@tanstack/react-query'; import { number } from 'io-ts'; import { lastValueFrom } from 'rxjs'; import type { IKibanaSearchResponse, IKibanaSearchRequest } from '@kbn/search-types'; -import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import type * as estypes from '@elastic/elasticsearch/lib/api/types'; import { buildDataTableRecord } from '@kbn/discover-utils'; import { EsHitRecord } from '@kbn/discover-utils/types'; import { showErrorToast } from '@kbn/cloud-security-posture'; @@ -150,7 +150,11 @@ export const useLatestFindings = (options: UseFindingsOptions) => { rawResponse: { hits, aggregations }, } = await lastValueFrom( data.search.search({ - params: getFindingsQuery(options, rulesStates!, pageParam), // ruleStates always exists since it under the `enabled` dependency. + params: getFindingsQuery( + options, + rulesStates!, + pageParam + ) as LatestFindingsRequest['params'], // ruleStates always exists since it under the `enabled` dependency. }) ); if (!aggregations) throw new Error('expected aggregations to be an defined'); diff --git a/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/vulnerabilities/hooks/use_grouped_vulnerabilities.tsx b/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/vulnerabilities/hooks/use_grouped_vulnerabilities.tsx index 9fddf97e28482..db5ec5816040c 100644 --- a/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/vulnerabilities/hooks/use_grouped_vulnerabilities.tsx +++ b/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/vulnerabilities/hooks/use_grouped_vulnerabilities.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { SearchResponse } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import { SearchResponse } from '@elastic/elasticsearch/lib/api/types'; import type { IKibanaSearchResponse } from '@kbn/search-types'; import { GenericBuckets, GroupingQuery, RootAggregation } from '@kbn/grouping/src'; import { useQuery } from '@tanstack/react-query'; diff --git a/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/vulnerabilities/hooks/use_latest_vulnerabilities.tsx b/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/vulnerabilities/hooks/use_latest_vulnerabilities.tsx index a998707c4704f..6763547730e1a 100644 --- a/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/vulnerabilities/hooks/use_latest_vulnerabilities.tsx +++ b/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/vulnerabilities/hooks/use_latest_vulnerabilities.tsx @@ -13,7 +13,7 @@ import { SearchResponse, AggregationsMultiBucketAggregateBase, AggregationsStringRareTermsBucketKeys, -} from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +} from '@elastic/elasticsearch/lib/api/types'; import { buildDataTableRecord } from '@kbn/discover-utils'; import { EsHitRecord } from '@kbn/discover-utils/types'; import { @@ -118,7 +118,7 @@ export const useLatestVulnerabilities = (options: VulnerabilitiesQuery) => { rawResponse: { hits }, } = await lastValueFrom( data.search.search({ - params: getVulnerabilitiesQuery(options, pageParam), + params: getVulnerabilitiesQuery(options, pageParam) as LatestFindingsRequest['params'], }) ); diff --git a/x-pack/solutions/security/plugins/cloud_security_posture/server/create_indices/types.ts b/x-pack/solutions/security/plugins/cloud_security_posture/server/create_indices/types.ts index 190114b3bf055..55b534436ef31 100644 --- a/x-pack/solutions/security/plugins/cloud_security_posture/server/create_indices/types.ts +++ b/x-pack/solutions/security/plugins/cloud_security_posture/server/create_indices/types.ts @@ -5,10 +5,7 @@ * 2.0. */ -import { - IndicesIndexTemplateSummary, - Metadata, -} from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import { IndicesIndexTemplateSummary, Metadata } from '@elastic/elasticsearch/lib/api/types'; export interface LatestIndexConfig { findings: IndexConfig; diff --git a/x-pack/solutions/security/plugins/cloud_security_posture/server/routes/benchmark_rules/get_states/v1.ts b/x-pack/solutions/security/plugins/cloud_security_posture/server/routes/benchmark_rules/get_states/v1.ts index e6c2e90cd9886..0a5d27d7dbca1 100644 --- a/x-pack/solutions/security/plugins/cloud_security_posture/server/routes/benchmark_rules/get_states/v1.ts +++ b/x-pack/solutions/security/plugins/cloud_security_posture/server/routes/benchmark_rules/get_states/v1.ts @@ -9,7 +9,7 @@ import { SavedObjectsClientContract, } from '@kbn/core-saved-objects-api-server'; import { transformError } from '@kbn/securitysolution-es-utils'; -import { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/types'; import { buildMutedRulesFilter } from '@kbn/cloud-security-posture-common'; import type { CspBenchmarkRulesStates } from '@kbn/cloud-security-posture-common/schema/rules/latest'; import type { CspSettings } from '@kbn/cloud-security-posture-common/schema/rules/v4'; diff --git a/x-pack/solutions/security/plugins/cloud_security_posture/server/routes/benchmarks/v2.ts b/x-pack/solutions/security/plugins/cloud_security_posture/server/routes/benchmarks/v2.ts index 327a2da76f336..a8845d2aa479f 100644 --- a/x-pack/solutions/security/plugins/cloud_security_posture/server/routes/benchmarks/v2.ts +++ b/x-pack/solutions/security/plugins/cloud_security_posture/server/routes/benchmarks/v2.ts @@ -6,7 +6,7 @@ */ import { QueryDslQueryContainer } from '@kbn/data-views-plugin/common/types'; -import { MappingRuntimeFields } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import { MappingRuntimeFields } from '@elastic/elasticsearch/lib/api/types'; import type { ElasticsearchClient, Logger } from '@kbn/core/server'; import { SavedObjectsClientContract } from '@kbn/core-saved-objects-api-server'; import type { CspBenchmarkRule } from '@kbn/cloud-security-posture-common/schema/rules/latest'; diff --git a/x-pack/solutions/security/plugins/cloud_security_posture/server/routes/detection_engine/get_detection_engine_alerts_count_by_rule_tags.ts b/x-pack/solutions/security/plugins/cloud_security_posture/server/routes/detection_engine/get_detection_engine_alerts_count_by_rule_tags.ts index 38a9e356a1446..990a0457dd368 100644 --- a/x-pack/solutions/security/plugins/cloud_security_posture/server/routes/detection_engine/get_detection_engine_alerts_count_by_rule_tags.ts +++ b/x-pack/solutions/security/plugins/cloud_security_posture/server/routes/detection_engine/get_detection_engine_alerts_count_by_rule_tags.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { SearchResponse } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import { SearchResponse } from '@elastic/elasticsearch/lib/api/types'; import { schema } from '@kbn/config-schema'; import { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; import { transformError } from '@kbn/securitysolution-es-utils'; diff --git a/x-pack/solutions/security/plugins/kubernetes_security/server/routes/aggregate.ts b/x-pack/solutions/security/plugins/kubernetes_security/server/routes/aggregate.ts index 4ddb828b68976..21bc8dada43e3 100644 --- a/x-pack/solutions/security/plugins/kubernetes_security/server/routes/aggregate.ts +++ b/x-pack/solutions/security/plugins/kubernetes_security/server/routes/aggregate.ts @@ -4,7 +4,7 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import type { SortCombinations } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import type { SortCombinations } from '@elastic/elasticsearch/lib/api/types'; import { transformError } from '@kbn/securitysolution-es-utils'; import { schema } from '@kbn/config-schema'; import type { ElasticsearchClient } from '@kbn/core/server'; From fd47d2ec7ccd9188fa45af85d44a17d143f2e44a Mon Sep 17 00:00:00 2001 From: Kfir Peled <61654899+kfirpeled@users.noreply.github.com> Date: Mon, 23 Dec 2024 17:47:24 +0100 Subject: [PATCH 14/35] [Cloud Security] Added labels popover (#204954) ## Summary Added expand button for labels with popover: https://github.com/user-attachments/assets/80950f51-b45b-4174-9be2-267b6aca569b https://github.com/user-attachments/assets/690ef85b-be48-42df-bf00-02ee7d9303f2 **How to test** To test this PR you can run ``` yarn storybook cloud_security_posture_packages ``` To test e2e - Enable the feature flag `kibana.dev.yml`: ```yml uiSettings.overrides.securitySolution:enableVisualizationsInFlyout: true xpack.securitySolution.enableExperimental: ['graphVisualizationInFlyoutEnabled'] ``` - Load mocked data: ``` node scripts/es_archiver load x-pack/test/cloud_security_posture_functional/es_archives/logs_gcp_audit \ --es-url http://elastic:changeme@localhost:9200 \ --kibana-url http://elastic:changeme@localhost:5601 node scripts/es_archiver load x-pack/test/cloud_security_posture_functional/es_archives/security_alerts \ --es-url http://elastic:changeme@localhost:9200 \ --kibana-url http://elastic:changeme@localhost:5601 ``` - Make sure you include data from Oct 13 2024. (in the video I use Last year) ### Checklist - [x] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md) - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [x] [Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was used on any tests changed --------- Co-authored-by: Sean Rathier Co-authored-by: Brad White Co-authored-by: seanrathier Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../graph/src/common/constants.ts | 1 + .../components/edge/deafult_edge.stories.tsx | 6 +- .../graph/src/components/graph/graph.tsx | 8 +- .../graph/graph_popover.stories.tsx | 20 +++- .../src/components/graph/graph_popover.tsx | 4 +- .../graph_investigation.tsx | 55 +++++++--- .../graph_label_expand_popover.tsx | 52 +++++++++ .../graph_node_expand_popover.tsx | 2 +- .../use_graph_label_expand_popover.tsx | 100 ++++++++++++++++++ .../graph/src/components/index.ts | 9 ++ .../src/components/mock/test_providers.tsx | 3 +- .../src/components/node/diamond_node.tsx | 5 +- .../src/components/node/edge_group_node.tsx | 5 +- .../src/components/node/ellipse_node.tsx | 5 +- .../src/components/node/hexagon_node.tsx | 5 +- .../graph/src/components/node/label.tsx | 2 +- .../graph/src/components/node/label_node.tsx | 49 ++++++++- .../src/components/node/pentagon_node.tsx | 5 +- .../src/components/node/rectangle_node.tsx | 5 +- .../components/node/shapes/diamond_shape.tsx | 8 +- .../components/node/shapes/ellipse_shape.tsx | 8 +- .../components/node/shapes/hexagon_shape.tsx | 8 +- .../components/node/shapes/pentagon_shape.tsx | 8 +- .../node/shapes/rectangle_shape.tsx | 8 +- .../graph/src/components/node/styles.tsx | 33 +++--- .../graph/src/components/styles.tsx | 8 +- .../graph/src/components/test_ids.ts | 5 + .../graph/src/components/types.ts | 1 + .../page_objects/expanded_flyout.ts | 15 ++- .../pages/alerts_flyout.ts | 13 +++ .../pages/events_flyout.ts | 13 +++ 31 files changed, 376 insertions(+), 93 deletions(-) create mode 100644 x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/graph_label_expand_popover.tsx create mode 100644 x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/use_graph_label_expand_popover.tsx diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/common/constants.ts b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/common/constants.ts index 307cbd65123e4..cc727dea4c847 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/common/constants.ts +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/common/constants.ts @@ -10,3 +10,4 @@ export const EVENT_GRAPH_VISUALIZATION_API = '/internal/cloud_security_posture/g export const RELATED_ENTITY = 'related.entity' as const; export const ACTOR_ENTITY_ID = 'actor.entity.id' as const; export const TARGET_ENTITY_ID = 'target.entity.id' as const; +export const EVENT_ACTION = 'event.action' as const; diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/edge/deafult_edge.stories.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/edge/deafult_edge.stories.tsx index b4f35af2054f4..8b3b36237a7a2 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/edge/deafult_edge.stories.tsx +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/edge/deafult_edge.stories.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import React, { useEffect, useMemo, useRef } from 'react'; +import React, { memo, useEffect, useMemo, useRef } from 'react'; import { ThemeProvider } from '@emotion/react'; import { ReactFlow, @@ -47,7 +47,7 @@ export default { const nodeTypes = { // eslint-disable-next-line react/display-name - default: React.memo((props: NodeProps) => { + default: memo>((props: NodeProps) => { return ( ); - }) as React.FC>, + }), label: LabelNode, }; diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph/graph.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph/graph.tsx index f08e40111b7f8..292c4c3645468 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph/graph.tsx +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph/graph.tsx @@ -82,13 +82,7 @@ const edgeTypes = { * * @returns {JSX.Element} The rendered Graph component. */ -export const Graph: React.FC = ({ - nodes, - edges, - interactive, - isLocked = false, - ...rest -}) => { +export const Graph = ({ nodes, edges, interactive, isLocked = false, ...rest }: GraphProps) => { const backgroundId = useGeneratedHtmlId(); const fitViewRef = useRef< ((fitViewOptions?: FitViewOptions | undefined) => Promise) | null diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph/graph_popover.stories.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph/graph_popover.stories.tsx index a4561f404829a..dea054e9a7cc1 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph/graph_popover.stories.tsx +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph/graph_popover.stories.tsx @@ -9,7 +9,7 @@ import React, { memo, useCallback, useEffect, useMemo, useRef, useState } from ' import { ThemeProvider, css } from '@emotion/react'; import { Story } from '@storybook/react'; import { EuiListGroup, EuiHorizontalRule } from '@elastic/eui'; -import type { EntityNodeViewModel, NodeProps } from '..'; +import type { EntityNodeViewModel, LabelNodeViewModel, NodeProps } from '..'; import { Graph } from '..'; import { GraphPopover } from './graph_popover'; import { ExpandButtonClickCallback } from '../types'; @@ -179,9 +179,11 @@ const Template: Story = () => { // eslint-disable-next-line @typescript-eslint/no-explicit-any const nodeClickHandler = (...args: any[]) => popoverOpenWrapper(nodePopover.onNodeClick, ...args); - const nodes: EntityNodeViewModel[] = useMemo( - () => - (['hexagon', 'ellipse', 'rectangle', 'pentagon', 'diamond'] as const).map((shape, idx) => ({ + const nodes: Array = useMemo( + () => [ + ...( + ['hexagon', 'ellipse', 'rectangle', 'pentagon', 'diamond'] as const + ).map((shape, idx) => ({ id: `${idx}`, label: `Node ${idx}`, color: 'primary', @@ -191,6 +193,16 @@ const Template: Story = () => { expandButtonClick: expandButtonClickHandler, nodeClick: nodeClickHandler, })), + { + id: 'label', + label: 'Node 5', + color: 'primary', + interactive: true, + shape: 'label', + expandButtonClick: expandButtonClickHandler, + nodeClick: nodeClickHandler, + } as LabelNodeViewModel, + ], // eslint-disable-next-line react-hooks/exhaustive-deps [] ); diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph/graph_popover.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph/graph_popover.tsx index 65d0b5a2b89b8..cd2b0e45e0104 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph/graph_popover.tsx +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph/graph_popover.tsx @@ -22,13 +22,13 @@ export interface GraphPopoverProps closePopover: () => void; } -export const GraphPopover: React.FC = ({ +export const GraphPopover = ({ isOpen, anchorElement, closePopover, children, ...rest -}) => { +}: GraphPopoverProps) => { const { euiTheme } = useEuiTheme(); if (!anchorElement) { diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/graph_investigation.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/graph_investigation.tsx index bd57082ba4cb9..9e63541b29d1f 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/graph_investigation.tsx +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/graph_investigation.tsx @@ -21,11 +21,17 @@ import type { Filter, Query, TimeRange, PhraseFilter } from '@kbn/es-query'; import { css } from '@emotion/react'; import { getEsQueryConfig } from '@kbn/data-service'; import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; -import { Graph } from '../../..'; +import { Graph, isEntityNode } from '../../..'; import { useGraphNodeExpandPopover } from './use_graph_node_expand_popover'; +import { useGraphLabelExpandPopover } from './use_graph_label_expand_popover'; import { useFetchGraphData } from '../../hooks/use_fetch_graph_data'; import { GRAPH_INVESTIGATION_TEST_ID } from '../test_ids'; -import { ACTOR_ENTITY_ID, RELATED_ENTITY, TARGET_ENTITY_ID } from '../../common/constants'; +import { + ACTOR_ENTITY_ID, + EVENT_ACTION, + RELATED_ENTITY, + TARGET_ENTITY_ID, +} from '../../common/constants'; const CONTROLLED_BY_GRAPH_INVESTIGATION_FILTER = 'graph-investigation'; @@ -112,17 +118,23 @@ const useGraphPopovers = ( }, }); + const labelExpandPopover = useGraphLabelExpandPopover({ + onShowEventsWithThisActionClick: (node) => { + setSearchFilters((prev) => addFilter(dataViewId, prev, EVENT_ACTION, node.data.label ?? '')); + }, + }); + const openPopoverCallback = useCallback( (cb: Function, ...args: unknown[]) => { - [nodeExpandPopover].forEach(({ actions: { closePopover } }) => { + [nodeExpandPopover, labelExpandPopover].forEach(({ actions: { closePopover } }) => { closePopover(); }); cb(...args); }, - [nodeExpandPopover] + [nodeExpandPopover, labelExpandPopover] ); - return { nodeExpandPopover, openPopoverCallback }; + return { nodeExpandPopover, labelExpandPopover, openPopoverCallback }; }; interface GraphInvestigationProps { @@ -160,7 +172,7 @@ interface GraphInvestigationProps { /** * Graph investigation view allows the user to expand nodes and view related entities. */ -export const GraphInvestigation: React.FC = memo( +export const GraphInvestigation = memo( ({ initialState: { dataView, originEventIds, timeRange: initialTimeRange }, }: GraphInvestigationProps) => { @@ -181,13 +193,17 @@ export const GraphInvestigation: React.FC = memo( [dataView, searchFilters, uiSettings] ); - const { nodeExpandPopover, openPopoverCallback } = useGraphPopovers( + const { nodeExpandPopover, labelExpandPopover, openPopoverCallback } = useGraphPopovers( dataView?.id ?? '', setSearchFilters ); - const expandButtonClickHandler = (...args: unknown[]) => + const nodeExpandButtonClickHandler = (...args: unknown[]) => openPopoverCallback(nodeExpandPopover.onNodeExpandButtonClick, ...args); - const isPopoverOpen = [nodeExpandPopover].some(({ state: { isOpen } }) => isOpen); + const labelExpandButtonClickHandler = (...args: unknown[]) => + openPopoverCallback(labelExpandPopover.onLabelExpandButtonClick, ...args); + const isPopoverOpen = [nodeExpandPopover, labelExpandPopover].some( + ({ state: { isOpen } }) => isOpen + ); const { data, refresh, isFetching } = useFetchGraphData({ req: { query: { @@ -206,13 +222,19 @@ export const GraphInvestigation: React.FC = memo( const nodes = useMemo(() => { return ( data?.nodes.map((node) => { - const nodeHandlers = - node.shape !== 'label' && node.shape !== 'group' - ? { - expandButtonClick: expandButtonClickHandler, - } - : undefined; - return { ...node, ...nodeHandlers }; + if (isEntityNode(node)) { + return { + ...node, + expandButtonClick: nodeExpandButtonClickHandler, + }; + } else if (node.shape === 'label') { + return { + ...node, + expandButtonClick: labelExpandButtonClickHandler, + }; + } + + return { ...node }; }) ?? [] ); // eslint-disable-next-line react-hooks/exhaustive-deps @@ -275,6 +297,7 @@ export const GraphInvestigation: React.FC = memo( + > ); } diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/graph_label_expand_popover.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/graph_label_expand_popover.tsx new file mode 100644 index 0000000000000..6064e1cf9087b --- /dev/null +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/graph_label_expand_popover.tsx @@ -0,0 +1,52 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { memo } from 'react'; +import { EuiListGroup } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { ExpandPopoverListItem } from '../styles'; +import { GraphPopover } from '../../..'; +import { + GRAPH_LABEL_EXPAND_POPOVER_TEST_ID, + GRAPH_LABEL_EXPAND_POPOVER_SHOW_EVENTS_WITH_THIS_ACTION_ITEM_ID, +} from '../test_ids'; + +interface GraphLabelExpandPopoverProps { + isOpen: boolean; + anchorElement: HTMLElement | null; + closePopover: () => void; + onShowEventsWithThisActionClick: () => void; +} + +export const GraphLabelExpandPopover = memo( + ({ isOpen, anchorElement, closePopover, onShowEventsWithThisActionClick }) => { + return ( + + + + + + ); + } +); + +GraphLabelExpandPopover.displayName = 'GraphLabelExpandPopover'; diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/graph_node_expand_popover.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/graph_node_expand_popover.tsx index 2fd10aa5c8c29..5104dbaeed5fb 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/graph_node_expand_popover.tsx +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/graph_node_expand_popover.tsx @@ -26,7 +26,7 @@ interface GraphNodeExpandPopoverProps { onShowActionsOnEntityClick: () => void; } -export const GraphNodeExpandPopover: React.FC = memo( +export const GraphNodeExpandPopover = memo( ({ isOpen, anchorElement, diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/use_graph_label_expand_popover.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/use_graph_label_expand_popover.tsx new file mode 100644 index 0000000000000..bd9215394b56f --- /dev/null +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/use_graph_label_expand_popover.tsx @@ -0,0 +1,100 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react'; +import { useGraphPopover } from '../../..'; +import type { ExpandButtonClickCallback, NodeProps } from '../types'; +import type { PopoverActions } from '../graph/use_graph_popover'; +import { GraphLabelExpandPopover } from './graph_label_expand_popover'; + +interface UseGraphLabelExpandPopoverArgs { + onShowEventsWithThisActionClick: (node: NodeProps) => void; +} + +export const useGraphLabelExpandPopover = ({ + onShowEventsWithThisActionClick, +}: UseGraphLabelExpandPopoverArgs) => { + const { id, state, actions } = useGraphPopover('label-expand-popover'); + const { openPopover, closePopover } = actions; + + const selectedNode = useRef(null); + const unToggleCallbackRef = useRef<(() => void) | null>(null); + const [pendingOpen, setPendingOpen] = useState<{ + node: NodeProps; + el: HTMLElement; + unToggleCallback: () => void; + } | null>(null); + + const closePopoverHandler = useCallback(() => { + selectedNode.current = null; + unToggleCallbackRef.current?.(); + unToggleCallbackRef.current = null; + closePopover(); + }, [closePopover]); + + const onLabelExpandButtonClick: ExpandButtonClickCallback = useCallback( + (e, node, unToggleCallback) => { + if (selectedNode.current?.id === node.id) { + // If the same node is clicked again, close the popover + closePopoverHandler(); + } else { + // Close the current popover if open + closePopoverHandler(); + + // Set the pending open state + setPendingOpen({ node, el: e.currentTarget, unToggleCallback }); + } + }, + [closePopoverHandler] + ); + + useEffect(() => { + // Open pending popover if the popover is not open + if (!state.isOpen && pendingOpen) { + const { node, el, unToggleCallback } = pendingOpen; + + selectedNode.current = node; + unToggleCallbackRef.current = unToggleCallback; + openPopover(el); + + setPendingOpen(null); + } + }, [state.isOpen, pendingOpen, openPopover]); + + const PopoverComponent = memo(() => ( + { + onShowEventsWithThisActionClick(selectedNode.current as NodeProps); + closePopoverHandler(); + }} + /> + )); + + PopoverComponent.displayName = GraphLabelExpandPopover.displayName; + + const actionsWithClose: PopoverActions = useMemo( + () => ({ + ...actions, + closePopover: closePopoverHandler, + }), + [actions, closePopoverHandler] + ); + + return useMemo( + () => ({ + onLabelExpandButtonClick, + PopoverComponent, + id, + actions: actionsWithClose, + state, + }), + [PopoverComponent, actionsWithClose, id, onLabelExpandButtonClick, state] + ); +}; diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/index.ts b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/index.ts index d3cd397764e60..0183b6cd0420f 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/index.ts +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/index.ts @@ -5,6 +5,8 @@ * 2.0. */ +import type { NodeViewModel } from './types'; + export { Graph } from './graph/graph'; export { GraphInvestigation } from './graph_investigation/graph_investigation'; export { GraphPopover } from './graph/graph_popover'; @@ -18,3 +20,10 @@ export type { EntityNodeViewModel, NodeProps, } from './types'; + +export const isEntityNode = (node: NodeViewModel) => + node.shape === 'ellipse' || + node.shape === 'pentagon' || + node.shape === 'rectangle' || + node.shape === 'diamond' || + node.shape === 'hexagon'; diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/mock/test_providers.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/mock/test_providers.tsx index 3d07c1c6037ed..a529468fdc3fb 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/mock/test_providers.tsx +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/mock/test_providers.tsx @@ -13,8 +13,7 @@ interface Props { children?: React.ReactNode; } -/** A utility for wrapping children in the providers required to run most tests */ -export const TestProvidersComponent: React.FC = ({ children }) => { +export const TestProvidersComponent = ({ children }: Props) => { return ( ({ eui: euiDarkVars, darkMode: true })}>{children} ); diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/diamond_node.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/diamond_node.tsx index b46c44c69d1b8..7275727b70832 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/diamond_node.tsx +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/diamond_node.tsx @@ -25,8 +25,7 @@ import { Label } from './label'; const NODE_WIDTH = 99; const NODE_HEIGHT = 98; -// eslint-disable-next-line react/display-name -export const DiamondNode: React.FC = memo((props: NodeProps) => { +export const DiamondNode = memo((props: NodeProps) => { const { id, color, icon, label, interactive, expandButtonClick, nodeClick } = props.data as EntityNodeViewModel; const { euiTheme } = useEuiTheme(); @@ -87,3 +86,5 @@ export const DiamondNode: React.FC = memo((props: NodeProps) => { > ); }); + +DiamondNode.displayName = 'DiamondNode'; diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/edge_group_node.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/edge_group_node.tsx index 10ac415398717..11babb4d33940 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/edge_group_node.tsx +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/edge_group_node.tsx @@ -10,8 +10,7 @@ import { Handle, Position } from '@xyflow/react'; import { HandleStyleOverride } from './styles'; import type { NodeProps } from '../types'; -// eslint-disable-next-line react/display-name -export const EdgeGroupNode: React.FC = memo((props: NodeProps) => { +export const EdgeGroupNode = memo((props: NodeProps) => { // Handles order horizontally is: in > inside > out > outside return ( <> @@ -46,3 +45,5 @@ export const EdgeGroupNode: React.FC = memo((props: NodeProps) => { > ); }); + +EdgeGroupNode.displayName = 'EdgeGroupNode'; diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/ellipse_node.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/ellipse_node.tsx index 7830feb96a48c..b9c73c66685b9 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/ellipse_node.tsx +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/ellipse_node.tsx @@ -24,8 +24,7 @@ import { EllipseHoverShape, EllipseShape } from './shapes/ellipse_shape'; import { NodeExpandButton } from './node_expand_button'; import { Label } from './label'; -// eslint-disable-next-line react/display-name -export const EllipseNode: React.FC = memo((props: NodeProps) => { +export const EllipseNode = memo((props: NodeProps) => { const { id, color, icon, label, interactive, expandButtonClick, nodeClick } = props.data as EntityNodeViewModel; const { euiTheme } = useEuiTheme(); @@ -86,3 +85,5 @@ export const EllipseNode: React.FC = memo((props: NodeProps) => { > ); }); + +EllipseNode.displayName = 'EllipseNode'; diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/hexagon_node.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/hexagon_node.tsx index ebde4e2334e21..e033dc0f23b32 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/hexagon_node.tsx +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/hexagon_node.tsx @@ -25,8 +25,7 @@ import { Label } from './label'; const NODE_WIDTH = 87; const NODE_HEIGHT = 96; -// eslint-disable-next-line react/display-name -export const HexagonNode: React.FC = memo((props: NodeProps) => { +export const HexagonNode = memo((props: NodeProps) => { const { id, color, icon, label, interactive, expandButtonClick, nodeClick } = props.data as EntityNodeViewModel; const { euiTheme } = useEuiTheme(); @@ -87,3 +86,5 @@ export const HexagonNode: React.FC = memo((props: NodeProps) => { > ); }); + +HexagonNode.displayName = 'HexagonNode'; diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/label.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/label.tsx index 098a3e0dd89c7..a0ce16960b26c 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/label.tsx +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/label.tsx @@ -62,7 +62,7 @@ export interface LabelProps { text?: string; } -const LabelComponent: React.FC = ({ text = '' }: LabelProps) => { +const LabelComponent = ({ text = '' }: LabelProps) => { const [isTruncated, setIsTruncated] = React.useState(false); return ( diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/label_node.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/label_node.tsx index 62ee671659662..bc293d0cf5e9e 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/label_node.tsx +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/label_node.tsx @@ -7,19 +7,56 @@ import React, { memo } from 'react'; import { Handle, Position } from '@xyflow/react'; -import { LabelNodeContainer, LabelShape, HandleStyleOverride, LabelShapeOnHover } from './styles'; +import { css } from '@emotion/react'; +import { + LabelNodeContainer, + LabelShape, + HandleStyleOverride, + LabelShapeOnHover, + NodeButton, + LABEL_PADDING_X, + LABEL_BORDER_WIDTH, + LABEL_HEIGHT, +} from './styles'; import type { LabelNodeViewModel, NodeProps } from '../types'; +import { NodeExpandButton } from './node_expand_button'; +import { getTextWidth } from '../graph/utils'; -// eslint-disable-next-line react/display-name -export const LabelNode: React.FC = memo((props: NodeProps) => { - const { id, color, label, interactive } = props.data as LabelNodeViewModel; +const LABEL_MIN_WIDTH = 100; + +export const LabelNode = memo((props: NodeProps) => { + const { id, color, label, interactive, nodeClick, expandButtonClick } = + props.data as LabelNodeViewModel; + const text = label ? label : id; + const labelWidth = Math.max( + LABEL_MIN_WIDTH, + getTextWidth(text ?? '') + LABEL_PADDING_X * 2 + LABEL_BORDER_WIDTH * 2 + ); return ( {interactive && } - {label ? label : id} + {text} + {interactive && ( + <> + nodeClick?.(e, props)} + /> + expandButtonClick?.(e, props, unToggleCallback)} + x={`${labelWidth}px`} + y={`${-LABEL_HEIGHT + (LABEL_HEIGHT - NodeExpandButton.ExpandButtonSize) / 2}px`} + /> + > + )} = memo((props: NodeProps) => { ); }); + +LabelNode.displayName = 'LabelNode'; diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/pentagon_node.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/pentagon_node.tsx index d54a2f808b6e7..d6708f4c9b0dd 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/pentagon_node.tsx +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/pentagon_node.tsx @@ -30,8 +30,7 @@ const PentagonShapeOnHover = styled(NodeShapeOnHoverSvg)` const NODE_WIDTH = 91; const NODE_HEIGHT = 88; -// eslint-disable-next-line react/display-name -export const PentagonNode: React.FC = memo((props: NodeProps) => { +export const PentagonNode = memo((props: NodeProps) => { const { id, color, icon, label, interactive, expandButtonClick, nodeClick } = props.data as EntityNodeViewModel; const { euiTheme } = useEuiTheme(); @@ -92,3 +91,5 @@ export const PentagonNode: React.FC = memo((props: NodeProps) => { > ); }); + +PentagonNode.displayName = 'PentagonNode'; diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/rectangle_node.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/rectangle_node.tsx index f923641a25a50..99c336373b836 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/rectangle_node.tsx +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/rectangle_node.tsx @@ -25,8 +25,7 @@ import { Label } from './label'; const NODE_WIDTH = 81; const NODE_HEIGHT = 80; -// eslint-disable-next-line react/display-name -export const RectangleNode: React.FC = memo((props: NodeProps) => { +export const RectangleNode = memo((props: NodeProps) => { const { id, color, icon, label, interactive, expandButtonClick, nodeClick } = props.data as EntityNodeViewModel; const { euiTheme } = useEuiTheme(); @@ -87,3 +86,5 @@ export const RectangleNode: React.FC = memo((props: NodeProps) => { > ); }); + +RectangleNode.displayName = 'RectangleNode'; diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/shapes/diamond_shape.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/shapes/diamond_shape.tsx index 0f0cce4e744c7..a0998ffd9a92f 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/shapes/diamond_shape.tsx +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/shapes/diamond_shape.tsx @@ -8,8 +8,7 @@ import React, { memo } from 'react'; import type { HoverShapeProps, ShapeProps } from './types'; -// eslint-disable-next-line react/display-name -export const DiamondHoverShape: React.FC = memo(({ stroke }) => ( +export const DiamondHoverShape = memo(({ stroke }) => ( = memo(({ stroke }) => strokeDasharray="2 2" /> )); +DiamondHoverShape.displayName = 'DiamondHoverShape'; -// eslint-disable-next-line react/display-name -export const DiamondShape: React.FC = memo(({ stroke, fill }) => ( +export const DiamondShape = memo(({ stroke, fill }) => ( )); +DiamondShape.displayName = 'DiamondShape'; diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/shapes/ellipse_shape.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/shapes/ellipse_shape.tsx index ef2f8452cf206..fdf699d1c3e05 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/shapes/ellipse_shape.tsx +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/shapes/ellipse_shape.tsx @@ -8,12 +8,12 @@ import React, { memo } from 'react'; import type { HoverShapeProps, ShapeProps } from './types'; -// eslint-disable-next-line react/display-name -export const EllipseHoverShape: React.FC = memo(({ stroke }) => ( +export const EllipseHoverShape = memo(({ stroke }) => ( )); +EllipseHoverShape.displayName = 'EllipseHoverShape'; -// eslint-disable-next-line react/display-name -export const EllipseShape: React.FC = memo(({ stroke, fill }) => ( +export const EllipseShape = memo(({ stroke, fill }) => ( )); +EllipseShape.displayName = 'EllipseShape'; diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/shapes/hexagon_shape.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/shapes/hexagon_shape.tsx index 133c6e4a035c7..4a0de92b75f65 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/shapes/hexagon_shape.tsx +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/shapes/hexagon_shape.tsx @@ -8,8 +8,7 @@ import React, { memo } from 'react'; import type { HoverShapeProps, ShapeProps } from './types'; -// eslint-disable-next-line react/display-name -export const HexagonHoverShape: React.FC = memo(({ stroke }) => ( +export const HexagonHoverShape = memo(({ stroke }) => ( = memo(({ stroke }) => strokeDasharray="2 2" /> )); +HexagonHoverShape.displayName = 'HexagonHoverShape'; -// eslint-disable-next-line react/display-name -export const HexagonShape: React.FC = memo(({ stroke, fill }) => ( +export const HexagonShape = memo(({ stroke, fill }) => ( )); +HexagonShape.displayName = 'HexagonShape'; diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/shapes/pentagon_shape.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/shapes/pentagon_shape.tsx index ea43efed36a48..f46aae508fbca 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/shapes/pentagon_shape.tsx +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/shapes/pentagon_shape.tsx @@ -8,8 +8,7 @@ import React, { memo } from 'react'; import type { HoverShapeProps, ShapeProps } from './types'; -// eslint-disable-next-line react/display-name -export const PentagonHoverShape: React.FC = memo(({ stroke }) => ( +export const PentagonHoverShape = memo(({ stroke }) => ( = memo(({ stroke }) = strokeDasharray="2 2" /> )); +PentagonHoverShape.displayName = 'PentagonHoverShape'; -// eslint-disable-next-line react/display-name -export const PentagonShape: React.FC = memo(({ stroke, fill }) => ( +export const PentagonShape = memo(({ stroke, fill }) => ( )); +PentagonShape.displayName = 'PentagonShape'; diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/shapes/rectangle_shape.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/shapes/rectangle_shape.tsx index 28e55c8ea117c..e714d66880589 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/shapes/rectangle_shape.tsx +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/shapes/rectangle_shape.tsx @@ -8,8 +8,7 @@ import React, { memo } from 'react'; import type { HoverShapeProps, ShapeProps } from './types'; -// eslint-disable-next-line react/display-name -export const RectangleHoverShape: React.FC = memo(({ stroke }) => ( +export const RectangleHoverShape = memo(({ stroke }) => ( = memo(({ stroke }) strokeDasharray="2 2" /> )); +RectangleHoverShape.displayName = 'RectangleHoverShape'; -// eslint-disable-next-line react/display-name -export const RectangleShape: React.FC = memo(({ stroke, fill }) => ( +export const RectangleShape = memo(({ stroke, fill }) => ( )); +RectangleShape.displayName = 'RectangleShape'; diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/styles.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/styles.tsx index c4305c6fded6b..ae5e209c96f0e 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/styles.tsx +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/styles.tsx @@ -10,6 +10,7 @@ import styled from '@emotion/styled'; import { type EuiIconProps, type EuiTextProps, + type CommonProps, EuiButtonIcon, EuiIcon, EuiText, @@ -21,6 +22,7 @@ import { getSpanIcon } from './get_span_icon'; import type { NodeExpandButtonProps } from './node_expand_button'; import type { EntityNodeViewModel, LabelNodeViewModel } from '..'; +export const LABEL_HEIGHT = 24; export const LABEL_PADDING_X = 15; export const LABEL_BORDER_WIDTH = 1; export const NODE_WIDTH = 90; @@ -29,9 +31,10 @@ export const NODE_LABEL_WIDTH = 160; type NodeColor = EntityNodeViewModel['color'] | LabelNodeViewModel['color']; export const LabelNodeContainer = styled.div` + position: relative; text-wrap: nowrap; min-width: 100px; - height: 24px; + height: ${LABEL_HEIGHT}px; `; interface LabelShapeProps extends EuiTextProps { @@ -107,26 +110,28 @@ export const NodeShapeSvg = styled.svg` z-index: 1; `; -export interface NodeButtonProps { +export interface NodeButtonProps extends CommonProps { + width?: number; + height?: number; onClick?: (e: React.MouseEvent) => void; } -export const NodeButton: React.FC = ({ onClick }) => ( - - +export const NodeButton = ({ onClick, width, height, ...props }: NodeButtonProps) => ( + + ); -const StyledNodeContainer = styled.div` +const StyledNodeContainer = styled.div` position: absolute; - width: ${NODE_WIDTH}px; - height: ${NODE_HEIGHT}px; + width: ${(props) => props.width ?? NODE_WIDTH}px; + height: ${(props) => props.height ?? NODE_HEIGHT}px; z-index: 1; `; -const StyledNodeButton = styled.div` - width: ${NODE_WIDTH}px; - height: ${NODE_HEIGHT}px; +const StyledNodeButton = styled.div` + width: ${(props) => props.width ?? NODE_WIDTH}px; + height: ${(props) => props.height ?? NODE_HEIGHT}px; `; export const StyledNodeExpandButton = styled.div` @@ -142,7 +147,7 @@ export const StyledNodeExpandButton = styled.div` opacity: 1; } - ${NodeShapeContainer}:hover & { + ${NodeShapeContainer}:hover &, ${LabelNodeContainer}:hover & { opacity: 1; /* Show on hover */ } @@ -159,11 +164,11 @@ export const NodeShapeOnHoverSvg = styled(NodeShapeSvg)` opacity: 0; /* Hidden by default */ transition: opacity 0.2s ease; /* Smooth transition */ - ${NodeShapeContainer}:hover & { + ${NodeShapeContainer}:hover &, ${LabelNodeContainer}:hover & { opacity: 1; /* Show on hover */ } - ${NodeShapeContainer}:has(${StyledNodeExpandButton}.toggled) & { + ${NodeShapeContainer}:has(${StyledNodeExpandButton}.toggled) &, ${LabelNodeContainer}:has(${StyledNodeExpandButton}.toggled) & { opacity: 1; /* Show on hover */ } diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/styles.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/styles.tsx index be776d57be12a..fc7f4a8a69bcc 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/styles.tsx +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/styles.tsx @@ -55,15 +55,15 @@ const StyleEuiIcon = styled(EuiIcon)` type RoundedEuiIconProps = EuiIconProps & EuiColorProps; -const RoundedEuiIcon: React.FC = ({ color, background, ...rest }) => ( +const RoundedEuiIcon = ({ color, background, ...rest }: RoundedEuiIconProps) => ( ); -export const ExpandPopoverListItem: React.FC< - CommonProps & Pick -> = (props) => { +export const ExpandPopoverListItem = ( + props: CommonProps & Pick +) => { const { iconType, label, onClick, ...rest } = props; const { euiTheme } = useEuiTheme(); return ( diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/test_ids.ts b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/test_ids.ts index 96e399d670907..d507563c3fd73 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/test_ids.ts +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/test_ids.ts @@ -16,3 +16,8 @@ export const GRAPH_NODE_POPOVER_SHOW_ACTIONS_BY_ITEM_ID = `${GRAPH_INVESTIGATION_TEST_ID}ShowActionsByEntity` as const; export const GRAPH_NODE_POPOVER_SHOW_ACTIONS_ON_ITEM_ID = `${GRAPH_INVESTIGATION_TEST_ID}ShowActionsOnEntity` as const; + +export const GRAPH_LABEL_EXPAND_POPOVER_TEST_ID = + `${GRAPH_INVESTIGATION_TEST_ID}GraphLabelExpandPopover` as const; +export const GRAPH_LABEL_EXPAND_POPOVER_SHOW_EVENTS_WITH_THIS_ACTION_ITEM_ID = + `${GRAPH_INVESTIGATION_TEST_ID}ShowEventsWithThisAction` as const; diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/types.ts b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/types.ts index 32e34a212af59..dc5773cdff41d 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/types.ts +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/types.ts @@ -51,6 +51,7 @@ export interface LabelNodeViewModel LabelNodeDataModel, BaseNodeDataViewModel { expandButtonClick?: ExpandButtonClickCallback; + nodeClick?: NodeClickCallback; } export type NodeViewModel = EntityNodeViewModel | GroupNodeViewModel | LabelNodeViewModel; diff --git a/x-pack/test/cloud_security_posture_functional/page_objects/expanded_flyout.ts b/x-pack/test/cloud_security_posture_functional/page_objects/expanded_flyout.ts index 5829e9083a8cf..1bbd2c5091d64 100644 --- a/x-pack/test/cloud_security_posture_functional/page_objects/expanded_flyout.ts +++ b/x-pack/test/cloud_security_posture_functional/page_objects/expanded_flyout.ts @@ -17,6 +17,8 @@ const GRAPH_NODE_EXPAND_POPOVER_TEST_ID = `${GRAPH_INVESTIGATION_TEST_ID}GraphNo const GRAPH_NODE_POPOVER_EXPLORE_RELATED_TEST_ID = `${GRAPH_INVESTIGATION_TEST_ID}ExploreRelatedEntities`; const GRAPH_NODE_POPOVER_SHOW_ACTIONS_BY_TEST_ID = `${GRAPH_INVESTIGATION_TEST_ID}ShowActionsByEntity`; const GRAPH_NODE_POPOVER_SHOW_ACTIONS_ON_TEST_ID = `${GRAPH_INVESTIGATION_TEST_ID}ShowActionsOnEntity`; +const GRAPH_LABEL_EXPAND_POPOVER_TEST_ID = `${GRAPH_INVESTIGATION_TEST_ID}GraphLabelExpandPopover`; +const GRAPH_LABEL_EXPAND_POPOVER_SHOW_EVENTS_WITH_THIS_ACTION_ITEM_ID = `${GRAPH_INVESTIGATION_TEST_ID}ShowEventsWithThisAction`; type Filter = Parameters[0]; export class ExpandedFlyout extends FtrService { @@ -52,11 +54,14 @@ export class ExpandedFlyout extends FtrService { return nodes[0]; } - async clickOnNodeExpandButton(nodeId: string): Promise { + async clickOnNodeExpandButton( + nodeId: string, + popoverId: string = GRAPH_NODE_EXPAND_POPOVER_TEST_ID + ): Promise { const node = await this.selectNode(nodeId); const expandButton = await node.findByTestSubject(NODE_EXPAND_BUTTON_TEST_ID); await expandButton.click(); - await this.testSubjects.existOrFail(GRAPH_NODE_EXPAND_POPOVER_TEST_ID); + await this.testSubjects.existOrFail(popoverId); } async showActionsByEntity(nodeId: string): Promise { @@ -77,6 +82,12 @@ export class ExpandedFlyout extends FtrService { await this.pageObjects.header.waitUntilLoadingHasFinished(); } + async showEventsOfSameAction(nodeId: string): Promise { + await this.clickOnNodeExpandButton(nodeId, GRAPH_LABEL_EXPAND_POPOVER_TEST_ID); + await this.testSubjects.click(GRAPH_LABEL_EXPAND_POPOVER_SHOW_EVENTS_WITH_THIS_ACTION_ITEM_ID); + await this.pageObjects.header.waitUntilLoadingHasFinished(); + } + async expectFilterTextEquals(filterIdx: number, expected: string): Promise { const filters = await this.filterBar.getFiltersLabel(); expect(filters.length).to.be.greaterThan(filterIdx); diff --git a/x-pack/test/cloud_security_posture_functional/pages/alerts_flyout.ts b/x-pack/test/cloud_security_posture_functional/pages/alerts_flyout.ts index 35f9578929ada..60dd415379c39 100644 --- a/x-pack/test/cloud_security_posture_functional/pages/alerts_flyout.ts +++ b/x-pack/test/cloud_security_posture_functional/pages/alerts_flyout.ts @@ -90,6 +90,19 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { 'actor.entity.id: admin@example.com OR target.entity.id: admin@example.com OR related.entity: admin@example.com' ); + // Show events with the same action + await expandedFlyout.showEventsOfSameAction( + 'a(admin@example.com)-b(projects/your-project-id/roles/customRole)label(google.iam.admin.v1.CreateRole)outcome(success)' + ); + await expandedFlyout.expectFilterTextEquals( + 0, + 'actor.entity.id: admin@example.com OR target.entity.id: admin@example.com OR related.entity: admin@example.com OR event.action: google.iam.admin.v1.CreateRole' + ); + await expandedFlyout.expectFilterPreviewEquals( + 0, + 'actor.entity.id: admin@example.com OR target.entity.id: admin@example.com OR related.entity: admin@example.com OR event.action: google.iam.admin.v1.CreateRole' + ); + // Clear filters await expandedFlyout.clearAllFilters(); diff --git a/x-pack/test/cloud_security_posture_functional/pages/events_flyout.ts b/x-pack/test/cloud_security_posture_functional/pages/events_flyout.ts index 0848307ca26d2..f3449dd8df40f 100644 --- a/x-pack/test/cloud_security_posture_functional/pages/events_flyout.ts +++ b/x-pack/test/cloud_security_posture_functional/pages/events_flyout.ts @@ -82,6 +82,19 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { 'actor.entity.id: admin@example.com OR target.entity.id: admin@example.com OR related.entity: admin@example.com' ); + // Show events with the same action + await expandedFlyout.showEventsOfSameAction( + 'a(admin@example.com)-b(projects/your-project-id/roles/customRole)label(google.iam.admin.v1.CreateRole)outcome(success)' + ); + await expandedFlyout.expectFilterTextEquals( + 0, + 'actor.entity.id: admin@example.com OR target.entity.id: admin@example.com OR related.entity: admin@example.com OR event.action: google.iam.admin.v1.CreateRole' + ); + await expandedFlyout.expectFilterPreviewEquals( + 0, + 'actor.entity.id: admin@example.com OR target.entity.id: admin@example.com OR related.entity: admin@example.com OR event.action: google.iam.admin.v1.CreateRole' + ); + // Clear filters await expandedFlyout.clearAllFilters(); From 34bc507dc34350b7edf86a16accc5d60c0d6d775 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Mon, 23 Dec 2024 16:49:51 +0000 Subject: [PATCH 15/35] skip flaky suite (#204507) --- .../functional/test_suites/search/inference_management.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/test_serverless/functional/test_suites/search/inference_management.ts b/x-pack/test_serverless/functional/test_suites/search/inference_management.ts index fce97e3bbf475..a931324b390b7 100644 --- a/x-pack/test_serverless/functional/test_suites/search/inference_management.ts +++ b/x-pack/test_serverless/functional/test_suites/search/inference_management.ts @@ -61,7 +61,8 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); }); - describe('delete action', () => { + // FLAKY: https://github.com/elastic/kibana/issues/204507 + describe.skip('delete action', () => { const usageIndex = 'elser_index'; beforeEach(async () => { await ml.api.createInferenceEndpoint(endpoint, taskType, modelConfig); From 5ae53d4f0bdd782878dfc55971ef1be701cd19af Mon Sep 17 00:00:00 2001 From: Chris Cowan Date: Mon, 23 Dec 2024 10:27:16 -0700 Subject: [PATCH 16/35] =?UTF-8?q?=F0=9F=8C=8A=20Refactor=20APIs=20to=20fol?= =?UTF-8?q?low=20Elasticsearch=20conventions=20(#204671)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary This PR refactors the API by creating a new packaged called `@kbn/streams-schema` where you can find all the Zod types along with some type guards. I've also updated all the API's and calls to use the new schemas. --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Joe Reuter --- .github/CODEOWNERS | 1 + package.json | 1 + tsconfig.base.json | 2 + x-pack/packages/kbn-streams-schema/README.md | 3 + x-pack/packages/kbn-streams-schema/index.ts | 10 ++ .../kbn-streams-schema/jest.config.js | 12 ++ .../packages/kbn-streams-schema/kibana.jsonc | 8 + .../packages/kbn-streams-schema/package.json | 7 + .../read_streams_response.test.ts.snap | 105 ++++++++++++ .../kbn-streams-schema/src/apis/index.ts | 9 + .../src/apis/list_streams_response.ts | 14 ++ .../src/apis/read_streams_response.test.ts | 15 ++ .../src/apis/read_streams_response.ts | 15 ++ .../src/fixtures/ingest_read_stream.ts | 22 +++ .../src/fixtures/ingest_stream.ts | 14 ++ .../src/fixtures/ingest_stream_config.ts | 36 ++++ .../src/fixtures/read_streams_response.ts | 13 ++ .../src/fixtures/wired_read_stream.ts | 22 +++ .../src/fixtures/wired_stream.ts | 14 ++ .../src/fixtures/wired_stream_config.ts | 43 +++++ .../kbn-streams-schema/src/helpers}/index.ts | 2 +- .../src/helpers/type_guards.ts | 108 ++++++++++++ .../kbn-streams-schema/src/models/common.ts} | 86 +++++----- .../kbn-streams-schema/src/models/index.ts | 11 ++ .../__snapshots__/read_stream.test.ts.snap | 104 ++++++++++++ .../src/models/read_streams/index.ts | 10 ++ .../models/read_streams/ingest_read_stream.ts | 18 ++ .../models/read_streams/read_stream.test.ts | 19 +++ .../src/models/read_streams/read_stream.ts | 17 ++ .../models/read_streams/wired_read_stream.ts | 18 ++ .../src/models/stream_config/index.ts | 10 ++ .../stream_config/ingest_stream_config.ts | 20 +++ .../src/models/stream_config/stream_config.ts | 17 ++ .../stream_config/wired_stream_config.ts | 23 +++ .../src/models/streams/index.ts | 10 ++ .../src/models/streams/ingest_stream.ts | 20 +++ .../src/models/streams/stream.ts | 17 ++ .../src/models/streams/wired_stream.ts | 20 +++ .../packages/kbn-streams-schema/tsconfig.json | 20 +++ .../plugins/streams/server/index.ts | 2 - .../component_templates/generate_layer.ts | 18 +- .../lib/streams/helpers/condition_fields.ts | 9 +- .../lib/streams/helpers/condition_guards.ts | 29 ---- .../streams/helpers/condition_to_painless.ts | 6 +- .../streams/helpers/condition_to_query_dsl.ts | 9 +- .../server/lib/streams/helpers/hierarchy.ts | 7 +- .../generate_ingest_pipeline.ts | 27 ++- .../generate_reroute_pipeline.ts | 10 +- .../lib/streams/internal_stream_mapping.ts | 23 +-- .../lib/streams/root_stream_definition.ts | 47 +++--- .../streams/server/lib/streams/stream_crud.ts | 159 +++++++++--------- .../streams/server/routes/streams/delete.ts | 16 +- .../streams/server/routes/streams/disable.ts | 7 +- .../streams/server/routes/streams/edit.ts | 78 ++++++--- .../streams/server/routes/streams/enable.ts | 1 - .../streams/server/routes/streams/fork.ts | 29 ++-- .../streams/server/routes/streams/list.ts | 14 +- .../streams/server/routes/streams/read.ts | 37 ++-- .../streams/server/routes/streams/resync.ts | 13 +- .../streams/server/routes/streams/sample.ts | 10 +- .../streams/schema/fields_simulation.ts | 6 +- .../routes/streams/schema/unmapped_fields.ts | 17 +- .../plugins/streams/tsconfig.json | 3 +- .../plugins/streams_app/common/index.ts | 2 +- .../components/condition_editor/index.tsx | 2 +- .../components/entity_detail_view/index.tsx | 4 +- .../stream_detail_enriching/index.tsx | 2 +- .../stream_detail_management/classic.tsx | 4 +- .../stream_detail_management/index.tsx | 4 +- .../stream_detail_management/wired.tsx | 4 +- .../stream_detail_overview/index.tsx | 10 +- .../stream_detail_routing/index.tsx | 56 +++--- .../field_type.tsx | 4 +- .../fields_table.tsx | 32 ++-- .../flyout/children_affected_callout.tsx | 6 +- .../flyout/field_form_format.tsx | 4 +- .../flyout/index.tsx | 6 +- .../flyout/sample_preview_table.tsx | 11 +- .../hooks/use_editing_state.tsx | 50 +++--- .../hooks/use_unpromoting_state.tsx | 22 +-- .../stream_detail_schema_editor/index.tsx | 10 +- .../public/components/streams_table/index.tsx | 20 +-- .../plugins/streams_app/tsconfig.json | 1 + .../api_integration/apis/streams/classic.ts | 88 +++++----- .../apis/streams/enrichment.ts | 91 +++++----- .../apis/streams/flush_config.ts | 143 +++++++++------- .../api_integration/apis/streams/full_flow.ts | 20 +-- .../apis/streams/helpers/requests.ts | 3 +- x-pack/test/tsconfig.json | 3 +- yarn.lock | 4 + 90 files changed, 1486 insertions(+), 613 deletions(-) create mode 100644 x-pack/packages/kbn-streams-schema/README.md create mode 100644 x-pack/packages/kbn-streams-schema/index.ts create mode 100644 x-pack/packages/kbn-streams-schema/jest.config.js create mode 100644 x-pack/packages/kbn-streams-schema/kibana.jsonc create mode 100644 x-pack/packages/kbn-streams-schema/package.json create mode 100644 x-pack/packages/kbn-streams-schema/src/apis/__snapshots__/read_streams_response.test.ts.snap create mode 100644 x-pack/packages/kbn-streams-schema/src/apis/index.ts create mode 100644 x-pack/packages/kbn-streams-schema/src/apis/list_streams_response.ts create mode 100644 x-pack/packages/kbn-streams-schema/src/apis/read_streams_response.test.ts create mode 100644 x-pack/packages/kbn-streams-schema/src/apis/read_streams_response.ts create mode 100644 x-pack/packages/kbn-streams-schema/src/fixtures/ingest_read_stream.ts create mode 100644 x-pack/packages/kbn-streams-schema/src/fixtures/ingest_stream.ts create mode 100644 x-pack/packages/kbn-streams-schema/src/fixtures/ingest_stream_config.ts create mode 100644 x-pack/packages/kbn-streams-schema/src/fixtures/read_streams_response.ts create mode 100644 x-pack/packages/kbn-streams-schema/src/fixtures/wired_read_stream.ts create mode 100644 x-pack/packages/kbn-streams-schema/src/fixtures/wired_stream.ts create mode 100644 x-pack/packages/kbn-streams-schema/src/fixtures/wired_stream_config.ts rename x-pack/{solutions/observability/plugins/streams/common => packages/kbn-streams-schema/src/helpers}/index.ts (78%) create mode 100644 x-pack/packages/kbn-streams-schema/src/helpers/type_guards.ts rename x-pack/{solutions/observability/plugins/streams/common/types.ts => packages/kbn-streams-schema/src/models/common.ts} (55%) create mode 100644 x-pack/packages/kbn-streams-schema/src/models/index.ts create mode 100644 x-pack/packages/kbn-streams-schema/src/models/read_streams/__snapshots__/read_stream.test.ts.snap create mode 100644 x-pack/packages/kbn-streams-schema/src/models/read_streams/index.ts create mode 100644 x-pack/packages/kbn-streams-schema/src/models/read_streams/ingest_read_stream.ts create mode 100644 x-pack/packages/kbn-streams-schema/src/models/read_streams/read_stream.test.ts create mode 100644 x-pack/packages/kbn-streams-schema/src/models/read_streams/read_stream.ts create mode 100644 x-pack/packages/kbn-streams-schema/src/models/read_streams/wired_read_stream.ts create mode 100644 x-pack/packages/kbn-streams-schema/src/models/stream_config/index.ts create mode 100644 x-pack/packages/kbn-streams-schema/src/models/stream_config/ingest_stream_config.ts create mode 100644 x-pack/packages/kbn-streams-schema/src/models/stream_config/stream_config.ts create mode 100644 x-pack/packages/kbn-streams-schema/src/models/stream_config/wired_stream_config.ts create mode 100644 x-pack/packages/kbn-streams-schema/src/models/streams/index.ts create mode 100644 x-pack/packages/kbn-streams-schema/src/models/streams/ingest_stream.ts create mode 100644 x-pack/packages/kbn-streams-schema/src/models/streams/stream.ts create mode 100644 x-pack/packages/kbn-streams-schema/src/models/streams/wired_stream.ts create mode 100644 x-pack/packages/kbn-streams-schema/tsconfig.json delete mode 100644 x-pack/solutions/observability/plugins/streams/server/lib/streams/helpers/condition_guards.ts diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 1a172217bf9e6..bcb50caf56daf 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -763,6 +763,7 @@ x-pack/packages/kbn-ai-assistant @elastic/search-kibana x-pack/packages/kbn-alerting-comparators @elastic/response-ops x-pack/packages/kbn-alerting-state-types @elastic/response-ops x-pack/packages/kbn-random-sampling @elastic/kibana-visualizations +x-pack/packages/kbn-streams-schema @elastic/streams-program-team x-pack/packages/kbn-synthetics-private-location @elastic/obs-ux-management-team x-pack/packages/maps/vector_tile_utils @elastic/kibana-presentation x-pack/packages/observability/observability_utils/observability_utils_browser @elastic/observability-ui diff --git a/package.json b/package.json index e648aec17410b..6c97636ee9917 100644 --- a/package.json +++ b/package.json @@ -945,6 +945,7 @@ "@kbn/std": "link:packages/kbn-std", "@kbn/streams-app-plugin": "link:x-pack/solutions/observability/plugins/streams_app", "@kbn/streams-plugin": "link:x-pack/solutions/observability/plugins/streams", + "@kbn/streams-schema": "link:x-pack/packages/kbn-streams-schema", "@kbn/synthetics-plugin": "link:x-pack/solutions/observability/plugins/synthetics", "@kbn/synthetics-private-location": "link:x-pack/packages/kbn-synthetics-private-location", "@kbn/task-manager-fixture-plugin": "link:x-pack/test/alerting_api_integration/common/plugins/task_manager_fixture", diff --git a/tsconfig.base.json b/tsconfig.base.json index c5bc388c4c96d..9422a27bd296a 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -1878,6 +1878,8 @@ "@kbn/streams-app-plugin/*": ["x-pack/solutions/observability/plugins/streams_app/*"], "@kbn/streams-plugin": ["x-pack/solutions/observability/plugins/streams"], "@kbn/streams-plugin/*": ["x-pack/solutions/observability/plugins/streams/*"], + "@kbn/streams-schema": ["x-pack/packages/kbn-streams-schema"], + "@kbn/streams-schema/*": ["x-pack/packages/kbn-streams-schema/*"], "@kbn/synthetics-e2e": ["x-pack/solutions/observability/plugins/synthetics/e2e"], "@kbn/synthetics-e2e/*": ["x-pack/solutions/observability/plugins/synthetics/e2e/*"], "@kbn/synthetics-plugin": ["x-pack/solutions/observability/plugins/synthetics"], diff --git a/x-pack/packages/kbn-streams-schema/README.md b/x-pack/packages/kbn-streams-schema/README.md new file mode 100644 index 0000000000000..368d090cada40 --- /dev/null +++ b/x-pack/packages/kbn-streams-schema/README.md @@ -0,0 +1,3 @@ +# @kbn/streams-schema + +This shared package contains the Zod schema definition for the Streams project. \ No newline at end of file diff --git a/x-pack/packages/kbn-streams-schema/index.ts b/x-pack/packages/kbn-streams-schema/index.ts new file mode 100644 index 0000000000000..c1f1effe45499 --- /dev/null +++ b/x-pack/packages/kbn-streams-schema/index.ts @@ -0,0 +1,10 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export * from './src/apis'; +export * from './src/models'; +export * from './src/helpers'; diff --git a/x-pack/packages/kbn-streams-schema/jest.config.js b/x-pack/packages/kbn-streams-schema/jest.config.js new file mode 100644 index 0000000000000..da4fa0627dfdd --- /dev/null +++ b/x-pack/packages/kbn-streams-schema/jest.config.js @@ -0,0 +1,12 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +module.exports = { + preset: '@kbn/test', + rootDir: '../../..', + roots: ['/x-pack/packages/kbn-streams-schema'], +}; diff --git a/x-pack/packages/kbn-streams-schema/kibana.jsonc b/x-pack/packages/kbn-streams-schema/kibana.jsonc new file mode 100644 index 0000000000000..61129483995e9 --- /dev/null +++ b/x-pack/packages/kbn-streams-schema/kibana.jsonc @@ -0,0 +1,8 @@ +{ + "type": "shared-common", + "id": "@kbn/streams-schema", + "owner": "@elastic/streams-program-team", + "group": "observability", + "visibility": "shared" +} + diff --git a/x-pack/packages/kbn-streams-schema/package.json b/x-pack/packages/kbn-streams-schema/package.json new file mode 100644 index 0000000000000..056a531bf2e3e --- /dev/null +++ b/x-pack/packages/kbn-streams-schema/package.json @@ -0,0 +1,7 @@ +{ + "name": "@kbn/streams-schema", + "description": "Streams Zod schema definition and common models shared between public and server.", + "private": true, + "version": "1.0.0", + "license": "Elastic License 2.0" +} diff --git a/x-pack/packages/kbn-streams-schema/src/apis/__snapshots__/read_streams_response.test.ts.snap b/x-pack/packages/kbn-streams-schema/src/apis/__snapshots__/read_streams_response.test.ts.snap new file mode 100644 index 0000000000000..b40f64d66180d --- /dev/null +++ b/x-pack/packages/kbn-streams-schema/src/apis/__snapshots__/read_streams_response.test.ts.snap @@ -0,0 +1,105 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`ReadStreamResponse should successfully parse 1`] = ` +Object { + "streams": Array [ + Object { + "elasticsearch_assets": Array [], + "inherited_fields": Object { + "@timestamp": Object { + "from": "logs", + "type": "date", + }, + "message": Object { + "from": "logs", + "type": "match_only_text", + }, + }, + "name": "logs.nginx", + "stream": Object { + "ingest": Object { + "processing": Array [ + Object { + "condition": Object { + "field": "log.level", + "operator": "eq", + "value": "error", + }, + "config": Object { + "grok": Object { + "field": "message", + "patterns": Array [ + "%{TIMESTAMP_ISO8601:event.timestamp} %{GREEDY:rest}", + ], + }, + }, + }, + ], + "routing": Array [ + Object { + "condition": Object { + "field": "log.level", + "operator": "eq", + "value": "error", + }, + "name": "logs.errors", + }, + ], + "wired": Object { + "fields": Object { + "new_field": Object { + "type": "long", + }, + }, + }, + }, + }, + }, + Object { + "elasticsearch_assets": Array [], + "inherited_fields": Object { + "@timestamp": Object { + "from": "logs", + "type": "date", + }, + "message": Object { + "from": "logs", + "type": "match_only_text", + }, + }, + "name": "logs.nginx", + "stream": Object { + "ingest": Object { + "processing": Array [ + Object { + "condition": Object { + "field": "log.level", + "operator": "eq", + "value": "error", + }, + "config": Object { + "grok": Object { + "field": "message", + "patterns": Array [ + "%{TIMESTAMP_ISO8601:event.timestamp} %{GREEDY:rest}", + ], + }, + }, + }, + ], + "routing": Array [ + Object { + "condition": Object { + "field": "log.level", + "operator": "eq", + "value": "error", + }, + "name": "logs.errors", + }, + ], + }, + }, + }, + ], +} +`; diff --git a/x-pack/packages/kbn-streams-schema/src/apis/index.ts b/x-pack/packages/kbn-streams-schema/src/apis/index.ts new file mode 100644 index 0000000000000..f3551a83d704d --- /dev/null +++ b/x-pack/packages/kbn-streams-schema/src/apis/index.ts @@ -0,0 +1,9 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export * from './read_streams_response'; +export * from './list_streams_response'; diff --git a/x-pack/packages/kbn-streams-schema/src/apis/list_streams_response.ts b/x-pack/packages/kbn-streams-schema/src/apis/list_streams_response.ts new file mode 100644 index 0000000000000..f1f42f7e90ae2 --- /dev/null +++ b/x-pack/packages/kbn-streams-schema/src/apis/list_streams_response.ts @@ -0,0 +1,14 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { z } from '@kbn/zod'; +import { streamDefintionSchema } from '../models'; + +export const listStreamsResponseSchema = z.object({ + streams: z.array(streamDefintionSchema), +}); + +export type ListStreamsResponse = z.infer; diff --git a/x-pack/packages/kbn-streams-schema/src/apis/read_streams_response.test.ts b/x-pack/packages/kbn-streams-schema/src/apis/read_streams_response.test.ts new file mode 100644 index 0000000000000..7200c9c4a1076 --- /dev/null +++ b/x-pack/packages/kbn-streams-schema/src/apis/read_streams_response.test.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 { readStreamResponse } from '../fixtures/read_streams_response'; +import { readStreamResponseSchema } from './read_streams_response'; + +describe('ReadStreamResponse', () => { + it('should successfully parse', () => { + expect(readStreamResponseSchema.parse(readStreamResponse)).toMatchSnapshot(); + }); +}); diff --git a/x-pack/packages/kbn-streams-schema/src/apis/read_streams_response.ts b/x-pack/packages/kbn-streams-schema/src/apis/read_streams_response.ts new file mode 100644 index 0000000000000..bfb5d2f62e7fc --- /dev/null +++ b/x-pack/packages/kbn-streams-schema/src/apis/read_streams_response.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 { z } from '@kbn/zod'; +import { readStreamDefinitonSchema } from '../models'; + +export const readStreamResponseSchema = z.object({ + streams: z.array(readStreamDefinitonSchema), +}); + +export type ReadStreamResponse = z.infer; diff --git a/x-pack/packages/kbn-streams-schema/src/fixtures/ingest_read_stream.ts b/x-pack/packages/kbn-streams-schema/src/fixtures/ingest_read_stream.ts new file mode 100644 index 0000000000000..547c1194333ac --- /dev/null +++ b/x-pack/packages/kbn-streams-schema/src/fixtures/ingest_read_stream.ts @@ -0,0 +1,22 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { ingestStream } from './ingest_stream'; + +export const ingestReadStream = { + ...ingestStream, + inherited_fields: { + '@timestamp': { + type: 'date', + from: 'logs', + }, + message: { + type: 'match_only_text', + from: 'logs', + }, + }, +}; diff --git a/x-pack/packages/kbn-streams-schema/src/fixtures/ingest_stream.ts b/x-pack/packages/kbn-streams-schema/src/fixtures/ingest_stream.ts new file mode 100644 index 0000000000000..dfd1b8eb9d33e --- /dev/null +++ b/x-pack/packages/kbn-streams-schema/src/fixtures/ingest_stream.ts @@ -0,0 +1,14 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { ingestStreamConfig } from './ingest_stream_config'; + +export const ingestStream = { + name: 'logs.nginx', + elasticsearch_assets: [], + stream: ingestStreamConfig, +}; diff --git a/x-pack/packages/kbn-streams-schema/src/fixtures/ingest_stream_config.ts b/x-pack/packages/kbn-streams-schema/src/fixtures/ingest_stream_config.ts new file mode 100644 index 0000000000000..925ac9310762f --- /dev/null +++ b/x-pack/packages/kbn-streams-schema/src/fixtures/ingest_stream_config.ts @@ -0,0 +1,36 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export const ingestStreamConfig = { + ingest: { + processing: [ + { + config: { + grok: { + field: 'message', + patterns: ['%{TIMESTAMP_ISO8601:event.timestamp} %{GREEDY:rest}'], + }, + }, + condition: { + field: 'log.level', + operator: 'eq', + value: 'error', + }, + }, + ], + routing: [ + { + name: 'logs.errors', + condition: { + field: 'log.level', + operator: 'eq', + value: 'error', + }, + }, + ], + }, +}; diff --git a/x-pack/packages/kbn-streams-schema/src/fixtures/read_streams_response.ts b/x-pack/packages/kbn-streams-schema/src/fixtures/read_streams_response.ts new file mode 100644 index 0000000000000..fb1cd3ade2f9a --- /dev/null +++ b/x-pack/packages/kbn-streams-schema/src/fixtures/read_streams_response.ts @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { ingestReadStream } from './ingest_read_stream'; +import { wiredReadStream } from './wired_read_stream'; + +export const readStreamResponse = { + streams: [wiredReadStream, ingestReadStream], +}; diff --git a/x-pack/packages/kbn-streams-schema/src/fixtures/wired_read_stream.ts b/x-pack/packages/kbn-streams-schema/src/fixtures/wired_read_stream.ts new file mode 100644 index 0000000000000..177250bd8032a --- /dev/null +++ b/x-pack/packages/kbn-streams-schema/src/fixtures/wired_read_stream.ts @@ -0,0 +1,22 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { wiredStream } from './wired_stream'; + +export const wiredReadStream = { + ...wiredStream, + inherited_fields: { + '@timestamp': { + type: 'date', + from: 'logs', + }, + message: { + type: 'match_only_text', + from: 'logs', + }, + }, +}; diff --git a/x-pack/packages/kbn-streams-schema/src/fixtures/wired_stream.ts b/x-pack/packages/kbn-streams-schema/src/fixtures/wired_stream.ts new file mode 100644 index 0000000000000..371f2f7876486 --- /dev/null +++ b/x-pack/packages/kbn-streams-schema/src/fixtures/wired_stream.ts @@ -0,0 +1,14 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { wiredStreamConfig } from './wired_stream_config'; + +export const wiredStream = { + name: 'logs.nginx', + elasticsearch_assets: [], + stream: wiredStreamConfig, +}; diff --git a/x-pack/packages/kbn-streams-schema/src/fixtures/wired_stream_config.ts b/x-pack/packages/kbn-streams-schema/src/fixtures/wired_stream_config.ts new file mode 100644 index 0000000000000..51c65e3c09794 --- /dev/null +++ b/x-pack/packages/kbn-streams-schema/src/fixtures/wired_stream_config.ts @@ -0,0 +1,43 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export const wiredStreamConfig = { + ingest: { + processing: [ + { + config: { + grok: { + field: 'message', + patterns: ['%{TIMESTAMP_ISO8601:event.timestamp} %{GREEDY:rest}'], + }, + }, + condition: { + field: 'log.level', + operator: 'eq', + value: 'error', + }, + }, + ], + routing: [ + { + name: 'logs.errors', + condition: { + field: 'log.level', + operator: 'eq', + value: 'error', + }, + }, + ], + wired: { + fields: { + new_field: { + type: 'long', + }, + }, + }, + }, +}; diff --git a/x-pack/solutions/observability/plugins/streams/common/index.ts b/x-pack/packages/kbn-streams-schema/src/helpers/index.ts similarity index 78% rename from x-pack/solutions/observability/plugins/streams/common/index.ts rename to x-pack/packages/kbn-streams-schema/src/helpers/index.ts index 634994cb87f13..d1f9a8ff0c50a 100644 --- a/x-pack/solutions/observability/plugins/streams/common/index.ts +++ b/x-pack/packages/kbn-streams-schema/src/helpers/index.ts @@ -5,4 +5,4 @@ * 2.0. */ -export type { StreamDefinition, ReadStreamDefinition } from './types'; +export * from './type_guards'; diff --git a/x-pack/packages/kbn-streams-schema/src/helpers/type_guards.ts b/x-pack/packages/kbn-streams-schema/src/helpers/type_guards.ts new file mode 100644 index 0000000000000..557513fa74bb2 --- /dev/null +++ b/x-pack/packages/kbn-streams-schema/src/helpers/type_guards.ts @@ -0,0 +1,108 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { ZodSchema } from '@kbn/zod'; +import { + AndCondition, + conditionSchema, + dissectProcessingDefinitionSchema, + DissectProcssingDefinition, + FilterCondition, + filterConditionSchema, + GrokProcessingDefinition, + grokProcessingDefinitionSchema, + IngestReadStreamDefinition, + ingestReadStreamDefinitonSchema, + IngestStreamDefinition, + ingestStreamDefinitonSchema, + OrCondition, + ReadStreamDefinition, + readStreamDefinitonSchema, + StreamDefinition, + streamDefintionSchema, + WiredReadStreamDefinition, + wiredReadStreamDefinitonSchema, + WiredStreamDefinition, + wiredStreamDefinitonSchema, +} from '../models'; +import { + IngestStreamConfigDefinition, + ingestStreamConfigDefinitonSchema, + StreamConfigDefinition, + streamConfigDefinitionSchema, + WiredStreamConfigDefinition, + wiredStreamConfigDefinitonSchema, +} from '../models/stream_config'; + +export function isSchema(zodSchema: ZodSchema, subject: T) { + try { + zodSchema.parse(subject); + return true; + } catch (e) { + return false; + } +} + +export function isReadStream(subject: any): subject is ReadStreamDefinition { + return isSchema(readStreamDefinitonSchema, subject); +} + +export function isWiredReadStream(subject: any): subject is WiredReadStreamDefinition { + return isSchema(wiredReadStreamDefinitonSchema, subject); +} + +export function isIngestReadStream(subject: any): subject is IngestReadStreamDefinition { + return isSchema(ingestReadStreamDefinitonSchema, subject); +} + +export function isStream(subject: any): subject is StreamDefinition { + return isSchema(streamDefintionSchema, subject); +} + +export function isIngestStream( + subject: IngestStreamDefinition | WiredStreamDefinition +): subject is IngestStreamDefinition { + return isSchema(ingestStreamDefinitonSchema, subject); +} + +export function isWiredStream( + subject: IngestStreamDefinition | WiredStreamDefinition +): subject is WiredStreamDefinition { + return isSchema(wiredStreamDefinitonSchema, subject); +} + +export function isWiredStreamConfig(subject: any): subject is WiredStreamConfigDefinition { + return isSchema(wiredStreamConfigDefinitonSchema, subject); +} + +export function isIngestStreamConfig(subject: any): subject is IngestStreamConfigDefinition { + return isSchema(ingestStreamConfigDefinitonSchema, subject); +} + +export function isStreamConfig(subject: any): subject is StreamConfigDefinition { + return isSchema(streamConfigDefinitionSchema, subject); +} + +export function isGrokProcessor(subject: any): subject is GrokProcessingDefinition { + return isSchema(grokProcessingDefinitionSchema, subject); +} + +export function isDissectProcessor(subject: any): subject is DissectProcssingDefinition { + return isSchema(dissectProcessingDefinitionSchema, subject); +} + +export function isFilterCondition(subject: any): subject is FilterCondition { + return isSchema(filterConditionSchema, subject); +} + +export function isAndCondition(subject: any): subject is AndCondition { + return isSchema(conditionSchema, subject) && subject.and != null; +} + +export function isOrCondition(subject: any): subject is OrCondition { + return isSchema(conditionSchema, subject) && subject.or != null; +} diff --git a/x-pack/solutions/observability/plugins/streams/common/types.ts b/x-pack/packages/kbn-streams-schema/src/models/common.ts similarity index 55% rename from x-pack/solutions/observability/plugins/streams/common/types.ts rename to x-pack/packages/kbn-streams-schema/src/models/common.ts index 7917864706c2d..0751d9fed90c9 100644 --- a/x-pack/solutions/observability/plugins/streams/common/types.ts +++ b/x-pack/packages/kbn-streams-schema/src/models/common.ts @@ -48,71 +48,71 @@ export const conditionSchema: z.ZodType = z.lazy(() => ); export const grokProcessingDefinitionSchema = z.object({ - type: z.literal('grok'), - field: z.string(), - patterns: z.array(z.string()), - pattern_definitions: z.optional(z.record(z.string())), + grok: z.object({ + field: z.string(), + patterns: z.array(z.string()), + pattern_definitions: z.optional(z.record(z.string())), + }), }); +export type GrokProcessingDefinition = z.infer; + export const dissectProcessingDefinitionSchema = z.object({ - type: z.literal('dissect'), - field: z.string(), - pattern: z.string(), + dissect: z.object({ + field: z.string(), + pattern: z.string(), + }), }); +export type DissectProcssingDefinition = z.infer; + +export const processingConfigSchema = z.union([ + grokProcessingDefinitionSchema, + dissectProcessingDefinitionSchema, +]); + export const processingDefinitionSchema = z.object({ condition: z.optional(conditionSchema), - config: z.discriminatedUnion('type', [ - grokProcessingDefinitionSchema, - dissectProcessingDefinitionSchema, - ]), + config: processingConfigSchema, }); export type ProcessingDefinition = z.infer; -export const fieldDefinitionSchema = z.object({ - name: z.string(), +export const fieldDefinitionConfigSchema = z.object({ type: z.enum(['keyword', 'match_only_text', 'long', 'double', 'date', 'boolean', 'ip']), format: z.optional(z.string()), }); -export type FieldDefinition = z.infer; - -export const streamChildSchema = z.object({ - id: z.string(), - condition: z.optional(conditionSchema), -}); +export type FieldDefinitionConfig = z.infer; -export type StreamChild = z.infer; +export const fieldDefinitionSchema = z.record(z.string(), fieldDefinitionConfigSchema); -export const streamWithoutIdDefinitonSchema = z.object({ - processing: z.array(processingDefinitionSchema).default([]), - fields: z.array(fieldDefinitionSchema).default([]), - managed: z.boolean().default(true), - children: z.array(streamChildSchema).default([]), -}); +export type FieldDefinition = z.infer; -export type StreamWithoutIdDefinition = z.infer; +export const inheritedFieldDefinitionSchema = z.record( + z.string(), + fieldDefinitionConfigSchema.extend({ from: z.string() }) +); -export const unmanagedElasticsearchAsset = z.object({ - type: z.enum(['ingest_pipeline', 'component_template', 'index_template', 'data_stream']), - id: z.string(), -}); -export type UnmanagedElasticsearchAsset = z.infer; +export type InheritedFieldDefinition = z.infer; -export const streamDefinitonSchema = streamWithoutIdDefinitonSchema.extend({ - id: z.string(), - unmanaged_elasticsearch_assets: z.optional(z.array(unmanagedElasticsearchAsset)), +export const fieldDefinitionConfigWithNameSchema = fieldDefinitionConfigSchema.extend({ + name: z.string(), }); -export type StreamDefinition = z.infer; - -export const streamDefinitonWithoutChildrenSchema = streamDefinitonSchema.omit({ children: true }); - -export type StreamWithoutChildrenDefinition = z.infer; +export type FieldDefinitionConfigWithName = z.infer; -export const readStreamDefinitonSchema = streamDefinitonSchema.extend({ - inheritedFields: z.array(fieldDefinitionSchema.extend({ from: z.string() })).default([]), +export const streamChildSchema = z.object({ + name: z.string(), + condition: z.optional(conditionSchema), }); +export type StreamChild = z.infer; + +export const elasticsearchAssetSchema = z.array( + z.object({ + type: z.enum(['ingest_pipeline', 'component_template', 'index_template', 'data_stream']), + id: z.string(), + }) +); -export type ReadStreamDefinition = z.infer
{i18n.DESCRIPTION}