From e945fc93c511aeef5b2c130cf1f4afbfd219026c Mon Sep 17 00:00:00 2001
From: kosabogi <105062005+kosabogi@users.noreply.github.com>
Date: Mon, 4 Nov 2024 12:04:15 +0100
Subject: [PATCH 001/101] [ML] Updates references to apps and pages in
ML-related guides (#198308)
### Overview
This PR updates all app and page references to align with the new style
guide guidelines.
### Related issue
https://github.com/elastic/search-docs-team/issues/205
### Preview
Machine learning
AIOps Labs
---------
Co-authored-by: florent-leborgne
---
docs/user/ml/index.asciidoc | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/docs/user/ml/index.asciidoc b/docs/user/ml/index.asciidoc
index e84ca23dbc84d..91227055fa8a7 100644
--- a/docs/user/ml/index.asciidoc
+++ b/docs/user/ml/index.asciidoc
@@ -51,7 +51,8 @@ information, refer to {ml-docs}/ml-limitations.html[{ml-cap}].
preview::[]
-You can find the data drift view in **{ml-app}** > *{data-viz}* in {kib}.
+You can find the data drift view in **{ml-app}** > *{data-viz}* in {kib} or by using
+the <>.
The data drift view shows you the differences in each field for two
different time ranges in a given {data-source}. The view helps you to visualize
the changes in your data over time and enables you to understand its behavior
@@ -167,7 +168,7 @@ It makes it easy to find and investigate causes of unusual spikes or drops by us
Examine the histogram chart of the log rates for a given {data-source}, and find the reason behind a particular change possibly in millions of log events across multiple fields and values.
You can find log rate analysis embedded in multiple applications.
-In {kib}, you can find it under **{ml-app}** > **AIOps Labs** where you can select the {data-source} or saved search that you want to analyze.
+In {kib}, you can find it under **{ml-app}** > **AIOps Labs** or by using the <>. Here, you can select the {data-source} or saved search that you want to analyze.
[role="screenshot"]
image::user/ml/images/ml-log-rate-analysis-before.png[Log event histogram chart]
@@ -201,8 +202,8 @@ displays them together with a chart that shows the distribution of each category
and an example document that matches the category.
//end::log-pattern-analysis-intro[]
-You can find log pattern analysis under **{ml-app}** > **AIOps Labs** where you
-can select the {data-source} or saved search that you want to analyze, or in
+You can find log pattern analysis under **{ml-app}** > **AIOps Labs** or by using the <>.
+Here, you can select the {data-source} or saved search that you want to analyze, or in
**Discover** as an available action for any text field.
[role="screenshot"]
@@ -226,8 +227,8 @@ Change point detection uses the
to detect distribution changes, trend changes, and other statistically
significant change points in a metric of your time series data.
-You can find change point detection under **{ml-app}** > **AIOps Labs** where
-you can select the {data-source} or saved search that you want to analyze.
+You can find change point detection under **{ml-app}** > **AIOps Labs** or by using the <>.
+Here, you can select the {data-source} or saved search that you want to analyze.
[role="screenshot"]
image::user/ml/images/ml-change-point-detection.png[Change point detection UI]
From a88833c7830c2bb469430eb54c93cab19e64de6e Mon Sep 17 00:00:00 2001
From: Anton Dosov
Date: Mon, 4 Nov 2024 12:39:05 +0100
Subject: [PATCH 002/101] Fix tablelistview test due to timezone switch
(#198759)
## Summary
Fix https://github.com/elastic/kibana/issues/198744
Test was subtracting 7 days, but there is 1 hour less now, so the test
setup is incorrect. Fixing it by using moment to handle time switch edge
case
---
.../table_list_view_table/src/table_list_view.test.tsx | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/packages/content-management/table_list_view_table/src/table_list_view.test.tsx b/packages/content-management/table_list_view_table/src/table_list_view.test.tsx
index 38e05299184e4..38229399f2ec8 100644
--- a/packages/content-management/table_list_view_table/src/table_list_view.test.tsx
+++ b/packages/content-management/table_list_view_table/src/table_list_view.test.tsx
@@ -242,8 +242,8 @@ describe('TableListView', () => {
const updatedAtValues: Moment[] = [];
const updatedHits = hits.map(({ id, attributes, references }, i) => {
- const updatedAt = new Date(new Date().setDate(new Date().getDate() - (7 + i)));
- updatedAtValues.push(moment(updatedAt));
+ const updatedAt = moment().subtract(7 + i, 'days');
+ updatedAtValues.push(updatedAt);
return {
id,
From 070e5ef7d1c0153a1fed0b8659f70d4669936d90 Mon Sep 17 00:00:00 2001
From: Jon
Date: Mon, 4 Nov 2024 07:17:12 -0600
Subject: [PATCH 003/101] [ci] Update cloud deployment template (#198674)
To move off legacy instance configurations
---
.buildkite/scripts/steps/cloud/deploy.json | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/.buildkite/scripts/steps/cloud/deploy.json b/.buildkite/scripts/steps/cloud/deploy.json
index 3080f083aadfd..5ee605c39ff5c 100644
--- a/.buildkite/scripts/steps/cloud/deploy.json
+++ b/.buildkite/scripts/steps/cloud/deploy.json
@@ -7,7 +7,7 @@
"plan": {
"cluster_topology": [
{
- "instance_configuration_id": "gcp.integrationsserver.1",
+ "instance_configuration_id": "gcp.integrationsserver.n2.68x32x45",
"zone_count": 1,
"size": {
"resource": "memory",
@@ -32,7 +32,7 @@
"cluster_topology": [
{
"zone_count": 1,
- "instance_configuration_id": "gcp.coordinating.1",
+ "instance_configuration_id": "gcp.es.coordinating.n2.68x16x45",
"node_roles": [
"ingest",
"remote_cluster_client"
@@ -50,7 +50,7 @@
"data": "hot"
}
},
- "instance_configuration_id": "gcp.data.highio.1",
+ "instance_configuration_id": "gcp.es.datahot.n2.68x32x45",
"node_roles": [
"master",
"ingest",
@@ -72,7 +72,7 @@
"data": "warm"
}
},
- "instance_configuration_id": "gcp.data.highstorage.1",
+ "instance_configuration_id": "gcp.es.datawarm.n2.68x10x190",
"node_roles": [
"data_warm",
"remote_cluster_client"
@@ -90,7 +90,7 @@
"data": "cold"
}
},
- "instance_configuration_id": "gcp.data.highstorage.1",
+ "instance_configuration_id": "gcp.es.datacold.n2.68x10x190",
"node_roles": [
"data_cold",
"remote_cluster_client"
@@ -108,7 +108,7 @@
"data": "frozen"
}
},
- "instance_configuration_id": "gcp.es.datafrozen.n1.64x10x95",
+ "instance_configuration_id": "gcp.es.datafrozen.n2.68x10x90",
"node_roles": [
"data_frozen"
],
@@ -120,7 +120,7 @@
},
{
"zone_count": 1,
- "instance_configuration_id": "gcp.master.1",
+ "instance_configuration_id": "gcp.es.master.n2.68x32x45",
"node_roles": [
"master",
"remote_cluster_client"
@@ -142,7 +142,7 @@
},
"autoscaling_tier_override": true,
"id": "ml",
- "instance_configuration_id": "gcp.ml.1",
+ "instance_configuration_id": "gcp.es.ml.n2.68x32x45",
"node_roles": [
"ml",
"remote_cluster_client"
@@ -155,7 +155,7 @@
"enabled_built_in_plugins": []
},
"deployment_template": {
- "id": "gcp-io-optimized-v2"
+ "id": "gcp-cpu-optimized"
}
},
"ref_id": "main-elasticsearch"
@@ -168,7 +168,7 @@
"plan": {
"cluster_topology": [
{
- "instance_configuration_id": "gcp.kibana.1",
+ "instance_configuration_id": "gcp.kibana.n2.68x32x45",
"zone_count": 1,
"size": {
"value": 2048,
From 867b05eb586d2d9f36547b4d6dc2a20d975de7a8 Mon Sep 17 00:00:00 2001
From: Stratoula Kalafateli
Date: Mon, 4 Nov 2024 14:27:43 +0100
Subject: [PATCH 004/101] [ES|QL] Fixes the wrongly focused suggestion
(#198654)
## Summary
Removes the wrongly focused panel id.
**Now**
**Before**
---
.../public/query_string_input/esql_menu_popover.tsx | 1 -
1 file changed, 1 deletion(-)
diff --git a/src/plugins/unified_search/public/query_string_input/esql_menu_popover.tsx b/src/plugins/unified_search/public/query_string_input/esql_menu_popover.tsx
index 71e54c3376abb..ba978debb73de 100644
--- a/src/plugins/unified_search/public/query_string_input/esql_menu_popover.tsx
+++ b/src/plugins/unified_search/public/query_string_input/esql_menu_popover.tsx
@@ -145,7 +145,6 @@ export const ESQLMenuPopover: React.FC = ({
},
{
id: 1,
- initialFocusedItemIndex: 1,
title: i18n.translate('unifiedSearch.query.queryBar.esqlMenu.exampleQueries', {
defaultMessage: 'Recommended queries',
}),
From 12dc8264bd422b659a7b0438d52bc6ed7a7a7bc4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Gon=C3=A7alo=20Rica=20Pais=20da=20Silva?=
Date: Mon, 4 Nov 2024 14:34:51 +0100
Subject: [PATCH 005/101] Enable search bar/timepicker for logs only services
(#198296)
## Summary
Enables logs only Services to have a timepicker in the logs tab.
![Screenshot 2024-10-31
181045](https://github.com/user-attachments/assets/0026af42-313c-4aa5-82b3-5f726d3e52d0)
### How to test
- Use `node scripts/synthtrace traces_logs_entities.ts --clean --live`
- Navigate to `synth-go-logs` service, go to logs tab
- Timepicker should be visible and work to filter available logs
Closes #197604
Co-authored-by: Elastic Machine
---
.../routing/templates/apm_service_template/index.tsx | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/x-pack/plugins/observability_solution/apm/public/components/routing/templates/apm_service_template/index.tsx b/x-pack/plugins/observability_solution/apm/public/components/routing/templates/apm_service_template/index.tsx
index 0e095694cd538..6c2fdaea96687 100644
--- a/x-pack/plugins/observability_solution/apm/public/components/routing/templates/apm_service_template/index.tsx
+++ b/x-pack/plugins/observability_solution/apm/public/components/routing/templates/apm_service_template/index.tsx
@@ -8,7 +8,6 @@
import { EuiFlexGroup, EuiFlexItem, EuiLoadingLogo, EuiSpacer, EuiTitle } from '@elastic/eui';
import React from 'react';
import { useHistory, useLocation } from 'react-router-dom';
-import { isLogsOnlySignal } from '../../../../utils/get_signal_type';
import { isMobileAgentName } from '../../../../../common/agent_name';
import { ApmServiceContextProvider } from '../../../../context/apm_service/apm_service_context';
import { useApmServiceContext } from '../../../../context/apm_service/use_apm_service_context';
@@ -55,7 +54,7 @@ function TemplateWithContext({ title, children, selectedTab, searchBarOptions }:
const tabs = useTabs({ selectedTab });
- const { agentName, serviceAgentStatus, serviceEntitySummary } = useApmServiceContext();
+ const { agentName, serviceAgentStatus } = useApmServiceContext();
const isPendingServiceAgent = !agentName && isPending(serviceAgentStatus);
@@ -76,9 +75,6 @@ function TemplateWithContext({ title, children, selectedTab, searchBarOptions }:
});
}
- const hasLogsOnlySignal =
- serviceEntitySummary?.dataStreamTypes && isLogsOnlySignal(serviceEntitySummary.dataStreamTypes);
-
return (
) : (
<>
- {!hasLogsOnlySignal && }
+
{children}
From 4a0a73674e5f51d4296e121537dd59dd63eef589 Mon Sep 17 00:00:00 2001
From: Tiago Vila Verde
Date: Mon, 4 Nov 2024 14:57:32 +0100
Subject: [PATCH 006/101] [Entity Store] Add enablement errors to entity store
management page (#198668)
## Summary
This PR adds callouts for any errors that occur during entity store
enablement and deletion from the management page. These are the same
callouts as currently seen in the Entity Analytics dashboard.
![Screenshot 2024-11-01 at 13 31
47](https://github.com/user-attachments/assets/162074c2-e977-4e12-a9a1-50efbd7f74b0)
---
.../components/dashboard_panels.tsx | 2 +-
.../pages/entity_store_management_page.tsx | 48 +++++++++++++++++++
2 files changed, 49 insertions(+), 1 deletion(-)
diff --git a/x-pack/plugins/security_solution/public/entity_analytics/components/entity_store/components/dashboard_panels.tsx b/x-pack/plugins/security_solution/public/entity_analytics/components/entity_store/components/dashboard_panels.tsx
index 63ffcf7b9eae1..d70eb9fe34b51 100644
--- a/x-pack/plugins/security_solution/public/entity_analytics/components/entity_store/components/dashboard_panels.tsx
+++ b/x-pack/plugins/security_solution/public/entity_analytics/components/entity_store/components/dashboard_panels.tsx
@@ -55,7 +55,7 @@ const EntityStoreDashboardPanelsComponent = () => {
const { mutate: initRiskEngine } = useInitRiskEngineMutation();
- const callouts = entityStore.errors.map((err, i) => (
+ const callouts = entityStore.errors.map((err) => (
{
stopEntityEngineMutation.isLoading ||
deleteEntityEngineMutation.isLoading;
+ const callouts = entityStoreStatus.errors.map((error) => (
+
+ }
+ color="danger"
+ iconType="alert"
+ >
+ {error.message}
+
+ ));
+
return (
<>
{
+ {initEntityEngineMutation.isError && (
+
+ }
+ color="danger"
+ iconType="alert"
+ >
+
+ {(initEntityEngineMutation.error as { body: { message: string } }).body.message}
+
+
+ )}
+ {deleteEntityEngineMutation.isError && (
+
+ }
+ color="danger"
+ iconType="alert"
+ >
+
+ {(deleteEntityEngineMutation.error as { body: { message: string } }).body.message}
+
+
+ )}
+ {callouts}
{!isEntityStoreFeatureFlagDisabled && canDeleteEntityEngine && }
From 10d7926e3b2a943250d0ec2437c8d645486b84bd Mon Sep 17 00:00:00 2001
From: Paulo Silva
Date: Mon, 4 Nov 2024 06:00:35 -0800
Subject: [PATCH 007/101] Reducing vulnerability runtime mappings (#198739)
## Summary
It closes https://github.com/elastic/security-team/issues/11034
This PR removes runtime mappings for vulnerabilities, since they will be
added on the third party integration on [this
PR](https://github.com/elastic/integrations/pull/11614) before the 8.16
release, we can remove the runtime mappings in Kibana in favour of not
compromising performance.
Co-authored-by: Maxim Kholod
---
.../cloud_security_posture/public/common/constants.ts | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/x-pack/plugins/cloud_security_posture/public/common/constants.ts b/x-pack/plugins/cloud_security_posture/public/common/constants.ts
index fab73eb153e69..ea3866cbe1256 100644
--- a/x-pack/plugins/cloud_security_posture/public/common/constants.ts
+++ b/x-pack/plugins/cloud_security_posture/public/common/constants.ts
@@ -263,9 +263,7 @@ The runtime mappings are used to prevent filtering out the data when any of thes
TODO: Remove the fields below once they are mapped as Keyword in the Third Party integrations, or remove
the fields from the runtime mappings if they are removed from the Data Table.
*/
-export const CDR_VULNERABILITY_DATA_TABLE_RUNTIME_MAPPING_FIELDS: string[] = [
- VULNERABILITY_FIELDS.VENDOR,
-];
+export const CDR_VULNERABILITY_DATA_TABLE_RUNTIME_MAPPING_FIELDS: string[] = [];
export const CDR_MISCONFIGURATION_DATA_TABLE_RUNTIME_MAPPING_FIELDS: string[] = [
'rule.benchmark.rule_number',
'rule.section',
@@ -279,9 +277,7 @@ to prevent filtering out the data when grouping by the key field.
TODO: Remove the fields below once they are mapped as Keyword in the Third Party integrations, or remove
the fields from the runtime mappings if they are removed from the Data Table.
*/
-export const CDR_VULNERABILITY_GROUPING_RUNTIME_MAPPING_FIELDS: Record = {
- [VULNERABILITY_GROUPING_OPTIONS.CLOUD_ACCOUNT_NAME]: [VULNERABILITY_FIELDS.CLOUD_PROVIDER],
-};
+export const CDR_VULNERABILITY_GROUPING_RUNTIME_MAPPING_FIELDS: Record = {};
export const CDR_MISCONFIGURATION_GROUPING_RUNTIME_MAPPING_FIELDS: Record = {
[FINDINGS_GROUPING_OPTIONS.ORCHESTRATOR_CLUSTER_NAME]: ['orchestrator.cluster.name'],
[FINDINGS_GROUPING_OPTIONS.CLOUD_ACCOUNT_NAME]: ['cloud.account.name'],
From 79331d53e4239eaefb006072aa316572b75f480d Mon Sep 17 00:00:00 2001
From: Krzysztof Kowalczyk
Date: Mon, 4 Nov 2024 15:01:08 +0100
Subject: [PATCH 008/101] [Lens] Add Esc key handling to
lens_configuration_flyout (#198487)
## Summary
This PR adds `Esc` key handling to `LensEditConfigurationFlyout`
Closes: #175100
---
.../lens_configuration_flyout.tsx | 63 +++++++++++--------
1 file changed, 38 insertions(+), 25 deletions(-)
diff --git a/x-pack/plugins/lens/public/app_plugin/shared/edit_on_the_fly/lens_configuration_flyout.tsx b/x-pack/plugins/lens/public/app_plugin/shared/edit_on_the_fly/lens_configuration_flyout.tsx
index ef452f20fdf7d..fd3bcdc8bed8a 100644
--- a/x-pack/plugins/lens/public/app_plugin/shared/edit_on_the_fly/lens_configuration_flyout.tsx
+++ b/x-pack/plugins/lens/public/app_plugin/shared/edit_on_the_fly/lens_configuration_flyout.tsx
@@ -17,6 +17,8 @@ import {
EuiFlexGroup,
EuiFlexItem,
euiScrollBarStyles,
+ EuiWindowEvent,
+ keys,
} from '@elastic/eui';
import { euiThemeVars } from '@kbn/ui-theme';
import type { Datatable } from '@kbn/expressions-plugin/public';
@@ -392,40 +394,51 @@ export function LensEditConfigurationFlyout({
getUserMessages,
]);
+ const onKeyDown = (e: KeyboardEvent) => {
+ if (e.key === keys.ESCAPE) {
+ closeFlyout?.();
+ setIsInlineFlyoutVisible(false);
+ }
+ };
+
if (isLoading) return null;
// Example is the Discover editing where we dont want to render the text based editor on the panel, neither the suggestions (for now)
if (!canEditTextBasedQuery && hidesSuggestions) {
return (
-
-
-
+ <>
+ {isInlineFlyoutVisible && }
+
+
+
+ >
);
}
return (
<>
+ {isInlineFlyoutVisible && }
Date: Mon, 4 Nov 2024 14:16:02 +0000
Subject: [PATCH 009/101] Create portable dashboard for OTel .NET runtime
metrics (#184842)
## Summary
Create a dedicated "portable dashboard" for OTel .NET.
This uses metrics available in the
[contrib](https://github.com/open-telemetry/opentelemetry-dotnet-contrib)
runtime metrics library. These metrics are opt-in and not enabled by
default in the vanilla SDK. Our Elastic distro brings in the package and
enables them by default. Therefore, the dashboard will only work if a)
the customer uses our distro or b) they enable the metrics themselves
when using the vanilla SDK.
Further, work is ongoing to define [semantic conventions for .NET
runtime
metrics](https://github.com/open-telemetry/semantic-conventions/pull/1035).
Once complete, the metrics will be implemented directly in the .NET
runtime BCL and be available with no additional dependencies. The goal
is to achieve that by .NET 9, which is not guaranteed. At that point,
the metric names will change to align with the semantic conventions.
This is not ideal, but it is our only option if we want to provide some
form of runtime dashboard with the current metrics and OTel distro.
As with #182107, this dashboard uses a table for some of the data and
this table doesn't seem to reflect the correct date filtering. Until
there is a solution, this PR will remain in the draft, or we can
consider dropping the table for the initial dashboard.
![image](https://github.com/elastic/kibana/assets/3669103/0be46495-e09f-4f4e-81e1-5f69361d5781)
---
.../kbn-apm-synthtrace-client/src/types/agent_names.ts | 2 ++
.../static_dashboard/dashboards/dashboard_catalog.ts | 9 +++++++++
.../dashboards/opentelemetry_dotnet.json | 1 +
3 files changed, 12 insertions(+)
create mode 100644 x-pack/plugins/observability_solution/apm/public/components/app/metrics/static_dashboard/dashboards/opentelemetry_dotnet.json
diff --git a/packages/kbn-apm-synthtrace-client/src/types/agent_names.ts b/packages/kbn-apm-synthtrace-client/src/types/agent_names.ts
index d181a437fb73d..5953331bf5aa8 100644
--- a/packages/kbn-apm-synthtrace-client/src/types/agent_names.ts
+++ b/packages/kbn-apm-synthtrace-client/src/types/agent_names.ts
@@ -24,6 +24,8 @@ type OpenTelemetryAgentName =
| 'otlp'
| 'opentelemetry/cpp'
| 'opentelemetry/dotnet'
+ | 'opentelemetry/dotnet/opentelemetry-dotnet-instrumentation'
+ | 'opentelemetry/dotnet/elastic'
| 'opentelemetry/erlang'
| 'opentelemetry/go'
| 'opentelemetry/java'
diff --git a/x-pack/plugins/observability_solution/apm/public/components/app/metrics/static_dashboard/dashboards/dashboard_catalog.ts b/x-pack/plugins/observability_solution/apm/public/components/app/metrics/static_dashboard/dashboards/dashboard_catalog.ts
index 2d3ea5fded80b..6f81ef6db535b 100644
--- a/x-pack/plugins/observability_solution/apm/public/components/app/metrics/static_dashboard/dashboards/dashboard_catalog.ts
+++ b/x-pack/plugins/observability_solution/apm/public/components/app/metrics/static_dashboard/dashboards/dashboard_catalog.ts
@@ -12,6 +12,9 @@ export const AGENT_NAME_DASHBOARD_FILE_MAPPING: Record = {
'opentelemetry/java': 'opentelemetry_java',
'opentelemetry/java/opentelemetry-java-instrumentation': 'opentelemetry_java',
'opentelemetry/java/elastic': 'opentelemetry_java',
+ 'opentelemetry/dotnet': 'opentelemetry_dotnet',
+ 'opentelemetry/dotnet/opentelemetry-dotnet-instrumentation': 'opentelemetry_dotnet',
+ 'opentelemetry/dotnet/elastic': 'opentelemetry_dotnet',
};
/**
@@ -44,6 +47,12 @@ export async function loadDashboardFile(filename: string): Promise {
'./opentelemetry_java.json'
);
}
+ case 'opentelemetry_dotnet': {
+ return import(
+ /* webpackChunkName: "lazyOtelDotnetDashboard" */
+ './opentelemetry_dotnet.json'
+ );
+ }
default: {
break;
}
diff --git a/x-pack/plugins/observability_solution/apm/public/components/app/metrics/static_dashboard/dashboards/opentelemetry_dotnet.json b/x-pack/plugins/observability_solution/apm/public/components/app/metrics/static_dashboard/dashboards/opentelemetry_dotnet.json
new file mode 100644
index 0000000000000..2862bf0a586d7
--- /dev/null
+++ b/x-pack/plugins/observability_solution/apm/public/components/app/metrics/static_dashboard/dashboards/opentelemetry_dotnet.json
@@ -0,0 +1 @@
+{"attributes":{"controlGroupInput":{"chainingSystem":"HIERARCHICAL","controlStyle":"oneLine","ignoreParentSettingsJSON":"{\"ignoreFilters\":false,\"ignoreQuery\":false,\"ignoreTimerange\":false,\"ignoreValidations\":false}","panelsJSON":"{\"2be66584-9de4-4a36-ba54-bfdd1b4ccfb4\":{\"type\":\"optionsListControl\",\"order\":0,\"grow\":true,\"width\":\"medium\",\"explicitInput\":{\"id\":\"2be66584-9de4-4a36-ba54-bfdd1b4ccfb4\",\"fieldName\":\"service.node.name\",\"title\":\"Instance\",\"grow\":true,\"width\":\"medium\",\"searchTechnique\":\"prefix\",\"selectedOptions\":[],\"existsSelected\":true,\"enhancements\":{}}}}"},"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}"},"optionsJSON":"{\"useMargins\":true,\"syncColors\":false,\"syncCursor\":true,\"syncTooltips\":false,\"hidePanelTitles\":false}","panelsJSON":"[{\"type\":\"lens\",\"gridData\":{\"x\":0,\"y\":0,\"w\":48,\"h\":8,\"i\":\"ea9f86f0-ff73-4c92-9b93-41baebdcffab\"},\"panelIndex\":\"ea9f86f0-ff73-4c92-9b93-41baebdcffab\",\"embeddableConfig\":{\"attributes\":{\"title\":\"\",\"visualizationType\":\"lnsDatatable\",\"type\":\"lens\",\"references\":[{\"type\":\"index-pattern\",\"id\":\"APM_STATIC_DATA_VIEW_ID\",\"name\":\"indexpattern-datasource-layer-1ba88117-6e95-46e2-8667-e0bc15145182\"}],\"state\":{\"visualization\":{\"columns\":[{\"columnId\":\"d5553b2b-25e9-4b94-9697-f04885f4a067\",\"isTransposed\":false,\"isMetric\":false,\"alignment\":\"left\",\"summaryRow\":\"none\",\"width\":547.5714285714286},{\"columnId\":\"b3da070f-3463-4990-b257-40ac399bec87\",\"isTransposed\":false,\"isMetric\":true,\"colorMode\":\"none\",\"hidden\":false,\"alignment\":\"left\",\"summaryRow\":\"avg\",\"width\":135.73809523809527},{\"columnId\":\"a7f6a205-1e8f-4b64-b745-efe20c2c6545\",\"isTransposed\":false,\"isMetric\":true,\"alignment\":\"left\",\"summaryRow\":\"sum\",\"width\":143.93809523809523},{\"columnId\":\"2bbcd9e9-15ff-42c1-98a8-65a5b9b4e4c5\",\"isTransposed\":false,\"isMetric\":true,\"alignment\":\"left\",\"summaryRow\":\"sum\",\"width\":142.68809523809523},{\"columnId\":\"9f3d67e3-0513-468e-b9b2-6d8780dac3e0\",\"isTransposed\":false,\"isMetric\":true,\"alignment\":\"left\",\"summaryRow\":\"sum\",\"width\":163.18809523809523},{\"columnId\":\"21bdcb2d-cee4-4dd9-84cb-5031f073bf85\",\"isTransposed\":false,\"isMetric\":true,\"alignment\":\"left\",\"width\":183.68809523809523}],\"layerId\":\"1ba88117-6e95-46e2-8667-e0bc15145182\",\"layerType\":\"data\",\"paging\":{\"size\":10,\"enabled\":true}},\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filters\":[],\"datasourceStates\":{\"formBased\":{\"layers\":{\"1ba88117-6e95-46e2-8667-e0bc15145182\":{\"columns\":{\"d5553b2b-25e9-4b94-9697-f04885f4a067\":{\"label\":\"Host + Service instance\",\"dataType\":\"string\",\"operationType\":\"terms\",\"scale\":\"ordinal\",\"sourceField\":\"host.name\",\"isBucketed\":true,\"params\":{\"size\":25,\"orderBy\":{\"type\":\"alphabetical\",\"fallback\":false},\"orderDirection\":\"asc\",\"otherBucket\":true,\"missingBucket\":false,\"parentFormat\":{\"id\":\"multi_terms\"},\"include\":[],\"exclude\":[],\"includeIsRegex\":false,\"excludeIsRegex\":false,\"secondaryFields\":[\"service.node.name\"]},\"customLabel\":true},\"b3da070f-3463-4990-b257-40ac399bec87\":{\"label\":\"Memory usage\",\"dataType\":\"number\",\"operationType\":\"last_value\",\"isBucketed\":false,\"scale\":\"ratio\",\"sourceField\":\"process.memory.usage\",\"filter\":{\"query\":\"\\\"process.memory.usage\\\": *\",\"language\":\"kuery\"},\"params\":{\"sortField\":\"@timestamp\",\"format\":{\"id\":\"bytes\",\"params\":{\"decimals\":0}}},\"customLabel\":true},\"a7f6a205-1e8f-4b64-b745-efe20c2c6545\":{\"label\":\"Gen 0 collections\",\"dataType\":\"number\",\"operationType\":\"last_value\",\"isBucketed\":false,\"scale\":\"ratio\",\"sourceField\":\"process.runtime.dotnet.gc.collections.count\",\"filter\":{\"query\":\"\\\"process.runtime.dotnet.gc.collections.count\\\": * AND labels.generation : \\\"gen0\\\" \",\"language\":\"kuery\"},\"params\":{\"sortField\":\"@timestamp\"},\"customLabel\":true},\"2bbcd9e9-15ff-42c1-98a8-65a5b9b4e4c5\":{\"label\":\"Gen 1 collections\",\"dataType\":\"number\",\"operationType\":\"last_value\",\"isBucketed\":false,\"scale\":\"ratio\",\"sourceField\":\"process.runtime.dotnet.gc.collections.count\",\"filter\":{\"query\":\"\\\"process.runtime.dotnet.gc.collections.count\\\": * AND labels.generation : \\\"gen1\\\" \",\"language\":\"kuery\"},\"params\":{\"sortField\":\"@timestamp\"},\"customLabel\":true},\"9f3d67e3-0513-468e-b9b2-6d8780dac3e0\":{\"label\":\"Gen 2 collections\",\"dataType\":\"number\",\"operationType\":\"last_value\",\"isBucketed\":false,\"scale\":\"ratio\",\"sourceField\":\"process.runtime.dotnet.gc.collections.count\",\"filter\":{\"query\":\"\\\"process.runtime.dotnet.gc.collections.count\\\": * AND labels.generation : \\\"gen2\\\" \",\"language\":\"kuery\"},\"params\":{\"sortField\":\"@timestamp\"},\"customLabel\":true},\"21bdcb2d-cee4-4dd9-84cb-5031f073bf85\":{\"label\":\"Managed threads\",\"dataType\":\"number\",\"operationType\":\"last_value\",\"isBucketed\":false,\"scale\":\"ratio\",\"sourceField\":\"process.runtime.dotnet.thread_pool.threads.count\",\"filter\":{\"query\":\"\\\"process.runtime.dotnet.thread_pool.threads.count\\\": *\",\"language\":\"kuery\"},\"params\":{\"sortField\":\"@timestamp\"},\"customLabel\":true}},\"columnOrder\":[\"d5553b2b-25e9-4b94-9697-f04885f4a067\",\"21bdcb2d-cee4-4dd9-84cb-5031f073bf85\",\"b3da070f-3463-4990-b257-40ac399bec87\",\"a7f6a205-1e8f-4b64-b745-efe20c2c6545\",\"2bbcd9e9-15ff-42c1-98a8-65a5b9b4e4c5\",\"9f3d67e3-0513-468e-b9b2-6d8780dac3e0\"],\"sampling\":1,\"ignoreGlobalFilters\":false,\"incompleteColumns\":{},\"indexPatternId\":\"apm_static_data_view_id_default\"}},\"currentIndexPatternId\":\"apm_static_data_view_id_default\"},\"indexpattern\":{\"layers\":{}},\"textBased\":{\"layers\":{}}},\"internalReferences\":[],\"adHocDataViews\":{}}},\"hidePanelTitles\":true,\"enhancements\":{}},\"title\":\"\"},{\"type\":\"lens\",\"gridData\":{\"x\":0,\"y\":8,\"w\":25,\"h\":16,\"i\":\"d0991248-2fad-4f28-bedc-b8723bc45a81\"},\"panelIndex\":\"d0991248-2fad-4f28-bedc-b8723bc45a81\",\"embeddableConfig\":{\"attributes\":{\"title\":\"\",\"description\":\"The amount of physical memory allocated for this process.\",\"visualizationType\":\"lnsXY\",\"type\":\"lens\",\"references\":[{\"type\":\"index-pattern\",\"id\":\"APM_STATIC_DATA_VIEW_ID\",\"name\":\"indexpattern-datasource-layer-961b1efd-6f0d-41e4-a72b-5d66237d212b\"}],\"state\":{\"visualization\":{\"legend\":{\"isVisible\":true,\"position\":\"bottom\",\"showSingleSeries\":true},\"valueLabels\":\"hide\",\"fittingFunction\":\"None\",\"yTitle\":\"Allocated physical memory\",\"axisTitlesVisibilitySettings\":{\"x\":false,\"yLeft\":false,\"yRight\":true},\"tickLabelsVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"labelsOrientation\":{\"x\":0,\"yLeft\":0,\"yRight\":0},\"gridlinesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"preferredSeriesType\":\"bar_stacked\",\"layers\":[{\"layerId\":\"961b1efd-6f0d-41e4-a72b-5d66237d212b\",\"accessors\":[\"81968f1a-1c2f-46cb-8276-3dca900342e9\",\"54c0cda3-76f3-4b75-9fe1-2265fa68993c\"],\"position\":\"top\",\"seriesType\":\"line\",\"showGridlines\":false,\"layerType\":\"data\",\"colorMapping\":{\"assignments\":[],\"specialAssignments\":[{\"rule\":{\"type\":\"other\"},\"color\":{\"type\":\"loop\"},\"touched\":false}],\"paletteId\":\"eui_amsterdam_color_blind\",\"colorMode\":{\"type\":\"categorical\"}},\"xAccessor\":\"2405efa8-e18d-426f-822f-3a4551bf97d2\",\"yConfig\":[]}]},\"query\":{\"query\":\"agent.name: \\\"opentelemetry/dotnet\\\" \",\"language\":\"kuery\"},\"filters\":[],\"datasourceStates\":{\"formBased\":{\"layers\":{\"961b1efd-6f0d-41e4-a72b-5d66237d212b\":{\"columns\":{\"2405efa8-e18d-426f-822f-3a4551bf97d2\":{\"label\":\"@timestamp\",\"dataType\":\"date\",\"operationType\":\"date_histogram\",\"sourceField\":\"@timestamp\",\"isBucketed\":true,\"scale\":\"interval\",\"params\":{\"interval\":\"auto\",\"includeEmptyRows\":true,\"dropPartials\":false}},\"81968f1a-1c2f-46cb-8276-3dca900342e9\":{\"label\":\"Average\",\"dataType\":\"number\",\"operationType\":\"average\",\"sourceField\":\"process.memory.usage\",\"isBucketed\":false,\"scale\":\"ratio\",\"params\":{\"format\":{\"id\":\"bytes\",\"params\":{\"decimals\":0}},\"emptyAsNull\":true},\"customLabel\":true},\"54c0cda3-76f3-4b75-9fe1-2265fa68993c\":{\"label\":\"Max\",\"dataType\":\"number\",\"operationType\":\"max\",\"sourceField\":\"process.memory.usage\",\"isBucketed\":false,\"scale\":\"ratio\",\"params\":{\"emptyAsNull\":true,\"format\":{\"id\":\"bytes\",\"params\":{\"decimals\":0}}},\"customLabel\":true}},\"columnOrder\":[\"2405efa8-e18d-426f-822f-3a4551bf97d2\",\"81968f1a-1c2f-46cb-8276-3dca900342e9\",\"54c0cda3-76f3-4b75-9fe1-2265fa68993c\"],\"incompleteColumns\":{},\"sampling\":1,\"indexPatternId\":\"apm_static_data_view_id_default\"}},\"currentIndexPatternId\":\"apm_static_data_view_id_default\"},\"indexpattern\":{\"layers\":{}},\"textBased\":{\"layers\":{}}},\"internalReferences\":[],\"adHocDataViews\":{}}},\"description\":\"The amount of physical memory allocated to the .NET process.\",\"enhancements\":{}},\"title\":\"Allocated physical memory\"},{\"type\":\"lens\",\"gridData\":{\"x\":25,\"y\":8,\"w\":23,\"h\":16,\"i\":\"0bf63f9e-8797-4249-85f7-9407c165f732\"},\"panelIndex\":\"0bf63f9e-8797-4249-85f7-9407c165f732\",\"embeddableConfig\":{\"attributes\":{\"title\":\"\",\"visualizationType\":\"lnsXY\",\"type\":\"lens\",\"references\":[{\"type\":\"index-pattern\",\"id\":\"APM_STATIC_DATA_VIEW_ID\",\"name\":\"indexpattern-datasource-layer-eb4e02de-8962-40fa-9e75-ff25862ca5f3\"}],\"state\":{\"visualization\":{\"legend\":{\"isVisible\":true,\"position\":\"right\",\"maxLines\":1},\"valueLabels\":\"hide\",\"fittingFunction\":\"None\",\"axisTitlesVisibilitySettings\":{\"x\":false,\"yLeft\":false,\"yRight\":true},\"tickLabelsVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"labelsOrientation\":{\"x\":0,\"yLeft\":0,\"yRight\":0},\"gridlinesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"preferredSeriesType\":\"line\",\"layers\":[{\"layerId\":\"eb4e02de-8962-40fa-9e75-ff25862ca5f3\",\"accessors\":[\"cced3ff5-cfa3-4804-93be-c8d893114e93\",\"211c2cbb-033a-454b-b379-186b8d7b247e\",\"5ac14ba1-f6d4-4015-96d1-aeaa3ed63aec\",\"938252b1-14ec-4a64-b3e5-108e096f116b\",\"1e106c40-c845-4368-baaa-4057e1d29d92\"],\"position\":\"top\",\"seriesType\":\"line\",\"showGridlines\":false,\"layerType\":\"data\",\"colorMapping\":{\"assignments\":[],\"specialAssignments\":[{\"rule\":{\"type\":\"other\"},\"color\":{\"type\":\"loop\"},\"touched\":false}],\"paletteId\":\"eui_amsterdam_color_blind\",\"colorMode\":{\"type\":\"categorical\"}},\"xAccessor\":\"cb7bae9c-fdc5-44a8-8ee8-c0762595511c\"}]},\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filters\":[],\"datasourceStates\":{\"formBased\":{\"layers\":{\"eb4e02de-8962-40fa-9e75-ff25862ca5f3\":{\"columns\":{\"cb7bae9c-fdc5-44a8-8ee8-c0762595511c\":{\"label\":\"@timestamp\",\"dataType\":\"date\",\"operationType\":\"date_histogram\",\"sourceField\":\"@timestamp\",\"isBucketed\":true,\"scale\":\"interval\",\"params\":{\"interval\":\"auto\",\"includeEmptyRows\":true,\"dropPartials\":false}},\"cced3ff5-cfa3-4804-93be-c8d893114e93\":{\"label\":\"Gen 0\",\"dataType\":\"number\",\"operationType\":\"average\",\"sourceField\":\"process.runtime.dotnet.gc.heap.size\",\"isBucketed\":false,\"scale\":\"ratio\",\"filter\":{\"query\":\"labels.generation : \\\"gen0\\\" \",\"language\":\"kuery\"},\"params\":{\"format\":{\"id\":\"bytes\",\"params\":{\"decimals\":2}},\"emptyAsNull\":true},\"customLabel\":true},\"211c2cbb-033a-454b-b379-186b8d7b247e\":{\"label\":\"Gen 1\",\"dataType\":\"number\",\"operationType\":\"average\",\"sourceField\":\"process.runtime.dotnet.gc.heap.size\",\"isBucketed\":false,\"scale\":\"ratio\",\"filter\":{\"query\":\"labels.generation : \\\"gen1\\\" \",\"language\":\"kuery\"},\"params\":{\"emptyAsNull\":true,\"format\":{\"id\":\"bytes\",\"params\":{\"decimals\":2}}},\"customLabel\":true},\"5ac14ba1-f6d4-4015-96d1-aeaa3ed63aec\":{\"label\":\"Gen 2\",\"dataType\":\"number\",\"operationType\":\"average\",\"sourceField\":\"process.runtime.dotnet.gc.heap.size\",\"isBucketed\":false,\"scale\":\"ratio\",\"filter\":{\"query\":\"labels.generation : \\\"gen2\\\" \",\"language\":\"kuery\"},\"params\":{\"emptyAsNull\":true,\"format\":{\"id\":\"bytes\",\"params\":{\"decimals\":2}}},\"customLabel\":true},\"938252b1-14ec-4a64-b3e5-108e096f116b\":{\"label\":\"LOH\",\"dataType\":\"number\",\"operationType\":\"average\",\"sourceField\":\"process.runtime.dotnet.gc.heap.size\",\"isBucketed\":false,\"scale\":\"ratio\",\"filter\":{\"query\":\"labels.generation:\\\"loh\\\" \",\"language\":\"kuery\"},\"params\":{\"emptyAsNull\":true,\"format\":{\"id\":\"bytes\",\"params\":{\"decimals\":2}}},\"customLabel\":true},\"1e106c40-c845-4368-baaa-4057e1d29d92\":{\"label\":\"POH\",\"dataType\":\"number\",\"operationType\":\"median\",\"sourceField\":\"process.runtime.dotnet.gc.heap.size\",\"isBucketed\":false,\"scale\":\"ratio\",\"filter\":{\"query\":\"labels.generation : \\\"poh\\\" \",\"language\":\"kuery\"},\"params\":{\"emptyAsNull\":true,\"format\":{\"id\":\"bytes\",\"params\":{\"decimals\":2}}},\"customLabel\":true}},\"columnOrder\":[\"cb7bae9c-fdc5-44a8-8ee8-c0762595511c\",\"cced3ff5-cfa3-4804-93be-c8d893114e93\",\"211c2cbb-033a-454b-b379-186b8d7b247e\",\"5ac14ba1-f6d4-4015-96d1-aeaa3ed63aec\",\"938252b1-14ec-4a64-b3e5-108e096f116b\",\"1e106c40-c845-4368-baaa-4057e1d29d92\"],\"incompleteColumns\":{},\"sampling\":1,\"indexPatternId\":\"apm_static_data_view_id_default\"}},\"currentIndexPatternId\":\"apm_static_data_view_id_default\"},\"indexpattern\":{\"layers\":{}},\"textBased\":{\"layers\":{}}},\"internalReferences\":[],\"adHocDataViews\":{}}},\"enhancements\":{}},\"title\":\"Average GC heap size by generation\"}]","timeRestore":false,"title":".NET OpenTelemetry Runtime Metrics","version":1},"coreMigrationVersion":"8.8.0","created_at":"2024-05-17T13:46:01.942Z","id":"c65be603-2c73-4417-972c-033586a56102","managed":false,"references":[{"id":"apm_static_data_view_id_default","name":"ea9f86f0-ff73-4c92-9b93-41baebdcffab:indexpattern-datasource-layer-1ba88117-6e95-46e2-8667-e0bc15145182","type":"index-pattern"},{"id":"APM_STATIC_DATA_VIEW_ID","name":"d0991248-2fad-4f28-bedc-b8723bc45a81:indexpattern-datasource-layer-961b1efd-6f0d-41e4-a72b-5d66237d212b","type":"index-pattern"},{"id":"APM_STATIC_DATA_VIEW_ID","name":"0bf63f9e-8797-4249-85f7-9407c165f732:indexpattern-datasource-layer-eb4e02de-8962-40fa-9e75-ff25862ca5f3","type":"index-pattern"},{"id":"APM_STATIC_DATA_VIEW_ID","name":"controlGroup_2be66584-9de4-4a36-ba54-bfdd1b4ccfb4:optionsListDataView","type":"index-pattern"}],"type":"dashboard","typeMigrationVersion":"8.9.0","updated_at":"2024-05-17T13:46:01.942Z","version":"WzM0NTMsN10="}
\ No newline at end of file
From 014b956002fab12064e2ac729c09b1713ef8deac Mon Sep 17 00:00:00 2001
From: Anton Dosov
Date: Mon, 4 Nov 2024 15:16:11 +0100
Subject: [PATCH 010/101] Improve URL drilldown authoring experience (#197454)
## Summary
close https://github.com/elastic/kibana/issues/163642
close https://github.com/elastic/kibana/issues/163641
As part of fix-it-week I picked up some of existing URL drilldown
authoring issues hoping to improve it a bit with a low effort (we don't
want to spend to much time on it).
Current URL drilldown authoring experience is terrible mainly because
there is no proper validation while creating the drilldown as we don't
have the needed runtime context. In the initial version we had a preview
but it was very limited and used "dummy" context and in some cases got
in the way by blocking the "save" button for URLs that would have been
valid in runtime. We simply removed the preview and validaiton on some
point later, so you can create an URL drilldown only by trial and error.
This is still the case in this PR, but it slightly improve the
experience:
Firstly, **ONLY IN EDIT MODE** instead of hidding "invalid" drilldowns,
we're showing them now with an error. This helps to find broken
drilldowns and address issues. fixes
https://github.com/elastic/kibana/issues/163641
![Screenshot 2024-10-24 at 12 02
25](https://github.com/user-attachments/assets/2e33ad91-2425-417d-b44f-faff74fccbab)
This is far from ideal, but this is better from what we have now.
As for the error UI I wanted to use EuiIconTip, but it doesn't work well
when inside that context menu because tooltip is shown below the menu. I
didn't want to change zIndex as it might cause regressions in other
places, so I went for this inline error truncated after 3 lines and the
whole error is shown in native browser tooltip when hovered. The error
is also printed in console
In addition to that I've slightly improved the form editor experience
- Show simple non-blocking validation error (if URL is missing or the
pattern doesn't look like an URL)
- Add a help text about how to test and properly validate
This is again, not ideal, but slighltly better then before
---
.../ui_actions_enhanced/.eslintrc.json | 5 -
.../ui_actions_enhanced/common/types.ts | 3 +
.../components/action_wizard/test_data.tsx | 2 +
.../url_drilldown_collect_config/i18n.ts | 54 +++----
.../url_drilldown_collect_config.tsx | 29 +++-
.../public/drilldowns/url_drilldown/types.ts | 1 +
.../url_drilldown/url_validation.ts | 38 +++--
...illdown.test.ts => url_drilldown.test.tsx} | 130 ++++++++++++++---
.../public/lib/url_drilldown.tsx | 134 +++++++++++++-----
.../translations/translations/fr-FR.json | 7 +-
.../translations/translations/ja-JP.json | 7 +-
.../translations/translations/zh-CN.json | 7 +-
12 files changed, 291 insertions(+), 126 deletions(-)
delete mode 100644 src/plugins/ui_actions_enhanced/.eslintrc.json
rename x-pack/plugins/drilldowns/url_drilldown/public/lib/{url_drilldown.test.ts => url_drilldown.test.tsx} (80%)
diff --git a/src/plugins/ui_actions_enhanced/.eslintrc.json b/src/plugins/ui_actions_enhanced/.eslintrc.json
deleted file mode 100644
index 2aab6c2d9093b..0000000000000
--- a/src/plugins/ui_actions_enhanced/.eslintrc.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "rules": {
- "@typescript-eslint/consistent-type-definitions": 0
- }
-}
diff --git a/src/plugins/ui_actions_enhanced/common/types.ts b/src/plugins/ui_actions_enhanced/common/types.ts
index 5086d0e541e97..ff60a9370c576 100644
--- a/src/plugins/ui_actions_enhanced/common/types.ts
+++ b/src/plugins/ui_actions_enhanced/common/types.ts
@@ -11,6 +11,7 @@ import type { SerializableRecord } from '@kbn/utility-types';
export type BaseActionConfig = SerializableRecord;
+// eslint-disable-next-line @typescript-eslint/consistent-type-definitions
export type SerializedAction = {
readonly factoryId: string;
readonly name: string;
@@ -20,12 +21,14 @@ export type SerializedAction
/**
* Serialized representation of a triggers-action pair, used to persist in storage.
*/
+// eslint-disable-next-line @typescript-eslint/consistent-type-definitions
export type SerializedEvent = {
eventId: string;
triggers: string[];
action: SerializedAction;
};
+// eslint-disable-next-line @typescript-eslint/consistent-type-definitions
export type DynamicActionsState = {
events: SerializedEvent[];
};
diff --git a/src/plugins/ui_actions_enhanced/public/components/action_wizard/test_data.tsx b/src/plugins/ui_actions_enhanced/public/components/action_wizard/test_data.tsx
index 2e4fd27948b8e..cfe7784ec99fd 100644
--- a/src/plugins/ui_actions_enhanced/public/components/action_wizard/test_data.tsx
+++ b/src/plugins/ui_actions_enhanced/public/components/action_wizard/test_data.tsx
@@ -25,6 +25,7 @@ export const dashboards = [
{ id: 'dashboard2', title: 'Dashboard 2' },
];
+// eslint-disable-next-line @typescript-eslint/consistent-type-definitions
type DashboardDrilldownConfig = {
dashboardId?: string;
useCurrentFilters: boolean;
@@ -119,6 +120,7 @@ export const dashboardFactory = new ActionFactory(dashboardDrilldownActionFactor
getFeatureUsageStart: () => licensingMock.createStart().featureUsage,
});
+// eslint-disable-next-line @typescript-eslint/consistent-type-definitions
type UrlDrilldownConfig = {
url: string;
openInNewTab: boolean;
diff --git a/src/plugins/ui_actions_enhanced/public/drilldowns/url_drilldown/components/url_drilldown_collect_config/i18n.ts b/src/plugins/ui_actions_enhanced/public/drilldowns/url_drilldown/components/url_drilldown_collect_config/i18n.ts
index 2c49b497e0c75..d357897c32395 100644
--- a/src/plugins/ui_actions_enhanced/public/drilldowns/url_drilldown/components/url_drilldown_collect_config/i18n.ts
+++ b/src/plugins/ui_actions_enhanced/public/drilldowns/url_drilldown/components/url_drilldown_collect_config/i18n.ts
@@ -9,23 +9,6 @@
import { i18n } from '@kbn/i18n';
-export const txtUrlTemplatePlaceholder = i18n.translate(
- 'uiActionsEnhanced.drilldowns.urlDrilldownCollectConfig.urlTemplatePlaceholderText',
- {
- defaultMessage: 'Example: {exampleUrl}',
- values: {
- exampleUrl: 'https://www.my-url.com/?{{event.key}}={{event.value}}',
- },
- }
-);
-
-export const txtUrlPreviewHelpText = i18n.translate(
- 'uiActionsEnhanced.drilldowns.urlDrilldownCollectConfig.urlPreviewHelpText',
- {
- defaultMessage: `Please note that in preview '{{event.*}}' variables are substituted with dummy values.`,
- }
-);
-
export const txtUrlTemplateLabel = i18n.translate(
'uiActionsEnhanced.drilldowns.urlDrilldownCollectConfig.urlTemplateLabel',
{
@@ -33,24 +16,43 @@ export const txtUrlTemplateLabel = i18n.translate(
}
);
-export const txtUrlTemplateSyntaxHelpLinkText = i18n.translate(
- 'uiActionsEnhanced.drilldowns.urlDrilldownCollectConfig.urlTemplateSyntaxHelpLinkText',
+export const txtEmptyErrorMessage = i18n.translate(
+ 'uiActionsEnhanced.drilldowns.urlDrilldownCollectConfig.urlTemplateEmptyErrorMessage',
{
- defaultMessage: 'Syntax help',
+ defaultMessage: 'URL template is required.',
}
);
-export const txtUrlTemplatePreviewLabel = i18n.translate(
- 'uiActionsEnhanced.drilldowns.urlDrilldownCollectConfig.urlPreviewLabel',
+export const txtInvalidFormatErrorMessage = ({
+ error,
+ example,
+}: {
+ error: string;
+ example: string;
+}) =>
+ i18n.translate(
+ 'uiActionsEnhanced.drilldowns.urlDrilldownCollectConfig.urlTemplateInvalidFormatErrorMessage',
+ {
+ defaultMessage: '{error} Example: {example}',
+ values: {
+ error,
+ example,
+ },
+ }
+ );
+
+export const txtUrlTemplateSyntaxTestingHelpText = i18n.translate(
+ 'uiActionsEnhanced.drilldowns.urlDrilldownCollectConfig.urlTemplateSyntaxTestingHelpText',
{
- defaultMessage: 'URL preview:',
+ defaultMessage:
+ 'To validate and test the URL template, save the configuration and use this drilldown from the panel.',
}
);
-export const txtUrlTemplatePreviewLinkText = i18n.translate(
- 'uiActionsEnhanced.drilldowns.urlDrilldownCollectConfig.urlPreviewLinkText',
+export const txtUrlTemplateSyntaxHelpLinkText = i18n.translate(
+ 'uiActionsEnhanced.drilldowns.urlDrilldownCollectConfig.urlTemplateSyntaxHelpLinkText',
{
- defaultMessage: 'Preview',
+ defaultMessage: 'Syntax help',
}
);
diff --git a/src/plugins/ui_actions_enhanced/public/drilldowns/url_drilldown/components/url_drilldown_collect_config/url_drilldown_collect_config.tsx b/src/plugins/ui_actions_enhanced/public/drilldowns/url_drilldown/components/url_drilldown_collect_config/url_drilldown_collect_config.tsx
index 60b8cc33c178f..fd9e78c37d981 100644
--- a/src/plugins/ui_actions_enhanced/public/drilldowns/url_drilldown/components/url_drilldown_collect_config/url_drilldown_collect_config.tsx
+++ b/src/plugins/ui_actions_enhanced/public/drilldowns/url_drilldown/components/url_drilldown_collect_config/url_drilldown_collect_config.tsx
@@ -17,10 +17,14 @@ import {
txtUrlTemplateSyntaxHelpLinkText,
txtUrlTemplateLabel,
txtUrlTemplateAdditionalOptions,
+ txtEmptyErrorMessage,
+ txtInvalidFormatErrorMessage,
+ txtUrlTemplateSyntaxTestingHelpText,
} from './i18n';
import { VariablePopover } from '../variable_popover';
import { UrlDrilldownOptionsComponent } from './lazy';
import { DEFAULT_URL_DRILLDOWN_OPTIONS } from '../../constants';
+import { validateUrl } from '../../url_validation';
export interface UrlDrilldownCollectConfigProps {
config: UrlDrilldownConfig;
@@ -69,7 +73,16 @@ export const UrlDrilldownCollectConfig: React.FC
}
}
const isEmpty = !urlTemplate;
- const isInvalid = !isPristine && isEmpty;
+
+ const isValidUrlFormat = validateUrl(urlTemplate);
+ const isInvalid = !isPristine && (isEmpty || !isValidUrlFormat.isValid);
+
+ const invalidErrorMessage = isInvalid
+ ? isEmpty
+ ? txtEmptyErrorMessage
+ : txtInvalidFormatErrorMessage({ error: isValidUrlFormat.error!, example: exampleUrl })
+ : undefined;
+
const variablesDropdown = (
- {txtUrlTemplateSyntaxHelpLinkText}
-
- )
+ <>
+ {txtUrlTemplateSyntaxTestingHelpText}{' '}
+ {syntaxHelpDocsLink ? (
+
+ {txtUrlTemplateSyntaxHelpLinkText}
+
+ ) : null}
+ >
}
labelAppend={variablesDropdown}
>
diff --git a/src/plugins/ui_actions_enhanced/public/drilldowns/url_drilldown/types.ts b/src/plugins/ui_actions_enhanced/public/drilldowns/url_drilldown/types.ts
index 1deafe53db379..973fcb1c8ebbf 100644
--- a/src/plugins/ui_actions_enhanced/public/drilldowns/url_drilldown/types.ts
+++ b/src/plugins/ui_actions_enhanced/public/drilldowns/url_drilldown/types.ts
@@ -14,6 +14,7 @@ export type UrlDrilldownConfig = {
/**
* User-configurable options for URL drilldowns
*/
+// eslint-disable-next-line @typescript-eslint/consistent-type-definitions
export type UrlDrilldownOptions = {
openInNewTab: boolean;
encodeUrl: boolean;
diff --git a/src/plugins/ui_actions_enhanced/public/drilldowns/url_drilldown/url_validation.ts b/src/plugins/ui_actions_enhanced/public/drilldowns/url_drilldown/url_validation.ts
index e95c32df56595..d3c3db4772bec 100644
--- a/src/plugins/ui_actions_enhanced/public/drilldowns/url_drilldown/url_validation.ts
+++ b/src/plugins/ui_actions_enhanced/public/drilldowns/url_drilldown/url_validation.ts
@@ -14,23 +14,24 @@ import { compile } from './url_template';
const generalFormatError = i18n.translate(
'uiActionsEnhanced.drilldowns.urlDrilldownValidation.urlFormatGeneralErrorMessage',
{
- defaultMessage: 'Invalid format. Example: {exampleUrl}',
- values: {
- exampleUrl: 'https://www.my-url.com/?{{event.key}}={{event.value}}',
- },
+ defaultMessage: 'Invalid URL format.',
}
);
-const formatError = (message: string) =>
- i18n.translate('uiActionsEnhanced.drilldowns.urlDrilldownValidation.urlFormatErrorMessage', {
- defaultMessage: 'Invalid format: {message}',
+const compileError = (message: string) =>
+ i18n.translate('uiActionsEnhanced.drilldowns.urlDrilldownValidation.urlCompileErrorMessage', {
+ defaultMessage: 'The URL template is not valid in the given context. {message}.',
values: {
- message,
+ message: message.replaceAll('[object Object]', 'context'),
},
});
const SAFE_URL_PATTERN = /^(?:(?:https?|mailto):|[^&:/?#]*(?:[/?#]|$))/gi;
-export function validateUrl(url: string): { isValid: boolean; error?: string } {
+export function validateUrl(url: string): {
+ isValid: boolean;
+ error?: string;
+ invalidUrl?: string;
+} {
if (!url)
return {
isValid: false,
@@ -45,6 +46,7 @@ export function validateUrl(url: string): { isValid: boolean; error?: string } {
return {
isValid: false,
error: generalFormatError,
+ invalidUrl: url,
};
}
}
@@ -52,20 +54,32 @@ export function validateUrl(url: string): { isValid: boolean; error?: string } {
export async function validateUrlTemplate(
urlTemplate: UrlDrilldownConfig['url'],
scope: UrlDrilldownScope
-): Promise<{ isValid: boolean; error?: string }> {
+): Promise<{ isValid: boolean; error?: string; invalidUrl?: string }> {
if (!urlTemplate.template)
return {
isValid: false,
error: generalFormatError,
};
+ let compiledUrl: string;
+
+ try {
+ compiledUrl = await compile(urlTemplate.template, scope);
+ } catch (e) {
+ return {
+ isValid: false,
+ error: compileError(e.message),
+ invalidUrl: urlTemplate.template,
+ };
+ }
+
try {
- const compiledUrl = await compile(urlTemplate.template, scope);
return validateUrl(compiledUrl);
} catch (e) {
return {
isValid: false,
- error: formatError(e.message),
+ error: generalFormatError + ` ${e.message}.`,
+ invalidUrl: compiledUrl,
};
}
}
diff --git a/x-pack/plugins/drilldowns/url_drilldown/public/lib/url_drilldown.test.ts b/x-pack/plugins/drilldowns/url_drilldown/public/lib/url_drilldown.test.tsx
similarity index 80%
rename from x-pack/plugins/drilldowns/url_drilldown/public/lib/url_drilldown.test.ts
rename to x-pack/plugins/drilldowns/url_drilldown/public/lib/url_drilldown.test.tsx
index f4631ea96b937..8eefae138b6c3 100644
--- a/x-pack/plugins/drilldowns/url_drilldown/public/lib/url_drilldown.test.ts
+++ b/x-pack/plugins/drilldowns/url_drilldown/public/lib/url_drilldown.test.tsx
@@ -7,19 +7,20 @@
import { BehaviorSubject } from 'rxjs';
import { IExternalUrl } from '@kbn/core/public';
-import { UrlDrilldown, Config } from './url_drilldown';
+import { render, waitFor } from '@testing-library/react';
+import { Config, UrlDrilldown } from './url_drilldown';
import {
- ValueClickContext,
- VALUE_CLICK_TRIGGER,
- SELECT_RANGE_TRIGGER,
CONTEXT_MENU_TRIGGER,
+ SELECT_RANGE_TRIGGER,
+ VALUE_CLICK_TRIGGER,
+ ValueClickContext,
} from '@kbn/embeddable-plugin/public';
import { DatatableColumnType } from '@kbn/expressions-plugin/common';
-import { of } from '@kbn/kibana-utils-plugin/common';
import { createPoint, rowClickData } from './test/data';
import { ROW_CLICK_TRIGGER } from '@kbn/ui-actions-plugin/public';
import { settingsServiceMock } from '@kbn/core-ui-settings-browser-mocks';
import { themeServiceMock } from '@kbn/core-theme-browser-mocks';
+import React from 'react';
const mockDataPoints = [
{
@@ -61,6 +62,7 @@ const mockEmbeddableApi = {
filters$: new BehaviorSubject([]),
query$: new BehaviorSubject({ query: 'test', language: 'kuery' }),
timeRange$: new BehaviorSubject({ from: 'now-15m', to: 'now' }),
+ viewMode: new BehaviorSubject('edit'),
},
};
@@ -93,6 +95,20 @@ const createDrilldown = (isExternalUrlValid: boolean = true) => {
return drilldown;
};
+const renderActionMenuItem = async (
+ drilldown: UrlDrilldown,
+ config: Config,
+ context: ValueClickContext
+) => {
+ const { getByTestId } = render(
+
+ );
+ await waitFor(() => null); // wait for effects to complete
+ return {
+ getError: () => getByTestId('urlDrilldown-error'),
+ };
+};
+
describe('UrlDrilldown', () => {
const urlDrilldown = createDrilldown();
@@ -119,7 +135,73 @@ describe('UrlDrilldown', () => {
await expect(urlDrilldown.isCompatible(config, context)).rejects.toThrowError();
});
- test('compatible if url is valid', async () => {
+ test('compatible in edit mode if url is valid', async () => {
+ const config: Config = {
+ url: {
+ template: `https://elasti.co/?{{event.value}}&{{rison context.panel.query}}`,
+ },
+ openInNewTab: false,
+ encodeUrl: true,
+ };
+
+ const context: ValueClickContext = {
+ data: {
+ data: mockDataPoints,
+ },
+ embeddable: mockEmbeddableApi,
+ };
+
+ const result = urlDrilldown.isCompatible(config, context);
+ await expect(result).resolves.toBe(true);
+ });
+
+ test('compatible in edit mode if url is invalid', async () => {
+ const config: Config = {
+ url: {
+ template: `https://elasti.co/?{{event.value}}&{{rison context.panel.somethingFake}}`,
+ },
+ openInNewTab: false,
+ encodeUrl: true,
+ };
+
+ const context: ValueClickContext = {
+ data: {
+ data: mockDataPoints,
+ },
+ embeddable: mockEmbeddableApi,
+ };
+
+ await expect(urlDrilldown.isCompatible(config, context)).resolves.toBe(true);
+ });
+
+ test('compatible in edit mode if external URL is denied', async () => {
+ const drilldown1 = createDrilldown(true);
+ const drilldown2 = createDrilldown(false);
+ const config: Config = {
+ url: {
+ template: `https://elasti.co/?{{event.value}}&{{rison context.panel.query}}`,
+ },
+ openInNewTab: false,
+ encodeUrl: true,
+ };
+
+ const context: ValueClickContext = {
+ data: {
+ data: mockDataPoints,
+ },
+ embeddable: mockEmbeddableApi,
+ };
+
+ const result1 = await drilldown1.isCompatible(config, context);
+ const result2 = await drilldown2.isCompatible(config, context);
+
+ expect(result1).toBe(true);
+ expect(result2).toBe(true);
+ });
+
+ test('compatible in view mode if url is valid', async () => {
+ mockEmbeddableApi.parentApi.viewMode.next('view');
+
const config: Config = {
url: {
template: `https://elasti.co/?{{event.value}}&{{rison context.panel.query}}`,
@@ -139,7 +221,8 @@ describe('UrlDrilldown', () => {
await expect(result).resolves.toBe(true);
});
- test('not compatible if url is invalid', async () => {
+ test('not compatible in view mode if url is invalid', async () => {
+ mockEmbeddableApi.parentApi.viewMode.next('view');
const config: Config = {
url: {
template: `https://elasti.co/?{{event.value}}&{{rison context.panel.somethingFake}}`,
@@ -158,7 +241,8 @@ describe('UrlDrilldown', () => {
await expect(urlDrilldown.isCompatible(config, context)).resolves.toBe(false);
});
- test('not compatible if external URL is denied', async () => {
+ test('not compatible in view mode if external URL is denied', async () => {
+ mockEmbeddableApi.parentApi.viewMode.next('view');
const drilldown1 = createDrilldown(true);
const drilldown2 = createDrilldown(false);
const config: Config = {
@@ -184,7 +268,7 @@ describe('UrlDrilldown', () => {
});
});
- describe('getHref & execute', () => {
+ describe('getHref & execute & title', () => {
beforeEach(() => {
mockNavigateToUrl.mockReset();
});
@@ -210,6 +294,9 @@ describe('UrlDrilldown', () => {
await urlDrilldown.execute(config, context);
expect(mockNavigateToUrl).toBeCalledWith(url);
+
+ const { getError } = await renderActionMenuItem(urlDrilldown, config, context);
+ expect(() => getError()).toThrow();
});
test('invalid url', async () => {
@@ -228,12 +315,17 @@ describe('UrlDrilldown', () => {
embeddable: mockEmbeddableApi,
};
- await expect(urlDrilldown.getHref(config, context)).rejects.toThrowError();
- await expect(urlDrilldown.execute(config, context)).rejects.toThrowError();
+ await expect(urlDrilldown.getHref(config, context)).resolves.toBeUndefined();
+ await expect(urlDrilldown.execute(config, context)).resolves.toBeUndefined();
expect(mockNavigateToUrl).not.toBeCalled();
+
+ const { getError } = await renderActionMenuItem(urlDrilldown, config, context);
+ expect(getError()).toHaveTextContent(
+ `Error building URL: The URL template is not valid in the given context.`
+ );
});
- test('should throw on denied external URL', async () => {
+ test('should not throw on denied external URL', async () => {
const drilldown1 = createDrilldown(true);
const drilldown2 = createDrilldown(false);
const config: Config = {
@@ -257,17 +349,11 @@ describe('UrlDrilldown', () => {
expect(url).toMatchInlineSnapshot(`"https://elasti.co/?test&(language:kuery,query:test)"`);
expect(mockNavigateToUrl).toBeCalledWith(url);
- const [, error1] = await of(drilldown2.getHref(config, context));
- const [, error2] = await of(drilldown2.execute(config, context));
+ await expect(drilldown2.getHref(config, context)).resolves.toBeUndefined();
+ await expect(drilldown2.execute(config, context)).resolves.toBeUndefined();
- expect(error1).toBeInstanceOf(Error);
- expect(error1.message).toMatchInlineSnapshot(
- `"External URL [https://elasti.co/?test&(language:kuery,query:test)] was denied by ExternalUrl service. You can configure external URL policies using \\"externalUrl.policy\\" setting in kibana.yml."`
- );
- expect(error2).toBeInstanceOf(Error);
- expect(error2.message).toMatchInlineSnapshot(
- `"External URL [https://elasti.co/?test&(language:kuery,query:test)] was denied by ExternalUrl service. You can configure external URL policies using \\"externalUrl.policy\\" setting in kibana.yml."`
- );
+ const { getError } = await renderActionMenuItem(drilldown2, config, context);
+ expect(getError()).toHaveTextContent(`Error building URL: external URL was denied.`);
});
});
diff --git a/x-pack/plugins/drilldowns/url_drilldown/public/lib/url_drilldown.tsx b/x-pack/plugins/drilldowns/url_drilldown/public/lib/url_drilldown.tsx
index 1dd9c94ef329f..fed0542883611 100644
--- a/x-pack/plugins/drilldowns/url_drilldown/public/lib/url_drilldown.tsx
+++ b/x-pack/plugins/drilldowns/url_drilldown/public/lib/url_drilldown.tsx
@@ -7,7 +7,11 @@
import React from 'react';
import { IExternalUrl, ThemeServiceStart } from '@kbn/core/public';
-import type { EmbeddableApiContext } from '@kbn/presentation-publishing';
+import {
+ type EmbeddableApiContext,
+ getInheritedViewMode,
+ apiCanAccessViewMode,
+} from '@kbn/presentation-publishing';
import {
ChartActionContext,
CONTEXT_MENU_TRIGGER,
@@ -17,21 +21,23 @@ import {
import { IMAGE_CLICK_TRIGGER } from '@kbn/image-embeddable-plugin/public';
import { ActionExecutionContext, ROW_CLICK_TRIGGER } from '@kbn/ui-actions-plugin/public';
import type { CollectConfigProps as CollectConfigPropsBase } from '@kbn/kibana-utils-plugin/public';
-import { UrlTemplateEditorVariable, KibanaContextProvider } from '@kbn/kibana-react-plugin/public';
+import { KibanaContextProvider, UrlTemplateEditorVariable } from '@kbn/kibana-react-plugin/public';
import {
+ UiActionsEnhancedBaseActionFactoryContext as BaseActionFactoryContext,
UiActionsEnhancedDrilldownDefinition as Drilldown,
- UrlDrilldownGlobalScope,
- UrlDrilldownConfig,
UrlDrilldownCollectConfig,
- urlDrilldownValidateUrlTemplate,
urlDrilldownCompileUrl,
- UiActionsEnhancedBaseActionFactoryContext as BaseActionFactoryContext,
+ UrlDrilldownConfig,
+ UrlDrilldownGlobalScope,
+ urlDrilldownValidateUrlTemplate,
} from '@kbn/ui-actions-enhanced-plugin/public';
import type { SerializedAction } from '@kbn/ui-actions-enhanced-plugin/common/types';
import type { SettingsStart } from '@kbn/core-ui-settings-browser';
+import { EuiText, EuiTextBlockTruncate } from '@elastic/eui';
+import { i18n } from '@kbn/i18n';
import { txtUrlDrilldownDisplayName } from './i18n';
-import { getEventVariableList, getEventScopeValues } from './variables/event_variables';
-import { getContextVariableList, getContextScopeValues } from './variables/context_variables';
+import { getEventScopeValues, getEventVariableList } from './variables/event_variables';
+import { getContextScopeValues, getContextVariableList } from './variables/context_variables';
import { getGlobalVariableList } from './variables/global_variables';
interface UrlDrilldownDeps {
@@ -58,6 +64,13 @@ export type CollectConfigProps = CollectConfigPropsBase {
+ if (apiCanAccessViewMode(context.embeddable)) {
+ return getInheritedViewMode(context.embeddable);
+ }
+ throw new Error('Cannot access view mode');
+};
+
export class UrlDrilldown implements Drilldown {
public readonly id = URL_DRILLDOWN;
@@ -75,20 +88,39 @@ export class UrlDrilldown implements Drilldown;
}> = ({ config, context }) => {
const [title, setTitle] = React.useState(config.name);
+ const [error, setError] = React.useState();
React.useEffect(() => {
- let unmounted = false;
const variables = this.getRuntimeVariables(context);
urlDrilldownCompileUrl(title, variables, false)
.then((result) => {
- if (unmounted) return;
if (title !== result) setTitle(result);
})
.catch(() => {});
- return () => {
- unmounted = true;
- };
- });
- return <>{title}>;
+
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, []);
+
+ React.useEffect(() => {
+ this.buildUrl(config.config, context).catch((e) => {
+ setError(e.message);
+ });
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, []);
+
+ return (
+ /* title is used as a tooltip, EuiToolTip doesn't work in this context menu due to hacky zIndex */
+
+ {title}
+ {/* note: ideally we'd use EuiIconTip for the error, but it doesn't play well with this context menu*/}
+ {error ? (
+
+
+ {error}
+
+
+ ) : null}
+
+ );
};
public readonly euiIcon = 'link';
@@ -140,53 +172,81 @@ export class UrlDrilldown implements Drilldown {
- const scope = this.getRuntimeVariables(context);
- const { isValid, error } = await urlDrilldownValidateUrlTemplate(config.url, scope);
+ const viewMode = getViewMode(context);
- if (!isValid) {
- // eslint-disable-next-line no-console
- console.warn(
- `UrlDrilldown [${config.url.template}] is not valid. Error [${error}]. Skipping execution.`
- );
- return false;
+ if (viewMode === 'edit') {
+ // check if context is compatible by building the scope
+ const scope = this.getRuntimeVariables(context);
+ return !!scope;
}
- const url = await this.buildUrl(config, context);
- const validUrl = this.deps.externalUrl.validateUrl(url);
- if (!validUrl) {
+ try {
+ await this.buildUrl(config, context);
+ return true;
+ } catch (e) {
+ // eslint-disable-next-line no-console
+ console.warn(e);
return false;
}
-
- return true;
};
private async buildUrl(config: Config, context: ChartActionContext): Promise {
+ const scope = this.getRuntimeVariables(context);
+ const { isValid, error, invalidUrl } = await urlDrilldownValidateUrlTemplate(config.url, scope);
+
+ if (!isValid) {
+ const errorMessage = i18n.translate('xpack.urlDrilldown.invalidUrlErrorMessage', {
+ defaultMessage:
+ 'Error building URL: {error} Use drilldown editor to check your URL template. Invalid URL: {invalidUrl}',
+ values: {
+ error,
+ invalidUrl,
+ },
+ });
+ throw new Error(errorMessage);
+ }
+
const doEncode = config.encodeUrl ?? true;
+
const url = await urlDrilldownCompileUrl(
config.url.template,
this.getRuntimeVariables(context),
doEncode
);
+
+ const validUrl = this.deps.externalUrl.validateUrl(url);
+ if (!validUrl) {
+ const errorMessage = i18n.translate('xpack.urlDrilldown.invalidUrlErrorMessage', {
+ defaultMessage:
+ 'Error building URL: external URL was denied. Administrator can configure external URL policies using "externalUrl.policy" setting in kibana.yml. Invalid URL: {invalidUrl}',
+ values: {
+ invalidUrl: url,
+ },
+ });
+ throw new Error(errorMessage);
+ }
+
return url;
}
public readonly getHref = async (
config: Config,
context: ChartActionContext
- ): Promise => {
- const url = await this.buildUrl(config, context);
- const validUrl = this.deps.externalUrl.validateUrl(url);
- if (!validUrl) {
- throw new Error(
- `External URL [${url}] was denied by ExternalUrl service. ` +
- `You can configure external URL policies using "externalUrl.policy" setting in kibana.yml.`
- );
+ ): Promise => {
+ try {
+ const url = await this.buildUrl(config, context);
+ return url;
+ } catch (e) {
+ // eslint-disable-next-line no-console
+ console.warn(e);
+ return undefined;
}
- return url;
};
public readonly execute = async (config: Config, context: ChartActionContext) => {
const url = await this.getHref(config, context);
+ if (!url) return;
+
if (config.openInNewTab) {
window.open(url, '_blank', 'noopener');
} else {
diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json
index 1c432e420d2a3..6ad9ce5224290 100644
--- a/x-pack/plugins/translations/translations/fr-FR.json
+++ b/x-pack/plugins/translations/translations/fr-FR.json
@@ -7510,16 +7510,11 @@
"uiActionsEnhanced.drilldowns.urlDrilldownCollectConfig.encodeDescription": "Si elle est activée, l'URL sera précédée de l’encodage-pourcent comme caractère d'échappement",
"uiActionsEnhanced.drilldowns.urlDrilldownCollectConfig.encodeUrl": "Encoder l'URL",
"uiActionsEnhanced.drilldowns.urlDrilldownCollectConfig.openInNewTabLabel": "Ouvrir l'URL dans un nouvel onglet",
- "uiActionsEnhanced.drilldowns.urlDrilldownCollectConfig.urlPreviewHelpText": "Veuillez noter que dans l'aperçu, les variables '{{event.*}}' sont remplacées par des valeurs factices.",
- "uiActionsEnhanced.drilldowns.urlDrilldownCollectConfig.urlPreviewLabel": "Aperçu de l'URL :",
- "uiActionsEnhanced.drilldowns.urlDrilldownCollectConfig.urlPreviewLinkText": "Aperçu",
"uiActionsEnhanced.drilldowns.urlDrilldownCollectConfig.urlTemplateLabel": "Entrer l'URL",
- "uiActionsEnhanced.drilldowns.urlDrilldownCollectConfig.urlTemplatePlaceholderText": "Exemple : {exampleUrl}",
"uiActionsEnhanced.drilldowns.urlDrilldownCollectConfig.urlTemplateSyntaxHelpLinkText": "Aide pour la syntaxe",
"uiActionsEnhanced.drilldowns.urlDrilldownCollectConfig.urlTemplateVariablesFilterPlaceholderText": "Variables de filtre",
"uiActionsEnhanced.drilldowns.urlDrilldownCollectConfig.urlTemplateVariablesHelpLinkText": "Aide",
- "uiActionsEnhanced.drilldowns.urlDrilldownValidation.urlFormatErrorMessage": "Format non valide : {message}",
- "uiActionsEnhanced.drilldowns.urlDrilldownValidation.urlFormatGeneralErrorMessage": "Format non valide. Exemple : {exampleUrl}",
+ "uiActionsEnhanced.drilldowns.urlDrilldownValidation.urlFormatGeneralErrorMessage": "Format non valide.",
"unifiedDataTable.advancedDiffModesTooltip": "Les modes avancés offrent des capacités de diffraction améliorées, mais ils fonctionnent sur des documents bruts et ne prennent donc pas en charge le formatage des champs.",
"unifiedDataTable.clearSelection": "Effacer la sélection",
"unifiedDataTable.compareSelectedRowsButtonLabel": "Comparer",
diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json
index 1293fddd55857..7bedb932e478a 100644
--- a/x-pack/plugins/translations/translations/ja-JP.json
+++ b/x-pack/plugins/translations/translations/ja-JP.json
@@ -7264,16 +7264,11 @@
"uiActionsEnhanced.drilldowns.urlDrilldownCollectConfig.encodeDescription": "有効な場合、URLはパーセントエンコーディングを使用してエスケープされます",
"uiActionsEnhanced.drilldowns.urlDrilldownCollectConfig.encodeUrl": "URLのエンコード",
"uiActionsEnhanced.drilldowns.urlDrilldownCollectConfig.openInNewTabLabel": "URLを新しいタブで開く",
- "uiActionsEnhanced.drilldowns.urlDrilldownCollectConfig.urlPreviewHelpText": "プレビュー'{{event.*}}'では、変数にダミー値が代入されます。",
- "uiActionsEnhanced.drilldowns.urlDrilldownCollectConfig.urlPreviewLabel": "URLプレビュー:",
- "uiActionsEnhanced.drilldowns.urlDrilldownCollectConfig.urlPreviewLinkText": "プレビュー",
"uiActionsEnhanced.drilldowns.urlDrilldownCollectConfig.urlTemplateLabel": "URLを入力",
- "uiActionsEnhanced.drilldowns.urlDrilldownCollectConfig.urlTemplatePlaceholderText": "例:{exampleUrl}",
"uiActionsEnhanced.drilldowns.urlDrilldownCollectConfig.urlTemplateSyntaxHelpLinkText": "構文ヘルプ",
"uiActionsEnhanced.drilldowns.urlDrilldownCollectConfig.urlTemplateVariablesFilterPlaceholderText": "変数をフィルター",
"uiActionsEnhanced.drilldowns.urlDrilldownCollectConfig.urlTemplateVariablesHelpLinkText": "ヘルプ",
- "uiActionsEnhanced.drilldowns.urlDrilldownValidation.urlFormatErrorMessage": "無効な形式:{message}",
- "uiActionsEnhanced.drilldowns.urlDrilldownValidation.urlFormatGeneralErrorMessage": "無効なフォーマット。例:{exampleUrl}",
+ "uiActionsEnhanced.drilldowns.urlDrilldownValidation.urlFormatGeneralErrorMessage": "無効なフォーマット。",
"unifiedDataTable.advancedDiffModesTooltip": "高度なモードでは、拡張差異機能を利用できますが、未加工ドキュメントで動作するため、フィールド書式設定はサポートされません。",
"unifiedDataTable.clearSelection": "選択した項目をクリア",
"unifiedDataTable.compareSelectedRowsButtonLabel": "比較",
diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json
index c1df2f95c5384..638293ca54d15 100644
--- a/x-pack/plugins/translations/translations/zh-CN.json
+++ b/x-pack/plugins/translations/translations/zh-CN.json
@@ -7280,16 +7280,11 @@
"uiActionsEnhanced.drilldowns.urlDrilldownCollectConfig.encodeDescription": "如果启用,将使用百分比编码转义 URL",
"uiActionsEnhanced.drilldowns.urlDrilldownCollectConfig.encodeUrl": "编码 URL",
"uiActionsEnhanced.drilldowns.urlDrilldownCollectConfig.openInNewTabLabel": "在新选项卡中打开 URL",
- "uiActionsEnhanced.drilldowns.urlDrilldownCollectConfig.urlPreviewHelpText": "请注意,在预览模式下,'{{event.*}}' 变量将替换为虚拟值。",
- "uiActionsEnhanced.drilldowns.urlDrilldownCollectConfig.urlPreviewLabel": "URL 预览:",
- "uiActionsEnhanced.drilldowns.urlDrilldownCollectConfig.urlPreviewLinkText": "预览",
"uiActionsEnhanced.drilldowns.urlDrilldownCollectConfig.urlTemplateLabel": "输入 URL",
- "uiActionsEnhanced.drilldowns.urlDrilldownCollectConfig.urlTemplatePlaceholderText": "例如:{exampleUrl}",
"uiActionsEnhanced.drilldowns.urlDrilldownCollectConfig.urlTemplateSyntaxHelpLinkText": "语法帮助",
"uiActionsEnhanced.drilldowns.urlDrilldownCollectConfig.urlTemplateVariablesFilterPlaceholderText": "筛选变量",
"uiActionsEnhanced.drilldowns.urlDrilldownCollectConfig.urlTemplateVariablesHelpLinkText": "帮助",
- "uiActionsEnhanced.drilldowns.urlDrilldownValidation.urlFormatErrorMessage": "格式无效:{message}",
- "uiActionsEnhanced.drilldowns.urlDrilldownValidation.urlFormatGeneralErrorMessage": "格式无效。例如:{exampleUrl}",
+ "uiActionsEnhanced.drilldowns.urlDrilldownValidation.urlFormatGeneralErrorMessage": "格式无效。",
"unifiedDataTable.advancedDiffModesTooltip": "高级模式提供了增强型差异功能,但在原始文档上运行,因此不支持字段格式化。",
"unifiedDataTable.clearSelection": "清除所选内容",
"unifiedDataTable.compareSelectedRowsButtonLabel": "比较",
From 5721de74ce180905198e73ce917b0b109c6777c5 Mon Sep 17 00:00:00 2001
From: Tre
Date: Mon, 4 Nov 2024 14:18:40 +0000
Subject: [PATCH 011/101] [FTR][Ownership] Fixup test_serverless entries
(#195609)
## Summary
Changing lines from security-solution to other team, per request.
Contributes to: https://github.com/elastic/kibana/issues/194815
Addresses:
https://github.com/elastic/kibana/pull/194819/files/d4eb7a8b397e15357790ba32a0266e724d2b775b#r1792990254
---------
Co-authored-by: Elastic Machine
Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
---
.github/CODEOWNERS | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 10250b18541c8..bd91ee754d416 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -1146,8 +1146,12 @@ packages/kbn-monaco/src/esql @elastic/kibana-esql
#CC# /x-pack/plugins/reporting/ @elastic/appex-sharedux
#CC# /x-pack/plugins/security_solution_serverless/ @elastic/appex-sharedux
-### Observability Plugins
+# Observability UI
+/x-pack/test_serverless/api_integration/test_suites/observability/config.ts @elastic/observability-ui @elastic/appex-qa
+/x-pack/test_serverless/api_integration/test_suites/observability/index.ts @elastic/observability-ui
+
+### Observability Plugins
# Observability AI Assistant
x-pack/test/observability_ai_assistant_api_integration @elastic/obs-ai-assistant
@@ -1238,6 +1242,7 @@ x-pack/test_serverless/**/test_suites/observability/ai_assistant @elastic/obs-ai
/x-pack/test/accessibility/apps/group3/stack_monitoring.ts @elastic/stack-monitoring
# Fleet
+/x-pack/test_serverless/api_integration/test_suites/security/fleet @elastic/fleet
/x-pack/test/fleet_packages @elastic/fleet
/x-pack/test/fleet_api_integration @elastic/fleet
/x-pack/test/fleet_cypress @elastic/fleet
@@ -1514,8 +1519,6 @@ x-pack/plugins/cloud_integrations/cloud_full_story/server/config.ts @elastic/kib
/x-pack/test/rule_registry @elastic/response-ops @elastic/obs-ux-management-team
/x-pack/test/accessibility/apps/group3/rules_connectors.ts @elastic/response-ops
/x-pack/test/functional/es_archives/cases/default @elastic/response-ops
-/x-pack/test_serverless/api_integration/test_suites/observability/config.ts @elastic/response-ops
-/x-pack/test_serverless/api_integration/test_suites/observability/index.ts @elastic/response-ops
/x-pack/test_serverless/functional/page_objects/svl_triggers_actions_ui_page.ts @elastic/response-ops
/x-pack/test_serverless/functional/page_objects/svl_rule_details_ui_page.ts @elastic/response-ops
/x-pack/test_serverless/functional/page_objects/svl_oblt_overview_page.ts @elastic/response-ops
@@ -1619,6 +1622,7 @@ x-pack/test/api_integration/apis/management/index_management/inference_endpoints
# Security Solution
/x-pack/test/common/services/security_solution @elastic/security-solution
/x-pack/test/api_integration/services/security_solution_*.gen.ts @elastic/security-solution
+/x-pack/test_serverless/functional/test_suites/security/index.feature_flags.ts @elastic/security-solution
/x-pack/test/accessibility/apps/group3/security_solution.ts @elastic/security-solution
/x-pack/test_serverless/functional/test_suites/security/config.ts @elastic/security-solution @elastic/appex-qa
/x-pack/test_serverless/functional/test_suites/security/config.feature_flags.ts @elastic/security-solution
From d1171418dd7d8c7252ad34b6bb2e4ff505fb684d Mon Sep 17 00:00:00 2001
From: Marta Bondyra <4283304+mbondyra@users.noreply.github.com>
Date: Mon, 4 Nov 2024 15:25:07 +0100
Subject: [PATCH 012/101] [Lens] revert Select line chart by default if the
x-axis contains a timestamp (#198555)
Reverts https://github.com/elastic/kibana/pull/190786/files
---------
Co-authored-by: Marco Vettorello
---
.../lens/public/visualizations/xy/xy_suggestions.test.ts | 6 +++---
.../plugins/lens/public/visualizations/xy/xy_suggestions.ts | 3 ---
.../test/functional/apps/lens/group1/multiple_data_views.ts | 6 +++---
3 files changed, 6 insertions(+), 9 deletions(-)
diff --git a/x-pack/plugins/lens/public/visualizations/xy/xy_suggestions.test.ts b/x-pack/plugins/lens/public/visualizations/xy/xy_suggestions.test.ts
index 7ce86ed903065..113df3cf7622a 100644
--- a/x-pack/plugins/lens/public/visualizations/xy/xy_suggestions.test.ts
+++ b/x-pack/plugins/lens/public/visualizations/xy/xy_suggestions.test.ts
@@ -854,7 +854,7 @@ describe('xy_suggestions', () => {
expect((suggestions[0].state.layers[0] as XYDataLayerConfig).seriesType).toEqual('line');
});
- test('suggests line if changeType is initial and date column is involved', () => {
+ test('suggests bar if changeType is initial and date column is involved', () => {
const currentState: XYState = {
legend: { isVisible: true, position: 'bottom' },
valueLabels: 'hide',
@@ -885,8 +885,8 @@ describe('xy_suggestions', () => {
expect(suggestions).toHaveLength(1);
expect(suggestions[0].hide).toEqual(false);
- expect(suggestions[0].state.preferredSeriesType).toEqual('line');
- expect((suggestions[0].state.layers[0] as XYDataLayerConfig).seriesType).toEqual('line');
+ expect(suggestions[0].state.preferredSeriesType).toEqual('bar_stacked');
+ expect((suggestions[0].state.layers[0] as XYDataLayerConfig).seriesType).toEqual('bar_stacked');
});
test('makes a visible seriesType suggestion for unchanged table without split', () => {
diff --git a/x-pack/plugins/lens/public/visualizations/xy/xy_suggestions.ts b/x-pack/plugins/lens/public/visualizations/xy/xy_suggestions.ts
index 5efaf4d8c949e..f13bcc57e3c84 100644
--- a/x-pack/plugins/lens/public/visualizations/xy/xy_suggestions.ts
+++ b/x-pack/plugins/lens/public/visualizations/xy/xy_suggestions.ts
@@ -233,9 +233,6 @@ function getSuggestionsForLayer({
allowMixed,
};
- if (changeType === 'initial' && xValue?.operation.dataType === 'date') {
- return buildSuggestion({ ...options, seriesType: 'line' });
- }
// handles the simplest cases, acting as a chart switcher
if (!currentState && changeType === 'unchanged') {
// Chart switcher needs to include every chart type
diff --git a/x-pack/test/functional/apps/lens/group1/multiple_data_views.ts b/x-pack/test/functional/apps/lens/group1/multiple_data_views.ts
index d65b10d0056e1..0164aa745fc8e 100644
--- a/x-pack/test/functional/apps/lens/group1/multiple_data_views.ts
+++ b/x-pack/test/functional/apps/lens/group1/multiple_data_views.ts
@@ -103,13 +103,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
await testSubjects.click('fieldToggle-DistanceKilometers');
const data = await lens.getCurrentChartDebugState('xyVisChart');
- assertMatchesExpectedData(data, [expectedLogstashData, expectedFlightsData], 'lines');
+ assertMatchesExpectedData(data, [expectedLogstashData, expectedFlightsData]);
});
it('ignores global filters on layers using a data view without the filter field', async () => {
await filterBar.addFilter({ field: 'Carrier', operation: 'exists' });
const data = await lens.getCurrentChartDebugState('xyVisChart');
- assertMatchesExpectedData(data, [expectedLogstashData, expectedFlightsData], 'lines');
+ assertMatchesExpectedData(data, [expectedLogstashData, expectedFlightsData]);
await lens.save(visTitle);
});
@@ -120,7 +120,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
await visualize.openSavedVisualization(visTitle);
const data = await lens.getCurrentChartDebugState('xyVisChart');
- assertMatchesExpectedData(data, [expectedFlightsData], 'lines');
+ assertMatchesExpectedData(data, [expectedFlightsData]);
});
});
}
From 641d0e2d477955c60ccfa290ba5c10601c7f453a Mon Sep 17 00:00:00 2001
From: Jatin Kathuria
Date: Mon, 4 Nov 2024 15:39:32 +0100
Subject: [PATCH 013/101] [Security Solution] Revert `security_solution_common`
package which is unnecessary (#198294)
## Summary
This PR reverts https://github.com/elastic/kibana/pull/189633.
### Background
PR : https://github.com/elastic/kibana/pull/189633 had created a package
`security_solution_common` so that security components can be easily
used in Discover plugins.
But because of recent direction change, I have decided to revert that
change which mainly moved `flyout` code to the
`security_solution_common` package.
Most of the changes that you will see will be path changes replacing
`security_solution_common`.
## TL;DR
`security_solution_common` is being removed as the reason it was created
does not exists any more.
---------
Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
---
.github/CODEOWNERS | 1 -
package.json | 1 -
.../security_root_profile/profile.tsx | 8 ---
src/plugins/discover/tsconfig.json | 1 -
tsconfig.base.json | 2 -
.../security-solution/common/index.ts | 11 ----
.../security-solution/common/jest.config.js | 12 ----
.../security-solution/common/kibana.jsonc | 5 --
.../security-solution/common/package.json | 8 ---
.../common/src/cells/renderers/discover.ts | 24 -------
.../common/src/cells/renderers/get.ts | 9 ---
.../src/cells/renderers/host/button.test.tsx | 30 ---------
.../src/cells/renderers/host/button.tsx | 27 --------
.../common/src/cells/renderers/host/index.tsx | 9 ---
.../host/with_expandable_flyout.test.tsx | 54 ---------------
.../renderers/host/with_expandable_flyout.tsx | 66 -------------------
.../common/src/cells/renderers/index.ts | 8 ---
.../src/flyout/common/components/index.ts | 16 -----
.../common/src/flyout/index.tsx | 10 ---
.../src/flyout/panels/host/right/index.tsx | 37 -----------
.../common/src/flyout/panels/index.ts | 9 ---
.../common/src/flyout/panels/keys.ts | 8 ---
.../security-solution/common/tsconfig.json | 28 --------
.../misconfiguration_preview.tsx | 2 +-
.../vulnerabilities_preview.tsx | 2 +-
.../risk_summary_flyout/risk_summary.tsx | 4 +-
.../alert_reason/alert_reason.tsx | 2 +-
.../document_details/alert_reason/context.tsx | 3 +-
.../analyzer_panels/index.tsx | 2 +-
.../document_details/isolate_host/content.tsx | 2 +-
.../document_details/isolate_host/context.tsx | 3 +-
.../document_details/isolate_host/header.tsx | 2 +-
.../components/correlations_details.test.tsx | 2 +-
.../correlations_details_alerts_table.tsx | 2 +-
.../left/components/entities_details.test.tsx | 2 +-
.../left/components/host_details.test.tsx | 2 +-
.../left/components/host_details.tsx | 2 +-
.../left/components/investigation_guide.tsx | 2 +-
.../related_alerts_by_ancestry.test.tsx | 2 +-
...lated_alerts_by_same_source_event.test.tsx | 2 +-
.../related_alerts_by_session.test.tsx | 2 +-
.../left/components/related_cases.test.tsx | 2 +-
.../left/components/related_cases.tsx | 2 +-
.../components/suppressed_alerts.test.tsx | 2 +-
.../left/components/suppressed_alerts.tsx | 2 +-
.../threat_intelligence_details.tsx | 2 +-
.../left/components/user_details.test.tsx | 2 +-
.../left/components/user_details.tsx | 2 +-
.../flyout/document_details/left/content.tsx | 2 +-
.../flyout/document_details/left/header.tsx | 2 +-
.../flyout/document_details/left/test_ids.ts | 2 +-
.../document_details/preview/footer.tsx | 2 +-
.../right/components/alert_header_title.tsx | 2 +-
.../analyzer_preview_container.test.tsx | 3 +-
.../components/analyzer_preview_container.tsx | 2 +-
.../components/correlations_overview.test.tsx | 2 +-
.../components/correlations_overview.tsx | 2 +-
.../components/entities_overview.test.tsx | 2 +-
.../right/components/entities_overview.tsx | 2 +-
.../right/components/event_header_title.tsx | 2 +-
.../graph_preview_container.test.tsx | 3 +-
.../components/graph_preview_container.tsx | 2 +-
.../components/prevalence_overview.test.tsx | 7 +-
.../right/components/prevalence_overview.tsx | 2 +-
.../session_preview_container.test.tsx | 2 +-
.../components/session_preview_container.tsx | 2 +-
.../threat_intelligence_overview.test.tsx | 2 +-
.../threat_intelligence_overview.tsx | 2 +-
.../flyout/document_details/right/content.tsx | 2 +-
.../flyout/document_details/right/header.tsx | 3 +-
.../document_details/right/navigation.tsx | 2 +-
.../document_details/shared/context.tsx | 3 +-
.../shared/utils/tour_step_config.tsx | 2 +-
.../entity_details/host_preview/footer.tsx | 2 +-
.../entity_details/host_right/content.tsx | 2 +-
.../entity_details/host_right/header.tsx | 3 +-
.../entity_details/host_right/index.tsx | 3 +-
.../left_panel/left_panel_content.tsx | 2 +-
.../left_panel/left_panel_header.tsx | 2 +-
.../user_details_left/index.tsx | 2 +-
.../user_details_left/tabs/asset_document.tsx | 2 +-
.../entity_details/user_preview/footer.tsx | 2 +-
.../components/managed_user_accordion.tsx | 3 +-
.../entity_details/user_right/content.tsx | 2 +-
.../entity_details/user_right/header.tsx | 3 +-
.../entity_details/user_right/index.tsx | 5 +-
.../public/flyout/network_details/content.tsx | 2 +-
.../public/flyout/network_details/header.tsx | 3 +-
.../flyout/rule_details/preview/footer.tsx | 2 +-
.../flyout/rule_details/right/content.tsx | 2 +-
.../flyout/rule_details/right/header.tsx | 3 +-
.../flyout/rule_details/right/index.tsx | 4 +-
.../components/expandable_panel.stories.tsx | 0
.../components/expandable_panel.test.tsx | 2 +-
.../shared}/components/expandable_panel.tsx | 4 +-
.../shared}/components/flyout_body.test.tsx | 0
.../flyout/shared}/components/flyout_body.tsx | 0
.../components/flyout_error.stories.tsx | 0
.../shared}/components/flyout_error.test.tsx | 2 +-
.../shared}/components/flyout_error.tsx | 6 +-
.../shared}/components/flyout_footer.test.tsx | 0
.../shared}/components/flyout_footer.tsx | 0
.../shared}/components/flyout_header.test.tsx | 0
.../shared}/components/flyout_header.tsx | 0
.../components/flyout_header_tabs.test.tsx | 0
.../shared}/components/flyout_header_tabs.tsx | 0
.../components/flyout_loading.stories.tsx | 0
.../components/flyout_loading.test.tsx | 2 +-
.../shared}/components/flyout_loading.tsx | 2 +-
.../components/flyout_navigation.stories.tsx | 0
.../components/flyout_navigation.test.tsx | 50 ++++----------
.../shared}/components/flyout_navigation.tsx | 10 +--
.../components/flyout_title.stories.tsx | 0
.../shared}/components/flyout_title.test.tsx | 2 +-
.../shared}/components/flyout_title.tsx | 0
.../flyout/shared/components}/test_ids.ts | 2 +-
.../plugins/security_solution/tsconfig.json | 7 +-
.../translations/translations/fr-FR.json | 16 ++---
.../translations/translations/ja-JP.json | 16 ++---
.../translations/translations/zh-CN.json | 17 ++---
yarn.lock | 4 --
121 files changed, 143 insertions(+), 545 deletions(-)
delete mode 100644 x-pack/packages/security-solution/common/index.ts
delete mode 100644 x-pack/packages/security-solution/common/jest.config.js
delete mode 100644 x-pack/packages/security-solution/common/kibana.jsonc
delete mode 100644 x-pack/packages/security-solution/common/package.json
delete mode 100644 x-pack/packages/security-solution/common/src/cells/renderers/discover.ts
delete mode 100644 x-pack/packages/security-solution/common/src/cells/renderers/get.ts
delete mode 100644 x-pack/packages/security-solution/common/src/cells/renderers/host/button.test.tsx
delete mode 100644 x-pack/packages/security-solution/common/src/cells/renderers/host/button.tsx
delete mode 100644 x-pack/packages/security-solution/common/src/cells/renderers/host/index.tsx
delete mode 100644 x-pack/packages/security-solution/common/src/cells/renderers/host/with_expandable_flyout.test.tsx
delete mode 100644 x-pack/packages/security-solution/common/src/cells/renderers/host/with_expandable_flyout.tsx
delete mode 100644 x-pack/packages/security-solution/common/src/cells/renderers/index.ts
delete mode 100644 x-pack/packages/security-solution/common/src/flyout/common/components/index.ts
delete mode 100644 x-pack/packages/security-solution/common/src/flyout/index.tsx
delete mode 100644 x-pack/packages/security-solution/common/src/flyout/panels/host/right/index.tsx
delete mode 100644 x-pack/packages/security-solution/common/src/flyout/panels/index.ts
delete mode 100644 x-pack/packages/security-solution/common/src/flyout/panels/keys.ts
delete mode 100644 x-pack/packages/security-solution/common/tsconfig.json
rename x-pack/{packages/security-solution/common/src/flyout/common => plugins/security_solution/public/flyout/shared}/components/expandable_panel.stories.tsx (100%)
rename x-pack/{packages/security-solution/common/src/flyout/common => plugins/security_solution/public/flyout/shared}/components/expandable_panel.test.tsx (99%)
rename x-pack/{packages/security-solution/common/src/flyout/common => plugins/security_solution/public/flyout/shared}/components/expandable_panel.tsx (97%)
rename x-pack/{packages/security-solution/common/src/flyout/common => plugins/security_solution/public/flyout/shared}/components/flyout_body.test.tsx (100%)
rename x-pack/{packages/security-solution/common/src/flyout/common => plugins/security_solution/public/flyout/shared}/components/flyout_body.tsx (100%)
rename x-pack/{packages/security-solution/common/src/flyout/common => plugins/security_solution/public/flyout/shared}/components/flyout_error.stories.tsx (100%)
rename x-pack/{packages/security-solution/common/src/flyout/common => plugins/security_solution/public/flyout/shared}/components/flyout_error.test.tsx (94%)
rename x-pack/{packages/security-solution/common/src/flyout/common => plugins/security_solution/public/flyout/shared}/components/flyout_error.tsx (84%)
rename x-pack/{packages/security-solution/common/src/flyout/common => plugins/security_solution/public/flyout/shared}/components/flyout_footer.test.tsx (100%)
rename x-pack/{packages/security-solution/common/src/flyout/common => plugins/security_solution/public/flyout/shared}/components/flyout_footer.tsx (100%)
rename x-pack/{packages/security-solution/common/src/flyout/common => plugins/security_solution/public/flyout/shared}/components/flyout_header.test.tsx (100%)
rename x-pack/{packages/security-solution/common/src/flyout/common => plugins/security_solution/public/flyout/shared}/components/flyout_header.tsx (100%)
rename x-pack/{packages/security-solution/common/src/flyout/common => plugins/security_solution/public/flyout/shared}/components/flyout_header_tabs.test.tsx (100%)
rename x-pack/{packages/security-solution/common/src/flyout/common => plugins/security_solution/public/flyout/shared}/components/flyout_header_tabs.tsx (100%)
rename x-pack/{packages/security-solution/common/src/flyout/common => plugins/security_solution/public/flyout/shared}/components/flyout_loading.stories.tsx (100%)
rename x-pack/{packages/security-solution/common/src/flyout/common => plugins/security_solution/public/flyout/shared}/components/flyout_loading.test.tsx (94%)
rename x-pack/{packages/security-solution/common/src/flyout/common => plugins/security_solution/public/flyout/shared}/components/flyout_loading.tsx (94%)
rename x-pack/{packages/security-solution/common/src/flyout/common => plugins/security_solution/public/flyout/shared}/components/flyout_navigation.stories.tsx (100%)
rename x-pack/{packages/security-solution/common/src/flyout/common => plugins/security_solution/public/flyout/shared}/components/flyout_navigation.test.tsx (78%)
rename x-pack/{packages/security-solution/common/src/flyout/common => plugins/security_solution/public/flyout/shared}/components/flyout_navigation.tsx (91%)
rename x-pack/{packages/security-solution/common/src/flyout/common => plugins/security_solution/public/flyout/shared}/components/flyout_title.stories.tsx (100%)
rename x-pack/{packages/security-solution/common/src/flyout/common => plugins/security_solution/public/flyout/shared}/components/flyout_title.test.tsx (98%)
rename x-pack/{packages/security-solution/common/src/flyout/common => plugins/security_solution/public/flyout/shared}/components/flyout_title.tsx (100%)
rename x-pack/{packages/security-solution/common/src/flyout/common => plugins/security_solution/public/flyout/shared/components}/test_ids.ts (97%)
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index bd91ee754d416..0498e01164700 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -793,7 +793,6 @@ x-pack/packages/security/plugin_types_common @elastic/kibana-security
x-pack/packages/security/plugin_types_public @elastic/kibana-security
x-pack/packages/security/plugin_types_server @elastic/kibana-security
x-pack/packages/security/role_management_model @elastic/kibana-security
-x-pack/packages/security-solution/common @elastic/security-threat-hunting-investigations
x-pack/packages/security-solution/distribution_bar @elastic/kibana-cloud-security-posture
x-pack/plugins/security_solution_ess @elastic/security-solution
x-pack/packages/security-solution/features @elastic/security-threat-hunting-explore
diff --git a/package.json b/package.json
index 4a91266058ccb..110023e02c815 100644
--- a/package.json
+++ b/package.json
@@ -810,7 +810,6 @@
"@kbn/security-plugin-types-public": "link:x-pack/packages/security/plugin_types_public",
"@kbn/security-plugin-types-server": "link:x-pack/packages/security/plugin_types_server",
"@kbn/security-role-management-model": "link:x-pack/packages/security/role_management_model",
- "@kbn/security-solution-common": "link:x-pack/packages/security-solution/common",
"@kbn/security-solution-distribution-bar": "link:x-pack/packages/security-solution/distribution_bar",
"@kbn/security-solution-ess": "link:x-pack/plugins/security_solution_ess",
"@kbn/security-solution-features": "link:x-pack/packages/security-solution/features",
diff --git a/src/plugins/discover/public/context_awareness/profile_providers/security/security_root_profile/profile.tsx b/src/plugins/discover/public/context_awareness/profile_providers/security/security_root_profile/profile.tsx
index 238d29302a910..602879125a331 100644
--- a/src/plugins/discover/public/context_awareness/profile_providers/security/security_root_profile/profile.tsx
+++ b/src/plugins/discover/public/context_awareness/profile_providers/security/security_root_profile/profile.tsx
@@ -7,8 +7,6 @@
* License v3.0 only", or the "Server Side Public License, v 1".
*/
-import React from 'react';
-import { getDiscoverCellRenderer } from '@kbn/security-solution-common';
import { RootProfileProvider, SolutionType } from '../../../profiles';
import { ProfileProviderServices } from '../../profile_provider_services';
import { SecurityProfileProviderFactory } from '../types';
@@ -21,12 +19,6 @@ export const createSecurityRootProfileProvider: SecurityProfileProviderFactory<
profile: {
getCellRenderers: (prev) => (params) => ({
...prev(params),
- 'host.name': (props) => {
- const CellRenderer = getDiscoverCellRenderer({
- fieldName: 'host.name',
- });
- return ;
- },
}),
},
resolve: (params) => {
diff --git a/src/plugins/discover/tsconfig.json b/src/plugins/discover/tsconfig.json
index 197d323d7d221..72d5594ba40f0 100644
--- a/src/plugins/discover/tsconfig.json
+++ b/src/plugins/discover/tsconfig.json
@@ -95,7 +95,6 @@
"@kbn/presentation-containers",
"@kbn/observability-ai-assistant-plugin",
"@kbn/fields-metadata-plugin",
- "@kbn/security-solution-common",
"@kbn/logs-data-access-plugin",
"@kbn/core-lifecycle-browser",
"@kbn/discover-contextual-components",
diff --git a/tsconfig.base.json b/tsconfig.base.json
index 727cb930bc606..7b1bc834fcc28 100644
--- a/tsconfig.base.json
+++ b/tsconfig.base.json
@@ -1580,8 +1580,6 @@
"@kbn/security-plugin-types-server/*": ["x-pack/packages/security/plugin_types_server/*"],
"@kbn/security-role-management-model": ["x-pack/packages/security/role_management_model"],
"@kbn/security-role-management-model/*": ["x-pack/packages/security/role_management_model/*"],
- "@kbn/security-solution-common": ["x-pack/packages/security-solution/common"],
- "@kbn/security-solution-common/*": ["x-pack/packages/security-solution/common/*"],
"@kbn/security-solution-distribution-bar": ["x-pack/packages/security-solution/distribution_bar"],
"@kbn/security-solution-distribution-bar/*": ["x-pack/packages/security-solution/distribution_bar/*"],
"@kbn/security-solution-ess": ["x-pack/plugins/security_solution_ess"],
diff --git a/x-pack/packages/security-solution/common/index.ts b/x-pack/packages/security-solution/common/index.ts
deleted file mode 100644
index ba5d797648f13..0000000000000
--- a/x-pack/packages/security-solution/common/index.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
- * or more contributor license agreements. Licensed under the Elastic License
- * 2.0; you may not use this file except in compliance with the Elastic License
- * 2.0.
- */
-
-export { HostDetailsButton } from './src/cells/renderers/host';
-
-export * from './src/flyout';
-export * from './src/cells/renderers';
diff --git a/x-pack/packages/security-solution/common/jest.config.js b/x-pack/packages/security-solution/common/jest.config.js
deleted file mode 100644
index 7047e229df092..0000000000000
--- a/x-pack/packages/security-solution/common/jest.config.js
+++ /dev/null
@@ -1,12 +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.
- */
-
-module.exports = {
- preset: '@kbn/test',
- rootDir: '../../../..',
- roots: ['/x-pack/packages/security-solution/common'],
-};
diff --git a/x-pack/packages/security-solution/common/kibana.jsonc b/x-pack/packages/security-solution/common/kibana.jsonc
deleted file mode 100644
index 708feab435425..0000000000000
--- a/x-pack/packages/security-solution/common/kibana.jsonc
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "type": "shared-browser",
- "id": "@kbn/security-solution-common",
- "owner": "@elastic/security-threat-hunting-investigations"
-}
diff --git a/x-pack/packages/security-solution/common/package.json b/x-pack/packages/security-solution/common/package.json
deleted file mode 100644
index ce355e927c3df..0000000000000
--- a/x-pack/packages/security-solution/common/package.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "name": "@kbn/security-solution-common",
- "version": "1.0.0",
- "description": "security solution common components which can be used in multiple plugins such as custom discover and timeline",
- "license": "Elastic License 2.0",
- "private": true,
- "sideEffects": false
-}
\ No newline at end of file
diff --git a/x-pack/packages/security-solution/common/src/cells/renderers/discover.ts b/x-pack/packages/security-solution/common/src/cells/renderers/discover.ts
deleted file mode 100644
index 8d0393a3c6f2b..0000000000000
--- a/x-pack/packages/security-solution/common/src/cells/renderers/discover.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.
- */
-
-import { DataGridCellValueElementProps } from '@kbn/unified-data-table';
-import { ComponentType, PropsWithChildren } from 'react';
-import { HostCellWithFlyoutRenderer } from './host';
-
-export type DiscoverCellRenderer = ComponentType>;
-
-const RENDERERS: Record = {
- 'host.name': HostCellWithFlyoutRenderer,
-};
-
-interface GetRendererArgs {
- fieldName: string;
-}
-
-export const getDiscoverCellRenderer = ({ fieldName }: GetRendererArgs) => {
- return RENDERERS[fieldName];
-};
diff --git a/x-pack/packages/security-solution/common/src/cells/renderers/get.ts b/x-pack/packages/security-solution/common/src/cells/renderers/get.ts
deleted file mode 100644
index 3102c520e31db..0000000000000
--- a/x-pack/packages/security-solution/common/src/cells/renderers/get.ts
+++ /dev/null
@@ -1,9 +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 { getDiscoverCellRenderer } from './discover';
-export type { DiscoverCellRenderer } from './discover';
diff --git a/x-pack/packages/security-solution/common/src/cells/renderers/host/button.test.tsx b/x-pack/packages/security-solution/common/src/cells/renderers/host/button.test.tsx
deleted file mode 100644
index d49af3ed50518..0000000000000
--- a/x-pack/packages/security-solution/common/src/cells/renderers/host/button.test.tsx
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
- * or more contributor license agreements. Licensed under the Elastic License
- * 2.0; you may not use this file except in compliance with the Elastic License
- * 2.0.
- */
-
-import React from 'react';
-import { HostDetailsButton } from './button';
-import { render, screen } from '@testing-library/react';
-
-const onClickMock = jest.fn();
-const TestComponent = () => {
- return {'Test'} ;
-};
-
-describe('Host Button', () => {
- it('should render as button with link formatting', () => {
- render( );
- expect(screen.getByTestId('host-details-button')).toBeVisible();
- expect(screen.getByTestId('host-details-button')).toHaveAttribute('type', 'button');
- expect(screen.getByTestId('host-details-button')).toHaveClass('euiLink');
- });
-
- it('should perform onClick Correctly', () => {
- render( );
- screen.getByTestId('host-details-button').click();
- expect(onClickMock).toHaveBeenCalled();
- });
-});
diff --git a/x-pack/packages/security-solution/common/src/cells/renderers/host/button.tsx b/x-pack/packages/security-solution/common/src/cells/renderers/host/button.tsx
deleted file mode 100644
index b478ee17bf9d4..0000000000000
--- a/x-pack/packages/security-solution/common/src/cells/renderers/host/button.tsx
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
- * or more contributor license agreements. Licensed under the Elastic License
- * 2.0; you may not use this file except in compliance with the Elastic License
- * 2.0.
- */
-
-import React, { SyntheticEvent } from 'react';
-import { EuiLink } from '@elastic/eui';
-
-interface HostDetailsButtonProps {
- children?: React.ReactNode;
- onClick?: (e: SyntheticEvent) => void;
- title?: string;
-}
-
-export const HostDetailsButton: React.FC = ({
- children,
- onClick,
- title,
-}) => {
- return (
-
- {children}
-
- );
-};
diff --git a/x-pack/packages/security-solution/common/src/cells/renderers/host/index.tsx b/x-pack/packages/security-solution/common/src/cells/renderers/host/index.tsx
deleted file mode 100644
index a39397b233d60..0000000000000
--- a/x-pack/packages/security-solution/common/src/cells/renderers/host/index.tsx
+++ /dev/null
@@ -1,9 +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 * from './button';
-export * from './with_expandable_flyout';
diff --git a/x-pack/packages/security-solution/common/src/cells/renderers/host/with_expandable_flyout.test.tsx b/x-pack/packages/security-solution/common/src/cells/renderers/host/with_expandable_flyout.test.tsx
deleted file mode 100644
index 0568c656cdbe5..0000000000000
--- a/x-pack/packages/security-solution/common/src/cells/renderers/host/with_expandable_flyout.test.tsx
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
- * or more contributor license agreements. Licensed under the Elastic License
- * 2.0; you may not use this file except in compliance with the Elastic License
- * 2.0.
- */
-
-import {
- HostCellWithFlyoutRenderer,
- HostCellWithFlyoutRendererProps,
-} from './with_expandable_flyout';
-import React from 'react';
-import { render, screen } from '@testing-library/react';
-
-const renderTestComponents = (props?: Partial) => {
- const finalProps: HostCellWithFlyoutRendererProps = {
- rowIndex: 0,
- columnId: 'test',
- setCellProps: jest.fn(),
- isExpandable: false,
- isExpanded: true,
- isDetails: false,
- colIndex: 0,
- fieldFormats: {} as HostCellWithFlyoutRendererProps['fieldFormats'],
- dataView: {} as HostCellWithFlyoutRendererProps['dataView'],
- closePopover: jest.fn(),
- row: {
- id: '1',
- raw: {
- _source: {
- host: {
- name: 'test-host-name',
- },
- },
- },
- flattened: {
- 'host.name': 'test-host-name',
- },
- },
- ...props,
- };
- return render( );
-};
-
-describe('With Expandable Flyout', () => {
- it('should open Expandable Flyout on Click', () => {
- renderTestComponents();
-
- expect(screen.getByTestId('host-details-button')).toBeVisible();
- screen.getByTestId('host-details-button').click();
- expect(screen.getByTestId('host-name-flyout')).toBeVisible();
- expect(screen.getByText('Host Flyout Header - test-host-name')).toBeVisible();
- });
-});
diff --git a/x-pack/packages/security-solution/common/src/cells/renderers/host/with_expandable_flyout.tsx b/x-pack/packages/security-solution/common/src/cells/renderers/host/with_expandable_flyout.tsx
deleted file mode 100644
index 5e48d85b0384d..0000000000000
--- a/x-pack/packages/security-solution/common/src/cells/renderers/host/with_expandable_flyout.tsx
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
- * or more contributor license agreements. Licensed under the Elastic License
- * 2.0; you may not use this file except in compliance with the Elastic License
- * 2.0.
- */
-
-import React, { useCallback, useMemo } from 'react';
-import { getFieldValue } from '@kbn/discover-utils';
-import type { PropsWithChildren } from 'react';
-import type { DataGridCellValueElementProps } from '@kbn/unified-data-table';
-import {
- ExpandableFlyout,
- type ExpandableFlyoutProps,
- useExpandableFlyoutApi,
- withExpandableFlyoutProvider,
-} from '@kbn/expandable-flyout';
-import { HostRightPanel, HostRightPanelProps } from '../../../flyout/panels';
-import { HostDetailsButton } from './button';
-
-export type HostCellWithFlyoutRendererProps = PropsWithChildren;
-
-const HostCellWithFlyoutRendererComp = React.memo(function HostCellWithFlyoutRendererComp(
- props: HostCellWithFlyoutRendererProps
-) {
- const hostName = getFieldValue(props.row, 'host.name') as string;
-
- const { openFlyout } = useExpandableFlyoutApi();
-
- const onClick = useCallback(() => {
- openFlyout({
- right: {
- id: `host-panel-${hostName}-${props.rowIndex}`,
- params: {
- hostName,
- },
- } as HostRightPanelProps,
- });
- }, [openFlyout, hostName, props.rowIndex]);
-
- const panels: ExpandableFlyoutProps['registeredPanels'] = useMemo(() => {
- return [
- {
- key: `host-panel-${hostName}-${props.rowIndex}`,
- component: (panelProps) => {
- return ;
- },
- },
- ];
- }, [hostName, props.rowIndex]);
-
- return (
- <>
-
- {hostName}
- >
- );
-});
-
-export const HostCellWithFlyoutRenderer = withExpandableFlyoutProvider(
- HostCellWithFlyoutRendererComp
-);
diff --git a/x-pack/packages/security-solution/common/src/cells/renderers/index.ts b/x-pack/packages/security-solution/common/src/cells/renderers/index.ts
deleted file mode 100644
index e42333a710c04..0000000000000
--- a/x-pack/packages/security-solution/common/src/cells/renderers/index.ts
+++ /dev/null
@@ -1,8 +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 * from './get';
diff --git a/x-pack/packages/security-solution/common/src/flyout/common/components/index.ts b/x-pack/packages/security-solution/common/src/flyout/common/components/index.ts
deleted file mode 100644
index 4624ae2f70c55..0000000000000
--- a/x-pack/packages/security-solution/common/src/flyout/common/components/index.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
- * or more contributor license agreements. Licensed under the Elastic License
- * 2.0; you may not use this file except in compliance with the Elastic License
- * 2.0.
- */
-
-export { FlyoutFooter } from './flyout_footer';
-export { FlyoutError } from './flyout_error';
-export { FlyoutLoading } from './flyout_loading';
-export { FlyoutNavigation } from './flyout_navigation';
-export { FlyoutTitle } from './flyout_title';
-export { FlyoutBody } from './flyout_body';
-export { FlyoutHeader } from './flyout_header';
-export { FlyoutHeaderTabs } from './flyout_header_tabs';
-export { ExpandablePanel } from './expandable_panel';
diff --git a/x-pack/packages/security-solution/common/src/flyout/index.tsx b/x-pack/packages/security-solution/common/src/flyout/index.tsx
deleted file mode 100644
index e919538d497c6..0000000000000
--- a/x-pack/packages/security-solution/common/src/flyout/index.tsx
+++ /dev/null
@@ -1,10 +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 * from './common/components';
-export * from './common/test_ids';
-export { HostRightPanel } from './panels';
diff --git a/x-pack/packages/security-solution/common/src/flyout/panels/host/right/index.tsx b/x-pack/packages/security-solution/common/src/flyout/panels/host/right/index.tsx
deleted file mode 100644
index d877695f5b170..0000000000000
--- a/x-pack/packages/security-solution/common/src/flyout/panels/host/right/index.tsx
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
- * or more contributor license agreements. Licensed under the Elastic License
- * 2.0; you may not use this file except in compliance with the Elastic License
- * 2.0.
- */
-
-import { FlyoutPanelProps } from '@kbn/expandable-flyout';
-import React from 'react';
-import {
- FlyoutBody,
- FlyoutFooter,
- FlyoutHeader,
- FlyoutNavigation,
-} from '../../../common/components';
-// import { getEntityTableColumns } from './columns';
-// import type { BasicEntityData, EntityTableRows } from './types';
-
-export interface HostRightPanelParamProps extends Record {
- hostName: string;
-}
-
-export interface HostRightPanelProps extends FlyoutPanelProps {
- key: 'host';
- params: HostRightPanelParamProps;
-}
-
-export const HostRightPanel = (props: HostRightPanelParamProps) => {
- return (
- <>
-
- {`Host Flyout Header - ${props.hostName}`}
- {'Host Flyout'}
- {'Host Flyout Footer'}
- >
- );
-};
diff --git a/x-pack/packages/security-solution/common/src/flyout/panels/index.ts b/x-pack/packages/security-solution/common/src/flyout/panels/index.ts
deleted file mode 100644
index 3134078ebdf7f..0000000000000
--- a/x-pack/packages/security-solution/common/src/flyout/panels/index.ts
+++ /dev/null
@@ -1,9 +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 * from './host/right';
-export * from './keys';
diff --git a/x-pack/packages/security-solution/common/src/flyout/panels/keys.ts b/x-pack/packages/security-solution/common/src/flyout/panels/keys.ts
deleted file mode 100644
index fe06cf652d016..0000000000000
--- a/x-pack/packages/security-solution/common/src/flyout/panels/keys.ts
+++ /dev/null
@@ -1,8 +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 const HOST_PANEL = 'host-panel';
diff --git a/x-pack/packages/security-solution/common/tsconfig.json b/x-pack/packages/security-solution/common/tsconfig.json
deleted file mode 100644
index fb0d3709961d8..0000000000000
--- a/x-pack/packages/security-solution/common/tsconfig.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "extends": "../../../../tsconfig.base.json",
- "compilerOptions": {
- "outDir": "target/types",
- "types": [
- "jest",
- "node",
- "react",
- "@testing-library/jest-dom",
- "@testing-library/react",
- "@emotion/react/types/css-prop"
- ]
- },
- "include": [
- "**/*.ts",
- "**/*.tsx"
- ],
- "kbn_references": [
- "@kbn/unified-data-table",
- "@kbn/discover-utils",
- "@kbn/expandable-flyout",
- "@kbn/i18n",
- "@kbn/i18n-react"
- ],
- "exclude": [
- "target/**/*"
- ]
-}
diff --git a/x-pack/plugins/security_solution/public/cloud_security_posture/components/misconfiguration/misconfiguration_preview.tsx b/x-pack/plugins/security_solution/public/cloud_security_posture/components/misconfiguration/misconfiguration_preview.tsx
index 091179b40393c..b133e9db22050 100644
--- a/x-pack/plugins/security_solution/public/cloud_security_posture/components/misconfiguration/misconfiguration_preview.tsx
+++ b/x-pack/plugins/security_solution/public/cloud_security_posture/components/misconfiguration/misconfiguration_preview.tsx
@@ -13,7 +13,6 @@ import { FormattedMessage } from '@kbn/i18n-react';
import { DistributionBar } from '@kbn/security-solution-distribution-bar';
import { useMisconfigurationPreview } from '@kbn/cloud-security-posture/src/hooks/use_misconfiguration_preview';
import { i18n } from '@kbn/i18n';
-import { ExpandablePanel } from '@kbn/security-solution-common';
import { buildEntityFlyoutPreviewQuery } from '@kbn/cloud-security-posture-common';
import { useExpandableFlyoutApi } from '@kbn/expandable-flyout';
import { useVulnerabilitiesPreview } from '@kbn/cloud-security-posture/src/hooks/use_vulnerabilities_preview';
@@ -23,6 +22,7 @@ import {
ENTITY_FLYOUT_WITH_MISCONFIGURATION_VISIT,
uiMetricService,
} from '@kbn/cloud-security-posture-common/utils/ui_metrics';
+import { ExpandablePanel } from '../../../flyout/shared/components/expandable_panel';
import {
CspInsightLeftPanelSubTab,
EntityDetailsLeftPanelTab,
diff --git a/x-pack/plugins/security_solution/public/cloud_security_posture/components/vulnerabilities/vulnerabilities_preview.tsx b/x-pack/plugins/security_solution/public/cloud_security_posture/components/vulnerabilities/vulnerabilities_preview.tsx
index 2c162ba9db894..1caa740662ad8 100644
--- a/x-pack/plugins/security_solution/public/cloud_security_posture/components/vulnerabilities/vulnerabilities_preview.tsx
+++ b/x-pack/plugins/security_solution/public/cloud_security_posture/components/vulnerabilities/vulnerabilities_preview.tsx
@@ -12,7 +12,6 @@ import { EuiFlexGroup, EuiFlexItem, EuiSpacer, EuiText, useEuiTheme, EuiTitle }
import { FormattedMessage } from '@kbn/i18n-react';
import { DistributionBar } from '@kbn/security-solution-distribution-bar';
import { useVulnerabilitiesPreview } from '@kbn/cloud-security-posture/src/hooks/use_vulnerabilities_preview';
-import { ExpandablePanel } from '@kbn/security-solution-common';
import {
buildEntityFlyoutPreviewQuery,
getAbbreviatedNumber,
@@ -25,6 +24,7 @@ import {
uiMetricService,
} from '@kbn/cloud-security-posture-common/utils/ui_metrics';
import { METRIC_TYPE } from '@kbn/analytics';
+import { ExpandablePanel } from '../../../flyout/shared/components/expandable_panel';
import { EntityDetailsLeftPanelTab } from '../../../flyout/entity_details/shared/components/left_panel/left_panel_header';
import { HostDetailsPanelKey } from '../../../flyout/entity_details/host_details_left';
import { useRiskScore } from '../../../entity_analytics/api/hooks/use_risk_score';
diff --git a/x-pack/plugins/security_solution/public/entity_analytics/components/risk_summary_flyout/risk_summary.tsx b/x-pack/plugins/security_solution/public/entity_analytics/components/risk_summary_flyout/risk_summary.tsx
index fe32fad5b0070..2dec7d07ce6e8 100644
--- a/x-pack/plugins/security_solution/public/entity_analytics/components/risk_summary_flyout/risk_summary.tsx
+++ b/x-pack/plugins/security_solution/public/entity_analytics/components/risk_summary_flyout/risk_summary.tsx
@@ -22,16 +22,14 @@ import { FormattedMessage } from '@kbn/i18n-react';
import { euiThemeVars } from '@kbn/ui-theme';
import dateMath from '@kbn/datemath';
import { i18n } from '@kbn/i18n';
-import { ExpandablePanel } from '@kbn/security-solution-common';
import { useKibana } from '../../../common/lib/kibana/kibana_react';
-
import { EntityDetailsLeftPanelTab } from '../../../flyout/entity_details/shared/components/left_panel/left_panel_header';
-
import { InspectButton, InspectButtonContainer } from '../../../common/components/inspect';
import { ONE_WEEK_IN_HOURS } from '../../../flyout/entity_details/shared/constants';
import { FormattedRelativePreferenceDate } from '../../../common/components/formatted_date';
import { RiskScoreEntity } from '../../../../common/entity_analytics/risk_engine';
import { VisualizationEmbeddable } from '../../../common/components/visualization_actions/visualization_embeddable';
+import { ExpandablePanel } from '../../../flyout/shared/components/expandable_panel';
import type { RiskScoreState } from '../../api/hooks/use_risk_score';
import { getRiskScoreSummaryAttributes } from '../../lens_attributes/risk_score_summary';
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/alert_reason/alert_reason.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/alert_reason/alert_reason.tsx
index 03b84bc625552..62e6e9f492b2f 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/alert_reason/alert_reason.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/alert_reason/alert_reason.tsx
@@ -10,11 +10,11 @@ import { EuiPanel, EuiSpacer, EuiTitle } from '@elastic/eui';
import styled from '@emotion/styled';
import { euiThemeVars } from '@kbn/ui-theme';
import { FormattedMessage } from '@kbn/i18n-react';
-import { FlyoutError } from '@kbn/security-solution-common';
import { ALERT_REASON_BODY_TEST_ID } from './test_ids';
import { useAlertReasonPanelContext } from './context';
import { getRowRenderer } from '../../../timelines/components/timeline/body/renderers/get_row_renderer';
import { defaultRowRenderers } from '../../../timelines/components/timeline/body/renderers';
+import { FlyoutError } from '../../shared/components/flyout_error';
const ReasonContainerWrapper = styled.div`
overflow-x: auto;
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/alert_reason/context.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/alert_reason/context.tsx
index ec8096d60e72c..b67c9af508d96 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/alert_reason/context.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/alert_reason/context.tsx
@@ -7,8 +7,9 @@
import React, { createContext, memo, useContext, useMemo } from 'react';
import type { EcsSecurityExtension as Ecs } from '@kbn/securitysolution-ecs';
-import { FlyoutError, FlyoutLoading } from '@kbn/security-solution-common';
import { useEventDetails } from '../shared/hooks/use_event_details';
+import { FlyoutError } from '../../shared/components/flyout_error';
+import { FlyoutLoading } from '../../shared/components/flyout_loading';
import type { AlertReasonPanelProps } from '.';
export interface AlertReasonPanelContext {
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/analyzer_panels/index.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/analyzer_panels/index.tsx
index f61993da5321a..4fe9086c70a0e 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/analyzer_panels/index.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/analyzer_panels/index.tsx
@@ -7,13 +7,13 @@
import React, { useCallback } from 'react';
import type { FlyoutPanelProps } from '@kbn/expandable-flyout';
-import { FlyoutBody } from '@kbn/security-solution-common';
import { useExpandableFlyoutApi } from '@kbn/expandable-flyout';
import type { DocumentDetailsAnalyzerPanelKey } from '../shared/constants/panel_keys';
import { DetailsPanel } from '../../../resolver/view/details_panel';
import type { NodeEventOnClick } from '../../../resolver/view/panels/node_events_of_type';
import { DocumentDetailsPreviewPanelKey } from '../shared/constants/panel_keys';
import { ALERT_PREVIEW_BANNER, EVENT_PREVIEW_BANNER } from '../preview/constants';
+import { FlyoutBody } from '../../shared/components/flyout_body';
interface AnalyzerPanelProps extends Record {
/**
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/isolate_host/content.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/isolate_host/content.tsx
index 6ae172ca62556..0c9f05391d82a 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/isolate_host/content.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/isolate_host/content.tsx
@@ -8,7 +8,6 @@
import type { FC } from 'react';
import React, { useCallback } from 'react';
import { useExpandableFlyoutApi } from '@kbn/expandable-flyout';
-import { FlyoutBody } from '@kbn/security-solution-common';
import { DocumentDetailsRightPanelKey } from '../shared/constants/panel_keys';
import { useBasicDataFromDetailsData } from '../shared/hooks/use_basic_data_from_details_data';
import {
@@ -17,6 +16,7 @@ import {
} from '../../../common/components/endpoint/host_isolation';
import { useHostIsolation } from '../shared/hooks/use_host_isolation';
import { useIsolateHostPanelContext } from './context';
+import { FlyoutBody } from '../../shared/components/flyout_body';
/**
* Document details expandable flyout section content for the isolate host component, displaying the form or the success banner
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/isolate_host/context.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/isolate_host/context.tsx
index 6abfe1c4e8650..53393e2f8a79b 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/isolate_host/context.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/isolate_host/context.tsx
@@ -8,8 +8,9 @@
import type { TimelineEventsDetailsItem } from '@kbn/timelines-plugin/common';
import React, { createContext, memo, useContext, useMemo } from 'react';
-import { FlyoutError, FlyoutLoading } from '@kbn/security-solution-common';
import { useEventDetails } from '../shared/hooks/use_event_details';
+import { FlyoutError } from '../../shared/components/flyout_error';
+import { FlyoutLoading } from '../../shared/components/flyout_loading';
import type { IsolateHostPanelProps } from '.';
export interface IsolateHostPanelContext {
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/isolate_host/header.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/isolate_host/header.tsx
index d7effaea8016b..c0f4174cff95a 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/isolate_host/header.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/isolate_host/header.tsx
@@ -8,11 +8,11 @@
import { EuiFlexGroup, EuiFlexItem, EuiSpacer, EuiTitle } from '@elastic/eui';
import type { FC } from 'react';
import React from 'react';
-import { FlyoutHeader } from '@kbn/security-solution-common';
import { AgentTypeIntegration } from '../../../common/components/endpoint/agents/agent_type_integration';
import { useAlertResponseActionsSupport } from '../../../common/hooks/endpoint/use_alert_response_actions_support';
import { useIsolateHostPanelContext } from './context';
import { FLYOUT_HEADER_TITLE_TEST_ID } from './test_ids';
+import { FlyoutHeader } from '../../shared/components/flyout_header';
import { ISOLATE_HOST, UNISOLATE_HOST } from '../../../common/components/endpoint';
/**
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/correlations_details.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/correlations_details.test.tsx
index 859da37c4082d..b3b129a75c13d 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/correlations_details.test.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/correlations_details.test.tsx
@@ -28,7 +28,7 @@ import { useFetchRelatedAlertsBySameSourceEvent } from '../../shared/hooks/use_f
import { useFetchRelatedCases } from '../../shared/hooks/use_fetch_related_cases';
import { mockContextValue } from '../../shared/mocks/mock_context';
import { useTimelineDataFilters } from '../../../../timelines/containers/use_timeline_data_filters';
-import { EXPANDABLE_PANEL_HEADER_TITLE_TEXT_TEST_ID } from '@kbn/security-solution-common';
+import { EXPANDABLE_PANEL_HEADER_TITLE_TEXT_TEST_ID } from '../../../shared/components/test_ids';
jest.mock('react-router-dom', () => {
const actual = jest.requireActual('react-router-dom');
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/correlations_details_alerts_table.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/correlations_details_alerts_table.tsx
index 20663b56dab39..d8497ca984ea8 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/correlations_details_alerts_table.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/correlations_details_alerts_table.tsx
@@ -14,13 +14,13 @@ import { isRight } from 'fp-ts/lib/Either';
import { ALERT_REASON, ALERT_RULE_NAME } from '@kbn/rule-data-utils';
import { FormattedMessage } from '@kbn/i18n-react';
import { i18n } from '@kbn/i18n';
-import { ExpandablePanel } from '@kbn/security-solution-common';
import { useIsExperimentalFeatureEnabled } from '../../../../common/hooks/use_experimental_features';
import { CellTooltipWrapper } from '../../shared/components/cell_tooltip_wrapper';
import type { DataProvider } from '../../../../../common/types';
import { SeverityBadge } from '../../../../common/components/severity_badge';
import { usePaginatedAlerts } from '../hooks/use_paginated_alerts';
import { InvestigateInTimelineButton } from '../../../../common/components/event_details/investigate_in_timeline_button';
+import { ExpandablePanel } from '../../../shared/components/expandable_panel';
import { ACTION_INVESTIGATE_IN_TIMELINE } from '../../../../detections/components/alerts_table/translations';
import { getDataProvider } from '../../../../common/components/event_details/use_action_cell_data_provider';
import { AlertPreviewButton } from '../../../shared/components/alert_preview_button';
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/entities_details.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/entities_details.test.tsx
index 53936a5ed2e99..f79dfcec7b27b 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/entities_details.test.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/entities_details.test.tsx
@@ -13,7 +13,7 @@ import { TestProviders } from '../../../../common/mock';
import { EntitiesDetails } from './entities_details';
import { ENTITIES_DETAILS_TEST_ID, HOST_DETAILS_TEST_ID, USER_DETAILS_TEST_ID } from './test_ids';
import { mockContextValue } from '../../shared/mocks/mock_context';
-import { EXPANDABLE_PANEL_CONTENT_TEST_ID } from '@kbn/security-solution-common';
+import { EXPANDABLE_PANEL_CONTENT_TEST_ID } from '../../../shared/components/test_ids';
import type { Anomalies } from '../../../../common/components/ml/types';
import { useMlCapabilities } from '../../../../common/components/ml/hooks/use_ml_capabilities';
import { mockAnomalies } from '../../../../common/components/ml/mock';
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/host_details.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/host_details.test.tsx
index 895ff3d1b7697..4eeabe67979a5 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/host_details.test.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/host_details.test.tsx
@@ -30,7 +30,7 @@ import {
HOST_DETAILS_VULNERABILITIES_TEST_ID,
HOST_DETAILS_ALERT_COUNT_TEST_ID,
} from './test_ids';
-import { EXPANDABLE_PANEL_CONTENT_TEST_ID } from '@kbn/security-solution-common';
+import { EXPANDABLE_PANEL_CONTENT_TEST_ID } from '../../../shared/components/test_ids';
import { useRiskScore } from '../../../../entity_analytics/api/hooks/use_risk_score';
import { mockContextValue } from '../../shared/mocks/mock_context';
import { mockFlyoutApi } from '../../shared/mocks/mock_flyout_context';
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/host_details.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/host_details.tsx
index 122caa657b039..f5a1e112afa80 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/host_details.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/host_details.tsx
@@ -25,8 +25,8 @@ import type { EuiBasicTableColumn } from '@elastic/eui';
import { FormattedMessage } from '@kbn/i18n-react';
import { i18n } from '@kbn/i18n';
import { useExpandableFlyoutApi } from '@kbn/expandable-flyout';
-import { ExpandablePanel } from '@kbn/security-solution-common';
import { useIsExperimentalFeatureEnabled } from '../../../../common/hooks/use_experimental_features';
+import { ExpandablePanel } from '../../../shared/components/expandable_panel';
import type { RelatedUser } from '../../../../../common/search_strategy/security_solution/related_entities/related_users';
import type { RiskSeverity } from '../../../../../common/search_strategy';
import { HostOverview } from '../../../../overview/components/host_overview';
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/investigation_guide.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/investigation_guide.tsx
index f39057a16bfdb..ee1bebdb336ce 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/investigation_guide.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/investigation_guide.tsx
@@ -7,11 +7,11 @@
import React from 'react';
import { EuiLink } from '@elastic/eui';
import { FormattedMessage } from '@kbn/i18n-react';
-import { FlyoutLoading } from '@kbn/security-solution-common';
import { useInvestigationGuide } from '../../shared/hooks/use_investigation_guide';
import { useDocumentDetailsContext } from '../../shared/context';
import { INVESTIGATION_GUIDE_TEST_ID, INVESTIGATION_GUIDE_LOADING_TEST_ID } from './test_ids';
import { InvestigationGuideView } from './investigation_guide_view';
+import { FlyoutLoading } from '../../../shared/components/flyout_loading';
/**
* Investigation guide displayed in the left panel.
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/related_alerts_by_ancestry.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/related_alerts_by_ancestry.test.tsx
index 62012b72052bc..52468f0aedbb9 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/related_alerts_by_ancestry.test.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/related_alerts_by_ancestry.test.tsx
@@ -20,7 +20,7 @@ import {
EXPANDABLE_PANEL_HEADER_TITLE_ICON_TEST_ID,
EXPANDABLE_PANEL_HEADER_TITLE_TEXT_TEST_ID,
EXPANDABLE_PANEL_TOGGLE_ICON_TEST_ID,
-} from '@kbn/security-solution-common';
+} from '../../../shared/components/test_ids';
import { usePaginatedAlerts } from '../hooks/use_paginated_alerts';
jest.mock('../../shared/hooks/use_fetch_related_alerts_by_ancestry');
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/related_alerts_by_same_source_event.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/related_alerts_by_same_source_event.test.tsx
index f4244fcc59a04..3cf2d93896bc3 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/related_alerts_by_same_source_event.test.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/related_alerts_by_same_source_event.test.tsx
@@ -20,7 +20,7 @@ import {
EXPANDABLE_PANEL_HEADER_TITLE_ICON_TEST_ID,
EXPANDABLE_PANEL_HEADER_TITLE_TEXT_TEST_ID,
EXPANDABLE_PANEL_TOGGLE_ICON_TEST_ID,
-} from '@kbn/security-solution-common';
+} from '../../../shared/components/test_ids';
import { usePaginatedAlerts } from '../hooks/use_paginated_alerts';
jest.mock('../../shared/hooks/use_fetch_related_alerts_by_same_source_event');
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/related_alerts_by_session.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/related_alerts_by_session.test.tsx
index 54df7e8924f68..0120f462b9ac5 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/related_alerts_by_session.test.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/related_alerts_by_session.test.tsx
@@ -21,7 +21,7 @@ import {
EXPANDABLE_PANEL_HEADER_TITLE_ICON_TEST_ID,
EXPANDABLE_PANEL_HEADER_TITLE_TEXT_TEST_ID,
EXPANDABLE_PANEL_TOGGLE_ICON_TEST_ID,
-} from '@kbn/security-solution-common';
+} from '../../../shared/components/test_ids';
jest.mock('../../shared/hooks/use_fetch_related_alerts_by_session');
jest.mock('../hooks/use_paginated_alerts');
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/related_cases.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/related_cases.test.tsx
index 4d90cc7f56133..db9eb7bdfb3ae 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/related_cases.test.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/related_cases.test.tsx
@@ -18,7 +18,7 @@ import {
EXPANDABLE_PANEL_HEADER_TITLE_ICON_TEST_ID,
EXPANDABLE_PANEL_HEADER_TITLE_TEXT_TEST_ID,
EXPANDABLE_PANEL_TOGGLE_ICON_TEST_ID,
-} from '@kbn/security-solution-common';
+} from '../../../shared/components/test_ids';
jest.mock('../../shared/hooks/use_fetch_related_cases');
jest.mock('../../../../common/components/links', () => ({
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/related_cases.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/related_cases.tsx
index 8e00e0e65478b..13df33a2deb1b 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/related_cases.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/related_cases.tsx
@@ -10,7 +10,6 @@ import type { EuiBasicTableColumn } from '@elastic/eui';
import { EuiInMemoryTable } from '@elastic/eui';
import type { RelatedCase } from '@kbn/cases-plugin/common';
import { FormattedMessage } from '@kbn/i18n-react';
-import { ExpandablePanel } from '@kbn/security-solution-common';
import { CellTooltipWrapper } from '../../shared/components/cell_tooltip_wrapper';
import { CaseDetailsLink } from '../../../../common/components/links';
import {
@@ -18,6 +17,7 @@ import {
CORRELATIONS_DETAILS_CASES_SECTION_TEST_ID,
} from './test_ids';
import { useFetchRelatedCases } from '../../shared/hooks/use_fetch_related_cases';
+import { ExpandablePanel } from '../../../shared/components/expandable_panel';
const ICON = 'warning';
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/suppressed_alerts.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/suppressed_alerts.test.tsx
index a97a601f082dd..3b73199494187 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/suppressed_alerts.test.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/suppressed_alerts.test.tsx
@@ -17,7 +17,7 @@ import {
EXPANDABLE_PANEL_HEADER_TITLE_ICON_TEST_ID,
EXPANDABLE_PANEL_HEADER_TITLE_TEXT_TEST_ID,
EXPANDABLE_PANEL_TOGGLE_ICON_TEST_ID,
-} from '@kbn/security-solution-common';
+} from '../../../shared/components/test_ids';
import { DocumentDetailsContext } from '../../shared/context';
import { mockContextValue } from '../../shared/mocks/mock_context';
import { isSuppressionRuleInGA } from '../../../../../common/detection_engine/utils';
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/suppressed_alerts.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/suppressed_alerts.tsx
index 2c24b5c595c52..c12c62733f4db 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/suppressed_alerts.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/suppressed_alerts.tsx
@@ -12,8 +12,8 @@ import { ALERT_RULE_TYPE } from '@kbn/rule-data-utils';
import { EuiBetaBadge, EuiFlexItem, EuiFlexGroup } from '@elastic/eui';
import { FormattedMessage } from '@kbn/i18n-react';
import { i18n } from '@kbn/i18n';
-import { ExpandablePanel } from '@kbn/security-solution-common';
import type { Type } from '@kbn/securitysolution-io-ts-alerting-types';
+import { ExpandablePanel } from '../../../shared/components/expandable_panel';
import {
CORRELATIONS_DETAILS_SUPPRESSED_ALERTS_SECTION_TEST_ID,
SUPPRESSED_ALERTS_SECTION_TECHNICAL_PREVIEW_TEST_ID,
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_intelligence_details.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_intelligence_details.tsx
index 6ac43fbe5cd31..f473ae2c3262b 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_intelligence_details.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_intelligence_details.tsx
@@ -9,7 +9,6 @@ import React, { memo } from 'react';
import { EuiHorizontalRule, EuiSpacer } from '@elastic/eui';
import isEmpty from 'lodash/isEmpty';
import { groupBy } from 'lodash';
-import { FlyoutLoading } from '@kbn/security-solution-common';
import { EnrichmentSection } from './threat_details_view_enrichment_section';
import { ENRICHMENT_TYPES } from '../../../../../common/cti/constants';
import { EnrichmentRangePicker } from './threat_intelligence_view_enrichment_range_picker';
@@ -20,6 +19,7 @@ import {
THREAT_INTELLIGENCE_ENRICHMENTS_TEST_ID,
THREAT_INTELLIGENCE_MATCHES_TEST_ID,
} from './test_ids';
+import { FlyoutLoading } from '../../../shared/components/flyout_loading';
export const THREAT_INTELLIGENCE_TAB_ID = 'threatIntelligence';
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/user_details.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/user_details.test.tsx
index d4150c01d06a6..966253b3d27ed 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/user_details.test.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/user_details.test.tsx
@@ -28,7 +28,7 @@ import {
USER_DETAILS_MISCONFIGURATIONS_TEST_ID,
USER_DETAILS_ALERT_COUNT_TEST_ID,
} from './test_ids';
-import { EXPANDABLE_PANEL_CONTENT_TEST_ID } from '@kbn/security-solution-common';
+import { EXPANDABLE_PANEL_CONTENT_TEST_ID } from '../../../shared/components/test_ids';
import { useRiskScore } from '../../../../entity_analytics/api/hooks/use_risk_score';
import { mockContextValue } from '../../shared/mocks/mock_context';
import { mockFlyoutApi } from '../../shared/mocks/mock_flyout_context';
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/user_details.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/user_details.tsx
index c90d11f4b8bc2..ed406d3b8c679 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/user_details.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/user_details.tsx
@@ -25,8 +25,8 @@ import type { EuiBasicTableColumn } from '@elastic/eui';
import { FormattedMessage } from '@kbn/i18n-react';
import { i18n } from '@kbn/i18n';
import { useExpandableFlyoutApi } from '@kbn/expandable-flyout';
-import { ExpandablePanel } from '@kbn/security-solution-common';
import { useIsExperimentalFeatureEnabled } from '../../../../common/hooks/use_experimental_features';
+import { ExpandablePanel } from '../../../shared/components/expandable_panel';
import type { RelatedHost } from '../../../../../common/search_strategy/security_solution/related_entities/related_hosts';
import type { RiskSeverity } from '../../../../../common/search_strategy';
import { UserOverview } from '../../../../overview/components/user_overview';
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/left/content.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/content.tsx
index 226765e6c4e37..53d2efe883397 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/left/content.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/content.tsx
@@ -9,9 +9,9 @@ import { useEuiBackgroundColor } from '@elastic/eui';
import type { FC } from 'react';
import React, { useMemo } from 'react';
import { css } from '@emotion/react';
-import { FlyoutBody } from '@kbn/security-solution-common';
import type { LeftPanelPaths } from '.';
import type { LeftPanelTabType } from './tabs';
+import { FlyoutBody } from '../../shared/components/flyout_body';
export interface PanelContentProps {
/**
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/left/header.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/header.tsx
index f276ccca842be..2b61a97577e06 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/left/header.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/header.tsx
@@ -9,8 +9,8 @@ import { EuiTab, EuiTabs, useEuiBackgroundColor } from '@elastic/eui';
import type { FC } from 'react';
import React, { memo } from 'react';
import { css } from '@emotion/react';
-import { FlyoutHeader } from '@kbn/security-solution-common';
import type { LeftPanelPaths } from '.';
+import { FlyoutHeader } from '../../shared/components/flyout_header';
import type { LeftPanelTabType } from './tabs';
import { getField } from '../shared/utils';
import { EventKind } from '../shared/constants/event_kinds';
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/left/test_ids.ts b/x-pack/plugins/security_solution/public/flyout/document_details/left/test_ids.ts
index 4e2c1be90b01c..9f5eeb035786c 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/left/test_ids.ts
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/test_ids.ts
@@ -5,7 +5,7 @@
* 2.0.
*/
-import { PREFIX } from '@kbn/security-solution-common';
+import { PREFIX } from '../../shared/test_ids';
export const VISUALIZE_TAB_TEST_ID = `${PREFIX}VisualizeTab` as const;
export const INSIGHTS_TAB_TEST_ID = `${PREFIX}InsightsTab` as const;
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/preview/footer.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/preview/footer.tsx
index f437c9e77a158..0201332888675 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/preview/footer.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/preview/footer.tsx
@@ -9,9 +9,9 @@ import { EuiLink, EuiFlexGroup, EuiFlexItem } from '@elastic/eui';
import React, { useCallback, useMemo } from 'react';
import { i18n } from '@kbn/i18n';
import { useExpandableFlyoutApi } from '@kbn/expandable-flyout';
-import { FlyoutFooter } from '@kbn/security-solution-common';
import { getField } from '../shared/utils';
import { EventKind } from '../shared/constants/event_kinds';
+import { FlyoutFooter } from '../../shared/components/flyout_footer';
import { DocumentDetailsRightPanelKey } from '../shared/constants/panel_keys';
import { useDocumentDetailsContext } from '../shared/context';
import { PREVIEW_FOOTER_TEST_ID, PREVIEW_FOOTER_LINK_TEST_ID } from './test_ids';
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/right/components/alert_header_title.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/alert_header_title.tsx
index 931da6e8e57c8..cc7ef14585833 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/right/components/alert_header_title.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/alert_header_title.tsx
@@ -9,7 +9,6 @@ import React, { memo, useCallback, useMemo } from 'react';
import { EuiFlexGroup, EuiFlexItem, EuiSpacer, EuiLink } from '@elastic/eui';
import { ALERT_WORKFLOW_ASSIGNEE_IDS } from '@kbn/rule-data-utils';
import { i18n } from '@kbn/i18n';
-import { FlyoutTitle } from '@kbn/security-solution-common';
import { useIsExperimentalFeatureEnabled } from '../../../../common/hooks/use_experimental_features';
import { Notes } from './notes';
import { useRuleDetailsLink } from '../../shared/hooks/use_rule_details_link';
@@ -22,6 +21,7 @@ import { useDocumentDetailsContext } from '../../shared/context';
import { PreferenceFormattedDate } from '../../../../common/components/formatted_date';
import { FLYOUT_ALERT_HEADER_TITLE_TEST_ID, ALERT_SUMMARY_PANEL_TEST_ID } from './test_ids';
import { Assignees } from './assignees';
+import { FlyoutTitle } from '../../../shared/components/flyout_title';
// minWidth for each block, allows to switch for a 1 row 4 blocks to 2 rows with 2 block each
const blockStyles = {
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/right/components/analyzer_preview_container.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/analyzer_preview_container.test.tsx
index f9179cecc6b5a..3e841da34a4fa 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/right/components/analyzer_preview_container.test.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/analyzer_preview_container.test.tsx
@@ -21,7 +21,8 @@ import {
EXPANDABLE_PANEL_HEADER_TITLE_LINK_TEST_ID,
EXPANDABLE_PANEL_HEADER_TITLE_TEXT_TEST_ID,
EXPANDABLE_PANEL_TOGGLE_ICON_TEST_ID,
-} from '@kbn/security-solution-common';
+} from '../../../shared/components/test_ids';
+
import { useInvestigateInTimeline } from '../../../../detections/components/alerts_table/timeline_actions/use_investigate_in_timeline';
jest.mock(
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/right/components/analyzer_preview_container.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/analyzer_preview_container.tsx
index 6896f15ca88cb..286394d16aadc 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/right/components/analyzer_preview_container.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/analyzer_preview_container.tsx
@@ -10,7 +10,6 @@ import { useDispatch } from 'react-redux';
import { TimelineTabs } from '@kbn/securitysolution-data-table';
import { EuiLink, EuiMark } from '@elastic/eui';
import { FormattedMessage } from '@kbn/i18n-react';
-import { ExpandablePanel } from '@kbn/security-solution-common';
import { useUiSetting$ } from '@kbn/kibana-react-plugin/public';
import { ENABLE_VISUALIZATIONS_IN_FLYOUT_SETTING } from '../../../../../common/constants';
import { useStartTransaction } from '../../../../common/lib/apm/use_start_transaction';
@@ -23,6 +22,7 @@ import { useIsInvestigateInResolverActionEnabled } from '../../../../detections/
import { AnalyzerPreview } from './analyzer_preview';
import { ANALYZER_PREVIEW_TEST_ID } from './test_ids';
import { useNavigateToAnalyzer } from '../../shared/hooks/use_navigate_to_analyzer';
+import { ExpandablePanel } from '../../../shared/components/expandable_panel';
const timelineId = 'timeline-1';
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/right/components/correlations_overview.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/correlations_overview.test.tsx
index 71292b73a68e0..c9d8606cf9343 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/right/components/correlations_overview.test.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/correlations_overview.test.tsx
@@ -40,7 +40,7 @@ import {
EXPANDABLE_PANEL_HEADER_TITLE_LINK_TEST_ID,
EXPANDABLE_PANEL_HEADER_TITLE_TEXT_TEST_ID,
EXPANDABLE_PANEL_TOGGLE_ICON_TEST_ID,
-} from '@kbn/security-solution-common';
+} from '../../../shared/components/test_ids';
import { useTourContext } from '../../../../common/components/guided_onboarding_tour';
import { AlertsCasesTourSteps } from '../../../../common/components/guided_onboarding_tour/tour_config';
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/right/components/correlations_overview.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/correlations_overview.tsx
index 9ab130cfc2de1..9ba55f0d041f6 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/right/components/correlations_overview.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/correlations_overview.tsx
@@ -12,8 +12,8 @@ import { useExpandableFlyoutApi } from '@kbn/expandable-flyout';
import { FormattedMessage } from '@kbn/i18n-react';
import { ALERT_RULE_TYPE } from '@kbn/rule-data-utils';
-import { ExpandablePanel } from '@kbn/security-solution-common';
import type { Type } from '@kbn/securitysolution-io-ts-alerting-types';
+import { ExpandablePanel } from '../../../shared/components/expandable_panel';
import { useShowRelatedAlertsBySession } from '../../shared/hooks/use_show_related_alerts_by_session';
import { RelatedAlertsBySession } from './related_alerts_by_session';
import { useShowRelatedAlertsBySameSourceEvent } from '../../shared/hooks/use_show_related_alerts_by_same_source_event';
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/right/components/entities_overview.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/entities_overview.test.tsx
index e4975d3136424..92248c6de2828 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/right/components/entities_overview.test.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/entities_overview.test.tsx
@@ -24,7 +24,7 @@ import {
EXPANDABLE_PANEL_HEADER_TITLE_LINK_TEST_ID,
EXPANDABLE_PANEL_HEADER_TITLE_TEXT_TEST_ID,
EXPANDABLE_PANEL_TOGGLE_ICON_TEST_ID,
-} from '@kbn/security-solution-common';
+} from '../../../shared/components/test_ids';
import { useRiskScore } from '../../../../entity_analytics/api/hooks/use_risk_score';
const from = '2022-04-05T12:00:00.000Z';
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/right/components/entities_overview.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/entities_overview.tsx
index 60657a1346101..16fe6cbe1c1e0 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/right/components/entities_overview.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/entities_overview.tsx
@@ -9,8 +9,8 @@ import React, { useCallback, useMemo } from 'react';
import { EuiFlexGroup, EuiFlexItem, EuiSpacer } from '@elastic/eui';
import { useExpandableFlyoutApi } from '@kbn/expandable-flyout';
import { FormattedMessage } from '@kbn/i18n-react';
-import { ExpandablePanel } from '@kbn/security-solution-common';
import { INSIGHTS_ENTITIES_TEST_ID } from './test_ids';
+import { ExpandablePanel } from '../../../shared/components/expandable_panel';
import { useDocumentDetailsContext } from '../../shared/context';
import { getField } from '../../shared/utils';
import { HostEntityOverview } from './host_entity_overview';
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/right/components/event_header_title.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/event_header_title.tsx
index f93b8451c744a..953a2371ffa88 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/right/components/event_header_title.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/event_header_title.tsx
@@ -9,7 +9,7 @@ import React, { memo, useMemo } from 'react';
import { startCase } from 'lodash';
import { EuiSpacer } from '@elastic/eui';
import { i18n } from '@kbn/i18n';
-import { FlyoutTitle } from '@kbn/security-solution-common';
+import { FlyoutTitle } from '../../../shared/components/flyout_title';
import { DocumentSeverity } from './severity';
import { useBasicDataFromDetailsData } from '../../shared/hooks/use_basic_data_from_details_data';
import { useDocumentDetailsContext } from '../../shared/context';
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/right/components/graph_preview_container.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/graph_preview_container.test.tsx
index 6b30e2127a2f8..d44321a4926bd 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/right/components/graph_preview_container.test.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/graph_preview_container.test.tsx
@@ -14,14 +14,13 @@ import { GraphPreviewContainer } from './graph_preview_container';
import { GRAPH_PREVIEW_TEST_ID } from './test_ids';
import { useGraphPreview } from '../hooks/use_graph_preview';
import { useFetchGraphData } from '../hooks/use_fetch_graph_data';
-
import {
EXPANDABLE_PANEL_CONTENT_TEST_ID,
EXPANDABLE_PANEL_HEADER_TITLE_ICON_TEST_ID,
EXPANDABLE_PANEL_HEADER_TITLE_LINK_TEST_ID,
EXPANDABLE_PANEL_HEADER_TITLE_TEXT_TEST_ID,
EXPANDABLE_PANEL_TOGGLE_ICON_TEST_ID,
-} from '@kbn/security-solution-common';
+} from '../../../shared/components/test_ids';
jest.mock('../hooks/use_graph_preview');
jest.mock('../hooks/use_fetch_graph_data', () => ({
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/right/components/graph_preview_container.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/graph_preview_container.tsx
index 1bc6a8dd7e547..be65593364593 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/right/components/graph_preview_container.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/graph_preview_container.tsx
@@ -7,12 +7,12 @@
import React from 'react';
import { FormattedMessage } from '@kbn/i18n-react';
-import { ExpandablePanel } from '@kbn/security-solution-common';
import { useDocumentDetailsContext } from '../../shared/context';
import { GRAPH_PREVIEW_TEST_ID } from './test_ids';
import { GraphPreview } from './graph_preview';
import { useFetchGraphData } from '../hooks/use_fetch_graph_data';
import { useGraphPreview } from '../hooks/use_graph_preview';
+import { ExpandablePanel } from '../../../shared/components/expandable_panel';
const DEFAULT_FROM = 'now-60d/d';
const DEFAULT_TO = 'now/d';
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/right/components/prevalence_overview.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/prevalence_overview.test.tsx
index 527b9830b3948..57770b58e2fcb 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/right/components/prevalence_overview.test.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/prevalence_overview.test.tsx
@@ -24,7 +24,7 @@ import {
EXPANDABLE_PANEL_HEADER_TITLE_TEXT_TEST_ID,
EXPANDABLE_PANEL_LOADING_TEST_ID,
EXPANDABLE_PANEL_TOGGLE_ICON_TEST_ID,
-} from '@kbn/security-solution-common';
+} from '../../../shared/components/test_ids';
import { usePrevalence } from '../../shared/hooks/use_prevalence';
import { mockContextValue } from '../../shared/mocks/mock_context';
import { type ExpandableFlyoutApi, useExpandableFlyoutApi } from '@kbn/expandable-flyout';
@@ -42,7 +42,10 @@ const flyoutContextValue = {
openLeftPanel: jest.fn(),
} as unknown as ExpandableFlyoutApi;
-jest.mock('@kbn/expandable-flyout');
+jest.mock('@kbn/expandable-flyout', () => ({
+ useExpandableFlyoutApi: jest.fn(),
+ ExpandableFlyoutProvider: ({ children }: React.PropsWithChildren<{}>) => <>{children}>,
+}));
const renderPrevalenceOverview = (contextValue: DocumentDetailsContext = mockContextValue) =>
render(
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/right/components/prevalence_overview.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/prevalence_overview.tsx
index adb660f67ce72..966df0293db77 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/right/components/prevalence_overview.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/prevalence_overview.tsx
@@ -10,7 +10,7 @@ import React, { useCallback, useMemo } from 'react';
import { EuiBadge, EuiFlexGroup } from '@elastic/eui';
import { useExpandableFlyoutApi } from '@kbn/expandable-flyout';
import { FormattedMessage } from '@kbn/i18n-react';
-import { ExpandablePanel } from '@kbn/security-solution-common';
+import { ExpandablePanel } from '../../../shared/components/expandable_panel';
import { usePrevalence } from '../../shared/hooks/use_prevalence';
import { PREVALENCE_TEST_ID } from './test_ids';
import { useDocumentDetailsContext } from '../../shared/context';
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/right/components/session_preview_container.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/session_preview_container.test.tsx
index db7f60938c0c3..9ccb512030b43 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/right/components/session_preview_container.test.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/session_preview_container.test.tsx
@@ -19,7 +19,7 @@ import {
EXPANDABLE_PANEL_HEADER_TITLE_LINK_TEST_ID,
EXPANDABLE_PANEL_HEADER_TITLE_TEXT_TEST_ID,
EXPANDABLE_PANEL_TOGGLE_ICON_TEST_ID,
-} from '@kbn/security-solution-common';
+} from '../../../shared/components/test_ids';
import { mockContextValue } from '../../shared/mocks/mock_context';
jest.mock('../hooks/use_session_preview');
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/right/components/session_preview_container.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/session_preview_container.tsx
index 974c74b995393..4098b35a0abfc 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/right/components/session_preview_container.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/session_preview_container.tsx
@@ -9,7 +9,6 @@ import React, { type FC, useCallback } from 'react';
import { TimelineTabs } from '@kbn/securitysolution-data-table';
import { useDispatch } from 'react-redux';
import { FormattedMessage } from '@kbn/i18n-react';
-import { ExpandablePanel } from '@kbn/security-solution-common';
import { useUiSetting$ } from '@kbn/kibana-react-plugin/public';
import { ENABLE_VISUALIZATIONS_IN_FLYOUT_SETTING } from '../../../../../common/constants';
import { useLicense } from '../../../../common/hooks/use_license';
@@ -18,6 +17,7 @@ import { useSessionPreview } from '../hooks/use_session_preview';
import { useInvestigateInTimeline } from '../../../../detections/components/alerts_table/timeline_actions/use_investigate_in_timeline';
import { useDocumentDetailsContext } from '../../shared/context';
import { ALERTS_ACTIONS } from '../../../../common/lib/apm/user_actions';
+import { ExpandablePanel } from '../../../shared/components/expandable_panel';
import { SESSION_PREVIEW_TEST_ID } from './test_ids';
import { useStartTransaction } from '../../../../common/lib/apm/use_start_transaction';
import { setActiveTabTimeline } from '../../../../timelines/store/actions';
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/right/components/threat_intelligence_overview.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/threat_intelligence_overview.test.tsx
index f451862e0990e..1d19dacc39d42 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/right/components/threat_intelligence_overview.test.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/threat_intelligence_overview.test.tsx
@@ -28,7 +28,7 @@ import {
EXPANDABLE_PANEL_HEADER_TITLE_TEXT_TEST_ID,
EXPANDABLE_PANEL_LOADING_TEST_ID,
EXPANDABLE_PANEL_TOGGLE_ICON_TEST_ID,
-} from '@kbn/security-solution-common';
+} from '../../../shared/components/test_ids';
jest.mock('@kbn/expandable-flyout');
jest.mock('../../shared/context');
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/right/components/threat_intelligence_overview.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/threat_intelligence_overview.tsx
index 0a737a973ea2d..73dfc62520c32 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/right/components/threat_intelligence_overview.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/threat_intelligence_overview.tsx
@@ -10,7 +10,7 @@ import React, { useCallback, useMemo } from 'react';
import { EuiFlexGroup } from '@elastic/eui';
import { useExpandableFlyoutApi } from '@kbn/expandable-flyout';
import { FormattedMessage } from '@kbn/i18n-react';
-import { ExpandablePanel } from '@kbn/security-solution-common';
+import { ExpandablePanel } from '../../../shared/components/expandable_panel';
import { useFetchThreatIntelligence } from '../hooks/use_fetch_threat_intelligence';
import { InsightsSummaryRow } from './insights_summary_row';
import { useDocumentDetailsContext } from '../../shared/context';
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/right/content.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/content.tsx
index 075921de192b8..dbc530a4dd3f6 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/right/content.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/content.tsx
@@ -7,10 +7,10 @@
import type { FC } from 'react';
import React, { useMemo } from 'react';
-import { FlyoutBody } from '@kbn/security-solution-common';
import { FLYOUT_BODY_TEST_ID } from './test_ids';
import type { RightPanelPaths } from '.';
import type { RightPanelTabType } from './tabs';
+import { FlyoutBody } from '../../shared/components/flyout_body';
export interface PanelContentProps {
/**
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/right/header.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/header.tsx
index b7aea63ee9a24..aa1de9eda1b00 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/right/header.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/header.tsx
@@ -9,9 +9,10 @@ import type { EuiFlyoutHeader } from '@elastic/eui';
import { EuiSpacer, EuiTab } from '@elastic/eui';
import type { FC } from 'react';
import React, { memo, useMemo } from 'react';
-import { FlyoutHeader, FlyoutHeaderTabs } from '@kbn/security-solution-common';
import type { RightPanelPaths } from '.';
import type { RightPanelTabType } from './tabs';
+import { FlyoutHeader } from '../../shared/components/flyout_header';
+import { FlyoutHeaderTabs } from '../../shared/components/flyout_header_tabs';
import { AlertHeaderTitle } from './components/alert_header_title';
import { EventHeaderTitle } from './components/event_header_title';
import { useDocumentDetailsContext } from '../shared/context';
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/right/navigation.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/navigation.tsx
index 79aad96c209db..b4f12fbabf94f 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/right/navigation.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/navigation.tsx
@@ -8,9 +8,9 @@
import type { FC } from 'react';
import React, { memo, useCallback } from 'react';
import { useExpandableFlyoutApi } from '@kbn/expandable-flyout';
-import { FlyoutNavigation } from '@kbn/security-solution-common';
import { useKibana } from '../../../common/lib/kibana';
import { HeaderActions } from './components/header_actions';
+import { FlyoutNavigation } from '../../shared/components/flyout_navigation';
import { DocumentDetailsLeftPanelKey } from '../shared/constants/panel_keys';
import { useDocumentDetailsContext } from '../shared/context';
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/shared/context.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/shared/context.tsx
index f2c5d8bfa530f..12e2ad4f2a0b6 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/shared/context.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/shared/context.tsx
@@ -9,8 +9,9 @@ import type { BrowserFields, TimelineEventsDetailsItem } from '@kbn/timelines-pl
import React, { createContext, memo, useContext, useMemo } from 'react';
import type { EcsSecurityExtension as Ecs } from '@kbn/securitysolution-ecs';
import { TableId } from '@kbn/securitysolution-data-table';
-import { FlyoutError, FlyoutLoading } from '@kbn/security-solution-common/src/flyout';
import { useEventDetails } from './hooks/use_event_details';
+import { FlyoutError } from '../../shared/components/flyout_error';
+import { FlyoutLoading } from '../../shared/components/flyout_loading';
import type { SearchHit } from '../../../../common/search_strategy';
import { useBasicDataFromDetailsData } from './hooks/use_basic_data_from_details_data';
import type { DocumentDetailsProps } from './types';
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/shared/utils/tour_step_config.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/shared/utils/tour_step_config.tsx
index 3f597e47c770c..7b850cca82450 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/shared/utils/tour_step_config.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/shared/utils/tour_step_config.tsx
@@ -9,7 +9,7 @@ import { EuiText, EuiCode, type EuiTourStepProps } from '@elastic/eui';
import React from 'react';
import { FormattedMessage } from '@kbn/i18n-react';
import { i18n } from '@kbn/i18n';
-import { HEADER_NAVIGATION_BUTTON_TEST_ID } from '@kbn/security-solution-common';
+import { HEADER_NAVIGATION_BUTTON_TEST_ID } from '../../../shared/components/test_ids';
import { OVERVIEW_TAB_LABEL_TEST_ID } from '../../right/test_ids';
import { RULE_SUMMARY_BUTTON_TEST_ID } from '../../right/components/test_ids';
import {
diff --git a/x-pack/plugins/security_solution/public/flyout/entity_details/host_preview/footer.tsx b/x-pack/plugins/security_solution/public/flyout/entity_details/host_preview/footer.tsx
index 3ea6d7a5e0438..e550da28b532a 100644
--- a/x-pack/plugins/security_solution/public/flyout/entity_details/host_preview/footer.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/entity_details/host_preview/footer.tsx
@@ -9,7 +9,7 @@ import { EuiLink, EuiFlexGroup, EuiFlexItem } from '@elastic/eui';
import React, { useCallback } from 'react';
import { i18n } from '@kbn/i18n';
import { useExpandableFlyoutApi } from '@kbn/expandable-flyout';
-import { FlyoutFooter } from '@kbn/security-solution-common';
+import { FlyoutFooter } from '../../shared/components/flyout_footer';
import { HostPanelKey } from '../host_right';
export interface HostPreviewPanelFooterProps {
diff --git a/x-pack/plugins/security_solution/public/flyout/entity_details/host_right/content.tsx b/x-pack/plugins/security_solution/public/flyout/entity_details/host_right/content.tsx
index 4538f53f0bd81..2e7c14fc38027 100644
--- a/x-pack/plugins/security_solution/public/flyout/entity_details/host_right/content.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/entity_details/host_right/content.tsx
@@ -7,7 +7,7 @@
import React from 'react';
import { EuiHorizontalRule } from '@elastic/eui';
-import { FlyoutBody } from '@kbn/security-solution-common';
+import { FlyoutBody } from '../../shared/components/flyout_body';
import { EntityInsight } from '../../../cloud_security_posture/components/entity_insight';
import { AssetCriticalityAccordion } from '../../../entity_analytics/components/asset_criticality/asset_criticality_selector';
import { FlyoutRiskSummary } from '../../../entity_analytics/components/risk_summary_flyout/risk_summary';
diff --git a/x-pack/plugins/security_solution/public/flyout/entity_details/host_right/header.tsx b/x-pack/plugins/security_solution/public/flyout/entity_details/host_right/header.tsx
index 706790770eb6c..b5df2f81d1b0a 100644
--- a/x-pack/plugins/security_solution/public/flyout/entity_details/host_right/header.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/entity_details/host_right/header.tsx
@@ -9,11 +9,12 @@ import { EuiSpacer, EuiBadge, EuiText, EuiFlexItem, EuiFlexGroup } from '@elasti
import { FormattedMessage } from '@kbn/i18n-react';
import React, { useMemo } from 'react';
import { SecurityPageName } from '@kbn/security-solution-navigation';
-import { FlyoutHeader, FlyoutTitle } from '@kbn/security-solution-common';
import type { HostItem } from '../../../../common/search_strategy';
import { getHostDetailsUrl } from '../../../common/components/link_to';
import { SecuritySolutionLinkAnchor } from '../../../common/components/links';
import { PreferenceFormattedDate } from '../../../common/components/formatted_date';
+import { FlyoutHeader } from '../../shared/components/flyout_header';
+import { FlyoutTitle } from '../../shared/components/flyout_title';
import type { ObservedEntityData } from '../shared/components/observed_entity/types';
interface HostPanelHeaderProps {
diff --git a/x-pack/plugins/security_solution/public/flyout/entity_details/host_right/index.tsx b/x-pack/plugins/security_solution/public/flyout/entity_details/host_right/index.tsx
index 9c75287ed0657..adc54b58f75cb 100644
--- a/x-pack/plugins/security_solution/public/flyout/entity_details/host_right/index.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/entity_details/host_right/index.tsx
@@ -9,7 +9,6 @@ import React, { useCallback, useMemo } from 'react';
import type { FlyoutPanelProps } from '@kbn/expandable-flyout';
import { useExpandableFlyoutApi } from '@kbn/expandable-flyout';
-import { FlyoutLoading, FlyoutNavigation } from '@kbn/security-solution-common';
import { buildEntityFlyoutPreviewQuery } from '@kbn/cloud-security-posture-common';
import { useMisconfigurationPreview } from '@kbn/cloud-security-posture/src/hooks/use_misconfiguration_preview';
import { useVulnerabilitiesPreview } from '@kbn/cloud-security-posture/src/hooks/use_vulnerabilities_preview';
@@ -26,6 +25,8 @@ import { useGlobalTime } from '../../../common/containers/use_global_time';
import type { HostItem } from '../../../../common/search_strategy';
import { buildHostNamesFilter } from '../../../../common/search_strategy';
import { RiskScoreEntity } from '../../../../common/entity_analytics/risk_engine';
+import { FlyoutLoading } from '../../shared/components/flyout_loading';
+import { FlyoutNavigation } from '../../shared/components/flyout_navigation';
import { HostPanelContent } from './content';
import { HostPanelHeader } from './header';
import { AnomalyTableProvider } from '../../../common/components/ml/anomaly/anomaly_table_provider';
diff --git a/x-pack/plugins/security_solution/public/flyout/entity_details/shared/components/left_panel/left_panel_content.tsx b/x-pack/plugins/security_solution/public/flyout/entity_details/shared/components/left_panel/left_panel_content.tsx
index f52480285a567..5a66a5b305611 100644
--- a/x-pack/plugins/security_solution/public/flyout/entity_details/shared/components/left_panel/left_panel_content.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/entity_details/shared/components/left_panel/left_panel_content.tsx
@@ -9,7 +9,7 @@ import { useEuiBackgroundColor } from '@elastic/eui';
import type { VFC } from 'react';
import React, { useMemo } from 'react';
import { css } from '@emotion/react';
-import { FlyoutBody } from '@kbn/security-solution-common';
+import { FlyoutBody } from '../../../../shared/components/flyout_body';
import type { EntityDetailsLeftPanelTab, LeftPanelTabsType } from './left_panel_header';
export interface PanelContentProps {
diff --git a/x-pack/plugins/security_solution/public/flyout/entity_details/shared/components/left_panel/left_panel_header.tsx b/x-pack/plugins/security_solution/public/flyout/entity_details/shared/components/left_panel/left_panel_header.tsx
index 438f75e7a4ccb..08623c941ba67 100644
--- a/x-pack/plugins/security_solution/public/flyout/entity_details/shared/components/left_panel/left_panel_header.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/entity_details/shared/components/left_panel/left_panel_header.tsx
@@ -9,7 +9,7 @@ import { EuiTab, EuiTabs, useEuiBackgroundColor } from '@elastic/eui';
import type { ReactElement, VFC } from 'react';
import React, { memo } from 'react';
import { css } from '@emotion/react';
-import { FlyoutHeader } from '@kbn/security-solution-common';
+import { FlyoutHeader } from '../../../../shared/components/flyout_header';
export type LeftPanelTabsType = Array<{
id: EntityDetailsLeftPanelTab;
diff --git a/x-pack/plugins/security_solution/public/flyout/entity_details/user_details_left/index.tsx b/x-pack/plugins/security_solution/public/flyout/entity_details/user_details_left/index.tsx
index ae3e99cc17cfe..8e6cf3a9ee9d2 100644
--- a/x-pack/plugins/security_solution/public/flyout/entity_details/user_details_left/index.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/entity_details/user_details_left/index.tsx
@@ -8,9 +8,9 @@
import React, { useMemo } from 'react';
import type { FlyoutPanelProps, PanelPath } from '@kbn/expandable-flyout';
import { useExpandableFlyoutApi } from '@kbn/expandable-flyout';
-import { FlyoutLoading } from '@kbn/security-solution-common';
import { useManagedUser } from '../shared/hooks/use_managed_user';
import { useTabs } from './tabs';
+import { FlyoutLoading } from '../../shared/components/flyout_loading';
import type {
EntityDetailsLeftPanelTab,
LeftPanelTabsType,
diff --git a/x-pack/plugins/security_solution/public/flyout/entity_details/user_details_left/tabs/asset_document.tsx b/x-pack/plugins/security_solution/public/flyout/entity_details/user_details_left/tabs/asset_document.tsx
index 31053cf88d931..3aa4a72ffe898 100644
--- a/x-pack/plugins/security_solution/public/flyout/entity_details/user_details_left/tabs/asset_document.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/entity_details/user_details_left/tabs/asset_document.tsx
@@ -12,10 +12,10 @@ import { FormattedMessage } from '@kbn/i18n-react';
import type { EuiButtonGroupOptionProps } from '@elastic/eui';
import { EuiButtonGroup } from '@elastic/eui';
import { i18n } from '@kbn/i18n';
-import { FlyoutBody } from '@kbn/security-solution-common';
import { JsonTab } from '../../../document_details/right/tabs/json_tab';
import { TableTab } from '../../../document_details/right/tabs/table_tab';
import { FLYOUT_BODY_TEST_ID, JSON_TAB_TEST_ID, TABLE_TAB_TEST_ID } from './test_ids';
+import { FlyoutBody } from '../../../shared/components/flyout_body';
export type RightPanelPaths = 'overview' | 'table' | 'json';
export interface AssetDocumentPanelProps extends FlyoutPanelProps {
diff --git a/x-pack/plugins/security_solution/public/flyout/entity_details/user_preview/footer.tsx b/x-pack/plugins/security_solution/public/flyout/entity_details/user_preview/footer.tsx
index 6921d1a73d4e2..7f55feb7a347c 100644
--- a/x-pack/plugins/security_solution/public/flyout/entity_details/user_preview/footer.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/entity_details/user_preview/footer.tsx
@@ -9,7 +9,7 @@ import { EuiLink, EuiFlexGroup, EuiFlexItem } from '@elastic/eui';
import React, { useCallback } from 'react';
import { i18n } from '@kbn/i18n';
import { useExpandableFlyoutApi } from '@kbn/expandable-flyout';
-import { FlyoutFooter } from '@kbn/security-solution-common';
+import { FlyoutFooter } from '../../shared/components/flyout_footer';
import { UserPanelKey } from '../user_right';
export interface UserPreviewPanelFooterProps {
diff --git a/x-pack/plugins/security_solution/public/flyout/entity_details/user_right/components/managed_user_accordion.tsx b/x-pack/plugins/security_solution/public/flyout/entity_details/user_right/components/managed_user_accordion.tsx
index 84f6c96cb772b..8d9007713549e 100644
--- a/x-pack/plugins/security_solution/public/flyout/entity_details/user_right/components/managed_user_accordion.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/entity_details/user_right/components/managed_user_accordion.tsx
@@ -11,14 +11,13 @@ import React from 'react';
import { css } from '@emotion/react';
import { FormattedMessage } from '@kbn/i18n-react';
import { get } from 'lodash/fp';
-import { ExpandablePanel } from '@kbn/security-solution-common';
import { EntityDetailsLeftPanelTab } from '../../shared/components/left_panel/left_panel_header';
+import { ExpandablePanel } from '../../../shared/components/expandable_panel';
import type { ManagedUserFields } from '../../../../../common/search_strategy/security_solution/users/managed_details';
import { FormattedRelativePreferenceDate } from '../../../../common/components/formatted_date';
import { ONE_WEEK_IN_HOURS } from '../../shared/constants';
import { UserAssetTableType } from '../../../../explore/users/store/model';
-
interface ManagedUserAccordionProps {
children: React.ReactNode;
title: string;
diff --git a/x-pack/plugins/security_solution/public/flyout/entity_details/user_right/content.tsx b/x-pack/plugins/security_solution/public/flyout/entity_details/user_right/content.tsx
index 8bcf5dd690200..0dbc1faa5cb42 100644
--- a/x-pack/plugins/security_solution/public/flyout/entity_details/user_right/content.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/entity_details/user_right/content.tsx
@@ -8,7 +8,6 @@
import { EuiHorizontalRule } from '@elastic/eui';
import React from 'react';
-import { FlyoutBody } from '@kbn/security-solution-common';
import { useIsExperimentalFeatureEnabled } from '../../../common/hooks/use_experimental_features';
import { AssetCriticalityAccordion } from '../../../entity_analytics/components/asset_criticality/asset_criticality_selector';
@@ -19,6 +18,7 @@ import { ManagedUser } from './components/managed_user';
import type { ManagedUserData } from './types';
import type { RiskScoreEntity, UserItem } from '../../../../common/search_strategy';
import { USER_PANEL_RISK_SCORE_QUERY_ID } from '.';
+import { FlyoutBody } from '../../shared/components/flyout_body';
import { ObservedEntity } from '../shared/components/observed_entity';
import type { ObservedEntityData } from '../shared/components/observed_entity/types';
import { useObservedUserItems } from './hooks/use_observed_user_items';
diff --git a/x-pack/plugins/security_solution/public/flyout/entity_details/user_right/header.tsx b/x-pack/plugins/security_solution/public/flyout/entity_details/user_right/header.tsx
index 8fb54478b3c4f..e141779b559cf 100644
--- a/x-pack/plugins/security_solution/public/flyout/entity_details/user_right/header.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/entity_details/user_right/header.tsx
@@ -10,7 +10,6 @@ import { FormattedMessage } from '@kbn/i18n-react';
import React, { useMemo } from 'react';
import { max } from 'lodash/fp';
import { SecurityPageName } from '@kbn/security-solution-navigation';
-import { FlyoutHeader, FlyoutTitle } from '@kbn/security-solution-common';
import type { UserItem } from '../../../../common/search_strategy';
import { ManagedUserDatasetKey } from '../../../../common/search_strategy/security_solution/users/managed_details';
import { getUsersDetailsUrl } from '../../../common/components/link_to/redirect_to_users';
@@ -18,6 +17,8 @@ import type { ManagedUserData } from './types';
import { SecuritySolutionLinkAnchor } from '../../../common/components/links';
import { PreferenceFormattedDate } from '../../../common/components/formatted_date';
+import { FlyoutHeader } from '../../shared/components/flyout_header';
+import { FlyoutTitle } from '../../shared/components/flyout_title';
import type { ObservedEntityData } from '../shared/components/observed_entity/types';
interface UserPanelHeaderProps {
diff --git a/x-pack/plugins/security_solution/public/flyout/entity_details/user_right/index.tsx b/x-pack/plugins/security_solution/public/flyout/entity_details/user_right/index.tsx
index ec55fb292abfd..3a60c06e3faea 100644
--- a/x-pack/plugins/security_solution/public/flyout/entity_details/user_right/index.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/entity_details/user_right/index.tsx
@@ -8,9 +8,8 @@
import React, { useCallback, useMemo } from 'react';
import type { FlyoutPanelProps } from '@kbn/expandable-flyout';
import { useExpandableFlyoutApi } from '@kbn/expandable-flyout';
-import { FlyoutLoading, FlyoutNavigation } from '@kbn/security-solution-common/src/flyout';
-import { buildEntityFlyoutPreviewQuery } from '@kbn/cloud-security-posture-common';
import { useMisconfigurationPreview } from '@kbn/cloud-security-posture/src/hooks/use_misconfiguration_preview';
+import { buildEntityFlyoutPreviewQuery } from '@kbn/cloud-security-posture-common';
import { useRefetchQueryById } from '../../../entity_analytics/api/hooks/use_refetch_query_by_id';
import type { Refetch } from '../../../common/types';
import { RISK_INPUTS_TAB_QUERY_ID } from '../../../entity_analytics/components/entity_details_flyout/tabs/risk_inputs/risk_inputs_tab';
@@ -26,6 +25,8 @@ import { useGlobalTime } from '../../../common/containers/use_global_time';
import { AnomalyTableProvider } from '../../../common/components/ml/anomaly/anomaly_table_provider';
import { buildUserNamesFilter } from '../../../../common/search_strategy';
import { RiskScoreEntity } from '../../../../common/entity_analytics/risk_engine';
+import { FlyoutLoading } from '../../shared/components/flyout_loading';
+import { FlyoutNavigation } from '../../shared/components/flyout_navigation';
import { UserPanelContent } from './content';
import { UserPanelHeader } from './header';
import { UserDetailsPanelKey } from '../user_details_left';
diff --git a/x-pack/plugins/security_solution/public/flyout/network_details/content.tsx b/x-pack/plugins/security_solution/public/flyout/network_details/content.tsx
index 3634f73ef5a7f..8c9aa355ed43a 100644
--- a/x-pack/plugins/security_solution/public/flyout/network_details/content.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/network_details/content.tsx
@@ -8,8 +8,8 @@
import type { FC } from 'react';
import React, { memo } from 'react';
import { EuiSpacer } from '@elastic/eui';
-import { FlyoutBody } from '@kbn/security-solution-common';
import { NetworkDetails } from './components/network_details';
+import { FlyoutBody } from '../shared/components/flyout_body';
import type { FlowTargetSourceDest } from '../../../common/search_strategy';
export interface PanelContentProps {
diff --git a/x-pack/plugins/security_solution/public/flyout/network_details/header.tsx b/x-pack/plugins/security_solution/public/flyout/network_details/header.tsx
index 1ef47c00689d9..8ffceb345b1e0 100644
--- a/x-pack/plugins/security_solution/public/flyout/network_details/header.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/network_details/header.tsx
@@ -9,10 +9,11 @@ import type { FC } from 'react';
import React, { memo, useMemo } from 'react';
import type { EuiFlyoutHeader } from '@elastic/eui';
import { SecurityPageName } from '@kbn/deeplinks-security';
-import { FlyoutHeader, FlyoutTitle } from '@kbn/security-solution-common';
import { getNetworkDetailsUrl } from '../../common/components/link_to';
import { SecuritySolutionLinkAnchor } from '../../common/components/links';
import type { FlowTargetSourceDest } from '../../../common/search_strategy';
+import { FlyoutHeader } from '../shared/components/flyout_header';
+import { FlyoutTitle } from '../shared/components/flyout_title';
import { encodeIpv6 } from '../../common/lib/helpers';
export interface PanelHeaderProps extends React.ComponentProps {
diff --git a/x-pack/plugins/security_solution/public/flyout/rule_details/preview/footer.tsx b/x-pack/plugins/security_solution/public/flyout/rule_details/preview/footer.tsx
index 42c8c1a6d85b9..4440555e5fc53 100644
--- a/x-pack/plugins/security_solution/public/flyout/rule_details/preview/footer.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/rule_details/preview/footer.tsx
@@ -8,9 +8,9 @@
import React, { memo } from 'react';
import { EuiFlexGroup, EuiFlexItem, EuiLink } from '@elastic/eui';
import { i18n } from '@kbn/i18n';
-import { FlyoutFooter } from '@kbn/security-solution-common';
import { RULE_PREVIEW_FOOTER_TEST_ID, RULE_PREVIEW_OPEN_RULE_FLYOUT_TEST_ID } from './test_ids';
import { useRuleDetailsLink } from '../../document_details/shared/hooks/use_rule_details_link';
+import { FlyoutFooter } from '../../shared/components/flyout_footer';
/**
* Footer in rule preview panel
diff --git a/x-pack/plugins/security_solution/public/flyout/rule_details/right/content.tsx b/x-pack/plugins/security_solution/public/flyout/rule_details/right/content.tsx
index 2778fc9c7ca22..8acc6cfe9b715 100644
--- a/x-pack/plugins/security_solution/public/flyout/rule_details/right/content.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/rule_details/right/content.tsx
@@ -8,7 +8,6 @@ import React, { memo } from 'react';
import { EuiText, EuiHorizontalRule, EuiSpacer, EuiPanel } from '@elastic/eui';
import { css } from '@emotion/css';
import { FormattedMessage } from '@kbn/i18n-react';
-import { FlyoutBody } from '@kbn/security-solution-common';
import { ExpandableSection } from '../../document_details/right/components/expandable_section';
import { RuleAboutSection } from '../../../detection_engine/rule_management/components/rule_details/rule_about_section';
import { RuleScheduleSection } from '../../../detection_engine/rule_management/components/rule_details/rule_schedule_section';
@@ -23,6 +22,7 @@ import {
ACTIONS_TEST_ID,
} from './test_ids';
import type { RuleResponse } from '../../../../common/api/detection_engine';
+import { FlyoutBody } from '../../shared/components/flyout_body';
const panelViewStyle = css`
dt {
diff --git a/x-pack/plugins/security_solution/public/flyout/rule_details/right/header.tsx b/x-pack/plugins/security_solution/public/flyout/rule_details/right/header.tsx
index 3dbbcc6b5b259..294870d6eebb7 100644
--- a/x-pack/plugins/security_solution/public/flyout/rule_details/right/header.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/rule_details/right/header.tsx
@@ -15,7 +15,6 @@ import {
EuiBadge,
EuiLink,
} from '@elastic/eui';
-import { FlyoutHeader, FlyoutTitle } from '@kbn/security-solution-common';
import { DELETED_RULE } from '../../../detection_engine/rule_details_ui/pages/rule_details/translations';
import { CreatedBy, UpdatedBy } from '../../../detections/components/rules/rule_info';
import {
@@ -27,6 +26,8 @@ import {
} from './test_ids';
import type { RuleResponse } from '../../../../common/api/detection_engine';
import { useRuleDetailsLink } from '../../document_details/shared/hooks/use_rule_details_link';
+import { FlyoutHeader } from '../../shared/components/flyout_header';
+import { FlyoutTitle } from '../../shared/components/flyout_title';
export interface PanelHeaderProps {
/**
diff --git a/x-pack/plugins/security_solution/public/flyout/rule_details/right/index.tsx b/x-pack/plugins/security_solution/public/flyout/rule_details/right/index.tsx
index 958a2d4265186..10b22e22a575c 100644
--- a/x-pack/plugins/security_solution/public/flyout/rule_details/right/index.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/rule_details/right/index.tsx
@@ -7,13 +7,15 @@
import React, { memo } from 'react';
import type { FlyoutPanelProps } from '@kbn/expandable-flyout';
-import { FlyoutLoading, FlyoutError, FlyoutNavigation } from '@kbn/security-solution-common';
import { i18n } from '@kbn/i18n';
import { PanelContent } from './content';
import { PanelHeader } from './header';
import { PreviewFooter } from '../preview/footer';
import { useRuleDetails } from '../hooks/use_rule_details';
import { LOADING_TEST_ID } from './test_ids';
+import { FlyoutLoading } from '../../shared/components/flyout_loading';
+import { FlyoutNavigation } from '../../shared/components/flyout_navigation';
+import { FlyoutError } from '../../shared/components/flyout_error';
export interface RulePanelExpandableFlyoutProps extends FlyoutPanelProps {
key: 'rule-panel' | 'rule-preview-panel';
diff --git a/x-pack/packages/security-solution/common/src/flyout/common/components/expandable_panel.stories.tsx b/x-pack/plugins/security_solution/public/flyout/shared/components/expandable_panel.stories.tsx
similarity index 100%
rename from x-pack/packages/security-solution/common/src/flyout/common/components/expandable_panel.stories.tsx
rename to x-pack/plugins/security_solution/public/flyout/shared/components/expandable_panel.stories.tsx
diff --git a/x-pack/packages/security-solution/common/src/flyout/common/components/expandable_panel.test.tsx b/x-pack/plugins/security_solution/public/flyout/shared/components/expandable_panel.test.tsx
similarity index 99%
rename from x-pack/packages/security-solution/common/src/flyout/common/components/expandable_panel.test.tsx
rename to x-pack/plugins/security_solution/public/flyout/shared/components/expandable_panel.test.tsx
index cc282eb1156b5..87592b608613f 100644
--- a/x-pack/packages/security-solution/common/src/flyout/common/components/expandable_panel.test.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/shared/components/expandable_panel.test.tsx
@@ -13,7 +13,7 @@ import {
EXPANDABLE_PANEL_CONTENT_TEST_ID,
EXPANDABLE_PANEL_HEADER_TITLE_ICON_TEST_ID,
EXPANDABLE_PANEL_TOGGLE_ICON_TEST_ID,
-} from '../test_ids';
+} from './test_ids';
import { ThemeProvider } from '@emotion/react';
import { ExpandablePanel } from './expandable_panel';
diff --git a/x-pack/packages/security-solution/common/src/flyout/common/components/expandable_panel.tsx b/x-pack/plugins/security_solution/public/flyout/shared/components/expandable_panel.tsx
similarity index 97%
rename from x-pack/packages/security-solution/common/src/flyout/common/components/expandable_panel.tsx
rename to x-pack/plugins/security_solution/public/flyout/shared/components/expandable_panel.tsx
index 383bbbb341c8e..88318ee2f2cfc 100644
--- a/x-pack/packages/security-solution/common/src/flyout/common/components/expandable_panel.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/shared/components/expandable_panel.tsx
@@ -110,7 +110,7 @@ export const ExpandablePanel: FC> =
> =
diff --git a/x-pack/packages/security-solution/common/src/flyout/common/components/flyout_body.test.tsx b/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_body.test.tsx
similarity index 100%
rename from x-pack/packages/security-solution/common/src/flyout/common/components/flyout_body.test.tsx
rename to x-pack/plugins/security_solution/public/flyout/shared/components/flyout_body.test.tsx
diff --git a/x-pack/packages/security-solution/common/src/flyout/common/components/flyout_body.tsx b/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_body.tsx
similarity index 100%
rename from x-pack/packages/security-solution/common/src/flyout/common/components/flyout_body.tsx
rename to x-pack/plugins/security_solution/public/flyout/shared/components/flyout_body.tsx
diff --git a/x-pack/packages/security-solution/common/src/flyout/common/components/flyout_error.stories.tsx b/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_error.stories.tsx
similarity index 100%
rename from x-pack/packages/security-solution/common/src/flyout/common/components/flyout_error.stories.tsx
rename to x-pack/plugins/security_solution/public/flyout/shared/components/flyout_error.stories.tsx
diff --git a/x-pack/packages/security-solution/common/src/flyout/common/components/flyout_error.test.tsx b/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_error.test.tsx
similarity index 94%
rename from x-pack/packages/security-solution/common/src/flyout/common/components/flyout_error.test.tsx
rename to x-pack/plugins/security_solution/public/flyout/shared/components/flyout_error.test.tsx
index f0565fe1df43f..e58d586a063b5 100644
--- a/x-pack/packages/security-solution/common/src/flyout/common/components/flyout_error.test.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_error.test.tsx
@@ -9,7 +9,7 @@ import React from 'react';
import { __IntlProvider as IntlProvider } from '@kbn/i18n-react';
import { render } from '@testing-library/react';
import { FlyoutError } from './flyout_error';
-import { FLYOUT_ERROR_TEST_ID } from '../test_ids';
+import { FLYOUT_ERROR_TEST_ID } from './test_ids';
describe(' ', () => {
it('should render error title and body', () => {
diff --git a/x-pack/packages/security-solution/common/src/flyout/common/components/flyout_error.tsx b/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_error.tsx
similarity index 84%
rename from x-pack/packages/security-solution/common/src/flyout/common/components/flyout_error.tsx
rename to x-pack/plugins/security_solution/public/flyout/shared/components/flyout_error.tsx
index f319d80dafe12..9ebef345540fe 100644
--- a/x-pack/packages/security-solution/common/src/flyout/common/components/flyout_error.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_error.tsx
@@ -8,7 +8,7 @@
import React from 'react';
import { EuiEmptyPrompt, EuiFlexItem } from '@elastic/eui';
import { FormattedMessage } from '@kbn/i18n-react';
-import { FLYOUT_ERROR_TEST_ID } from '../test_ids';
+import { FLYOUT_ERROR_TEST_ID } from './test_ids';
/**
* Use this when you need to show an error state in the flyout
@@ -21,7 +21,7 @@ export const FlyoutError: React.VFC = () => (
title={
@@ -30,7 +30,7 @@ export const FlyoutError: React.VFC = () => (
body={
diff --git a/x-pack/packages/security-solution/common/src/flyout/common/components/flyout_footer.test.tsx b/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_footer.test.tsx
similarity index 100%
rename from x-pack/packages/security-solution/common/src/flyout/common/components/flyout_footer.test.tsx
rename to x-pack/plugins/security_solution/public/flyout/shared/components/flyout_footer.test.tsx
diff --git a/x-pack/packages/security-solution/common/src/flyout/common/components/flyout_footer.tsx b/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_footer.tsx
similarity index 100%
rename from x-pack/packages/security-solution/common/src/flyout/common/components/flyout_footer.tsx
rename to x-pack/plugins/security_solution/public/flyout/shared/components/flyout_footer.tsx
diff --git a/x-pack/packages/security-solution/common/src/flyout/common/components/flyout_header.test.tsx b/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_header.test.tsx
similarity index 100%
rename from x-pack/packages/security-solution/common/src/flyout/common/components/flyout_header.test.tsx
rename to x-pack/plugins/security_solution/public/flyout/shared/components/flyout_header.test.tsx
diff --git a/x-pack/packages/security-solution/common/src/flyout/common/components/flyout_header.tsx b/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_header.tsx
similarity index 100%
rename from x-pack/packages/security-solution/common/src/flyout/common/components/flyout_header.tsx
rename to x-pack/plugins/security_solution/public/flyout/shared/components/flyout_header.tsx
diff --git a/x-pack/packages/security-solution/common/src/flyout/common/components/flyout_header_tabs.test.tsx b/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_header_tabs.test.tsx
similarity index 100%
rename from x-pack/packages/security-solution/common/src/flyout/common/components/flyout_header_tabs.test.tsx
rename to x-pack/plugins/security_solution/public/flyout/shared/components/flyout_header_tabs.test.tsx
diff --git a/x-pack/packages/security-solution/common/src/flyout/common/components/flyout_header_tabs.tsx b/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_header_tabs.tsx
similarity index 100%
rename from x-pack/packages/security-solution/common/src/flyout/common/components/flyout_header_tabs.tsx
rename to x-pack/plugins/security_solution/public/flyout/shared/components/flyout_header_tabs.tsx
diff --git a/x-pack/packages/security-solution/common/src/flyout/common/components/flyout_loading.stories.tsx b/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_loading.stories.tsx
similarity index 100%
rename from x-pack/packages/security-solution/common/src/flyout/common/components/flyout_loading.stories.tsx
rename to x-pack/plugins/security_solution/public/flyout/shared/components/flyout_loading.stories.tsx
diff --git a/x-pack/packages/security-solution/common/src/flyout/common/components/flyout_loading.test.tsx b/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_loading.test.tsx
similarity index 94%
rename from x-pack/packages/security-solution/common/src/flyout/common/components/flyout_loading.test.tsx
rename to x-pack/plugins/security_solution/public/flyout/shared/components/flyout_loading.test.tsx
index d55e85b3e978b..a164db8a6ce01 100644
--- a/x-pack/packages/security-solution/common/src/flyout/common/components/flyout_loading.test.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_loading.test.tsx
@@ -7,7 +7,7 @@
import React from 'react';
import { render } from '@testing-library/react';
-import { FLYOUT_LOADING_TEST_ID } from '../test_ids';
+import { FLYOUT_LOADING_TEST_ID } from './test_ids';
import { FlyoutLoading } from './flyout_loading';
describe(' ', () => {
diff --git a/x-pack/packages/security-solution/common/src/flyout/common/components/flyout_loading.tsx b/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_loading.tsx
similarity index 94%
rename from x-pack/packages/security-solution/common/src/flyout/common/components/flyout_loading.tsx
rename to x-pack/plugins/security_solution/public/flyout/shared/components/flyout_loading.tsx
index cffe17c8ccbf1..0c98957dd929b 100644
--- a/x-pack/packages/security-solution/common/src/flyout/common/components/flyout_loading.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_loading.tsx
@@ -8,7 +8,7 @@
import React from 'react';
import { EuiFlexItem, EuiLoadingSpinner } from '@elastic/eui';
import { css } from '@emotion/react';
-import { FLYOUT_LOADING_TEST_ID } from '../test_ids';
+import { FLYOUT_LOADING_TEST_ID } from './test_ids';
export interface FlyoutLoadingProps {
/**
diff --git a/x-pack/packages/security-solution/common/src/flyout/common/components/flyout_navigation.stories.tsx b/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_navigation.stories.tsx
similarity index 100%
rename from x-pack/packages/security-solution/common/src/flyout/common/components/flyout_navigation.stories.tsx
rename to x-pack/plugins/security_solution/public/flyout/shared/components/flyout_navigation.stories.tsx
diff --git a/x-pack/packages/security-solution/common/src/flyout/common/components/flyout_navigation.test.tsx b/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_navigation.test.tsx
similarity index 78%
rename from x-pack/packages/security-solution/common/src/flyout/common/components/flyout_navigation.test.tsx
rename to x-pack/plugins/security_solution/public/flyout/shared/components/flyout_navigation.test.tsx
index d010796008880..321245ccde86e 100644
--- a/x-pack/packages/security-solution/common/src/flyout/common/components/flyout_navigation.test.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_navigation.test.tsx
@@ -8,61 +8,39 @@
import type { FC, PropsWithChildren } from 'react';
import React from 'react';
import { act, render } from '@testing-library/react';
+import { TestProviders } from '../../../common/mock';
import { FlyoutNavigation } from './flyout_navigation';
import {
COLLAPSE_DETAILS_BUTTON_TEST_ID,
EXPAND_DETAILS_BUTTON_TEST_ID,
HEADER_ACTIONS_TEST_ID,
-} from '../test_ids';
+} from './test_ids';
+import type { ExpandableFlyoutState } from '@kbn/expandable-flyout';
import {
- ExpandableFlyoutApi,
- ExpandableFlyoutProvider,
- ExpandableFlyoutState,
useExpandableFlyoutApi,
+ type ExpandableFlyoutApi,
useExpandableFlyoutState,
} from '@kbn/expandable-flyout';
-import { I18nProvider } from '@kbn/i18n-react';
const expandDetails = jest.fn();
-const mockFlyoutCloseLeftPanel = jest.fn();
+
+const ExpandableFlyoutTestProviders: FC> = ({ children }) => {
+ return {children} ;
+};
jest.mock('@kbn/expandable-flyout', () => ({
- useExpandableFlyoutApi: jest.fn(() => {
- return {
- closeFlyout: jest.fn(),
- closeLeftPanel: jest.fn(),
- closePreviewPanel: jest.fn(),
- closeRightPanel: jest.fn(),
- previousPreviewPanel: jest.fn(),
- openFlyout: jest.fn(),
- openLeftPanel: jest.fn(),
- openPreviewPanel: jest.fn(),
- openRightPanel: jest.fn(),
- };
- }),
+ useExpandableFlyoutApi: jest.fn(),
useExpandableFlyoutState: jest.fn(),
ExpandableFlyoutProvider: ({ children }: React.PropsWithChildren<{}>) => <>{children}>,
- withExpandableFlyoutProvider: (Component: React.ComponentType) => {
- return (props: T) => {
- return ;
- };
- },
- ExpandableFlyout: jest.fn(),
}));
-const ExpandableFlyoutTestProviders: FC> = ({ children }) => {
- return (
-
- {children}
-
- );
-};
+const flyoutContextValue = {
+ closeLeftPanel: jest.fn(),
+} as unknown as ExpandableFlyoutApi;
describe(' ', () => {
beforeEach(() => {
- jest.mocked(useExpandableFlyoutApi).mockReturnValue({
- closeLeftPanel: mockFlyoutCloseLeftPanel,
- } as unknown as ExpandableFlyoutApi);
+ jest.mocked(useExpandableFlyoutApi).mockReturnValue(flyoutContextValue);
jest.mocked(useExpandableFlyoutState).mockReturnValue({} as unknown as ExpandableFlyoutState);
});
@@ -97,7 +75,7 @@ describe(' ', () => {
expect(queryByTestId(EXPAND_DETAILS_BUTTON_TEST_ID)).not.toBeInTheDocument();
getByTestId(COLLAPSE_DETAILS_BUTTON_TEST_ID).click();
- expect(mockFlyoutCloseLeftPanel).toHaveBeenCalled();
+ expect(flyoutContextValue.closeLeftPanel).toHaveBeenCalled();
});
});
diff --git a/x-pack/packages/security-solution/common/src/flyout/common/components/flyout_navigation.tsx b/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_navigation.tsx
similarity index 91%
rename from x-pack/packages/security-solution/common/src/flyout/common/components/flyout_navigation.tsx
rename to x-pack/plugins/security_solution/public/flyout/shared/components/flyout_navigation.tsx
index 961629147d781..8f9f1604bf407 100644
--- a/x-pack/packages/security-solution/common/src/flyout/common/components/flyout_navigation.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_navigation.tsx
@@ -23,7 +23,7 @@ import {
COLLAPSE_DETAILS_BUTTON_TEST_ID,
EXPAND_DETAILS_BUTTON_TEST_ID,
HEADER_NAVIGATION_BUTTON_TEST_ID,
-} from '../test_ids';
+} from './test_ids';
export interface FlyoutNavigationProps {
/**
@@ -63,14 +63,14 @@ export const FlyoutNavigation: FC = memo(
size="s"
data-test-subj={COLLAPSE_DETAILS_BUTTON_TEST_ID}
aria-label={i18n.translate(
- 'securitySolutionPackages.flyout.right.header.collapseDetailButtonAriaLabel',
+ 'xpack.securitySolution.flyout.right.header.collapseDetailButtonAriaLabel',
{
defaultMessage: 'Collapse details',
}
)}
>
@@ -87,14 +87,14 @@ export const FlyoutNavigation: FC = memo(
size="s"
data-test-subj={EXPAND_DETAILS_BUTTON_TEST_ID}
aria-label={i18n.translate(
- 'securitySolutionPackages.flyout.right.header.expandDetailButtonAriaLabel',
+ 'xpack.securitySolution.flyout.right.header.expandDetailButtonAriaLabel',
{
defaultMessage: 'Expand details',
}
)}
>
diff --git a/x-pack/packages/security-solution/common/src/flyout/common/components/flyout_title.stories.tsx b/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_title.stories.tsx
similarity index 100%
rename from x-pack/packages/security-solution/common/src/flyout/common/components/flyout_title.stories.tsx
rename to x-pack/plugins/security_solution/public/flyout/shared/components/flyout_title.stories.tsx
diff --git a/x-pack/packages/security-solution/common/src/flyout/common/components/flyout_title.test.tsx b/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_title.test.tsx
similarity index 98%
rename from x-pack/packages/security-solution/common/src/flyout/common/components/flyout_title.test.tsx
rename to x-pack/plugins/security_solution/public/flyout/shared/components/flyout_title.test.tsx
index 3fde2b034219b..1f2d0c128f411 100644
--- a/x-pack/packages/security-solution/common/src/flyout/common/components/flyout_title.test.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_title.test.tsx
@@ -12,7 +12,7 @@ import {
TITLE_HEADER_ICON_TEST_ID,
TITLE_HEADER_TEXT_TEST_ID,
TITLE_LINK_ICON_TEST_ID,
-} from '../test_ids';
+} from './test_ids';
const title = 'test title';
const TEST_ID = 'test';
diff --git a/x-pack/packages/security-solution/common/src/flyout/common/components/flyout_title.tsx b/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_title.tsx
similarity index 100%
rename from x-pack/packages/security-solution/common/src/flyout/common/components/flyout_title.tsx
rename to x-pack/plugins/security_solution/public/flyout/shared/components/flyout_title.tsx
diff --git a/x-pack/packages/security-solution/common/src/flyout/common/test_ids.ts b/x-pack/plugins/security_solution/public/flyout/shared/components/test_ids.ts
similarity index 97%
rename from x-pack/packages/security-solution/common/src/flyout/common/test_ids.ts
rename to x-pack/plugins/security_solution/public/flyout/shared/components/test_ids.ts
index 60ccb0a234fde..9df26dbfb694d 100644
--- a/x-pack/packages/security-solution/common/src/flyout/common/test_ids.ts
+++ b/x-pack/plugins/security_solution/public/flyout/shared/components/test_ids.ts
@@ -5,7 +5,7 @@
* 2.0.
*/
-export const PREFIX = 'securitySolutionFlyout' as const;
+import { PREFIX } from '../test_ids';
export const FLYOUT_ERROR_TEST_ID = `${PREFIX}Error` as const;
export const FLYOUT_LOADING_TEST_ID = `${PREFIX}Loading` as const;
diff --git a/x-pack/plugins/security_solution/tsconfig.json b/x-pack/plugins/security_solution/tsconfig.json
index a84f21c047ea8..f8fdcfcd8f438 100644
--- a/x-pack/plugins/security_solution/tsconfig.json
+++ b/x-pack/plugins/security_solution/tsconfig.json
@@ -15,11 +15,7 @@
"public/**/*.json",
"../../../typings/**/*"
],
- "exclude": [
- "target/**/*",
- "**/cypress/**",
- "public/management/cypress.config.ts"
- ],
+ "exclude": ["target/**/*", "**/cypress/**", "public/management/cypress.config.ts"],
"kbn_references": [
"@kbn/core",
{
@@ -209,7 +205,6 @@
"@kbn/core-theme-browser",
"@kbn/integration-assistant-plugin",
"@kbn/avc-banner",
- "@kbn/security-solution-common",
"@kbn/esql-ast",
"@kbn/esql-validation-autocomplete",
"@kbn/config",
diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json
index 6ad9ce5224290..b3de99ebfdd3c 100644
--- a/x-pack/plugins/translations/translations/fr-FR.json
+++ b/x-pack/plugins/translations/translations/fr-FR.json
@@ -7077,14 +7077,6 @@
"securitySolutionPackages.features.featureRegistry.subFeatures.trustedApplications": "Applications de confiance",
"securitySolutionPackages.features.featureRegistry.subFeatures.trustedApplications.description": "Aide à atténuer les conflits avec d'autres logiciels, généralement d'autres applications d'antivirus ou de sécurité des points de terminaison.",
"securitySolutionPackages.features.featureRegistry.subFeatures.trustedApplications.privilegesTooltip": "\"Tous les espaces\" est requis pour l'accès aux applications de confiance.",
- "securitySolutionPackages.flyout.right.header.collapseDetailButtonAriaLabel": "Réduire les détails",
- "securitySolutionPackages.flyout.right.header.collapseDetailButtonLabel": "Réduire les détails",
- "securitySolutionPackages.flyout.right.header.expandDetailButtonAriaLabel": "Développer les détails",
- "securitySolutionPackages.flyout.right.header.expandDetailButtonLabel": "Développer les détails",
- "securitySolutionPackages.flyout.shared.errorDescription": "Une erreur est survenue lors de l'affichage de {message}.",
- "securitySolutionPackages.flyout.shared.errorTitle": "Impossible d'afficher {title}.",
- "securitySolutionPackages.flyout.shared.ExpandablePanelButtonIconAriaLabel": "Activer/Désactiver le panneau extensible",
- "securitySolutionPackages.flyout.shared.expandablePanelLoadingAriaLabel": "panneau extensible",
"securitySolutionPackages.markdown.insight.upsell": "Passez au niveau {requiredLicense} pour pouvoir utiliser les informations des guides d'investigation",
"securitySolutionPackages.markdown.investigationGuideInteractions.upsell": "Passez au niveau {requiredLicense} pour pouvoir utiliser les interactions des guides d'investigation",
"securitySolutionPackages.navigation.landingLinks": "Vues de sécurité",
@@ -38731,6 +38723,10 @@
"xpack.securitySolution.flyout.right.alertPreview.ariaLabel": "Voir un aperçu de l'alerte avec l'id {id}",
"xpack.securitySolution.flyout.right.eventCategoryText": "Catégorie d'événement",
"xpack.securitySolution.flyout.right.header.assignedTitle": "Utilisateurs affectés",
+ "xpack.securitySolution.flyout.right.header.collapseDetailButtonAriaLabel": "Réduire les détails",
+ "xpack.securitySolution.flyout.right.header.collapseDetailButtonLabel": "Réduire les détails",
+ "xpack.securitySolution.flyout.right.header.expandDetailButtonAriaLabel": "Développer les détails",
+ "xpack.securitySolution.flyout.right.header.expandDetailButtonLabel": "Développer les détails",
"xpack.securitySolution.flyout.right.header.headerTitle": "Détails des documents",
"xpack.securitySolution.flyout.right.header.jsonTabLabel": "JSON",
"xpack.securitySolution.flyout.right.header.overviewTabLabel": "Aperçu",
@@ -38809,6 +38805,10 @@
"xpack.securitySolution.flyout.right.visualizations.sessionPreview.sessionPreviewTitle": "Aperçu du visualiseur de session",
"xpack.securitySolution.flyout.right.visualizations.sessionPreview.sessionPreviewTooltip": "Investiguer dans la chronologie",
"xpack.securitySolution.flyout.right.visualizations.sessionPreview.timeDescription": "à",
+ "xpack.securitySolution.flyout.shared.errorDescription": "Une erreur est survenue lors de l'affichage de {message}.",
+ "xpack.securitySolution.flyout.shared.errorTitle": "Impossible d'afficher {title}.",
+ "xpack.securitySolution.flyout.shared.ExpandablePanelButtonIconAriaLabel": "Activer/Désactiver le panneau extensible",
+ "xpack.securitySolution.flyout.shared.expandablePanelLoadingAriaLabel": "panneau extensible",
"xpack.securitySolution.flyout.tour.entities.description": "Consultez la vue {entities} étendue pour en savoir plus sur les hôtes et les utilisateurs liés à l'alerte.",
"xpack.securitySolution.flyout.tour.entities.text": "Entités",
"xpack.securitySolution.flyout.tour.entities.title": "De nouvelles informations sur les hôtes et les utilisateurs sont disponibles",
diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json
index 7bedb932e478a..b813f2189ed3b 100644
--- a/x-pack/plugins/translations/translations/ja-JP.json
+++ b/x-pack/plugins/translations/translations/ja-JP.json
@@ -6832,14 +6832,6 @@
"securitySolutionPackages.features.featureRegistry.subFeatures.trustedApplications": "信頼できるアプリケーション",
"securitySolutionPackages.features.featureRegistry.subFeatures.trustedApplications.description": "他のソフトウェア(通常は他のウイルス対策またはエンドポイントセキュリティアプリケーション)との競合を軽減することができます。",
"securitySolutionPackages.features.featureRegistry.subFeatures.trustedApplications.privilegesTooltip": "信頼できるアプリケーションのアクセスには、すべてのスペースが必要です。",
- "securitySolutionPackages.flyout.right.header.collapseDetailButtonAriaLabel": "詳細を折りたたむ",
- "securitySolutionPackages.flyout.right.header.collapseDetailButtonLabel": "詳細を折りたたむ",
- "securitySolutionPackages.flyout.right.header.expandDetailButtonAriaLabel": "詳細を展開",
- "securitySolutionPackages.flyout.right.header.expandDetailButtonLabel": "詳細を展開",
- "securitySolutionPackages.flyout.shared.errorDescription": "{message}の表示中にエラーが発生しました。",
- "securitySolutionPackages.flyout.shared.errorTitle": "{title}を表示できません。",
- "securitySolutionPackages.flyout.shared.ExpandablePanelButtonIconAriaLabel": "展開可能なパネルトグル",
- "securitySolutionPackages.flyout.shared.expandablePanelLoadingAriaLabel": "展開可能なパネル",
"securitySolutionPackages.markdown.investigationGuideInteractions.upsell": "{requiredLicense}にアップグレードして、調査ガイドのインタラクションを利用",
"securitySolutionPackages.navigation.landingLinks": "セキュリティビュー",
"securitySolutionPackages.sideNav.betaBadge.label": "ベータ",
@@ -38474,6 +38466,10 @@
"xpack.securitySolution.flyout.right.alertPreview.ariaLabel": "ID {id}のアラートをプレビュー",
"xpack.securitySolution.flyout.right.eventCategoryText": "イベントカテゴリ",
"xpack.securitySolution.flyout.right.header.assignedTitle": "担当者",
+ "xpack.securitySolution.flyout.right.header.collapseDetailButtonAriaLabel": "詳細を折りたたむ",
+ "xpack.securitySolution.flyout.right.header.collapseDetailButtonLabel": "詳細を折りたたむ",
+ "xpack.securitySolution.flyout.right.header.expandDetailButtonAriaLabel": "詳細を展開",
+ "xpack.securitySolution.flyout.right.header.expandDetailButtonLabel": "詳細を展開",
"xpack.securitySolution.flyout.right.header.headerTitle": "ドキュメント詳細",
"xpack.securitySolution.flyout.right.header.jsonTabLabel": "JSON",
"xpack.securitySolution.flyout.right.header.overviewTabLabel": "概要",
@@ -38552,6 +38548,10 @@
"xpack.securitySolution.flyout.right.visualizations.sessionPreview.sessionPreviewTitle": "セッションビューアープレビュー",
"xpack.securitySolution.flyout.right.visualizations.sessionPreview.sessionPreviewTooltip": "タイムラインで調査",
"xpack.securitySolution.flyout.right.visualizations.sessionPreview.timeDescription": "に",
+ "xpack.securitySolution.flyout.shared.errorDescription": "{message}の表示中にエラーが発生しました。",
+ "xpack.securitySolution.flyout.shared.errorTitle": "{title}を表示できません。",
+ "xpack.securitySolution.flyout.shared.ExpandablePanelButtonIconAriaLabel": "展開可能なパネルトグル",
+ "xpack.securitySolution.flyout.shared.expandablePanelLoadingAriaLabel": "展開可能なパネル",
"xpack.securitySolution.flyout.tour.entities.description": "アラートに関連付けられたホストとユーザーの詳細については、展開された{entities}ビューを確認してください。",
"xpack.securitySolution.flyout.tour.entities.text": "エンティティ",
"xpack.securitySolution.flyout.tour.entities.title": "新しいホストとユーザーのインサイトがあります",
diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json
index 638293ca54d15..5fbe2d35b72a6 100644
--- a/x-pack/plugins/translations/translations/zh-CN.json
+++ b/x-pack/plugins/translations/translations/zh-CN.json
@@ -6846,14 +6846,7 @@
"securitySolutionPackages.features.featureRegistry.subFeatures.trustedApplications": "受信任的应用程序",
"securitySolutionPackages.features.featureRegistry.subFeatures.trustedApplications.description": "帮助减少与其他软件(通常指其他防病毒或终端安全应用程序)的冲突。",
"securitySolutionPackages.features.featureRegistry.subFeatures.trustedApplications.privilegesTooltip": "访问受信任的应用程序需要所有工作区。",
- "securitySolutionPackages.flyout.right.header.collapseDetailButtonAriaLabel": "折叠详情",
- "securitySolutionPackages.flyout.right.header.collapseDetailButtonLabel": "折叠详情",
- "securitySolutionPackages.flyout.right.header.expandDetailButtonAriaLabel": "展开详情",
- "securitySolutionPackages.flyout.right.header.expandDetailButtonLabel": "展开详情",
- "securitySolutionPackages.flyout.shared.errorDescription": "显示 {message} 时出现错误。",
- "securitySolutionPackages.flyout.shared.errorTitle": "无法显示 {title}。",
- "securitySolutionPackages.flyout.shared.ExpandablePanelButtonIconAriaLabel": "可展开面板切换按钮",
- "securitySolutionPackages.flyout.shared.expandablePanelLoadingAriaLabel": "可展开面板",
+ "sgcuritySolutionPackages.flyout.shared.errorDescription": "显示 {message} 时出现错误。",
"securitySolutionPackages.markdown.insight.upsell": "升级到{requiredLicense}以利用调查指南中的洞见",
"securitySolutionPackages.markdown.investigationGuideInteractions.upsell": "升级到 {requiredLicense} 以利用调查指南交互",
"securitySolutionPackages.navigation.landingLinks": "安全视图",
@@ -38520,6 +38513,10 @@
"xpack.securitySolution.flyout.right.alertPreview.ariaLabel": "预览 ID 为 {id} 的告警",
"xpack.securitySolution.flyout.right.eventCategoryText": "事件类别",
"xpack.securitySolution.flyout.right.header.assignedTitle": "被分配人",
+ "xpack.securitySolution.flyout.right.header.collapseDetailButtonAriaLabel": "折叠详情",
+ "xpack.securitySolution.flyout.right.header.collapseDetailButtonLabel": "折叠详情",
+ "xpack.securitySolution.flyout.right.header.expandDetailButtonAriaLabel": "展开详情",
+ "xpack.securitySolution.flyout.right.header.expandDetailButtonLabel": "展开详情",
"xpack.securitySolution.flyout.right.header.headerTitle": "文档详情",
"xpack.securitySolution.flyout.right.header.jsonTabLabel": "JSON",
"xpack.securitySolution.flyout.right.header.overviewTabLabel": "概览",
@@ -38597,6 +38594,10 @@
"xpack.securitySolution.flyout.right.visualizations.sessionPreview.sessionPreviewTitle": "会话查看器预览",
"xpack.securitySolution.flyout.right.visualizations.sessionPreview.sessionPreviewTooltip": "在时间线中调查",
"xpack.securitySolution.flyout.right.visualizations.sessionPreview.timeDescription": "处于",
+ "xpack.securitySolution.flyout.shared.errorDescription": "显示 {message} 时出现错误。",
+ "xpack.securitySolution.flyout.shared.errorTitle": "无法显示 {title}。",
+ "xpack.securitySolution.flyout.shared.ExpandablePanelButtonIconAriaLabel": "可展开面板切换按钮",
+ "xpack.securitySolution.flyout.shared.expandablePanelLoadingAriaLabel": "可展开面板",
"xpack.securitySolution.flyout.tour.entities.description": "请查阅展开的 {entities} 视图以了解与该告警有关的主机和用户的更多信息。",
"xpack.securitySolution.flyout.tour.entities.text": "实体",
"xpack.securitySolution.flyout.tour.entities.title": "有新主机和用户洞见可用",
diff --git a/yarn.lock b/yarn.lock
index 57ffec1e0a278..ccdb56cdc63e9 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -6416,10 +6416,6 @@
version "0.0.0"
uid ""
-"@kbn/security-solution-common@link:x-pack/packages/security-solution/common":
- version "0.0.0"
- uid ""
-
"@kbn/security-solution-distribution-bar@link:x-pack/packages/security-solution/distribution_bar":
version "0.0.0"
uid ""
From 0a1ec8f846cb0c78cfe3ddd0f2c1b4ccd1b3365b Mon Sep 17 00:00:00 2001
From: Alexey Antonov
Date: Mon, 4 Nov 2024 16:47:33 +0200
Subject: [PATCH 014/101] fix: [Stateful: Home page] Not accessible element,
showing number of active API keys, via keyboard (#197456)
Closes: #195209
This PR is based on the following comment:
> @cee-chen / @bhavyarm, could you please validate this issue? I'm not
sure if the badge should be keyboard accessible. On the other hand, I
think it might make sense to move active API keys inside the badge.
However, this is more of a design question rather than an a11y one.
_Originally posted by @alexwizp in
[#195209](https://github.com/elastic/kibana/issues/195209#issuecomment-2429091670)_
This PR move text inside badge to address a11y concerns.
## Screen:
---
.../shared/api_key/api_key_panel.tsx | 34 ++++++++-----------
.../panels/api_key_panel_content.tsx | 32 +++++++----------
2 files changed, 26 insertions(+), 40 deletions(-)
diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/api_key/api_key_panel.tsx b/x-pack/plugins/enterprise_search/public/applications/shared/api_key/api_key_panel.tsx
index 34c7ac66343c9..b9d5cf8c414d6 100644
--- a/x-pack/plugins/enterprise_search/public/applications/shared/api_key/api_key_panel.tsx
+++ b/x-pack/plugins/enterprise_search/public/applications/shared/api_key/api_key_panel.tsx
@@ -76,6 +76,7 @@ export const ApiKeyPanel: React.FC = () => {
{(copy) => (
{
{(copy) => (
{
-
-
-
- 0 ? 'success' : 'warning'}
- data-test-subj="api-keys-count-badge"
- >
- {apiKeys.length}
-
- ),
- }}
- />
-
-
-
+ 0 ? 'success' : 'warning'}
+ data-test-subj="api-keys-count-badge"
+ >
+
+
diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/getting_started/panels/api_key_panel_content.tsx b/x-pack/plugins/enterprise_search/public/applications/shared/getting_started/panels/api_key_panel_content.tsx
index ff271a3a3d79e..a220e077f0824 100644
--- a/x-pack/plugins/enterprise_search/public/applications/shared/getting_started/panels/api_key_panel_content.tsx
+++ b/x-pack/plugins/enterprise_search/public/applications/shared/getting_started/panels/api_key_panel_content.tsx
@@ -102,26 +102,18 @@ export const ApiKeyPanelContent: React.FC = ({ apiKeys, open
-
-
-
- 0 ? 'success' : 'warning'}
- data-test-subj="api-keys-count-badge"
- >
- {apiKeys?.length || 0}
-
- ),
- }}
- />
-
-
-
+ 0 ? 'success' : 'warning'}
+ data-test-subj="api-keys-count-badge"
+ >
+
+
From ddf55ea3a79ad7439dc02cb1f93291b1bc95c3b9 Mon Sep 17 00:00:00 2001
From: Karen Grigoryan
Date: Mon, 4 Nov 2024 16:09:12 +0100
Subject: [PATCH 015/101] [Security Solution][Data Quality Dashboard] fix
pattern state reset on ilm phase filter change (#198549)
addresses #196523
- Fixes ilm phase change propagation on patterns.
- Adds missing tests for useResultsRollup functionality
## UI changes
### Before
https://github.com/user-attachments/assets/78a1d809-6a9a-4bfc-88a9-079f829a2017
### After
https://github.com/user-attachments/assets/f689fcc9-e1c6-4ccf-a7ca-8f13e9507ba4
---
.../use_stored_pattern_results/index.test.tsx | 108 +++
.../use_stored_pattern_results/index.tsx | 53 ++
.../hooks/use_results_rollup/index.test.tsx | 685 ++++++++++++++++++
.../hooks/use_results_rollup/index.tsx | 66 +-
.../impl/data_quality_panel/index.tsx | 1 -
.../mock/test_providers/utils/format.ts | 17 +
.../get_merged_data_quality_context_props.ts | 11 +-
.../stub/get_pattern_rollup_stub/index.ts | 116 +++
8 files changed, 986 insertions(+), 71 deletions(-)
create mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/hooks/use_results_rollup/hooks/use_stored_pattern_results/index.test.tsx
create mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/hooks/use_results_rollup/hooks/use_stored_pattern_results/index.tsx
create mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/hooks/use_results_rollup/index.test.tsx
create mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/mock/test_providers/utils/format.ts
create mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/stub/get_pattern_rollup_stub/index.ts
diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/hooks/use_results_rollup/hooks/use_stored_pattern_results/index.test.tsx b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/hooks/use_results_rollup/hooks/use_stored_pattern_results/index.test.tsx
new file mode 100644
index 0000000000000..d58bf3af39d58
--- /dev/null
+++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/hooks/use_results_rollup/hooks/use_stored_pattern_results/index.test.tsx
@@ -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 { renderHook } from '@testing-library/react-hooks';
+import { notificationServiceMock } from '@kbn/core-notifications-browser-mocks';
+
+import { getHistoricalResultStub } from '../../../../stub/get_historical_result_stub';
+import { useStoredPatternResults } from '.';
+
+describe('useStoredPatternResults', () => {
+ const httpFetch = jest.fn();
+ const mockToasts = notificationServiceMock.createStartContract().toasts;
+
+ beforeEach(() => {
+ jest.clearAllMocks();
+ });
+
+ describe('when patterns are empty', () => {
+ it('should return an empty array and not call getStorageResults', () => {
+ const { result } = renderHook(() => useStoredPatternResults([], mockToasts, httpFetch));
+
+ expect(result.current).toEqual([]);
+ expect(httpFetch).not.toHaveBeenCalled();
+ });
+ });
+
+ describe('when patterns are provided', () => {
+ it('should fetch and return stored pattern results correctly', async () => {
+ const patterns = ['pattern1-*', 'pattern2-*'];
+
+ httpFetch.mockImplementation((path: string) => {
+ if (path === '/internal/ecs_data_quality_dashboard/results_latest/pattern1-*') {
+ return Promise.resolve([getHistoricalResultStub('pattern1-index1')]);
+ }
+
+ if (path === '/internal/ecs_data_quality_dashboard/results_latest/pattern2-*') {
+ return Promise.resolve([getHistoricalResultStub('pattern2-index1')]);
+ }
+
+ return Promise.reject(new Error('Invalid path'));
+ });
+
+ const { result, waitFor } = renderHook(() =>
+ useStoredPatternResults(patterns, mockToasts, httpFetch)
+ );
+
+ await waitFor(() => result.current.length > 0);
+
+ expect(httpFetch).toHaveBeenCalledTimes(2);
+
+ expect(httpFetch).toHaveBeenCalledWith(
+ '/internal/ecs_data_quality_dashboard/results_latest/pattern1-*',
+ {
+ method: 'GET',
+ signal: expect.any(AbortSignal),
+ version: '1',
+ }
+ );
+ expect(httpFetch).toHaveBeenCalledWith(
+ '/internal/ecs_data_quality_dashboard/results_latest/pattern2-*',
+ {
+ method: 'GET',
+ signal: expect.any(AbortSignal),
+ version: '1',
+ }
+ );
+
+ expect(result.current).toEqual([
+ {
+ pattern: 'pattern1-*',
+ results: {
+ 'pattern1-index1': {
+ docsCount: expect.any(Number),
+ error: null,
+ ilmPhase: expect.any(String),
+ incompatible: expect.any(Number),
+ indexName: 'pattern1-index1',
+ pattern: 'pattern1-*',
+ markdownComments: expect.any(Array),
+ sameFamily: expect.any(Number),
+ checkedAt: expect.any(Number),
+ },
+ },
+ },
+ {
+ pattern: 'pattern2-*',
+ results: {
+ 'pattern2-index1': {
+ docsCount: expect.any(Number),
+ error: null,
+ ilmPhase: expect.any(String),
+ incompatible: expect.any(Number),
+ indexName: 'pattern2-index1',
+ pattern: 'pattern2-*',
+ markdownComments: expect.any(Array),
+ sameFamily: expect.any(Number),
+ checkedAt: expect.any(Number),
+ },
+ },
+ },
+ ]);
+ });
+ });
+});
diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/hooks/use_results_rollup/hooks/use_stored_pattern_results/index.tsx b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/hooks/use_results_rollup/hooks/use_stored_pattern_results/index.tsx
new file mode 100644
index 0000000000000..17334c4b4a586
--- /dev/null
+++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/hooks/use_results_rollup/hooks/use_stored_pattern_results/index.tsx
@@ -0,0 +1,53 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+import { useEffect, useState } from 'react';
+import { IToasts } from '@kbn/core-notifications-browser';
+import { HttpHandler } from '@kbn/core-http-browser';
+import { isEmpty } from 'lodash/fp';
+
+import { DataQualityCheckResult } from '../../../../types';
+import { formatResultFromStorage, getStorageResults } from '../../utils/storage';
+
+export const useStoredPatternResults = (
+ patterns: string[],
+ toasts: IToasts,
+ httpFetch: HttpHandler
+) => {
+ const [storedPatternResults, setStoredPatternResults] = useState<
+ Array<{ pattern: string; results: Record }>
+ >([]);
+
+ useEffect(() => {
+ if (isEmpty(patterns)) {
+ return;
+ }
+
+ const abortController = new AbortController();
+ const fetchStoredPatternResults = async () => {
+ const requests = patterns.map((pattern) =>
+ getStorageResults({ pattern, httpFetch, abortController, toasts }).then((results = []) => ({
+ pattern,
+ results: Object.fromEntries(
+ results.map((storageResult) => [
+ storageResult.indexName,
+ formatResultFromStorage({ storageResult, pattern }),
+ ])
+ ),
+ }))
+ );
+
+ const patternResults = await Promise.all(requests);
+ if (patternResults?.length) {
+ setStoredPatternResults(patternResults);
+ }
+ };
+
+ fetchStoredPatternResults();
+ }, [httpFetch, patterns, toasts]);
+
+ return storedPatternResults;
+};
diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/hooks/use_results_rollup/index.test.tsx b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/hooks/use_results_rollup/index.test.tsx
new file mode 100644
index 0000000000000..bff3c3dd54f12
--- /dev/null
+++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/hooks/use_results_rollup/index.test.tsx
@@ -0,0 +1,685 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+// fixing timezone for Date
+// so when tests are run in different timezones, the results are consistent
+process.env.TZ = 'UTC';
+
+import { renderHook, act } from '@testing-library/react-hooks';
+import { notificationServiceMock } from '@kbn/core-notifications-browser-mocks';
+
+import type { TelemetryEvents } from '../../types';
+import { useStoredPatternResults } from './hooks/use_stored_pattern_results';
+import { mockPartitionedFieldMetadata } from '../../mock/partitioned_field_metadata/mock_partitioned_field_metadata';
+import { useResultsRollup } from '.';
+import { getPatternRollupStub } from '../../stub/get_pattern_rollup_stub';
+import { formatBytes, formatNumber } from '../../mock/test_providers/utils/format';
+
+jest.mock('./hooks/use_stored_pattern_results', () => ({
+ ...jest.requireActual('./hooks/use_stored_pattern_results'),
+ useStoredPatternResults: jest.fn().mockReturnValue([]),
+}));
+
+describe('useResultsRollup', () => {
+ const httpFetch = jest.fn();
+ const toasts = notificationServiceMock.createStartContract().toasts;
+
+ const mockTelemetryEvents: TelemetryEvents = {
+ reportDataQualityIndexChecked: jest.fn(),
+ reportDataQualityCheckAllCompleted: jest.fn(),
+ };
+
+ const patterns = ['auditbeat-*', 'packetbeat-*'];
+ const isILMAvailable = true;
+
+ const useStoredPatternResultsMock = useStoredPatternResults as jest.Mock;
+
+ beforeEach(() => {
+ jest.clearAllMocks();
+ useStoredPatternResultsMock.mockReturnValue([]);
+ });
+
+ describe('initialization', () => {
+ it('should initialize with default values', () => {
+ const { result } = renderHook(() =>
+ useResultsRollup({
+ httpFetch,
+ toasts,
+ patterns,
+ isILMAvailable,
+ telemetryEvents: mockTelemetryEvents,
+ })
+ );
+
+ expect(result.current.patternIndexNames).toEqual({});
+ expect(result.current.patternRollups).toEqual({});
+ expect(result.current.totalDocsCount).toBe(0);
+ expect(result.current.totalIncompatible).toBeUndefined();
+ expect(result.current.totalIndices).toBe(0);
+ expect(result.current.totalIndicesChecked).toBe(0);
+ expect(result.current.totalSameFamily).toBeUndefined();
+ expect(result.current.totalSizeInBytes).toBe(0);
+ });
+
+ it('should fetch stored pattern results and update patternRollups from it', () => {
+ const mockStoredResults = [
+ {
+ pattern: 'auditbeat-*',
+ results: {
+ 'auditbeat-7.11.0-2021.01.01': {
+ indexName: 'auditbeat-7.11.0-2021.01.01',
+ pattern: 'auditbeat-*',
+ docsCount: 500,
+ incompatible: 0,
+ error: null,
+ ilmPhase: 'hot',
+ sameFamily: 0,
+ markdownComments: [],
+ checkedAt: Date.now(),
+ },
+ },
+ },
+ ];
+
+ useStoredPatternResultsMock.mockReturnValue(mockStoredResults);
+
+ const { result } = renderHook(() =>
+ useResultsRollup({
+ httpFetch,
+ toasts,
+ patterns: ['auditbeat-*'],
+ isILMAvailable,
+ telemetryEvents: mockTelemetryEvents,
+ })
+ );
+
+ expect(useStoredPatternResultsMock).toHaveBeenCalledWith(['auditbeat-*'], toasts, httpFetch);
+
+ expect(result.current.patternRollups).toEqual({
+ 'auditbeat-*': {
+ pattern: 'auditbeat-*',
+ results: {
+ 'auditbeat-7.11.0-2021.01.01': expect.any(Object),
+ },
+ },
+ });
+ });
+ });
+
+ describe('updatePatternIndexNames', () => {
+ it('should update pattern index names', () => {
+ const { result } = renderHook(() =>
+ useResultsRollup({
+ httpFetch,
+ toasts,
+ patterns,
+ isILMAvailable,
+ telemetryEvents: mockTelemetryEvents,
+ })
+ );
+
+ act(() => {
+ result.current.updatePatternIndexNames({
+ pattern: 'packetbeat-*',
+ indexNames: ['packetbeat-7.10.0-2021.01.01'],
+ });
+ });
+
+ expect(result.current.patternIndexNames).toEqual({
+ 'packetbeat-*': ['packetbeat-7.10.0-2021.01.01'],
+ });
+ });
+ });
+
+ describe('updatePatternRollup', () => {
+ it('should update pattern rollup when called', () => {
+ const { result } = renderHook(() =>
+ useResultsRollup({
+ httpFetch,
+ toasts,
+ patterns,
+ isILMAvailable,
+ telemetryEvents: mockTelemetryEvents,
+ })
+ );
+
+ const patternRollup = getPatternRollupStub('packetbeat-*', 1);
+
+ expect(result.current.patternRollups).toEqual({});
+
+ act(() => {
+ result.current.updatePatternRollup(patternRollup);
+ });
+
+ expect(result.current.patternRollups).toEqual({
+ 'packetbeat-*': patternRollup,
+ });
+ });
+ });
+
+ describe('onCheckCompleted', () => {
+ describe('when invoked with successful check data', () => {
+ beforeEach(() => {
+ jest.useFakeTimers();
+ jest.setSystemTime(new Date('2021-10-07T00:00:00Z').getTime());
+ });
+
+ afterEach(() => {
+ jest.useRealTimers();
+ });
+
+ it('should update patternRollup with said data, report to telemetry and persist it in storage', () => {
+ const { result } = renderHook(() =>
+ useResultsRollup({
+ httpFetch,
+ toasts,
+ patterns,
+ isILMAvailable,
+ telemetryEvents: mockTelemetryEvents,
+ })
+ );
+
+ const patternRollup = getPatternRollupStub('packetbeat-*', 1);
+
+ act(() => {
+ result.current.updatePatternRollup(patternRollup);
+ });
+
+ expect(result.current.patternRollups['packetbeat-*'].results?.['.ds-packetbeat-1']).toEqual(
+ {
+ checkedAt: new Date('2021-10-07T00:00:00Z').getTime(),
+ docsCount: 1000000,
+ error: null,
+ ilmPhase: 'hot',
+ incompatible: 0,
+ indexName: '.ds-packetbeat-1',
+ markdownComments: ['foo', 'bar', 'baz'],
+ pattern: 'packetbeat-*',
+ sameFamily: 0,
+ }
+ );
+
+ jest.advanceTimersByTime(1000);
+
+ const mockOnCheckCompletedOpts = {
+ batchId: 'test-batch',
+ checkAllStartTime: Date.now(),
+ error: null,
+ formatBytes,
+ formatNumber,
+ indexName: '.ds-packetbeat-1',
+ partitionedFieldMetadata: mockPartitionedFieldMetadata,
+ pattern: 'packetbeat-*',
+ requestTime: 1500,
+ isLastCheck: true,
+ isCheckAll: true,
+ };
+
+ jest.advanceTimersByTime(1000);
+
+ act(() => {
+ result.current.onCheckCompleted(mockOnCheckCompletedOpts);
+ });
+
+ expect(result.current.patternRollups['packetbeat-*'].results?.['.ds-packetbeat-1']).toEqual(
+ {
+ checkedAt: new Date('2021-10-07T00:00:02Z').getTime(),
+ docsCount: 1000000,
+ error: null,
+ ilmPhase: 'hot',
+ incompatible: 3,
+ indexName: '.ds-packetbeat-1',
+ markdownComments: expect.any(Array),
+ pattern: 'packetbeat-*',
+ sameFamily: 0,
+ }
+ );
+
+ expect(mockTelemetryEvents.reportDataQualityIndexChecked).toHaveBeenCalledWith({
+ batchId: 'test-batch',
+ ecsVersion: '8.11.0',
+ errorCount: 0,
+ ilmPhase: 'hot',
+ indexId: 'uuid-1',
+ indexName: '.ds-packetbeat-1',
+ isCheckAll: true,
+ numberOfCustomFields: 4,
+ numberOfDocuments: 1000000,
+ numberOfEcsFields: 2,
+ numberOfFields: 9,
+ numberOfIncompatibleFields: 3,
+ numberOfIndices: 1,
+ numberOfIndicesChecked: 1,
+ numberOfSameFamily: 0,
+ sameFamilyFields: [],
+ sizeInBytes: 500000000,
+ timeConsumedMs: 1500,
+ unallowedMappingFields: ['host.name', 'source.ip'],
+ unallowedValueFields: ['event.category'],
+ });
+ expect(mockTelemetryEvents.reportDataQualityCheckAllCompleted).toHaveBeenCalledWith({
+ batchId: 'test-batch',
+ ecsVersion: '8.11.0',
+ isCheckAll: true,
+ numberOfDocuments: 1000000,
+ numberOfIncompatibleFields: 3,
+ numberOfIndices: 1,
+ numberOfIndicesChecked: 1,
+ numberOfSameFamily: 0,
+ sizeInBytes: 500000000,
+ timeConsumedMs: 1000,
+ });
+
+ expect(httpFetch).toHaveBeenCalledWith('/internal/ecs_data_quality_dashboard/results', {
+ method: 'POST',
+ version: '1',
+ signal: expect.any(AbortSignal),
+ body: expect.any(String),
+ });
+
+ const body = JSON.parse(httpFetch.mock.calls[0][1].body);
+
+ expect(body).toEqual({
+ batchId: 'test-batch',
+ indexName: '.ds-packetbeat-1',
+ indexPattern: 'packetbeat-*',
+ isCheckAll: true,
+ checkedAt: new Date('2021-10-07T00:00:02Z').getTime(),
+ docsCount: 1000000,
+ totalFieldCount: 9,
+ ecsFieldCount: 2,
+ customFieldCount: 4,
+ incompatibleFieldCount: 3,
+ incompatibleFieldMappingItems: [
+ {
+ fieldName: 'host.name',
+ expectedValue: 'keyword',
+ actualValue: 'text',
+ description:
+ 'Name of the host.\nIt can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use.',
+ },
+ {
+ fieldName: 'source.ip',
+ expectedValue: 'ip',
+ actualValue: 'text',
+ description: 'IP address of the source (IPv4 or IPv6).',
+ },
+ ],
+ incompatibleFieldValueItems: [
+ {
+ fieldName: 'event.category',
+ expectedValues: [
+ 'authentication',
+ 'configuration',
+ 'database',
+ 'driver',
+ 'email',
+ 'file',
+ 'host',
+ 'iam',
+ 'intrusion_detection',
+ 'malware',
+ 'network',
+ 'package',
+ 'process',
+ 'registry',
+ 'session',
+ 'threat',
+ 'vulnerability',
+ 'web',
+ ],
+ actualValues: [
+ { name: 'an_invalid_category', count: 2 },
+ { name: 'theory', count: 1 },
+ ],
+ description:
+ 'This is one of four ECS Categorization Fields, and indicates the second level in the ECS category hierarchy.\n`event.category` represents the "big buckets" of ECS categories. For example, filtering on `event.category:process` yields all events relating to process activity. This field is closely related to `event.type`, which is used as a subcategory.\nThis field is an array. This will allow proper categorization of some events that fall in multiple categories.',
+ },
+ ],
+ sameFamilyFieldCount: 0,
+ sameFamilyFields: [],
+ sameFamilyFieldItems: [],
+ unallowedMappingFields: ['host.name', 'source.ip'],
+ unallowedValueFields: ['event.category'],
+ sizeInBytes: 500000000,
+ ilmPhase: 'hot',
+ markdownComments: [
+ '### .ds-packetbeat-1\n',
+ '| Result | Index | Docs | Incompatible fields | ILM Phase | Size |\n|--------|-------|------|---------------------|-----------|------|\n| ❌ | .ds-packetbeat-1 | 1,000,000 (100.0%) | 3 | `hot` | 476.8MB |\n\n',
+ '### **Incompatible fields** `3` **Same family** `0` **Custom fields** `4` **ECS compliant fields** `2` **All fields** `9`\n',
+ "#### 3 incompatible fields\n\nFields are incompatible with ECS when index mappings, or the values of the fields in the index, don't conform to the Elastic Common Schema (ECS), version 8.11.0.\n\n❌ Detection engine rules referencing these fields may not match them correctly\n❌ Pages may not display some events or fields due to unexpected field mappings or values\n❌ Mappings or field values that don't comply with ECS are not supported\n",
+ '\n#### Incompatible field mappings - .ds-packetbeat-1\n\n\n| Field | ECS mapping type (expected) | Index mapping type (actual) | \n|-------|-----------------------------|-----------------------------|\n| host.name | `keyword` | `text` |\n| source.ip | `ip` | `text` |\n\n#### Incompatible field values - .ds-packetbeat-1\n\n\n| Field | ECS values (expected) | Document values (actual) | \n|-------|-----------------------|--------------------------|\n| event.category | `authentication`, `configuration`, `database`, `driver`, `email`, `file`, `host`, `iam`, `intrusion_detection`, `malware`, `network`, `package`, `process`, `registry`, `session`, `threat`, `vulnerability`, `web` | `an_invalid_category` (2), `theory` (1) |\n\n',
+ ],
+ ecsVersion: '8.11.0',
+ indexId: 'uuid-1',
+ error: null,
+ });
+ });
+
+ describe('when isILMAvailable is false', () => {
+ it('should omit ilmPhase and nullify sizeInBytes when storing payload', () => {
+ const { result } = renderHook(() =>
+ useResultsRollup({
+ httpFetch,
+ toasts,
+ patterns,
+ isILMAvailable: false,
+ telemetryEvents: mockTelemetryEvents,
+ })
+ );
+
+ const patternRollup = getPatternRollupStub('packetbeat-*', 1, false);
+
+ act(() => {
+ result.current.updatePatternRollup(patternRollup);
+ });
+
+ jest.advanceTimersByTime(1000);
+
+ const mockOnCheckCompletedOpts = {
+ batchId: 'test-batch',
+ checkAllStartTime: Date.now(),
+ error: null,
+ formatBytes,
+ formatNumber,
+ indexName: '.ds-packetbeat-1',
+ partitionedFieldMetadata: mockPartitionedFieldMetadata,
+ pattern: 'packetbeat-*',
+ requestTime: 1500,
+ isLastCheck: true,
+ isCheckAll: true,
+ };
+
+ jest.advanceTimersByTime(1000);
+
+ act(() => {
+ result.current.onCheckCompleted(mockOnCheckCompletedOpts);
+ });
+
+ expect(mockTelemetryEvents.reportDataQualityIndexChecked).toHaveBeenCalledWith({
+ batchId: 'test-batch',
+ ecsVersion: '8.11.0',
+ errorCount: 0,
+ ilmPhase: undefined,
+ indexId: 'uuid-1',
+ indexName: '.ds-packetbeat-1',
+ isCheckAll: true,
+ numberOfCustomFields: 4,
+ numberOfDocuments: 1000000,
+ numberOfEcsFields: 2,
+ numberOfFields: 9,
+ numberOfIncompatibleFields: 3,
+ numberOfIndices: 1,
+ numberOfIndicesChecked: 1,
+ numberOfSameFamily: 0,
+ sameFamilyFields: [],
+ sizeInBytes: undefined,
+ timeConsumedMs: 1500,
+ unallowedMappingFields: ['host.name', 'source.ip'],
+ unallowedValueFields: ['event.category'],
+ });
+ expect(mockTelemetryEvents.reportDataQualityCheckAllCompleted).toHaveBeenCalledWith({
+ batchId: 'test-batch',
+ ecsVersion: '8.11.0',
+ isCheckAll: true,
+ numberOfDocuments: 1000000,
+ numberOfIncompatibleFields: 3,
+ numberOfIndices: 1,
+ numberOfIndicesChecked: 1,
+ numberOfSameFamily: 0,
+ sizeInBytes: undefined,
+ timeConsumedMs: 1000,
+ });
+
+ expect(httpFetch).toHaveBeenCalledWith('/internal/ecs_data_quality_dashboard/results', {
+ method: 'POST',
+ version: '1',
+ signal: expect.any(AbortSignal),
+ body: expect.any(String),
+ });
+
+ const body = JSON.parse(httpFetch.mock.calls[0][1].body);
+
+ expect(body).toEqual({
+ batchId: 'test-batch',
+ indexName: '.ds-packetbeat-1',
+ indexPattern: 'packetbeat-*',
+ isCheckAll: true,
+ checkedAt: new Date('2021-10-07T00:00:02Z').getTime(),
+ docsCount: 1000000,
+ totalFieldCount: 9,
+ ecsFieldCount: 2,
+ customFieldCount: 4,
+ incompatibleFieldCount: 3,
+ incompatibleFieldMappingItems: [
+ {
+ fieldName: 'host.name',
+ expectedValue: 'keyword',
+ actualValue: 'text',
+ description:
+ 'Name of the host.\nIt can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use.',
+ },
+ {
+ fieldName: 'source.ip',
+ expectedValue: 'ip',
+ actualValue: 'text',
+ description: 'IP address of the source (IPv4 or IPv6).',
+ },
+ ],
+ incompatibleFieldValueItems: [
+ {
+ fieldName: 'event.category',
+ expectedValues: [
+ 'authentication',
+ 'configuration',
+ 'database',
+ 'driver',
+ 'email',
+ 'file',
+ 'host',
+ 'iam',
+ 'intrusion_detection',
+ 'malware',
+ 'network',
+ 'package',
+ 'process',
+ 'registry',
+ 'session',
+ 'threat',
+ 'vulnerability',
+ 'web',
+ ],
+ actualValues: [
+ { name: 'an_invalid_category', count: 2 },
+ { name: 'theory', count: 1 },
+ ],
+ description:
+ 'This is one of four ECS Categorization Fields, and indicates the second level in the ECS category hierarchy.\n`event.category` represents the "big buckets" of ECS categories. For example, filtering on `event.category:process` yields all events relating to process activity. This field is closely related to `event.type`, which is used as a subcategory.\nThis field is an array. This will allow proper categorization of some events that fall in multiple categories.',
+ },
+ ],
+ sameFamilyFieldCount: 0,
+ sameFamilyFields: [],
+ sameFamilyFieldItems: [],
+ unallowedMappingFields: ['host.name', 'source.ip'],
+ unallowedValueFields: ['event.category'],
+ ilmPhase: undefined,
+ sizeInBytes: 0,
+ markdownComments: [
+ '### .ds-packetbeat-1\n',
+ '| Result | Index | Docs | Incompatible fields |\n|--------|-------|------|---------------------|\n| ❌ | .ds-packetbeat-1 | 1,000,000 (100.0%) | 3 |\n\n',
+ '### **Incompatible fields** `3` **Same family** `0` **Custom fields** `4` **ECS compliant fields** `2` **All fields** `9`\n',
+ "#### 3 incompatible fields\n\nFields are incompatible with ECS when index mappings, or the values of the fields in the index, don't conform to the Elastic Common Schema (ECS), version 8.11.0.\n\n❌ Detection engine rules referencing these fields may not match them correctly\n❌ Pages may not display some events or fields due to unexpected field mappings or values\n❌ Mappings or field values that don't comply with ECS are not supported\n",
+ '\n#### Incompatible field mappings - .ds-packetbeat-1\n\n\n| Field | ECS mapping type (expected) | Index mapping type (actual) | \n|-------|-----------------------------|-----------------------------|\n| host.name | `keyword` | `text` |\n| source.ip | `ip` | `text` |\n\n#### Incompatible field values - .ds-packetbeat-1\n\n\n| Field | ECS values (expected) | Document values (actual) | \n|-------|-----------------------|--------------------------|\n| event.category | `authentication`, `configuration`, `database`, `driver`, `email`, `file`, `host`, `iam`, `intrusion_detection`, `malware`, `network`, `package`, `process`, `registry`, `session`, `threat`, `vulnerability`, `web` | `an_invalid_category` (2), `theory` (1) |\n\n',
+ ],
+ ecsVersion: '8.11.0',
+ indexId: 'uuid-1',
+ error: null,
+ });
+ });
+ });
+ });
+
+ describe('when check fails with error message and no partitionedFieldMetadata', () => {
+ it('should update patternRollup with error message, reset state without persisting in storage', () => {
+ const { result } = renderHook(() =>
+ useResultsRollup({
+ httpFetch,
+ toasts,
+ patterns,
+ isILMAvailable,
+ telemetryEvents: mockTelemetryEvents,
+ })
+ );
+
+ const patternRollup = getPatternRollupStub('packetbeat-*', 1);
+
+ act(() => {
+ result.current.updatePatternRollup(patternRollup);
+ });
+
+ const mockOnCheckCompletedOpts = {
+ batchId: 'test-batch',
+ checkAllStartTime: Date.now(),
+ error: 'Something went wrong',
+ formatBytes,
+ formatNumber,
+ indexName: '.ds-packetbeat-1',
+ partitionedFieldMetadata: null,
+ pattern: 'packetbeat-*',
+ requestTime: 1500,
+ isLastCheck: true,
+ isCheckAll: true,
+ };
+
+ act(() => {
+ result.current.onCheckCompleted(mockOnCheckCompletedOpts);
+ });
+
+ expect(result.current.patternRollups['packetbeat-*'].results?.['.ds-packetbeat-1']).toEqual(
+ {
+ checkedAt: undefined,
+ docsCount: 1000000,
+ error: 'Something went wrong',
+ ilmPhase: 'hot',
+ incompatible: undefined,
+ indexName: '.ds-packetbeat-1',
+ markdownComments: expect.any(Array),
+ pattern: 'packetbeat-*',
+ sameFamily: undefined,
+ }
+ );
+
+ expect(mockTelemetryEvents.reportDataQualityIndexChecked).not.toHaveBeenCalled();
+
+ expect(httpFetch).not.toHaveBeenCalledWith(
+ '/internal/ecs_data_quality_dashboard/results',
+ expect.any(Object)
+ );
+ });
+ });
+
+ describe('edge cases', () => {
+ describe('given no error nor partitionedFieldMetadata', () => {
+ it('should reset result state accordingly and not invoke telemetry report nor persist in storage', () => {
+ const { result } = renderHook(() =>
+ useResultsRollup({
+ httpFetch,
+ toasts,
+ patterns,
+ isILMAvailable,
+ telemetryEvents: mockTelemetryEvents,
+ })
+ );
+
+ const patternRollup = getPatternRollupStub('packetbeat-*', 1);
+
+ act(() => {
+ result.current.updatePatternRollup(patternRollup);
+ });
+
+ const mockOnCheckCompletedOpts = {
+ batchId: 'test-batch',
+ checkAllStartTime: Date.now(),
+ error: null,
+ formatBytes,
+ formatNumber,
+ indexName: '.ds-packetbeat-1',
+ partitionedFieldMetadata: null,
+ pattern: 'packetbeat-*',
+ requestTime: 1500,
+ isLastCheck: true,
+ isCheckAll: true,
+ };
+
+ act(() => {
+ result.current.onCheckCompleted(mockOnCheckCompletedOpts);
+ });
+
+ expect(
+ result.current.patternRollups['packetbeat-*'].results?.['.ds-packetbeat-1']
+ ).toEqual({
+ checkedAt: undefined,
+ docsCount: 1000000,
+ error: null,
+ ilmPhase: 'hot',
+ incompatible: undefined,
+ indexName: '.ds-packetbeat-1',
+ markdownComments: expect.any(Array),
+ pattern: 'packetbeat-*',
+ sameFamily: undefined,
+ });
+
+ expect(mockTelemetryEvents.reportDataQualityIndexChecked).not.toHaveBeenCalled();
+
+ expect(httpFetch).not.toHaveBeenCalledWith(
+ '/internal/ecs_data_quality_dashboard/results',
+ expect.any(Object)
+ );
+ });
+ });
+ });
+ });
+
+ describe('calculating totals', () => {
+ describe('when patternRollups change', () => {
+ it('should update totals', () => {
+ const { result } = renderHook(() =>
+ useResultsRollup({
+ httpFetch,
+ toasts,
+ patterns: ['packetbeat-*', 'auditbeat-*'],
+ isILMAvailable,
+ telemetryEvents: mockTelemetryEvents,
+ })
+ );
+
+ const patternRollup1 = getPatternRollupStub('packetbeat-*', 1);
+ const patternRollup2 = getPatternRollupStub('auditbeat-*', 1);
+
+ expect(result.current.totalIndices).toBe(0);
+ expect(result.current.totalDocsCount).toBe(0);
+ expect(result.current.totalSizeInBytes).toBe(0);
+
+ act(() => {
+ result.current.updatePatternRollup(patternRollup1);
+ });
+
+ expect(result.current.totalIndices).toEqual(1);
+ expect(result.current.totalDocsCount).toEqual(1000000);
+ expect(result.current.totalSizeInBytes).toEqual(500000000);
+
+ act(() => {
+ result.current.updatePatternRollup(patternRollup2);
+ });
+
+ expect(result.current.totalIndices).toEqual(2);
+ expect(result.current.totalDocsCount).toEqual(2000000);
+ expect(result.current.totalSizeInBytes).toEqual(1000000000);
+ });
+ });
+ });
+});
diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/hooks/use_results_rollup/index.tsx b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/hooks/use_results_rollup/index.tsx
index 28b36765a245b..d95f1d1b7f20f 100644
--- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/hooks/use_results_rollup/index.tsx
+++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/hooks/use_results_rollup/index.tsx
@@ -21,83 +21,29 @@ import {
getTotalPatternSameFamily,
getIndexId,
} from './utils/stats';
-import {
- getStorageResults,
- postStorageResult,
- formatStorageResult,
- formatResultFromStorage,
-} from './utils/storage';
+import { postStorageResult, formatStorageResult } from './utils/storage';
import { getPatternRollupsWithLatestCheckResult } from './utils/get_pattern_rollups_with_latest_check_result';
-import type {
- DataQualityCheckResult,
- OnCheckCompleted,
- PatternRollup,
- TelemetryEvents,
-} from '../../types';
+import type { OnCheckCompleted, PatternRollup, TelemetryEvents } from '../../types';
import {
getEscapedIncompatibleMappingsFields,
getEscapedIncompatibleValuesFields,
getEscapedSameFamilyFields,
} from './utils/metadata';
import { UseResultsRollupReturnValue } from './types';
-import { useIsMountedRef } from '../use_is_mounted_ref';
import { getDocsCount, getIndexIncompatible, getSizeInBytes } from '../../utils/stats';
import { getIlmPhase } from '../../utils/get_ilm_phase';
+import { useStoredPatternResults } from './hooks/use_stored_pattern_results';
interface Props {
- ilmPhases: string[];
patterns: string[];
toasts: IToasts;
httpFetch: HttpHandler;
telemetryEvents: TelemetryEvents;
isILMAvailable: boolean;
}
-const useStoredPatternResults = (patterns: string[], toasts: IToasts, httpFetch: HttpHandler) => {
- const { isMountedRef } = useIsMountedRef();
- const [storedPatternResults, setStoredPatternResults] = useState<
- Array<{ pattern: string; results: Record }>
- >([]);
-
- useEffect(() => {
- if (isEmpty(patterns)) {
- return;
- }
-
- let ignore = false;
- const abortController = new AbortController();
- const fetchStoredPatternResults = async () => {
- const requests = patterns.map((pattern) =>
- getStorageResults({ pattern, httpFetch, abortController, toasts }).then((results = []) => ({
- pattern,
- results: Object.fromEntries(
- results.map((storageResult) => [
- storageResult.indexName,
- formatResultFromStorage({ storageResult, pattern }),
- ])
- ),
- }))
- );
- const patternResults = await Promise.all(requests);
- if (patternResults?.length && !ignore) {
- if (isMountedRef.current) {
- setStoredPatternResults(patternResults);
- }
- }
- };
-
- fetchStoredPatternResults();
- return () => {
- ignore = true;
- };
- }, [httpFetch, isMountedRef, patterns, toasts]);
-
- return storedPatternResults;
-};
-
export const useResultsRollup = ({
httpFetch,
toasts,
- ilmPhases,
patterns,
isILMAvailable,
telemetryEvents,
@@ -247,12 +193,6 @@ export const useResultsRollup = ({
[httpFetch, isILMAvailable, telemetryEvents, toasts]
);
- useEffect(() => {
- // reset all state
- setPatternRollups({});
- setPatternIndexNames({});
- }, [ilmPhases, patterns]);
-
const useResultsRollupReturnValue = useMemo(
() => ({
onCheckCompleted,
diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/index.tsx b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/index.tsx
index 7d1a106d83570..b6d2736d7e175 100644
--- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/index.tsx
+++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/index.tsx
@@ -104,7 +104,6 @@ const DataQualityPanelComponent: React.FC = ({
);
const resultsRollupHookReturnValue = useResultsRollup({
- ilmPhases,
patterns,
httpFetch,
toasts,
diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/mock/test_providers/utils/format.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/mock/test_providers/utils/format.ts
new file mode 100644
index 0000000000000..844b573b61cad
--- /dev/null
+++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/mock/test_providers/utils/format.ts
@@ -0,0 +1,17 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+import numeral from '@elastic/numeral';
+
+import { EMPTY_STAT } from '../../../constants';
+
+const defaultBytesFormat = '0,0.[0]b';
+export const formatBytes = (value: number | undefined) =>
+ value != null ? numeral(value).format(defaultBytesFormat) : EMPTY_STAT;
+
+const defaultNumberFormat = '0,0.[000]';
+export const formatNumber = (value: number | undefined) =>
+ value != null ? numeral(value).format(defaultNumberFormat) : EMPTY_STAT;
diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/mock/test_providers/utils/get_merged_data_quality_context_props.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/mock/test_providers/utils/get_merged_data_quality_context_props.ts
index 264198e510b5e..a8df6818605a1 100644
--- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/mock/test_providers/utils/get_merged_data_quality_context_props.ts
+++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/mock/test_providers/utils/get_merged_data_quality_context_props.ts
@@ -5,10 +5,9 @@
* 2.0.
*/
-import numeral from '@elastic/numeral';
-
import { DataQualityProviderProps } from '../../../data_quality_context';
-import { EMPTY_STAT } from '../../../constants';
+
+import { formatBytes as formatBytesMock, formatNumber as formatNumberMock } from './format';
export const getMergedDataQualityContextProps = (
dataQualityContextProps?: Partial
@@ -36,10 +35,8 @@ export const getMergedDataQualityContextProps = (
addSuccessToast: jest.fn(),
canUserCreateAndReadCases: jest.fn(() => true),
endDate: null,
- formatBytes: (value: number | undefined) =>
- value != null ? numeral(value).format('0,0.[0]b') : EMPTY_STAT,
- formatNumber: (value: number | undefined) =>
- value != null ? numeral(value).format('0,0.[000]') : EMPTY_STAT,
+ formatBytes: formatBytesMock,
+ formatNumber: formatNumberMock,
isAssistantEnabled: true,
lastChecked: '2023-03-28T22:27:28.159Z',
openCreateCaseFlyout: jest.fn(),
diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/stub/get_pattern_rollup_stub/index.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/stub/get_pattern_rollup_stub/index.ts
new file mode 100644
index 0000000000000..38aa129a6ec9a
--- /dev/null
+++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/stub/get_pattern_rollup_stub/index.ts
@@ -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 { PatternRollup } from '../../types';
+
+const phases = ['hot', 'warm', 'cold', 'frozen'] as const;
+
+/**
+ *
+ * This function derives ilmExplain, results, stats and ilmExplainPhaseCounts
+ * from the provided pattern and indicesCount for the purpose of simplifying
+ * stubbing of resultsRollup in tests.
+ *
+ * @param pattern - The index pattern to simulate. Defaults to `'packetbeat-*'`.
+ * @param indicesCount - The number of indices to generate. Defaults to `2`.
+ * @param isILMAvailable - Whether ILM is available. Defaults to `true`.
+ * @returns An object containing stubbed pattern rollup data
+ */
+export const getPatternRollupStub = (
+ pattern = 'packetbeat-*',
+ indicesCount = 2,
+ isILMAvailable = true
+): PatternRollup => {
+ // Derive ilmExplain from isILMAvailable, pattern and indicesCount
+ const ilmExplain = isILMAvailable
+ ? Object.fromEntries(
+ Array.from({ length: indicesCount }).map((_, i) => {
+ const indexName = pattern.replace('*', `${i + 1}`);
+ const dsIndexName = `.ds-${indexName}`;
+ // Cycle through phases
+ const phase = phases[i % phases.length];
+ return [
+ dsIndexName,
+ {
+ index: dsIndexName,
+ managed: true,
+ policy: pattern,
+ phase,
+ },
+ ];
+ })
+ )
+ : null;
+
+ // Derive ilmExplainPhaseCounts from ilmExplain
+ const ilmExplainPhaseCounts = ilmExplain
+ ? phases.reduce(
+ (counts, phase) => ({
+ ...counts,
+ [phase]: Object.values(ilmExplain).filter((explain) => explain.phase === phase).length,
+ }),
+ { hot: 0, warm: 0, cold: 0, frozen: 0, unmanaged: 0 }
+ )
+ : undefined;
+
+ // Derive results from pattern and indicesCount
+ const results = Object.fromEntries(
+ Array.from({ length: indicesCount }, (_, i) => {
+ const indexName = pattern.replace('*', `${i + 1}`);
+ const dsIndexName = `.ds-${indexName}`;
+ return [
+ dsIndexName,
+ {
+ docsCount: 1000000 + i * 100000, // Example doc count
+ error: null,
+ ilmPhase: ilmExplain?.[dsIndexName].phase,
+ incompatible: i,
+ indexName: dsIndexName,
+ markdownComments: ['foo', 'bar', 'baz'],
+ pattern,
+ sameFamily: i,
+ checkedAt: Date.now(),
+ },
+ ];
+ })
+ );
+
+ // Derive stats from isILMAvailable, pattern and indicesCount
+ const stats = Object.fromEntries(
+ Array.from({ length: indicesCount }, (_, i) => {
+ const indexName = pattern.replace('*', `${i + 1}`);
+ const dsIndexName = `.ds-${indexName}`;
+ return [
+ dsIndexName,
+ {
+ uuid: `uuid-${i + 1}`,
+ size_in_bytes: isILMAvailable ? 500000000 + i * 10000000 : null,
+ name: dsIndexName,
+ num_docs: results[dsIndexName].docsCount,
+ },
+ ];
+ })
+ );
+
+ // Derive total docsCount and sizeInBytes from stats
+ const totalDocsCount = Object.values(stats).reduce((sum, stat) => sum + stat.num_docs, 0);
+ const totalSizeInBytes = isILMAvailable
+ ? Object.values(stats).reduce((sum, stat) => sum + (stat.size_in_bytes ?? 0), 0)
+ : undefined;
+
+ return {
+ docsCount: totalDocsCount,
+ error: null,
+ pattern,
+ ilmExplain,
+ ilmExplainPhaseCounts,
+ indices: indicesCount,
+ results,
+ sizeInBytes: totalSizeInBytes,
+ stats,
+ };
+};
From 3aa60245c0443419669fdaaee5a7ded85dbd0923 Mon Sep 17 00:00:00 2001
From: Alex Szabo
Date: Mon, 4 Nov 2024 16:10:22 +0100
Subject: [PATCH 016/101] [ci] Add flag to keep build-on-ready functionality
(#198397)
## Summary
add `build_on_ready=true`
Needed after: https://github.com/elastic/buildkite-pr-bot/pull/84
---
.buildkite/pull_requests.json | 1 +
1 file changed, 1 insertion(+)
diff --git a/.buildkite/pull_requests.json b/.buildkite/pull_requests.json
index cbc0e9df03dc8..e88982ec00d9d 100644
--- a/.buildkite/pull_requests.json
+++ b/.buildkite/pull_requests.json
@@ -14,6 +14,7 @@
"build_on_commit": true,
"build_on_comment": true,
"build_drafts": false,
+ "build_on_ready": true,
"trigger_comment_regex": "^(?:(?:buildkite\\W+)?(?:build|test)\\W+(?:this|it))|^\\/ci$",
"always_trigger_comment_regex": "^(?:(?:buildkite\\W+)?(?:build|test)\\W+(?:this|it))|^\\/ci$",
"skip_ci_labels": ["skip-ci"],
From b12e7d0e79af8150ea9f2b5940a6ad1d428cff72 Mon Sep 17 00:00:00 2001
From: Sid
Date: Mon, 4 Nov 2024 16:57:45 +0100
Subject: [PATCH 017/101] [Authz] Fix description generation for Open API spec
for an API (#198054)
Closes https://github.com/elastic/kibana/issues/198058.
Adds a fix for https://github.com/elastic/kibana/pull/197001
## Summary
There was an error in how descriptions were added to the Open API spec
for a given route - for the specific case when both a route description
and security authz required privileges were present. The code with the
error is:
https://github.com/elastic/kibana/pull/197001/files#diff-5942307fac5a7b321e7f317bacd2837a7f766f3e79d5aad285513b1f82951b46R79-R80
This PR fixes that error.
Also updated: Description field for required privileges now includes a
more intuitive descriptor: `Required authorization` as well as a line
break.
---------
Co-authored-by: Elastic Machine
Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
---
oas_docs/bundle.json | 4 +--
oas_docs/output/kibana.yaml | 7 +++--
.../src/extract_authz_description.test.ts | 12 +++++---
.../src/extract_authz_description.ts | 2 +-
.../src/process_router.test.ts | 28 +++++++++++++++++--
.../src/process_router.ts | 7 +++--
.../src/process_versioned_router.test.ts | 3 +-
.../src/process_versioned_router.ts | 8 +++---
8 files changed, 52 insertions(+), 19 deletions(-)
diff --git a/oas_docs/bundle.json b/oas_docs/bundle.json
index fd2a7bbe22de0..743d6ae6e422a 100644
--- a/oas_docs/bundle.json
+++ b/oas_docs/bundle.json
@@ -40775,7 +40775,7 @@
},
"/api/spaces/_copy_saved_objects": {
"post": {
- "description": "It also allows you to automatically copy related objects, so when you copy a dashboard, this can automatically copy over the associated visualizations, data views, and saved searches, as required. You can request to overwrite any objects that already exist in the target space if they share an identifier or you can use the resolve copy saved objects conflicts API to do this on a per-object basis.",
+ "description": "It also allows you to automatically copy related objects, so when you copy a dashboard, this can automatically copy over the associated visualizations, data views, and saved searches, as required. You can request to overwrite any objects that already exist in the target space if they share an identifier or you can use the resolve copy saved objects conflicts API to do this on a per-object basis. [Required authorization] Route required privileges: ALL of [copySavedObjectsToSpaces].",
"operationId": "post-spaces-copy-saved-objects",
"parameters": [
{
@@ -41018,7 +41018,7 @@
},
"/api/spaces/_resolve_copy_saved_objects_errors": {
"post": {
- "description": "Overwrite saved objects that are returned as errors from the copy saved objects to space API.",
+ "description": "Overwrite saved objects that are returned as errors from the copy saved objects to space API. [Required authorization] Route required privileges: ALL of [copySavedObjectsToSpaces].",
"operationId": "post-spaces-resolve-copy-saved-objects-errors",
"parameters": [
{
diff --git a/oas_docs/output/kibana.yaml b/oas_docs/output/kibana.yaml
index 5bbc65ad80bc4..6122607df925f 100644
--- a/oas_docs/output/kibana.yaml
+++ b/oas_docs/output/kibana.yaml
@@ -41050,7 +41050,9 @@ paths:
visualizations, data views, and saved searches, as required. You can
request to overwrite any objects that already exist in the target space
if they share an identifier or you can use the resolve copy saved
- objects conflicts API to do this on a per-object basis.
+ objects conflicts API to do this on a per-object
+ basis. [Required authorization] Route required privileges: ALL
+ of [copySavedObjectsToSpaces].
operationId: post-spaces-copy-saved-objects
parameters:
- description: The version of the API to use
@@ -41239,7 +41241,8 @@ paths:
post:
description: >-
Overwrite saved objects that are returned as errors from the copy saved
- objects to space API.
+ objects to space API. [Required authorization] Route required
+ privileges: ALL of [copySavedObjectsToSpaces].
operationId: post-spaces-resolve-copy-saved-objects-errors
parameters:
- description: The version of the API to use
diff --git a/packages/kbn-router-to-openapispec/src/extract_authz_description.test.ts b/packages/kbn-router-to-openapispec/src/extract_authz_description.test.ts
index 8da2324e68f02..308f0a7686597 100644
--- a/packages/kbn-router-to-openapispec/src/extract_authz_description.test.ts
+++ b/packages/kbn-router-to-openapispec/src/extract_authz_description.test.ts
@@ -33,7 +33,9 @@ describe('extractAuthzDescription', () => {
},
};
const description = extractAuthzDescription(routeSecurity);
- expect(description).toBe('[Authz] Route required privileges: ALL of [manage_spaces].');
+ expect(description).toBe(
+ '[Required authorization] Route required privileges: ALL of [manage_spaces].'
+ );
});
it('should return route authz description for privilege groups', () => {
@@ -44,7 +46,9 @@ describe('extractAuthzDescription', () => {
},
};
const description = extractAuthzDescription(routeSecurity);
- expect(description).toBe('[Authz] Route required privileges: ALL of [console].');
+ expect(description).toBe(
+ '[Required authorization] Route required privileges: ALL of [console].'
+ );
}
{
const routeSecurity: RouteSecurity = {
@@ -58,7 +62,7 @@ describe('extractAuthzDescription', () => {
};
const description = extractAuthzDescription(routeSecurity);
expect(description).toBe(
- '[Authz] Route required privileges: ANY of [manage_spaces OR taskmanager].'
+ '[Required authorization] Route required privileges: ANY of [manage_spaces OR taskmanager].'
);
}
{
@@ -74,7 +78,7 @@ describe('extractAuthzDescription', () => {
};
const description = extractAuthzDescription(routeSecurity);
expect(description).toBe(
- '[Authz] Route required privileges: ALL of [console, filesManagement] AND ANY of [manage_spaces OR taskmanager].'
+ '[Required authorization] Route required privileges: ALL of [console, filesManagement] AND ANY of [manage_spaces OR taskmanager].'
);
}
});
diff --git a/packages/kbn-router-to-openapispec/src/extract_authz_description.ts b/packages/kbn-router-to-openapispec/src/extract_authz_description.ts
index 4cd6875913780..7979188f2641e 100644
--- a/packages/kbn-router-to-openapispec/src/extract_authz_description.ts
+++ b/packages/kbn-router-to-openapispec/src/extract_authz_description.ts
@@ -56,5 +56,5 @@ export const extractAuthzDescription = (routeSecurity: InternalRouteSecurity | u
return `Route required privileges: ${getPrivilegesDescription(allRequired, anyRequired)}.`;
};
- return `[Authz] ${getDescriptionForRoute()}`;
+ return `[Required authorization] ${getDescriptionForRoute()}`;
};
diff --git a/packages/kbn-router-to-openapispec/src/process_router.test.ts b/packages/kbn-router-to-openapispec/src/process_router.test.ts
index 17191e7ab1b1c..2ce135a378789 100644
--- a/packages/kbn-router-to-openapispec/src/process_router.test.ts
+++ b/packages/kbn-router-to-openapispec/src/process_router.test.ts
@@ -124,6 +124,26 @@ describe('processRouter', () => {
},
},
},
+ {
+ path: '/quux',
+ method: 'post',
+ options: {
+ description: 'This a test route description.',
+ },
+ handler: jest.fn(),
+ validationSchemas: { request: { body: schema.object({}) } },
+ security: {
+ authz: {
+ requiredPrivileges: [
+ 'manage_spaces',
+ {
+ allRequired: ['taskmanager'],
+ anyRequired: ['console'],
+ },
+ ],
+ },
+ },
+ },
],
} as unknown as Router;
@@ -132,7 +152,7 @@ describe('processRouter', () => {
version: '2023-10-31',
});
- expect(Object.keys(result1.paths!)).toHaveLength(4);
+ expect(Object.keys(result1.paths!)).toHaveLength(5);
const result2 = processRouter(testRouter, new OasConverter(), createOpIdGenerator(), {
version: '2024-10-31',
@@ -148,7 +168,11 @@ describe('processRouter', () => {
expect(result.paths['/qux']?.post).toBeDefined();
expect(result.paths['/qux']?.post?.description).toEqual(
- '[Authz] Route required privileges: ALL of [manage_spaces, taskmanager] AND ANY of [console].'
+ '[Required authorization] Route required privileges: ALL of [manage_spaces, taskmanager] AND ANY of [console].'
+ );
+
+ expect(result.paths['/quux']?.post?.description).toEqual(
+ 'This a test route description. [Required authorization] Route required privileges: ALL of [manage_spaces, taskmanager] AND ANY of [console].'
);
});
});
diff --git a/packages/kbn-router-to-openapispec/src/process_router.ts b/packages/kbn-router-to-openapispec/src/process_router.ts
index e11c4057a05b8..b808f9bed84d5 100644
--- a/packages/kbn-router-to-openapispec/src/process_router.ts
+++ b/packages/kbn-router-to-openapispec/src/process_router.ts
@@ -64,11 +64,13 @@ export const processRouter = (
parameters.push(...pathObjects, ...queryObjects);
}
- let description = '';
+ let description = `${route.options.description ?? ''}`;
if (route.security) {
const authzDescription = extractAuthzDescription(route.security);
- description = `${route.options.description ?? ''}${authzDescription ?? ''}`;
+ description += `${route.options.description && authzDescription ? ` ` : ''}${
+ authzDescription ?? ''
+ }`;
}
const hasDeprecations = !!route.options.deprecated;
@@ -77,7 +79,6 @@ export const processRouter = (
summary: route.options.summary ?? '',
tags: route.options.tags ? extractTags(route.options.tags) : [],
...(description ? { description } : {}),
- ...(route.options.description ? { description: route.options.description } : {}),
...(hasDeprecations ? { deprecated: true } : {}),
...(route.options.discontinued ? { 'x-discontinued': route.options.discontinued } : {}),
requestBody: !!validationSchemas?.body
diff --git a/packages/kbn-router-to-openapispec/src/process_versioned_router.test.ts b/packages/kbn-router-to-openapispec/src/process_versioned_router.test.ts
index 839ba5f298134..b7a4827e4f365 100644
--- a/packages/kbn-router-to-openapispec/src/process_versioned_router.test.ts
+++ b/packages/kbn-router-to-openapispec/src/process_versioned_router.test.ts
@@ -157,7 +157,7 @@ describe('processVersionedRouter', () => {
expect(results.paths['/foo']!.get).toBeDefined();
expect(results.paths['/foo']!.get!.description).toBe(
- '[Authz] Route required privileges: ALL of [manage_spaces].'
+ 'This is a test route description. [Required authorization] Route required privileges: ALL of [manage_spaces].'
);
});
});
@@ -176,6 +176,7 @@ const createTestRoute: () => VersionedRouterRoute = () => ({
requiredPrivileges: ['manage_spaces'],
},
},
+ description: 'This is a test route description.',
},
handlers: [
{
diff --git a/packages/kbn-router-to-openapispec/src/process_versioned_router.ts b/packages/kbn-router-to-openapispec/src/process_versioned_router.ts
index 380bbd2e86c26..eab2dfef78a21 100644
--- a/packages/kbn-router-to-openapispec/src/process_versioned_router.ts
+++ b/packages/kbn-router-to-openapispec/src/process_versioned_router.ts
@@ -90,12 +90,13 @@ export const processVersionedRouter = (
...queryObjects,
];
}
-
- let description = '';
+ let description = `${route.options.description ?? ''}`;
if (route.options.security) {
const authzDescription = extractAuthzDescription(route.options.security);
- description = `${route.options.description ?? ''}${authzDescription ?? ''}`;
+ description += `${route.options.description && authzDescription ? ' ' : ''}${
+ authzDescription ?? ''
+ }`;
}
const hasBody = Boolean(extractValidationSchemaFromVersionedHandler(handler)?.request?.body);
@@ -107,7 +108,6 @@ export const processVersionedRouter = (
summary: route.options.summary ?? '',
tags: route.options.options?.tags ? extractTags(route.options.options.tags) : [],
...(description ? { description } : {}),
- ...(route.options.description ? { description: route.options.description } : {}),
...(hasDeprecations ? { deprecated: true } : {}),
...(route.options.discontinued ? { 'x-discontinued': route.options.discontinued } : {}),
requestBody: hasBody
From 8145cb7c6f483c3a8aa561b492fa098e3ce52027 Mon Sep 17 00:00:00 2001
From: Carlos Crespo
Date: Mon, 4 Nov 2024 17:01:05 +0100
Subject: [PATCH 018/101] [ECO][Inventory] Redirect ECS k8s entities to
dashboards (#197222)
closes [#196142](https://github.com/elastic/kibana/issues/196142)
## Summary
Links kubernetes ECS entities to their corresponding dashboards
> [!IMPORTANT]
> ECS `replicaset` doesn't have a dedicated dashboard. `container` will
be handled in a separate ticket
> Semconv won't link to any dashboard/page
![redirect](https://github.com/user-attachments/assets/77d5d2e1-7ec4-40cd-b7d8-419e07e6b760)
### How to test
- While https://github.com/elastic/kibana/pull/196916 is not merged,
change `ENTITIES_LATEST_ALIAS` constant to `'.entities.v1.latest*'`
- Start a local kibana and es instances
- Run ` node scripts/synthtrace k8s_entities.ts --live --clean `
- Run `PUT kbn:/internal/entities/managed/enablement` on the devtools
- Install the kubernetes integration package to have the dashboards
installed.
- Navigate to `Inventory` and click through the k8s entities
---------
Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
Co-authored-by: Elastic Machine
---
.../src/lib/entities/kubernetes/index.ts | 6 +-
.../esql_result_to_plain_objects.test.ts | 66 +++++++
.../es/utils/esql_result_to_plain_objects.ts | 12 +-
.../public/lib/entity_client.test.ts | 139 ++++++++++++++
.../public/lib/entity_client.ts | 40 ++++
.../apm/common/entities/types.ts | 12 --
.../apm/common/es_fields/entities.ts | 12 --
.../asset_details/hooks/use_entity_summary.ts | 4 +-
.../tabs/processes/processes.tsx | 4 +-
.../infra/server/routes/entities/index.ts | 6 +-
.../inventory/common/entities.ts | 7 +-
...parse_identity_field_values_to_kql.test.ts | 91 ---------
.../parse_identity_field_values_to_kql.ts | 34 ----
.../common/utils/unflatten_entity.ts | 13 ++
.../alerts_badge/alerts_badge.test.tsx | 44 +++--
.../components/alerts_badge/alerts_badge.tsx | 7 +-
.../entity_name/entity_name.test.tsx | 175 +++++-------------
.../entities_grid/entity_name/index.tsx | 77 +++-----
.../public/components/entity_icon/index.tsx | 11 +-
.../hooks/use_detail_view_redirect.test.ts | 170 +++++++++++++++++
.../public/hooks/use_detail_view_redirect.ts | 114 ++++++++++++
.../entities/get_identify_fields.test.ts | 2 +-
.../server/routes/has_data/get_has_data.ts | 1 -
.../inventory/tsconfig.json | 3 +
.../common/entity/entity_types.ts | 26 ++-
.../common/entity/index.ts | 2 +-
.../observability_shared/common/index.ts | 3 +-
.../locators/apm/service_overview_locator.ts | 3 +-
28 files changed, 715 insertions(+), 369 deletions(-)
create mode 100644 x-pack/packages/observability/observability_utils/es/utils/esql_result_to_plain_objects.test.ts
create mode 100644 x-pack/plugins/entity_manager/public/lib/entity_client.test.ts
delete mode 100644 x-pack/plugins/observability_solution/apm/common/entities/types.ts
delete mode 100644 x-pack/plugins/observability_solution/apm/common/es_fields/entities.ts
delete mode 100644 x-pack/plugins/observability_solution/inventory/common/utils/parse_identity_field_values_to_kql.test.ts
delete mode 100644 x-pack/plugins/observability_solution/inventory/common/utils/parse_identity_field_values_to_kql.ts
create mode 100644 x-pack/plugins/observability_solution/inventory/common/utils/unflatten_entity.ts
create mode 100644 x-pack/plugins/observability_solution/inventory/public/hooks/use_detail_view_redirect.test.ts
create mode 100644 x-pack/plugins/observability_solution/inventory/public/hooks/use_detail_view_redirect.ts
diff --git a/packages/kbn-apm-synthtrace-client/src/lib/entities/kubernetes/index.ts b/packages/kbn-apm-synthtrace-client/src/lib/entities/kubernetes/index.ts
index 36d7f8caf9601..db95dcf4155bc 100644
--- a/packages/kbn-apm-synthtrace-client/src/lib/entities/kubernetes/index.ts
+++ b/packages/kbn-apm-synthtrace-client/src/lib/entities/kubernetes/index.ts
@@ -55,9 +55,9 @@ export class K8sEntity extends Serializable {
super({
...fields,
'entity.type': entityTypeWithSchema,
- 'entity.definitionId': `builtin_${entityTypeWithSchema}`,
- 'entity.identityFields': identityFields,
- 'entity.displayName': getDisplayName({ identityFields, fields }),
+ 'entity.definition_id': `builtin_${entityTypeWithSchema}`,
+ 'entity.identity_fields': identityFields,
+ 'entity.display_name': getDisplayName({ identityFields, fields }),
});
}
}
diff --git a/x-pack/packages/observability/observability_utils/es/utils/esql_result_to_plain_objects.test.ts b/x-pack/packages/observability/observability_utils/es/utils/esql_result_to_plain_objects.test.ts
new file mode 100644
index 0000000000000..4557d0ba0bdd5
--- /dev/null
+++ b/x-pack/packages/observability/observability_utils/es/utils/esql_result_to_plain_objects.test.ts
@@ -0,0 +1,66 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import type { ESQLSearchResponse } from '@kbn/es-types';
+import { esqlResultToPlainObjects } from './esql_result_to_plain_objects';
+
+describe('esqlResultToPlainObjects', () => {
+ it('should return an empty array for an empty result', () => {
+ const result: ESQLSearchResponse = {
+ columns: [],
+ values: [],
+ };
+ const output = esqlResultToPlainObjects(result);
+ expect(output).toEqual([]);
+ });
+
+ it('should return plain objects', () => {
+ const result: ESQLSearchResponse = {
+ columns: [{ name: 'name', type: 'keyword' }],
+ values: [['Foo Bar']],
+ };
+ const output = esqlResultToPlainObjects(result);
+ expect(output).toEqual([{ name: 'Foo Bar' }]);
+ });
+
+ it('should return columns without "text" or "keyword" in their names', () => {
+ const result: ESQLSearchResponse = {
+ columns: [
+ { name: 'name.text', type: 'text' },
+ { name: 'age', type: 'keyword' },
+ ],
+ values: [
+ ['Foo Bar', 30],
+ ['Foo Qux', 25],
+ ],
+ };
+ const output = esqlResultToPlainObjects(result);
+ expect(output).toEqual([
+ { name: 'Foo Bar', age: 30 },
+ { name: 'Foo Qux', age: 25 },
+ ]);
+ });
+
+ it('should handle mixed columns correctly', () => {
+ const result: ESQLSearchResponse = {
+ columns: [
+ { name: 'name', type: 'text' },
+ { name: 'name.text', type: 'text' },
+ { name: 'age', type: 'keyword' },
+ ],
+ values: [
+ ['Foo Bar', 'Foo Bar', 30],
+ ['Foo Qux', 'Foo Qux', 25],
+ ],
+ };
+ const output = esqlResultToPlainObjects(result);
+ expect(output).toEqual([
+ { name: 'Foo Bar', age: 30 },
+ { name: 'Foo Qux', age: 25 },
+ ]);
+ });
+});
diff --git a/x-pack/packages/observability/observability_utils/es/utils/esql_result_to_plain_objects.ts b/x-pack/packages/observability/observability_utils/es/utils/esql_result_to_plain_objects.ts
index ad48bcb311b25..96049f75ef156 100644
--- a/x-pack/packages/observability/observability_utils/es/utils/esql_result_to_plain_objects.ts
+++ b/x-pack/packages/observability/observability_utils/es/utils/esql_result_to_plain_objects.ts
@@ -13,7 +13,17 @@ export function esqlResultToPlainObjects>(
return result.values.map((row) => {
return row.reduce>((acc, value, index) => {
const column = result.columns[index];
- acc[column.name] = value;
+
+ if (!column) {
+ return acc;
+ }
+
+ // Removes the type suffix from the column name
+ const name = column.name.replace(/\.(text|keyword)$/, '');
+ if (!acc[name]) {
+ acc[name] = value;
+ }
+
return acc;
}, {});
}) as T[];
diff --git a/x-pack/plugins/entity_manager/public/lib/entity_client.test.ts b/x-pack/plugins/entity_manager/public/lib/entity_client.test.ts
new file mode 100644
index 0000000000000..dbaf1205cdf98
--- /dev/null
+++ b/x-pack/plugins/entity_manager/public/lib/entity_client.test.ts
@@ -0,0 +1,139 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import { EntityClient, EnitityInstance } from './entity_client';
+import { coreMock } from '@kbn/core/public/mocks';
+
+const commonEntityFields: EnitityInstance = {
+ entity: {
+ last_seen_timestamp: '2023-10-09T00:00:00Z',
+ id: '1',
+ display_name: 'entity_name',
+ definition_id: 'entity_definition_id',
+ } as EnitityInstance['entity'],
+};
+
+describe('EntityClient', () => {
+ let entityClient: EntityClient;
+
+ beforeEach(() => {
+ entityClient = new EntityClient(coreMock.createStart());
+ });
+
+ describe('asKqlFilter', () => {
+ it('should return the kql filter', () => {
+ const entityLatest: EnitityInstance = {
+ entity: {
+ ...commonEntityFields.entity,
+ identity_fields: ['service.name', 'service.environment'],
+ type: 'service',
+ },
+ service: {
+ name: 'my-service',
+ },
+ };
+
+ const result = entityClient.asKqlFilter(entityLatest);
+ expect(result).toEqual('service.name: my-service');
+ });
+
+ it('should return the kql filter when indentity_fields is composed by multiple fields', () => {
+ const entityLatest: EnitityInstance = {
+ entity: {
+ ...commonEntityFields.entity,
+ identity_fields: ['service.name', 'service.environment'],
+ type: 'service',
+ },
+ service: {
+ name: 'my-service',
+ environment: 'staging',
+ },
+ };
+
+ const result = entityClient.asKqlFilter(entityLatest);
+ expect(result).toEqual('(service.name: my-service AND service.environment: staging)');
+ });
+
+ it('should ignore fields that are not present in the entity', () => {
+ const entityLatest: EnitityInstance = {
+ entity: {
+ ...commonEntityFields.entity,
+ identity_fields: ['host.name', 'foo.bar'],
+ },
+ host: {
+ name: 'my-host',
+ },
+ };
+
+ const result = entityClient.asKqlFilter(entityLatest);
+ expect(result).toEqual('host.name: my-host');
+ });
+ });
+
+ describe('getIdentityFieldsValue', () => {
+ it('should return identity fields values', () => {
+ const entityLatest: EnitityInstance = {
+ entity: {
+ ...commonEntityFields.entity,
+ identity_fields: ['service.name', 'service.environment'],
+ type: 'service',
+ },
+ service: {
+ name: 'my-service',
+ },
+ };
+
+ expect(entityClient.getIdentityFieldsValue(entityLatest)).toEqual({
+ 'service.name': 'my-service',
+ });
+ });
+
+ it('should return identity fields values when indentity_fields is composed by multiple fields', () => {
+ const entityLatest: EnitityInstance = {
+ entity: {
+ ...commonEntityFields.entity,
+ identity_fields: ['service.name', 'service.environment'],
+ type: 'service',
+ },
+ service: {
+ name: 'my-service',
+ environment: 'staging',
+ },
+ };
+
+ expect(entityClient.getIdentityFieldsValue(entityLatest)).toEqual({
+ 'service.name': 'my-service',
+ 'service.environment': 'staging',
+ });
+ });
+
+ it('should return identity fields when field is in the root', () => {
+ const entityLatest: EnitityInstance = {
+ entity: {
+ ...commonEntityFields.entity,
+ identity_fields: ['name'],
+ type: 'service',
+ },
+ name: 'foo',
+ };
+
+ expect(entityClient.getIdentityFieldsValue(entityLatest)).toEqual({
+ name: 'foo',
+ });
+ });
+
+ it('should throw an error when identity fields are missing', () => {
+ const entityLatest: EnitityInstance = {
+ ...commonEntityFields,
+ };
+
+ expect(() => entityClient.getIdentityFieldsValue(entityLatest)).toThrow(
+ 'Identity fields are missing'
+ );
+ });
+ });
+});
diff --git a/x-pack/plugins/entity_manager/public/lib/entity_client.ts b/x-pack/plugins/entity_manager/public/lib/entity_client.ts
index dc22a0b991b0d..08794873ba930 100644
--- a/x-pack/plugins/entity_manager/public/lib/entity_client.ts
+++ b/x-pack/plugins/entity_manager/public/lib/entity_client.ts
@@ -5,6 +5,7 @@
* 2.0.
*/
+import { z } from '@kbn/zod';
import { CoreSetup, CoreStart } from '@kbn/core/public';
import {
ClientRequestParamsOf,
@@ -12,6 +13,9 @@ import {
createRepositoryClient,
isHttpFetchError,
} from '@kbn/server-route-repository-client';
+import { type KueryNode, nodeTypes, toKqlExpression } from '@kbn/es-query';
+import { entityLatestSchema } from '@kbn/entities-schema';
+import { castArray } from 'lodash';
import {
DisableManagedEntityResponse,
EnableManagedEntityResponse,
@@ -35,6 +39,8 @@ type CreateEntityDefinitionQuery = QueryParamOf<
ClientRequestParamsOf
>;
+export type EnitityInstance = z.infer;
+
export class EntityClient {
public readonly repositoryClient: EntityManagerRepositoryClient['fetch'];
@@ -83,4 +89,38 @@ export class EntityClient {
throw err;
}
}
+
+ asKqlFilter(entityLatest: EnitityInstance) {
+ const identityFieldsValue = this.getIdentityFieldsValue(entityLatest);
+
+ const nodes: KueryNode[] = Object.entries(identityFieldsValue).map(([identityField, value]) => {
+ return nodeTypes.function.buildNode('is', identityField, value);
+ });
+
+ if (nodes.length === 0) return '';
+
+ const kqlExpression = nodes.length > 1 ? nodeTypes.function.buildNode('and', nodes) : nodes[0];
+
+ return toKqlExpression(kqlExpression);
+ }
+
+ getIdentityFieldsValue(entityLatest: EnitityInstance) {
+ const { identity_fields: identityFields } = entityLatest.entity;
+
+ if (!identityFields) {
+ throw new Error('Identity fields are missing');
+ }
+
+ return castArray(identityFields).reduce((acc, field) => {
+ const value = field.split('.').reduce((obj: any, part: string) => {
+ return obj && typeof obj === 'object' ? (obj as Record)[part] : undefined;
+ }, entityLatest);
+
+ if (value) {
+ acc[field] = value;
+ }
+
+ return acc;
+ }, {} as Record);
+ }
}
diff --git a/x-pack/plugins/observability_solution/apm/common/entities/types.ts b/x-pack/plugins/observability_solution/apm/common/entities/types.ts
deleted file mode 100644
index 9775b1e32eae6..0000000000000
--- a/x-pack/plugins/observability_solution/apm/common/entities/types.ts
+++ /dev/null
@@ -1,12 +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 EntityDataStreamType {
- METRICS = 'metrics',
- TRACES = 'traces',
- LOGS = 'logs',
-}
diff --git a/x-pack/plugins/observability_solution/apm/common/es_fields/entities.ts b/x-pack/plugins/observability_solution/apm/common/es_fields/entities.ts
deleted file mode 100644
index 28e4a3ec79165..0000000000000
--- a/x-pack/plugins/observability_solution/apm/common/es_fields/entities.ts
+++ /dev/null
@@ -1,12 +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 const ENTITY_METRICS_LATENCY = 'entity.metrics.latency';
-export const ENTITY_METRICS_LOG_ERROR_RATE = 'entity.metrics.logErrorRate';
-export const ENTITY_METRICS_LOG_RATE = 'entity.metrics.logRate';
-export const ENTITY_METRICS_THROUGHPUT = 'entity.metrics.throughput';
-export const ENTITY_METRICS_FAILED_TRANSACTION_RATE = 'entity.metrics.failedTransactionRate';
diff --git a/x-pack/plugins/observability_solution/infra/public/components/asset_details/hooks/use_entity_summary.ts b/x-pack/plugins/observability_solution/infra/public/components/asset_details/hooks/use_entity_summary.ts
index 349b8e13ae7ab..e62defaac6d4b 100644
--- a/x-pack/plugins/observability_solution/infra/public/components/asset_details/hooks/use_entity_summary.ts
+++ b/x-pack/plugins/observability_solution/infra/public/components/asset_details/hooks/use_entity_summary.ts
@@ -6,10 +6,10 @@
*/
import * as z from '@kbn/zod';
-import { EntityDataStreamType, EntityType } from '@kbn/observability-shared-plugin/common';
+import { EntityDataStreamType, ENTITY_TYPES } from '@kbn/observability-shared-plugin/common';
import { useFetcher } from '../../../hooks/use_fetcher';
-const EntityTypeSchema = z.union([z.literal(EntityType.HOST), z.literal(EntityType.CONTAINER)]);
+const EntityTypeSchema = z.union([z.literal(ENTITY_TYPES.HOST), z.literal(ENTITY_TYPES.CONTAINER)]);
const EntityDataStreamSchema = z.union([
z.literal(EntityDataStreamType.METRICS),
z.literal(EntityDataStreamType.LOGS),
diff --git a/x-pack/plugins/observability_solution/infra/public/components/asset_details/tabs/processes/processes.tsx b/x-pack/plugins/observability_solution/infra/public/components/asset_details/tabs/processes/processes.tsx
index 4e8fc1e3badb1..2177cd0509085 100644
--- a/x-pack/plugins/observability_solution/infra/public/components/asset_details/tabs/processes/processes.tsx
+++ b/x-pack/plugins/observability_solution/infra/public/components/asset_details/tabs/processes/processes.tsx
@@ -22,8 +22,8 @@ import {
import { FormattedMessage } from '@kbn/i18n-react';
import { getFieldByType } from '@kbn/metrics-data-access-plugin/common';
import { decodeOrThrow } from '@kbn/io-ts-utils';
-import { EntityType } from '@kbn/observability-shared-plugin/common';
import useLocalStorage from 'react-use/lib/useLocalStorage';
+import { ENTITY_TYPES } from '@kbn/observability-shared-plugin/common';
import { useSourceContext } from '../../../../containers/metrics_source';
import { isPending, useFetcher } from '../../../../hooks/use_fetcher';
import { parseSearchString } from './parse_search_string';
@@ -58,7 +58,7 @@ export const Processes = () => {
const { request$ } = useRequestObservable();
const { isActiveTab } = useTabSwitcherContext();
const { dataStreams, status: dataStreamsStatus } = useEntitySummary({
- entityType: EntityType.HOST,
+ entityType: ENTITY_TYPES.HOST,
entityId: asset.name,
});
const addMetricsCalloutId: AddMetricsCalloutKey = 'hostProcesses';
diff --git a/x-pack/plugins/observability_solution/infra/server/routes/entities/index.ts b/x-pack/plugins/observability_solution/infra/server/routes/entities/index.ts
index cb169f83f171d..1a8707678e8f7 100644
--- a/x-pack/plugins/observability_solution/infra/server/routes/entities/index.ts
+++ b/x-pack/plugins/observability_solution/infra/server/routes/entities/index.ts
@@ -9,6 +9,7 @@ import { schema } from '@kbn/config-schema';
import { METRICS_APP_ID } from '@kbn/deeplinks-observability/constants';
import { entityCentricExperience } from '@kbn/observability-plugin/common';
import { createObservabilityEsClient } from '@kbn/observability-utils/es/client/create_observability_es_client';
+import { ENTITY_TYPES } from '@kbn/observability-shared-plugin/common';
import { getInfraMetricsClient } from '../../lib/helpers/get_infra_metrics_client';
import { InfraBackendLibs } from '../../lib/infra_types';
import { getDataStreamTypes } from './get_data_stream_types';
@@ -22,7 +23,10 @@ export const initEntitiesConfigurationRoutes = (libs: InfraBackendLibs) => {
path: '/api/infra/entities/{entityType}/{entityId}/summary',
validate: {
params: schema.object({
- entityType: schema.oneOf([schema.literal('host'), schema.literal('container')]),
+ entityType: schema.oneOf([
+ schema.literal(ENTITY_TYPES.HOST),
+ schema.literal(ENTITY_TYPES.CONTAINER),
+ ]),
entityId: schema.string(),
}),
},
diff --git a/x-pack/plugins/observability_solution/inventory/common/entities.ts b/x-pack/plugins/observability_solution/inventory/common/entities.ts
index e5bd12d252767..f686490b90bfc 100644
--- a/x-pack/plugins/observability_solution/inventory/common/entities.ts
+++ b/x-pack/plugins/observability_solution/inventory/common/entities.ts
@@ -4,7 +4,8 @@
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
-import { ENTITY_LATEST, entitiesAliasPattern } from '@kbn/entities-schema';
+import { z } from '@kbn/zod';
+import { ENTITY_LATEST, entitiesAliasPattern, entityLatestSchema } from '@kbn/entities-schema';
import {
ENTITY_DEFINITION_ID,
ENTITY_DISPLAY_NAME,
@@ -117,3 +118,7 @@ export type EntityGroup = {
} & {
[key: string]: any;
};
+
+export type InventoryEntityLatest = z.infer & {
+ alertsCount?: number;
+};
diff --git a/x-pack/plugins/observability_solution/inventory/common/utils/parse_identity_field_values_to_kql.test.ts b/x-pack/plugins/observability_solution/inventory/common/utils/parse_identity_field_values_to_kql.test.ts
deleted file mode 100644
index 8703e995b4446..0000000000000
--- a/x-pack/plugins/observability_solution/inventory/common/utils/parse_identity_field_values_to_kql.test.ts
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
- * or more contributor license agreements. Licensed under the Elastic License
- * 2.0; you may not use this file except in compliance with the Elastic License
- * 2.0.
- */
-
-import {
- ENTITY_DEFINITION_ID,
- ENTITY_DISPLAY_NAME,
- ENTITY_ID,
- ENTITY_IDENTITY_FIELDS,
- ENTITY_LAST_SEEN,
-} from '@kbn/observability-shared-plugin/common';
-import type { Entity } from '../entities';
-import { parseIdentityFieldValuesToKql } from './parse_identity_field_values_to_kql';
-
-const commonEntityFields = {
- [ENTITY_LAST_SEEN]: '2023-10-09T00:00:00Z',
- [ENTITY_ID]: '1',
- [ENTITY_DISPLAY_NAME]: 'entity_name',
- [ENTITY_DEFINITION_ID]: 'entity_definition_id',
- alertCount: 3,
-};
-
-describe('parseIdentityFieldValuesToKql', () => {
- it('should return the value when identityFields is a single string', () => {
- const entity: Entity = {
- 'agent.name': 'node',
- [ENTITY_IDENTITY_FIELDS]: 'service.name',
- 'service.name': 'my-service',
- 'entity.type': 'service',
- ...commonEntityFields,
- };
-
- const result = parseIdentityFieldValuesToKql({ entity });
- expect(result).toEqual('service.name: "my-service"');
- });
-
- it('should return values when identityFields is an array of strings', () => {
- const entity: Entity = {
- 'agent.name': 'node',
- [ENTITY_IDENTITY_FIELDS]: ['service.name', 'service.environment'],
- 'service.name': 'my-service',
- 'entity.type': 'service',
- 'service.environment': 'staging',
- ...commonEntityFields,
- };
-
- const result = parseIdentityFieldValuesToKql({ entity });
- expect(result).toEqual('service.name: "my-service" AND service.environment: "staging"');
- });
-
- it('should return an empty string if identityFields is empty string', () => {
- const entity: Entity = {
- 'agent.name': 'node',
- [ENTITY_IDENTITY_FIELDS]: '',
- 'service.name': 'my-service',
- 'entity.type': 'service',
- ...commonEntityFields,
- };
-
- const result = parseIdentityFieldValuesToKql({ entity });
- expect(result).toEqual('');
- });
- it('should return an empty array if identityFields is empty array', () => {
- const entity: Entity = {
- 'agent.name': 'node',
- [ENTITY_IDENTITY_FIELDS]: [],
- 'service.name': 'my-service',
- 'entity.type': 'service',
- ...commonEntityFields,
- };
-
- const result = parseIdentityFieldValuesToKql({ entity });
- expect(result).toEqual('');
- });
-
- it('should ignore fields that are not present in the entity', () => {
- const entity: Entity = {
- [ENTITY_IDENTITY_FIELDS]: ['host.name', 'foo.bar'],
- 'host.name': 'my-host',
- 'entity.type': 'host',
- 'cloud.provider': null,
- ...commonEntityFields,
- };
-
- const result = parseIdentityFieldValuesToKql({ entity });
- expect(result).toEqual('host.name: "my-host"');
- });
-});
diff --git a/x-pack/plugins/observability_solution/inventory/common/utils/parse_identity_field_values_to_kql.ts b/x-pack/plugins/observability_solution/inventory/common/utils/parse_identity_field_values_to_kql.ts
deleted file mode 100644
index 2e3f3dadd4109..0000000000000
--- a/x-pack/plugins/observability_solution/inventory/common/utils/parse_identity_field_values_to_kql.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
- * or more contributor license agreements. Licensed under the Elastic License
- * 2.0; you may not use this file except in compliance with the Elastic License
- * 2.0.
- */
-
-import { ENTITY_IDENTITY_FIELDS } from '@kbn/observability-shared-plugin/common';
-import { Entity } from '../entities';
-
-type Operator = 'AND';
-export function parseIdentityFieldValuesToKql({
- entity,
- operator = 'AND',
-}: {
- entity: Entity;
- operator?: Operator;
-}) {
- const mapping: string[] = [];
-
- const identityFields = entity[ENTITY_IDENTITY_FIELDS];
-
- if (identityFields) {
- const fields = [identityFields].flat();
-
- fields.forEach((field) => {
- if (field in entity) {
- mapping.push(`${[field]}: "${entity[field as keyof Entity]}"`);
- }
- });
- }
-
- return mapping.join(` ${operator} `);
-}
diff --git a/x-pack/plugins/observability_solution/inventory/common/utils/unflatten_entity.ts b/x-pack/plugins/observability_solution/inventory/common/utils/unflatten_entity.ts
new file mode 100644
index 0000000000000..758d185a5753b
--- /dev/null
+++ b/x-pack/plugins/observability_solution/inventory/common/utils/unflatten_entity.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 { unflattenObject } from '@kbn/observability-utils/object/unflatten_object';
+import type { Entity, InventoryEntityLatest } from '../entities';
+
+export function unflattenEntity(entity: Entity) {
+ return unflattenObject(entity) as InventoryEntityLatest;
+}
diff --git a/x-pack/plugins/observability_solution/inventory/public/components/alerts_badge/alerts_badge.test.tsx b/x-pack/plugins/observability_solution/inventory/public/components/alerts_badge/alerts_badge.test.tsx
index 60124e7813bc4..b5244cb29f7fc 100644
--- a/x-pack/plugins/observability_solution/inventory/public/components/alerts_badge/alerts_badge.test.tsx
+++ b/x-pack/plugins/observability_solution/inventory/public/components/alerts_badge/alerts_badge.test.tsx
@@ -5,22 +5,35 @@
* 2.0.
*/
import React from 'react';
-import { type KibanaReactContextValue } from '@kbn/kibana-react-plugin/public';
import { render, screen } from '@testing-library/react';
import { AlertsBadge } from './alerts_badge';
-import * as useKibana from '../../hooks/use_kibana';
+import { useKibana } from '../../hooks/use_kibana';
import type { Entity } from '../../../common/entities';
+jest.mock('../../hooks/use_kibana');
+const useKibanaMock = useKibana as jest.Mock;
+
describe('AlertsBadge', () => {
- jest.spyOn(useKibana, 'useKibana').mockReturnValue({
- services: {
- http: {
- basePath: {
- prepend: (path: string) => path,
+ const mockAsKqlFilter = jest.fn();
+
+ beforeEach(() => {
+ jest.clearAllMocks();
+
+ useKibanaMock.mockReturnValue({
+ services: {
+ http: {
+ basePath: {
+ prepend: (path: string) => path,
+ },
+ },
+ entityManager: {
+ entityClient: {
+ asKqlFilter: mockAsKqlFilter,
+ },
},
},
- },
- } as unknown as KibanaReactContextValue);
+ });
+ });
afterAll(() => {
jest.clearAllMocks();
@@ -38,9 +51,11 @@ describe('AlertsBadge', () => {
'cloud.provider': null,
alertsCount: 1,
};
+ mockAsKqlFilter.mockReturnValue('host.name: foo');
+
render( );
expect(screen.queryByTestId('inventoryAlertsBadgeLink')?.getAttribute('href')).toEqual(
- '/app/observability/alerts?_a=(kuery:\'host.name: "foo"\',status:active)'
+ "/app/observability/alerts?_a=(kuery:'host.name: foo',status:active)"
);
expect(screen.queryByTestId('inventoryAlertsBadgeLink')?.textContent).toEqual('1');
});
@@ -57,9 +72,11 @@ describe('AlertsBadge', () => {
'cloud.provider': null,
alertsCount: 5,
};
+ mockAsKqlFilter.mockReturnValue('service.name: bar');
+
render( );
expect(screen.queryByTestId('inventoryAlertsBadgeLink')?.getAttribute('href')).toEqual(
- '/app/observability/alerts?_a=(kuery:\'service.name: "bar"\',status:active)'
+ "/app/observability/alerts?_a=(kuery:'service.name: bar',status:active)"
);
expect(screen.queryByTestId('inventoryAlertsBadgeLink')?.textContent).toEqual('5');
});
@@ -77,9 +94,12 @@ describe('AlertsBadge', () => {
'cloud.provider': null,
alertsCount: 2,
};
+
+ mockAsKqlFilter.mockReturnValue('service.name: bar AND service.environment: prod');
+
render( );
expect(screen.queryByTestId('inventoryAlertsBadgeLink')?.getAttribute('href')).toEqual(
- '/app/observability/alerts?_a=(kuery:\'service.name: "bar" AND service.environment: "prod"\',status:active)'
+ "/app/observability/alerts?_a=(kuery:'service.name: bar AND service.environment: prod',status:active)"
);
expect(screen.queryByTestId('inventoryAlertsBadgeLink')?.textContent).toEqual('2');
});
diff --git a/x-pack/plugins/observability_solution/inventory/public/components/alerts_badge/alerts_badge.tsx b/x-pack/plugins/observability_solution/inventory/public/components/alerts_badge/alerts_badge.tsx
index ba1b992ff62c1..a5845a7b42dcf 100644
--- a/x-pack/plugins/observability_solution/inventory/public/components/alerts_badge/alerts_badge.tsx
+++ b/x-pack/plugins/observability_solution/inventory/public/components/alerts_badge/alerts_badge.tsx
@@ -8,20 +8,21 @@ import React from 'react';
import rison from '@kbn/rison';
import { EuiBadge, EuiToolTip } from '@elastic/eui';
import { i18n } from '@kbn/i18n';
-import { Entity } from '../../../common/entities';
+import type { Entity } from '../../../common/entities';
+import { unflattenEntity } from '../../../common/utils/unflatten_entity';
import { useKibana } from '../../hooks/use_kibana';
-import { parseIdentityFieldValuesToKql } from '../../../common/utils/parse_identity_field_values_to_kql';
export function AlertsBadge({ entity }: { entity: Entity }) {
const {
services: {
http: { basePath },
+ entityManager,
},
} = useKibana();
const activeAlertsHref = basePath.prepend(
`/app/observability/alerts?_a=${rison.encode({
- kuery: parseIdentityFieldValuesToKql({ entity }),
+ kuery: entityManager.entityClient.asKqlFilter(unflattenEntity(entity)),
status: 'active',
})}`
);
diff --git a/x-pack/plugins/observability_solution/inventory/public/components/entities_grid/entity_name/entity_name.test.tsx b/x-pack/plugins/observability_solution/inventory/public/components/entities_grid/entity_name/entity_name.test.tsx
index 2e4f0c319edfc..d5d08ed415a40 100644
--- a/x-pack/plugins/observability_solution/inventory/public/components/entities_grid/entity_name/entity_name.test.tsx
+++ b/x-pack/plugins/observability_solution/inventory/public/components/entities_grid/entity_name/entity_name.test.tsx
@@ -5,148 +5,65 @@
* 2.0.
*/
-import { type KibanaReactContextValue } from '@kbn/kibana-react-plugin/public';
-import * as useKibana from '../../../hooks/use_kibana';
-import { EntityName } from '.';
-import type { Entity } from '../../../../common/entities';
-import { render, screen } from '@testing-library/react';
import React from 'react';
-import { ASSET_DETAILS_LOCATOR_ID } from '@kbn/observability-shared-plugin/common/locators/infra/asset_details_locator';
+import { render, screen } from '@testing-library/react';
+import { EntityName } from '.';
+import { useDetailViewRedirect } from '../../../hooks/use_detail_view_redirect';
+import { Entity } from '../../../../common/entities';
+import {
+ ENTITY_DEFINITION_ID,
+ ENTITY_DISPLAY_NAME,
+ ENTITY_ID,
+ ENTITY_IDENTITY_FIELDS,
+ ENTITY_LAST_SEEN,
+ ENTITY_TYPE,
+} from '@kbn/observability-shared-plugin/common';
+
+jest.mock('../../../hooks/use_detail_view_redirect');
+
+const useDetailViewRedirectMock = useDetailViewRedirect as jest.Mock;
describe('EntityName', () => {
- jest.spyOn(useKibana, 'useKibana').mockReturnValue({
- services: {
- share: {
- url: {
- locators: {
- get: (locatorId: string) => {
- return {
- getRedirectUrl: (params: { [key: string]: any }) => {
- if (locatorId === ASSET_DETAILS_LOCATOR_ID) {
- return `assets_url/${params.assetType}/${params.assetId}`;
- }
- return `services_url/${params.serviceName}?environment=${params.environment}`;
- },
- };
- },
- },
- },
- },
- },
- } as unknown as KibanaReactContextValue);
+ const mockEntity: Entity = {
+ [ENTITY_LAST_SEEN]: '2023-10-09T00:00:00Z',
+ [ENTITY_ID]: '1',
+ [ENTITY_DISPLAY_NAME]: 'entity_name',
+ [ENTITY_DEFINITION_ID]: 'entity_definition_id',
+ [ENTITY_IDENTITY_FIELDS]: ['service.name', 'service.environment'],
+ [ENTITY_TYPE]: 'service',
+ };
- afterAll(() => {
+ beforeEach(() => {
jest.clearAllMocks();
});
- it('returns host link', () => {
- const entity: Entity = {
- 'entity.last_seen_timestamp': 'foo',
- 'entity.id': '1',
- 'entity.type': 'host',
- 'entity.display_name': 'foo',
- 'entity.identity_fields': 'host.name',
- 'host.name': 'foo',
- 'entity.definition_id': 'host',
- 'cloud.provider': null,
- };
- render( );
- expect(screen.queryByTestId('entityNameLink')?.getAttribute('href')).toEqual(
- 'assets_url/host/foo'
- );
- expect(screen.queryByTestId('entityNameDisplayName')?.textContent).toEqual('foo');
- });
+ it('should render the entity name correctly', () => {
+ useDetailViewRedirectMock.mockReturnValue({
+ getEntityRedirectUrl: jest.fn().mockReturnValue(null),
+ });
- it('returns container link', () => {
- const entity: Entity = {
- 'entity.last_seen_timestamp': 'foo',
- 'entity.id': '1',
- 'entity.type': 'container',
- 'entity.display_name': 'foo',
- 'entity.identity_fields': 'container.id',
- 'container.id': 'foo',
- 'entity.definition_id': 'container',
- 'cloud.provider': null,
- };
- render( );
- expect(screen.queryByTestId('entityNameLink')?.getAttribute('href')).toEqual(
- 'assets_url/container/foo'
- );
- expect(screen.queryByTestId('entityNameDisplayName')?.textContent).toEqual('foo');
- });
+ render( );
- it('returns service link without environment', () => {
- const entity: Entity = {
- 'entity.last_seen_timestamp': 'foo',
- 'entity.id': '1',
- 'entity.type': 'service',
- 'entity.display_name': 'foo',
- 'entity.identity_fields': 'service.name',
- 'service.name': 'foo',
- 'entity.definition_id': 'service',
- 'agent.name': 'bar',
- };
- render( );
- expect(screen.queryByTestId('entityNameLink')?.getAttribute('href')).toEqual(
- 'services_url/foo?environment=undefined'
- );
- expect(screen.queryByTestId('entityNameDisplayName')?.textContent).toEqual('foo');
+ expect(screen.getByText('entity_name')).toBeInTheDocument();
});
- it('returns service link with environment', () => {
- const entity: Entity = {
- 'entity.last_seen_timestamp': 'foo',
- 'entity.id': '1',
- 'entity.type': 'service',
- 'entity.display_name': 'foo',
- 'entity.identity_fields': 'service.name',
- 'service.name': 'foo',
- 'entity.definition_id': 'service',
- 'agent.name': 'bar',
- 'service.environment': 'baz',
- };
- render( );
- expect(screen.queryByTestId('entityNameLink')?.getAttribute('href')).toEqual(
- 'services_url/foo?environment=baz'
- );
- expect(screen.queryByTestId('entityNameDisplayName')?.textContent).toEqual('foo');
- });
+ it('should a link when getEntityRedirectUrl returns a URL', () => {
+ useDetailViewRedirectMock.mockReturnValue({
+ getEntityRedirectUrl: jest.fn().mockReturnValue('http://foo.bar'),
+ });
- it('returns service link with first environment when it is an array', () => {
- const entity: Entity = {
- 'entity.last_seen_timestamp': 'foo',
- 'entity.id': '1',
- 'entity.type': 'service',
- 'entity.display_name': 'foo',
- 'entity.identity_fields': 'service.name',
- 'service.name': 'foo',
- 'entity.definition_id': 'service',
- 'agent.name': 'bar',
- 'service.environment': ['baz', 'bar', 'foo'],
- };
- render( );
- expect(screen.queryByTestId('entityNameLink')?.getAttribute('href')).toEqual(
- 'services_url/foo?environment=baz'
- );
- expect(screen.queryByTestId('entityNameDisplayName')?.textContent).toEqual('foo');
+ render( );
+
+ expect(screen.getByRole('link')).toHaveAttribute('href', 'http://foo.bar');
});
- it('returns service link identity fields is an array', () => {
- const entity: Entity = {
- 'entity.last_seen_timestamp': 'foo',
- 'entity.id': '1',
- 'entity.type': 'service',
- 'entity.display_name': 'foo',
- 'entity.identity_fields': ['service.name', 'service.environment'],
- 'service.name': 'foo',
- 'entity.definition_id': 'service',
- 'agent.name': 'bar',
- 'service.environment': 'baz',
- };
- render( );
- expect(screen.queryByTestId('entityNameLink')?.getAttribute('href')).toEqual(
- 'services_url/foo?environment=baz'
- );
- expect(screen.queryByTestId('entityNameDisplayName')?.textContent).toEqual('foo');
+ it('should not render a link when getEntityRedirectUrl returns null', () => {
+ useDetailViewRedirectMock.mockReturnValue({
+ getEntityRedirectUrl: jest.fn().mockReturnValue(null),
+ });
+
+ render( );
+
+ expect(screen.queryByRole('link')).not.toBeInTheDocument();
});
});
diff --git a/x-pack/plugins/observability_solution/inventory/public/components/entities_grid/entity_name/index.tsx b/x-pack/plugins/observability_solution/inventory/public/components/entities_grid/entity_name/index.tsx
index 982a616da8fda..e8db7013f8cb3 100644
--- a/x-pack/plugins/observability_solution/inventory/public/components/entities_grid/entity_name/index.tsx
+++ b/x-pack/plugins/observability_solution/inventory/public/components/entities_grid/entity_name/index.tsx
@@ -6,19 +6,12 @@
*/
import { EuiFlexGroup, EuiFlexItem, EuiLink } from '@elastic/eui';
-import {
- ASSET_DETAILS_LOCATOR_ID,
- AssetDetailsLocatorParams,
- ENTITY_DISPLAY_NAME,
- ENTITY_IDENTITY_FIELDS,
- ENTITY_TYPE,
- SERVICE_ENVIRONMENT,
- ServiceOverviewParams,
-} from '@kbn/observability-shared-plugin/common';
import React, { useCallback } from 'react';
-import { Entity } from '../../../../common/entities';
+import { ENTITY_DISPLAY_NAME } from '@kbn/observability-shared-plugin/common';
import { useKibana } from '../../../hooks/use_kibana';
+import type { Entity } from '../../../../common/entities';
import { EntityIcon } from '../../entity_icon';
+import { useDetailViewRedirect } from '../../../hooks/use_detail_view_redirect';
interface EntityNameProps {
entity: Entity;
@@ -26,14 +19,12 @@ interface EntityNameProps {
export function EntityName({ entity }: EntityNameProps) {
const {
- services: { telemetry, share },
+ services: { telemetry },
} = useKibana();
- const assetDetailsLocator =
- share?.url.locators.get(ASSET_DETAILS_LOCATOR_ID);
+ const { getEntityRedirectUrl } = useDetailViewRedirect();
- const serviceOverviewLocator =
- share?.url.locators.get('serviceOverviewLocator');
+ const href = getEntityRedirectUrl(entity);
const handleLinkClick = useCallback(() => {
telemetry.reportEntityViewClicked({
@@ -42,47 +33,25 @@ export function EntityName({ entity }: EntityNameProps) {
});
}, [entity, telemetry]);
- const getEntityRedirectUrl = useCallback(() => {
- const type = entity[ENTITY_TYPE];
- // For service, host and container type there is only one identity field
- const identityField = Array.isArray(entity[ENTITY_IDENTITY_FIELDS])
- ? entity[ENTITY_IDENTITY_FIELDS][0]
- : entity[ENTITY_IDENTITY_FIELDS];
- const identityValue = entity[identityField];
-
- switch (type) {
- case 'host':
- case 'container':
- return assetDetailsLocator?.getRedirectUrl({
- assetId: identityValue,
- assetType: type,
- });
-
- case 'service':
- return serviceOverviewLocator?.getRedirectUrl({
- serviceName: identityValue,
- environment: [entity[SERVICE_ENVIRONMENT] || undefined].flat()[0],
- });
- }
- }, [entity, assetDetailsLocator, serviceOverviewLocator]);
+ const entityName = (
+
+
+
+
+
+
+ {entity[ENTITY_DISPLAY_NAME]}
+
+
+
+ );
- return (
+ return href ? (
// eslint-disable-next-line @elastic/eui/href-or-on-click
-
-
-
-
-
-
-
- {entity[ENTITY_DISPLAY_NAME]}
-
-
-
+
+ {entityName}
+ ) : (
+ entityName
);
}
diff --git a/x-pack/plugins/observability_solution/inventory/public/components/entity_icon/index.tsx b/x-pack/plugins/observability_solution/inventory/public/components/entity_icon/index.tsx
index a62f0026ddfa0..48b21779d2e38 100644
--- a/x-pack/plugins/observability_solution/inventory/public/components/entity_icon/index.tsx
+++ b/x-pack/plugins/observability_solution/inventory/public/components/entity_icon/index.tsx
@@ -6,7 +6,12 @@
*/
import React from 'react';
-import { AGENT_NAME, CLOUD_PROVIDER, ENTITY_TYPE } from '@kbn/observability-shared-plugin/common';
+import {
+ AGENT_NAME,
+ CLOUD_PROVIDER,
+ ENTITY_TYPE,
+ ENTITY_TYPES,
+} from '@kbn/observability-shared-plugin/common';
import { type CloudProvider, CloudProviderIcon, AgentIcon } from '@kbn/custom-icons';
import { EuiFlexGroup, EuiFlexItem, EuiIcon } from '@elastic/eui';
import type { AgentName } from '@kbn/elastic-agent-utils';
@@ -27,7 +32,7 @@ export function EntityIcon({ entity }: EntityIconProps) {
const entityType = entity[ENTITY_TYPE];
const defaultIconSize = euiThemeVars.euiSizeL;
- if (entityType === 'host' || entityType === 'container') {
+ if (entityType === ENTITY_TYPES.HOST || entityType === ENTITY_TYPES.CONTAINER) {
const cloudProvider = getSingleValue(
entity[CLOUD_PROVIDER] as NotNullableCloudProvider | NotNullableCloudProvider[]
);
@@ -49,7 +54,7 @@ export function EntityIcon({ entity }: EntityIconProps) {
);
}
- if (entityType === 'service') {
+ if (entityType === ENTITY_TYPES.SERVICE) {
const agentName = getSingleValue(entity[AGENT_NAME] as AgentName | AgentName[]);
return ;
}
diff --git a/x-pack/plugins/observability_solution/inventory/public/hooks/use_detail_view_redirect.test.ts b/x-pack/plugins/observability_solution/inventory/public/hooks/use_detail_view_redirect.test.ts
new file mode 100644
index 0000000000000..cf4993f871880
--- /dev/null
+++ b/x-pack/plugins/observability_solution/inventory/public/hooks/use_detail_view_redirect.test.ts
@@ -0,0 +1,170 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license 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 { useDetailViewRedirect } from './use_detail_view_redirect';
+import { useKibana } from './use_kibana';
+import {
+ AGENT_NAME,
+ CLOUD_PROVIDER,
+ CONTAINER_ID,
+ ENTITY_DEFINITION_ID,
+ ENTITY_DISPLAY_NAME,
+ ENTITY_ID,
+ ENTITY_IDENTITY_FIELDS,
+ ENTITY_LAST_SEEN,
+ ENTITY_TYPE,
+ HOST_NAME,
+ ENTITY_TYPES,
+ SERVICE_ENVIRONMENT,
+ SERVICE_NAME,
+} from '@kbn/observability-shared-plugin/common';
+import { unflattenEntity } from '../../common/utils/unflatten_entity';
+import type { Entity } from '../../common/entities';
+
+jest.mock('./use_kibana');
+jest.mock('../../common/utils/unflatten_entity');
+
+const useKibanaMock = useKibana as jest.Mock;
+const unflattenEntityMock = unflattenEntity as jest.Mock;
+
+const commonEntityFields: Partial = {
+ [ENTITY_LAST_SEEN]: '2023-10-09T00:00:00Z',
+ [ENTITY_ID]: '1',
+ [ENTITY_DISPLAY_NAME]: 'entity_name',
+ [ENTITY_DEFINITION_ID]: 'entity_definition_id',
+};
+
+describe('useDetailViewRedirect', () => {
+ const mockGetIdentityFieldsValue = jest.fn();
+ const mockAsKqlFilter = jest.fn();
+ const mockGetRedirectUrl = jest.fn();
+
+ beforeEach(() => {
+ jest.clearAllMocks();
+
+ useKibanaMock.mockReturnValue({
+ services: {
+ share: {
+ url: {
+ locators: {
+ get: jest.fn().mockReturnValue({
+ getRedirectUrl: mockGetRedirectUrl,
+ }),
+ },
+ },
+ },
+ entityManager: {
+ entityClient: {
+ getIdentityFieldsValue: mockGetIdentityFieldsValue,
+ asKqlFilter: mockAsKqlFilter,
+ },
+ },
+ },
+ });
+
+ unflattenEntityMock.mockImplementation((entity) => entity);
+ });
+
+ it('getEntityRedirectUrl should return the correct URL for host entity', () => {
+ const entity: Entity = {
+ ...(commonEntityFields as Entity),
+ [ENTITY_IDENTITY_FIELDS]: [HOST_NAME],
+ [ENTITY_TYPE]: 'host',
+ [HOST_NAME]: 'host-1',
+ [CLOUD_PROVIDER]: null,
+ };
+
+ mockGetIdentityFieldsValue.mockReturnValue({ [HOST_NAME]: 'host-1' });
+ mockGetRedirectUrl.mockReturnValue('asset-details-url');
+
+ const { result } = renderHook(() => useDetailViewRedirect());
+ const url = result.current.getEntityRedirectUrl(entity);
+
+ expect(url).toBe('asset-details-url');
+ expect(mockGetRedirectUrl).toHaveBeenCalledWith({ assetId: 'host-1', assetType: 'host' });
+ });
+
+ it('getEntityRedirectUrl should return the correct URL for container entity', () => {
+ const entity: Entity = {
+ ...(commonEntityFields as Entity),
+ [ENTITY_IDENTITY_FIELDS]: [CONTAINER_ID],
+ [ENTITY_TYPE]: 'container',
+ [CONTAINER_ID]: 'container-1',
+ [CLOUD_PROVIDER]: null,
+ };
+
+ mockGetIdentityFieldsValue.mockReturnValue({ [CONTAINER_ID]: 'container-1' });
+ mockGetRedirectUrl.mockReturnValue('asset-details-url');
+
+ const { result } = renderHook(() => useDetailViewRedirect());
+ const url = result.current.getEntityRedirectUrl(entity);
+
+ expect(url).toBe('asset-details-url');
+ expect(mockGetRedirectUrl).toHaveBeenCalledWith({
+ assetId: 'container-1',
+ assetType: 'container',
+ });
+ });
+
+ it('getEntityRedirectUrl should return the correct URL for service entity', () => {
+ const entity: Entity = {
+ ...(commonEntityFields as Entity),
+ [ENTITY_IDENTITY_FIELDS]: [SERVICE_NAME],
+ [ENTITY_TYPE]: 'service',
+ [SERVICE_NAME]: 'service-1',
+ [SERVICE_ENVIRONMENT]: 'prod',
+ [AGENT_NAME]: 'node',
+ };
+ mockGetIdentityFieldsValue.mockReturnValue({ [SERVICE_NAME]: 'service-1' });
+ mockGetRedirectUrl.mockReturnValue('service-overview-url');
+
+ const { result } = renderHook(() => useDetailViewRedirect());
+ const url = result.current.getEntityRedirectUrl(entity);
+
+ expect(url).toBe('service-overview-url');
+ expect(mockGetRedirectUrl).toHaveBeenCalledWith({
+ serviceName: 'service-1',
+ environment: 'prod',
+ });
+ });
+
+ [
+ [ENTITY_TYPES.KUBERNETES.CLUSTER.ecs, 'kubernetes-f4dc26db-1b53-4ea2-a78b-1bfab8ea267c'],
+ [ENTITY_TYPES.KUBERNETES.CLUSTER.semconv, 'kubernetes_otel-cluster-overview'],
+ [ENTITY_TYPES.KUBERNETES.CRONJOB.ecs, 'kubernetes-0a672d50-bcb1-11ec-b64f-7dd6e8e82013'],
+ [ENTITY_TYPES.KUBERNETES.DAEMONSET.ecs, 'kubernetes-85879010-bcb1-11ec-b64f-7dd6e8e82013'],
+ [ENTITY_TYPES.KUBERNETES.DEPLOYMENT.ecs, 'kubernetes-5be46210-bcb1-11ec-b64f-7dd6e8e82013'],
+ [ENTITY_TYPES.KUBERNETES.JOB.ecs, 'kubernetes-9bf990a0-bcb1-11ec-b64f-7dd6e8e82013'],
+ [ENTITY_TYPES.KUBERNETES.NODE.ecs, 'kubernetes-b945b7b0-bcb1-11ec-b64f-7dd6e8e82013'],
+ [ENTITY_TYPES.KUBERNETES.POD.ecs, 'kubernetes-3d4d9290-bcb1-11ec-b64f-7dd6e8e82013'],
+ [ENTITY_TYPES.KUBERNETES.STATEFULSET.ecs, 'kubernetes-21694370-bcb2-11ec-b64f-7dd6e8e82013'],
+ ].forEach(([entityType, dashboardId]) => {
+ it(`getEntityRedirectUrl should return the correct URL for ${entityType} entity`, () => {
+ const entity: Entity = {
+ ...(commonEntityFields as Entity),
+ [ENTITY_IDENTITY_FIELDS]: ['some.field'],
+ [ENTITY_TYPE]: entityType,
+ };
+
+ mockAsKqlFilter.mockReturnValue('kql-query');
+ mockGetRedirectUrl.mockReturnValue('dashboard-url');
+
+ const { result } = renderHook(() => useDetailViewRedirect());
+ const url = result.current.getEntityRedirectUrl(entity);
+
+ expect(url).toBe('dashboard-url');
+ expect(mockGetRedirectUrl).toHaveBeenCalledWith({
+ dashboardId,
+ query: {
+ language: 'kuery',
+ query: 'kql-query',
+ },
+ });
+ });
+ });
+});
diff --git a/x-pack/plugins/observability_solution/inventory/public/hooks/use_detail_view_redirect.ts b/x-pack/plugins/observability_solution/inventory/public/hooks/use_detail_view_redirect.ts
new file mode 100644
index 0000000000000..23380dc3704de
--- /dev/null
+++ b/x-pack/plugins/observability_solution/inventory/public/hooks/use_detail_view_redirect.ts
@@ -0,0 +1,114 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+import {
+ ASSET_DETAILS_LOCATOR_ID,
+ AssetDetailsLocatorParams,
+ ENTITY_IDENTITY_FIELDS,
+ ENTITY_TYPE,
+ ENTITY_TYPES,
+ SERVICE_ENVIRONMENT,
+ SERVICE_OVERVIEW_LOCATOR_ID,
+ ServiceOverviewParams,
+} from '@kbn/observability-shared-plugin/common';
+import { useCallback } from 'react';
+import { DashboardLocatorParams } from '@kbn/dashboard-plugin/public';
+import { DASHBOARD_APP_LOCATOR } from '@kbn/deeplinks-analytics';
+import { castArray } from 'lodash';
+import type { Entity } from '../../common/entities';
+import { unflattenEntity } from '../../common/utils/unflatten_entity';
+import { useKibana } from './use_kibana';
+
+const KUBERNETES_DASHBOARDS_IDS: Record = {
+ [ENTITY_TYPES.KUBERNETES.CLUSTER.ecs]: 'kubernetes-f4dc26db-1b53-4ea2-a78b-1bfab8ea267c',
+ [ENTITY_TYPES.KUBERNETES.CLUSTER.semconv]: 'kubernetes_otel-cluster-overview',
+ [ENTITY_TYPES.KUBERNETES.CRONJOB.ecs]: 'kubernetes-0a672d50-bcb1-11ec-b64f-7dd6e8e82013',
+ [ENTITY_TYPES.KUBERNETES.DAEMONSET.ecs]: 'kubernetes-85879010-bcb1-11ec-b64f-7dd6e8e82013',
+ [ENTITY_TYPES.KUBERNETES.DEPLOYMENT.ecs]: 'kubernetes-5be46210-bcb1-11ec-b64f-7dd6e8e82013',
+ [ENTITY_TYPES.KUBERNETES.JOB.ecs]: 'kubernetes-9bf990a0-bcb1-11ec-b64f-7dd6e8e82013',
+ [ENTITY_TYPES.KUBERNETES.NODE.ecs]: 'kubernetes-b945b7b0-bcb1-11ec-b64f-7dd6e8e82013',
+ [ENTITY_TYPES.KUBERNETES.POD.ecs]: 'kubernetes-3d4d9290-bcb1-11ec-b64f-7dd6e8e82013',
+ [ENTITY_TYPES.KUBERNETES.STATEFULSET.ecs]: 'kubernetes-21694370-bcb2-11ec-b64f-7dd6e8e82013',
+};
+
+export const useDetailViewRedirect = () => {
+ const {
+ services: { share, entityManager },
+ } = useKibana();
+
+ const locators = share.url.locators;
+ const assetDetailsLocator = locators.get(ASSET_DETAILS_LOCATOR_ID);
+ const dashboardLocator = locators.get(DASHBOARD_APP_LOCATOR);
+ const serviceOverviewLocator = locators.get(SERVICE_OVERVIEW_LOCATOR_ID);
+
+ const getSingleIdentityFieldValue = useCallback(
+ (entity: Entity) => {
+ const identityFields = castArray(entity[ENTITY_IDENTITY_FIELDS]);
+ if (identityFields.length > 1) {
+ throw new Error(`Multiple identity fields are not supported for ${entity[ENTITY_TYPE]}`);
+ }
+
+ const identityField = identityFields[0];
+ return entityManager.entityClient.getIdentityFieldsValue(unflattenEntity(entity))[
+ identityField
+ ];
+ },
+ [entityManager.entityClient]
+ );
+
+ const getDetailViewRedirectUrl = useCallback(
+ (entity: Entity) => {
+ const type = entity[ENTITY_TYPE];
+ const identityValue = getSingleIdentityFieldValue(entity);
+
+ switch (type) {
+ case ENTITY_TYPES.HOST:
+ case ENTITY_TYPES.CONTAINER:
+ return assetDetailsLocator?.getRedirectUrl({
+ assetId: identityValue,
+ assetType: type,
+ });
+
+ case 'service':
+ return serviceOverviewLocator?.getRedirectUrl({
+ serviceName: identityValue,
+ // service.environemnt is not part of entity.identityFields
+ // we need to manually get its value
+ environment: [entity[SERVICE_ENVIRONMENT] || undefined].flat()[0],
+ });
+
+ default:
+ return undefined;
+ }
+ },
+ [assetDetailsLocator, getSingleIdentityFieldValue, serviceOverviewLocator]
+ );
+
+ const getDashboardRedirectUrl = useCallback(
+ (entity: Entity) => {
+ const type = entity[ENTITY_TYPE];
+ const dashboardId = KUBERNETES_DASHBOARDS_IDS[type];
+
+ return dashboardId
+ ? dashboardLocator?.getRedirectUrl({
+ dashboardId,
+ query: {
+ language: 'kuery',
+ query: entityManager.entityClient.asKqlFilter(unflattenEntity(entity)),
+ },
+ })
+ : undefined;
+ },
+ [dashboardLocator, entityManager.entityClient]
+ );
+
+ const getEntityRedirectUrl = useCallback(
+ (entity: Entity) => getDetailViewRedirectUrl(entity) ?? getDashboardRedirectUrl(entity),
+ [getDashboardRedirectUrl, getDetailViewRedirectUrl]
+ );
+
+ return { getEntityRedirectUrl };
+};
diff --git a/x-pack/plugins/observability_solution/inventory/server/routes/entities/get_identify_fields.test.ts b/x-pack/plugins/observability_solution/inventory/server/routes/entities/get_identify_fields.test.ts
index ffd5ba9c6f855..62d77c08fd27a 100644
--- a/x-pack/plugins/observability_solution/inventory/server/routes/entities/get_identify_fields.test.ts
+++ b/x-pack/plugins/observability_solution/inventory/server/routes/entities/get_identify_fields.test.ts
@@ -30,7 +30,7 @@ describe('getIdentityFields', () => {
it('should return a Map with unique entity types and their respective identity fields', () => {
const serviceEntity: Entity = {
'agent.name': 'node',
- 'entity.identity_fields': ['service.name', 'service.environment'],
+ [ENTITY_IDENTITY_FIELDS]: ['service.name', 'service.environment'],
'service.name': 'my-service',
'entity.type': 'service',
...commonEntityFields,
diff --git a/x-pack/plugins/observability_solution/inventory/server/routes/has_data/get_has_data.ts b/x-pack/plugins/observability_solution/inventory/server/routes/has_data/get_has_data.ts
index 27ba8c0fe46c3..c1e4a82c343b0 100644
--- a/x-pack/plugins/observability_solution/inventory/server/routes/has_data/get_has_data.ts
+++ b/x-pack/plugins/observability_solution/inventory/server/routes/has_data/get_has_data.ts
@@ -26,7 +26,6 @@ export async function getHasData({
});
const totalCount = esqlResultToPlainObjects(esqlResults)?.[0]._count ?? 0;
-
return { hasData: totalCount > 0 };
} catch (e) {
logger.error(e);
diff --git a/x-pack/plugins/observability_solution/inventory/tsconfig.json b/x-pack/plugins/observability_solution/inventory/tsconfig.json
index d27d170b0990e..bd77df478cad1 100644
--- a/x-pack/plugins/observability_solution/inventory/tsconfig.json
+++ b/x-pack/plugins/observability_solution/inventory/tsconfig.json
@@ -53,5 +53,8 @@
"@kbn/spaces-plugin",
"@kbn/cloud-plugin",
"@kbn/storybook",
+ "@kbn/zod",
+ "@kbn/dashboard-plugin",
+ "@kbn/deeplinks-analytics"
]
}
diff --git a/x-pack/plugins/observability_solution/observability_shared/common/entity/entity_types.ts b/x-pack/plugins/observability_solution/observability_shared/common/entity/entity_types.ts
index b905f542d3473..4d8be9efc59c6 100644
--- a/x-pack/plugins/observability_solution/observability_shared/common/entity/entity_types.ts
+++ b/x-pack/plugins/observability_solution/observability_shared/common/entity/entity_types.ts
@@ -5,7 +5,25 @@
* 2.0.
*/
-export enum EntityType {
- HOST = 'host',
- CONTAINER = 'container',
-}
+const createKubernetesEntity = (base: T) => ({
+ ecs: `kubernetes_${base}_ecs` as const,
+ semconv: `kubernetes_${base}_semconv` as const,
+});
+
+export const ENTITY_TYPES = {
+ HOST: 'host',
+ CONTAINER: 'container',
+ SERVICE: 'service',
+ KUBERNETES: {
+ CLUSTER: createKubernetesEntity('cluster'),
+ CONTAINER: createKubernetesEntity('container'),
+ CRONJOB: createKubernetesEntity('cron_job'),
+ DAEMONSET: createKubernetesEntity('daemon_set'),
+ DEPLOYMENT: createKubernetesEntity('deployment'),
+ JOB: createKubernetesEntity('job'),
+ NAMESPACE: createKubernetesEntity('namespace'),
+ NODE: createKubernetesEntity('node'),
+ POD: createKubernetesEntity('pod'),
+ STATEFULSET: createKubernetesEntity('stateful_set'),
+ },
+} as const;
diff --git a/x-pack/plugins/observability_solution/observability_shared/common/entity/index.ts b/x-pack/plugins/observability_solution/observability_shared/common/entity/index.ts
index 27bef43d5ff7a..adc07a2931b60 100644
--- a/x-pack/plugins/observability_solution/observability_shared/common/entity/index.ts
+++ b/x-pack/plugins/observability_solution/observability_shared/common/entity/index.ts
@@ -5,5 +5,5 @@
* 2.0.
*/
-export { EntityType } from './entity_types';
+export { ENTITY_TYPES } from './entity_types';
export { EntityDataStreamType } from './entity_data_stream_types';
diff --git a/x-pack/plugins/observability_solution/observability_shared/common/index.ts b/x-pack/plugins/observability_solution/observability_shared/common/index.ts
index e9be61e8fde34..b4b7731d166b7 100644
--- a/x-pack/plugins/observability_solution/observability_shared/common/index.ts
+++ b/x-pack/plugins/observability_solution/observability_shared/common/index.ts
@@ -193,6 +193,7 @@ export type {
export {
ServiceOverviewLocatorDefinition,
+ SERVICE_OVERVIEW_LOCATOR_ID,
TransactionDetailsByNameLocatorDefinition,
ASSET_DETAILS_FLYOUT_LOCATOR_ID,
AssetDetailsFlyoutLocatorDefinition,
@@ -218,4 +219,4 @@ export {
export { COMMON_OBSERVABILITY_GROUPING } from './embeddable_grouping';
-export { EntityType, EntityDataStreamType } from './entity';
+export { ENTITY_TYPES, EntityDataStreamType } from './entity';
diff --git a/x-pack/plugins/observability_solution/observability_shared/common/locators/apm/service_overview_locator.ts b/x-pack/plugins/observability_solution/observability_shared/common/locators/apm/service_overview_locator.ts
index 2a4e8aac330ec..e216640f31b4f 100644
--- a/x-pack/plugins/observability_solution/observability_shared/common/locators/apm/service_overview_locator.ts
+++ b/x-pack/plugins/observability_solution/observability_shared/common/locators/apm/service_overview_locator.ts
@@ -16,9 +16,10 @@ export interface ServiceOverviewParams extends SerializableRecord {
}
export type ServiceOverviewLocator = LocatorPublic;
+export const SERVICE_OVERVIEW_LOCATOR_ID = 'serviceOverviewLocator';
export class ServiceOverviewLocatorDefinition implements LocatorDefinition {
- public readonly id = 'serviceOverviewLocator';
+ public readonly id = SERVICE_OVERVIEW_LOCATOR_ID;
public readonly getLocation = async ({
rangeFrom,
From 1411604dd0caaba4ab2b6e46dcd9df0544e245c3 Mon Sep 17 00:00:00 2001
From: Dima Arnautov
Date: Mon, 4 Nov 2024 17:10:24 +0100
Subject: [PATCH 019/101] [ML] Enable change point detection functional tests
(#198702)
## Summary
Closes https://github.com/elastic/kibana/issues/178258
Enable change point detection functional tests
### 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
- [x] [Flaky Test
Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was
used on any tests changed
---
.../components/change_point_detection/fields_config.tsx | 2 +-
x-pack/test/functional/apps/aiops/change_point_detection.ts | 3 +--
.../services/aiops/change_point_detection_page.ts | 6 ++++++
3 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/x-pack/plugins/aiops/public/components/change_point_detection/fields_config.tsx b/x-pack/plugins/aiops/public/components/change_point_detection/fields_config.tsx
index 38b5620465a0d..b1c0e3d89f35a 100644
--- a/x-pack/plugins/aiops/public/components/change_point_detection/fields_config.tsx
+++ b/x-pack/plugins/aiops/public/components/change_point_detection/fields_config.tsx
@@ -261,7 +261,7 @@ const FieldPanel: FC = ({
disabled: removeDisabled,
},
],
- 'data=test-subj': 'aiopsChangePointDetectionContextMenuPanel',
+ 'data-test-subj': 'aiopsChangePointDetectionContextMenuPanel',
},
{
id: 'attachMainPanel',
diff --git a/x-pack/test/functional/apps/aiops/change_point_detection.ts b/x-pack/test/functional/apps/aiops/change_point_detection.ts
index 96628c143077c..22177a0a9166d 100644
--- a/x-pack/test/functional/apps/aiops/change_point_detection.ts
+++ b/x-pack/test/functional/apps/aiops/change_point_detection.ts
@@ -16,8 +16,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
// aiops lives in the ML UI so we need some related services.
const ml = getService('ml');
- // Failing: See https://github.com/elastic/kibana/issues/178258
- describe.skip('change point detection', function () {
+ describe('change point detection', function () {
before(async () => {
await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/ml/ecommerce');
await ml.testResources.createDataViewIfNeeded('ft_ecommerce', 'order_date');
diff --git a/x-pack/test/functional/services/aiops/change_point_detection_page.ts b/x-pack/test/functional/services/aiops/change_point_detection_page.ts
index 50c4278a9293e..79bc4c378fb1a 100644
--- a/x-pack/test/functional/services/aiops/change_point_detection_page.ts
+++ b/x-pack/test/functional/services/aiops/change_point_detection_page.ts
@@ -131,6 +131,12 @@ export function ChangePointDetectionPageProvider(
},
async openPanelContextMenu(panelIndex: number) {
+ // Check if already open
+ const isOpen = await testSubjects.exists('aiopsChangePointDetectionAttachButton');
+ if (isOpen) {
+ return;
+ }
+
await testSubjects.click(
`aiopsChangePointPanel_${panelIndex} > aiopsChangePointDetectionContextMenuButton`
);
From e3de6c457554844813068aa34c5036fd379dd732 Mon Sep 17 00:00:00 2001
From: Krzysztof Kowalczyk
Date: Mon, 4 Nov 2024 17:14:27 +0100
Subject: [PATCH 020/101] [Dashboard] Keep pinned filters on dashboard reset
(#198770)
## Summary
This PR fixes a bug where pinned filters would get removed when you
reset a dashboard.
https://github.com/user-attachments/assets/b43b0cb4-15e0-475b-a984-25a9c4ab5ee4
Closes: #166884
---
.../state/dashboard_container_reducers.ts | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/src/plugins/dashboard/public/dashboard_container/state/dashboard_container_reducers.ts b/src/plugins/dashboard/public/dashboard_container/state/dashboard_container_reducers.ts
index 0bb33a05c36ce..c0c39b0ffd284 100644
--- a/src/plugins/dashboard/public/dashboard_container/state/dashboard_container_reducers.ts
+++ b/src/plugins/dashboard/public/dashboard_container/state/dashboard_container_reducers.ts
@@ -9,6 +9,7 @@
import { PayloadAction } from '@reduxjs/toolkit';
+import { isFilterPinned } from '@kbn/es-query';
import {
DashboardReduxState,
DashboardStateFromSaveModal,
@@ -94,13 +95,20 @@ export const dashboardContainerReducers = {
* `timeRestore` is `false`, this causes unecessary data fetches for the control group.
* 2) The view mode, since resetting should never impact this - sometimes the Dashboard saved objects
* have this saved in and we don't want resetting to cause unexpected view mode changes.
+ * 3) Pinned filters.
*/
resetToLastSavedInput: (
state: DashboardReduxState,
action: PayloadAction
) => {
+ const keepPinnedFilters = [
+ ...state.explicitInput.filters.filter(isFilterPinned),
+ ...action.payload.filters,
+ ];
+
state.explicitInput = {
...action.payload,
+ filters: keepPinnedFilters,
...(!state.explicitInput.timeRestore && { timeRange: state.explicitInput.timeRange }),
viewMode: state.explicitInput.viewMode,
};
From 7a9056d00e7901efb2554a427bb6e00cfd7f904c Mon Sep 17 00:00:00 2001
From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
Date: Tue, 5 Nov 2024 03:23:23 +1100
Subject: [PATCH 021/101] skip failing test suite (#197335)
---
.../cypress/e2e/all/alerts_automated_action_results.cy.ts | 1 +
1 file changed, 1 insertion(+)
diff --git a/x-pack/plugins/osquery/cypress/e2e/all/alerts_automated_action_results.cy.ts b/x-pack/plugins/osquery/cypress/e2e/all/alerts_automated_action_results.cy.ts
index cd36950ba3b60..84805e3690afe 100644
--- a/x-pack/plugins/osquery/cypress/e2e/all/alerts_automated_action_results.cy.ts
+++ b/x-pack/plugins/osquery/cypress/e2e/all/alerts_automated_action_results.cy.ts
@@ -13,6 +13,7 @@ const UUID_REGEX = '[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-
// FLAKY: https://github.com/elastic/kibana/issues/178404
// FLAKY: https://github.com/elastic/kibana/issues/197335
+// Failing: See https://github.com/elastic/kibana/issues/197335
describe.skip('Alert Flyout Automated Action Results', () => {
let ruleId: string;
From 36a366a7867cd056ab339c2683484070cfa8940a Mon Sep 17 00:00:00 2001
From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
Date: Tue, 5 Nov 2024 03:23:40 +1100
Subject: [PATCH 022/101] skip failing test suite (#178404)
---
.../cypress/e2e/all/alerts_automated_action_results.cy.ts | 1 +
1 file changed, 1 insertion(+)
diff --git a/x-pack/plugins/osquery/cypress/e2e/all/alerts_automated_action_results.cy.ts b/x-pack/plugins/osquery/cypress/e2e/all/alerts_automated_action_results.cy.ts
index 84805e3690afe..a815497e40c96 100644
--- a/x-pack/plugins/osquery/cypress/e2e/all/alerts_automated_action_results.cy.ts
+++ b/x-pack/plugins/osquery/cypress/e2e/all/alerts_automated_action_results.cy.ts
@@ -14,6 +14,7 @@ const UUID_REGEX = '[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-
// FLAKY: https://github.com/elastic/kibana/issues/178404
// FLAKY: https://github.com/elastic/kibana/issues/197335
// Failing: See https://github.com/elastic/kibana/issues/197335
+// Failing: See https://github.com/elastic/kibana/issues/178404
describe.skip('Alert Flyout Automated Action Results', () => {
let ruleId: string;
From 105ee0626d2b235ad179de09b7e627eba5c0758f Mon Sep 17 00:00:00 2001
From: Alexey Antonov
Date: Mon, 4 Nov 2024 18:41:48 +0200
Subject: [PATCH 023/101] fix: [Stateful: Connectors:New connector page]Copy
buttons are missing their name during announcement (#198003)
Closes: #197580
## Summary
All buttons should not only be clear, understandable when the user sees
them, but also for the users using assistive technology.
## What was changed?:
1. `aria-label` attributes were added for mentioned buttons
## Screen:
---
.../components/generated_config_fields.tsx | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/components/generated_config_fields.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/components/generated_config_fields.tsx
index 133c15f97f61c..53cbf579a940f 100644
--- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/components/generated_config_fields.tsx
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/components/generated_config_fields.tsx
@@ -156,6 +156,10 @@ export const GeneratedConfigFields: React.FC = ({
data-test-subj="enterpriseSearchConnectorDeploymentButton"
iconType="copyClipboard"
onClick={copy}
+ aria-label={i18n.translate(
+ 'xpack.enterpriseSearch.connectorDeployment.copyConnectorId',
+ { defaultMessage: 'Copy connector ID' }
+ )}
/>
)}
@@ -237,6 +241,10 @@ export const GeneratedConfigFields: React.FC = ({
isLoading={isGenerateLoading}
onClick={refreshButtonClick}
disabled={!connector.index_name}
+ aria-label={i18n.translate(
+ 'xpack.enterpriseSearch.connectorDeployment.refreshAPIKey',
+ { defaultMessage: 'Refresh an Elasticsearch API key' }
+ )}
/>
)}
@@ -246,6 +254,10 @@ export const GeneratedConfigFields: React.FC = ({
data-test-subj="enterpriseSearchConnectorDeploymentButton"
iconType="copyClipboard"
onClick={copy}
+ aria-label={i18n.translate(
+ 'xpack.enterpriseSearch.connectorDeployment.copyIndexName',
+ { defaultMessage: 'Copy index name' }
+ )}
/>
From 198fbcf253499ee276541b73dcc6980df6bfc66b Mon Sep 17 00:00:00 2001
From: Alexey Antonov
Date: Mon, 4 Nov 2024 18:42:00 +0200
Subject: [PATCH 024/101] fix: [Stateful: Indices: Overview page] Wrong focus
order after generating API key on the dialog (#197212)
Closes #196490
## Description
The focus order should be clear and sequential. Changes in the dialog
should be announced so that users, especially those using assistive
technologies, can navigate easily and understand what is happening.
## What was changed:
1. `generate_api_key_modal/modal.tsx` was slightly updated to be more
accessibility (a11y) friendly:
- To differentiate the two UI states, we now use two colors for the
panel: `primary` for the initial state and `success` when the API key is
generated.
- An `EuiCallOut` with `role="alert"` was added to announce status
updates for screen reader users.
- After creating an API key, the focus now moves to the `Download API
key` button.
## Screen
https://github.com/user-attachments/assets/24d13648-390a-4fe6-9202-d808c38c3c5c
---
.../generate_api_key_modal/modal.tsx | 51 ++++++++++++++++---
1 file changed, 44 insertions(+), 7 deletions(-)
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/generate_api_key_modal/modal.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/generate_api_key_modal/modal.tsx
index 18514ef93d9d9..d19568bea9e3c 100644
--- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/generate_api_key_modal/modal.tsx
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/generate_api_key_modal/modal.tsx
@@ -5,7 +5,7 @@
* 2.0.
*/
-import React from 'react';
+import React, { useRef, useEffect } from 'react';
import { useValues, useActions } from 'kea';
@@ -26,11 +26,12 @@ import {
EuiText,
EuiSpacer,
EuiLink,
- EuiFormLabel,
EuiCodeBlock,
+ EuiCallOut,
} from '@elastic/eui';
import { i18n } from '@kbn/i18n';
+import { FormattedMessage } from '@kbn/i18n-react';
import { docLinks } from '../../../../../shared/doc_links';
@@ -49,6 +50,13 @@ export const GenerateApiKeyModal: React.FC = ({ indexN
const { ingestionMethod } = useValues(IndexViewLogic);
const { setKeyName } = useActions(GenerateApiKeyModalLogic);
const { makeRequest } = useActions(GenerateApiKeyLogic);
+ const copyApiKeyRef = useRef(null);
+
+ useEffect(() => {
+ if (isSuccess) {
+ copyApiKeyRef.current?.focus();
+ }
+ }, [isSuccess]);
return (
@@ -68,7 +76,11 @@ export const GenerateApiKeyModal: React.FC = ({ indexN
"Before you can start posting documents to your Elasticsearch index you'll need to create at least one API key.",
})}
-
+
{i18n.translate(
'xpack.enterpriseSearch.content.overview.generateApiKeyModal.learnMore',
{ defaultMessage: 'Learn more about API keys' }
@@ -77,15 +89,25 @@ export const GenerateApiKeyModal: React.FC = ({ indexN
-
+
+
{!isSuccess ? (
<>
-
+
+ }
+ fullWidth
+ >
= ({ indexN
>
) : (
- {keyName}
-
+ {keyName},
+ }}
+ />
+ }
+ color="success"
+ iconType="check"
+ role="alert"
+ />
= ({ indexN
= ({ indexN
From 693e3a222cc17e9e6eb68e02f646a5ecebe2b3e9 Mon Sep 17 00:00:00 2001
From: Paul Tavares <56442535+paul-tavares@users.noreply.github.com>
Date: Mon, 4 Nov 2024 11:43:59 -0500
Subject: [PATCH 025/101] [Security Solution][Endpoint] Enable API test for
creation of DOT prefixed indices for serverless MKI runs (#198560)
## Summary
- Enable API test for creation of DOT prefixed indices for serverless
MKI runs
---
.../trial_license_complete_tier/datastream_index_creation.ts | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/x-pack/test/security_solution_api_integration/test_suites/edr_workflows/policy/trial_license_complete_tier/datastream_index_creation.ts b/x-pack/test/security_solution_api_integration/test_suites/edr_workflows/policy/trial_license_complete_tier/datastream_index_creation.ts
index bc029369f3fe4..0fa75d7cfb989 100644
--- a/x-pack/test/security_solution_api_integration/test_suites/edr_workflows/policy/trial_license_complete_tier/datastream_index_creation.ts
+++ b/x-pack/test/security_solution_api_integration/test_suites/edr_workflows/policy/trial_license_complete_tier/datastream_index_creation.ts
@@ -28,8 +28,7 @@ export default function ({ getService }: FtrProviderContext) {
const config = getService('config');
const isServerless = config.get('serverless');
- // FIXME:PT Remove @skipInServerlessMKI and enable it for MKI
- describe('@ess @serverless @skipInServerlessMKI Creation of DOT indices for elastic defend policies', function () {
+ describe('@ess @serverless Creation of DOT indices for elastic defend policies', function () {
let testData: PolicyTestResourceInfo;
const getExpectedIndexList = (namespace: string): string[] => {
From 768a135b509555c8fbc30212bb75f3f36a1760fb Mon Sep 17 00:00:00 2001
From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
Date: Tue, 5 Nov 2024 04:05:05 +1100
Subject: [PATCH 026/101] [ML] Unauthorized route migration for routes owned by
ml-ui (#198337)
### 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: James Gowdy
---
.../define_route.ts | 7 +++++++
.../routes/log_rate_analysis/define_route.ts | 14 ++++++++++++++
.../define_route.ts | 7 +++++++
x-pack/plugins/ml/server/routes/system.ts | 7 +++++++
.../routes/api/audit_messages/register_route.ts | 7 +++++++
.../routes/api/delete_transforms/register_route.ts | 7 +++++++
.../routes/api/field_histograms/register_route.ts | 7 +++++++
.../api/reauthorize_transforms/register_route.ts | 7 +++++++
.../routes/api/reset_transforms/register_route.ts | 7 +++++++
.../api/schedule_now_transforms/register_route.ts | 7 +++++++
.../routes/api/start_transforms/register_route.ts | 7 +++++++
.../routes/api/stop_transforms/register_route.ts | 7 +++++++
.../routes/api/transforms_all/register_route.ts | 7 +++++++
.../routes/api/transforms_create/register_route.ts | 7 +++++++
.../routes/api/transforms_nodes/register_route.ts | 7 +++++++
.../api/transforms_preview/register_route.ts | 7 +++++++
.../routes/api/transforms_single/register_route.ts | 7 +++++++
.../api/transforms_stats_all/register_route.ts | 7 +++++++
.../api/transforms_stats_single/register_route.ts | 7 +++++++
.../routes/api/transforms_update/register_route.ts | 7 +++++++
20 files changed, 147 insertions(+)
diff --git a/x-pack/plugins/aiops/server/routes/categorization_field_validation/define_route.ts b/x-pack/plugins/aiops/server/routes/categorization_field_validation/define_route.ts
index ecc4d9c94bde1..5d166d1493b33 100644
--- a/x-pack/plugins/aiops/server/routes/categorization_field_validation/define_route.ts
+++ b/x-pack/plugins/aiops/server/routes/categorization_field_validation/define_route.ts
@@ -27,6 +27,13 @@ export const defineRoute = (
.addVersion(
{
version: '1',
+ security: {
+ authz: {
+ enabled: false,
+ reason:
+ 'This route is opted out from authorization because permissions will be checked by elasticsearch',
+ },
+ },
validate: {
request: {
body: categorizationFieldValidationSchema,
diff --git a/x-pack/plugins/aiops/server/routes/log_rate_analysis/define_route.ts b/x-pack/plugins/aiops/server/routes/log_rate_analysis/define_route.ts
index 5c092c1a3be58..b69a66e4e69c5 100644
--- a/x-pack/plugins/aiops/server/routes/log_rate_analysis/define_route.ts
+++ b/x-pack/plugins/aiops/server/routes/log_rate_analysis/define_route.ts
@@ -38,6 +38,13 @@ export const defineRoute = (
.addVersion(
{
version: '2',
+ security: {
+ authz: {
+ enabled: false,
+ reason:
+ 'This route is opted out from authorization because permissions will be checked by elasticsearch',
+ },
+ },
validate: {
request: {
body: aiopsLogRateAnalysisSchemaV2,
@@ -49,6 +56,13 @@ export const defineRoute = (
.addVersion(
{
version: '3',
+ security: {
+ authz: {
+ enabled: false,
+ reason:
+ 'This route is opted out from authorization because permissions will be checked by elasticsearch',
+ },
+ },
validate: {
request: {
body: aiopsLogRateAnalysisSchemaV3,
diff --git a/x-pack/plugins/aiops/server/routes/log_rate_analysis_field_candidates/define_route.ts b/x-pack/plugins/aiops/server/routes/log_rate_analysis_field_candidates/define_route.ts
index 132ecfee7b212..fc7ed7c808975 100644
--- a/x-pack/plugins/aiops/server/routes/log_rate_analysis_field_candidates/define_route.ts
+++ b/x-pack/plugins/aiops/server/routes/log_rate_analysis_field_candidates/define_route.ts
@@ -35,6 +35,13 @@ export const defineRoute = (
.addVersion(
{
version: '1',
+ security: {
+ authz: {
+ enabled: false,
+ reason:
+ 'This route is opted out from authorization because permissions will be checked by elasticsearch',
+ },
+ },
validate: {
request: {
body: aiopsLogRateAnalysisSchemaV3,
diff --git a/x-pack/plugins/ml/server/routes/system.ts b/x-pack/plugins/ml/server/routes/system.ts
index bf4fa3161f5b9..b6765c4b5f16c 100644
--- a/x-pack/plugins/ml/server/routes/system.ts
+++ b/x-pack/plugins/ml/server/routes/system.ts
@@ -97,6 +97,13 @@ export function systemRoutes(
.addVersion(
{
version: '1',
+ security: {
+ authz: {
+ enabled: false,
+ reason:
+ 'This route is opted out from authorization because permissions will be checked by elasticsearch',
+ },
+ },
validate: false,
},
routeGuard.basicLicenseAPIGuard(async ({ mlClient, request, response }) => {
diff --git a/x-pack/plugins/transform/server/routes/api/audit_messages/register_route.ts b/x-pack/plugins/transform/server/routes/api/audit_messages/register_route.ts
index 00dd124f1aa01..aef0183ef3571 100644
--- a/x-pack/plugins/transform/server/routes/api/audit_messages/register_route.ts
+++ b/x-pack/plugins/transform/server/routes/api/audit_messages/register_route.ts
@@ -35,6 +35,13 @@ export function registerRoute({ router, getLicense }: RouteDependencies) {
.addVersion(
{
version: '1',
+ security: {
+ authz: {
+ enabled: false,
+ reason:
+ 'This route is opted out from authorization because permissions will be checked by elasticsearch',
+ },
+ },
validate: {
request: {
params: transformIdParamSchema,
diff --git a/x-pack/plugins/transform/server/routes/api/delete_transforms/register_route.ts b/x-pack/plugins/transform/server/routes/api/delete_transforms/register_route.ts
index 20c169c79dda0..3a7af3313175a 100644
--- a/x-pack/plugins/transform/server/routes/api/delete_transforms/register_route.ts
+++ b/x-pack/plugins/transform/server/routes/api/delete_transforms/register_route.ts
@@ -34,6 +34,13 @@ export function registerRoute(routeDependencies: RouteDependencies) {
.addVersion(
{
version: '1',
+ security: {
+ authz: {
+ enabled: false,
+ reason:
+ 'This route is opted out from authorization because permissions will be checked by elasticsearch',
+ },
+ },
validate: {
request: {
body: deleteTransformsRequestSchema,
diff --git a/x-pack/plugins/transform/server/routes/api/field_histograms/register_route.ts b/x-pack/plugins/transform/server/routes/api/field_histograms/register_route.ts
index c3fe803ba2366..03cee7befb151 100644
--- a/x-pack/plugins/transform/server/routes/api/field_histograms/register_route.ts
+++ b/x-pack/plugins/transform/server/routes/api/field_histograms/register_route.ts
@@ -23,6 +23,13 @@ export function registerRoute({ router, getLicense }: RouteDependencies) {
.addVersion(
{
version: '1',
+ security: {
+ authz: {
+ enabled: false,
+ reason:
+ 'This route is opted out from authorization because permissions will be checked by elasticsearch',
+ },
+ },
validate: {
request: {
params: dataViewTitleSchema,
diff --git a/x-pack/plugins/transform/server/routes/api/reauthorize_transforms/register_route.ts b/x-pack/plugins/transform/server/routes/api/reauthorize_transforms/register_route.ts
index 2826820f8d232..55d4f66e7dc90 100644
--- a/x-pack/plugins/transform/server/routes/api/reauthorize_transforms/register_route.ts
+++ b/x-pack/plugins/transform/server/routes/api/reauthorize_transforms/register_route.ts
@@ -32,6 +32,13 @@ export function registerRoute(routeDependencies: RouteDependencies) {
.addVersion(
{
version: '1',
+ security: {
+ authz: {
+ enabled: false,
+ reason:
+ 'This route is opted out from authorization because permissions will be checked by elasticsearch',
+ },
+ },
validate: {
request: {
body: reauthorizeTransformsRequestSchema,
diff --git a/x-pack/plugins/transform/server/routes/api/reset_transforms/register_route.ts b/x-pack/plugins/transform/server/routes/api/reset_transforms/register_route.ts
index 5a239f0767fa4..de6c3e8408f62 100644
--- a/x-pack/plugins/transform/server/routes/api/reset_transforms/register_route.ts
+++ b/x-pack/plugins/transform/server/routes/api/reset_transforms/register_route.ts
@@ -33,6 +33,13 @@ export function registerRoute({ router, getLicense }: RouteDependencies) {
.addVersion(
{
version: '1',
+ security: {
+ authz: {
+ enabled: false,
+ reason:
+ 'This route is opted out from authorization because permissions will be checked by elasticsearch',
+ },
+ },
validate: {
request: {
body: resetTransformsRequestSchema,
diff --git a/x-pack/plugins/transform/server/routes/api/schedule_now_transforms/register_route.ts b/x-pack/plugins/transform/server/routes/api/schedule_now_transforms/register_route.ts
index 75000050ddebb..a19f0d0ef61af 100644
--- a/x-pack/plugins/transform/server/routes/api/schedule_now_transforms/register_route.ts
+++ b/x-pack/plugins/transform/server/routes/api/schedule_now_transforms/register_route.ts
@@ -33,6 +33,13 @@ export function registerRoute({ router, getLicense }: RouteDependencies) {
.addVersion(
{
version: '1',
+ security: {
+ authz: {
+ enabled: false,
+ reason:
+ 'This route is opted out from authorization because permissions will be checked by elasticsearch',
+ },
+ },
validate: {
request: {
body: scheduleNowTransformsRequestSchema,
diff --git a/x-pack/plugins/transform/server/routes/api/start_transforms/register_route.ts b/x-pack/plugins/transform/server/routes/api/start_transforms/register_route.ts
index 1ba1a0f098a78..ddff95471711f 100644
--- a/x-pack/plugins/transform/server/routes/api/start_transforms/register_route.ts
+++ b/x-pack/plugins/transform/server/routes/api/start_transforms/register_route.ts
@@ -33,6 +33,13 @@ export function registerRoute({ router, getLicense }: RouteDependencies) {
.addVersion(
{
version: '1',
+ security: {
+ authz: {
+ enabled: false,
+ reason:
+ 'This route is opted out from authorization because permissions will be checked by elasticsearch',
+ },
+ },
validate: {
request: {
body: startTransformsRequestSchema,
diff --git a/x-pack/plugins/transform/server/routes/api/stop_transforms/register_route.ts b/x-pack/plugins/transform/server/routes/api/stop_transforms/register_route.ts
index 5fdc5a97dd55a..bb1c73482f525 100644
--- a/x-pack/plugins/transform/server/routes/api/stop_transforms/register_route.ts
+++ b/x-pack/plugins/transform/server/routes/api/stop_transforms/register_route.ts
@@ -33,6 +33,13 @@ export function registerRoute({ router, getLicense }: RouteDependencies) {
.addVersion(
{
version: '1',
+ security: {
+ authz: {
+ enabled: false,
+ reason:
+ 'This route is opted out from authorization because permissions will be checked by elasticsearch',
+ },
+ },
validate: {
request: {
body: stopTransformsRequestSchema,
diff --git a/x-pack/plugins/transform/server/routes/api/transforms_all/register_route.ts b/x-pack/plugins/transform/server/routes/api/transforms_all/register_route.ts
index 29cbd34bffd68..9bd95b02d60ae 100644
--- a/x-pack/plugins/transform/server/routes/api/transforms_all/register_route.ts
+++ b/x-pack/plugins/transform/server/routes/api/transforms_all/register_route.ts
@@ -32,6 +32,13 @@ export function registerRoute({ router, getLicense }: RouteDependencies) {
.addVersion(
{
version: '1',
+ security: {
+ authz: {
+ enabled: false,
+ reason:
+ 'This route is opted out from authorization because permissions will be checked by elasticsearch',
+ },
+ },
validate: false,
},
async (ctx, request, response) => {
diff --git a/x-pack/plugins/transform/server/routes/api/transforms_create/register_route.ts b/x-pack/plugins/transform/server/routes/api/transforms_create/register_route.ts
index 7cfb0dc90a410..82df03077111b 100644
--- a/x-pack/plugins/transform/server/routes/api/transforms_create/register_route.ts
+++ b/x-pack/plugins/transform/server/routes/api/transforms_create/register_route.ts
@@ -43,6 +43,13 @@ export function registerRoute(routeDependencies: RouteDependencies) {
.addVersion(
{
version: '1',
+ security: {
+ authz: {
+ enabled: false,
+ reason:
+ 'This route is opted out from authorization because permissions will be checked by elasticsearch',
+ },
+ },
validate: {
request: {
params: transformIdParamSchema,
diff --git a/x-pack/plugins/transform/server/routes/api/transforms_nodes/register_route.ts b/x-pack/plugins/transform/server/routes/api/transforms_nodes/register_route.ts
index 701306ff6481c..f63e3412e24d8 100644
--- a/x-pack/plugins/transform/server/routes/api/transforms_nodes/register_route.ts
+++ b/x-pack/plugins/transform/server/routes/api/transforms_nodes/register_route.ts
@@ -27,6 +27,13 @@ export function registerRoute({ router, getLicense }: RouteDependencies) {
.addVersion(
{
version: '1',
+ security: {
+ authz: {
+ enabled: false,
+ reason:
+ 'This route is opted out from authorization because permissions will be checked by elasticsearch',
+ },
+ },
validate: false,
},
async (ctx, request, response) => {
diff --git a/x-pack/plugins/transform/server/routes/api/transforms_preview/register_route.ts b/x-pack/plugins/transform/server/routes/api/transforms_preview/register_route.ts
index 21a902e575b04..386e50296317d 100644
--- a/x-pack/plugins/transform/server/routes/api/transforms_preview/register_route.ts
+++ b/x-pack/plugins/transform/server/routes/api/transforms_preview/register_route.ts
@@ -31,6 +31,13 @@ export function registerRoute({ router, getLicense }: RouteDependencies) {
.addVersion(
{
version: '1',
+ security: {
+ authz: {
+ enabled: false,
+ reason:
+ 'This route is opted out from authorization because permissions will be checked by elasticsearch',
+ },
+ },
validate: {
request: {
body: postTransformsPreviewRequestSchema,
diff --git a/x-pack/plugins/transform/server/routes/api/transforms_single/register_route.ts b/x-pack/plugins/transform/server/routes/api/transforms_single/register_route.ts
index 30b54b3847992..bdec2e5bd2836 100644
--- a/x-pack/plugins/transform/server/routes/api/transforms_single/register_route.ts
+++ b/x-pack/plugins/transform/server/routes/api/transforms_single/register_route.ts
@@ -30,6 +30,13 @@ export function registerRoute({ router, getLicense }: RouteDependencies) {
.addVersion(
{
version: '1',
+ security: {
+ authz: {
+ enabled: false,
+ reason:
+ 'This route is opted out from authorization because permissions will be checked by elasticsearch',
+ },
+ },
validate: {
request: {
params: transformIdParamSchema,
diff --git a/x-pack/plugins/transform/server/routes/api/transforms_stats_all/register_route.ts b/x-pack/plugins/transform/server/routes/api/transforms_stats_all/register_route.ts
index 3136163cf99f5..40f21ed1f84b5 100644
--- a/x-pack/plugins/transform/server/routes/api/transforms_stats_all/register_route.ts
+++ b/x-pack/plugins/transform/server/routes/api/transforms_stats_all/register_route.ts
@@ -37,6 +37,13 @@ export function registerRoute({ router, getLicense }: RouteDependencies) {
>(
{
version: '1',
+ security: {
+ authz: {
+ enabled: false,
+ reason:
+ 'This route is opted out from authorization because permissions will be checked by elasticsearch',
+ },
+ },
validate: {
request: {
query: getTransformStatsQuerySchema,
diff --git a/x-pack/plugins/transform/server/routes/api/transforms_stats_single/register_route.ts b/x-pack/plugins/transform/server/routes/api/transforms_stats_single/register_route.ts
index 5e784506ae57a..29178398ea631 100644
--- a/x-pack/plugins/transform/server/routes/api/transforms_stats_single/register_route.ts
+++ b/x-pack/plugins/transform/server/routes/api/transforms_stats_single/register_route.ts
@@ -34,6 +34,13 @@ export function registerRoute({ router, getLicense }: RouteDependencies) {
.addVersion(
{
version: '1',
+ security: {
+ authz: {
+ enabled: false,
+ reason:
+ 'This route is opted out from authorization because permissions will be checked by elasticsearch',
+ },
+ },
validate: {
request: {
params: transformIdParamSchema,
diff --git a/x-pack/plugins/transform/server/routes/api/transforms_update/register_route.ts b/x-pack/plugins/transform/server/routes/api/transforms_update/register_route.ts
index 60719e68d596c..916b68a369098 100644
--- a/x-pack/plugins/transform/server/routes/api/transforms_update/register_route.ts
+++ b/x-pack/plugins/transform/server/routes/api/transforms_update/register_route.ts
@@ -35,6 +35,13 @@ export function registerRoute({ router, getLicense }: RouteDependencies) {
.addVersion(
{
version: '1',
+ security: {
+ authz: {
+ enabled: false,
+ reason:
+ 'This route is opted out from authorization because permissions will be checked by elasticsearch',
+ },
+ },
validate: {
request: {
params: transformIdParamSchema,
From cfbf9354be1522d81e8574a1ac3334d93691bdf6 Mon Sep 17 00:00:00 2001
From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
Date: Tue, 5 Nov 2024 04:05:24 +1100
Subject: [PATCH 027/101] [ML] Unauthorized route migration for routes owned by
kibana-presentation,ml-ui (#198350)
### 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: James Gowdy
---
x-pack/plugins/file_upload/server/routes.ts | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
diff --git a/x-pack/plugins/file_upload/server/routes.ts b/x-pack/plugins/file_upload/server/routes.ts
index 4336049b7fe58..8818e0a2e2dff 100644
--- a/x-pack/plugins/file_upload/server/routes.ts
+++ b/x-pack/plugins/file_upload/server/routes.ts
@@ -58,6 +58,13 @@ export function fileUploadRoutes(coreSetup: CoreSetup, logge
.addVersion(
{
version: '1',
+ security: {
+ authz: {
+ enabled: false,
+ reason:
+ 'This route is opted out from authorization because permissions will be checked by elasticsearch',
+ },
+ },
validate: {
request: {
query: schema.object({
@@ -155,6 +162,13 @@ export function fileUploadRoutes(coreSetup: CoreSetup, logge
.addVersion(
{
version: '1',
+ security: {
+ authz: {
+ enabled: false,
+ reason:
+ 'This route is opted out from authorization because permissions will be checked by elasticsearch',
+ },
+ },
validate: {
request: {
query: importFileQuerySchema,
@@ -206,6 +220,13 @@ export function fileUploadRoutes(coreSetup: CoreSetup, logge
.addVersion(
{
version: '1',
+ security: {
+ authz: {
+ enabled: false,
+ reason:
+ 'This route is opted out from authorization because permissions will be checked by elasticsearch',
+ },
+ },
validate: {
request: {
body: schema.object({ index: schema.string() }),
From 0e4b9e0b60e5fe3346a5336b0f7ccca6e08b9eca Mon Sep 17 00:00:00 2001
From: mohamedhamed-ahmed
Date: Mon, 4 Nov 2024 17:06:13 +0000
Subject: [PATCH 028/101] [Logs Explorer] Fix logs side nav default navigation
(#198773)
closes https://github.com/elastic/kibana/issues/198766
---
.../infra/public/apps/logs_app.tsx | 43 ++++++++-----------
.../infra/public/plugin.ts | 7 ++-
2 files changed, 23 insertions(+), 27 deletions(-)
diff --git a/x-pack/plugins/observability_solution/infra/public/apps/logs_app.tsx b/x-pack/plugins/observability_solution/infra/public/apps/logs_app.tsx
index 9d5583b0ecf4c..51749d8095481 100644
--- a/x-pack/plugins/observability_solution/infra/public/apps/logs_app.tsx
+++ b/x-pack/plugins/observability_solution/infra/public/apps/logs_app.tsx
@@ -6,19 +6,13 @@
*/
import { History } from 'history';
-import { AppStatus, CoreStart } from '@kbn/core/public';
-import React, { useMemo } from 'react';
+import { CoreStart } from '@kbn/core/public';
+import React from 'react';
import ReactDOM from 'react-dom';
import { Router, Routes, Route } from '@kbn/shared-ux-router';
import { AppMountParameters } from '@kbn/core/public';
import { Storage } from '@kbn/kibana-utils-plugin/public';
-import {
- AllDatasetsLocatorParams,
- ALL_DATASETS_LOCATOR_ID,
- OBSERVABILITY_LOGS_EXPLORER_APP_ID,
-} from '@kbn/deeplinks-observability';
-import useObservable from 'react-use/lib/useObservable';
-import { map } from 'rxjs';
+import { AllDatasetsLocatorParams, ALL_DATASETS_LOCATOR_ID } from '@kbn/deeplinks-observability';
import { LinkToLogsPage } from '../pages/link_to/link_to_logs';
import { LogsPage } from '../pages/logs';
import { InfraClientStartDeps, InfraClientStartExports } from '../types';
@@ -30,6 +24,7 @@ export const renderApp = (
core: CoreStart,
plugins: InfraClientStartDeps,
pluginStart: InfraClientStartExports,
+ isLogsExplorerAccessible: boolean,
{ element, history, setHeaderActionMenu, theme$ }: AppMountParameters
) => {
const storage = new Storage(window.localStorage);
@@ -45,6 +40,7 @@ export const renderApp = (
pluginStart={pluginStart}
setHeaderActionMenu={setHeaderActionMenu}
theme$={theme$}
+ isLogsExplorerAccessible={isLogsExplorerAccessible}
/>,
element
);
@@ -62,24 +58,19 @@ const LogsApp: React.FC<{
setHeaderActionMenu: AppMountParameters['setHeaderActionMenu'];
storage: Storage;
theme$: AppMountParameters['theme$'];
-}> = ({ core, history, pluginStart, plugins, setHeaderActionMenu, storage, theme$ }) => {
+ isLogsExplorerAccessible: boolean;
+}> = ({
+ core,
+ history,
+ pluginStart,
+ plugins,
+ setHeaderActionMenu,
+ storage,
+ theme$,
+ isLogsExplorerAccessible,
+}) => {
const { logs } = core.application.capabilities;
- const isLogsExplorerAppAccessible = useObservable(
- useMemo(
- () =>
- core.application.applications$.pipe(
- map(
- (apps) =>
- (apps.get(OBSERVABILITY_LOGS_EXPLORER_APP_ID)?.status ?? AppStatus.inaccessible) ===
- AppStatus.accessible
- )
- ),
- [core.application.applications$]
- ),
- false
- );
-
return (
- {isLogsExplorerAppAccessible && (
+ {isLogsExplorerAccessible && (
Date: Mon, 4 Nov 2024 10:18:37 -0700
Subject: [PATCH 029/101] [Security solution] Update LangChain packages to
latest (#198622)
---
package.json | 20 +-
.../server/language_models/mocks/index.ts | 1 +
.../server/language_models/types.ts | 5 +-
yarn.lock | 172 +++++++-----------
4 files changed, 84 insertions(+), 114 deletions(-)
diff --git a/package.json b/package.json
index 110023e02c815..17e873a89c7be 100644
--- a/package.json
+++ b/package.json
@@ -81,7 +81,7 @@
"resolutions": {
"**/@bazel/typescript/protobufjs": "6.11.4",
"**/@hello-pangea/dnd": "16.6.0",
- "**/@langchain/core": "^0.2.18",
+ "**/@langchain/core": "^0.3.16",
"**/@langchain/google-common": "^0.1.1",
"**/@types/node": "20.10.5",
"**/@typescript-eslint/utils": "5.62.0",
@@ -90,7 +90,7 @@
"**/globule/minimatch": "^3.1.2",
"**/hoist-non-react-statics": "^3.3.2",
"**/isomorphic-fetch/node-fetch": "^2.6.7",
- "**/langchain": "^0.2.11",
+ "**/langchain": "^0.3.5",
"**/remark-parse/trim": "1.0.1",
"**/sharp": "0.32.6",
"**/typescript": "5.1.6",
@@ -1009,13 +1009,13 @@
"@kbn/xstate-utils": "link:packages/kbn-xstate-utils",
"@kbn/zod": "link:packages/kbn-zod",
"@kbn/zod-helpers": "link:packages/kbn-zod-helpers",
- "@langchain/community": "0.2.18",
- "@langchain/core": "^0.2.18",
+ "@langchain/community": "0.3.11",
+ "@langchain/core": "^0.3.16",
"@langchain/google-common": "^0.1.1",
- "@langchain/google-genai": "^0.1.0",
+ "@langchain/google-genai": "^0.1.2",
"@langchain/google-vertexai": "^0.1.0",
- "@langchain/langgraph": "0.0.34",
- "@langchain/openai": "^0.1.3",
+ "@langchain/langgraph": "0.2.19",
+ "@langchain/openai": "^0.3.11",
"@langtrase/trace-attributes": "^3.0.8",
"@launchdarkly/node-server-sdk": "^9.7.0",
"@launchdarkly/openfeature-node-server": "^1.0.0",
@@ -1158,8 +1158,8 @@
"jsonwebtoken": "^9.0.2",
"jsts": "^1.6.2",
"kea": "^2.6.0",
- "langchain": "^0.2.11",
- "langsmith": "^0.1.55",
+ "langchain": "^0.3.5",
+ "langsmith": "^0.2.3",
"launchdarkly-js-client-sdk": "^3.5.0",
"load-json-file": "^6.2.0",
"lodash": "^4.17.21",
@@ -1188,7 +1188,7 @@
"nunjucks": "^3.2.4",
"object-hash": "^1.3.1",
"object-path-immutable": "^3.1.1",
- "openai": "^4.24.1",
+ "openai": "^4.68.0",
"openpgp": "5.10.1",
"ora": "^4.0.4",
"p-limit": "^3.0.1",
diff --git a/x-pack/packages/kbn-langchain/server/language_models/mocks/index.ts b/x-pack/packages/kbn-langchain/server/language_models/mocks/index.ts
index f40bafca1a469..838f93ca308af 100644
--- a/x-pack/packages/kbn-langchain/server/language_models/mocks/index.ts
+++ b/x-pack/packages/kbn-langchain/server/language_models/mocks/index.ts
@@ -20,6 +20,7 @@ export const mockChatCompletion: OpenAI.ChatCompletion = {
message: {
role: 'assistant',
content: 'Yes, your name is Andrew. How can I assist you further, Andrew?',
+ refusal: null,
},
finish_reason: 'stop',
logprobs: null,
diff --git a/x-pack/packages/kbn-langchain/server/language_models/types.ts b/x-pack/packages/kbn-langchain/server/language_models/types.ts
index 43dcad34fda3c..35415e8eaf118 100644
--- a/x-pack/packages/kbn-langchain/server/language_models/types.ts
+++ b/x-pack/packages/kbn-langchain/server/language_models/types.ts
@@ -11,7 +11,10 @@ import type OpenAI from 'openai';
export interface InvokeAIActionParamsSchema {
messages: Array<{
role: string;
- content: string | OpenAI.ChatCompletionContentPart[];
+ content:
+ | string
+ | OpenAI.ChatCompletionContentPart[]
+ | Array;
name?: string;
function_call?: {
arguments: string;
diff --git a/yarn.lock b/yarn.lock
index ccdb56cdc63e9..cbd5dd93a43fd 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -7312,33 +7312,32 @@
resolved "https://registry.yarnpkg.com/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz#8ace5259254426ccef57f3175bc64ed7095ed919"
integrity sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==
-"@langchain/community@0.2.18":
- version "0.2.18"
- resolved "https://registry.yarnpkg.com/@langchain/community/-/community-0.2.18.tgz#127a7ac53a30dd6dedede887811fdd992061e2d2"
- integrity sha512-UsCB97dMG87giQLniKx4bjv7OnMw2vQeavSt9gqOnGCnfb5IQBAgdjX4SjwFPbVGMz1HQoQKVlNqQ64ozCdgNg==
+"@langchain/community@0.3.11":
+ version "0.3.11"
+ resolved "https://registry.yarnpkg.com/@langchain/community/-/community-0.3.11.tgz#cb0f188f4e72c00beb1efdbd1fc7d7f47b70e636"
+ integrity sha512-hgnqsgWAhfUj9Kp0y+FGxlKot/qJFxat9GfIPJSJU4ViN434PgeMAQK53tkGZ361E2Zoo1V4RoGlSw4AjJILiA==
dependencies:
- "@langchain/core" "~0.2.11"
- "@langchain/openai" "~0.1.0"
+ "@langchain/openai" ">=0.2.0 <0.4.0"
binary-extensions "^2.2.0"
expr-eval "^2.0.2"
flat "^5.0.2"
js-yaml "^4.1.0"
- langchain "0.2.3"
- langsmith "~0.1.30"
+ langchain ">=0.2.3 <0.3.0 || >=0.3.4 <0.4.0"
+ langsmith "^0.2.0"
uuid "^10.0.0"
zod "^3.22.3"
zod-to-json-schema "^3.22.5"
-"@langchain/core@>0.1.0 <0.3.0", "@langchain/core@>=0.2.11 <0.3.0", "@langchain/core@>=0.2.20 <0.3.0", "@langchain/core@>=0.2.5 <0.3.0", "@langchain/core@^0.2.18", "@langchain/core@~0.2.11":
- version "0.2.32"
- resolved "https://registry.yarnpkg.com/@langchain/core/-/core-0.2.32.tgz#a5dfbc49f8b6c15c8082763b93aeae8f9f4ca1a0"
- integrity sha512-S27M+9Qou2qtcLfFGEvANkJ/zHq5XApeQsR6Q4I7C6v9x07eoYr558h6vVy6WQmKcksgbCIJ854ikwp173wBjA==
+"@langchain/core@>0.1.0 <0.3.0", "@langchain/core@^0.3.16":
+ version "0.3.16"
+ resolved "https://registry.yarnpkg.com/@langchain/core/-/core-0.3.16.tgz#60ece9762c2830eb8e5731c70b24e1707178fc67"
+ integrity sha512-g83M2Z1XlhECFUtT4C7XLsVVGt2Hk3Y/KhS5tZSsz+Gqtxwd790/MD7MxdUHpZj0VKkvrFuWARWpJmNKlkiY+g==
dependencies:
ansi-styles "^5.0.0"
camelcase "6"
decamelize "1.2.0"
js-tiktoken "^1.0.12"
- langsmith "^0.1.43"
+ langsmith "^0.2.0"
mustache "^4.2.0"
p-queue "^6.6.2"
p-retry "4"
@@ -7362,10 +7361,10 @@
"@langchain/google-common" "~0.1.0"
google-auth-library "^8.9.0"
-"@langchain/google-genai@^0.1.0":
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/@langchain/google-genai/-/google-genai-0.1.0.tgz#89552873210d72a5834de20fcbef3e6753283344"
- integrity sha512-6rIba77zJVMj+048tLfkCBrkFbfAMiT+AfLEsu5s+CFoFmXMiI/dbKeDL4vhUWrJVb9uL4ZZyrnl0nKxyEKYgA==
+"@langchain/google-genai@^0.1.2":
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/@langchain/google-genai/-/google-genai-0.1.2.tgz#23387d7027b4a787b542fc5cfb7a2469e9f4c845"
+ integrity sha512-oePFjTurY4O2tJiU4cJ3Wu9L+JGVwYib2LovI+SxGJImVyVlQQ1HV2SVek03vqG4d0kiX0XLQTEC7mJ7EBySkg==
dependencies:
"@google/generative-ai" "^0.7.0"
zod-to-json-schema "^3.22.4"
@@ -7377,27 +7376,45 @@
dependencies:
"@langchain/google-gauth" "~0.1.0"
-"@langchain/langgraph@0.0.34":
- version "0.0.34"
- resolved "https://registry.yarnpkg.com/@langchain/langgraph/-/langgraph-0.0.34.tgz#1504c29ce524d08d6f076c34e0623c6de1f1246c"
- integrity sha512-cuig46hGmZkf+eXw1Cx2CtkAWgsAbIpa5ABLxn9oe1rbtvHXmfekqHZA6tGE0DipEmsN4H64zFcDEJydll6Sdw==
+"@langchain/langgraph-checkpoint@~0.0.10":
+ version "0.0.11"
+ resolved "https://registry.yarnpkg.com/@langchain/langgraph-checkpoint/-/langgraph-checkpoint-0.0.11.tgz#65c40bc175faca98ed0901df9e76682585710e8d"
+ integrity sha512-nroHHkAi/UPn9LqqZcgOydfB8qZw5TXuXDFc43MIydnW4lb8m9hVHnQ3lgb2WGSgtbZJnsIx0TzL19oemJBRKg==
+ dependencies:
+ uuid "^10.0.0"
+
+"@langchain/langgraph-sdk@~0.0.20":
+ version "0.0.20"
+ resolved "https://registry.yarnpkg.com/@langchain/langgraph-sdk/-/langgraph-sdk-0.0.20.tgz#5cb75d83408a8dd3aab0d8923956672746d1b499"
+ integrity sha512-58iGYL0PppSiIHtIUNAN+x6TCl+Vb0dAmlToSMJHUng8W53ffXHQTNqVNxJlPsHO6zdgPJm4DRl53z6vkSUZpw==
+ dependencies:
+ "@types/json-schema" "^7.0.15"
+ p-queue "^6.6.2"
+ p-retry "4"
+ uuid "^9.0.0"
+
+"@langchain/langgraph@0.2.19":
+ version "0.2.19"
+ resolved "https://registry.yarnpkg.com/@langchain/langgraph/-/langgraph-0.2.19.tgz#1a855ee0e63683a085b41e9b8cbc01e836ebf168"
+ integrity sha512-dgFdnEokC5zY32skZ6rcBYJNTH3WQXVY0LRI1zBGvbmK/nPfanIB1URwNxqRFjj/qHRKofxoehqYr1ww1zB+zA==
dependencies:
- "@langchain/core" ">=0.2.20 <0.3.0"
+ "@langchain/langgraph-checkpoint" "~0.0.10"
+ "@langchain/langgraph-sdk" "~0.0.20"
+ double-ended-queue "^2.1.0-0"
uuid "^10.0.0"
zod "^3.23.8"
-"@langchain/openai@>=0.1.0 <0.3.0", "@langchain/openai@^0.1.3", "@langchain/openai@~0.1.0":
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/@langchain/openai/-/openai-0.1.3.tgz#6eb0994e970d85ffa9aaeafb94449024ccf6ca63"
- integrity sha512-riv/JC9x2A8b7GcHu8sx+mlZJ8KAwSSi231IPTlcciYnKozmrQ5H0vrtiD31fxiDbaRsk7tyCpkSBIOQEo7CyQ==
+"@langchain/openai@>=0.1.0 <0.4.0", "@langchain/openai@>=0.2.0 <0.4.0", "@langchain/openai@^0.3.11":
+ version "0.3.11"
+ resolved "https://registry.yarnpkg.com/@langchain/openai/-/openai-0.3.11.tgz#c93ee298a87318562a1da6c2915a180fe5155ac4"
+ integrity sha512-mEFbpJ8w8NPArsquUlCwxvZTKNkXxqwzvTEYzv6Jb7gUoBDOZtwLg6AdcngTJ+w5VFh3wxgPy0g3zb9Aw0Qbpw==
dependencies:
- "@langchain/core" ">=0.2.5 <0.3.0"
js-tiktoken "^1.0.12"
- openai "^4.49.1"
+ openai "^4.68.0"
zod "^3.22.4"
zod-to-json-schema "^3.22.3"
-"@langchain/textsplitters@~0.0.0":
+"@langchain/textsplitters@>=0.0.0 <0.2.0":
version "0.0.2"
resolved "https://registry.yarnpkg.com/@langchain/textsplitters/-/textsplitters-0.0.2.tgz#500baa8341fb7fc86fca531a4192665a319504a3"
integrity sha512-6bQOuYHTGYlkgPY/8M5WPq4nnXZpEysGzRopQCYjg2WLcEoIPUMMrXsAaNNdvU3BOeMrhin8izvpDPD165hX6Q==
@@ -10741,7 +10758,7 @@
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3"
integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==
-"@types/json-schema@^7.0.7":
+"@types/json-schema@^7.0.15", "@types/json-schema@^7.0.7":
version "7.0.15"
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841"
integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==
@@ -13407,7 +13424,7 @@ binary-extensions@^2.0.0, binary-extensions@^2.2.0:
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
-binary-search@^1.3.3, binary-search@^1.3.5:
+binary-search@^1.3.3:
version "1.3.6"
resolved "https://registry.yarnpkg.com/binary-search/-/binary-search-1.3.6.tgz#e32426016a0c5092f0f3598836a1c7da3560565c"
integrity sha512-nbE1WxOTTrUWIfsfZ4aHGYu5DOuNkbxGokjV6Z2kxfJK3uaAb8zNK1muzOeipoLHZjInT4Br88BHpzevc681xA==
@@ -16540,6 +16557,11 @@ dotignore@^0.1.2:
dependencies:
minimatch "^3.0.4"
+double-ended-queue@^2.1.0-0:
+ version "2.1.0-0"
+ resolved "https://registry.yarnpkg.com/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz#103d3527fd31528f40188130c841efdd78264e5c"
+ integrity sha512-+BNfZ+deCo8hMNpDqDnvT+c0XpJ5cUa6mqYq89bho2Ifze4URTqRkcwR399hWoTrTkbZ/XJYDgP6rc7pRgffEQ==
+
downshift@^3.2.10:
version "3.4.8"
resolved "https://registry.yarnpkg.com/downshift/-/downshift-3.4.8.tgz#06b7ad9e9c423a58e8a9049b2a00a5d19c7ef954"
@@ -20363,11 +20385,6 @@ is-alphanumerical@^1.0.0:
is-alphabetical "^1.0.0"
is-decimal "^1.0.0"
-is-any-array@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/is-any-array/-/is-any-array-2.0.1.tgz#9233242a9c098220290aa2ec28f82ca7fa79899e"
- integrity sha512-UtilS7hLRu++wb/WBAw9bNuP1Eg04Ivn1vERJck8zJthEvXCBEBpGR/33u/xLKWEQf95803oalHrVDptcAvFdQ==
-
is-arguments@^1.0.4, is-arguments@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b"
@@ -22123,21 +22140,17 @@ kuler@^2.0.0:
resolved "https://registry.yarnpkg.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3"
integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==
-langchain@0.2.3, langchain@^0.2.11:
- version "0.2.11"
- resolved "https://registry.yarnpkg.com/langchain/-/langchain-0.2.11.tgz#d97e5bbd57e8954f21356fd85603aa39e3efe03f"
- integrity sha512-6FQWKNAXuTmwuhHHMOmurLo8pydSRu5C/FwCYvYbR4ulCLqcsj+jre/kfXvA5BdHOZHNo6oQn0/5kxDNnhxMUA==
+"langchain@>=0.2.3 <0.3.0 || >=0.3.4 <0.4.0", langchain@^0.3.5:
+ version "0.3.5"
+ resolved "https://registry.yarnpkg.com/langchain/-/langchain-0.3.5.tgz#87b282454bc215b12b920d4dd5e35ed58030bad1"
+ integrity sha512-Gq0xC45Sq6nszS8kQG9suCrmBsuXH0INMmiF7D2TwPb6mtG35Jiq4grCk9ykpwPsarTHdty3SzUbII/FqiYSSw==
dependencies:
- "@langchain/core" ">=0.2.11 <0.3.0"
- "@langchain/openai" ">=0.1.0 <0.3.0"
- "@langchain/textsplitters" "~0.0.0"
- binary-extensions "^2.2.0"
+ "@langchain/openai" ">=0.1.0 <0.4.0"
+ "@langchain/textsplitters" ">=0.0.0 <0.2.0"
js-tiktoken "^1.0.12"
js-yaml "^4.1.0"
jsonpointer "^5.0.1"
- langchainhub "~0.0.8"
- langsmith "~0.1.30"
- ml-distance "^4.0.0"
+ langsmith "^0.2.0"
openapi-types "^12.1.3"
p-retry "4"
uuid "^10.0.0"
@@ -22145,15 +22158,10 @@ langchain@0.2.3, langchain@^0.2.11:
zod "^3.22.4"
zod-to-json-schema "^3.22.3"
-langchainhub@~0.0.8:
- version "0.0.8"
- resolved "https://registry.yarnpkg.com/langchainhub/-/langchainhub-0.0.8.tgz#fd4b96dc795e22e36c1a20bad31b61b0c33d3110"
- integrity sha512-Woyb8YDHgqqTOZvWIbm2CaFDGfZ4NTSyXV687AG4vXEfoNo7cGQp7nhl7wL3ehenKWmNEmcxCLgOZzW8jE6lOQ==
-
-langsmith@^0.1.43, langsmith@^0.1.55, langsmith@~0.1.30:
- version "0.1.55"
- resolved "https://registry.yarnpkg.com/langsmith/-/langsmith-0.1.55.tgz#bdbb8015a28093f4a248c0ee9b8937731c5baa93"
- integrity sha512-6NVtI04UUnIY59I/imOX02FG/QMGfqStu8tiJtyyreKMv2GAN0EE9Z5Ap1wzOe6v8ukEcV3NwEO2LYOPwup1PQ==
+langsmith@^0.2.0, langsmith@^0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/langsmith/-/langsmith-0.2.3.tgz#91c5b4e3d5b030d8a995e9acaac43dba4b9b225c"
+ integrity sha512-SPMYPVqR9kwXZVmJ2PXC61HeBnXIFHrjfjDxQ14H0+n5p4gqjLzgSHIQyxBlFeWQUQzArJxe65Ap+s+Xo1cZog==
dependencies:
"@types/uuid" "^10.0.0"
commander "^10.0.1"
@@ -23520,42 +23528,6 @@ mkdirp@^3.0.1:
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-3.0.1.tgz#e44e4c5607fb279c168241713cc6e0fea9adcb50"
integrity sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==
-ml-array-mean@^1.1.6:
- version "1.1.6"
- resolved "https://registry.yarnpkg.com/ml-array-mean/-/ml-array-mean-1.1.6.tgz#d951a700dc8e3a17b3e0a583c2c64abd0c619c56"
- integrity sha512-MIdf7Zc8HznwIisyiJGRH9tRigg3Yf4FldW8DxKxpCCv/g5CafTw0RRu51nojVEOXuCQC7DRVVu5c7XXO/5joQ==
- dependencies:
- ml-array-sum "^1.1.6"
-
-ml-array-sum@^1.1.6:
- version "1.1.6"
- resolved "https://registry.yarnpkg.com/ml-array-sum/-/ml-array-sum-1.1.6.tgz#d1d89c20793cd29c37b09d40e85681aa4515a955"
- integrity sha512-29mAh2GwH7ZmiRnup4UyibQZB9+ZLyMShvt4cH4eTK+cL2oEMIZFnSyB3SS8MlsTh6q/w/yh48KmqLxmovN4Dw==
- dependencies:
- is-any-array "^2.0.0"
-
-ml-distance-euclidean@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/ml-distance-euclidean/-/ml-distance-euclidean-2.0.0.tgz#3a668d236649d1b8fec96380b9435c6f42c9a817"
- integrity sha512-yC9/2o8QF0A3m/0IXqCTXCzz2pNEzvmcE/9HFKOZGnTjatvBbsn4lWYJkxENkA4Ug2fnYl7PXQxnPi21sgMy/Q==
-
-ml-distance@^4.0.0:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/ml-distance/-/ml-distance-4.0.1.tgz#4741d17a1735888c5388823762271dfe604bd019"
- integrity sha512-feZ5ziXs01zhyFUUUeZV5hwc0f5JW0Sh0ckU1koZe/wdVkJdGxcP06KNQuF0WBTj8FttQUzcvQcpcrOp/XrlEw==
- dependencies:
- ml-array-mean "^1.1.6"
- ml-distance-euclidean "^2.0.0"
- ml-tree-similarity "^1.0.0"
-
-ml-tree-similarity@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/ml-tree-similarity/-/ml-tree-similarity-1.0.0.tgz#24705a107e32829e24d945e87219e892159c53f0"
- integrity sha512-XJUyYqjSuUQkNQHMscr6tcjldsOoAekxADTplt40QKfwW6nd++1wHWV9AArl0Zvw/TIHgNaZZNvr8QGvE8wLRg==
- dependencies:
- binary-search "^1.3.5"
- num-sort "^2.0.0"
-
mobx-react-lite@^4.0.7:
version "4.0.7"
resolved "https://registry.yarnpkg.com/mobx-react-lite/-/mobx-react-lite-4.0.7.tgz#f4e21e18d05c811010dcb1d3007e797924c4d90b"
@@ -24374,11 +24346,6 @@ null-loader@^3.0.0:
loader-utils "^1.2.3"
schema-utils "^1.0.0"
-num-sort@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/num-sort/-/num-sort-2.1.0.tgz#1cbb37aed071329fdf41151258bc011898577a9b"
- integrity sha512-1MQz1Ed8z2yckoBeSfkQHHO9K1yDRxxtotKSJ9yvcTUUxSvfvzEq5GwBrjjHEpMlq/k5gvXdmJ1SbYxWtpNoVg==
-
num2fraction@^1.2.2:
version "1.2.2"
resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede"
@@ -24704,10 +24671,10 @@ open@^8.0.9, open@^8.4.0, open@~8.4.0:
is-docker "^2.1.1"
is-wsl "^2.2.0"
-openai@^4.24.1, openai@^4.49.1:
- version "4.51.0"
- resolved "https://registry.yarnpkg.com/openai/-/openai-4.51.0.tgz#8ab08bba2441375e8e4ce6161f9ac987d2b2c157"
- integrity sha512-UKuWc3/qQyklqhHM8CbdXCv0Z0obap6T0ECdcO5oATQxAbKE5Ky3YCXFQY207z+eGG6ez4U9wvAcuMygxhmStg==
+openai@^4.68.0:
+ version "4.69.0"
+ resolved "https://registry.yarnpkg.com/openai/-/openai-4.69.0.tgz#ac2463719280987e506e4bd62dd477337e2406a1"
+ integrity sha512-S3hOHSkk609KqwgH+7dwFrSvO3Gm3Nk0YWGyPHNscoMH/Y2tH1qunMi7gtZnLbUv4/N1elqCp6bDior2401kCQ==
dependencies:
"@types/node" "^18.11.18"
"@types/node-fetch" "^2.6.4"
@@ -24716,7 +24683,6 @@ openai@^4.24.1, openai@^4.49.1:
form-data-encoder "1.7.2"
formdata-node "^4.3.2"
node-fetch "^2.6.7"
- web-streams-polyfill "^3.2.1"
openapi-sampler@^1.5.0:
version "1.5.1"
@@ -32135,7 +32101,7 @@ web-streams-polyfill@4.0.0-beta.3:
resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz#2898486b74f5156095e473efe989dcf185047a38"
integrity sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==
-web-streams-polyfill@^3.0.3, web-streams-polyfill@^3.2.1:
+web-streams-polyfill@^3.0.3:
version "3.2.1"
resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz#71c2718c52b45fd49dbeee88634b3a60ceab42a6"
integrity sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==
From 4fdc70bf8c3b729733415820b48248abbfb5ddf8 Mon Sep 17 00:00:00 2001
From: Cee Chen <549407+cee-chen@users.noreply.github.com>
Date: Mon, 4 Nov 2024 09:38:07 -0800
Subject: [PATCH 030/101] [ML] Fix page header right side items flex
responsiveness (#198625)
## Summary
Partially addresses https://github.com/elastic/kibana/issues/197892, but
not fully - https://github.com/elastic/eui/pull/8109 and
https://github.com/elastic/eui/pull/8110 will need to be merged in first
and in Kibana main as well. We can hold this PR until then if desired to
confirm that the final UI/responsive UX works as expected.
| Before | After |
|--------|--------|
|
|
|
### Checklist
- [x] Any UI touched in this PR is usable by keyboard only (learn more
about [keyboard accessibility](https://webaim.org/techniques/keyboard/))
- [x] Any UI touched in this PR does not create any new axe failures
(run axe in browser:
[FF](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/),
[Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US))
- [x] This renders correctly on smaller devices using a responsive
layout. (You can test this [in your
browser](https://www.browserstack.com/guide/responsive-testing-on-local-server))
- [x] This was checked for [cross-browser
compatibility](https://www.elastic.co/support/matrix#matrix_browsers)
---
.../components/page_header/page_header.tsx | 44 +++++++++---------
.../data_drift/data_drift_page.tsx | 46 +++++++++----------
2 files changed, 45 insertions(+), 45 deletions(-)
diff --git a/x-pack/plugins/aiops/public/components/page_header/page_header.tsx b/x-pack/plugins/aiops/public/components/page_header/page_header.tsx
index 9895fe082fcc1..a01e715e86272 100644
--- a/x-pack/plugins/aiops/public/components/page_header/page_header.tsx
+++ b/x-pack/plugins/aiops/public/components/page_header/page_header.tsx
@@ -9,7 +9,7 @@ import { css } from '@emotion/react';
import type { FC } from 'react';
import React, { useCallback, useMemo } from 'react';
-import { EuiFlexGroup, EuiFlexItem, EuiPageHeader } from '@elastic/eui';
+import { EuiPageHeader } from '@elastic/eui';
import { useUrlState } from '@kbn/ml-url-state';
import { useStorage } from '@kbn/ml-local-storage';
@@ -71,29 +71,29 @@ export const PageHeader: FC = () => {
return (
{dataView.getName()}}
+ rightSideGroupProps={{
+ gutterSize: 's',
+ 'data-test-subj': 'aiopsTimeRangeSelectorSection',
+ }}
rightSideItems={[
-
- {hasValidTimeField ? (
-
-
-
- ) : null}
- ,
+ hasValidTimeField && (
+
- ,
- ]}
+ ),
+ ].filter(Boolean)}
/>
);
};
diff --git a/x-pack/plugins/data_visualizer/public/application/data_drift/data_drift_page.tsx b/x-pack/plugins/data_visualizer/public/application/data_drift/data_drift_page.tsx
index 86bb350849a33..4623e886852d8 100644
--- a/x-pack/plugins/data_visualizer/public/application/data_drift/data_drift_page.tsx
+++ b/x-pack/plugins/data_visualizer/public/application/data_drift/data_drift_page.tsx
@@ -106,31 +106,31 @@ export const PageHeader: FC = ({ onRefresh, needsUpdate }) => {
{dataView.getName()}
}
+ rightSideGroupProps={{
+ gutterSize: 's',
+ 'data-test-subj': 'dataComparisonTimeRangeSelectorSection',
+ }}
rightSideItems={[
-
- {hasValidTimeField ? (
-
-
-
- ) : null}
- ,
+ hasValidTimeField && (
+
- ,
- ]}
+ ),
+ ].filter(Boolean)}
/>
);
};
From 9246237cf15bb04db950bea45d9c5f140e3bc71a Mon Sep 17 00:00:00 2001
From: Tiago Costa
Date: Mon, 4 Nov 2024 18:12:29 +0000
Subject: [PATCH 031/101] skip flaky suite (#192640)
---
.../public/components/case_view/components/user_list.test.tsx | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/x-pack/plugins/cases/public/components/case_view/components/user_list.test.tsx b/x-pack/plugins/cases/public/components/case_view/components/user_list.test.tsx
index 7254f7f500f63..b1601e471915f 100644
--- a/x-pack/plugins/cases/public/components/case_view/components/user_list.test.tsx
+++ b/x-pack/plugins/cases/public/components/case_view/components/user_list.test.tsx
@@ -20,7 +20,8 @@ jest.mock('../../../common/navigation/hooks');
const useCaseViewNavigationMock = useCaseViewNavigation as jest.Mock;
-describe('UserList ', () => {
+// FLAKY: https://github.com/elastic/kibana/issues/192640
+describe.skip('UserList ', () => {
const title = basicCase.title;
const caseLink = 'https://example.com/cases/test';
const user = {
From 76f6ec0f9bb4b3568e57273223f0e75912d06ce8 Mon Sep 17 00:00:00 2001
From: Melissa Alvarez
Date: Mon, 4 Nov 2024 11:54:28 -0700
Subject: [PATCH 032/101] [ML] AIOps Log rate analysis: switch to Rerun
analysis copy if search bar search changes (#198179)
## Summary
Related meta issue: https://github.com/elastic/kibana/issues/196660
Corresponds to item:
`UI: should switch to Rerun analysis copy if we change up the search in
the search bar, otherwise hover data in the main chart doesn't really
match anymore`
https://github.com/user-attachments/assets/cf689b0e-4e07-4fd8-b5ec-74e3a4dea0f6
### Checklist
Delete any items that are not applicable to this PR.
- [ ] 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)
- [ ]
[Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html)
was added for features that require explanation or tutorials
- [ ] [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
- [ ] Any UI touched in this PR is usable by keyboard only (learn more
about [keyboard accessibility](https://webaim.org/techniques/keyboard/))
- [ ] Any UI touched in this PR does not create any new axe failures
(run axe in browser:
[FF](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/),
[Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US))
- [ ] If a plugin configuration key changed, check if it needs to be
allowlisted in the cloud and added to the [docker
list](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker)
- [ ] This renders correctly on smaller devices using a responsive
layout. (You can test this [in your
browser](https://www.browserstack.com/guide/responsive-testing-on-local-server))
- [ ] This was checked for [cross-browser
compatibility](https://www.elastic.co/support/matrix#matrix_browsers)
Co-authored-by: Elastic Machine
---
.../log_rate_analysis_results.tsx | 16 +++++++++++++++-
1 file changed, 15 insertions(+), 1 deletion(-)
diff --git a/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_results.tsx b/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_results.tsx
index b97019c4b4d29..ad8e7740b505d 100644
--- a/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_results.tsx
+++ b/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_results.tsx
@@ -183,6 +183,7 @@ export const LogRateAnalysisResults: FC = ({
// to be able to track it across rerenders.
const analysisStartTime = useRef(window.performance.now());
const abortCtrl = useRef(new AbortController());
+ const previousSearchQuery = useRef(searchQuery);
const [groupResults, setGroupResults] = useState(false);
const [overrides, setOverrides] = useState(
@@ -386,6 +387,19 @@ export const LogRateAnalysisResults: FC = ({
[data.significantItemsGroups]
);
+ const searchQueryUpdated = useMemo(() => {
+ let searchQueryChanged = false;
+ if (
+ !isRunning &&
+ previousSearchQuery.current !== undefined &&
+ !isEqual(previousSearchQuery.current, searchQuery)
+ ) {
+ searchQueryChanged = true;
+ }
+ previousSearchQuery.current = searchQuery;
+ return searchQueryChanged;
+ }, [searchQuery, isRunning]);
+
const shouldRerunAnalysis = useMemo(
() =>
currentAnalysisWindowParameters !== undefined &&
@@ -426,7 +440,7 @@ export const LogRateAnalysisResults: FC = ({
onRefresh={() => startHandler(false)}
onCancel={cancelHandler}
onReset={onReset}
- shouldRerunAnalysis={shouldRerunAnalysis}
+ shouldRerunAnalysis={shouldRerunAnalysis || searchQueryUpdated}
analysisInfo={ }
>
From 185bbf79d1d8418099a8b3dbb88e94dd02a1e7da Mon Sep 17 00:00:00 2001
From: Yan Savitski
Date: Mon, 4 Nov 2024 20:07:39 +0100
Subject: [PATCH 033/101] [Search] [Playground] [Bug] Fix flaky test (#198126)
Fix Flaky FTR test. The reason for flaky issue was related to getting
state from the session
---
.../apps/search_playground/playground_overview.ess.ts | 1 +
.../search/search_playground/playground_overview.ts | 4 ++--
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/x-pack/test/functional/apps/search_playground/playground_overview.ess.ts b/x-pack/test/functional/apps/search_playground/playground_overview.ess.ts
index e64fafd4b010f..34b223075667d 100644
--- a/x-pack/test/functional/apps/search_playground/playground_overview.ess.ts
+++ b/x-pack/test/functional/apps/search_playground/playground_overview.ess.ts
@@ -110,6 +110,7 @@ export default function (ftrContext: FtrProviderContext) {
before(async () => {
await createConnector();
await createIndex();
+ await pageObjects.searchPlayground.session.setSession();
await browser.refresh();
});
diff --git a/x-pack/test_serverless/functional/test_suites/search/search_playground/playground_overview.ts b/x-pack/test_serverless/functional/test_suites/search/search_playground/playground_overview.ts
index 44d96d565fec2..e1570d2191378 100644
--- a/x-pack/test_serverless/functional/test_suites/search/search_playground/playground_overview.ts
+++ b/x-pack/test_serverless/functional/test_suites/search/search_playground/playground_overview.ts
@@ -117,11 +117,11 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
});
});
- // FLAKY: https://github.com/elastic/kibana/issues/189314
- describe.skip('with existing indices', () => {
+ describe('with existing indices', () => {
before(async () => {
await createConnector();
await createIndex();
+ await pageObjects.searchPlayground.session.setSession();
await browser.refresh();
});
From 962082ead77fbd0c23a64347f9fa19e7424c400b Mon Sep 17 00:00:00 2001
From: Janki Salvi <117571355+js-jankisalvi@users.noreply.github.com>
Date: Mon, 4 Nov 2024 19:13:33 +0000
Subject: [PATCH 034/101] [ResponseOps][New Rule Form] Fix new rule form issues
with basic license (#198036)
## Summary
Fixes below issues from new rule form leftovers
https://github.com/elastic/kibana/issues/196235?reload=1?reload=1
On basic license, if I hover on unsupported
connectors, a tooltip explains the reasoning. This is not happening for
rule types. We should do the same for the rule types
![Screenshot 2024-10-28 at 15 44
26](https://github.com/user-attachments/assets/522a9a54-fa41-48e2-a749-58a465eb2543)
On basic license, I can edit a rule that is not
available on the basic. This leads to a bunch of errors in edit mode.
The same is happening on main. We should prevent accessing this kind of
rule types.
![Screenshot 2024-10-28 at 15 44
57](https://github.com/user-attachments/assets/9a016ef2-aaf2-4d3f-8161-70bcb89f3334)
### 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
---
.../components/rule_type_list.test.tsx | 4 ++
.../components/rule_type_list.tsx | 58 +++++++++++++------
.../components/rules_list_table.tsx | 1 +
3 files changed, 45 insertions(+), 18 deletions(-)
diff --git a/packages/kbn-alerts-ui-shared/src/rule_type_modal/components/rule_type_list.test.tsx b/packages/kbn-alerts-ui-shared/src/rule_type_modal/components/rule_type_list.test.tsx
index 175d90924586c..7003b06875659 100644
--- a/packages/kbn-alerts-ui-shared/src/rule_type_modal/components/rule_type_list.test.tsx
+++ b/packages/kbn-alerts-ui-shared/src/rule_type_modal/components/rule_type_list.test.tsx
@@ -9,6 +9,7 @@
import React from 'react';
import { render, screen, within } from '@testing-library/react';
+import userEvent from '@testing-library/user-event';
import { RuleTypeList } from './rule_type_list';
import { RuleTypeWithDescription } from '../types';
@@ -93,5 +94,8 @@ describe('RuleTypeList', () => {
expect(secondRuleInList).not.toBeDisabled();
const thirdRuleInList = within(ruleListEl[2]).getByRole('button', { name: 'Rule Type 2' });
expect(thirdRuleInList).toBeDisabled();
+
+ await userEvent.hover(ruleListEl[2]);
+ expect(await screen.findByText('This rule requires a platinum license.')).toBeInTheDocument();
});
});
diff --git a/packages/kbn-alerts-ui-shared/src/rule_type_modal/components/rule_type_list.tsx b/packages/kbn-alerts-ui-shared/src/rule_type_modal/components/rule_type_list.tsx
index 4e21e428f3c5c..91710dbdfade5 100644
--- a/packages/kbn-alerts-ui-shared/src/rule_type_modal/components/rule_type_list.tsx
+++ b/packages/kbn-alerts-ui-shared/src/rule_type_modal/components/rule_type_list.tsx
@@ -20,6 +20,7 @@ import {
EuiEmptyPrompt,
EuiButton,
useEuiTheme,
+ EuiToolTip,
} from '@elastic/eui';
import { omit } from 'lodash';
import { PRODUCER_DISPLAY_NAMES } from '../../common/i18n';
@@ -86,6 +87,28 @@ export const RuleTypeList: React.FC = ({
const onClickAll = useCallback(() => onFilterByProducer(null), [onFilterByProducer]);
+ const ruleCard = (rule: RuleTypeWithDescription) => (
+ onSelectRuleType(rule.id)}
+ description={rule.description}
+ style={{ marginRight: '8px', flexGrow: 0 }}
+ data-test-subj={`${rule.id}-SelectOption`}
+ isDisabled={!rule.enabledInLicense}
+ >
+
+ {producerToDisplayName(rule.producer)}
+
+
+ );
+
return (
= ({
)}
{ruleTypesList.map((rule) => (
- onSelectRuleType(rule.id)}
- description={rule.description}
- style={{ marginRight: '8px', flexGrow: 0 }}
- data-test-subj={`${rule.id}-SelectOption`}
- isDisabled={rule.enabledInLicense === false}
- >
-
- {producerToDisplayName(rule.producer)}
-
-
+ <>{ruleCard(rule)} >
+
+ )}
))}
diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_table.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_table.tsx
index ee3ee18152e47..88f22f9687ea6 100644
--- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_table.tsx
+++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_table.tsx
@@ -750,6 +750,7 @@ export const RulesListTable = (props: RulesListTableProps) => {
'xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.editAriaLabel',
{ defaultMessage: 'Edit' }
)}
+ disabled={!rule.enabledInLicense}
/>
) : null}
From 744ddafa2b36144633e0095391baece512e6eb2f Mon Sep 17 00:00:00 2001
From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
Date: Tue, 5 Nov 2024 06:26:54 +1100
Subject: [PATCH 035/101] Unauthorized route migration for routes owned by
security-scalability (#198352)
---
.../server/routes/analyze_logs_routes.ts | 7 +++++++
.../server/routes/build_integration_routes.ts | 7 +++++++
.../server/routes/categorization_routes.ts | 7 +++++++
.../integration_assistant/server/routes/cel_routes.ts | 7 +++++++
.../integration_assistant/server/routes/ecs_routes.ts | 7 +++++++
.../integration_assistant/server/routes/pipeline_routes.ts | 7 +++++++
.../integration_assistant/server/routes/related_routes.ts | 7 +++++++
7 files changed, 49 insertions(+)
diff --git a/x-pack/plugins/integration_assistant/server/routes/analyze_logs_routes.ts b/x-pack/plugins/integration_assistant/server/routes/analyze_logs_routes.ts
index 04ba66acbebfb..34f05fcc82025 100644
--- a/x-pack/plugins/integration_assistant/server/routes/analyze_logs_routes.ts
+++ b/x-pack/plugins/integration_assistant/server/routes/analyze_logs_routes.ts
@@ -36,6 +36,13 @@ export function registerAnalyzeLogsRoutes(
.addVersion(
{
version: '1',
+ security: {
+ authz: {
+ enabled: false,
+ reason:
+ 'This route is opted out from authorization because the privileges are not defined yet.',
+ },
+ },
validate: {
request: {
body: buildRouteValidationWithZod(AnalyzeLogsRequestBody),
diff --git a/x-pack/plugins/integration_assistant/server/routes/build_integration_routes.ts b/x-pack/plugins/integration_assistant/server/routes/build_integration_routes.ts
index 6d7e5155a3d23..f62d6d55f933d 100644
--- a/x-pack/plugins/integration_assistant/server/routes/build_integration_routes.ts
+++ b/x-pack/plugins/integration_assistant/server/routes/build_integration_routes.ts
@@ -25,6 +25,13 @@ export function registerIntegrationBuilderRoutes(
.addVersion(
{
version: '1',
+ security: {
+ authz: {
+ enabled: false,
+ reason:
+ 'This route is opted out from authorization because the privileges are not defined yet.',
+ },
+ },
validate: {
request: {
body: buildRouteValidationWithZod(BuildIntegrationRequestBody),
diff --git a/x-pack/plugins/integration_assistant/server/routes/categorization_routes.ts b/x-pack/plugins/integration_assistant/server/routes/categorization_routes.ts
index 10d72b92563fe..5f63ed9c7bf3c 100644
--- a/x-pack/plugins/integration_assistant/server/routes/categorization_routes.ts
+++ b/x-pack/plugins/integration_assistant/server/routes/categorization_routes.ts
@@ -40,6 +40,13 @@ export function registerCategorizationRoutes(
.addVersion(
{
version: '1',
+ security: {
+ authz: {
+ enabled: false,
+ reason:
+ 'This route is opted out from authorization because the privileges are not defined yet.',
+ },
+ },
validate: {
request: {
body: buildRouteValidationWithZod(CategorizationRequestBody),
diff --git a/x-pack/plugins/integration_assistant/server/routes/cel_routes.ts b/x-pack/plugins/integration_assistant/server/routes/cel_routes.ts
index 5f417bbc0aec9..9ce16c3909119 100644
--- a/x-pack/plugins/integration_assistant/server/routes/cel_routes.ts
+++ b/x-pack/plugins/integration_assistant/server/routes/cel_routes.ts
@@ -32,6 +32,13 @@ export function registerCelInputRoutes(router: IRouter
Date: Mon, 4 Nov 2024 13:45:20 -0600
Subject: [PATCH 036/101] [ci] Run checks before tests (#198452)
Should be the last group to move before tests for now.
The intent has been to move steps that fit in the build window to run
before tests start. Catching errors before parallel steps should help
reduce the number of test runs with known issues.
---
.buildkite/pipelines/on_merge.yml | 56 +++++++++----------
.../pipelines/pull_request/apm_cypress.yml | 2 +
.buildkite/pipelines/pull_request/base.yml | 47 ++++++++--------
.../pipelines/pull_request/deploy_cloud.yml | 2 +
.../pull_request/exploratory_view_plugin.yml | 2 +
.buildkite/pipelines/pull_request/fips.yml | 2 +
.../pipelines/pull_request/fleet_cypress.yml | 2 +
.../pull_request/inventory_cypress.yml | 2 +
.../pipelines/pull_request/kbn_handlebars.yml | 2 +
.../observability_onboarding_cypress.yml | 2 +
.../pull_request/profiling_cypress.yml | 2 +
.../pipelines/pull_request/response_ops.yml | 2 +
.../pull_request/response_ops_cases.yml | 2 +
.../security_solution/ai_assistant.yml | 4 ++
.../cloud_security_posture.yml | 4 ++
.../security_solution/cypress_burn.yml | 8 +++
.../security_solution/defend_workflows.yml | 4 ++
.../security_solution/detection_engine.yml | 8 +++
.../security_solution/entity_analytics.yml | 4 ++
.../security_solution/explore.yml | 4 ++
.../security_solution/investigations.yml | 4 ++
.../security_solution/osquery_cypress.yml | 4 ++
.../security_solution/playwright.yml | 4 ++
.../security_solution/rule_management.yml | 8 +++
.../pipelines/pull_request/slo_plugin_e2e.yml | 2 +
.../pull_request/synthetics_plugin.yml | 2 +
.../pipelines/pull_request/uptime_plugin.yml | 2 +
.../pipelines/pull_request/ux_plugin_e2e.yml | 2 +
28 files changed, 138 insertions(+), 51 deletions(-)
diff --git a/.buildkite/pipelines/on_merge.yml b/.buildkite/pipelines/on_merge.yml
index 5518e1f8ed83c..d5ffcf7067c36 100644
--- a/.buildkite/pipelines/on_merge.yml
+++ b/.buildkite/pipelines/on_merge.yml
@@ -45,6 +45,20 @@ steps:
- exit_status: '-1'
limit: 3
+ - command: .buildkite/scripts/steps/checks.sh
+ label: 'Checks'
+ agents:
+ image: family/kibana-ubuntu-2004
+ imageProject: elastic-images-prod
+ provider: gcp
+ machineType: n2-standard-2
+ preemptible: true
+ timeout_in_minutes: 60
+ retry:
+ automatic:
+ - exit_status: '-1'
+ limit: 3
+
- command: .buildkite/scripts/steps/lint.sh
label: 'Linting'
agents:
@@ -89,6 +103,20 @@ steps:
- exit_status: '-1'
limit: 3
+ - command: .buildkite/scripts/steps/checks/capture_oas_snapshot.sh
+ label: 'Check OAS Snapshot'
+ agents:
+ image: family/kibana-ubuntu-2004
+ imageProject: elastic-images-prod
+ provider: gcp
+ machineType: n2-standard-4
+ preemptible: true
+ timeout_in_minutes: 60
+ retry:
+ automatic:
+ - exit_status: '-1'
+ limit: 3
+
- wait
- command: .buildkite/scripts/steps/on_merge_api_docs.sh
@@ -454,34 +482,6 @@ steps:
provider: gcp
machineType: n2-standard-2
- - command: .buildkite/scripts/steps/checks.sh
- label: 'Checks'
- agents:
- image: family/kibana-ubuntu-2004
- imageProject: elastic-images-prod
- provider: gcp
- machineType: n2-standard-2
- preemptible: true
- timeout_in_minutes: 60
- retry:
- automatic:
- - exit_status: '-1'
- limit: 3
-
- - command: .buildkite/scripts/steps/checks/capture_oas_snapshot.sh
- label: 'Check OAS Snapshot'
- agents:
- image: family/kibana-ubuntu-2004
- imageProject: elastic-images-prod
- provider: gcp
- machineType: n2-standard-4
- preemptible: true
- timeout_in_minutes: 60
- retry:
- automatic:
- - exit_status: '-1'
- limit: 3
-
- command: .buildkite/scripts/steps/storybooks/build_and_upload.sh
label: 'Build Storybooks'
agents:
diff --git a/.buildkite/pipelines/pull_request/apm_cypress.yml b/.buildkite/pipelines/pull_request/apm_cypress.yml
index c0cb60dbc986b..97935cc3489d1 100644
--- a/.buildkite/pipelines/pull_request/apm_cypress.yml
+++ b/.buildkite/pipelines/pull_request/apm_cypress.yml
@@ -7,9 +7,11 @@ steps:
depends_on:
- build
- quick_checks
+ - checks
- linting
- linting_with_types
- check_types
+ - check_oas_snapshot
timeout_in_minutes: 120
parallelism: 1 # TODO: Set parallelism when apm_cypress handles it
retry:
diff --git a/.buildkite/pipelines/pull_request/base.yml b/.buildkite/pipelines/pull_request/base.yml
index fc3e2ce388bf5..e7b593f464b54 100644
--- a/.buildkite/pipelines/pull_request/base.yml
+++ b/.buildkite/pipelines/pull_request/base.yml
@@ -32,6 +32,18 @@ steps:
- exit_status: '-1'
limit: 3
+ - command: .buildkite/scripts/steps/checks.sh
+ label: 'Checks'
+ key: checks
+ agents:
+ machineType: n2-standard-2
+ preemptible: true
+ timeout_in_minutes: 60
+ retry:
+ automatic:
+ - exit_status: '-1'
+ limit: 3
+
- command: .buildkite/scripts/steps/lint.sh
label: 'Linting'
agents:
@@ -56,6 +68,18 @@ steps:
- exit_status: '-1'
limit: 3
+ - command: .buildkite/scripts/steps/checks/capture_oas_snapshot.sh
+ label: 'Check OAS Snapshot'
+ agents:
+ machineType: n2-standard-4
+ preemptible: true
+ key: check_oas_snapshot
+ timeout_in_minutes: 60
+ retry:
+ automatic:
+ - exit_status: '-1'
+ limit: 3
+
- command: .buildkite/scripts/steps/check_types.sh
label: 'Check Types'
agents:
@@ -99,29 +123,6 @@ steps:
- exit_status: '*'
limit: 1
- - command: .buildkite/scripts/steps/checks.sh
- label: 'Checks'
- key: checks
- agents:
- machineType: n2-standard-2
- preemptible: true
- timeout_in_minutes: 60
- retry:
- automatic:
- - exit_status: '-1'
- limit: 3
-
- - command: .buildkite/scripts/steps/checks/capture_oas_snapshot.sh
- label: 'Check OAS Snapshot'
- agents:
- machineType: n2-standard-4
- preemptible: true
- timeout_in_minutes: 60
- retry:
- automatic:
- - exit_status: '-1'
- limit: 3
-
- command: .buildkite/scripts/steps/api_docs/build_api_docs.sh
label: 'Build API Docs'
agents:
diff --git a/.buildkite/pipelines/pull_request/deploy_cloud.yml b/.buildkite/pipelines/pull_request/deploy_cloud.yml
index 6b42037b95953..565c5af3bb0c1 100644
--- a/.buildkite/pipelines/pull_request/deploy_cloud.yml
+++ b/.buildkite/pipelines/pull_request/deploy_cloud.yml
@@ -7,9 +7,11 @@ steps:
depends_on:
- build
- quick_checks
+ - checks
- linting
- linting_with_types
- check_types
+ - check_oas_snapshot
timeout_in_minutes: 30
soft_fail: true
retry:
diff --git a/.buildkite/pipelines/pull_request/exploratory_view_plugin.yml b/.buildkite/pipelines/pull_request/exploratory_view_plugin.yml
index c46edb528987a..05fc218080cd4 100644
--- a/.buildkite/pipelines/pull_request/exploratory_view_plugin.yml
+++ b/.buildkite/pipelines/pull_request/exploratory_view_plugin.yml
@@ -7,9 +7,11 @@ steps:
depends_on:
- build
- quick_checks
+ - checks
- linting
- linting_with_types
- check_types
+ - check_oas_snapshot
timeout_in_minutes: 60
artifact_paths:
- 'x-pack/plugins/observability_solution/exploratory_view/e2e/.journeys/**/*'
diff --git a/.buildkite/pipelines/pull_request/fips.yml b/.buildkite/pipelines/pull_request/fips.yml
index 1a759e1288328..4f906e4420c8f 100644
--- a/.buildkite/pipelines/pull_request/fips.yml
+++ b/.buildkite/pipelines/pull_request/fips.yml
@@ -7,9 +7,11 @@ steps:
depends_on:
- build
- quick_checks
+ - checks
- linting
- linting_with_types
- check_types
+ - check_oas_snapshot
timeout_in_minutes: 60
soft_fail: true
retry:
diff --git a/.buildkite/pipelines/pull_request/fleet_cypress.yml b/.buildkite/pipelines/pull_request/fleet_cypress.yml
index d20591728b788..50912cc16e5a8 100644
--- a/.buildkite/pipelines/pull_request/fleet_cypress.yml
+++ b/.buildkite/pipelines/pull_request/fleet_cypress.yml
@@ -7,9 +7,11 @@ steps:
depends_on:
- build
- quick_checks
+ - checks
- linting
- linting_with_types
- check_types
+ - check_oas_snapshot
timeout_in_minutes: 50
parallelism: 6
retry:
diff --git a/.buildkite/pipelines/pull_request/inventory_cypress.yml b/.buildkite/pipelines/pull_request/inventory_cypress.yml
index 7028b55808ca6..3cd96de506288 100644
--- a/.buildkite/pipelines/pull_request/inventory_cypress.yml
+++ b/.buildkite/pipelines/pull_request/inventory_cypress.yml
@@ -7,9 +7,11 @@ steps:
depends_on:
- build
- quick_checks
+ - checks
- linting
- linting_with_types
- check_types
+ - check_oas_snapshot
timeout_in_minutes: 120
parallelism: 1
retry:
diff --git a/.buildkite/pipelines/pull_request/kbn_handlebars.yml b/.buildkite/pipelines/pull_request/kbn_handlebars.yml
index 36901a5d5c552..187058d238682 100644
--- a/.buildkite/pipelines/pull_request/kbn_handlebars.yml
+++ b/.buildkite/pipelines/pull_request/kbn_handlebars.yml
@@ -7,9 +7,11 @@ steps:
depends_on:
- build
- quick_checks
+ - checks
- linting
- linting_with_types
- check_types
+ - check_oas_snapshot
timeout_in_minutes: 5
retry:
automatic:
diff --git a/.buildkite/pipelines/pull_request/observability_onboarding_cypress.yml b/.buildkite/pipelines/pull_request/observability_onboarding_cypress.yml
index 8906cc72fa81f..b0d438064d51e 100644
--- a/.buildkite/pipelines/pull_request/observability_onboarding_cypress.yml
+++ b/.buildkite/pipelines/pull_request/observability_onboarding_cypress.yml
@@ -7,9 +7,11 @@ steps:
depends_on:
- build
- quick_checks
+ - checks
- linting
- linting_with_types
- check_types
+ - check_oas_snapshot
timeout_in_minutes: 120
retry:
automatic:
diff --git a/.buildkite/pipelines/pull_request/profiling_cypress.yml b/.buildkite/pipelines/pull_request/profiling_cypress.yml
index 100e42206b3a1..8ed98a4fbc736 100644
--- a/.buildkite/pipelines/pull_request/profiling_cypress.yml
+++ b/.buildkite/pipelines/pull_request/profiling_cypress.yml
@@ -7,9 +7,11 @@ steps:
depends_on:
- build
- quick_checks
+ - checks
- linting
- linting_with_types
- check_types
+ - check_oas_snapshot
timeout_in_minutes: 120
parallelism: 2
retry:
diff --git a/.buildkite/pipelines/pull_request/response_ops.yml b/.buildkite/pipelines/pull_request/response_ops.yml
index f09beb168259f..9ac20e86f6660 100644
--- a/.buildkite/pipelines/pull_request/response_ops.yml
+++ b/.buildkite/pipelines/pull_request/response_ops.yml
@@ -7,9 +7,11 @@ steps:
depends_on:
- build
- quick_checks
+ - checks
- linting
- linting_with_types
- check_types
+ - check_oas_snapshot
timeout_in_minutes: 120
parallelism: 9
retry:
diff --git a/.buildkite/pipelines/pull_request/response_ops_cases.yml b/.buildkite/pipelines/pull_request/response_ops_cases.yml
index 5382ab6017fa6..27289c864e2c1 100644
--- a/.buildkite/pipelines/pull_request/response_ops_cases.yml
+++ b/.buildkite/pipelines/pull_request/response_ops_cases.yml
@@ -7,9 +7,11 @@ steps:
depends_on:
- build
- quick_checks
+ - checks
- linting
- linting_with_types
- check_types
+ - check_oas_snapshot
timeout_in_minutes: 120
retry:
automatic:
diff --git a/.buildkite/pipelines/pull_request/security_solution/ai_assistant.yml b/.buildkite/pipelines/pull_request/security_solution/ai_assistant.yml
index e8fa983f5ff63..ca185a684d0c7 100644
--- a/.buildkite/pipelines/pull_request/security_solution/ai_assistant.yml
+++ b/.buildkite/pipelines/pull_request/security_solution/ai_assistant.yml
@@ -7,9 +7,11 @@ steps:
depends_on:
- build
- quick_checks
+ - checks
- linting
- linting_with_types
- check_types
+ - check_oas_snapshot
timeout_in_minutes: 60
parallelism: 1
retry:
@@ -25,9 +27,11 @@ steps:
depends_on:
- build
- quick_checks
+ - checks
- linting
- linting_with_types
- check_types
+ - check_oas_snapshot
timeout_in_minutes: 60
parallelism: 1
retry:
diff --git a/.buildkite/pipelines/pull_request/security_solution/cloud_security_posture.yml b/.buildkite/pipelines/pull_request/security_solution/cloud_security_posture.yml
index d2f1571f9d93f..e1ba84bf4f661 100644
--- a/.buildkite/pipelines/pull_request/security_solution/cloud_security_posture.yml
+++ b/.buildkite/pipelines/pull_request/security_solution/cloud_security_posture.yml
@@ -7,9 +7,11 @@ steps:
depends_on:
- build
- quick_checks
+ - checks
- linting
- linting_with_types
- check_types
+ - check_oas_snapshot
timeout_in_minutes: 60
parallelism: 1
retry:
@@ -25,9 +27,11 @@ steps:
depends_on:
- build
- quick_checks
+ - checks
- linting
- linting_with_types
- check_types
+ - check_oas_snapshot
timeout_in_minutes: 60
parallelism: 1
retry:
diff --git a/.buildkite/pipelines/pull_request/security_solution/cypress_burn.yml b/.buildkite/pipelines/pull_request/security_solution/cypress_burn.yml
index 24c7fad53ddd2..90c20eaca256f 100644
--- a/.buildkite/pipelines/pull_request/security_solution/cypress_burn.yml
+++ b/.buildkite/pipelines/pull_request/security_solution/cypress_burn.yml
@@ -9,9 +9,11 @@ steps:
depends_on:
- build
- quick_checks
+ - checks
- linting
- linting_with_types
- check_types
+ - check_oas_snapshot
timeout_in_minutes: 60
soft_fail: true
parallelism: 1
@@ -28,9 +30,11 @@ steps:
depends_on:
- build
- quick_checks
+ - checks
- linting
- linting_with_types
- check_types
+ - check_oas_snapshot
timeout_in_minutes: 60
soft_fail: true
parallelism: 1
@@ -45,9 +49,11 @@ steps:
depends_on:
- build
- quick_checks
+ - checks
- linting
- linting_with_types
- check_types
+ - check_oas_snapshot
timeout_in_minutes: 60
parallelism: 1
retry:
@@ -62,9 +68,11 @@ steps:
depends_on:
- build
- quick_checks
+ - checks
- linting
- linting_with_types
- check_types
+ - check_oas_snapshot
timeout_in_minutes: 50
soft_fail: true
retry:
diff --git a/.buildkite/pipelines/pull_request/security_solution/defend_workflows.yml b/.buildkite/pipelines/pull_request/security_solution/defend_workflows.yml
index ecb07ce4c22a1..0692c26f57176 100644
--- a/.buildkite/pipelines/pull_request/security_solution/defend_workflows.yml
+++ b/.buildkite/pipelines/pull_request/security_solution/defend_workflows.yml
@@ -9,9 +9,11 @@ steps:
depends_on:
- build
- quick_checks
+ - checks
- linting
- linting_with_types
- check_types
+ - check_oas_snapshot
timeout_in_minutes: 60
parallelism: 20
retry:
@@ -29,9 +31,11 @@ steps:
depends_on:
- build
- quick_checks
+ - checks
- linting
- linting_with_types
- check_types
+ - check_oas_snapshot
timeout_in_minutes: 60
parallelism: 14
retry:
diff --git a/.buildkite/pipelines/pull_request/security_solution/detection_engine.yml b/.buildkite/pipelines/pull_request/security_solution/detection_engine.yml
index ad3c4dd230cee..91b3ff7e6b7ff 100644
--- a/.buildkite/pipelines/pull_request/security_solution/detection_engine.yml
+++ b/.buildkite/pipelines/pull_request/security_solution/detection_engine.yml
@@ -7,9 +7,11 @@ steps:
depends_on:
- build
- quick_checks
+ - checks
- linting
- linting_with_types
- check_types
+ - check_oas_snapshot
timeout_in_minutes: 60
parallelism: 5
retry:
@@ -25,9 +27,11 @@ steps:
depends_on:
- build
- quick_checks
+ - checks
- linting
- linting_with_types
- check_types
+ - check_oas_snapshot
timeout_in_minutes: 60
parallelism: 2
retry:
@@ -43,9 +47,11 @@ steps:
depends_on:
- build
- quick_checks
+ - checks
- linting
- linting_with_types
- check_types
+ - check_oas_snapshot
timeout_in_minutes: 60
parallelism: 5
retry:
@@ -61,9 +67,11 @@ steps:
depends_on:
- build
- quick_checks
+ - checks
- linting
- linting_with_types
- check_types
+ - check_oas_snapshot
timeout_in_minutes: 60
parallelism: 2
retry:
diff --git a/.buildkite/pipelines/pull_request/security_solution/entity_analytics.yml b/.buildkite/pipelines/pull_request/security_solution/entity_analytics.yml
index 2f1d30ab97d07..d031c8f382a49 100644
--- a/.buildkite/pipelines/pull_request/security_solution/entity_analytics.yml
+++ b/.buildkite/pipelines/pull_request/security_solution/entity_analytics.yml
@@ -7,9 +7,11 @@ steps:
depends_on:
- build
- quick_checks
+ - checks
- linting
- linting_with_types
- check_types
+ - check_oas_snapshot
timeout_in_minutes: 60
parallelism: 3
retry:
@@ -25,9 +27,11 @@ steps:
depends_on:
- build
- quick_checks
+ - checks
- linting
- linting_with_types
- check_types
+ - check_oas_snapshot
timeout_in_minutes: 60
parallelism: 2
retry:
diff --git a/.buildkite/pipelines/pull_request/security_solution/explore.yml b/.buildkite/pipelines/pull_request/security_solution/explore.yml
index 5fb3ed443e037..3805c8e37f905 100644
--- a/.buildkite/pipelines/pull_request/security_solution/explore.yml
+++ b/.buildkite/pipelines/pull_request/security_solution/explore.yml
@@ -7,9 +7,11 @@ steps:
depends_on:
- build
- quick_checks
+ - checks
- linting
- linting_with_types
- check_types
+ - check_oas_snapshot
timeout_in_minutes: 60
parallelism: 2
retry:
@@ -25,9 +27,11 @@ steps:
depends_on:
- build
- quick_checks
+ - checks
- linting
- linting_with_types
- check_types
+ - check_oas_snapshot
timeout_in_minutes: 60
parallelism: 2
retry:
diff --git a/.buildkite/pipelines/pull_request/security_solution/investigations.yml b/.buildkite/pipelines/pull_request/security_solution/investigations.yml
index c238c8936ad7f..bcabf31f70e8b 100644
--- a/.buildkite/pipelines/pull_request/security_solution/investigations.yml
+++ b/.buildkite/pipelines/pull_request/security_solution/investigations.yml
@@ -7,9 +7,11 @@ steps:
depends_on:
- build
- quick_checks
+ - checks
- linting
- linting_with_types
- check_types
+ - check_oas_snapshot
timeout_in_minutes: 60
parallelism: 7
retry:
@@ -25,9 +27,11 @@ steps:
depends_on:
- build
- quick_checks
+ - checks
- linting
- linting_with_types
- check_types
+ - check_oas_snapshot
timeout_in_minutes: 60
parallelism: 8
retry:
diff --git a/.buildkite/pipelines/pull_request/security_solution/osquery_cypress.yml b/.buildkite/pipelines/pull_request/security_solution/osquery_cypress.yml
index 790d28ff4c472..c2de20aa5975d 100644
--- a/.buildkite/pipelines/pull_request/security_solution/osquery_cypress.yml
+++ b/.buildkite/pipelines/pull_request/security_solution/osquery_cypress.yml
@@ -7,9 +7,11 @@ steps:
depends_on:
- build
- quick_checks
+ - checks
- linting
- linting_with_types
- check_types
+ - check_oas_snapshot
timeout_in_minutes: 60
parallelism: 8
retry:
@@ -25,9 +27,11 @@ steps:
depends_on:
- build
- quick_checks
+ - checks
- linting
- linting_with_types
- check_types
+ - check_oas_snapshot
timeout_in_minutes: 60
parallelism: 8
retry:
diff --git a/.buildkite/pipelines/pull_request/security_solution/playwright.yml b/.buildkite/pipelines/pull_request/security_solution/playwright.yml
index 213021e02ca06..c92506297ea07 100644
--- a/.buildkite/pipelines/pull_request/security_solution/playwright.yml
+++ b/.buildkite/pipelines/pull_request/security_solution/playwright.yml
@@ -7,9 +7,11 @@ steps:
depends_on:
- build
- quick_checks
+ - checks
- linting
- linting_with_types
- check_types
+ - check_oas_snapshot
timeout_in_minutes: 60
parallelism: 1
retry:
@@ -25,9 +27,11 @@ steps:
depends_on:
- build
- quick_checks
+ - checks
- linting
- linting_with_types
- check_types
+ - check_oas_snapshot
timeout_in_minutes: 60
parallelism: 1
retry:
diff --git a/.buildkite/pipelines/pull_request/security_solution/rule_management.yml b/.buildkite/pipelines/pull_request/security_solution/rule_management.yml
index 8e43f0f4530ef..e247dc2972620 100644
--- a/.buildkite/pipelines/pull_request/security_solution/rule_management.yml
+++ b/.buildkite/pipelines/pull_request/security_solution/rule_management.yml
@@ -7,9 +7,11 @@ steps:
depends_on:
- build
- quick_checks
+ - checks
- linting
- linting_with_types
- check_types
+ - check_oas_snapshot
timeout_in_minutes: 60
parallelism: 5
retry:
@@ -25,9 +27,11 @@ steps:
depends_on:
- build
- quick_checks
+ - checks
- linting
- linting_with_types
- check_types
+ - check_oas_snapshot
timeout_in_minutes: 60
parallelism: 1
retry:
@@ -43,9 +47,11 @@ steps:
depends_on:
- build
- quick_checks
+ - checks
- linting
- linting_with_types
- check_types
+ - check_oas_snapshot
timeout_in_minutes: 60
parallelism: 4
retry:
@@ -61,9 +67,11 @@ steps:
depends_on:
- build
- quick_checks
+ - checks
- linting
- linting_with_types
- check_types
+ - check_oas_snapshot
timeout_in_minutes: 60
parallelism: 2
retry:
diff --git a/.buildkite/pipelines/pull_request/slo_plugin_e2e.yml b/.buildkite/pipelines/pull_request/slo_plugin_e2e.yml
index 3d1a4f9b46f41..2cf1126cf1f5d 100644
--- a/.buildkite/pipelines/pull_request/slo_plugin_e2e.yml
+++ b/.buildkite/pipelines/pull_request/slo_plugin_e2e.yml
@@ -7,9 +7,11 @@ steps:
depends_on:
- build
- quick_checks
+ - checks
- linting
- linting_with_types
- check_types
+ - check_oas_snapshot
timeout_in_minutes: 30
artifact_paths:
- 'x-pack/plugins/observability_solution/slo/e2e/.journeys/**/*'
diff --git a/.buildkite/pipelines/pull_request/synthetics_plugin.yml b/.buildkite/pipelines/pull_request/synthetics_plugin.yml
index f5d6b841a953d..b4079b9fac307 100644
--- a/.buildkite/pipelines/pull_request/synthetics_plugin.yml
+++ b/.buildkite/pipelines/pull_request/synthetics_plugin.yml
@@ -7,9 +7,11 @@ steps:
depends_on:
- build
- quick_checks
+ - checks
- linting
- linting_with_types
- check_types
+ - check_oas_snapshot
timeout_in_minutes: 60
artifact_paths:
- 'x-pack/plugins/observability_solution/synthetics/e2e/.journeys/**/*'
diff --git a/.buildkite/pipelines/pull_request/uptime_plugin.yml b/.buildkite/pipelines/pull_request/uptime_plugin.yml
index a03915ef77099..4c1e05d7476fd 100644
--- a/.buildkite/pipelines/pull_request/uptime_plugin.yml
+++ b/.buildkite/pipelines/pull_request/uptime_plugin.yml
@@ -7,9 +7,11 @@ steps:
depends_on:
- build
- quick_checks
+ - checks
- linting
- linting_with_types
- check_types
+ - check_oas_snapshot
timeout_in_minutes: 60
artifact_paths:
- 'x-pack/plugins/observability_solution/synthetics/e2e/.journeys/**/*'
diff --git a/.buildkite/pipelines/pull_request/ux_plugin_e2e.yml b/.buildkite/pipelines/pull_request/ux_plugin_e2e.yml
index cd95f44fa2e86..4bade14464f35 100644
--- a/.buildkite/pipelines/pull_request/ux_plugin_e2e.yml
+++ b/.buildkite/pipelines/pull_request/ux_plugin_e2e.yml
@@ -7,9 +7,11 @@ steps:
depends_on:
- build
- quick_checks
+ - checks
- linting
- linting_with_types
- check_types
+ - check_oas_snapshot
timeout_in_minutes: 60
artifact_paths:
- 'x-pack/plugins/observability_solution/ux/e2e/.journeys/**/*'
From 9efe20e1e1c25e707d21baf33a6d8fd861697f75 Mon Sep 17 00:00:00 2001
From: Alexi Doak <109488926+doakalexi@users.noreply.github.com>
Date: Mon, 4 Nov 2024 11:47:52 -0800
Subject: [PATCH 037/101] [ResponseOps] Remove 7.x deprecated kibana.yml
settings (#198435)
Resolves https://github.com/elastic/kibana/issues/194622
## Summary
Removes the following deprecated configuration settings:
- `xpack.actions.customHostSettings.ssl.rejectUnauthorized`
- `xpack.actions.whitelistedHosts`
- `xpack.actions.rejectUnauthorized`
- `xpack.actions.proxyRejectUnauthorizedCertificates`
- `xpack.alerts.healthCheck`
- `xpack.alerts.invalidateApiKeysTask.interval`
- `xpack.alerts.invalidateApiKeysTask.removalDelay`
- `xpack.alerting.defaultRuleTaskTimeout`
---------
Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
---
docs/settings/alert-action-settings.asciidoc | 14 ---
.../resources/base/bin/kibana-docker | 6 --
.../actions_client/actions_client.test.ts | 2 -
.../actions/server/actions_config.test.ts | 21 ----
.../plugins/actions/server/actions_config.ts | 8 +-
x-pack/plugins/actions/server/config.test.ts | 8 --
x-pack/plugins/actions/server/config.ts | 12 ---
x-pack/plugins/actions/server/index.test.ts | 61 -----------
x-pack/plugins/actions/server/index.ts | 100 +-----------------
.../axios_utils_connection.test.ts | 3 -
.../axios_utils_proxy.test.ts | 3 -
.../server/lib/custom_host_settings.test.ts | 13 ---
.../actions/server/lib/get_custom_agents.ts | 5 +-
x-pack/plugins/actions/server/plugin.test.ts | 6 --
x-pack/plugins/actions/tsconfig.json | 1 -
x-pack/plugins/alerting/server/index.ts | 14 ---
.../connector_types/email/send_email.test.ts | 5 +-
.../connector_types/email/send_email.ts | 5 +-
.../alerting_api_integration/common/config.ts | 3 -
.../actions/connector_types/stack/webhook.ts | 18 ----
.../actions/connector_types/stack/webhook.ts | 18 ----
21 files changed, 6 insertions(+), 320 deletions(-)
delete mode 100644 x-pack/plugins/actions/server/index.test.ts
diff --git a/docs/settings/alert-action-settings.asciidoc b/docs/settings/alert-action-settings.asciidoc
index db36248ef194f..e0fa3f0aab860 100644
--- a/docs/settings/alert-action-settings.asciidoc
+++ b/docs/settings/alert-action-settings.asciidoc
@@ -112,11 +112,6 @@ A boolean value indicating that TLS must be used for this connection.
The options `smtp.ignoreTLS` and `smtp.requireTLS` can not both be set to true.
Default: `false`.
-`xpack.actions.customHostSettings[n].ssl.rejectUnauthorized`::
-deprecated:[8.0.0] Use <> instead. A boolean value indicating whether to bypass server certificate validation.
-Overrides the general `xpack.actions.rejectUnauthorized` configuration
-for requests made for this hostname/port.
-
[[action-config-custom-host-verification-mode]] `xpack.actions.customHostSettings[n].ssl.verificationMode` {ess-icon}::
Controls the verification of the server certificate that {kib} receives when making an outbound SSL/TLS connection to the host server. Valid values are `full`, `certificate`, and `none`.
Use `full` to perform hostname verification, `certificate` to skip hostname verification, and `none` to skip verification. Default: `full`. <>. Overrides the general `xpack.actions.ssl.verificationMode` configuration
@@ -198,19 +193,10 @@ By default, no hosts will use the proxy, but if an action's hostname is in this
`xpack.actions.proxyHeaders` {ess-icon}::
Specifies HTTP headers for the proxy, if using a proxy for actions. Default: {}.
-`xpack.actions.proxyRejectUnauthorizedCertificates` {ess-icon}::
-deprecated:[8.0.0] Use <> instead. Set to `false` to bypass certificate validation for the proxy, if using a proxy for actions. Default: `true`.
-
[[action-config-proxy-verification-mode]]`xpack.actions.ssl.proxyVerificationMode` {ess-icon}::
Controls the verification for the proxy server certificate that Kibana receives when making an outbound SSL/TLS connection to the proxy server. Valid values are `full`, `certificate`, and `none`.
Use `full` to perform hostname verification, `certificate` to skip hostname verification, and `none` to skip verification. Default: `full`. <>.
-`xpack.actions.rejectUnauthorized` {ess-icon}::
-deprecated:[8.0.0] Use <> instead. Set to `false` to bypass certificate validation for actions. Default: `true`.
-+
-As an alternative to setting `xpack.actions.rejectUnauthorized`, you can use the setting
-`xpack.actions.customHostSettings` to set SSL options for specific servers.
-
[[action-config-verification-mode]] `xpack.actions.ssl.verificationMode` {ess-icon}::
Controls the verification for the server certificate that {hosted-ems} receives when making an outbound SSL/TLS connection for actions. Valid values are `full`, `certificate`, and `none`.
Use `full` to perform hostname verification, `certificate` to skip hostname verification, and `none` to skip verification. Default: `full`. <>.
diff --git a/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker b/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker
index fbe64258a5704..b814538466d73 100755
--- a/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker
+++ b/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker
@@ -221,16 +221,13 @@ kibana_vars=(
xpack.actions.proxyBypassHosts
xpack.actions.proxyHeaders
xpack.actions.proxyOnlyHosts
- xpack.actions.proxyRejectUnauthorizedCertificates
xpack.actions.proxyUrl
- xpack.actions.rejectUnauthorized
xpack.actions.responseTimeout
xpack.actions.ssl.proxyVerificationMode
xpack.actions.ssl.verificationMode
xpack.alerting.healthCheck.interval
xpack.alerting.invalidateApiKeysTask.interval
xpack.alerting.invalidateApiKeysTask.removalDelay
- xpack.alerting.defaultRuleTaskTimeout
xpack.alerting.rules.run.timeout
xpack.alerting.rules.run.ruleTypeOverrides
xpack.alerting.cancelAlertsOnRuleTimeout
@@ -240,9 +237,6 @@ kibana_vars=(
xpack.alerting.rules.run.alerts.max
xpack.alerting.rules.run.actions.connectorTypeOverrides
xpack.alerting.maxScheduledPerMinute
- xpack.alerts.healthCheck.interval
- xpack.alerts.invalidateApiKeysTask.interval
- xpack.alerts.invalidateApiKeysTask.removalDelay
xpack.apm.indices.error
xpack.apm.indices.metric
xpack.apm.indices.onboarding
diff --git a/x-pack/plugins/actions/server/actions_client/actions_client.test.ts b/x-pack/plugins/actions/server/actions_client/actions_client.test.ts
index 3421e381d07b6..99bcbf15ecfb9 100644
--- a/x-pack/plugins/actions/server/actions_client/actions_client.test.ts
+++ b/x-pack/plugins/actions/server/actions_client/actions_client.test.ts
@@ -575,8 +575,6 @@ describe('create()', () => {
allowedHosts: ['*'],
preconfiguredAlertHistoryEsIndex: false,
preconfigured: {},
- proxyRejectUnauthorizedCertificates: true, // legacy
- rejectUnauthorized: true, // legacy
proxyBypassHosts: undefined,
proxyOnlyHosts: undefined,
maxResponseContentLength: new ByteSizeValue(1000000),
diff --git a/x-pack/plugins/actions/server/actions_config.test.ts b/x-pack/plugins/actions/server/actions_config.test.ts
index 2b5c4efc283b6..ce16aca508af6 100644
--- a/x-pack/plugins/actions/server/actions_config.test.ts
+++ b/x-pack/plugins/actions/server/actions_config.test.ts
@@ -30,8 +30,6 @@ const defaultActionsConfig: ActionsConfig = {
enabledActionTypes: [],
preconfiguredAlertHistoryEsIndex: false,
preconfigured: {},
- proxyRejectUnauthorizedCertificates: true, // legacy
- rejectUnauthorized: true, // legacy
maxResponseContentLength: new ByteSizeValue(1000000),
responseTimeout: moment.duration(60000),
ssl: {
@@ -318,25 +316,6 @@ describe('getProxySettings', () => {
expect(proxySettings?.proxyUrl).toBe(config.proxyUrl);
});
- test('returns proper verificationMode values, beased on the legacy config option proxyRejectUnauthorizedCertificates', () => {
- const configTrue: ActionsConfig = {
- ...defaultActionsConfig,
- proxyUrl: 'https://proxy.elastic.co',
- proxyRejectUnauthorizedCertificates: true,
- };
- let proxySettings = getActionsConfigurationUtilities(configTrue).getProxySettings();
- expect(proxySettings?.proxySSLSettings.verificationMode).toBe('full');
-
- const configFalse: ActionsConfig = {
- ...defaultActionsConfig,
- proxyUrl: 'https://proxy.elastic.co',
- proxyRejectUnauthorizedCertificates: false,
- ssl: {},
- };
- proxySettings = getActionsConfigurationUtilities(configFalse).getProxySettings();
- expect(proxySettings?.proxySSLSettings.verificationMode).toBe('none');
- });
-
test('returns proper verificationMode value, based on the SSL proxy configuration', () => {
const configTrue: ActionsConfig = {
...defaultActionsConfig,
diff --git a/x-pack/plugins/actions/server/actions_config.ts b/x-pack/plugins/actions/server/actions_config.ts
index e77c0528d16a1..30c96b4b6a998 100644
--- a/x-pack/plugins/actions/server/actions_config.ts
+++ b/x-pack/plugins/actions/server/actions_config.ts
@@ -122,10 +122,7 @@ function getProxySettingsFromConfig(config: ActionsConfig): undefined | ProxySet
proxyBypassHosts: arrayAsSet(config.proxyBypassHosts),
proxyOnlyHosts: arrayAsSet(config.proxyOnlyHosts),
proxyHeaders: config.proxyHeaders,
- proxySSLSettings: getSSLSettingsFromConfig(
- config.ssl?.proxyVerificationMode,
- config.proxyRejectUnauthorizedCertificates
- ),
+ proxySSLSettings: getSSLSettingsFromConfig(config.ssl?.proxyVerificationMode),
};
}
@@ -200,8 +197,7 @@ export function getActionsConfigurationUtilities(
isActionTypeEnabled,
getProxySettings: () => getProxySettingsFromConfig(config),
getResponseSettings: () => getResponseSettingsFromConfig(config),
- getSSLSettings: () =>
- getSSLSettingsFromConfig(config.ssl?.verificationMode, config.rejectUnauthorized),
+ getSSLSettings: () => getSSLSettingsFromConfig(config.ssl?.verificationMode),
ensureUriAllowed(uri: string) {
if (!isUriAllowed(uri)) {
throw new Error(allowListErrorMessage(AllowListingField.URL, uri));
diff --git a/x-pack/plugins/actions/server/config.test.ts b/x-pack/plugins/actions/server/config.test.ts
index 4034fc5cb50b5..01bcd867fda53 100644
--- a/x-pack/plugins/actions/server/config.test.ts
+++ b/x-pack/plugins/actions/server/config.test.ts
@@ -35,8 +35,6 @@ describe('config validation', () => {
"microsoftGraphApiUrl": "https://graph.microsoft.com/v1.0",
"preconfigured": Object {},
"preconfiguredAlertHistoryEsIndex": false,
- "proxyRejectUnauthorizedCertificates": true,
- "rejectUnauthorized": true,
"responseTimeout": "PT1M",
"usage": Object {
"url": "https://usage-api.usage-api/api/v1/usage",
@@ -56,8 +54,6 @@ describe('config validation', () => {
},
},
},
- proxyRejectUnauthorizedCertificates: false,
- rejectUnauthorized: false,
};
expect(configSchema.validate(config)).toMatchInlineSnapshot(`
Object {
@@ -85,8 +81,6 @@ describe('config validation', () => {
},
},
"preconfiguredAlertHistoryEsIndex": false,
- "proxyRejectUnauthorizedCertificates": false,
- "rejectUnauthorized": false,
"responseTimeout": "PT1M",
"usage": Object {
"url": "https://usage-api.usage-api/api/v1/usage",
@@ -224,8 +218,6 @@ describe('config validation', () => {
"microsoftGraphApiUrl": "https://graph.microsoft.com/v1.0",
"preconfigured": Object {},
"preconfiguredAlertHistoryEsIndex": false,
- "proxyRejectUnauthorizedCertificates": true,
- "rejectUnauthorized": true,
"responseTimeout": "PT1M",
"ssl": Object {
"proxyVerificationMode": "none",
diff --git a/x-pack/plugins/actions/server/config.ts b/x-pack/plugins/actions/server/config.ts
index f475c05424df4..f16a9830678cd 100644
--- a/x-pack/plugins/actions/server/config.ts
+++ b/x-pack/plugins/actions/server/config.ts
@@ -44,10 +44,6 @@ const customHostSettingsSchema = schema.object({
),
ssl: schema.maybe(
schema.object({
- /**
- * @deprecated in favor of `verificationMode`
- **/
- rejectUnauthorized: schema.maybe(schema.boolean()),
verificationMode: schema.maybe(
schema.oneOf(
[schema.literal('none'), schema.literal('certificate'), schema.literal('full')],
@@ -98,16 +94,8 @@ export const configSchema = schema.object({
}),
proxyUrl: schema.maybe(schema.string()),
proxyHeaders: schema.maybe(schema.recordOf(schema.string(), schema.string())),
- /**
- * @deprecated in favor of `ssl.proxyVerificationMode`
- **/
- proxyRejectUnauthorizedCertificates: schema.boolean({ defaultValue: true }),
proxyBypassHosts: schema.maybe(schema.arrayOf(schema.string({ hostname: true }))),
proxyOnlyHosts: schema.maybe(schema.arrayOf(schema.string({ hostname: true }))),
- /**
- * @deprecated in favor of `ssl.verificationMode`
- **/
- rejectUnauthorized: schema.boolean({ defaultValue: true }),
ssl: schema.maybe(
schema.object({
verificationMode: schema.maybe(
diff --git a/x-pack/plugins/actions/server/index.test.ts b/x-pack/plugins/actions/server/index.test.ts
deleted file mode 100644
index 43f69da15de2f..0000000000000
--- a/x-pack/plugins/actions/server/index.test.ts
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
- * or more contributor license agreements. Licensed under the Elastic License
- * 2.0; you may not use this file except in compliance with the Elastic License
- * 2.0.
- */
-import { config } from '.';
-import { applyDeprecations, configDeprecationFactory } from '@kbn/config';
-import { configDeprecationsMock } from '@kbn/core/server/mocks';
-
-const CONFIG_PATH = 'xpack.actions';
-const applyStackAlertDeprecations = (settings: Record = {}) => {
- const deprecations = config.deprecations!(configDeprecationFactory);
- const deprecationMessages: string[] = [];
- const _config = {
- [CONFIG_PATH]: settings,
- };
- const { config: migrated, changedPaths } = applyDeprecations(
- _config,
- deprecations.map((deprecation) => ({
- deprecation,
- path: CONFIG_PATH,
- context: configDeprecationsMock.createContext(),
- })),
- () =>
- ({ message }) =>
- deprecationMessages.push(message)
- );
- return {
- messages: deprecationMessages,
- migrated,
- changedPaths,
- };
-};
-
-describe('index', () => {
- describe('deprecations', () => {
- it('should properly unset deprecated configs', () => {
- const { messages, changedPaths } = applyStackAlertDeprecations({
- customHostSettings: [{ ssl: { rejectUnauthorized: false } }],
- rejectUnauthorized: false,
- proxyRejectUnauthorizedCertificates: false,
- });
- expect(changedPaths.unset).toStrictEqual([
- 'xpack.actions.customHostSettings.ssl.rejectUnauthorized',
- 'xpack.actions.rejectUnauthorized',
- 'xpack.actions.proxyRejectUnauthorizedCertificates',
- ]);
- expect(messages.length).toBe(3);
- expect(messages[0]).toBe(
- '"xpack.actions.customHostSettings[].ssl.rejectUnauthorized" is deprecated.Use "xpack.actions.customHostSettings[].ssl.verificationMode" instead, with the setting "verificationMode:full" eql to "rejectUnauthorized:true", and "verificationMode:none" eql to "rejectUnauthorized:false".'
- );
- expect(messages[1]).toBe(
- '"xpack.actions.rejectUnauthorized" is deprecated. Use "xpack.actions.ssl.verificationMode" instead, with the setting "verificationMode:full" eql to "rejectUnauthorized:true", and "verificationMode:none" eql to "rejectUnauthorized:false".'
- );
- expect(messages[2]).toBe(
- '"xpack.actions.proxyRejectUnauthorizedCertificates" is deprecated. Use "xpack.actions.ssl.proxyVerificationMode" instead, with the setting "proxyVerificationMode:full" eql to "rejectUnauthorized:true",and "proxyVerificationMode:none" eql to "rejectUnauthorized:false".'
- );
- });
- });
-});
diff --git a/x-pack/plugins/actions/server/index.ts b/x-pack/plugins/actions/server/index.ts
index 1d5aa22ba07cf..d391911ff0fc3 100644
--- a/x-pack/plugins/actions/server/index.ts
+++ b/x-pack/plugins/actions/server/index.ts
@@ -4,10 +4,9 @@
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
-import { get } from 'lodash';
import type { PublicMethodsOf } from '@kbn/utility-types';
import { PluginInitializerContext, PluginConfigDescriptor } from '@kbn/core/server';
-import { configSchema, ActionsConfig, CustomHostSettings } from './config';
+import { configSchema, ActionsConfig } from './config';
import { ActionsClient as ActionsClientClass } from './actions_client';
import { ActionsAuthorization as ActionsAuthorizationClass } from './authorization/actions_authorization';
@@ -51,103 +50,6 @@ export const config: PluginConfigDescriptor = {
exposeToBrowser: {
email: { domain_allowlist: true },
},
- deprecations: ({ renameFromRoot, unused }) => [
- renameFromRoot('xpack.actions.whitelistedHosts', 'xpack.actions.allowedHosts', {
- level: 'warning',
- }),
- (settings, fromPath, addDeprecation) => {
- const actions = get(settings, fromPath);
- const customHostSettings = actions?.customHostSettings ?? [];
- if (
- customHostSettings.find(
- (customHostSchema: CustomHostSettings) =>
- Object.hasOwn(customHostSchema, 'ssl') &&
- Object.hasOwn(customHostSchema.ssl ?? {}, 'rejectUnauthorized')
- )
- ) {
- addDeprecation({
- level: 'warning',
- configPath: 'xpack.actions.customHostSettings.ssl.rejectUnauthorized',
- message:
- `"xpack.actions.customHostSettings[].ssl.rejectUnauthorized" is deprecated.` +
- `Use "xpack.actions.customHostSettings[].ssl.verificationMode" instead, ` +
- `with the setting "verificationMode:full" eql to "rejectUnauthorized:true", ` +
- `and "verificationMode:none" eql to "rejectUnauthorized:false".`,
- correctiveActions: {
- manualSteps: [
- `Remove "xpack.actions.customHostSettings[].ssl.rejectUnauthorized" from your kibana configs.`,
- `Use "xpack.actions.customHostSettings[].ssl.verificationMode" ` +
- `with the setting "verificationMode:full" eql to "rejectUnauthorized:true", ` +
- `and "verificationMode:none" eql to "rejectUnauthorized:false".`,
- ],
- },
- });
- return {
- unset: [
- {
- path: `xpack.actions.customHostSettings.ssl.rejectUnauthorized`,
- },
- ],
- };
- }
- },
- (settings, fromPath, addDeprecation) => {
- const actions = get(settings, fromPath);
- if (Object.hasOwn(actions ?? {}, 'rejectUnauthorized')) {
- addDeprecation({
- level: 'warning',
- configPath: `${fromPath}.rejectUnauthorized`,
- message:
- `"xpack.actions.rejectUnauthorized" is deprecated. Use "xpack.actions.ssl.verificationMode" instead, ` +
- `with the setting "verificationMode:full" eql to "rejectUnauthorized:true", ` +
- `and "verificationMode:none" eql to "rejectUnauthorized:false".`,
- correctiveActions: {
- manualSteps: [
- `Remove "xpack.actions.rejectUnauthorized" from your kibana configs.`,
- `Use "xpack.actions.ssl.verificationMode" ` +
- `with the setting "verificationMode:full" eql to "rejectUnauthorized:true", ` +
- `and "verificationMode:none" eql to "rejectUnauthorized:false".`,
- ],
- },
- });
- return {
- unset: [
- {
- path: `xpack.actions.rejectUnauthorized`,
- },
- ],
- };
- }
- },
- (settings, fromPath, addDeprecation) => {
- const actions = get(settings, fromPath);
- if (Object.hasOwn(actions ?? {}, 'proxyRejectUnauthorizedCertificates')) {
- addDeprecation({
- level: 'warning',
- configPath: `${fromPath}.proxyRejectUnauthorizedCertificates`,
- message:
- `"xpack.actions.proxyRejectUnauthorizedCertificates" is deprecated. Use "xpack.actions.ssl.proxyVerificationMode" instead, ` +
- `with the setting "proxyVerificationMode:full" eql to "rejectUnauthorized:true",` +
- `and "proxyVerificationMode:none" eql to "rejectUnauthorized:false".`,
- correctiveActions: {
- manualSteps: [
- `Remove "xpack.actions.proxyRejectUnauthorizedCertificates" from your kibana configs.`,
- `Use "xpack.actions.ssl.proxyVerificationMode" ` +
- `with the setting "proxyVerificationMode:full" eql to "rejectUnauthorized:true",` +
- `and "proxyVerificationMode:none" eql to "rejectUnauthorized:false".`,
- ],
- },
- });
- return {
- unset: [
- {
- path: `xpack.actions.proxyRejectUnauthorizedCertificates`,
- },
- ],
- };
- }
- },
- ],
};
export { urlAllowListValidator } from './sub_action_framework/helpers';
diff --git a/x-pack/plugins/actions/server/integration_tests/axios_utils_connection.test.ts b/x-pack/plugins/actions/server/integration_tests/axios_utils_connection.test.ts
index 3a4101bb9f152..a0454cb2bbc18 100644
--- a/x-pack/plugins/actions/server/integration_tests/axios_utils_connection.test.ts
+++ b/x-pack/plugins/actions/server/integration_tests/axios_utils_connection.test.ts
@@ -461,7 +461,6 @@ async function rejectUnauthorizedTargetProxyTest(opts: RunTestOptions) {
await runWithSetup(opts, async (target, proxyInstance, axiosDefaults) => {
const acu = getACUfromConfig({
proxyUrl: proxyInstance.url,
- rejectUnauthorized: false,
customHostSettings: [{ url: target.url, ssl: { verificationMode: 'none' } }],
});
@@ -676,14 +675,12 @@ const BaseActionsConfig: ActionsConfig = {
preconfigured: {},
proxyUrl: undefined,
proxyHeaders: undefined,
- proxyRejectUnauthorizedCertificates: true,
ssl: {
proxyVerificationMode: 'full',
verificationMode: 'full',
},
proxyBypassHosts: undefined,
proxyOnlyHosts: undefined,
- rejectUnauthorized: true,
maxResponseContentLength: ByteSizeValue.parse('1mb'),
responseTimeout: momentDuration(1000 * 30),
customHostSettings: undefined,
diff --git a/x-pack/plugins/actions/server/integration_tests/axios_utils_proxy.test.ts b/x-pack/plugins/actions/server/integration_tests/axios_utils_proxy.test.ts
index 1c1d411111253..97a917d6b6893 100644
--- a/x-pack/plugins/actions/server/integration_tests/axios_utils_proxy.test.ts
+++ b/x-pack/plugins/actions/server/integration_tests/axios_utils_proxy.test.ts
@@ -366,7 +366,6 @@ async function rejectUnauthorizedTargetProxyTest(opts: RunTestOptions) {
await runWithSetup(opts, async (target, proxyInstance, axiosDefaults) => {
const acu = getACUfromConfig({
proxyUrl: proxyInstance.url,
- rejectUnauthorized: false,
customHostSettings: [{ url: target.url, ssl: { verificationMode: 'none' } }],
});
@@ -582,14 +581,12 @@ const BaseActionsConfig: ActionsConfig = {
preconfigured: {},
proxyUrl: undefined,
proxyHeaders: undefined,
- proxyRejectUnauthorizedCertificates: true,
ssl: {
proxyVerificationMode: 'full',
verificationMode: 'full',
},
proxyBypassHosts: undefined,
proxyOnlyHosts: undefined,
- rejectUnauthorized: true,
maxResponseContentLength: ByteSizeValue.parse('1mb'),
responseTimeout: momentDuration(1000 * 30),
customHostSettings: undefined,
diff --git a/x-pack/plugins/actions/server/lib/custom_host_settings.test.ts b/x-pack/plugins/actions/server/lib/custom_host_settings.test.ts
index 0a9d9c6df31e7..f9173f5e007d0 100644
--- a/x-pack/plugins/actions/server/lib/custom_host_settings.test.ts
+++ b/x-pack/plugins/actions/server/lib/custom_host_settings.test.ts
@@ -74,8 +74,6 @@ describe('custom_host_settings', () => {
enabledActionTypes: [],
preconfiguredAlertHistoryEsIndex: false,
preconfigured: {},
- proxyRejectUnauthorizedCertificates: true,
- rejectUnauthorized: true,
maxResponseContentLength: new ByteSizeValue(1000000),
responseTimeout: moment.duration(60000),
enableFooterInEmail: true,
@@ -119,14 +117,12 @@ describe('custom_host_settings', () => {
url: 'https://elastic.co:443',
ssl: {
certificateAuthoritiesData: 'xyz',
- rejectUnauthorized: false,
},
},
{
url: 'smtp://mail.elastic.com:25',
ssl: {
certificateAuthoritiesData: 'abc',
- rejectUnauthorized: true,
},
smtp: {
ignoreTLS: true,
@@ -473,15 +469,9 @@ describe('custom_host_settings', () => {
customHostSettings: [
{
url: 'https://almost.purrfect.com/',
- ssl: {
- rejectUnauthorized: true,
- },
},
{
url: 'https://almost.purrfect.com:443',
- ssl: {
- rejectUnauthorized: false,
- },
},
],
};
@@ -491,9 +481,6 @@ describe('custom_host_settings', () => {
customHostSettings: [
{
url: 'https://almost.purrfect.com:443',
- ssl: {
- rejectUnauthorized: true,
- },
},
],
};
diff --git a/x-pack/plugins/actions/server/lib/get_custom_agents.ts b/x-pack/plugins/actions/server/lib/get_custom_agents.ts
index 26b1495902eb1..c433bec18a54b 100644
--- a/x-pack/plugins/actions/server/lib/get_custom_agents.ts
+++ b/x-pack/plugins/actions/server/lib/get_custom_agents.ts
@@ -59,10 +59,7 @@ export function getCustomAgents(
agentOptions.ca = sslSettings.certificateAuthoritiesData;
}
- const sslSettingsFromConfig = getSSLSettingsFromConfig(
- sslSettings.verificationMode,
- sslSettings.rejectUnauthorized
- );
+ const sslSettingsFromConfig = getSSLSettingsFromConfig(sslSettings.verificationMode);
// see: src/core/server/elasticsearch/legacy/elasticsearch_client_config.ts
// This is where the global rejectUnauthorized is overridden by a custom host
const customHostNodeSSLOptions = getNodeSSLOptions(
diff --git a/x-pack/plugins/actions/server/plugin.test.ts b/x-pack/plugins/actions/server/plugin.test.ts
index 4ff87aa0459ef..f5de52810b162 100644
--- a/x-pack/plugins/actions/server/plugin.test.ts
+++ b/x-pack/plugins/actions/server/plugin.test.ts
@@ -50,10 +50,8 @@ function getConfig(overrides = {}) {
secrets: {},
},
},
- proxyRejectUnauthorizedCertificates: true,
proxyBypassHosts: undefined,
proxyOnlyHosts: undefined,
- rejectUnauthorized: true,
maxResponseContentLength: new ByteSizeValue(1000000),
responseTimeout: moment.duration('60s'),
enableFooterInEmail: true,
@@ -80,8 +78,6 @@ describe('Actions Plugin', () => {
allowedHosts: ['*'],
preconfiguredAlertHistoryEsIndex: false,
preconfigured: {},
- proxyRejectUnauthorizedCertificates: true,
- rejectUnauthorized: true,
maxResponseContentLength: new ByteSizeValue(1000000),
responseTimeout: moment.duration(60000),
enableFooterInEmail: true,
@@ -587,8 +583,6 @@ describe('Actions Plugin', () => {
secrets: {},
},
},
- proxyRejectUnauthorizedCertificates: true,
- rejectUnauthorized: true,
maxResponseContentLength: new ByteSizeValue(1000000),
responseTimeout: moment.duration(60000),
enableFooterInEmail: true,
diff --git a/x-pack/plugins/actions/tsconfig.json b/x-pack/plugins/actions/tsconfig.json
index 384aba6a6b014..8a3c56a472064 100644
--- a/x-pack/plugins/actions/tsconfig.json
+++ b/x-pack/plugins/actions/tsconfig.json
@@ -24,7 +24,6 @@
"@kbn/i18n",
"@kbn/utility-types",
"@kbn/config-schema",
- "@kbn/config",
"@kbn/core-saved-objects-server",
"@kbn/es-query",
"@kbn/apm-utils",
diff --git a/x-pack/plugins/alerting/server/index.ts b/x-pack/plugins/alerting/server/index.ts
index 2f5cd3994e436..2cb2c212a91ba 100644
--- a/x-pack/plugins/alerting/server/index.ts
+++ b/x-pack/plugins/alerting/server/index.ts
@@ -84,20 +84,6 @@ export const config: PluginConfigDescriptor = {
rules: { run: { alerts: { max: true } } },
},
deprecations: ({ renameFromRoot, deprecate }) => [
- renameFromRoot('xpack.alerts.healthCheck', 'xpack.alerting.healthCheck', { level: 'warning' }),
- renameFromRoot(
- 'xpack.alerts.invalidateApiKeysTask.interval',
- 'xpack.alerting.invalidateApiKeysTask.interval',
- { level: 'warning' }
- ),
- renameFromRoot(
- 'xpack.alerts.invalidateApiKeysTask.removalDelay',
- 'xpack.alerting.invalidateApiKeysTask.removalDelay',
- { level: 'warning' }
- ),
- renameFromRoot('xpack.alerting.defaultRuleTaskTimeout', 'xpack.alerting.rules.run.timeout', {
- level: 'warning',
- }),
deprecate('maxEphemeralActionsPerAlert', 'a future version', {
level: 'warning',
message: `Configuring "xpack.alerting.maxEphemeralActionsPerAlert" is deprecated and will be removed in a future version. Remove this setting to increase action execution resiliency.`,
diff --git a/x-pack/plugins/stack_connectors/server/connector_types/email/send_email.test.ts b/x-pack/plugins/stack_connectors/server/connector_types/email/send_email.test.ts
index 77de60660a975..de5a94a4c39c9 100644
--- a/x-pack/plugins/stack_connectors/server/connector_types/email/send_email.test.ts
+++ b/x-pack/plugins/stack_connectors/server/connector_types/email/send_email.test.ts
@@ -758,7 +758,6 @@ describe('send_email module', () => {
url: 'smtp://example.com:1025',
ssl: {
certificateAuthoritiesData: 'ca cert data goes here',
- rejectUnauthorized: true,
},
smtp: {
ignoreTLS: true,
@@ -786,7 +785,7 @@ describe('send_email module', () => {
"secure": false,
"tls": Object {
"ca": "ca cert data goes here",
- "rejectUnauthorized": true,
+ "rejectUnauthorized": false,
},
},
]
@@ -811,7 +810,6 @@ describe('send_email module', () => {
url: 'smtp://example.com:1025',
ssl: {
certificateAuthoritiesData: 'ca cert data goes here',
- rejectUnauthorized: true,
},
smtp: {
requireTLS: true,
@@ -837,7 +835,6 @@ describe('send_email module', () => {
"secure": false,
"tls": Object {
"ca": "ca cert data goes here",
- "rejectUnauthorized": true,
},
},
]
diff --git a/x-pack/plugins/stack_connectors/server/connector_types/email/send_email.ts b/x-pack/plugins/stack_connectors/server/connector_types/email/send_email.ts
index 199d96f352389..06ae036f40b2c 100644
--- a/x-pack/plugins/stack_connectors/server/connector_types/email/send_email.ts
+++ b/x-pack/plugins/stack_connectors/server/connector_types/email/send_email.ts
@@ -289,10 +289,7 @@ function getTransportConfig(
tlsConfig.ca = sslSettings?.certificateAuthoritiesData;
}
- const sslSettingsFromConfig = getSSLSettingsFromConfig(
- sslSettings?.verificationMode,
- sslSettings?.rejectUnauthorized
- );
+ const sslSettingsFromConfig = getSSLSettingsFromConfig(sslSettings?.verificationMode);
const nodeTLSOptions = getNodeSSLOptions(logger, sslSettingsFromConfig.verificationMode);
if (!transportConfig.tls) {
transportConfig.tls = { ...tlsConfig, ...nodeTLSOptions };
diff --git a/x-pack/test/alerting_api_integration/common/config.ts b/x-pack/test/alerting_api_integration/common/config.ts
index 3ff3def3f4b70..b8a576f99b8d0 100644
--- a/x-pack/test/alerting_api_integration/common/config.ts
+++ b/x-pack/test/alerting_api_integration/common/config.ts
@@ -88,7 +88,6 @@ export function createTestConfig(name: string, options: CreateTestConfigOptions)
verificationMode = 'full',
preconfiguredAlertHistoryEsIndex = false,
customizeLocalHostSsl = false,
- rejectUnauthorized = true, // legacy
emailDomainsAllowed = undefined,
testFiles = undefined,
reportName = undefined,
@@ -128,7 +127,6 @@ export function createTestConfig(name: string, options: CreateTestConfigOptions)
? [
`--xpack.actions.proxyUrl=http://localhost:${proxyPort}`,
`--xpack.actions.proxyOnlyHosts=${JSON.stringify(proxyHosts)}`,
- '--xpack.actions.proxyRejectUnauthorizedCertificates=false',
]
: [
`--xpack.actions.proxyUrl=http://elastic.co`,
@@ -212,7 +210,6 @@ export function createTestConfig(name: string, options: CreateTestConfigOptions)
`--xpack.alerting.enableFrameworkAlerts=true`,
`--xpack.alerting.rulesSettings.cacheInterval=10000`,
`--xpack.actions.enabledActionTypes=${JSON.stringify(enabledActionTypes)}`,
- `--xpack.actions.rejectUnauthorized=${rejectUnauthorized}`,
`--xpack.actions.microsoftGraphApiUrl=${servers.kibana.protocol}://${servers.kibana.hostname}:${servers.kibana.port}/api/_actions-FTS-external-service-simulators/exchange/users/test@/sendMail`,
`--xpack.actions.ssl.verificationMode=${verificationMode}`,
...actionsProxyUrl,
diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/actions/connector_types/stack/webhook.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/actions/connector_types/stack/webhook.ts
index 03cdc6b966a75..d25ac1a5f135f 100644
--- a/x-pack/test/alerting_api_integration/spaces_only/tests/actions/connector_types/stack/webhook.ts
+++ b/x-pack/test/alerting_api_integration/spaces_only/tests/actions/connector_types/stack/webhook.ts
@@ -100,24 +100,6 @@ export default function webhookTest({ getService }: FtrProviderContext) {
});
describe('ssl customization', () => {
- it('should handle the xpack.actions.rejectUnauthorized: false', async () => {
- const connectorId = 'custom.ssl.noCustom';
- const port = await getPortOfConnector(connectorId);
- const server = await createTlsWebhookServer(port);
- const { status, body } = await supertest
- .post(`/api/actions/connector/${connectorId}/_execute`)
- .set('kbn-xsrf', 'test')
- .send({
- params: {
- body: 'foo',
- },
- });
- expect(status).to.eql(200);
- server.close();
-
- expect(body.status).to.eql('ok');
- });
-
it('should handle the customized rejectUnauthorized: false', async () => {
const connectorId = 'custom.ssl.rejectUnauthorizedFalse';
const port = await getPortOfConnector(connectorId);
diff --git a/x-pack/test/alerting_api_integration/spaces_only_legacy/tests/actions/connector_types/stack/webhook.ts b/x-pack/test/alerting_api_integration/spaces_only_legacy/tests/actions/connector_types/stack/webhook.ts
index d0865e5160fe5..b1d56f600585d 100644
--- a/x-pack/test/alerting_api_integration/spaces_only_legacy/tests/actions/connector_types/stack/webhook.ts
+++ b/x-pack/test/alerting_api_integration/spaces_only_legacy/tests/actions/connector_types/stack/webhook.ts
@@ -126,24 +126,6 @@ export default function webhookTest({ getService }: FtrProviderContext) {
});
describe('ssl customization', () => {
- it('should handle the xpack.actions.rejectUnauthorized: false', async () => {
- const connectorId = 'custom.ssl.noCustom';
- const port = await getPortOfConnector(connectorId);
- const server = await createTlsWebhookServer(port);
- const { status, body } = await supertest
- .post(`/api/actions/connector/${connectorId}/_execute`)
- .set('kbn-xsrf', 'test')
- .send({
- params: {
- body: 'foo',
- },
- });
- expect(status).to.eql(200);
- server.close();
-
- expect(body.status).to.eql('ok');
- });
-
it('should handle the customized rejectUnauthorized: false', async () => {
const connectorId = 'custom.ssl.rejectUnauthorizedFalse';
const port = await getPortOfConnector(connectorId);
From 2de0e05af2d73e6fb319479368e03f69658d1673 Mon Sep 17 00:00:00 2001
From: Jason Rhodes
Date: Mon, 4 Nov 2024 15:13:15 -0500
Subject: [PATCH 038/101] Update CODEOWNERS for @kbn/typed-react-router-config
(#198569)
Removes obs-ux-management and replaces with obx-ux-infra_services-team,
based on this count of imports for this package:
```
4 observability_ai_assistant_app
38 apm
1 ux
12 profiling
5 inventory
5 observability_ai_assistant_management
```
Got these stats with these two steps:
```sh
ag -Q "@kbn/typed-react-router-config" --ignore="*target*" --ignore="*tsconfig.json" -c ./x-pack/plugins | tee typed-react-router-config-USAGE.log
cat typed-react-router-config-USAGE.log | cut -d "/" -f 4-4 | uniq -c
```
---------
Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
Co-authored-by: Elastic Machine
---
.github/CODEOWNERS | 2 +-
packages/kbn-typed-react-router-config/kibana.jsonc | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 0498e01164700..523e860db1491 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -954,7 +954,7 @@ packages/kbn-triggers-actions-ui-types @elastic/response-ops
packages/kbn-try-in-console @elastic/search-kibana
packages/kbn-ts-projects @elastic/kibana-operations
packages/kbn-ts-type-check-cli @elastic/kibana-operations
-packages/kbn-typed-react-router-config @elastic/obs-knowledge-team @elastic/obs-ux-management-team
+packages/kbn-typed-react-router-config @elastic/obs-knowledge-team @elastic/obs-ux-infra_services-team
packages/kbn-ui-actions-browser @elastic/appex-sharedux
x-pack/examples/ui_actions_enhanced_examples @elastic/appex-sharedux
src/plugins/ui_actions_enhanced @elastic/appex-sharedux
diff --git a/packages/kbn-typed-react-router-config/kibana.jsonc b/packages/kbn-typed-react-router-config/kibana.jsonc
index 0462d28238890..c004d263a6046 100644
--- a/packages/kbn-typed-react-router-config/kibana.jsonc
+++ b/packages/kbn-typed-react-router-config/kibana.jsonc
@@ -1,5 +1,5 @@
{
"type": "shared-common",
"id": "@kbn/typed-react-router-config",
- "owner": ["@elastic/obs-knowledge-team", "@elastic/obs-ux-management-team"]
+ "owner": ["@elastic/obs-knowledge-team", "@elastic/obs-ux-infra_services-team"]
}
From 1a100a4f527a0384079c6d4fca876cc5d1e6bb83 Mon Sep 17 00:00:00 2001
From: Jon
Date: Mon, 4 Nov 2024 14:36:09 -0600
Subject: [PATCH 039/101] [ci] Remove local SSDs (#198618)
There doesn't appear to be much performance benefit from attaching SSDs
to these steps
https://buildkite.com/elastic/kibana-artifacts-snapshot/builds/4953
---
.buildkite/pipeline-utils/agent_images.ts | 2 +-
.buildkite/pipelines/artifacts.yml | 16 ----------------
.../pipelines/chrome_forward_testing.yml | 4 ----
.../verify_es_serverless_image.yml | 2 --
.buildkite/pipelines/on_merge.yml | 4 ----
.buildkite/pipelines/pointer_compression.yml | 4 ----
.../security_solution/cypress_burn.yml | 4 ----
.../security_solution/defend_workflows.yml | 4 ----
.../mki_periodic_defend_workflows.yml | 18 ------------------
.../mki_quality_gate_defend_workflows.yml | 2 --
10 files changed, 1 insertion(+), 59 deletions(-)
diff --git a/.buildkite/pipeline-utils/agent_images.ts b/.buildkite/pipeline-utils/agent_images.ts
index a87ea8dca6234..821a0a6b92ecf 100644
--- a/.buildkite/pipeline-utils/agent_images.ts
+++ b/.buildkite/pipeline-utils/agent_images.ts
@@ -58,7 +58,7 @@ const expandAgentQueue = (queueName: string = 'n2-4-spot') => {
const additionalProps =
{
spot: { preemptible: true },
- virt: { localSsdInterface: 'nvme', enableNestedVirtualization: true, localSsds: 1 },
+ virt: { enableNestedVirtualization: true },
}[addition] || {};
return {
diff --git a/.buildkite/pipelines/artifacts.yml b/.buildkite/pipelines/artifacts.yml
index b6f873ad2bd14..4765077287615 100644
--- a/.buildkite/pipelines/artifacts.yml
+++ b/.buildkite/pipelines/artifacts.yml
@@ -21,8 +21,6 @@ steps:
imageProject: elastic-images-prod
provider: gcp
enableNestedVirtualization: true
- localSsds: 1
- localSsdInterface: nvme
machineType: n2-standard-4
timeout_in_minutes: 30
retry:
@@ -37,8 +35,6 @@ steps:
imageProject: elastic-images-prod
provider: gcp
enableNestedVirtualization: true
- localSsds: 1
- localSsdInterface: nvme
machineType: n2-standard-4
timeout_in_minutes: 30
retry:
@@ -53,8 +49,6 @@ steps:
imageProject: elastic-images-prod
provider: gcp
enableNestedVirtualization: true
- localSsds: 1
- localSsdInterface: nvme
machineType: n2-standard-4
timeout_in_minutes: 30
retry:
@@ -68,8 +62,6 @@ steps:
image: family/kibana-ubuntu-2004
imageProject: elastic-images-prod
provider: gcp
- localSsds: 1
- localSsdInterface: nvme
machineType: n2-standard-2
timeout_in_minutes: 30
retry:
@@ -83,8 +75,6 @@ steps:
image: family/kibana-ubuntu-2004
imageProject: elastic-images-prod
provider: gcp
- localSsds: 1
- localSsdInterface: nvme
machineType: n2-standard-2
timeout_in_minutes: 30
retry:
@@ -111,8 +101,6 @@ steps:
image: family/kibana-ubuntu-2004
imageProject: elastic-images-prod
provider: gcp
- localSsds: 1
- localSsdInterface: nvme
machineType: n2-standard-2
timeout_in_minutes: 30
retry:
@@ -129,8 +117,6 @@ steps:
image: family/kibana-ubuntu-2004
imageProject: elastic-images-prod
provider: gcp
- localSsds: 1
- localSsdInterface: nvme
machineType: n2-standard-2
timeout_in_minutes: 60
if: "build.env('RELEASE_BUILD') == null || build.env('RELEASE_BUILD') == '' || build.env('RELEASE_BUILD') == 'false'"
@@ -156,7 +142,5 @@ steps:
image: family/kibana-ubuntu-2004
imageProject: elastic-images-prod
provider: gcp
- localSsds: 1
- localSsdInterface: nvme
machineType: n2-standard-2
timeout_in_minutes: 30
diff --git a/.buildkite/pipelines/chrome_forward_testing.yml b/.buildkite/pipelines/chrome_forward_testing.yml
index daf928cf2c162..eb80625a73d77 100644
--- a/.buildkite/pipelines/chrome_forward_testing.yml
+++ b/.buildkite/pipelines/chrome_forward_testing.yml
@@ -317,8 +317,6 @@ steps:
label: 'Defend Workflows Cypress Tests'
agents:
enableNestedVirtualization: true
- localSsds: 1
- localSsdInterface: nvme
machineType: n2-standard-4
depends_on:
- build
@@ -333,8 +331,6 @@ steps:
label: 'Defend Workflows Cypress Tests on Serverless'
agents:
enableNestedVirtualization: true
- localSsds: 1
- localSsdInterface: nvme
machineType: n2-standard-4
depends_on:
- build
diff --git a/.buildkite/pipelines/es_serverless/verify_es_serverless_image.yml b/.buildkite/pipelines/es_serverless/verify_es_serverless_image.yml
index 6b72b5af240d2..fa8162ca93c0e 100644
--- a/.buildkite/pipelines/es_serverless/verify_es_serverless_image.yml
+++ b/.buildkite/pipelines/es_serverless/verify_es_serverless_image.yml
@@ -206,8 +206,6 @@ steps:
imageProject: elastic-images-prod
provider: gcp
enableNestedVirtualization: true
- localSsds: 1
- localSsdInterface: nvme
machineType: n2-standard-4
depends_on: build
timeout_in_minutes: 60
diff --git a/.buildkite/pipelines/on_merge.yml b/.buildkite/pipelines/on_merge.yml
index d5ffcf7067c36..65c7f0095f063 100644
--- a/.buildkite/pipelines/on_merge.yml
+++ b/.buildkite/pipelines/on_merge.yml
@@ -446,8 +446,6 @@ steps:
imageProject: elastic-images-prod
provider: gcp
enableNestedVirtualization: true
- localSsds: 1
- localSsdInterface: nvme
machineType: n2-standard-4
timeout_in_minutes: 60
parallelism: 20
@@ -463,8 +461,6 @@ steps:
imageProject: elastic-images-prod
provider: gcp
enableNestedVirtualization: true
- localSsds: 1
- localSsdInterface: nvme
machineType: n2-standard-4
timeout_in_minutes: 60
parallelism: 14
diff --git a/.buildkite/pipelines/pointer_compression.yml b/.buildkite/pipelines/pointer_compression.yml
index 41598b3faed1f..29f0b75ca4184 100644
--- a/.buildkite/pipelines/pointer_compression.yml
+++ b/.buildkite/pipelines/pointer_compression.yml
@@ -362,8 +362,6 @@ steps:
imageProject: elastic-images-prod
provider: gcp
enableNestedVirtualization: true
- localSsds: 1
- localSsdInterface: nvme
machineType: n2-standard-4
depends_on:
- build
@@ -381,8 +379,6 @@ steps:
imageProject: elastic-images-prod
provider: gcp
enableNestedVirtualization: true
- localSsds: 1
- localSsdInterface: nvme
machineType: n2-standard-4
depends_on:
- build
diff --git a/.buildkite/pipelines/pull_request/security_solution/cypress_burn.yml b/.buildkite/pipelines/pull_request/security_solution/cypress_burn.yml
index 90c20eaca256f..8b2e8e3d09f0d 100644
--- a/.buildkite/pipelines/pull_request/security_solution/cypress_burn.yml
+++ b/.buildkite/pipelines/pull_request/security_solution/cypress_burn.yml
@@ -3,8 +3,6 @@ steps:
label: '[Soft fail] Defend Workflows Cypress Tests, burning changed specs'
agents:
enableNestedVirtualization: true
- localSsds: 1
- localSsdInterface: nvme
machineType: n2-standard-4
depends_on:
- build
@@ -24,8 +22,6 @@ steps:
label: '[Soft fail] Defend Workflows Cypress Tests on Serverless, burning changed specs'
agents:
enableNestedVirtualization: true
- localSsds: 1
- localSsdInterface: nvme
machineType: n2-standard-4
depends_on:
- build
diff --git a/.buildkite/pipelines/pull_request/security_solution/defend_workflows.yml b/.buildkite/pipelines/pull_request/security_solution/defend_workflows.yml
index 0692c26f57176..7cffb9017b527 100644
--- a/.buildkite/pipelines/pull_request/security_solution/defend_workflows.yml
+++ b/.buildkite/pipelines/pull_request/security_solution/defend_workflows.yml
@@ -3,8 +3,6 @@ steps:
label: 'Defend Workflows Cypress Tests'
agents:
enableNestedVirtualization: true
- localSsds: 1
- localSsdInterface: nvme
machineType: n2-standard-4
depends_on:
- build
@@ -25,8 +23,6 @@ steps:
label: 'Defend Workflows Cypress Tests on Serverless'
agents:
enableNestedVirtualization: true
- localSsds: 1
- localSsdInterface: nvme
machineType: n2-standard-4
depends_on:
- build
diff --git a/.buildkite/pipelines/security_solution_quality_gate/mki_periodic/mki_periodic_defend_workflows.yml b/.buildkite/pipelines/security_solution_quality_gate/mki_periodic/mki_periodic_defend_workflows.yml
index 5795c8f61f30f..5106d619f95e5 100644
--- a/.buildkite/pipelines/security_solution_quality_gate/mki_periodic/mki_periodic_defend_workflows.yml
+++ b/.buildkite/pipelines/security_solution_quality_gate/mki_periodic/mki_periodic_defend_workflows.yml
@@ -10,8 +10,6 @@ steps:
imageProject: elastic-images-prod
provider: gcp
enableNestedVirtualization: true
- localSsds: 1
- localSsdInterface: nvme
machineType: n2-standard-4
preemptible: true
timeout_in_minutes: 300
@@ -32,8 +30,6 @@ steps:
# imageProject: elastic-images-prod
# provider: gcp
# enableNestedVirtualization: true
-# localSsds: 1
-# localSsdInterface: nvme
# machineType: n2-standard-4
# timeout_in_minutes: 120
# retry:
@@ -49,8 +45,6 @@ steps:
# imageProject: elastic-images-prod
# provider: gcp
# enableNestedVirtualization: true
-# localSsds: 1
-# localSsdInterface: nvme
# machineType: n2-standard-4
# timeout_in_minutes: 120
# retry:
@@ -66,8 +60,6 @@ steps:
# imageProject: elastic-images-prod
# provider: gcp
# enableNestedVirtualization: true
-# localSsds: 1
-# localSsdInterface: nvme
# machineType: n2-standard-4
# timeout_in_minutes: 120
# retry:
@@ -83,8 +75,6 @@ steps:
# imageProject: elastic-images-prod
# provider: gcp
# enableNestedVirtualization: true
-# localSsds: 1
-# localSsdInterface: nvme
# machineType: n2-standard-4
# timeout_in_minutes: 120
# retry:
@@ -100,8 +90,6 @@ steps:
imageProject: elastic-images-prod
provider: gcp
enableNestedVirtualization: true
- localSsds: 1
- localSsdInterface: nvme
machineType: n2-standard-4
preemptible: true
timeout_in_minutes: 120
@@ -118,8 +106,6 @@ steps:
imageProject: elastic-images-prod
provider: gcp
enableNestedVirtualization: true
- localSsds: 1
- localSsdInterface: nvme
machineType: n2-standard-4
preemptible: true
timeout_in_minutes: 120
@@ -136,8 +122,6 @@ steps:
imageProject: elastic-images-prod
provider: gcp
enableNestedVirtualization: true
- localSsds: 1
- localSsdInterface: nvme
machineType: n2-standard-4
preemptible: true
timeout_in_minutes: 120
@@ -157,8 +141,6 @@ steps:
imageProject: elastic-images-prod
provider: gcp
enableNestedVirtualization: true
- localSsds: 1
- localSsdInterface: nvme
machineType: n2-standard-4
preemptible: true
timeout_in_minutes: 300
diff --git a/.buildkite/pipelines/security_solution_quality_gate/mki_quality_gate/mki_quality_gate_defend_workflows.yml b/.buildkite/pipelines/security_solution_quality_gate/mki_quality_gate/mki_quality_gate_defend_workflows.yml
index e59ca507e4003..3d30e78583409 100644
--- a/.buildkite/pipelines/security_solution_quality_gate/mki_quality_gate/mki_quality_gate_defend_workflows.yml
+++ b/.buildkite/pipelines/security_solution_quality_gate/mki_quality_gate/mki_quality_gate_defend_workflows.yml
@@ -7,8 +7,6 @@ steps:
imageProject: elastic-images-prod
provider: gcp
enableNestedVirtualization: true
- localSsds: 1
- localSsdInterface: nvme
machineType: n2-standard-4
timeout_in_minutes: 300
parallelism: 1
From 0aec5a82dbf0e27d1ca7d416e54e028e629f3a1c Mon Sep 17 00:00:00 2001
From: Philippe Oberti
Date: Mon, 4 Nov 2024 15:02:07 -0600
Subject: [PATCH 040/101] [Security Solution][Alert Details] - remove flyout
tour introduced in 8.14 (#198708)
## Summary
We [added](https://github.com/elastic/kibana/pull/180318) a guided tour
to the expandable flyout back in `8.14`. It is time to remove it as
enough users have seen it.
No UI changes other than the tour not showing up.
### How to test
- clear local storage (more specifically remove the
`securitySolution.documentDetails.newFeaturesTour.v8.14` key
- open a alert or event details flyout and verify that the tour does not
show up
### 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
Should help solve https://github.com/elastic/kibana/issues/197492
---
x-pack/plugins/fleet/cypress/tasks/common.ts | 1 -
.../osquery/cypress/tasks/navigation.ts | 2 -
.../security_solution/common/constants.ts | 1 -
.../left/components/tour.test.tsx | 122 -----------
.../document_details/left/components/tour.tsx | 32 ---
.../flyout/document_details/left/index.tsx | 2 -
.../left/tabs/insights_tab.tsx | 22 +-
.../document_details/left/tabs/test_ids.ts | 4 -
.../right/components/tour.test.tsx | 125 -----------
.../right/components/tour.tsx | 90 --------
.../flyout/document_details/right/index.tsx | 2 -
.../flyout/document_details/right/tabs.tsx | 17 +-
.../flyout/document_details/right/test_ids.ts | 1 -
.../shared/components/flyout_tour.test.tsx | 117 ----------
.../shared/components/flyout_tour.tsx | 160 --------------
.../shared/components/test_ids.ts | 1 -
.../shared/utils/tour_step_config.tsx | 199 ------------------
.../shared/components/flyout_navigation.tsx | 3 +-
.../flyout/shared/components/test_ids.ts | 1 -
.../translations/translations/fr-FR.json | 19 --
.../translations/translations/ja-JP.json | 19 --
.../translations/translations/zh-CN.json | 20 --
22 files changed, 14 insertions(+), 946 deletions(-)
delete mode 100644 x-pack/plugins/security_solution/public/flyout/document_details/left/components/tour.test.tsx
delete mode 100644 x-pack/plugins/security_solution/public/flyout/document_details/left/components/tour.tsx
delete mode 100644 x-pack/plugins/security_solution/public/flyout/document_details/right/components/tour.test.tsx
delete mode 100644 x-pack/plugins/security_solution/public/flyout/document_details/right/components/tour.tsx
delete mode 100644 x-pack/plugins/security_solution/public/flyout/document_details/shared/components/flyout_tour.test.tsx
delete mode 100644 x-pack/plugins/security_solution/public/flyout/document_details/shared/components/flyout_tour.tsx
delete mode 100644 x-pack/plugins/security_solution/public/flyout/document_details/shared/utils/tour_step_config.tsx
diff --git a/x-pack/plugins/fleet/cypress/tasks/common.ts b/x-pack/plugins/fleet/cypress/tasks/common.ts
index cf161640bf03f..2bf201b11a498 100644
--- a/x-pack/plugins/fleet/cypress/tasks/common.ts
+++ b/x-pack/plugins/fleet/cypress/tasks/common.ts
@@ -67,7 +67,6 @@ export const internalRequest = ({
const NEW_FEATURES_TOUR_STORAGE_KEYS = {
RULE_MANAGEMENT_PAGE: 'securitySolution.rulesManagementPage.newFeaturesTour.v8.9',
TIMELINES: 'securitySolution.security.timelineFlyoutHeader.saveTimelineTour',
- FLYOUT: 'securitySolution.documentDetails.newFeaturesTour.v8.14',
};
const disableNewFeaturesTours = (window: Window) => {
diff --git a/x-pack/plugins/osquery/cypress/tasks/navigation.ts b/x-pack/plugins/osquery/cypress/tasks/navigation.ts
index 72107207d7a8c..a0747706ffc15 100644
--- a/x-pack/plugins/osquery/cypress/tasks/navigation.ts
+++ b/x-pack/plugins/osquery/cypress/tasks/navigation.ts
@@ -45,8 +45,6 @@ export enum NAV_SEARCH_INPUT_OSQUERY_RESULTS {
export const NEW_FEATURES_TOUR_STORAGE_KEYS = {
RULE_MANAGEMENT_PAGE: 'securitySolution.rulesManagementPage.newFeaturesTour.v8.13',
TIMELINES: 'securitySolution.security.timelineFlyoutHeader.saveTimelineTour',
- TIMELINE: 'securitySolution.timeline.newFeaturesTour.v8.12',
- FLYOUT: 'securitySolution.documentDetails.newFeaturesTour.v8.14',
KNOWLEDGE_BASE: 'elasticAssistant.knowledgeBase.newFeaturesTour.v8.16',
};
diff --git a/x-pack/plugins/security_solution/common/constants.ts b/x-pack/plugins/security_solution/common/constants.ts
index 68aaf7bf9cf04..137afe7ba9112 100644
--- a/x-pack/plugins/security_solution/common/constants.ts
+++ b/x-pack/plugins/security_solution/common/constants.ts
@@ -424,7 +424,6 @@ export const RULES_TABLE_MAX_PAGE_SIZE = 100;
export const NEW_FEATURES_TOUR_STORAGE_KEYS = {
RULE_MANAGEMENT_PAGE: 'securitySolution.rulesManagementPage.newFeaturesTour.v8.13',
TIMELINES: 'securitySolution.security.timelineFlyoutHeader.saveTimelineTour',
- FLYOUT: 'securitySolution.documentDetails.newFeaturesTour.v8.14',
};
export const RULE_DETAILS_EXECUTION_LOG_TABLE_SHOW_METRIC_COLUMNS_STORAGE_KEY =
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/tour.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/tour.test.tsx
deleted file mode 100644
index bb288b5c7afaa..0000000000000
--- a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/tour.test.tsx
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
- * or more contributor license agreements. Licensed under the Elastic License
- * 2.0; you may not use this file except in compliance with the Elastic License
- * 2.0.
- */
-
-import React from 'react';
-import { render, waitFor, fireEvent } from '@testing-library/react';
-import { LeftPanelTour } from './tour';
-import { DocumentDetailsContext } from '../../shared/context';
-import { mockContextValue } from '../../shared/mocks/mock_context';
-import {
- createMockStore,
- createSecuritySolutionStorageMock,
- TestProviders,
-} from '../../../../common/mock';
-import { useKibana as mockUseKibana } from '../../../../common/lib/kibana/__mocks__';
-import { useKibana } from '../../../../common/lib/kibana';
-import { FLYOUT_TOUR_CONFIG_ANCHORS } from '../../shared/utils/tour_step_config';
-import { FLYOUT_TOUR_TEST_ID } from '../../shared/components/test_ids';
-import { useWhichFlyout } from '../../shared/hooks/use_which_flyout';
-import { Flyouts } from '../../shared/constants/flyouts';
-
-jest.mock('../../../../common/lib/kibana');
-jest.mock('../../shared/hooks/use_which_flyout');
-
-const mockedUseKibana = mockUseKibana();
-
-const { storage: storageMock } = createSecuritySolutionStorageMock();
-const mockStore = createMockStore(undefined, undefined, undefined, {
- ...storageMock,
-});
-
-const renderLeftPanelTour = (context: DocumentDetailsContext = mockContextValue) =>
- render(
-
-
-
- {Object.values(FLYOUT_TOUR_CONFIG_ANCHORS).map((i, idx) => (
-
- ))}
-
-
- );
-
-describe(' ', () => {
- beforeEach(() => {
- (useKibana as jest.Mock).mockReturnValue({
- ...mockedUseKibana,
- services: {
- ...mockedUseKibana.services,
- storage: storageMock,
- },
- });
- (useWhichFlyout as jest.Mock).mockReturnValue(Flyouts.securitySolution);
-
- storageMock.clear();
- });
-
- it('should render left panel tour for alerts starting as step 4', async () => {
- storageMock.set('securitySolution.documentDetails.newFeaturesTour.v8.14', {
- currentTourStep: 4,
- isTourActive: true,
- });
-
- const { getByText, getByTestId } = renderLeftPanelTour();
- await waitFor(() => {
- expect(getByTestId(`${FLYOUT_TOUR_TEST_ID}-4`)).toBeVisible();
- });
- fireEvent.click(getByText('Next'));
- await waitFor(() => {
- expect(getByTestId(`${FLYOUT_TOUR_TEST_ID}-5`)).toBeVisible();
- });
- await waitFor(() => {
- expect(getByText('Finish')).toBeVisible();
- });
- });
-
- it('should not render left panel tour for preview', () => {
- storageMock.set('securitySolution.documentDetails.newFeaturesTour.v8.14', {
- currentTourStep: 3,
- isTourActive: true,
- });
-
- const { queryByTestId, queryByText } = renderLeftPanelTour({
- ...mockContextValue,
- isPreview: true,
- });
- expect(queryByTestId(`${FLYOUT_TOUR_TEST_ID}-4`)).not.toBeInTheDocument();
- expect(queryByText('Next')).not.toBeInTheDocument();
- });
-
- it('should not render left panel tour for non-alerts', async () => {
- storageMock.set('securitySolution.documentDetails.newFeaturesTour.v8.14', {
- currentTourStep: 3,
- isTourActive: true,
- });
-
- const { queryByTestId, queryByText } = renderLeftPanelTour({
- ...mockContextValue,
- getFieldsData: () => '',
- });
- expect(queryByTestId(`${FLYOUT_TOUR_TEST_ID}-4`)).not.toBeInTheDocument();
- expect(queryByText('Next')).not.toBeInTheDocument();
- });
-
- it('should not render left panel tour for flyout in timeline', () => {
- (useWhichFlyout as jest.Mock).mockReturnValue(Flyouts.timeline);
- storageMock.set('securitySolution.documentDetails.newFeaturesTour.v8.14', {
- currentTourStep: 3,
- isTourActive: true,
- });
-
- const { queryByTestId, queryByText } = renderLeftPanelTour({
- ...mockContextValue,
- isPreview: true,
- });
- expect(queryByTestId(`${FLYOUT_TOUR_TEST_ID}-4`)).not.toBeInTheDocument();
- expect(queryByText('Next')).not.toBeInTheDocument();
- });
-});
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/tour.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/tour.tsx
deleted file mode 100644
index 196d9113457a3..0000000000000
--- a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/tour.tsx
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
- * or more contributor license agreements. Licensed under the Elastic License
- * 2.0; you may not use this file except in compliance with the Elastic License
- * 2.0.
- */
-
-import React, { memo, useMemo } from 'react';
-import { useWhichFlyout } from '../../shared/hooks/use_which_flyout';
-import { getField } from '../../shared/utils';
-import { EventKind } from '../../shared/constants/event_kinds';
-import { useDocumentDetailsContext } from '../../shared/context';
-import { getLeftSectionTourSteps } from '../../shared/utils/tour_step_config';
-import { Flyouts } from '../../shared/constants/flyouts';
-import { FlyoutTour } from '../../shared/components/flyout_tour';
-
-/**
- * Guided tour for the left panel in details flyout
- */
-export const LeftPanelTour = memo(() => {
- const { getFieldsData, isPreview } = useDocumentDetailsContext();
- const eventKind = getField(getFieldsData('event.kind'));
- const isAlert = eventKind === EventKind.signal;
- const isTimelineFlyoutOpen = useWhichFlyout() === Flyouts.timeline;
- const showTour = isAlert && !isPreview && !isTimelineFlyoutOpen;
-
- const tourStepContent = useMemo(() => getLeftSectionTourSteps(), []);
-
- return showTour ? : null;
-});
-
-LeftPanelTour.displayName = 'LeftPanelTour';
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/left/index.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/index.tsx
index 32b0b10d61ffd..56375426c5f68 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/left/index.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/index.tsx
@@ -22,7 +22,6 @@ import { getField } from '../shared/utils';
import { EventKind } from '../shared/constants/event_kinds';
import { useDocumentDetailsContext } from '../shared/context';
import type { DocumentDetailsProps } from '../shared/types';
-import { LeftPanelTour } from './components/tour';
export type LeftPanelPaths = 'visualize' | 'insights' | 'investigation' | 'response' | 'notes';
export const LeftPanelVisualizeTab: LeftPanelPaths = 'visualize';
@@ -85,7 +84,6 @@ export const LeftPanel: FC> = memo(({ path }) => {
return (
<>
-
-
-
+
),
'data-test-subj': INSIGHTS_TAB_ENTITIES_BUTTON_TEST_ID,
},
@@ -62,12 +58,10 @@ const insightsButtons: EuiButtonGroupOptionProps[] = [
{
id: PREVALENCE_TAB_ID,
label: (
-
-
-
+
),
'data-test-subj': INSIGHTS_TAB_PREVALENCE_BUTTON_TEST_ID,
},
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/left/tabs/test_ids.ts b/x-pack/plugins/security_solution/public/flyout/document_details/left/tabs/test_ids.ts
index 1e99fb63d18a5..eb64c91b2143d 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/left/tabs/test_ids.ts
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/tabs/test_ids.ts
@@ -17,12 +17,8 @@ const INSIGHTS_TAB_TEST_ID = `${PREFIX}InsightsTab` as const;
export const INSIGHTS_TAB_BUTTON_GROUP_TEST_ID = `${INSIGHTS_TAB_TEST_ID}ButtonGroup` as const;
export const INSIGHTS_TAB_ENTITIES_BUTTON_TEST_ID =
`${INSIGHTS_TAB_TEST_ID}EntitiesButton` as const;
-export const INSIGHTS_TAB_ENTITIES_BUTTON_LABEL_TEST_ID =
- `${INSIGHTS_TAB_TEST_ID}Entities` as const;
export const INSIGHTS_TAB_THREAT_INTELLIGENCE_BUTTON_TEST_ID =
`${INSIGHTS_TAB_TEST_ID}ThreatIntelligenceButton` as const;
-export const INSIGHTS_TAB_PREVALENCE_BUTTON_LABEL_TEST_ID =
- `${INSIGHTS_TAB_TEST_ID}Prevalence` as const;
export const INSIGHTS_TAB_PREVALENCE_BUTTON_TEST_ID =
`${INSIGHTS_TAB_TEST_ID}PrevalenceButton` as const;
export const INSIGHTS_TAB_CORRELATIONS_BUTTON_TEST_ID =
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/right/components/tour.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/tour.test.tsx
deleted file mode 100644
index 20540184156b9..0000000000000
--- a/x-pack/plugins/security_solution/public/flyout/document_details/right/components/tour.test.tsx
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
- * or more contributor license agreements. Licensed under the Elastic License
- * 2.0; you may not use this file except in compliance with the Elastic License
- * 2.0.
- */
-
-import React from 'react';
-import { render, waitFor, fireEvent } from '@testing-library/react';
-import { RightPanelTour } from './tour';
-import { DocumentDetailsContext } from '../../shared/context';
-import { mockContextValue } from '../../shared/mocks/mock_context';
-import {
- createMockStore,
- createSecuritySolutionStorageMock,
- TestProviders,
-} from '../../../../common/mock';
-import { useKibana as mockUseKibana } from '../../../../common/lib/kibana/__mocks__';
-import { useKibana } from '../../../../common/lib/kibana';
-import { FLYOUT_TOUR_CONFIG_ANCHORS } from '../../shared/utils/tour_step_config';
-import { FLYOUT_TOUR_TEST_ID } from '../../shared/components/test_ids';
-import { useTourContext } from '../../../../common/components/guided_onboarding_tour/tour';
-import { casesPluginMock } from '@kbn/cases-plugin/public/mocks';
-import { useWhichFlyout } from '../../shared/hooks/use_which_flyout';
-import { Flyouts } from '../../shared/constants/flyouts';
-
-jest.mock('../../../../common/lib/kibana');
-jest.mock('../../shared/hooks/use_which_flyout');
-jest.mock('../../../../common/components/guided_onboarding_tour/tour');
-
-const mockedUseKibana = mockUseKibana();
-
-const { storage: storageMock } = createSecuritySolutionStorageMock();
-const mockStore = createMockStore(undefined, undefined, undefined, {
- ...storageMock,
-});
-const mockCasesContract = casesPluginMock.createStartContract();
-const mockUseIsAddToCaseOpen = mockCasesContract.hooks.useIsAddToCaseOpen as jest.Mock;
-mockUseIsAddToCaseOpen.mockReturnValue(false);
-
-const renderRightPanelTour = (context: DocumentDetailsContext = mockContextValue) =>
- render(
-
-
-
- {Object.values(FLYOUT_TOUR_CONFIG_ANCHORS).map((i, idx) => (
-
- ))}
-
-
- );
-
-describe(' ', () => {
- beforeEach(() => {
- (useKibana as jest.Mock).mockReturnValue({
- ...mockedUseKibana,
- services: {
- ...mockedUseKibana.services,
- storage: storageMock,
- cases: mockCasesContract,
- },
- });
- (useWhichFlyout as jest.Mock).mockReturnValue(Flyouts.securitySolution);
- (useTourContext as jest.Mock).mockReturnValue({ isTourShown: jest.fn(() => false) });
- storageMock.clear();
- });
-
- it('should render tour for alerts', async () => {
- const { getByText, getByTestId } = renderRightPanelTour();
- await waitFor(() => {
- expect(getByTestId(`${FLYOUT_TOUR_TEST_ID}-1`)).toBeVisible();
- });
- fireEvent.click(getByText('Next'));
- await waitFor(() => {
- expect(getByTestId(`${FLYOUT_TOUR_TEST_ID}-2`)).toBeVisible();
- });
- fireEvent.click(getByText('Next'));
- await waitFor(() => {
- expect(getByTestId(`${FLYOUT_TOUR_TEST_ID}-3`)).toBeVisible();
- });
- fireEvent.click(getByText('Next'));
- });
-
- it('should not render tour for preview', () => {
- const { queryByTestId, queryByText } = renderRightPanelTour({
- ...mockContextValue,
- isPreview: true,
- });
- expect(queryByTestId(`${FLYOUT_TOUR_TEST_ID}-1`)).not.toBeInTheDocument();
- expect(queryByText('Next')).not.toBeInTheDocument();
- });
-
- it('should not render tour when guided onboarding tour is active', () => {
- (useTourContext as jest.Mock).mockReturnValue({ isTourShown: jest.fn(() => true) });
- const { queryByText, queryByTestId } = renderRightPanelTour({
- ...mockContextValue,
- getFieldsData: () => '',
- });
-
- expect(queryByTestId(`${FLYOUT_TOUR_TEST_ID}-1`)).not.toBeInTheDocument();
- expect(queryByText('Next')).not.toBeInTheDocument();
- });
-
- it('should not render tour when case modal is open', () => {
- mockUseIsAddToCaseOpen.mockReturnValue(true);
- const { queryByText, queryByTestId } = renderRightPanelTour({
- ...mockContextValue,
- getFieldsData: () => '',
- });
-
- expect(queryByTestId(`${FLYOUT_TOUR_TEST_ID}-1`)).not.toBeInTheDocument();
- expect(queryByText('Next')).not.toBeInTheDocument();
- });
-
- it('should not render tour for flyout in timeline', () => {
- (useWhichFlyout as jest.Mock).mockReturnValue(Flyouts.timeline);
- const { queryByText, queryByTestId } = renderRightPanelTour({
- ...mockContextValue,
- getFieldsData: () => '',
- });
-
- expect(queryByTestId(`${FLYOUT_TOUR_TEST_ID}-1`)).not.toBeInTheDocument();
- expect(queryByText('Next')).not.toBeInTheDocument();
- });
-});
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/right/components/tour.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/tour.tsx
deleted file mode 100644
index 839b77766886a..0000000000000
--- a/x-pack/plugins/security_solution/public/flyout/document_details/right/components/tour.tsx
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
- * or more contributor license agreements. Licensed under the Elastic License
- * 2.0; you may not use this file except in compliance with the Elastic License
- * 2.0.
- */
-
-import React, { memo, useMemo, useCallback } from 'react';
-import { useExpandableFlyoutApi } from '@kbn/expandable-flyout';
-import { useWhichFlyout } from '../../shared/hooks/use_which_flyout';
-import { Flyouts } from '../../shared/constants/flyouts';
-import { useDocumentDetailsContext } from '../../shared/context';
-import {
- getRightSectionTourSteps,
- getLeftSectionTourSteps,
-} from '../../shared/utils/tour_step_config';
-import { getField } from '../../shared/utils';
-import {
- DocumentDetailsLeftPanelKey,
- DocumentDetailsRightPanelKey,
-} from '../../shared/constants/panel_keys';
-import { EventKind } from '../../shared/constants/event_kinds';
-import { useTourContext } from '../../../../common/components/guided_onboarding_tour/tour';
-import { SecurityStepId } from '../../../../common/components/guided_onboarding_tour/tour_config';
-import { useKibana } from '../../../../common/lib/kibana';
-import { FlyoutTour } from '../../shared/components/flyout_tour';
-
-/**
- * Guided tour for the right panel in details flyout
- */
-export const RightPanelTour = memo(() => {
- const { useIsAddToCaseOpen } = useKibana().services.cases.hooks;
-
- const casesFlyoutExpanded = useIsAddToCaseOpen();
-
- const { isTourShown: isGuidedOnboardingTourShown } = useTourContext();
-
- const { openLeftPanel, openRightPanel } = useExpandableFlyoutApi();
- const { eventId, indexName, scopeId, isPreview, getFieldsData } = useDocumentDetailsContext();
-
- const eventKind = getField(getFieldsData('event.kind'));
- const isAlert = eventKind === EventKind.signal;
- const isTimelineFlyoutOpen = useWhichFlyout() === Flyouts.timeline;
- const showTour =
- isAlert &&
- !isPreview &&
- !isTimelineFlyoutOpen &&
- !isGuidedOnboardingTourShown(SecurityStepId.alertsCases) &&
- !casesFlyoutExpanded;
-
- const goToLeftPanel = useCallback(() => {
- openLeftPanel({
- id: DocumentDetailsLeftPanelKey,
- params: {
- id: eventId,
- indexName,
- scopeId,
- },
- });
- }, [eventId, indexName, scopeId, openLeftPanel]);
-
- const goToOverviewTab = useCallback(() => {
- openRightPanel({
- id: DocumentDetailsRightPanelKey,
- path: { tab: 'overview' },
- params: {
- id: eventId,
- indexName,
- scopeId,
- },
- });
- }, [eventId, indexName, scopeId, openRightPanel]);
-
- const tourStepContent = useMemo(
- // we append the left tour steps here to support the scenarios where the flyout left section is already expanded when starting the tour
- () => [...getRightSectionTourSteps(), ...getLeftSectionTourSteps()],
- []
- );
-
- return showTour ? (
-
- ) : null;
-});
-
-RightPanelTour.displayName = 'RightPanelTour';
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/right/index.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/index.tsx
index 1f9006b8d04a8..56c24d9562091 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/right/index.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/index.tsx
@@ -17,7 +17,6 @@ import type { DocumentDetailsProps } from '../shared/types';
import { PanelNavigation } from './navigation';
import { PanelHeader } from './header';
import { PanelContent } from './content';
-import { RightPanelTour } from './components/tour';
import type { RightPanelTabType } from './tabs';
import { PanelFooter } from './footer';
import { useFlyoutIsExpandable } from './hooks/use_flyout_is_expandable';
@@ -76,7 +75,6 @@ export const RightPanel: FC> = memo(({ path }) =>
return (
<>
- {flyoutIsExpandable && }
-
-
+
),
content: ,
};
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/right/test_ids.ts b/x-pack/plugins/security_solution/public/flyout/document_details/right/test_ids.ts
index 54199abf55de8..89a71e5fd17ba 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/right/test_ids.ts
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/test_ids.ts
@@ -12,6 +12,5 @@ export const FLYOUT_FOOTER_TEST_ID = `${PREFIX}Footer` as const;
export const FLYOUT_FOOTER_DEOPDOEN_BUTTON_TEST_ID =
`${FLYOUT_FOOTER_TEST_ID}DropdownButton` as const;
export const OVERVIEW_TAB_TEST_ID = `${PREFIX}OverviewTab` as const;
-export const OVERVIEW_TAB_LABEL_TEST_ID = `${PREFIX}OverviewTabLabel` as const;
export const TABLE_TAB_TEST_ID = `${PREFIX}TableTab` as const;
export const JSON_TAB_TEST_ID = `${PREFIX}JsonTab` as const;
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/shared/components/flyout_tour.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/shared/components/flyout_tour.test.tsx
deleted file mode 100644
index 246bd6a8940c9..0000000000000
--- a/x-pack/plugins/security_solution/public/flyout/document_details/shared/components/flyout_tour.test.tsx
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
- * or more contributor license agreements. Licensed under the Elastic License
- * 2.0; you may not use this file except in compliance with the Elastic License
- * 2.0.
- */
-
-import React from 'react';
-import { type FlyoutTourProps, FlyoutTour } from './flyout_tour';
-import { render, waitFor, fireEvent } from '@testing-library/react';
-import {
- createMockStore,
- createSecuritySolutionStorageMock,
- TestProviders,
-} from '../../../../common/mock';
-import { useKibana as mockUseKibana } from '../../../../common/lib/kibana/__mocks__';
-import { useKibana } from '../../../../common/lib/kibana';
-import { FLYOUT_TOUR_TEST_ID } from './test_ids';
-
-jest.mock('../../../../common/lib/kibana');
-
-const mockedUseKibana = mockUseKibana();
-
-const { storage: storageMock } = createSecuritySolutionStorageMock();
-const mockStore = createMockStore(undefined, undefined, undefined, storageMock);
-
-const content = [1, 2, 3, 4].map((i) => ({
- title: `step${i}`,
- content: {`step${i}`}
,
- stepNumber: i,
- anchor: `step${i}`,
-}));
-
-const tourProps = {
- tourStepContent: content,
- totalSteps: 4,
-};
-const goToLeftPanel = jest.fn();
-const goToOverviewTab = jest.fn();
-
-const renderTour = (props: FlyoutTourProps) =>
- render(
-
-
-
-
-
-
-
- );
-
-describe('Flyout Tour', () => {
- beforeEach(() => {
- (useKibana as jest.Mock).mockReturnValue({
- ...mockedUseKibana,
- services: {
- ...mockedUseKibana.services,
- storage: storageMock,
- },
- });
-
- storageMock.clear();
- });
-
- it('should render tour steps', async () => {
- const wrapper = renderTour(tourProps);
-
- await waitFor(() => {
- expect(wrapper.getByTestId(`${FLYOUT_TOUR_TEST_ID}-1`)).toBeVisible();
- });
- fireEvent.click(wrapper.getByText('Next'));
- await waitFor(() => {
- expect(wrapper.getByTestId(`${FLYOUT_TOUR_TEST_ID}-2`)).toBeVisible();
- });
- fireEvent.click(wrapper.getByText('Next'));
- await waitFor(() => {
- expect(wrapper.getByTestId(`${FLYOUT_TOUR_TEST_ID}-3`)).toBeVisible();
- });
- fireEvent.click(wrapper.getByText('Next'));
- await waitFor(() => {
- expect(wrapper.getByTestId(`${FLYOUT_TOUR_TEST_ID}-4`)).toBeVisible();
- });
- await waitFor(() => {
- expect(wrapper.getByText('Finish')).toBeVisible();
- });
- });
-
- it('should call goToOverview at step 1', () => {
- renderTour({
- ...tourProps,
- goToOverviewTab,
- });
- expect(goToOverviewTab).toHaveBeenCalled();
- });
-
- it('should call goToLeftPanel when after step 3', async () => {
- const wrapper = renderTour({
- ...tourProps,
- goToLeftPanel,
- });
-
- await waitFor(() => {
- expect(wrapper.getByTestId(`${FLYOUT_TOUR_TEST_ID}-1`)).toBeVisible();
- });
- fireEvent.click(wrapper.getByText('Next'));
- await waitFor(() => {
- expect(wrapper.getByTestId(`${FLYOUT_TOUR_TEST_ID}-2`)).toBeVisible();
- });
- fireEvent.click(wrapper.getByText('Next'));
- await waitFor(() => {
- expect(wrapper.getByTestId(`${FLYOUT_TOUR_TEST_ID}-3`)).toBeVisible();
- });
- fireEvent.click(wrapper.getByText('Next'));
-
- expect(goToLeftPanel).toHaveBeenCalled();
- });
-});
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/shared/components/flyout_tour.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/shared/components/flyout_tour.tsx
deleted file mode 100644
index c5ee76ca558a9..0000000000000
--- a/x-pack/plugins/security_solution/public/flyout/document_details/shared/components/flyout_tour.tsx
+++ /dev/null
@@ -1,160 +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.
- */
-
-/*
- * This timeline tour only valid for 8.12 release is not needed for 8.13
- *
- * */
-
-import type { FC } from 'react';
-import React, { useCallback, useState, useEffect } from 'react';
-import { EuiButton, EuiButtonEmpty, EuiTourStep } from '@elastic/eui';
-import { i18n } from '@kbn/i18n';
-import { tourConfig, type TourState } from '../utils/tour_step_config';
-import type { FlyoutTourStepsProps } from '../utils/tour_step_config';
-import { NEW_FEATURES_TOUR_STORAGE_KEYS } from '../../../../../common/constants';
-import { useKibana } from '../../../../common/lib/kibana';
-import { FLYOUT_TOUR_TEST_ID } from './test_ids';
-
-export interface FlyoutTourProps {
- /**
- * Content to be displayed in each tour card
- */
- tourStepContent: FlyoutTourStepsProps[];
- /**
- * Total number of tour steps
- */
- totalSteps: number;
- /**
- * Callback to go to overview tab before tour
- */
- goToOverviewTab?: () => void;
- /**
- * Callback to go to open left panel
- */
- goToLeftPanel?: () => void;
-}
-
-const MAX_POPOVER_WIDTH = 500;
-const TOUR_SUBTITLE = i18n.translate('xpack.securitySolution.flyout.tour.subtitle', {
- defaultMessage: 'A redesigned alert experience',
-});
-
-/**
- * Shared component that generates tour steps based on supplied tour step content.
- * Supports tours being shown in different panels and manages state via local storage
- */
-export const FlyoutTour: FC = ({
- tourStepContent,
- totalSteps,
- goToOverviewTab,
- goToLeftPanel,
-}) => {
- const {
- services: { storage },
- } = useKibana();
-
- const [tourState, setTourState] = useState(() => {
- const restoredTourState = storage.get(NEW_FEATURES_TOUR_STORAGE_KEYS.FLYOUT);
- if (restoredTourState != null) {
- return restoredTourState;
- }
- return tourConfig;
- });
-
- useEffect(() => {
- storage.set(NEW_FEATURES_TOUR_STORAGE_KEYS.FLYOUT, tourState);
- if (tourState.isTourActive && tourState.currentTourStep === 1 && goToOverviewTab) {
- goToOverviewTab();
- }
- }, [storage, tourState, goToOverviewTab]);
-
- const nextStep = useCallback(() => {
- setTourState((prev) => {
- if (prev.currentTourStep === 3 && goToLeftPanel) {
- goToLeftPanel();
- }
- return {
- ...prev,
- currentTourStep: prev.currentTourStep + 1,
- };
- });
- }, [goToLeftPanel]);
-
- const finishTour = useCallback(() => {
- setTourState((prev) => {
- return {
- ...prev,
- isTourActive: false,
- };
- });
- }, []);
-
- const getFooterAction = useCallback(
- (step: number) => {
- // if it's the last step, we don't want to show the next button
- return step === totalSteps ? (
-
- {i18n.translate('xpack.securitySolution.flyout.tour.finish.text', {
- defaultMessage: 'Finish',
- })}
-
- ) : (
- [
-
- {i18n.translate('xpack.securitySolution.flyout.tour.exit.text', {
- defaultMessage: 'Exit',
- })}
- ,
-
- {i18n.translate('xpack.securitySolution.flyout.tour.Next.text', {
- defaultMessage: 'Next',
- })}
- ,
- ]
- );
- },
- [finishTour, nextStep, totalSteps]
- );
-
- // Do not show tour if it is inactive
- if (!tourState.isTourActive) {
- return null;
- }
-
- return (
- <>
- {tourStepContent.map((steps) => {
- const stepCount = steps.stepNumber;
- if (tourState.currentTourStep !== stepCount) return null;
- const panelProps = {
- 'data-test-subj': `${FLYOUT_TOUR_TEST_ID}-${stepCount}`,
- };
-
- return (
-
- );
- })}
- >
- );
-};
-
-FlyoutTour.displayName = 'FlyoutTour';
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/shared/components/test_ids.ts b/x-pack/plugins/security_solution/public/flyout/document_details/shared/components/test_ids.ts
index 7c2ce2ff5870b..b250e9a688380 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/shared/components/test_ids.ts
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/shared/components/test_ids.ts
@@ -7,7 +7,6 @@
import { PREFIX } from '../../../shared/test_ids';
-export const FLYOUT_TOUR_TEST_ID = `${PREFIX}Tour` as const;
export const FLYOUT_PREVIEW_LINK_TEST_ID = `${PREFIX}PreviewLink` as const;
export const SESSION_VIEW_UPSELL_TEST_ID = `${PREFIX}SessionViewUpsell` as const;
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/shared/utils/tour_step_config.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/shared/utils/tour_step_config.tsx
deleted file mode 100644
index 7b850cca82450..0000000000000
--- a/x-pack/plugins/security_solution/public/flyout/document_details/shared/utils/tour_step_config.tsx
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
- * or more contributor license agreements. Licensed under the Elastic License
- * 2.0; you may not use this file except in compliance with the Elastic License
- * 2.0.
- */
-
-import { EuiText, EuiCode, type EuiTourStepProps } from '@elastic/eui';
-import React from 'react';
-import { FormattedMessage } from '@kbn/i18n-react';
-import { i18n } from '@kbn/i18n';
-import { HEADER_NAVIGATION_BUTTON_TEST_ID } from '../../../shared/components/test_ids';
-import { OVERVIEW_TAB_LABEL_TEST_ID } from '../../right/test_ids';
-import { RULE_SUMMARY_BUTTON_TEST_ID } from '../../right/components/test_ids';
-import {
- INSIGHTS_TAB_PREVALENCE_BUTTON_LABEL_TEST_ID,
- INSIGHTS_TAB_ENTITIES_BUTTON_LABEL_TEST_ID,
-} from '../../left/tabs/test_ids';
-
-export const FLYOUT_TOUR_CONFIG_ANCHORS = {
- OVERVIEW_TAB: OVERVIEW_TAB_LABEL_TEST_ID,
- RULE_PREVIEW: RULE_SUMMARY_BUTTON_TEST_ID,
- NAVIGATION_BUTTON: HEADER_NAVIGATION_BUTTON_TEST_ID,
- ENTITIES: INSIGHTS_TAB_ENTITIES_BUTTON_LABEL_TEST_ID,
- PREVALENCE: INSIGHTS_TAB_PREVALENCE_BUTTON_LABEL_TEST_ID,
-};
-
-export interface TourState {
- /**
- * The current step number
- */
- currentTourStep: number;
- /**
- * True if tour is active (user has not completed or exited the tour)
- */
- isTourActive: boolean;
-}
-
-export const tourConfig: TourState = {
- currentTourStep: 1,
- isTourActive: true,
-};
-
-export interface FlyoutTourStepsProps {
- /**
- * Title of the tour step
- */
- title: string;
- /**
- * Content of tour step
- */
- content: JSX.Element;
- /**
- * Step number
- */
- stepNumber: number;
- /**
- * Data test subject of the anchor component
- */
- anchor: string;
- /**
- * Optional anchor position prop
- */
- anchorPosition?: EuiTourStepProps['anchorPosition'];
-}
-
-export const getRightSectionTourSteps = (): FlyoutTourStepsProps[] => {
- const rightSectionTourSteps: FlyoutTourStepsProps[] = [
- {
- title: i18n.translate('xpack.securitySolution.flyout.tour.overview.title', {
- defaultMessage: 'More ways to understand your alerts',
- }),
- content: (
-
-
- {i18n.translate('xpack.securitySolution.flyout.tour.overview.entities.text', {
- defaultMessage: 'Entities',
- })}
-
- ),
- prevalence: (
-
- {i18n.translate('xpack.securitySolution.flyout.tour.overview.prevalence.text', {
- defaultMessage: 'Prevalence',
- })}
-
- ),
- }}
- />
-
- ),
- stepNumber: 1,
- anchor: FLYOUT_TOUR_CONFIG_ANCHORS.OVERVIEW_TAB,
- anchorPosition: 'downCenter',
- },
- {
- title: i18n.translate('xpack.securitySolution.flyout.tour.preview.title', {
- defaultMessage: 'A quick way to access rule details',
- }),
- content: (
-
-
- {i18n.translate('xpack.securitySolution.flyout.tour.rulePreview.text', {
- defaultMessage: 'Show rule summary',
- })}
-
- ),
- }}
- />
-
- ),
- stepNumber: 2,
- anchor: FLYOUT_TOUR_CONFIG_ANCHORS.RULE_PREVIEW,
- anchorPosition: 'rightUp',
- },
- {
- title: i18n.translate('xpack.securitySolution.flyout.tour.expandDetails.title', {
- defaultMessage: 'An expanded view of important alert details',
- }),
- content: (
-
-
-
- ),
- stepNumber: 3,
- anchor: FLYOUT_TOUR_CONFIG_ANCHORS.NAVIGATION_BUTTON,
- anchorPosition: 'downCenter',
- },
- ];
- return rightSectionTourSteps;
-};
-
-export const getLeftSectionTourSteps = (): FlyoutTourStepsProps[] => {
- return [
- {
- title: i18n.translate('xpack.securitySolution.flyout.tour.entities.title', {
- defaultMessage: 'New host and user insights are available',
- }),
- content: (
-
-
- {i18n.translate('xpack.securitySolution.flyout.tour.entities.text', {
- defaultMessage: 'Entities',
- })}
-
- ),
- }}
- />
-
- ),
- stepNumber: 4,
- anchor: FLYOUT_TOUR_CONFIG_ANCHORS.ENTITIES,
- anchorPosition: 'rightUp',
- },
- {
- title: i18n.translate('xpack.securitySolution.flyout.tour.prevalence.title', {
- defaultMessage: 'New host and user insights are available',
- }),
- content: (
-
-
- {i18n.translate('xpack.securitySolution.flyout.tour.prevalence.text', {
- defaultMessage: 'Prevalence',
- })}
-
- ),
- }}
- />
-
- ),
- stepNumber: 5,
- anchor: FLYOUT_TOUR_CONFIG_ANCHORS.PREVALENCE,
- anchorPosition: 'rightUp',
- },
- ];
-};
diff --git a/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_navigation.tsx b/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_navigation.tsx
index 8f9f1604bf407..1915c5a4484a4 100644
--- a/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_navigation.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_navigation.tsx
@@ -22,7 +22,6 @@ import {
HEADER_ACTIONS_TEST_ID,
COLLAPSE_DETAILS_BUTTON_TEST_ID,
EXPAND_DETAILS_BUTTON_TEST_ID,
- HEADER_NAVIGATION_BUTTON_TEST_ID,
} from './test_ids';
export interface FlyoutNavigationProps {
@@ -116,7 +115,7 @@ export const FlyoutNavigation: FC = memo(
height: ${euiTheme.size.xxl};
`}
>
-
+
{flyoutIsExpandable && expandDetails && (isExpanded ? collapseButton : expandButton)}
{actions && (
diff --git a/x-pack/plugins/security_solution/public/flyout/shared/components/test_ids.ts b/x-pack/plugins/security_solution/public/flyout/shared/components/test_ids.ts
index 9df26dbfb694d..f8a589f31561e 100644
--- a/x-pack/plugins/security_solution/public/flyout/shared/components/test_ids.ts
+++ b/x-pack/plugins/security_solution/public/flyout/shared/components/test_ids.ts
@@ -27,7 +27,6 @@ export const EXPANDABLE_PANEL_CONTENT_TEST_ID = (dataTestSubj: string) => `${dat
/* Header Navigation */
const FLYOUT_NAVIGATION_TEST_ID = `${PREFIX}Navigation` as const;
-export const HEADER_NAVIGATION_BUTTON_TEST_ID = `${PREFIX}NavigationButton` as const;
export const EXPAND_DETAILS_BUTTON_TEST_ID =
`${FLYOUT_NAVIGATION_TEST_ID}ExpandDetailButton` as const;
export const COLLAPSE_DETAILS_BUTTON_TEST_ID =
diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json
index b3de99ebfdd3c..2029921d5d97f 100644
--- a/x-pack/plugins/translations/translations/fr-FR.json
+++ b/x-pack/plugins/translations/translations/fr-FR.json
@@ -38809,25 +38809,6 @@
"xpack.securitySolution.flyout.shared.errorTitle": "Impossible d'afficher {title}.",
"xpack.securitySolution.flyout.shared.ExpandablePanelButtonIconAriaLabel": "Activer/Désactiver le panneau extensible",
"xpack.securitySolution.flyout.shared.expandablePanelLoadingAriaLabel": "panneau extensible",
- "xpack.securitySolution.flyout.tour.entities.description": "Consultez la vue {entities} étendue pour en savoir plus sur les hôtes et les utilisateurs liés à l'alerte.",
- "xpack.securitySolution.flyout.tour.entities.text": "Entités",
- "xpack.securitySolution.flyout.tour.entities.title": "De nouvelles informations sur les hôtes et les utilisateurs sont disponibles",
- "xpack.securitySolution.flyout.tour.exit.text": "Quitter",
- "xpack.securitySolution.flyout.tour.expandDetails.description": "Cliquez sur le texte lié pour ouvrir et fermer le panneau gauche du menu volant. Le panneau de gauche est une vue détaillée des sections du panneau de droite.",
- "xpack.securitySolution.flyout.tour.expandDetails.title": "Un affichage élargi des détails importants de l'alerte",
- "xpack.securitySolution.flyout.tour.finish.text": "Terminer",
- "xpack.securitySolution.flyout.tour.Next.text": "Suivant",
- "xpack.securitySolution.flyout.tour.overview.description": "Explorez de nouvelles informations exploitables dans les sections {entities} et {prevalence}.",
- "xpack.securitySolution.flyout.tour.overview.entities.text": "Entités",
- "xpack.securitySolution.flyout.tour.overview.prevalence.text": "Prévalence",
- "xpack.securitySolution.flyout.tour.overview.title": "Plus de moyens pour comprendre vos alertes",
- "xpack.securitySolution.flyout.tour.prevalence.description": "Consultez la vue {prevalence} étendue pour savoir comment l'alerte est liée à d'autres alertes, événements et entités.",
- "xpack.securitySolution.flyout.tour.prevalence.text": "Prévalence",
- "xpack.securitySolution.flyout.tour.prevalence.title": "De nouvelles informations sur les hôtes et les utilisateurs sont disponibles",
- "xpack.securitySolution.flyout.tour.preview.title": "Un moyen rapide d'accéder aux détails des règles",
- "xpack.securitySolution.flyout.tour.rulePreview.description": "Cliquez sur {rulePreview} pour en savoir plus sur la règle qui a généré l'alerte.",
- "xpack.securitySolution.flyout.tour.rulePreview.text": "Afficher le résumé de la règle",
- "xpack.securitySolution.flyout.tour.subtitle": "Une expérience d'alerte repensée",
"xpack.securitySolution.flyout.user.preview.viewDetailsLabel": "Ouvrez le menu volant des détails de l'utilisateur",
"xpack.securitySolution.footer.autoRefreshActiveDescription": "Actualisation automatique active",
"xpack.securitySolution.footer.autoRefreshActiveTooltip": "Lorsque l'actualisation automatique est activée, la chronologie vous montrera les {numberOfItems} derniers événements correspondant à votre recherche.",
diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json
index b813f2189ed3b..f4c6afab569ac 100644
--- a/x-pack/plugins/translations/translations/ja-JP.json
+++ b/x-pack/plugins/translations/translations/ja-JP.json
@@ -38552,25 +38552,6 @@
"xpack.securitySolution.flyout.shared.errorTitle": "{title}を表示できません。",
"xpack.securitySolution.flyout.shared.ExpandablePanelButtonIconAriaLabel": "展開可能なパネルトグル",
"xpack.securitySolution.flyout.shared.expandablePanelLoadingAriaLabel": "展開可能なパネル",
- "xpack.securitySolution.flyout.tour.entities.description": "アラートに関連付けられたホストとユーザーの詳細については、展開された{entities}ビューを確認してください。",
- "xpack.securitySolution.flyout.tour.entities.text": "エンティティ",
- "xpack.securitySolution.flyout.tour.entities.title": "新しいホストとユーザーのインサイトがあります",
- "xpack.securitySolution.flyout.tour.exit.text": "終了",
- "xpack.securitySolution.flyout.tour.expandDetails.description": "リンクされたテキストをクリックすると、フライアウトの左パネルが開いて閉じます。左パネルは、右パネルのセクションの詳細表示です。",
- "xpack.securitySolution.flyout.tour.expandDetails.title": "重要なアラート詳細の展開表示",
- "xpack.securitySolution.flyout.tour.finish.text": "終了",
- "xpack.securitySolution.flyout.tour.Next.text": "次へ",
- "xpack.securitySolution.flyout.tour.overview.description": "{entities}および{prevalence}セクションで新しいインサイトを探索してください。",
- "xpack.securitySolution.flyout.tour.overview.entities.text": "エンティティ",
- "xpack.securitySolution.flyout.tour.overview.prevalence.text": "発生率",
- "xpack.securitySolution.flyout.tour.overview.title": "アラートを理解するためのその他の方法",
- "xpack.securitySolution.flyout.tour.prevalence.description": "アラートが他のアラート、イベント、エンティティに関連付けられる詳細な方法については、展開された{prevalence}ビューを確認してください。",
- "xpack.securitySolution.flyout.tour.prevalence.text": "発生率",
- "xpack.securitySolution.flyout.tour.prevalence.title": "新しいホストとユーザーのインサイトがあります",
- "xpack.securitySolution.flyout.tour.preview.title": "ルール詳細をすばやく表示する方法",
- "xpack.securitySolution.flyout.tour.rulePreview.description": "アラートを生成したルールの詳細については、{rulePreview}をクリックしてください。",
- "xpack.securitySolution.flyout.tour.rulePreview.text": "ルール概要を表示",
- "xpack.securitySolution.flyout.tour.subtitle": "再設計されたアラート体験",
"xpack.securitySolution.flyout.user.preview.viewDetailsLabel": "ユーザー詳細フライアウトを開く",
"xpack.securitySolution.footer.autoRefreshActiveDescription": "自動更新アクション",
"xpack.securitySolution.footer.autoRefreshActiveTooltip": "自動更新が有効な間、タイムラインはクエリーに一致する最新の {numberOfItems} 件のイベントを表示します。",
diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json
index 5fbe2d35b72a6..785f296c30f68 100644
--- a/x-pack/plugins/translations/translations/zh-CN.json
+++ b/x-pack/plugins/translations/translations/zh-CN.json
@@ -6846,7 +6846,6 @@
"securitySolutionPackages.features.featureRegistry.subFeatures.trustedApplications": "受信任的应用程序",
"securitySolutionPackages.features.featureRegistry.subFeatures.trustedApplications.description": "帮助减少与其他软件(通常指其他防病毒或终端安全应用程序)的冲突。",
"securitySolutionPackages.features.featureRegistry.subFeatures.trustedApplications.privilegesTooltip": "访问受信任的应用程序需要所有工作区。",
- "sgcuritySolutionPackages.flyout.shared.errorDescription": "显示 {message} 时出现错误。",
"securitySolutionPackages.markdown.insight.upsell": "升级到{requiredLicense}以利用调查指南中的洞见",
"securitySolutionPackages.markdown.investigationGuideInteractions.upsell": "升级到 {requiredLicense} 以利用调查指南交互",
"securitySolutionPackages.navigation.landingLinks": "安全视图",
@@ -38598,25 +38597,6 @@
"xpack.securitySolution.flyout.shared.errorTitle": "无法显示 {title}。",
"xpack.securitySolution.flyout.shared.ExpandablePanelButtonIconAriaLabel": "可展开面板切换按钮",
"xpack.securitySolution.flyout.shared.expandablePanelLoadingAriaLabel": "可展开面板",
- "xpack.securitySolution.flyout.tour.entities.description": "请查阅展开的 {entities} 视图以了解与该告警有关的主机和用户的更多信息。",
- "xpack.securitySolution.flyout.tour.entities.text": "实体",
- "xpack.securitySolution.flyout.tour.entities.title": "有新主机和用户洞见可用",
- "xpack.securitySolution.flyout.tour.exit.text": "退出",
- "xpack.securitySolution.flyout.tour.expandDetails.description": "单击链接文本可打开和关闭浮出控件的左面板。左面板提供了右面板中的各个部分的详细视图。",
- "xpack.securitySolution.flyout.tour.expandDetails.title": "重要告警详情的扩展视图",
- "xpack.securitySolution.flyout.tour.finish.text": "完成",
- "xpack.securitySolution.flyout.tour.Next.text": "下一步",
- "xpack.securitySolution.flyout.tour.overview.description": "浏览 {entities} 和 {prevalence} 部分中的新洞见。",
- "xpack.securitySolution.flyout.tour.overview.entities.text": "实体",
- "xpack.securitySolution.flyout.tour.overview.prevalence.text": "普及率",
- "xpack.securitySolution.flyout.tour.overview.title": "了解告警的更多方式",
- "xpack.securitySolution.flyout.tour.prevalence.description": "请查阅展开的 {prevalence} 视图以了解该告警与其他告警、事件和实体的关系。",
- "xpack.securitySolution.flyout.tour.prevalence.text": "普及率",
- "xpack.securitySolution.flyout.tour.prevalence.title": "有新主机和用户洞见可用",
- "xpack.securitySolution.flyout.tour.preview.title": "一种快速访问规则详情的方法",
- "xpack.securitySolution.flyout.tour.rulePreview.description": "单击 {rulePreview} 以了解与生成该告警的规则有关的详情。",
- "xpack.securitySolution.flyout.tour.rulePreview.text": "显示规则摘要",
- "xpack.securitySolution.flyout.tour.subtitle": "经过重新设计的告警体验",
"xpack.securitySolution.flyout.user.preview.viewDetailsLabel": "打开用户详情浮出控件",
"xpack.securitySolution.footer.autoRefreshActiveDescription": "自动刷新已启用",
"xpack.securitySolution.footer.autoRefreshActiveTooltip": "自动刷新已启用时,时间线将显示匹配查询的最近 {numberOfItems} 个事件。",
From 586b24f3a80cd1d9edb8775f51e1b86849d2c1f2 Mon Sep 17 00:00:00 2001
From: Jon
Date: Mon, 4 Nov 2024 16:24:15 -0600
Subject: [PATCH 041/101] [ci] Reuse .yarn-local-mirror (#198613)
Currently CI is configuring a yarn local mirror that is ignored due to
the repository `.yarnrc` taking precedence.
Instead of configuring this setting, this moves the cached mirror over
to the Kibana directory in line with the repository's configuration.
---
.buildkite/scripts/bootstrap.sh | 14 ++++++++++----
.buildkite/scripts/common/setup_node.sh | 3 ---
2 files changed, 10 insertions(+), 7 deletions(-)
diff --git a/.buildkite/scripts/bootstrap.sh b/.buildkite/scripts/bootstrap.sh
index b7576dda72f24..a126ad9132696 100755
--- a/.buildkite/scripts/bootstrap.sh
+++ b/.buildkite/scripts/bootstrap.sh
@@ -12,12 +12,18 @@ if [[ "${BOOTSTRAP_ALWAYS_FORCE_INSTALL:-}" ]]; then
BOOTSTRAP_PARAMS+=(--force-install)
fi
-# Use the node_modules that is baked into the agent image, if it exists, as a cache
+# Use the packages that are baked into the agent image, if they exist, as a cache
# But only for agents not mounting the workspace on a local ssd or in memory
# It actually ends up being slower to move all of the tiny files between the disks vs extracting archives from the yarn cache
-if [[ -d ~/.kibana/node_modules && "$(pwd)" != *"/local-ssd/"* && "$(pwd)" != "/dev/shm"* ]]; then
- echo "Using ~/.kibana/node_modules as a starting point"
- mv ~/.kibana/node_modules ./
+if [[ "$(pwd)" != *"/local-ssd/"* && "$(pwd)" != "/dev/shm"* ]]; then
+ if [[ -d ~/.kibana/node_modules ]]; then
+ echo "Using ~/.kibana/node_modules as a starting point"
+ mv ~/.kibana/node_modules ./
+ fi
+ if [[ -d ~/.kibana/.yarn-local-mirror ]]; then
+ echo "Using ~/.kibana/.yarn-local-mirror as a starting point"
+ mv ~/.kibana/.yarn-local-mirror ./
+ fi
fi
if ! yarn kbn bootstrap "${BOOTSTRAP_PARAMS[@]}"; then
diff --git a/.buildkite/scripts/common/setup_node.sh b/.buildkite/scripts/common/setup_node.sh
index c6fbfeaee51bc..aac3d26702691 100755
--- a/.buildkite/scripts/common/setup_node.sh
+++ b/.buildkite/scripts/common/setup_node.sh
@@ -10,7 +10,6 @@ NODE_VERSION="$(cat "$KIBANA_DIR/.node-version")"
export NODE_VERSION
export NODE_DIR="$CACHE_DIR/node/$NODE_VERSION"
export NODE_BIN_DIR="$NODE_DIR/bin"
-export YARN_OFFLINE_CACHE="$CACHE_DIR/yarn-offline-cache"
## Install node for whatever the current os/arch are
hostArch="$(command uname -m)"
@@ -77,8 +76,6 @@ if [[ ! $(which yarn) || $(yarn --version) != "$YARN_VERSION" ]]; then
npm_install_global yarn "^$YARN_VERSION"
fi
-yarn config set yarn-offline-mirror "$YARN_OFFLINE_CACHE"
-
YARN_GLOBAL_BIN=$(yarn global bin)
export YARN_GLOBAL_BIN
export PATH="$PATH:$YARN_GLOBAL_BIN"
From 59b2f5f72a7726aa604c56a7c8a4dc4b78cecf8c Mon Sep 17 00:00:00 2001
From: Drew Tate
Date: Mon, 4 Nov 2024 23:38:53 -0700
Subject: [PATCH 042/101] [ES|QL] don't suggest in comments (#197341)
## Summary
Close https://github.com/elastic/kibana/issues/191866
- [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
---------
Co-authored-by: Elastic Machine
---
.../src/autocomplete/__tests__/helpers.ts | 4 +-
.../__tests__/suggestions_in_comments.test.ts | 43 ++++++++++
.../src/autocomplete/autocomplete.ts | 5 ++
.../src/shared/context.ts | 31 ++++++--
.../src/shared/helpers.test.ts | 17 +++-
.../src/shared/helpers.ts | 78 ++++++++++++-------
.../kbn-monaco/src/esql/worker/esql_worker.ts | 2 +-
7 files changed, 137 insertions(+), 43 deletions(-)
create mode 100644 packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/suggestions_in_comments.test.ts
diff --git a/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/helpers.ts b/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/helpers.ts
index ebf0a0589d1e9..9964fc96d00ca 100644
--- a/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/helpers.ts
+++ b/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/helpers.ts
@@ -8,7 +8,7 @@
*/
import { camelCase } from 'lodash';
-import { getAstAndSyntaxErrors } from '@kbn/esql-ast';
+import { parse } from '@kbn/esql-ast';
import { scalarFunctionDefinitions } from '../../definitions/generated/scalar_functions';
import { builtinFunctions } from '../../definitions/builtin';
import { aggregationFunctionDefinitions } from '../../definitions/generated/aggregation_functions';
@@ -312,7 +312,7 @@ export const setup = async (caret = '/') => {
querySansCaret,
pos,
ctx,
- getAstAndSyntaxErrors,
+ (_query: string | undefined) => parse(_query, { withFormatting: true }),
opts.callbacks ?? callbacks
);
};
diff --git a/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/suggestions_in_comments.test.ts b/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/suggestions_in_comments.test.ts
new file mode 100644
index 0000000000000..7f97409ea6341
--- /dev/null
+++ b/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/suggestions_in_comments.test.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", the "GNU Affero General Public License v3.0 only", and the "Server Side
+ * Public License v 1"; you may not use this file except in compliance with, at
+ * your election, the "Elastic License 2.0", the "GNU Affero General Public
+ * License v3.0 only", or the "Server Side Public License, v 1".
+ */
+
+import { setup } from './helpers';
+
+describe('suggestions in comments', () => {
+ it('does not suggest in single-line comments', async () => {
+ const { assertSuggestions } = await setup('^');
+ await assertSuggestions('FROM index | EVAL // hey there ^', []);
+ });
+
+ it('does not suggest in multi-line comments', async () => {
+ const { assertSuggestions } = await setup('^');
+ await assertSuggestions('FROM index | EVAL /* ^ */', []);
+ await assertSuggestions('FROM index | EVAL /* (^) */', []);
+ });
+
+ it('does not suggest in incomplete multi-line comments', async () => {
+ const { assertSuggestions } = await setup('^');
+ assertSuggestions('FROM index | EVAL /* ^', []);
+ });
+
+ test('suggests next to comments', async () => {
+ const { suggest } = await setup('^');
+ expect((await suggest('FROM index | EVAL ^/* */')).length).toBeGreaterThan(0);
+ expect((await suggest('FROM index | EVAL /* */^')).length).toBeGreaterThan(0);
+ expect((await suggest('FROM index | EVAL ^// a comment')).length).toBeGreaterThan(0);
+ expect((await suggest('FROM index | EVAL // a comment\n^')).length).toBeGreaterThan(0);
+ });
+
+ test('handles multiple comments', async () => {
+ const { assertSuggestions } = await setup('^');
+ assertSuggestions('FROM index | EVAL /* comment1 */ x + /* comment2 ^ */ 1', []);
+ assertSuggestions('FROM index | EVAL /* ^ comment1 */ x + /* comment2 ^ */ 1', []);
+ assertSuggestions('FROM index | EVAL /* comment1 */ x + /* comment2 */ 1 // comment3 ^', []);
+ });
+});
diff --git a/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.ts b/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.ts
index 7b0f4191dcaca..ecb46682b041e 100644
--- a/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.ts
+++ b/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.ts
@@ -159,6 +159,11 @@ export async function suggest(
const { ast } = await astProvider(correctedQuery);
const astContext = getAstContext(innerText, ast, offset);
+
+ if (astContext.type === 'comment') {
+ return [];
+ }
+
// build the correct query to fetch the list of fields
const queryForFields = getQueryForFields(
buildQueryUntilPreviousCommand(ast, correctedQuery),
diff --git a/packages/kbn-esql-validation-autocomplete/src/shared/context.ts b/packages/kbn-esql-validation-autocomplete/src/shared/context.ts
index 2de9d7290ab5c..42e63d7623e49 100644
--- a/packages/kbn-esql-validation-autocomplete/src/shared/context.ts
+++ b/packages/kbn-esql-validation-autocomplete/src/shared/context.ts
@@ -7,14 +7,15 @@
* License v3.0 only", or the "Server Side Public License, v 1".
*/
-import type {
- ESQLAstItem,
- ESQLSingleAstItem,
- ESQLAst,
- ESQLFunction,
- ESQLCommand,
- ESQLCommandOption,
- ESQLCommandMode,
+import {
+ type ESQLAstItem,
+ type ESQLSingleAstItem,
+ type ESQLAst,
+ type ESQLFunction,
+ type ESQLCommand,
+ type ESQLCommandOption,
+ type ESQLCommandMode,
+ Walker,
} from '@kbn/esql-ast';
import { ENRICH_MODES } from '../definitions/settings';
import { EDITOR_MARKER } from './constants';
@@ -152,6 +153,20 @@ function isBuiltinFunction(node: ESQLFunction) {
* * "newCommand": the cursor is at the beginning of a new command (i.e. `command1 | command2 | `)
*/
export function getAstContext(queryString: string, ast: ESQLAst, offset: number) {
+ let inComment = false;
+
+ Walker.visitComments(ast, (node) => {
+ if (node.location && node.location.min <= offset && node.location.max > offset) {
+ inComment = true;
+ }
+ });
+
+ if (inComment) {
+ return {
+ type: 'comment' as const,
+ };
+ }
+
const { command, option, setting, node } = findAstPosition(ast, offset);
if (node) {
if (node.type === 'literal' && node.literalType === 'keyword') {
diff --git a/packages/kbn-esql-validation-autocomplete/src/shared/helpers.test.ts b/packages/kbn-esql-validation-autocomplete/src/shared/helpers.test.ts
index b5f14ecfd0227..97f35e1c66722 100644
--- a/packages/kbn-esql-validation-autocomplete/src/shared/helpers.test.ts
+++ b/packages/kbn-esql-validation-autocomplete/src/shared/helpers.test.ts
@@ -8,8 +8,8 @@
*/
import { parse } from '@kbn/esql-ast';
-import { getExpressionType, shouldBeQuotedSource } from './helpers';
-import type { SupportedDataType } from '../definitions/types';
+import { getBracketsToClose, getExpressionType, shouldBeQuotedSource } from './helpers';
+import { SupportedDataType } from '../definitions/types';
import { setTestFunctions } from './test_functions';
describe('shouldBeQuotedSource', () => {
@@ -324,3 +324,16 @@ describe('getExpressionType', () => {
);
});
});
+
+describe('getBracketsToClose', () => {
+ it('returns the number of brackets to close', () => {
+ expect(getBracketsToClose('foo(bar(baz')).toEqual([')', ')']);
+ expect(getBracketsToClose('foo(bar[baz')).toEqual([']', ')']);
+ expect(getBracketsToClose('foo(bar[baz"bap')).toEqual(['"', ']', ')']);
+ expect(
+ getBracketsToClose(
+ 'from a | eval case(integerField < 0, "negative", integerField > 0, "positive", '
+ )
+ ).toEqual([')']);
+ });
+});
diff --git a/packages/kbn-esql-validation-autocomplete/src/shared/helpers.ts b/packages/kbn-esql-validation-autocomplete/src/shared/helpers.ts
index b17f4ebcc8f07..43bbb2b571a50 100644
--- a/packages/kbn-esql-validation-autocomplete/src/shared/helpers.ts
+++ b/packages/kbn-esql-validation-autocomplete/src/shared/helpers.ts
@@ -651,26 +651,59 @@ export const isParam = (x: unknown): x is ESQLParamLiteral =>
export const noCaseCompare = (a: string, b: string) => a.toLowerCase() === b.toLowerCase();
/**
- * This function count the number of unclosed brackets in order to
- * locally fix the queryString to generate a valid AST
+ * This function returns a list of closing brackets that can be appended to
+ * a partial query to make it valid.
+
+* locally fix the queryString to generate a valid AST
* A known limitation of this is that is not aware of commas "," or pipes "|"
* so it is not yet helpful on a multiple commands errors (a workaround it to pass each command here...)
- * @param bracketType
* @param text
* @returns
*/
-export function countBracketsUnclosed(bracketType: '(' | '[' | '"' | '"""', text: string) {
+export function getBracketsToClose(text: string) {
const stack = [];
- const closingBrackets = { '(': ')', '[': ']', '"': '"', '"""': '"""' };
+ const pairs: Record = { '"""': '"""', '/*': '*/', '(': ')', '[': ']', '"': '"' };
+ const pairsReversed: Record = {
+ '"""': '"""',
+ '*/': '/*',
+ ')': '(',
+ ']': '[',
+ '"': '"',
+ };
+
for (let i = 0; i < text.length; i++) {
- const substr = text.substring(i, i + bracketType.length);
- if (substr === closingBrackets[bracketType] && stack.length) {
- stack.pop();
- } else if (substr === bracketType) {
- stack.push(bracketType);
+ for (const openBracket in pairs) {
+ if (!Object.hasOwn(pairs, openBracket)) {
+ continue;
+ }
+
+ const substr = text.slice(i, i + openBracket.length);
+ if (substr === openBracket) {
+ stack.push(substr);
+ break;
+ } else if (pairsReversed[substr] && pairsReversed[substr] === stack[stack.length - 1]) {
+ stack.pop();
+ break;
+ }
}
}
- return stack.length;
+ return stack.reverse().map((bracket) => pairs[bracket]);
+}
+
+/**
+ * This function counts the number of unclosed parentheses
+ * @param text
+ */
+export function countUnclosedParens(text: string) {
+ let unclosedCount = 0;
+ for (let i = 0; i < text.length; i++) {
+ if (text[i] === ')' && unclosedCount > 0) {
+ unclosedCount--;
+ } else if (text[i] === '(') {
+ unclosedCount++;
+ }
+ }
+ return unclosedCount;
}
/**
@@ -685,37 +718,22 @@ export function countBracketsUnclosed(bracketType: '(' | '[' | '"' | '"""', text
export function correctQuerySyntax(_query: string, context: EditorContext) {
let query = _query;
// check if all brackets are closed, otherwise close them
- const unclosedRoundBrackets = countBracketsUnclosed('(', query);
- const unclosedSquaredBrackets = countBracketsUnclosed('[', query);
- const unclosedQuotes = countBracketsUnclosed('"', query);
- const unclosedTripleQuotes = countBracketsUnclosed('"""', query);
+ const bracketsToAppend = getBracketsToClose(query);
+ const unclosedRoundBracketCount = bracketsToAppend.filter((bracket) => bracket === ')').length;
// if it's a comma by the user or a forced trigger by a function argument suggestion
// add a marker to make the expression still valid
const charThatNeedMarkers = [',', ':'];
if (
(context.triggerCharacter && charThatNeedMarkers.includes(context.triggerCharacter)) ||
// monaco.editor.CompletionTriggerKind['Invoke'] === 0
- (context.triggerKind === 0 && unclosedRoundBrackets === 0) ||
+ (context.triggerKind === 0 && unclosedRoundBracketCount === 0) ||
(context.triggerCharacter === ' ' && isMathFunction(query, query.length)) ||
isComma(query.trimEnd()[query.trimEnd().length - 1])
) {
query += EDITOR_MARKER;
}
- // if there are unclosed brackets, close them
- if (unclosedRoundBrackets || unclosedSquaredBrackets || unclosedQuotes) {
- for (const [char, count] of [
- ['"""', unclosedTripleQuotes],
- ['"', unclosedQuotes],
- [')', unclosedRoundBrackets],
- [']', unclosedSquaredBrackets],
- ]) {
- if (count) {
- // inject the closing brackets
- query += Array(count).fill(char).join('');
- }
- }
- }
+ query += bracketsToAppend.join('');
return query;
}
diff --git a/packages/kbn-monaco/src/esql/worker/esql_worker.ts b/packages/kbn-monaco/src/esql/worker/esql_worker.ts
index 82d6c75f8f621..18ce300acfc2f 100644
--- a/packages/kbn-monaco/src/esql/worker/esql_worker.ts
+++ b/packages/kbn-monaco/src/esql/worker/esql_worker.ts
@@ -43,7 +43,7 @@ export class ESQLWorker implements BaseWorkerDefinition {
}
getAst(text: string | undefined) {
- const rawAst = parse(text);
+ const rawAst = parse(text, { withFormatting: true });
return {
ast: rawAst.root.commands,
errors: rawAst.errors.map(inlineToMonacoErrors),
From 13a1de4d183baf10b82f8e0794cc5d2d2c7a8bc9 Mon Sep 17 00:00:00 2001
From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
Date: Tue, 5 Nov 2024 18:27:26 +1100
Subject: [PATCH 043/101] [api-docs] 2024-11-05 Daily api_docs build (#198884)
Generated by
https://buildkite.com/elastic/kibana-api-docs-daily/builds/882
---
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.mdx | 2 +-
api_docs/apm.mdx | 2 +-
api_docs/apm_data_access.mdx | 2 +-
api_docs/banners.mdx | 2 +-
api_docs/bfetch.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_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_bfetch_error.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_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_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_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_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_common_internal.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_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 +-
.../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_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_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 +-
api_docs/kbn_recently_accessed.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_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_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/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.devdocs.json | 42 +++++++++++++------
api_docs/observability_shared.mdx | 4 +-
api_docs/osquery.mdx | 2 +-
api_docs/painless_lab.mdx | 2 +-
api_docs/plugin_directory.mdx | 9 ++--
api_docs/presentation_panel.mdx | 2 +-
api_docs/presentation_util.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_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/task_manager.mdx | 2 +-
api_docs/telemetry.mdx | 2 +-
api_docs/telemetry_collection_manager.mdx | 2 +-
api_docs/telemetry_collection_xpack.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.devdocs.json | 4 +-
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 +-
760 files changed, 794 insertions(+), 777 deletions(-)
diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx
index 29d71edfc9e12..0288504afa834 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-11-03
+date: 2024-11-05
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 13c3b44fd5dcb..738bba2f61023 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-11-03
+date: 2024-11-05
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 a18c6d3035bcf..1d4a76169f5e6 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-11-03
+date: 2024-11-05
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 6adc9b8f83c36..df40cc6f13778 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-11-03
+date: 2024-11-05
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiops']
---
import aiopsObj from './aiops.devdocs.json';
diff --git a/api_docs/alerting.mdx b/api_docs/alerting.mdx
index 0f2f3e7a05f4a..1fcb9e4b2f81d 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-11-03
+date: 2024-11-05
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'alerting']
---
import alertingObj from './alerting.devdocs.json';
diff --git a/api_docs/apm.mdx b/api_docs/apm.mdx
index 05cbf8b4a7c0d..c6f7cdfcb87c0 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-11-03
+date: 2024-11-05
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 c8048acae532a..32900fe685cd3 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-11-03
+date: 2024-11-05
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apmDataAccess']
---
import apmDataAccessObj from './apm_data_access.devdocs.json';
diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx
index 6c08c42adadbf..ed638c66d8693 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-11-03
+date: 2024-11-05
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'banners']
---
import bannersObj from './banners.devdocs.json';
diff --git a/api_docs/bfetch.mdx b/api_docs/bfetch.mdx
index 3732941e29a16..284b3c211bd28 100644
--- a/api_docs/bfetch.mdx
+++ b/api_docs/bfetch.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/bfetch
title: "bfetch"
image: https://source.unsplash.com/400x175/?github
description: API docs for the bfetch plugin
-date: 2024-11-03
+date: 2024-11-05
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'bfetch']
---
import bfetchObj from './bfetch.devdocs.json';
diff --git a/api_docs/canvas.mdx b/api_docs/canvas.mdx
index 427694e3198c0..78b7d0de9ad6e 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-11-03
+date: 2024-11-05
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 caf46a6fe5b8f..cdcfdfd5fca76 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-11-03
+date: 2024-11-05
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 82511e46d3db9..28f8d66cfa79f 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-11-03
+date: 2024-11-05
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 3c03fc3269c02..717ac3fdddee6 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-11-03
+date: 2024-11-05
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 a074d145ccad7..1a5a502a98b77 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-11-03
+date: 2024-11-05
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 7d7be7042e871..9c4e09b3cf821 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-11-03
+date: 2024-11-05
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 67259c4522e18..71af015d61281 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-11-03
+date: 2024-11-05
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 a9ef5436c0e16..48ec716e150b8 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-11-03
+date: 2024-11-05
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 aa5d5b9ccb7e3..42f36240b9b10 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-11-03
+date: 2024-11-05
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 b75e44bd971bb..9893e995b970b 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-11-03
+date: 2024-11-05
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 e79afa3516a8b..404f0f578046c 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-11-03
+date: 2024-11-05
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 d1691efa1599c..52e35cb9b1939 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-11-03
+date: 2024-11-05
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 7fd78a1f2475e..6259d4fb765c1 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-11-03
+date: 2024-11-05
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 d9a0500edcd46..5bdd8b40262a7 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-11-03
+date: 2024-11-05
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 2d2b0de540f93..a6beaacd49f51 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-11-03
+date: 2024-11-05
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 5b73fe0aeef7b..f04279c922cea 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-11-03
+date: 2024-11-05
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 ae45c7ba5ee52..a9870f5559bb1 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-11-03
+date: 2024-11-05
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 dd00d7889b528..3caf106209440 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-11-03
+date: 2024-11-05
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 7f2e8cba1e656..7377cfd6ab057 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-11-03
+date: 2024-11-05
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 b566691e1cee9..45e3c652c9a50 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-11-03
+date: 2024-11-05
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 f49e713c7434d..35fc66dd1ec06 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-11-03
+date: 2024-11-05
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 b2d52e4949e79..2212e45f4731e 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-11-03
+date: 2024-11-05
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 d5217a8ee0987..5a0f884c1b74e 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-11-03
+date: 2024-11-05
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 d9dbeebde7c00..712664fb62ac1 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-11-03
+date: 2024-11-05
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 a3378147cb3df..bc8f6e59967f3 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-11-03
+date: 2024-11-05
tags: ['contributor', 'dev', 'apidocs', 'kibana']
---
diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx
index 3081d86c56602..90713de5f87f8 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-11-03
+date: 2024-11-05
tags: ['contributor', 'dev', 'apidocs', 'kibana']
---
diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx
index 4c6d5f16227b9..f600568eb9804 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-11-03
+date: 2024-11-05
tags: ['contributor', 'dev', 'apidocs', 'kibana']
---
diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx
index 4e817aabcd960..adac6f7bd8458 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-11-03
+date: 2024-11-05
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 9abd20b20cc8f..798d6cf8ef684 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-11-03
+date: 2024-11-05
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 153eee21ee358..9ec1e05328da4 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-11-03
+date: 2024-11-05
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 77375ba742076..d475fa791b9bb 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-11-03
+date: 2024-11-05
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 e129cc7e26e9c..07f21c506e931 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-11-03
+date: 2024-11-05
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 98dd298a170b3..7f971b1e2be08 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-11-03
+date: 2024-11-05
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 a2b9487467200..479ec38980c53 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-11-03
+date: 2024-11-05
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 82ac10f2148ec..6765f53629533 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-11-03
+date: 2024-11-05
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 98eef9fc73090..c3233c90f6000 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-11-03
+date: 2024-11-05
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 1a4a10078cc28..ae8b5bbb23dac 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-11-03
+date: 2024-11-05
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 a7ca1a5dba208..435ad9cb85373 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-11-03
+date: 2024-11-05
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 b34cb7cc51756..3f3459c6a4b2a 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-11-03
+date: 2024-11-05
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 d8bdd4929395d..550f0a626fcd7 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-11-03
+date: 2024-11-05
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 fc397c0046c51..f3e517ab2de0c 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-11-03
+date: 2024-11-05
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 d4532086c8c47..758b11bd9f2cf 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-11-03
+date: 2024-11-05
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 592c30eec9036..682ef70f5f165 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-11-03
+date: 2024-11-05
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 5bd16bc626552..c01a3923d3a61 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-11-03
+date: 2024-11-05
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 c2967ac574d5d..c584de3a85c59 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-11-03
+date: 2024-11-05
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 f6ddd1f27b1ae..cbaa205fca251 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-11-03
+date: 2024-11-05
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 4a08745f3569f..ff6680102f7e2 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-11-03
+date: 2024-11-05
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 411ad35b34d6c..257ec53c9591f 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-11-03
+date: 2024-11-05
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 1fe62e61229fc..acfabf7226553 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-11-03
+date: 2024-11-05
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 835c32c9bd66a..61b18e1143491 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-11-03
+date: 2024-11-05
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 a12b00cd4c9a8..8f578a99acdb4 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-11-03
+date: 2024-11-05
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 4782a0f41f1e0..b3d1f15ca9909 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-11-03
+date: 2024-11-05
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 6b029c56cdaef..f420aeb6a37c5 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-11-03
+date: 2024-11-05
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 ae5de133fd00a..dcae8f1bdc294 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-11-03
+date: 2024-11-05
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 e55dd07213349..49b813eb50c6e 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-11-03
+date: 2024-11-05
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 840fd859081b1..32ca7be938bc3 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-11-03
+date: 2024-11-05
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 3d880718b8ca4..c8d37852ebb5d 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-11-03
+date: 2024-11-05
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 b5bdf0a38c405..1fd34b4942ceb 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-11-03
+date: 2024-11-05
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 a8d8a497dd52b..a3f52f52fb078 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-11-03
+date: 2024-11-05
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 33f00282ea740..bac3fbe741486 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-11-03
+date: 2024-11-05
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 826c2caf917ea..1a320aca6a039 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-11-03
+date: 2024-11-05
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 8d82bad346bf4..a4b7c9d58da31 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-11-03
+date: 2024-11-05
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 ca1c185add4dd..89c0e522f5b2e 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-11-03
+date: 2024-11-05
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 0085647f9d734..7d8dc060bb16c 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-11-03
+date: 2024-11-05
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 3f43b285c1a9a..f501a7df4a7e4 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-11-03
+date: 2024-11-05
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 025722a4866cf..15b834f756341 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-11-03
+date: 2024-11-05
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 a8961ece7fa41..98a47af890943 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-11-03
+date: 2024-11-05
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 5d099345bc4e4..cc46f0d874345 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-11-03
+date: 2024-11-05
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 1b50e699a950b..161c4d1e50f48 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-11-03
+date: 2024-11-05
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 cc6de976073a5..85b8cfafdadac 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-11-03
+date: 2024-11-05
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 5014f71decba8..d2f44485e7a7f 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-11-03
+date: 2024-11-05
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 f64b76ff273be..c6319a4ea7429 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-11-03
+date: 2024-11-05
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 e50f7e3a32f8c..510ade3df9ba5 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-11-03
+date: 2024-11-05
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 65665e15920c0..6ef14184c25cb 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-11-03
+date: 2024-11-05
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 429c4413038a5..4250e845d0609 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-11-03
+date: 2024-11-05
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 2ee1a68d217c7..41be784933754 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-11-03
+date: 2024-11-05
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 f1c008e21771b..d31c0a34e4e2d 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-11-03
+date: 2024-11-05
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 a85455a63007a..da75322856915 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-11-03
+date: 2024-11-05
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 47c6afe0c9078..a1bc6b3c5d26b 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-11-03
+date: 2024-11-05
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 1cb7082d3f13c..ef2ad79631e21 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-11-03
+date: 2024-11-05
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 87f44768fb354..2e6459fee44e0 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-11-03
+date: 2024-11-05
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 545a91a232c09..c2f5c7b4a6d5a 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-11-03
+date: 2024-11-05
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 62bfb17756c68..5004cf28f8ac8 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-11-03
+date: 2024-11-05
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 1bdb9f3cba350..50a0f783d0e7c 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-11-03
+date: 2024-11-05
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 253a99ac9cc86..bf0bdc7ddb516 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-11-03
+date: 2024-11-05
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ai-assistant-common']
---
import kbnAiAssistantCommonObj from './kbn_ai_assistant_common.devdocs.json';
diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx
index 627e44b543b06..69b9efacb6a40 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-11-03
+date: 2024-11-05
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 3ac6d4ff05009..6bf8c7b2f32e3 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-11-03
+date: 2024-11-05
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 4a2fd77f7c023..75f85b2e4589d 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-11-03
+date: 2024-11-05
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 32d7f4c3c3a09..ac12e11469a6a 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-11-03
+date: 2024-11-05
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 4feaa49a17150..7a466ff9e04a7 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-11-03
+date: 2024-11-05
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 9dedba43b99a2..7d99e21f1fa46 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-11-03
+date: 2024-11-05
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 02d7a63ad4aef..3938fbbfa594f 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-11-03
+date: 2024-11-05
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 b9a697028fc57..050a127ec9c7f 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-11-03
+date: 2024-11-05
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 b06448de811ac..865311c497aa3 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-11-03
+date: 2024-11-05
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 33728bc9dc136..58438314f8a86 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-11-03
+date: 2024-11-05
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 e1ef3af249dcf..d8b4928eadef6 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-11-03
+date: 2024-11-05
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 aa70a949ae957..02a036a6e0853 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-11-03
+date: 2024-11-05
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 bc467fe171284..1c7460fe378cb 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-11-03
+date: 2024-11-05
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 2cec1ed1b98fb..abe04d9df84d6 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-11-03
+date: 2024-11-05
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 c1f2631dea746..5de6c9ef073e9 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-11-03
+date: 2024-11-05
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 011db1c669dce..6cbd9b9e1ae53 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-11-03
+date: 2024-11-05
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 a9cc8797c76ee..8d63bdfb06505 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-11-03
+date: 2024-11-05
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 c7fe77b8500fc..f5e7153bc06d7 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-11-03
+date: 2024-11-05
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 89634d84f7083..70ea4af44630b 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-11-03
+date: 2024-11-05
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 ba94431c3fcb8..345030e3a3367 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-11-03
+date: 2024-11-05
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/axe-config']
---
import kbnAxeConfigObj from './kbn_axe_config.devdocs.json';
diff --git a/api_docs/kbn_bfetch_error.mdx b/api_docs/kbn_bfetch_error.mdx
index 617d6de6e404d..8c91cf2492cda 100644
--- a/api_docs/kbn_bfetch_error.mdx
+++ b/api_docs/kbn_bfetch_error.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-bfetch-error
title: "@kbn/bfetch-error"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/bfetch-error plugin
-date: 2024-11-03
+date: 2024-11-05
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/bfetch-error']
---
import kbnBfetchErrorObj from './kbn_bfetch_error.devdocs.json';
diff --git a/api_docs/kbn_calculate_auto.mdx b/api_docs/kbn_calculate_auto.mdx
index 3d74ed796e14b..1a2c9db3ab4ac 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-11-03
+date: 2024-11-05
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 7be9a90168203..f3aeefe61eefd 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-11-03
+date: 2024-11-05
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 1f8589fca306c..517ad1d81b596 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-11-03
+date: 2024-11-05
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 f7d9793353d73..ef097c72cbddb 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-11-03
+date: 2024-11-05
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 9b3c87999f21f..315204a50b0db 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-11-03
+date: 2024-11-05
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 a5bfe8c00fd53..c6f0d947d57c0 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-11-03
+date: 2024-11-05
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 5fd76e6b84b70..81ad4cca13a91 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-11-03
+date: 2024-11-05
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/chart-icons']
---
import kbnChartIconsObj from './kbn_chart_icons.devdocs.json';
diff --git a/api_docs/kbn_ci_stats_core.mdx b/api_docs/kbn_ci_stats_core.mdx
index 345dd8f726d6f..6ab31a81559b6 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-11-03
+date: 2024-11-05
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 6504abc10a917..fb2cd367d726f 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-11-03
+date: 2024-11-05
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 9c9e0a68350c6..c14b10e7e0011 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-11-03
+date: 2024-11-05
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 a5419f6b76c60..eb21eca60b779 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-11-03
+date: 2024-11-05
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 2f7c14ebd137e..a735474872de6 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-11-03
+date: 2024-11-05
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 9a8c59fb382e0..fa1e5919f46ee 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-11-03
+date: 2024-11-05
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 0b4305e277b00..c50bb068f6827 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-11-03
+date: 2024-11-05
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 e5d7b17ac0165..d96d3f80c74cd 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-11-03
+date: 2024-11-05
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 1cc99f165a432..c7a9581966097 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-11-03
+date: 2024-11-05
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 7b6bc3c9dec39..cfc8000891d8d 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-11-03
+date: 2024-11-05
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 b0714737c300b..c4aac5800aa80 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-11-03
+date: 2024-11-05
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 b5efec6765997..2702a9fd5f6e9 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-11-03
+date: 2024-11-05
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 b459f3e4ea7ec..ed8a9789e3049 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-11-03
+date: 2024-11-05
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 83e7fa6614d00..d94f1ff13af97 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-11-03
+date: 2024-11-05
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 cd3598815bcfb..c27a84a82ef77 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-11-03
+date: 2024-11-05
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 59966f66e738b..0d3add8edccf4 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-11-03
+date: 2024-11-05
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 ac0ea6d5358e1..dcd23130af765 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-11-03
+date: 2024-11-05
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-insights-server']
---
import kbnContentManagementContentInsightsServerObj from './kbn_content_management_content_insights_server.devdocs.json';
diff --git a/api_docs/kbn_content_management_favorites_public.mdx b/api_docs/kbn_content_management_favorites_public.mdx
index d30acbdef8d01..28d48a25c9e00 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-11-03
+date: 2024-11-05
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 7632cc396940b..c7ca7c39de4c2 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-11-03
+date: 2024-11-05
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 d8174760fca70..2518aeabf2560 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-11-03
+date: 2024-11-05
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 a2c69d22ffb93..92c217e454071 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-11-03
+date: 2024-11-05
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 1cd5dbf5a1e6d..6db246664d2ab 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-11-03
+date: 2024-11-05
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 ab857e90954e8..f96dfc69eb6b2 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-11-03
+date: 2024-11-05
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 c06ce848b1e5c..c6e62819c9c52 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-11-03
+date: 2024-11-05
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 e8ada8de29443..69a8d9f7e9aaf 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-11-03
+date: 2024-11-05
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 817c484edc6f2..3fbe56fe0cb89 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-11-03
+date: 2024-11-05
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 6a3d34f7ebba2..d8c140ecc82d9 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-11-03
+date: 2024-11-05
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 d3c586ba2c5fe..92b9284c46275 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-11-03
+date: 2024-11-05
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 4499e60f58af5..8e7967053c0cc 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-11-03
+date: 2024-11-05
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 39d1b7f43b4ff..b959c5e140ecd 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-11-03
+date: 2024-11-05
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 796a139e1dc2a..ccebe9d980a83 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-11-03
+date: 2024-11-05
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 da4bbb209648f..18c329859b443 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-11-03
+date: 2024-11-05
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 fdcd58c799f2d..831f49645ed1b 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-11-03
+date: 2024-11-05
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 1304128ac4102..b6e40c468c53c 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-11-03
+date: 2024-11-05
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 ce7472201e8aa..e5051164644d5 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-11-03
+date: 2024-11-05
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 32edd5923d5f1..fc1b41e732e65 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-11-03
+date: 2024-11-05
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 71eadc57df575..eed8546dffc74 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-11-03
+date: 2024-11-05
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 0d8d3e693e52d..ece67b7da94a3 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-11-03
+date: 2024-11-05
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 5cff512d8848c..10323744150cc 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-11-03
+date: 2024-11-05
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 4b0fa4cb9d236..60baa95846623 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-11-03
+date: 2024-11-05
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 eb1704f3c08b3..778cc1ebd4eb1 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-11-03
+date: 2024-11-05
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 a3a3eda66f45c..ba20297680269 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-11-03
+date: 2024-11-05
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 e030930c74d37..ceed04d90795e 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-11-03
+date: 2024-11-05
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 7c89d5d0278f0..91d4d279bf172 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-11-03
+date: 2024-11-05
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 42db7f5dbcc2b..bd359f6706587 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-11-03
+date: 2024-11-05
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 bcab3a0ec5996..8ab2495699f2d 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-11-03
+date: 2024-11-05
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 2b57efc5509d9..99633ad5c448d 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-11-03
+date: 2024-11-05
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 17bcac88c638e..2cb6786a02040 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-11-03
+date: 2024-11-05
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 15f81a0a294be..d9d619ed48aa7 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-11-03
+date: 2024-11-05
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 1e21421872d62..7981c7b5d0cf0 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-11-03
+date: 2024-11-05
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 3719ccdd23c9e..8d8fff22f076c 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-11-03
+date: 2024-11-05
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 97777c7fc11a6..6835256a88415 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-11-03
+date: 2024-11-05
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 761095947d5b7..ce3cc0bdae9bf 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-11-03
+date: 2024-11-05
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 6e9379cf9a7ab..adee2c9b5abae 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-11-03
+date: 2024-11-05
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 bd942d1ae98ba..b8adad7c595e5 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-11-03
+date: 2024-11-05
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 f4a89ee6b6ba9..9c5ab8625eea8 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-11-03
+date: 2024-11-05
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 d5f6f2e94e95b..fcbb5468a36d7 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-11-03
+date: 2024-11-05
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 e2b09e79a3422..376a530f4ba10 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-11-03
+date: 2024-11-05
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 67ee81bcea539..07271f012d139 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-11-03
+date: 2024-11-05
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 6a7c6af80ac5b..879be3d22adba 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-11-03
+date: 2024-11-05
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 9c0a9434a1c5f..863fcf9fbb44d 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-11-03
+date: 2024-11-05
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 e7bf57eec988e..0f0e87b13b028 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-11-03
+date: 2024-11-05
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 e59795f442791..9641ffc9fcf23 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-11-03
+date: 2024-11-05
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 044a5910b73cf..0552e4497d7e7 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-11-03
+date: 2024-11-05
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 1e0b8143cdbe7..1d61222897f85 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-11-03
+date: 2024-11-05
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 293c9daad1e46..d2cf59f10abb7 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-11-03
+date: 2024-11-05
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 02c8e1ec8805e..003bcb53bb579 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-11-03
+date: 2024-11-05
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 9545798a71645..46b9d6127d339 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-11-03
+date: 2024-11-05
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 e1585c1858ffc..611a2c9790245 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-11-03
+date: 2024-11-05
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 8d9bfbdba122f..0e7068bbddfc6 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-11-03
+date: 2024-11-05
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 b534ea1082acc..79794d3eb0d84 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-11-03
+date: 2024-11-05
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 db865b611d1a3..7640b5f0c0b29 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-11-03
+date: 2024-11-05
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 1327d095cc50d..ebb9ac89dbca4 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-11-03
+date: 2024-11-05
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 d913ff3d71aea..df14d0335e664 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-11-03
+date: 2024-11-05
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 2a5d27bac4f88..46d90613dfb75 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-11-03
+date: 2024-11-05
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 da413225fcf97..54c4296c26748 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-11-03
+date: 2024-11-05
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 ff258234fe79b..44a9381616546 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-11-03
+date: 2024-11-05
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 1328bca46a00d..9b0e1d7cd2511 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-11-03
+date: 2024-11-05
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 642ed9908535d..fadb0ff75230a 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-11-03
+date: 2024-11-05
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 b0771e6e93730..9133efd54092d 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-11-03
+date: 2024-11-05
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 8f180f4f9a31c..98835744bb91a 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-11-03
+date: 2024-11-05
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 d3d9fe35628dd..d904279e0c57e 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-11-03
+date: 2024-11-05
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 b042138eb05c3..f902f5e832ab1 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-11-03
+date: 2024-11-05
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 636ad0c78805b..285dc9ee6b74a 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-11-03
+date: 2024-11-05
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 ab9d04c2612f9..9a1f6d3bc2283 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-11-03
+date: 2024-11-05
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 c5e786998cd00..c27a0194df375 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-11-03
+date: 2024-11-05
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 c92e3b578eade..e84893c655dac 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-11-03
+date: 2024-11-05
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 3a6dfe415acbc..91d2b69f5c059 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-11-03
+date: 2024-11-05
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 1220a8ddafd8b..aa8218e1896dd 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-11-03
+date: 2024-11-05
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 e5a0477574a71..80786b66ed41b 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-11-03
+date: 2024-11-05
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 d1c376e00b622..66dda94404091 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-11-03
+date: 2024-11-05
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 b0924cff79943..f18bb15fb2e3a 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-11-03
+date: 2024-11-05
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 592d65b6f7e6f..b30d645984752 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-11-03
+date: 2024-11-05
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 d0f6ee5c2869a..135f59ee2c748 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-11-03
+date: 2024-11-05
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 c14d63208cea7..b6a13821b72f8 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-11-03
+date: 2024-11-05
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 42d9a53e71f5f..1ded0859657aa 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-11-03
+date: 2024-11-05
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 9ccaa6c398abc..2dae0698964ee 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-11-03
+date: 2024-11-05
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 04363833fe4bc..69560e373e231 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-11-03
+date: 2024-11-05
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 811d78464721f..df4482c982cb1 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-11-03
+date: 2024-11-05
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 1084a401cb6f7..8719d9f09c51d 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-11-03
+date: 2024-11-05
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 dc9f80e66137b..6ba5c45d4db60 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-11-03
+date: 2024-11-05
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 fc0b6bed39305..cb1bdc95d4b47 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-11-03
+date: 2024-11-05
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 0eac671365ce5..2da1a3ec6027f 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-11-03
+date: 2024-11-05
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-mocks']
---
import kbnCoreHttpServerMocksObj from './kbn_core_http_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_i18n_browser.mdx b/api_docs/kbn_core_i18n_browser.mdx
index 83b5a100219f0..74b2073532ff9 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-11-03
+date: 2024-11-05
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 50de96a02a025..be676dc05245a 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-11-03
+date: 2024-11-05
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 56e7fd4bfc7ee..f2ff9bdb6e36c 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-11-03
+date: 2024-11-05
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 d532164959326..4b9f881a44f69 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-11-03
+date: 2024-11-05
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 510b334e49b36..7db15480d225c 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-11-03
+date: 2024-11-05
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 429a7e0d8166b..1b458340d2486 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-11-03
+date: 2024-11-05
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 e357a4c2a1c0f..e0f1dfdc61cd0 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-11-03
+date: 2024-11-05
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 64b2346fafcac..1ef72819a8099 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-11-03
+date: 2024-11-05
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 b61acb6e2ad5b..b83b929721599 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-11-03
+date: 2024-11-05
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 6ff3d50fd7264..667cda6fb6215 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-11-03
+date: 2024-11-05
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 6bfc57433d3d5..9e859972cbdc0 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-11-03
+date: 2024-11-05
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 3ac0ac8133154..1f063ac85cd29 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-11-03
+date: 2024-11-05
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 40b3cda770c19..b56ce1ecf29c2 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-11-03
+date: 2024-11-05
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 b4dac584b4c4f..adb44256bf9a9 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-11-03
+date: 2024-11-05
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 a6eb32d7139fd..718808bc8fd89 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-11-03
+date: 2024-11-05
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 da5d054eb4baa..d4dd90326defb 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-11-03
+date: 2024-11-05
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 eddc430b82760..c27b62fb2e3c6 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-11-03
+date: 2024-11-05
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 e65aa17707f59..5ca7af963f4c2 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-11-03
+date: 2024-11-05
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 58f18d80c3bb1..007b09e41fac6 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-11-03
+date: 2024-11-05
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 c838253c7c1fb..c0997045ceaae 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-11-03
+date: 2024-11-05
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 2e22cc3e916b2..74c7ddb144e80 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-11-03
+date: 2024-11-05
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 657e068f09672..0e7a80c1985d8 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-11-03
+date: 2024-11-05
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 fce88fa242491..4fd14dcf4534f 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-11-03
+date: 2024-11-05
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 770be49eda734..fb5abd4950149 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-11-03
+date: 2024-11-05
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 ff49a78d53041..55dc181d76880 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-11-03
+date: 2024-11-05
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 2df0a80a888c9..b7df422cfe3bf 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-11-03
+date: 2024-11-05
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 56f9d935c5590..6475bac99b4a5 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-11-03
+date: 2024-11-05
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 e63ede61e4242..51d16b8a9149d 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-11-03
+date: 2024-11-05
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 767124d026ac5..2e944a848f543 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-11-03
+date: 2024-11-05
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 828e98f503fd6..d38137bd5fc51 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-11-03
+date: 2024-11-05
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 6f4679f53697b..444e3c48b2d1d 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-11-03
+date: 2024-11-05
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 8036cead8d1ce..e7c50095f7605 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-11-03
+date: 2024-11-05
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 f53569aa9a570..bae4b985218f4 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-11-03
+date: 2024-11-05
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 72b240d5d8a32..05c0d97005368 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-11-03
+date: 2024-11-05
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 2d707ca9ff117..e7ecafc0935ad 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-11-03
+date: 2024-11-05
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 367c9a0ef44f5..748c8975ea5e1 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-11-03
+date: 2024-11-05
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 cc1f0a19294c3..b45e16a0b2b8f 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-11-03
+date: 2024-11-05
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 8c54fe929190b..8d99aa9770eeb 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-11-03
+date: 2024-11-05
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 45c88e84c20aa..d8859f3808c8c 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-11-03
+date: 2024-11-05
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 44db060a96025..b88d84b4903d4 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-11-03
+date: 2024-11-05
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-preboot-server-mocks']
---
import kbnCorePrebootServerMocksObj from './kbn_core_preboot_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_rendering_browser_mocks.mdx b/api_docs/kbn_core_rendering_browser_mocks.mdx
index dd315a3adceb1..2172f06678a02 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-11-03
+date: 2024-11-05
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 336a2c915fdab..eb8583c74de08 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-11-03
+date: 2024-11-05
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 0232153b2ea6d..2b1466e7bcbfc 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-11-03
+date: 2024-11-05
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 4abc7915c35f1..1921754e3de5f 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-11-03
+date: 2024-11-05
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 c755f5027b961..939135f9971d0 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-11-03
+date: 2024-11-05
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 d223f12b7460a..ce839d7769549 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-11-03
+date: 2024-11-05
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 781f5f3627f11..b55660ed8f279 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-11-03
+date: 2024-11-05
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 18f403c3ee6d4..e8fd0678aed29 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-11-03
+date: 2024-11-05
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 8b3c7a3e0ce57..763a7de132e4d 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-11-03
+date: 2024-11-05
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 efe5f96c3c369..df898fd75958e 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-11-03
+date: 2024-11-05
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 4b67a06f2a1b8..df6518c1bcebe 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-11-03
+date: 2024-11-05
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 201ea7512af6d..a2d2801a77323 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-11-03
+date: 2024-11-05
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 945420aa7d2de..894f50be83ebd 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-11-03
+date: 2024-11-05
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 43833af2b30f2..a34b28a867b01 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-11-03
+date: 2024-11-05
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 67f27bf393a01..4447d3fab92a0 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-11-03
+date: 2024-11-05
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 6ea7824d2cf74..614fd45e1f9e3 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-11-03
+date: 2024-11-05
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 ffc932d56c3dd..d795ecd2811fd 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-11-03
+date: 2024-11-05
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 9b22e7297c321..fc280bfdd6ca3 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-11-03
+date: 2024-11-05
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 9800f5165b073..afafb032030f2 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-11-03
+date: 2024-11-05
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 eb339531410b4..59a29ad072677 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-11-03
+date: 2024-11-05
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 7aeac238b9d4d..0efe11962ef89 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-11-03
+date: 2024-11-05
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 7750df9402d8e..5e344dd791047 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-11-03
+date: 2024-11-05
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 1ec882e7ca5ba..39dff54b2bb35 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-11-03
+date: 2024-11-05
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 c96d9386c3a45..d888846743061 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-11-03
+date: 2024-11-05
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 b3de3dab5c786..4b04c40416e1f 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-11-03
+date: 2024-11-05
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 fe711bdca08e6..fe8c488929631 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-11-03
+date: 2024-11-05
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 f3ed4b085a245..5fceb18879350 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-11-03
+date: 2024-11-05
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 64024b55c8226..8b9330c72cc7e 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-11-03
+date: 2024-11-05
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 8a2d64ac02869..f63b094e6ad7c 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-11-03
+date: 2024-11-05
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-common']
---
import kbnCoreStatusCommonObj from './kbn_core_status_common.devdocs.json';
diff --git a/api_docs/kbn_core_status_common_internal.mdx b/api_docs/kbn_core_status_common_internal.mdx
index 1057b9baa51a3..717b069630f68 100644
--- a/api_docs/kbn_core_status_common_internal.mdx
+++ b/api_docs/kbn_core_status_common_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common-internal
title: "@kbn/core-status-common-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-status-common-internal plugin
-date: 2024-11-03
+date: 2024-11-05
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-common-internal']
---
import kbnCoreStatusCommonInternalObj from './kbn_core_status_common_internal.devdocs.json';
diff --git a/api_docs/kbn_core_status_server.mdx b/api_docs/kbn_core_status_server.mdx
index 68437619f5ed4..a51277e1d3a49 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-11-03
+date: 2024-11-05
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 a42a4d83e6d28..444b82671c712 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-11-03
+date: 2024-11-05
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 44a1a6e51df75..3158b1b1349c6 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-11-03
+date: 2024-11-05
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 661b4f1502b50..d7d00ffaaf55a 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-11-03
+date: 2024-11-05
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 693fc1c2e1224..c6cca95ca8352 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-11-03
+date: 2024-11-05
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 b103b4d15d63e..8db368d51d3da 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-11-03
+date: 2024-11-05
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 f2fee6ccb1c1d..5434a44577afd 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-11-03
+date: 2024-11-05
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 b6811533467d9..9ef841a1e6891 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-11-03
+date: 2024-11-05
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 9f41d87090a7e..e499ff1b5819f 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-11-03
+date: 2024-11-05
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 ad41574bfa449..bea0dfa52b15a 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-11-03
+date: 2024-11-05
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 2478515f7795b..b23b4efdb681d 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-11-03
+date: 2024-11-05
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 3f4de67e994d3..4960c9d5a2582 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-11-03
+date: 2024-11-05
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 56508a08eb445..30e7fb2a2dfe2 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-11-03
+date: 2024-11-05
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 33e1d14ac2d36..0b9ec9af368f4 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-11-03
+date: 2024-11-05
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 ae9a3d430df31..6fda6f1f41510 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-11-03
+date: 2024-11-05
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 113029b122627..91f1497d4a7f0 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-11-03
+date: 2024-11-05
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 176a89798f4a9..e35b13f059cdf 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-11-03
+date: 2024-11-05
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 1a5ae77b98cdf..d15b6aec58c09 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-11-03
+date: 2024-11-05
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 0c0873a3bf99b..f7d38e1c8fbf2 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-11-03
+date: 2024-11-05
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 e65489a7a8e7a..921f6a6f17600 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-11-03
+date: 2024-11-05
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 6629dec623c1f..2b65f8d0290ed 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-11-03
+date: 2024-11-05
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 43949a3dbfdbd..641d42b8b3fcd 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-11-03
+date: 2024-11-05
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 92fe287a7db6a..061c118f5c64e 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-11-03
+date: 2024-11-05
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 56fe81fa055b2..c58812d6cde34 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-11-03
+date: 2024-11-05
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 3e7b37bf0d3b6..d69496a17206d 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-11-03
+date: 2024-11-05
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 1177664d89c2c..2e33a944773c1 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-11-03
+date: 2024-11-05
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 a8a3c336da6b3..6709c228d2933 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-11-03
+date: 2024-11-05
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 75edd38922c6b..7a6a687d16336 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-11-03
+date: 2024-11-05
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 1132d34f5703e..18d74fbad5d37 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-11-03
+date: 2024-11-05
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 f6dd30a005eb6..33695332ae657 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-11-03
+date: 2024-11-05
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 9a0943e513023..9ecb9d49fbbb1 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-11-03
+date: 2024-11-05
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 7dbdcdba0ce14..c65653a4f5b39 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-11-03
+date: 2024-11-05
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 f03d9502bf08e..aa64562475335 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-11-03
+date: 2024-11-05
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 bba53539f6eac..1ddf803fc346e 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-11-03
+date: 2024-11-05
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 7b69e5842b18f..13bad6f463d96 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-11-03
+date: 2024-11-05
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 55475ce173e4c..18b938a4ceafc 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-11-03
+date: 2024-11-05
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 4602a206806b7..e30bf8f40ea8c 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-11-03
+date: 2024-11-05
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 0bb859672255c..acd49bb1c9c3c 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-11-03
+date: 2024-11-05
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 6e58b62f005fa..4dd5a7c70687f 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-11-03
+date: 2024-11-05
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 f17be3e8bce27..b64177f3aa1ef 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-11-03
+date: 2024-11-05
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 93bc6467cd13d..f153840fd9a5b 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-11-03
+date: 2024-11-05
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 899e43067097e..a04f96d4495b7 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-11-03
+date: 2024-11-05
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 37ba883c9ba1a..4c1d88110dd29 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-11-03
+date: 2024-11-05
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 66fb016211271..b9a42ee5d6c72 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-11-03
+date: 2024-11-05
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 2cec5a0b4a766..b40dfc2d05b5e 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-11-03
+date: 2024-11-05
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 331b6050e0b07..4c09fc62f297c 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-11-03
+date: 2024-11-05
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 e5eb921bb2e27..e30c4ba755528 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-11-03
+date: 2024-11-05
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 411d9afbd91ac..0bc0c75772836 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-11-03
+date: 2024-11-05
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 30df2a5b97eac..c1dd02ede7f8c 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-11-03
+date: 2024-11-05
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 7ba8fca2cb2d0..88d7e4eab49b1 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-11-03
+date: 2024-11-05
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 b4019b3b5db07..6f7a316ba6e5e 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-11-03
+date: 2024-11-05
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 c89b3511a758e..adeba017b974e 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-11-03
+date: 2024-11-05
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 445fd253d032a..ad07159e4a6d3 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-11-03
+date: 2024-11-05
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 d59995166f2e2..c1dc9f3b4c67f 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-11-03
+date: 2024-11-05
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 8b0829d3a1a00..6c349754cd0d4 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-11-03
+date: 2024-11-05
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 da9ae4250445b..affb84e133f69 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-11-03
+date: 2024-11-05
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 4a07e27a3c040..d3be92557402b 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-11-03
+date: 2024-11-05
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 6867ec2510890..43741f228b63a 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-11-03
+date: 2024-11-05
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 901d3d490a700..077389bd3e85d 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-11-03
+date: 2024-11-05
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 894105cf13952..dd5b3fd15c356 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-11-03
+date: 2024-11-05
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 f0b148567ff36..3403895e4f557 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-11-03
+date: 2024-11-05
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 2702531403f11..ccfcb07db1a67 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-11-03
+date: 2024-11-05
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 b82d6798c186c..49c9e7174ea51 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-11-03
+date: 2024-11-05
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 1d3da5d2aa8ef..bdba3a8a40552 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-11-03
+date: 2024-11-05
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 465003a47f855..344a50712f427 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-11-03
+date: 2024-11-05
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 a5401fbcac74f..a798bf55dfcbd 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-11-03
+date: 2024-11-05
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 bf5949172a55c..7dd53c9a6e12f 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-11-03
+date: 2024-11-05
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 b9979fac7d3d8..38e018b197d02 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-11-03
+date: 2024-11-05
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 927cd101241e8..64c88a31a9141 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-11-03
+date: 2024-11-05
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 340d8ec63478a..4fd0bddee77dc 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-11-03
+date: 2024-11-05
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 d4e21460f6b4f..1215a2044ab96 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-11-03
+date: 2024-11-05
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 15c99c6bf809b..77243315d5502 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-11-03
+date: 2024-11-05
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 632aeb5671af7..10da4a8198033 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-11-03
+date: 2024-11-05
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 5747292f2c590..75e22b9832954 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-11-03
+date: 2024-11-05
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 9bf5a7c6f51ed..d0396d3a27b20 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-11-03
+date: 2024-11-05
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 5659b764ff728..faf4f4334fb3a 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-11-03
+date: 2024-11-05
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 bca306acf24b4..8b751f0cfe12f 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-11-03
+date: 2024-11-05
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 6c710a7aa49c5..f88883601f019 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-11-03
+date: 2024-11-05
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 2b12716b66814..a5b42c806e225 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-11-03
+date: 2024-11-05
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 1a51d1040b41f..9d3688691f294 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-11-03
+date: 2024-11-05
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 c56e243ae711f..e3c5ce3e147d7 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-11-03
+date: 2024-11-05
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 c7529d970030b..0855785dc7caf 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-11-03
+date: 2024-11-05
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 7d9115b4887eb..16363a179caf8 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-11-03
+date: 2024-11-05
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 481b6a1d284bc..3ad5ed6198db5 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-11-03
+date: 2024-11-05
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 99d87e97070e5..9729d5c0a45e3 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-11-03
+date: 2024-11-05
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 eec2a571d5d36..269f132d8adf5 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-11-03
+date: 2024-11-05
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 3306c9795c316..8b3bd0de28eb2 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-11-03
+date: 2024-11-05
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-ui-services']
---
import kbnFtrCommonFunctionalUiServicesObj from './kbn_ftr_common_functional_ui_services.devdocs.json';
diff --git a/api_docs/kbn_generate.mdx b/api_docs/kbn_generate.mdx
index f0afa1eda6503..be114f8da4d22 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-11-03
+date: 2024-11-05
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 eb63bbaf11f08..917e28a54505f 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-11-03
+date: 2024-11-05
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 02a224c014d81..670b0500e0599 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-11-03
+date: 2024-11-05
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 8f1e18b40d9b1..0b74d30ac6bc5 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-11-03
+date: 2024-11-05
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 c004cac0b227a..f8ae6f8a12498 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-11-03
+date: 2024-11-05
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 a2613f1787225..52c84e611789f 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-11-03
+date: 2024-11-05
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 a329af3011ab2..b18e62fbc5a70 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-11-03
+date: 2024-11-05
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 66f2c8d7b0ebc..834f02dfae821 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-11-03
+date: 2024-11-05
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 5ebb8e9a2c8fb..c413a143b7158 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-11-03
+date: 2024-11-05
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 a5f6190bfbd27..e7d02c9808f6a 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-11-03
+date: 2024-11-05
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 7d297ed6addf2..14d3c9808799f 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-11-03
+date: 2024-11-05
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 7130364f48245..2bbd69c69e716 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-11-03
+date: 2024-11-05
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 23187d49ff8b8..19852b063e8f9 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-11-03
+date: 2024-11-05
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 18c26f3d73cbc..ea1aed87b262a 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-11-03
+date: 2024-11-05
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver']
---
import kbnImportResolverObj from './kbn_import_resolver.devdocs.json';
diff --git a/api_docs/kbn_index_management_shared_types.mdx b/api_docs/kbn_index_management_shared_types.mdx
index 707fa999972e4..37b896018af11 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-11-03
+date: 2024-11-05
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 004113fd60340..1169da2685c52 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-11-03
+date: 2024-11-05
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 ef3b4c76d2eab..1832b87f74402 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-11-03
+date: 2024-11-05
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 f147d6ba87818..8f8a8073d7291 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-11-03
+date: 2024-11-05
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 af293fff9638c..10febd823c2f5 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-11-03
+date: 2024-11-05
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 e72e261834945..651519d2db9c0 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-11-03
+date: 2024-11-05
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 f9e4c2c25751a..4c503ccbeb3a7 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-11-03
+date: 2024-11-05
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 fbcb567ac44a1..5556907f40036 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-11-03
+date: 2024-11-05
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 60ab55c256c31..5e22882c74490 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-11-03
+date: 2024-11-05
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 c68643de9dbc7..a3a71c439bee0 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-11-03
+date: 2024-11-05
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 65845c964ab4d..afedbb6c915a5 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-11-03
+date: 2024-11-05
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 13b7d4f733a67..32f7b331e2449 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-11-03
+date: 2024-11-05
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 6c968cb61d051..aaa22be8f62a2 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-11-03
+date: 2024-11-05
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 f53c87ac20596..b23761eb34109 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-11-03
+date: 2024-11-05
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 b5acb66a5c936..57a0baf2102e1 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-11-03
+date: 2024-11-05
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 644c8b4068192..3c948e412acaf 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-11-03
+date: 2024-11-05
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 59326214e893e..4e44956f0ba0b 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-11-03
+date: 2024-11-05
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 a445c58805047..d43491eae3b84 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-11-03
+date: 2024-11-05
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 5ee212212f5cf..cb6c14a364238 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-11-03
+date: 2024-11-05
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 4d29a0e3d7004..d0a60e4fe9ac3 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-11-03
+date: 2024-11-05
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 7fd663671fa58..9dfd7733881c3 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-11-03
+date: 2024-11-05
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 39b29bbb967ec..16bcc2e5dd33b 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-11-03
+date: 2024-11-05
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 94e7ca43d8d1b..743240119df83 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-11-03
+date: 2024-11-05
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 672247dfba081..9f90b3cd5eb3f 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-11-03
+date: 2024-11-05
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 ffa3a3c12efcc..88931144ff307 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-11-03
+date: 2024-11-05
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 42d85e9dcdd87..e0581c08ca15b 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-11-03
+date: 2024-11-05
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 689384b04e34e..4bf5378ce879a 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-11-03
+date: 2024-11-05
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 2d146fb2fa7b1..7d8949fbf19a6 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-11-03
+date: 2024-11-05
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 20e7613462d17..ce49939c667ca 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-11-03
+date: 2024-11-05
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 9ba949c890970..cdcbcfbe74cd1 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-11-03
+date: 2024-11-05
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 b177a2e5804ed..f70c108dad146 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-11-03
+date: 2024-11-05
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 5abc2954e8850..5397decd1e5b8 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-11-03
+date: 2024-11-05
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 3411eb3312e72..6d6d688b0feb5 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-11-03
+date: 2024-11-05
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 25fb01c43725c..ac79087e64a56 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-11-03
+date: 2024-11-05
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 b6f41a2cd01fd..d53547152f2b3 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-11-03
+date: 2024-11-05
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 4c0a64cbd6b79..ac01cb9a707ca 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-11-03
+date: 2024-11-05
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 eb1c2866a843f..c88164faa08db 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-11-03
+date: 2024-11-05
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 d6d7e5793e61c..c61a6d9396b6f 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-11-03
+date: 2024-11-05
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 8f904266b2211..41219d35a51eb 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-11-03
+date: 2024-11-05
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 9e1494bec9684..b0e26cbe61c76 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-11-03
+date: 2024-11-05
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 bbcde3a417f88..d521c3dfc3af3 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-11-03
+date: 2024-11-05
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 926873b716c2f..c9737443e8552 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-11-03
+date: 2024-11-05
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 3ef01bb2f4bc3..df850cb6dc8b6 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-11-03
+date: 2024-11-05
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 957f830b0ff1c..b027eb8883409 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-11-03
+date: 2024-11-05
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 329a07b23edac..48009b5fe5cdd 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-11-03
+date: 2024-11-05
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 8bf56f057fd94..e2c010f6fb55a 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-11-03
+date: 2024-11-05
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 27788553bcb47..f953a09822f1f 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-11-03
+date: 2024-11-05
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 c7c9bafdfde0a..add7e0eb480d1 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-11-03
+date: 2024-11-05
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 bbe200203304f..66bf390b25d9d 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-11-03
+date: 2024-11-05
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 d903f9e5e24f2..5cc4ab63dad89 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-11-03
+date: 2024-11-05
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 2318f0eaabb3d..95061301abaf9 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-11-03
+date: 2024-11-05
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 5699447b18712..fe97e9b147f59 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-11-03
+date: 2024-11-05
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 1f12de453b4e6..3e1557f46b02a 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-11-03
+date: 2024-11-05
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 b4b818ae15c3a..163ced1f156e1 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-11-03
+date: 2024-11-05
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 2a6e9aa53decf..342fd54cdbace 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-11-03
+date: 2024-11-05
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 bef2347cdec5e..24fa080254054 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-11-03
+date: 2024-11-05
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 d7110250fdb6f..3a3315719390d 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-11-03
+date: 2024-11-05
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 f5dc64678a132..5fc3b143b830a 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-11-03
+date: 2024-11-05
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 8a8f84fdacdc2..03885b113d560 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-11-03
+date: 2024-11-05
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 3ffa2cda03a71..1e1584f495dde 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-11-03
+date: 2024-11-05
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 6b940a29a7eba..3ad34b6eced4a 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-11-03
+date: 2024-11-05
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 e4f5394bd9f70..281becf363b47 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-11-03
+date: 2024-11-05
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 ef44aecd78b1f..9625e75e12c06 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-11-03
+date: 2024-11-05
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 36dd2a2f35fa9..77fce539ca910 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-11-03
+date: 2024-11-05
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 c5a628e37b4ed..b135bb7a4237d 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-11-03
+date: 2024-11-05
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 943bb0fac3cd9..d66d7881f7da4 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-11-03
+date: 2024-11-05
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 e8a7d7dbf6285..d04f198f14464 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-11-03
+date: 2024-11-05
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 422363034016c..2d1b7030a01ee 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-11-03
+date: 2024-11-05
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 2264b6cca1171..113de46fe1329 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-11-03
+date: 2024-11-05
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 97ee00f566dc5..f76504a941c9e 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-11-03
+date: 2024-11-05
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 bee1d335f700f..0d2a46bc2b65e 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-11-03
+date: 2024-11-05
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 bc2da3b01c406..b8dfa4e440b2e 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-11-03
+date: 2024-11-05
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 983861bf954c6..15ae84656d068 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-11-03
+date: 2024-11-05
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 05b0cbe7f0183..9c197e418ff57 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-11-03
+date: 2024-11-05
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 b3a6017ff3f65..05d7ac32fae91 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-11-03
+date: 2024-11-05
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 6b62293e6b817..fb2d697cd597c 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-11-03
+date: 2024-11-05
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 0a207dbb7c7d1..00c526b723a81 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-11-03
+date: 2024-11-05
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 9c671f5583186..0b5cc24cbc725 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-11-03
+date: 2024-11-05
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 f278dc8b84de4..99427ef1f7db7 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-11-03
+date: 2024-11-05
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 1ebb2950a60d4..4f13ef20fe716 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-11-03
+date: 2024-11-05
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/osquery-io-ts-types']
---
import kbnOsqueryIoTsTypesObj from './kbn_osquery_io_ts_types.devdocs.json';
diff --git a/api_docs/kbn_panel_loader.mdx b/api_docs/kbn_panel_loader.mdx
index 65d6e89fd09d1..69889c9d2080b 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-11-03
+date: 2024-11-05
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 c1fab4f4cdbc7..eafc733ccfef1 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-11-03
+date: 2024-11-05
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 32cf464274625..6cc704aa52b6c 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-11-03
+date: 2024-11-05
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 5e7606d7b894d..63e756b19cba0 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-11-03
+date: 2024-11-05
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 231cbdf8d09d7..323ef1ffa0396 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-11-03
+date: 2024-11-05
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 8a3726634f886..f447e3ae3aac6 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-11-03
+date: 2024-11-05
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 36386d67d0a48..e0f3d80b96aea 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-11-03
+date: 2024-11-05
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 34908c646fbdb..1488fe46e0925 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-11-03
+date: 2024-11-05
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_profiling_utils.mdx b/api_docs/kbn_profiling_utils.mdx
index 0c94272cbde29..f0ba3e0c61955 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-11-03
+date: 2024-11-05
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 d1f63c425dc4f..d634cac4e99fe 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-11-03
+date: 2024-11-05
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 75f8ea7cbe08a..d8522a40b35f8 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-11-03
+date: 2024-11-05
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 d723f00fb01db..f649de8d93608 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-11-03
+date: 2024-11-05
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 c6405a3a59a75..8c25c7c530558 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-11-03
+date: 2024-11-05
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 04ab1f1f7a390..f454aaef242dc 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-11-03
+date: 2024-11-05
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 f59141e0def6e..0954404eae12d 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-11-03
+date: 2024-11-05
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 b6a6af46a3dd1..5fa52a54866e0 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-11-03
+date: 2024-11-05
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 b403b638cfd1f..89910ee7796f9 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-11-03
+date: 2024-11-05
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 3cdb3033b82c9..2c9306ef75cbf 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-11-03
+date: 2024-11-05
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-mount']
---
import kbnReactKibanaMountObj from './kbn_react_kibana_mount.devdocs.json';
diff --git a/api_docs/kbn_recently_accessed.mdx b/api_docs/kbn_recently_accessed.mdx
index 11c37688f6c2c..ee289e1cd58c4 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-11-03
+date: 2024-11-05
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/recently-accessed']
---
import kbnRecentlyAccessedObj from './kbn_recently_accessed.devdocs.json';
diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx
index bbe5a90e7a63c..7331260b401fe 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-11-03
+date: 2024-11-05
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 6aa3f6fc28c33..7ec7785a6effb 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-11-03
+date: 2024-11-05
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 5969f906b7317..a9747a9b0e572 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-11-03
+date: 2024-11-05
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 fa34164e83bc7..88ac7ca83d31b 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-11-03
+date: 2024-11-05
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 d49bba0cfad48..b25f9dbd19812 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-11-03
+date: 2024-11-05
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 54a0801b87083..deafd6eca3410 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-11-03
+date: 2024-11-05
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 3214a51ba978e..b7d392f58e92b 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-11-03
+date: 2024-11-05
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 6f767fd030fed..a39250899e514 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-11-03
+date: 2024-11-05
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 24d42312e3cfc..7aea183f13a21 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-11-03
+date: 2024-11-05
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 956d2a5445337..680d5fa288a7a 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-11-03
+date: 2024-11-05
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 ffab6ac27d2d2..e1f7c3e6c8eef 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-11-03
+date: 2024-11-05
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 84ee83e3739dc..773d60b965773 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-11-03
+date: 2024-11-05
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 092d0eb6ed883..1f5f2d4204682 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-11-03
+date: 2024-11-05
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 f9f61cceda497..58b7c8e1421e5 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-11-03
+date: 2024-11-05
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 d01886fc8511f..048dc326cfa47 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-11-03
+date: 2024-11-05
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 a24b6adcf0b14..9eca84bc13bb9 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-11-03
+date: 2024-11-05
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 17d54460b1bc2..bf556bcce6137 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-11-03
+date: 2024-11-05
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_params.mdx b/api_docs/kbn_response_ops_rule_params.mdx
index 454f3e6ef687c..59b8cdef48b02 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-11-03
+date: 2024-11-05
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 fefd1b54cde9a..3d89133516280 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-11-03
+date: 2024-11-05
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 db277ca34817c..b98a97774f4dc 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-11-03
+date: 2024-11-05
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 fc860df0d9172..de316c4feca18 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-11-03
+date: 2024-11-05
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 5ff4eb622f8b8..80ad761794f40 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-11-03
+date: 2024-11-05
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 c4a8dc6115280..577425e07bda8 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-11-03
+date: 2024-11-05
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 e70f3b7bf8107..82146a777a392 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-11-03
+date: 2024-11-05
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 d66a2935573da..662123daa7c2b 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-11-03
+date: 2024-11-05
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/saved-objects-settings']
---
import kbnSavedObjectsSettingsObj from './kbn_saved_objects_settings.devdocs.json';
diff --git a/api_docs/kbn_screenshotting_server.mdx b/api_docs/kbn_screenshotting_server.mdx
index 2fb2e148c0935..5caf1794708c0 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-11-03
+date: 2024-11-05
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 cbfd8ae689ac1..c76c3cfd671dd 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-11-03
+date: 2024-11-05
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 f81044a97b0e8..f87ac1ac5d3f9 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-11-03
+date: 2024-11-05
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 7c514fad9a367..42eff9498c7d8 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-11-03
+date: 2024-11-05
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 86763176050c5..b00c090593e42 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-11-03
+date: 2024-11-05
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 f54e38a72cccd..958d395bca64e 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-11-03
+date: 2024-11-05
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 0570f201164ff..2709014d56215 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-11-03
+date: 2024-11-05
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 b8272dbbd1b2c..070b8045c09fa 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-11-03
+date: 2024-11-05
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 3db5ff1a83215..637c17a6f4243 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-11-03
+date: 2024-11-05
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 a09c5ec0cb182..479347c00da88 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-11-03
+date: 2024-11-05
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 70ef99348fe51..049f8aceddd96 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-11-03
+date: 2024-11-05
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 a5a62dd7c51b0..b3b971c4817f3 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-11-03
+date: 2024-11-05
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 278199be76041..262eb832a38f9 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-11-03
+date: 2024-11-05
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 280382887c466..353a92458c02e 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-11-03
+date: 2024-11-05
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 34e37f7a95aca..026d20d5c4555 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-11-03
+date: 2024-11-05
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 b739c83f77b25..3548b21a9c206 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-11-03
+date: 2024-11-05
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 d99a01e1db2a5..235fc5b9f8bbb 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-11-03
+date: 2024-11-05
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 a093384ecc00a..2938e35c3ac70 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-11-03
+date: 2024-11-05
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 916e09c5a866b..79ac200947739 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-11-03
+date: 2024-11-05
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 4b4f10221a6de..ec2a244929f25 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-11-03
+date: 2024-11-05
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 9c2d243b7658e..1aa557c0443a9 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-11-03
+date: 2024-11-05
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 cd7aff8d7f85d..56d075e4a4859 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-11-03
+date: 2024-11-05
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 97fdcf252a7db..1d28cc108ffc2 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-11-03
+date: 2024-11-05
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 dd9f801344841..20121767b45ac 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-11-03
+date: 2024-11-05
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 6e22c9774cd04..1e27e2ec85d05 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-11-03
+date: 2024-11-05
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 d6c4595a60569..65bca33413073 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-11-03
+date: 2024-11-05
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 f909fcbeae0f8..7d37434cfc2e8 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-11-03
+date: 2024-11-05
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 3adf75482f65f..8c67a746fc5c2 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-11-03
+date: 2024-11-05
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 514aa31b04dde..750e8229421e8 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-11-03
+date: 2024-11-05
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 9503365f5a198..21ed2b891ad6b 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-11-03
+date: 2024-11-05
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 37c7fe9b39b60..22f78014667aa 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-11-03
+date: 2024-11-05
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 662de311173b7..98cc1cf24daeb 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-11-03
+date: 2024-11-05
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 958d4237621b5..dbea27394a602 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-11-03
+date: 2024-11-05
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 77d135cab574d..db3d19833911f 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-11-03
+date: 2024-11-05
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 e3231c2985191..32e29b4ca1190 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-11-03
+date: 2024-11-05
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 560e488563e62..2fe302ba8f292 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-11-03
+date: 2024-11-05
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 0ddf60d29ee78..14f2e22393f55 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-11-03
+date: 2024-11-05
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 4ec4786a4e201..1ace44e29f6a4 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-11-03
+date: 2024-11-05
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 f7c686d436c84..63a0f0adfc5b2 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-11-03
+date: 2024-11-05
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 10890567a858b..31b647bd498c5 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-11-03
+date: 2024-11-05
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 2894b4164cc23..e042da773abf4 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-11-03
+date: 2024-11-05
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 37f24667ff78f..b87898a414710 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-11-03
+date: 2024-11-05
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 bf00cf7874954..c07a50b6ffe46 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-11-03
+date: 2024-11-05
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 ab191c3672c2e..d74bd961d8158 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-11-03
+date: 2024-11-05
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 b9c846285e170..c269680c12df6 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-11-03
+date: 2024-11-05
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 b3f0e4c6b10ce..6bc875810a386 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-11-03
+date: 2024-11-05
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 b010aa72c37d4..358183ba435ec 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-11-03
+date: 2024-11-05
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 68da28ecd70ec..75a00c5e9896d 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-11-03
+date: 2024-11-05
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 cd2fc62af76b7..a32fc42e9f895 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-11-03
+date: 2024-11-05
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 e7a5740504724..e94566b4cdd7d 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-11-03
+date: 2024-11-05
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 8faa390f71e98..a7849341f38ff 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-11-03
+date: 2024-11-05
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 89d070f949d04..1062d5fd25bd9 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-11-03
+date: 2024-11-05
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 b083568018733..4b7f8be8f0688 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-11-03
+date: 2024-11-05
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 56554b5b7f00e..9f8779c0e4fdb 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-11-03
+date: 2024-11-05
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 d377c011e732a..71d2ae705cef2 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-11-03
+date: 2024-11-05
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 55418b83a6a5e..24bcaca0c3ca3 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-11-03
+date: 2024-11-05
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 0c0fe2306ac13..e74c73a03fa1b 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-11-03
+date: 2024-11-05
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 862b513a809ce..e7e7b86526918 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-11-03
+date: 2024-11-05
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 be57b1d5189e1..ce6fce991c5d8 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-11-03
+date: 2024-11-05
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 21a2041bb0835..95872342b5ad2 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-11-03
+date: 2024-11-05
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 85cd765d2ba0a..9d4949d96c00d 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-11-03
+date: 2024-11-05
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 fc1c41dc4a82b..95b1156cf421a 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-11-03
+date: 2024-11-05
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 b3b65779c2b5d..c9e35802cf654 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-11-03
+date: 2024-11-05
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 17533b14780dd..5352630fd8299 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-11-03
+date: 2024-11-05
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 df620f834e9ab..63e5de70fc973 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-11-03
+date: 2024-11-05
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 05141533d5d16..2a336cf2527e6 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-11-03
+date: 2024-11-05
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 7f424a4119188..ba7f85b9ebc4f 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-11-03
+date: 2024-11-05
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 56f274800b91d..d7399a98aca64 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-11-03
+date: 2024-11-05
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 77f7e31844a1e..6951563939791 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-11-03
+date: 2024-11-05
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 159db9fc7ab60..d9867d9a66cc4 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-11-03
+date: 2024-11-05
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 93af3e94fd72f..64a8dca9f81cf 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-11-03
+date: 2024-11-05
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 e026823ebf4dc..8ec5f8007cf4b 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-11-03
+date: 2024-11-05
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 5dcadce767b85..ded9647408e40 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-11-03
+date: 2024-11-05
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 2d6a10998b035..2175ce0768063 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-11-03
+date: 2024-11-05
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 d430e9530f8b5..da39ef0d6f846 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-11-03
+date: 2024-11-05
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 3861eae712ba2..651b52969f275 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-11-03
+date: 2024-11-05
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 4a4afc36720a5..b8b9ace1a6583 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-11-03
+date: 2024-11-05
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 bae94610e410c..89b324e021c3e 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-11-03
+date: 2024-11-05
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 7f11588a77320..0b619fe541361 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-11-03
+date: 2024-11-05
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 7fce3251bc67c..f02170c53d8e2 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-11-03
+date: 2024-11-05
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 916c43a603189..f955ecd76ed7d 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-11-03
+date: 2024-11-05
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 b26ee502fe636..36d18436a2102 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-11-03
+date: 2024-11-05
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 4d9636bc84287..e92b9430928f8 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-11-03
+date: 2024-11-05
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 ac1e9efda4237..6727255f7be84 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-11-03
+date: 2024-11-05
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 8f223e7f952f0..1fe597b53b5fa 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-11-03
+date: 2024-11-05
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 83ea310fb5da4..cfad6ea87828b 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-11-03
+date: 2024-11-05
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 7f41bd63caed9..1f2ebe55e6937 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-11-03
+date: 2024-11-05
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 0ded568ce8731..1d43c6b8ead19 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-11-03
+date: 2024-11-05
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 02fbdbc896372..707b21f1a6ac0 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-11-03
+date: 2024-11-05
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 a2bc093fc0a2b..1f302dbdcb3a9 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-11-03
+date: 2024-11-05
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 62ecd7eee4859..6e5837c70564c 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-11-03
+date: 2024-11-05
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 2d9c2c6423170..e50d7bea6ee29 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-11-03
+date: 2024-11-05
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 c444e5a6bef83..d52ac719cc557 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-11-03
+date: 2024-11-05
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 b977f8f63d3da..fb25940e45c6b 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-11-03
+date: 2024-11-05
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 928d9c4429f06..4197b39d9380a 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-11-03
+date: 2024-11-05
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 4af06159604d7..32ae580e6fde5 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-11-03
+date: 2024-11-05
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 78ba88217f53b..456b22129bc6a 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-11-03
+date: 2024-11-05
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 a4c2179f384b2..b0434d0037c9d 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-11-03
+date: 2024-11-05
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 1551686e0f640..a274948632262 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-11-03
+date: 2024-11-05
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 9479f1d0e4082..5938ac7bbf319 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-11-03
+date: 2024-11-05
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 545b3ba13085d..3246bcffd9d6a 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-11-03
+date: 2024-11-05
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 b0b08633d48ec..bab5b5c0846e8 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-11-03
+date: 2024-11-05
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 7a9bc92300bbb..441f909b26c36 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-11-03
+date: 2024-11-05
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 3ce247ebc2502..2010f4aef3d7a 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-11-03
+date: 2024-11-05
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 64245c2222957..c843a43ec2451 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-11-03
+date: 2024-11-05
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 dba9456eed29f..8ccf9a68aa3a0 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-11-03
+date: 2024-11-05
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 2cbd2835c797d..4c1683b00e31a 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-11-03
+date: 2024-11-05
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 401c9a4753805..ed6cd1b5e0881 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-11-03
+date: 2024-11-05
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 ba9a3c450f029..69387623d8462 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-11-03
+date: 2024-11-05
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 923761973dfbf..46bc4e0410d57 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-11-03
+date: 2024-11-05
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 f06e07473d7e0..f2e3d765e05fe 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-11-03
+date: 2024-11-05
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 6771ad8cfc576..222b8ca073153 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-11-03
+date: 2024-11-05
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 7c895b6f1144d..016a6a831a12f 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-11-03
+date: 2024-11-05
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 1767a684c6e5f..c988e21414d54 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-11-03
+date: 2024-11-05
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 ca6e9530efb8b..cf409e6949d80 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-11-03
+date: 2024-11-05
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 ec88678de0894..067725bc6e306 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-11-03
+date: 2024-11-05
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 07721bd3a0ef8..ac1fd498da73a 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-11-03
+date: 2024-11-05
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 ef32510701ad2..79a77c8483b52 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-11-03
+date: 2024-11-05
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 3213ed424a8e6..beed91f429ae2 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-11-03
+date: 2024-11-05
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 add56a55346e4..57a9c679ecf5c 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-11-03
+date: 2024-11-05
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 9b061a1e1ca8a..10a5c839107bb 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-11-03
+date: 2024-11-05
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 a0f6cbbe7d100..e87ee28f28d68 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-11-03
+date: 2024-11-05
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 c5622fe3e0882..2bb62cff7819f 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-11-03
+date: 2024-11-05
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 6da47d74b80e6..80b3ce7a51317 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-11-03
+date: 2024-11-05
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 78b0ac0a4a874..5d443797d0ed2 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-11-03
+date: 2024-11-05
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 950bdc2c650b0..1c4f6115d462d 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-11-03
+date: 2024-11-05
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 18c43a8a5d0d3..0a1642ac9fbee 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-11-03
+date: 2024-11-05
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 0f0eb6bb986c2..2f9a113e5215c 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-11-03
+date: 2024-11-05
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 767ed6170b2c9..298b4e1231a29 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-11-03
+date: 2024-11-05
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 891d73b5e6818..803576e950ac8 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-11-03
+date: 2024-11-05
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 674114b29518a..a0f0888ad0961 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-11-03
+date: 2024-11-05
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 52c728ec45892..8fd7b4c274197 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-11-03
+date: 2024-11-05
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 2fb2eb3e929b5..69e51986989ff 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-11-03
+date: 2024-11-05
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 a74d260b014a1..359f0b380d7a6 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-11-03
+date: 2024-11-05
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 f34f331d3dc6b..872422ef8eaa2 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-11-03
+date: 2024-11-05
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 3d7661b275d3b..17c207239a1ca 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-11-03
+date: 2024-11-05
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 ed6e9e9f07f84..94890b4e1fb3e 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-11-03
+date: 2024-11-05
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 ebfb1da0e91c4..2ae2c43759dd2 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-11-03
+date: 2024-11-05
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 2d655f2ded027..ebe248aa10663 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-11-03
+date: 2024-11-05
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 22961b26c5223..e68711623a2c6 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-11-03
+date: 2024-11-05
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 2658a664efdfc..61d7cde08013e 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-11-03
+date: 2024-11-05
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 d43ad4533185c..9f510577cdf8f 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-11-03
+date: 2024-11-05
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 c699ab2d197ea..bee86fc368cb4 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-11-03
+date: 2024-11-05
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 9e222b7b09ef5..52461f3464514 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-11-03
+date: 2024-11-05
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 44f48b1f96832..6fae39697ac5e 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-11-03
+date: 2024-11-05
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists']
---
import listsObj from './lists.devdocs.json';
diff --git a/api_docs/logs_data_access.mdx b/api_docs/logs_data_access.mdx
index d3d429ab163b8..2d4ff4b5fc2f0 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-11-03
+date: 2024-11-05
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 52e072febf769..f1ca50bdbe7af 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-11-03
+date: 2024-11-05
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 c7f8e14265d78..218c6e4fc9fc9 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-11-03
+date: 2024-11-05
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 402e48ef8add6..2f1f15ace3926 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-11-03
+date: 2024-11-05
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 07affed39a8e9..7b55f1eb5704f 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-11-03
+date: 2024-11-05
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 ba657f1b3e7b9..c4beb57cc13e8 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-11-03
+date: 2024-11-05
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 8e52935d9fc45..2c31341a91867 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-11-03
+date: 2024-11-05
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 c1983a6a1a264..8e48e1f03d4a5 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-11-03
+date: 2024-11-05
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 0f38f2b1e8adb..9fea23034943e 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-11-03
+date: 2024-11-05
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 bc65d5ec487c8..35439ffa5beac 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-11-03
+date: 2024-11-05
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 d60bfad3473bd..bb6e9f4e2431f 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-11-03
+date: 2024-11-05
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 e6beb3698f598..86c543ac030de 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-11-03
+date: 2024-11-05
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 53e1836ef934a..82d3d2854b91e 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-11-03
+date: 2024-11-05
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 f392c36a791bb..448bc7a94b9a2 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-11-03
+date: 2024-11-05
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 2d06d3e92db3d..7415cf7989abd 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-11-03
+date: 2024-11-05
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 3e666436e99f5..b1ecd7ad0e778 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-11-03
+date: 2024-11-05
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 08af68688bd67..07fe0a767f392 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-11-03
+date: 2024-11-05
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 b1ab44e540c26..7aa15c94bd864 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-11-03
+date: 2024-11-05
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 8f847ba6438ee..2a5457a29ea6f 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-11-03
+date: 2024-11-05
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 470c9e5704cc2..c3429f9415b35 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-11-03
+date: 2024-11-05
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 b09cd01682d5f..379013a23b83c 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-11-03
+date: 2024-11-05
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityOnboarding']
---
import observabilityOnboardingObj from './observability_onboarding.devdocs.json';
diff --git a/api_docs/observability_shared.devdocs.json b/api_docs/observability_shared.devdocs.json
index 4026f1325b638..337e3fbdf2769 100644
--- a/api_docs/observability_shared.devdocs.json
+++ b/api_docs/observability_shared.devdocs.json
@@ -6478,18 +6478,6 @@
"trackAdoption": false,
"initialIsOpen": false
},
- {
- "parentPluginId": "observabilityShared",
- "id": "def-common.EntityType",
- "type": "Enum",
- "tags": [],
- "label": "EntityType",
- "description": [],
- "path": "x-pack/plugins/observability_solution/observability_shared/common/entity/entity_types.ts",
- "deprecated": false,
- "trackAdoption": false,
- "initialIsOpen": false
- },
{
"parentPluginId": "observabilityShared",
"id": "def-common.IndexLifecyclePhaseSelectOption",
@@ -8238,6 +8226,21 @@
"trackAdoption": false,
"initialIsOpen": false
},
+ {
+ "parentPluginId": "observabilityShared",
+ "id": "def-common.SERVICE_OVERVIEW_LOCATOR_ID",
+ "type": "string",
+ "tags": [],
+ "label": "SERVICE_OVERVIEW_LOCATOR_ID",
+ "description": [],
+ "signature": [
+ "\"serviceOverviewLocator\""
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_shared/common/locators/apm/service_overview_locator.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "initialIsOpen": false
+ },
{
"parentPluginId": "observabilityShared",
"id": "def-common.SERVICE_RUNTIME_NAME",
@@ -9137,6 +9140,21 @@
}
],
"objects": [
+ {
+ "parentPluginId": "observabilityShared",
+ "id": "def-common.ENTITY_TYPES",
+ "type": "Object",
+ "tags": [],
+ "label": "ENTITY_TYPES",
+ "description": [],
+ "signature": [
+ "{ readonly HOST: \"host\"; readonly CONTAINER: \"container\"; readonly SERVICE: \"service\"; readonly KUBERNETES: { readonly CLUSTER: { ecs: \"kubernetes_cluster_ecs\"; semconv: \"kubernetes_cluster_semconv\"; }; readonly CONTAINER: { ecs: \"kubernetes_container_ecs\"; semconv: \"kubernetes_container_semconv\"; }; readonly CRONJOB: { ecs: \"kubernetes_cron_job_ecs\"; semconv: \"kubernetes_cron_job_semconv\"; }; readonly DAEMONSET: { ecs: \"kubernetes_daemon_set_ecs\"; semconv: \"kubernetes_daemon_set_semconv\"; }; readonly DEPLOYMENT: { ecs: \"kubernetes_deployment_ecs\"; semconv: \"kubernetes_deployment_semconv\"; }; readonly JOB: { ecs: \"kubernetes_job_ecs\"; semconv: \"kubernetes_job_semconv\"; }; readonly NAMESPACE: { ecs: \"kubernetes_namespace_ecs\"; semconv: \"kubernetes_namespace_semconv\"; }; readonly NODE: { ecs: \"kubernetes_node_ecs\"; semconv: \"kubernetes_node_semconv\"; }; readonly POD: { ecs: \"kubernetes_pod_ecs\"; semconv: \"kubernetes_pod_semconv\"; }; readonly STATEFULSET: { ecs: \"kubernetes_stateful_set_ecs\"; semconv: \"kubernetes_stateful_set_semconv\"; }; }; }"
+ ],
+ "path": "x-pack/plugins/observability_solution/observability_shared/common/entity/entity_types.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "initialIsOpen": false
+ },
{
"parentPluginId": "observabilityShared",
"id": "def-common.indexLifeCyclePhaseToDataTier",
diff --git a/api_docs/observability_shared.mdx b/api_docs/observability_shared.mdx
index 6b6976d8bb21e..668951f316d89 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-11-03
+date: 2024-11-05
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityShared']
---
import observabilitySharedObj from './observability_shared.devdocs.json';
@@ -21,7 +21,7 @@ Contact [@elastic/observability-ui](https://github.com/orgs/elastic/teams/observ
| Public API count | Any count | Items lacking comments | Missing exports |
|-------------------|-----------|------------------------|-----------------|
-| 507 | 1 | 501 | 19 |
+| 508 | 1 | 502 | 19 |
## Client
diff --git a/api_docs/osquery.mdx b/api_docs/osquery.mdx
index 276026590a3dd..1ec492abc682b 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-11-03
+date: 2024-11-05
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 e9bb7c7b52702..36065ec377729 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-11-03
+date: 2024-11-05
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 a8a820eccc34f..3312278c35617 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-11-03
+date: 2024-11-05
tags: ['contributor', 'dev', 'apidocs', 'kibana']
---
@@ -15,13 +15,13 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana']
| Count | Plugins or Packages with a public API | Number of teams |
|--------------|----------|------------------------|
-| 879 | 752 | 45 |
+| 878 | 751 | 45 |
### Public API health stats
| API Count | Any Count | Missing comments | Missing exports |
|--------------|----------|-----------------|--------|
-| 54179 | 242 | 40676 | 2007 |
+| 54121 | 242 | 40639 | 2002 |
## Plugin Directory
@@ -158,7 +158,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana']
| | [@elastic/obs-ai-assistant](https://github.com/orgs/elastic/teams/obs-ai-assistant) | - | 2 | 0 | 2 | 0 |
| | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | This plugin exposes and registers observability log consumption features. | 19 | 0 | 19 | 1 |
| | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 24 | 0 | 24 | 0 |
-| | [@elastic/observability-ui](https://github.com/orgs/elastic/teams/observability-ui) | - | 507 | 1 | 501 | 19 |
+| | [@elastic/observability-ui](https://github.com/orgs/elastic/teams/observability-ui) | - | 508 | 1 | 502 | 19 |
| | [@elastic/security-defend-workflows](https://github.com/orgs/elastic/teams/security-defend-workflows) | - | 23 | 0 | 23 | 7 |
| | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 2 | 0 | 2 | 0 |
| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds a standardized Presentation panel which allows any forward ref component to interface with various Kibana systems. | 11 | 0 | 11 | 4 |
@@ -690,7 +690,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana']
| | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | - | 67 | 0 | 40 | 0 |
| | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | - | 281 | 1 | 160 | 0 |
| | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | - | 74 | 0 | 73 | 0 |
-| | [@elastic/security-threat-hunting-investigations](https://github.com/orgs/elastic/teams/security-threat-hunting-investigations) | - | 59 | 0 | 38 | 5 |
| | [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic/teams/kibana-cloud-security-posture) | - | 7 | 0 | 0 | 0 |
| | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | - | 15 | 0 | 15 | 7 |
| | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | - | 54 | 0 | 49 | 0 |
diff --git a/api_docs/presentation_panel.mdx b/api_docs/presentation_panel.mdx
index 7c104054ab01e..6fb52d6de7c47 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-11-03
+date: 2024-11-05
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 2d700b7f81f00..8ab442ace4bda 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-11-03
+date: 2024-11-05
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationUtil']
---
import presentationUtilObj from './presentation_util.devdocs.json';
diff --git a/api_docs/profiling.mdx b/api_docs/profiling.mdx
index 29733204d1888..20e9d08496419 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-11-03
+date: 2024-11-05
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 f2ffa0f5fa0d9..8c12cf417e674 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-11-03
+date: 2024-11-05
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 f0a4eb0efae5a..73eeec7c0d63e 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-11-03
+date: 2024-11-05
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 7c241bf34671e..1b73501436a29 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-11-03
+date: 2024-11-05
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 10356c7719f0b..a98ac15e0a04c 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-11-03
+date: 2024-11-05
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 1448ec5b51b11..2b7ea6e299775 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-11-03
+date: 2024-11-05
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 05ffdcf6766fe..048044b0173c3 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-11-03
+date: 2024-11-05
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 1b91056866edd..3370aab608668 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-11-03
+date: 2024-11-05
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 f1c4d163ae51b..652698b8cde9c 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-11-03
+date: 2024-11-05
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 e3a7e1d99cfc3..da8681f3c7a4e 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-11-03
+date: 2024-11-05
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 21ed9dbd073e8..b7a69e2cb5b27 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-11-03
+date: 2024-11-05
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 d1466d6ca5133..66b740ba9b2e0 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-11-03
+date: 2024-11-05
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 d4b63ba6af9d0..c85d06300e7e9 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-11-03
+date: 2024-11-05
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 ce6a1ab7a25ce..191365e0f7a80 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-11-03
+date: 2024-11-05
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 c33ea4c05b417..dc044143c2206 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-11-03
+date: 2024-11-05
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 6d02a113b8e36..2592d69ac2c0b 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-11-03
+date: 2024-11-05
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 b12e1419898ce..8f64adda47380 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-11-03
+date: 2024-11-05
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 2c52dbd5c0f27..e778a119e4fa2 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-11-03
+date: 2024-11-05
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 97b9520a9296c..207333c7a02b3 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-11-03
+date: 2024-11-05
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 bf5da806831a5..53511b8dcd96a 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-11-03
+date: 2024-11-05
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchInferenceEndpoints']
---
import searchInferenceEndpointsObj from './search_inference_endpoints.devdocs.json';
diff --git a/api_docs/search_notebooks.mdx b/api_docs/search_notebooks.mdx
index 8a2ac4dd64f4b..3317d17e682bf 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-11-03
+date: 2024-11-05
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 4bd180bc3ade4..0d85aa3fc79b0 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-11-03
+date: 2024-11-05
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 7aa45a32cc250..94fb8607494a3 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-11-03
+date: 2024-11-05
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 664af77ccc1c4..4c102826ec973 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-11-03
+date: 2024-11-05
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 29e1ea381be08..31326e62344ae 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-11-03
+date: 2024-11-05
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 be9ab37206a36..adb6ecab7eadc 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-11-03
+date: 2024-11-05
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 7b2570ddd1158..e7ec8d251dbf6 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-11-03
+date: 2024-11-05
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 3e6fa936a254a..bc3650892a6e0 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-11-03
+date: 2024-11-05
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 53de970961c57..9433b63f12947 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-11-03
+date: 2024-11-05
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 3ffd1db3b5e15..b17d6e1f721f4 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-11-03
+date: 2024-11-05
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 6448e9572d796..9a9fa031a321a 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-11-03
+date: 2024-11-05
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 cbc49e79b91de..337c0e31d744b 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-11-03
+date: 2024-11-05
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 e56d76f12fa94..bc416c95cdf81 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-11-03
+date: 2024-11-05
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 d28a9c8219ba0..8057aae0d25a5 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-11-03
+date: 2024-11-05
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 9daa75021f9e6..bba6a2143e503 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-11-03
+date: 2024-11-05
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 85b1dd981e2fa..fe1e633fda40e 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-11-03
+date: 2024-11-05
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackConnectors']
---
import stackConnectorsObj from './stack_connectors.devdocs.json';
diff --git a/api_docs/task_manager.mdx b/api_docs/task_manager.mdx
index 64875265cd0e8..0c84153447ed0 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-11-03
+date: 2024-11-05
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 4e19c7302c8da..9f31699831028 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-11-03
+date: 2024-11-05
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 7c31e3c123aa0..54a1325820fcf 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-11-03
+date: 2024-11-05
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionManager']
---
import telemetryCollectionManagerObj from './telemetry_collection_manager.devdocs.json';
diff --git a/api_docs/telemetry_collection_xpack.mdx b/api_docs/telemetry_collection_xpack.mdx
index b4fb210cd68ba..9d4b58a3b2f5c 100644
--- a/api_docs/telemetry_collection_xpack.mdx
+++ b/api_docs/telemetry_collection_xpack.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionXpack
title: "telemetryCollectionXpack"
image: https://source.unsplash.com/400x175/?github
description: API docs for the telemetryCollectionXpack plugin
-date: 2024-11-03
+date: 2024-11-05
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionXpack']
---
import telemetryCollectionXpackObj from './telemetry_collection_xpack.devdocs.json';
diff --git a/api_docs/telemetry_management_section.mdx b/api_docs/telemetry_management_section.mdx
index 73d7520b8b453..90bb8a545417e 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-11-03
+date: 2024-11-05
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 96837d1723a31..adaa8c3b7b116 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-11-03
+date: 2024-11-05
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 486b335ac90e0..1e9950ae466c1 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-11-03
+date: 2024-11-05
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 80d061d0108ff..5d42001e70860 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-11-03
+date: 2024-11-05
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 fc68cccfeb3ca..7dd56991798c1 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-11-03
+date: 2024-11-05
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 e41c22d1c5856..56776329486cf 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-11-03
+date: 2024-11-05
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActions']
---
import uiActionsObj from './ui_actions.devdocs.json';
diff --git a/api_docs/ui_actions_enhanced.devdocs.json b/api_docs/ui_actions_enhanced.devdocs.json
index 16230d3a4fce8..8c5425102a713 100644
--- a/api_docs/ui_actions_enhanced.devdocs.json
+++ b/api_docs/ui_actions_enhanced.devdocs.json
@@ -2274,7 +2274,7 @@
"label": "validateUrl",
"description": [],
"signature": [
- "(url: string) => { isValid: boolean; error?: string | undefined; }"
+ "(url: string) => { isValid: boolean; error?: string | undefined; invalidUrl?: string | undefined; }"
],
"path": "src/plugins/ui_actions_enhanced/public/drilldowns/url_drilldown/url_validation.ts",
"deprecated": false,
@@ -2315,7 +2315,7 @@
"section": "def-public.UrlDrilldownScope",
"text": "UrlDrilldownScope"
},
- ") => Promise<{ isValid: boolean; error?: string | undefined; }>"
+ ") => Promise<{ isValid: boolean; error?: string | undefined; invalidUrl?: string | undefined; }>"
],
"path": "src/plugins/ui_actions_enhanced/public/drilldowns/url_drilldown/url_validation.ts",
"deprecated": false,
diff --git a/api_docs/ui_actions_enhanced.mdx b/api_docs/ui_actions_enhanced.mdx
index 1ad5dbea88ab5..72d043fa0249d 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-11-03
+date: 2024-11-05
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 56b67780dff52..1eceab991425f 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-11-03
+date: 2024-11-05
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 879cb718b2ae0..ca0012c50e155 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-11-03
+date: 2024-11-05
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 62d54ceccf017..4d7b77a1c3574 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-11-03
+date: 2024-11-05
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 7745d49880b84..916801660e1f3 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-11-03
+date: 2024-11-05
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 9f5e5f148642c..1baa84a2bf05f 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-11-03
+date: 2024-11-05
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 f3cdf962b6bb0..23196e765a82a 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-11-03
+date: 2024-11-05
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 7fee2b11eb6d5..a7aa2440a30ce 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-11-03
+date: 2024-11-05
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 705b4d9b7fbb7..612908d626e63 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-11-03
+date: 2024-11-05
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 9a925d2bc2b45..aef778560f240 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-11-03
+date: 2024-11-05
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 0b0516ad9ec76..da6269b2ff101 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-11-03
+date: 2024-11-05
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 796bf55d0803f..76ea3f1061020 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-11-03
+date: 2024-11-05
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 f9ae4d26758a8..22e1a95c27325 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-11-03
+date: 2024-11-05
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 b11f313d24442..77472233bd03b 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-11-03
+date: 2024-11-05
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 24264a4e5d63e..7697dde509e43 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-11-03
+date: 2024-11-05
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 ec4c2ed047431..4130f0d01b5f6 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-11-03
+date: 2024-11-05
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 cb4de0567a7f8..c35c2030f9c8e 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-11-03
+date: 2024-11-05
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 18437b47789a4..de07fa4273a21 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-11-03
+date: 2024-11-05
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 5a3c02adbc34b..3aabe341d6f26 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-11-03
+date: 2024-11-05
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 f559074bce8fc..a900a3034c098 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-11-03
+date: 2024-11-05
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations']
---
import visualizationsObj from './visualizations.devdocs.json';
From 47f1b9d525dd11b44a84ddb968b7a6bb0aa293ea Mon Sep 17 00:00:00 2001
From: Marco Antonio Ghiani
Date: Tue, 5 Nov 2024 08:36:51 +0100
Subject: [PATCH 044/101] [LogsUI] Clean up indices before running no data test
suite (#196500)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
## 📓 Summary
Closes #196031
These changes add a preventive indices cleanup before the log rate and
log categories tests where assertions run against expected no-data
pages. This is a preventive measure in case other test suites in the
same configuration are not correctly cleaning the installed data or race
conditions occur.
Co-authored-by: Marco Antonio Ghiani
---
.../apps/infra/logs/log_entry_categories_tab.ts | 2 ++
.../apps/infra/logs/log_entry_rate_tab.ts | 4 +++-
x-pack/test/functional/services/logs_ui/index.ts | 16 ++++++++++++++++
3 files changed, 21 insertions(+), 1 deletion(-)
diff --git a/x-pack/test/functional/apps/infra/logs/log_entry_categories_tab.ts b/x-pack/test/functional/apps/infra/logs/log_entry_categories_tab.ts
index 0d4a5440ebd58..6943c393cd8f9 100644
--- a/x-pack/test/functional/apps/infra/logs/log_entry_categories_tab.ts
+++ b/x-pack/test/functional/apps/infra/logs/log_entry_categories_tab.ts
@@ -58,6 +58,8 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => {
};
describe('with a trial license', () => {
+ before(() => logsUi.cleanIndices());
+
it('Shows no data page when indices do not exist', async () => {
await logsUi.logEntryCategoriesPage.navigateTo();
diff --git a/x-pack/test/functional/apps/infra/logs/log_entry_rate_tab.ts b/x-pack/test/functional/apps/infra/logs/log_entry_rate_tab.ts
index 35aa6ec6ca4ae..97b5d1a2ce133 100644
--- a/x-pack/test/functional/apps/infra/logs/log_entry_rate_tab.ts
+++ b/x-pack/test/functional/apps/infra/logs/log_entry_rate_tab.ts
@@ -11,9 +11,9 @@ import { FtrProviderContext } from '../../../ftr_provider_context';
export default ({ getPageObjects, getService }: FtrProviderContext) => {
const PageObjects = getPageObjects(['security']);
+ const esArchiver = getService('esArchiver');
const logsUi = getService('logsUi');
const retry = getService('retry');
- const esArchiver = getService('esArchiver');
const security = getService('security');
describe('Log Entry Rate Tab', function () {
@@ -58,6 +58,8 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => {
};
describe('with a trial license', () => {
+ before(() => logsUi.cleanIndices());
+
it('shows no data page when indices do not exist', async () => {
await logsUi.logEntryRatePage.navigateTo();
diff --git a/x-pack/test/functional/services/logs_ui/index.ts b/x-pack/test/functional/services/logs_ui/index.ts
index ec6a4c8459bc7..c0690957c4148 100644
--- a/x-pack/test/functional/services/logs_ui/index.ts
+++ b/x-pack/test/functional/services/logs_ui/index.ts
@@ -15,5 +15,21 @@ export function LogsUiProvider(context: FtrProviderContext) {
logEntryCategoriesPage: LogEntryCategoriesPageProvider(context),
logEntryRatePage: LogEntryRatePageProvider(context),
logStreamPage: LogStreamPageProvider(context),
+ cleanIndices: createCleanIndicesHandler(context),
};
}
+
+const createCleanIndicesHandler = (context: FtrProviderContext) => async () => {
+ const es = context.getService('es');
+ const log = context.getService('log');
+
+ log.info('Deleting all the indices');
+
+ const indicesResponse = await es.indices.get({ index: '*' });
+
+ const indicesDeletionPromises = Object.keys(indicesResponse).map((index) =>
+ es.indices.delete({ index })
+ );
+
+ return Promise.all(indicesDeletionPromises);
+};
From 69c1e5a7dda2708773dfeed2314b0ef74f4537ee Mon Sep 17 00:00:00 2001
From: Ievgen Sorokopud
Date: Tue, 5 Nov 2024 08:40:59 +0100
Subject: [PATCH 045/101] [Security GenAI] Fix and un-skip Knowledge Base
Integration Tests (#198861)
## Summary
This is a followup to https://github.com/elastic/kibana/pull/198178
where we skipped KB integration tests. We enable it with this PR.
Since it takes a lot of time to setup all Security Labs docs, the idea
is to skip installing those docs when it is not needed. For these tests
we need to make sure that inference endpoint is setup correctly - labs
docs are not required in this case.
cc @stephmilovic
---
.../impl/schemas/knowledge_base/crud_kb_route.gen.ts | 5 +++++
.../impl/schemas/knowledge_base/crud_kb_route.schema.yaml | 7 +++++++
.../ai_assistant_data_clients/knowledge_base/index.ts | 4 +++-
.../server/routes/knowledge_base/post_knowledge_base.ts | 2 ++
.../entries/trial_license_complete_tier/entries.ts | 2 +-
.../genai/knowledge_base/entries/utils/helpers.ts | 5 ++++-
6 files changed, 22 insertions(+), 3 deletions(-)
diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_kb_route.gen.ts b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_kb_route.gen.ts
index aad215021da81..4f03dbe0b1343 100644
--- a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_kb_route.gen.ts
+++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_kb_route.gen.ts
@@ -15,6 +15,7 @@
*/
import { z } from '@kbn/zod';
+import { BooleanFromString } from '@kbn/zod-helpers';
/**
* AI assistant KnowledgeBase.
@@ -33,6 +34,10 @@ export const CreateKnowledgeBaseRequestQuery = z.object({
* Optional ELSER modelId to use when setting up the Knowledge Base
*/
modelId: z.string().optional(),
+ /**
+ * Indicates whether we should or should not install Security Labs docs when setting up the Knowledge Base
+ */
+ ignoreSecurityLabs: BooleanFromString.optional().default(false),
});
export type CreateKnowledgeBaseRequestQueryInput = z.input;
diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_kb_route.schema.yaml b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_kb_route.schema.yaml
index 0e0f1e9267916..b4c16189e2387 100644
--- a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_kb_route.schema.yaml
+++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_kb_route.schema.yaml
@@ -24,6 +24,13 @@ paths:
required: false
schema:
type: string
+ - name: ignoreSecurityLabs
+ in: query
+ description: Indicates whether we should or should not install Security Labs docs when setting up the Knowledge Base
+ required: false
+ schema:
+ type: boolean
+ default: false
responses:
200:
description: Indicates a successful call.
diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/index.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/index.ts
index f985095661f3e..333fbb796ddd9 100644
--- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/index.ts
+++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/index.ts
@@ -269,9 +269,11 @@ export class AIAssistantKnowledgeBaseDataClient extends AIAssistantDataClient {
public setupKnowledgeBase = async ({
soClient,
v2KnowledgeBaseEnabled = true,
+ ignoreSecurityLabs = false,
}: {
soClient: SavedObjectsClientContract;
v2KnowledgeBaseEnabled?: boolean;
+ ignoreSecurityLabs?: boolean;
}): Promise => {
if (this.options.getIsKBSetupInProgress()) {
this.options.logger.debug('Knowledge Base setup already in progress');
@@ -366,7 +368,7 @@ export class AIAssistantKnowledgeBaseDataClient extends AIAssistantDataClient {
this.options.logger.debug(`Checking if Knowledge Base docs have been loaded...`);
- if (v2KnowledgeBaseEnabled) {
+ if (v2KnowledgeBaseEnabled && !ignoreSecurityLabs) {
const labsDocsLoaded = await this.isSecurityLabsDocsLoaded();
if (!labsDocsLoaded) {
this.options.logger.debug(`Loading Security Labs KB docs...`);
diff --git a/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/post_knowledge_base.ts b/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/post_knowledge_base.ts
index 96317da303ac1..23604886e4a52 100644
--- a/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/post_knowledge_base.ts
+++ b/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/post_knowledge_base.ts
@@ -60,6 +60,7 @@ export const postKnowledgeBaseRoute = (router: ElasticAssistantPluginRouter) =>
// Only allow modelId override if FF is enabled as this will re-write the ingest pipeline and break any previous KB entries
// This is only really needed for API integration tests
const modelIdOverride = v2KnowledgeBaseEnabled ? request.query.modelId : undefined;
+ const ignoreSecurityLabs = request.query.ignoreSecurityLabs;
try {
const knowledgeBaseDataClient =
@@ -74,6 +75,7 @@ export const postKnowledgeBaseRoute = (router: ElasticAssistantPluginRouter) =>
await knowledgeBaseDataClient.setupKnowledgeBase({
soClient,
v2KnowledgeBaseEnabled,
+ ignoreSecurityLabs,
});
return response.ok({ body: { success: true } });
diff --git a/x-pack/test/security_solution_api_integration/test_suites/genai/knowledge_base/entries/trial_license_complete_tier/entries.ts b/x-pack/test/security_solution_api_integration/test_suites/genai/knowledge_base/entries/trial_license_complete_tier/entries.ts
index a2e1c2c08be2c..2ecb368c2ba7b 100644
--- a/x-pack/test/security_solution_api_integration/test_suites/genai/knowledge_base/entries/trial_license_complete_tier/entries.ts
+++ b/x-pack/test/security_solution_api_integration/test_suites/genai/knowledge_base/entries/trial_license_complete_tier/entries.ts
@@ -32,7 +32,7 @@ export default ({ getService }: FtrProviderContext) => {
const es = getService('es');
const ml = getService('ml') as ReturnType;
- describe.skip('@ess Basic Security AI Assistant Knowledge Base Entries', () => {
+ describe('@ess Basic Security AI Assistant Knowledge Base Entries', () => {
before(async () => {
await installTinyElser(ml);
await setupKnowledgeBase(supertest, log);
diff --git a/x-pack/test/security_solution_api_integration/test_suites/genai/knowledge_base/entries/utils/helpers.ts b/x-pack/test/security_solution_api_integration/test_suites/genai/knowledge_base/entries/utils/helpers.ts
index 62174da6bce4c..cdbb1cca4de24 100644
--- a/x-pack/test/security_solution_api_integration/test_suites/genai/knowledge_base/entries/utils/helpers.ts
+++ b/x-pack/test/security_solution_api_integration/test_suites/genai/knowledge_base/entries/utils/helpers.ts
@@ -64,7 +64,10 @@ export const setupKnowledgeBase = async (
namespace?: string
): Promise => {
const path = ELASTIC_AI_ASSISTANT_KNOWLEDGE_BASE_URL.replace('{resource?}', resource || '');
- const route = routeWithNamespace(`${path}?modelId=pt_tiny_elser`, namespace);
+ const route = routeWithNamespace(
+ `${path}?modelId=pt_tiny_elser&ignoreSecurityLabs=true`,
+ namespace
+ );
const response = await supertest
.post(route)
.set('kbn-xsrf', 'true')
From c83e6db44af0eb7e00090c542263dba1ba5c5d60 Mon Sep 17 00:00:00 2001
From: Miriam <31922082+MiriamAparicio@users.noreply.github.com>
Date: Tue, 5 Nov 2024 08:20:31 +0000
Subject: [PATCH 046/101] [ObsUX] [APM-OTEL] Filter by trace.id instead of
transaction.if for dependency spans (#198781)
Closes https://github.com/elastic/kibana/issues/193672
### Summary of the issue
The trace waterfall for dependencies operations is filled querying to
span documents using term query for `span.destination.service.resource`
and `span.name` fields, and where `transaction.id` exist. The results
for this query were empty, in otel, span documents don't have the
`transaction.id` field. After this query another one is made to retrieve
the transactions for those spans, querying the transaction ids
### Fix
The query has been changed, so we will check for the `trace.id` instead
of the `transaction.id`
On the second query, we will get from those trace ids the ones with
`transaction.id` and retrieve the transactions data
https://github.com/user-attachments/assets/fba25f61-0646-4071-b49f-422eab7ff18e
---
.../maybe_redirect_to_available_span_sample.ts | 2 +-
.../dependencies/get_top_dependency_spans.ts | 17 ++++++++---------
2 files changed, 9 insertions(+), 10 deletions(-)
diff --git a/x-pack/plugins/observability_solution/apm/public/components/app/dependency_operation_detail_view/maybe_redirect_to_available_span_sample.ts b/x-pack/plugins/observability_solution/apm/public/components/app/dependency_operation_detail_view/maybe_redirect_to_available_span_sample.ts
index 1815897cb7c7a..d47cdbca64b92 100644
--- a/x-pack/plugins/observability_solution/apm/public/components/app/dependency_operation_detail_view/maybe_redirect_to_available_span_sample.ts
+++ b/x-pack/plugins/observability_solution/apm/public/components/app/dependency_operation_detail_view/maybe_redirect_to_available_span_sample.ts
@@ -24,7 +24,7 @@ export function maybeRedirectToAvailableSpanSample({
page: number;
replace: typeof urlHelpersReplace;
history: History;
- samples: Array<{ spanId: string; traceId: string; transactionId: string }>;
+ samples: Array<{ spanId: string; traceId: string; transactionId?: string }>;
}) {
if (spanFetchStatus !== FETCH_STATUS.SUCCESS) {
// we're still loading, don't do anything
diff --git a/x-pack/plugins/observability_solution/apm/server/routes/dependencies/get_top_dependency_spans.ts b/x-pack/plugins/observability_solution/apm/server/routes/dependencies/get_top_dependency_spans.ts
index 2a5a804d57f04..6066ebda155d5 100644
--- a/x-pack/plugins/observability_solution/apm/server/routes/dependencies/get_top_dependency_spans.ts
+++ b/x-pack/plugins/observability_solution/apm/server/routes/dependencies/get_top_dependency_spans.ts
@@ -41,7 +41,7 @@ export interface DependencySpan {
serviceName: string;
agentName: AgentName;
traceId: string;
- transactionId: string;
+ transactionId?: string;
transactionType?: string;
transactionName?: string;
duration: number;
@@ -72,7 +72,6 @@ export async function getTopDependencySpans({
const topDedsRequiredFields = asMutableArray([
SPAN_ID,
TRACE_ID,
- TRANSACTION_ID,
SPAN_NAME,
SERVICE_NAME,
SERVICE_ENVIRONMENT,
@@ -98,7 +97,6 @@ export async function getTopDependencySpans({
...kqlQuery(kuery),
...termQuery(SPAN_DESTINATION_SERVICE_RESOURCE, dependencyName),
...termQuery(SPAN_NAME, spanName),
- { exists: { field: TRANSACTION_ID } },
...((sampleRangeFrom ?? 0) >= 0 && (sampleRangeTo ?? 0) > 0
? [
{
@@ -119,9 +117,10 @@ export async function getTopDependencySpans({
})
).hits.hits.map((hit) => unflattenKnownApmEventFields(hit.fields, topDedsRequiredFields));
- const transactionIds = spans.map((span) => span.transaction.id);
+ const traceIds = spans.map((span) => span.trace.id);
const txRequiredFields = asMutableArray([
+ TRACE_ID,
TRANSACTION_ID,
TRANSACTION_TYPE,
TRANSACTION_NAME,
@@ -134,10 +133,10 @@ export async function getTopDependencySpans({
},
body: {
track_total_hits: false,
- size: transactionIds.length,
+ size: traceIds.length,
query: {
bool: {
- filter: [...termsQuery(TRANSACTION_ID, ...transactionIds)],
+ filter: [...termsQuery(TRACE_ID, ...traceIds), { exists: { field: TRANSACTION_ID } }],
},
},
fields: txRequiredFields,
@@ -148,10 +147,10 @@ export async function getTopDependencySpans({
})
).hits.hits.map((hit) => unflattenKnownApmEventFields(hit.fields, txRequiredFields));
- const transactionsById = keyBy(transactions, (transaction) => transaction.transaction.id);
+ const transactionsByTraceId = keyBy(transactions, (transaction) => transaction.trace.id);
return spans.map((span): DependencySpan => {
- const transaction = maybe(transactionsById[span.transaction!.id]);
+ const transaction = maybe(transactionsByTraceId[span.trace!.id]);
return {
'@timestamp': new Date(span['@timestamp']).getTime(),
@@ -162,7 +161,7 @@ export async function getTopDependencySpans({
duration: span.span.duration.us,
traceId: span.trace.id,
outcome: (span.event?.outcome || EventOutcome.unknown) as EventOutcome,
- transactionId: span.transaction!.id,
+ transactionId: transaction?.transaction.id,
transactionType: transaction?.transaction.type,
transactionName: transaction?.transaction.name,
};
From ae4209e787164dd1927a986c0dba33355b906fcf Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Felix=20St=C3=BCrmer?=
Date: Tue, 5 Nov 2024 10:12:53 +0100
Subject: [PATCH 047/101] [Logs Overview] Improve analyzer by filtering
unsuitable tokens (#197868)
This improves the analyzer configuration used by the logs overview
categorization feature so it's less susceptible to numeric and
hexadecimal values that overwhelm the rest of the content after
tokentization.
---------
Co-authored-by: Elastic Machine
---
.../scenarios/helpers/unstructured_logs.ts | 34 +++++++++-----
.../categorize_logs_service/queries.ts | 44 +++++++++++++++++--
2 files changed, 64 insertions(+), 14 deletions(-)
diff --git a/packages/kbn-apm-synthtrace/src/scenarios/helpers/unstructured_logs.ts b/packages/kbn-apm-synthtrace/src/scenarios/helpers/unstructured_logs.ts
index 490bd449e2b60..9f2e2f76dfee6 100644
--- a/packages/kbn-apm-synthtrace/src/scenarios/helpers/unstructured_logs.ts
+++ b/packages/kbn-apm-synthtrace/src/scenarios/helpers/unstructured_logs.ts
@@ -33,7 +33,7 @@ export const unstructuredLogMessageGenerators = {
])} successfully ${f.number.int({ max: 100000 })} times`,
],
taskStatusSuccess: (f: Faker) => [
- `${f.hacker.noun()}: ${f.word.words()} ${f.helpers.arrayElement([
+ `${f.hacker.noun()}: ${f.word.words()} ${f.string.uuid()} ${f.helpers.arrayElement([
'triggered',
'executed',
'processed',
@@ -46,7 +46,7 @@ export const unstructuredLogMessageGenerators = {
'execution',
'processing',
'handling',
- ])} of ${f.word.words()} failed at ${f.date.recent().toISOString()}`,
+ ])} of ${f.string.uuid()} failed at ${f.date.recent().toISOString()}`,
],
error: (f: Faker) => [
`${f.helpers.arrayElement([
@@ -58,7 +58,7 @@ export const unstructuredLogMessageGenerators = {
'Issue',
])}: ${f.hacker.phrase()}`,
`Stopping ${f.number.int(42)} background tasks...`,
- 'Shutting down process...',
+ `Shutting down process ${f.string.hexadecimal({ length: 16, prefix: '' })}...`,
],
restart: (f: Faker) => {
const service = f.database.engine();
@@ -72,13 +72,27 @@ export const unstructuredLogMessageGenerators = {
])}`,
];
},
- userAuthentication: (f: Faker) => [
- `User ${f.internet.userName()} ${f.helpers.arrayElement([
- 'logged in',
- 'logged out',
- 'failed to login',
- ])}`,
- ],
+ userAuthentication: (f: Faker) =>
+ f.helpers.arrayElements(
+ [
+ `User ${f.internet.userName()} (id ${f.string.uuid()}) ${f.helpers.arrayElement([
+ 'logged in',
+ 'logged out',
+ ])} at ${f.date.recent().toISOString()} from ${f.internet.ip()}:${f.internet.port()}`,
+ `Created new user ${f.internet.userName()} (id ${f.string.uuid()})`,
+ `Disabled user ${f.internet.userName()} (id ${f.string.uuid()}) due to level ${f.number.int(
+ { max: 10 }
+ )} ${f.helpers.arrayElement([
+ 'suspicious activity',
+ 'security concerns',
+ 'policy violation',
+ ])}`,
+ `Login ${f.internet.userName()} (id ${f.string.uuid()}) incorrect ${f.number.int({
+ max: 100,
+ })} times from ${f.internet.ipv6()}.`,
+ ],
+ { min: 1, max: 3 }
+ ),
networkEvent: (f: Faker) => [
`Network ${f.helpers.arrayElement([
'connection',
diff --git a/x-pack/packages/observability/logs_overview/src/services/categorize_logs_service/queries.ts b/x-pack/packages/observability/logs_overview/src/services/categorize_logs_service/queries.ts
index aef12da303bcc..3328bd5f8585a 100644
--- a/x-pack/packages/observability/logs_overview/src/services/categorize_logs_service/queries.ts
+++ b/x-pack/packages/observability/logs_overview/src/services/categorize_logs_service/queries.ts
@@ -5,7 +5,10 @@
* 2.0.
*/
-import { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/types';
+import {
+ AggregationsCategorizeTextAnalyzer,
+ QueryDslQueryContainer,
+} from '@elastic/elasticsearch/lib/api/types';
import { calculateAuto } from '@kbn/calculate-auto';
import { RandomSamplerWrapper } from '@kbn/ml-random-sampler-utils';
import moment from 'moment';
@@ -109,9 +112,7 @@ export const createCategorizationRequestParams = ({
categorize_text: {
field: messageField,
size: maxCategoriesCount,
- categorization_analyzer: {
- tokenizer: 'standard',
- },
+ categorization_analyzer: categorizationAnalyzerConfig,
...(minDocsPerCategory > 0 ? { min_doc_count: minDocsPerCategory } : {}),
},
aggs: {
@@ -149,3 +150,38 @@ export const createCategoryQuery =
},
},
});
+
+// This emulates the behavior of the `ml_standard` tokenizer in the ML plugin in
+// regard to the hexadecimal and numeric tokens. The other parts pertaining to
+// infix punctuation and file paths are not easily emulated this way.
+// https://github.com/elastic/elasticsearch/blob/becd08da24df2af93eee28053d32929298cdccbd/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/job/categorization/MlStandardTokenizer.java#L35-L146
+// We don't use the `ml_standard` tokenizer directly because it produces tokens
+// that are different from the ones produced by the `standard` tokenizer upon
+// indexing.
+const categorizationAnalyzerConfig: AggregationsCategorizeTextAnalyzer = {
+ tokenizer: 'standard',
+ char_filter: [
+ 'first_line_with_letters',
+ // This ignores tokens that are hexadecimal numbers
+ // @ts-expect-error the official types don't support inline char filters
+ {
+ type: 'pattern_replace',
+ pattern: '\\b[a-fA-F][a-fA-F0-9]+\\b',
+ replacement: '',
+ },
+ // This ignore tokens that start with a digit
+ // @ts-expect-error the official types don't support inline char filters
+ {
+ type: 'pattern_replace',
+ pattern: '\\b\\d\\w*\\b',
+ replacement: '',
+ },
+ ],
+ filter: [
+ // @ts-expect-error the official types don't support inline token filters
+ {
+ type: 'limit',
+ max_token_count: '100',
+ },
+ ],
+};
From f33baa36cd4cff9be2b9fb50151be655910b4433 Mon Sep 17 00:00:00 2001
From: James Gowdy
Date: Tue, 5 Nov 2024 09:23:00 +0000
Subject: [PATCH 048/101] [ML] Removing validate detector endpoint (#198667)
The ML UI makes no use of the validate detector endpoint in es,
therefore we do not need the kibana endpoint.
This can be replaced if we ever do need it, but for now it's better to
not have unused internal endpoints exposed in kibana with no api tests.
---
.../services/ml_api_service/index.ts | 10 ------
.../plugins/ml/server/lib/ml_client/types.ts | 3 +-
.../ml/server/routes/anomaly_detectors.ts | 31 -------------------
3 files changed, 1 insertion(+), 43 deletions(-)
diff --git a/x-pack/plugins/ml/public/application/services/ml_api_service/index.ts b/x-pack/plugins/ml/public/application/services/ml_api_service/index.ts
index f21e67fe450f4..3552b8f006091 100644
--- a/x-pack/plugins/ml/public/application/services/ml_api_service/index.ts
+++ b/x-pack/plugins/ml/public/application/services/ml_api_service/index.ts
@@ -27,7 +27,6 @@ import type {
JobStats,
Datafeed,
CombinedJob,
- Detector,
AnalysisConfig,
ModelSnapshot,
IndicesOptions,
@@ -350,15 +349,6 @@ export function mlApiProvider(httpService: HttpService) {
});
},
- validateDetector({ detector }: { detector: Detector }) {
- const body = JSON.stringify(detector);
- return httpService.http({
- path: `${ML_INTERNAL_BASE_PATH}/anomaly_detectors/_validate/detector`,
- method: 'POST',
- body,
- });
- },
-
forecast({
jobId,
duration,
diff --git a/x-pack/plugins/ml/server/lib/ml_client/types.ts b/x-pack/plugins/ml/server/lib/ml_client/types.ts
index 93977257cdc22..ca7b36df8f208 100644
--- a/x-pack/plugins/ml/server/lib/ml_client/types.ts
+++ b/x-pack/plugins/ml/server/lib/ml_client/types.ts
@@ -121,8 +121,7 @@ export type MlClientParams =
| Parameters
| Parameters
| Parameters
- | Parameters
- | Parameters;
+ | Parameters;
export type MlGetADParams = Parameters | Parameters;
diff --git a/x-pack/plugins/ml/server/routes/anomaly_detectors.ts b/x-pack/plugins/ml/server/routes/anomaly_detectors.ts
index 8cd9f45a4217e..4c75b7a85556a 100644
--- a/x-pack/plugins/ml/server/routes/anomaly_detectors.ts
+++ b/x-pack/plugins/ml/server/routes/anomaly_detectors.ts
@@ -349,37 +349,6 @@ export function jobRoutes({ router, routeGuard }: RouteInitialization) {
})
);
- router.versioned
- .post({
- path: `${ML_INTERNAL_BASE_PATH}/anomaly_detectors/_validate/detector`,
- access: 'internal',
- options: {
- tags: ['access:ml:canCreateJob'],
- },
- summary: 'Validates detector',
- description: 'Validates specified detector.',
- })
- .addVersion(
- {
- version: '1',
- validate: {
- request: {
- body: schema.any(),
- },
- },
- },
- routeGuard.fullLicenseAPIGuard(async ({ mlClient, request, response }) => {
- try {
- const body = await mlClient.validateDetector({ body: request.body });
- return response.ok({
- body,
- });
- } catch (e) {
- return response.customError(wrapError(e));
- }
- })
- );
-
router.versioned
.delete({
path: `${ML_INTERNAL_BASE_PATH}/anomaly_detectors/{jobId}/_forecast/{forecastId}`,
From 5fb74fefec544202429dd6dfebbba304b04cab04 Mon Sep 17 00:00:00 2001
From: Tre
Date: Tue, 5 Nov 2024 09:26:14 +0000
Subject: [PATCH 049/101] [FTR][Ownership] Assign guided_onboarding, etc
(#198044)
## Assignment Reasons
Assigned guided_onboarding due to
https://github.com/elastic/kibana/blob/main/api_docs/guided_onboarding.mdx#L18
- It says "Contact @elastic/appex-sharedux for questions regarding this
plugin."
Assigned shared_ux due to the name
Assigned telemetry due to
https://github.com/elastic/kibana/blob/main/api_docs/telemetry.mdx#L18
- It says "Contact @elastic/kibana-core for questions regarding this
plugin."
Assigned response_stream due to
https://github.com/elastic/kibana/blob/main/examples/response_stream/kibana.jsonc#L4
Assigned advanced_settings due to
https://github.com/elastic/kibana/blob/main/api_docs/advanced_settings.mdx#L18
- It says "Contact @elastic/appex-sharedux for questions regarding this
plugin."
Assigned upgrade_assistant due to
https://github.com/elastic/kibana/blob/main/x-pack/plugins/upgrade_assistant/kibana.jsonc#L4
Assigned functional_cors due to
https://github.com/elastic/kibana/blob/main/x-pack/test/functional_cors/plugins/kibana_cors_test/kibana.jsonc#L4
Assigned x-pack/test/functional_cors due to
https://github.com/elastic/kibana/blob/main/x-pack/test/functional_cors/plugins/kibana_cors_test/kibana.jsonc#L4
Assigned ingest_pipelines due to
https://github.com/elastic/kibana/blob/main/api_docs/ingest_pipelines.mdx#L18
- It says "Contact @elastic/kibana-management for questions regarding
this plugin."
Assigned disable_ems due to git blame
Assigned cross_cluster_replication due to
https://github.com/elastic/kibana/blob/main/x-pack/plugins/cross_cluster_replication/kibana.jsonc#L5
Contributes to: https://github.com/elastic/kibana/issues/192979
---------
Co-authored-by: Robert Oskamp
Co-authored-by: Elastic Machine
---
.github/CODEOWNERS | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 523e860db1491..086c31140dad4 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -1295,6 +1295,7 @@ x-pack/test_serverless/**/test_suites/observability/ai_assistant @elastic/obs-ai
### END Observability Plugins
# Presentation
+/x-pack/test/disable_ems @elastic/kibana-presentation
/x-pack/test/functional/apps/dashboard @elastic/kibana-presentation
/x-pack/test/accessibility/apps/group3/maps.ts @elastic/kibana-presentation
/x-pack/test/accessibility/apps/group1/dashboard_panel_options.ts @elastic/kibana-presentation
@@ -1329,6 +1330,7 @@ x-pack/test_serverless/**/test_suites/observability/ai_assistant @elastic/obs-ai
/x-pack/test/api_integration/services/ml.ts @elastic/ml-ui
# Additional plugins and packages maintained by the ML team.
+/test/examples/response_stream @elastic/ml-ui
/x-pack/test/accessibility/apps/group2/transform.ts @elastic/ml-ui
/x-pack/test/api_integration/apis/aiops/ @elastic/ml-ui
/x-pack/test/api_integration/apis/transform/ @elastic/ml-ui
@@ -1459,7 +1461,6 @@ x-pack/test/**/deployment_agnostic/ @elastic/appex-qa #temporarily to monitor te
# AppEx Platform Services Security
//x-pack/test_serverless/api_integration/test_suites/common/security_response_headers.ts @elastic/kibana-security
/x-pack/test/api_integration/apis/es @elastic/kibana-security
-
/x-pack/test/api_integration/apis/features @elastic/kibana-security
# Kibana Telemetry
@@ -1571,14 +1572,18 @@ x-pack/test/api_integration/apis/management/index_management/inference_endpoints
/x-pack/test/functional_search/ @elastic/search-kibana
# Management Experience - Deployment Management
+/x-pack/test/api_integration/services/index_management.ts @elastic/kibana-management
/x-pack/test/functional/apps/license_management @elastic/kibana-management
/x-pack/test/functional/apps/painless_lab @elastic/kibana-management
/x-pack/test/functional/apps/management @elastic/kibana-management
/x-pack/test/api_integration/services/index_management.ts @elastic/kibana-management
/x-pack/test/functional/services/grok_debugger.js @elastic/kibana-management
+/x-pack/test/functional/apps/cross_cluster_replication @elastic/kibana-management
/x-pack/test/functional/apps/grok_debugger @elastic/kibana-management
/x-pack/test/functional/apps/index_lifecycle_management @elastic/kibana-management
/x-pack/test/functional/apps/index_management @elastic/kibana-management
+/x-pack/test/functional/apps/ingest_pipelines @elastic/kibana-management
+/x-pack/test/functional/apps/upgrade_assistant @elastic/kibana-management
/x-pack/test/api_integration/services/ingest_pipelines @elastic/kibana-management
/x-pack/test/functional/apps/watcher @elastic/kibana-management
/x-pack/test/api_integration/apis/watcher @elastic/kibana-management
@@ -2016,6 +2021,9 @@ x-pack/test/profiling_api_integration @elastic/obs-ux-infra_services-team
x-pack/plugins/observability_solution/observability_shared/public/components/profiling @elastic/obs-ux-infra_services-team
# Shared UX
+/test/api_integration/apis/guided_onboarding @elastic/appex-sharedux
+/test/plugin_functional/test_suites/shared_ux @elastic/appex-sharedux
+/x-pack/test/functional/apps/advanced_settings @elastic/appex-sharedux @elastic/kibana-management
/test/examples/content_management @elastic/appex-sharedux
/test/plugin_functional/plugins/kbn_sample_panel_action @elastic/appex-sharedux
/test/functional/apps/kibana_overview @elastic/appex-sharedux
From 2ba9d7cb6ddeb44dfa66b3817a95dc92455a1f7b Mon Sep 17 00:00:00 2001
From: Ryan Keairns
Date: Tue, 5 Nov 2024 01:46:38 -0800
Subject: [PATCH 050/101] Clean up loading state for solution nav (#198248)
Closes #198247
## Summary
- Add margin
- Replace spinner with skeleton loader design
*Before*
![CleanShot 2024-10-29 at 21 23
28@2x](https://github.com/user-attachments/assets/662b7081-8c2f-46e8-961c-fc6f71c7b6a2)
*After*
https://github.com/user-attachments/assets/3b922588-782a-4f42-bfce-4dec8b97d9e9
---
.../public/side_navigation/index.tsx | 24 +++++++++++++++++--
src/plugins/navigation/tsconfig.json | 1 +
.../serverless/public/navigation/index.tsx | 21 ++++++++++++++--
x-pack/plugins/serverless/tsconfig.json | 1 +
4 files changed, 43 insertions(+), 4 deletions(-)
diff --git a/src/plugins/navigation/public/side_navigation/index.tsx b/src/plugins/navigation/public/side_navigation/index.tsx
index e2d284b77b90b..c6659ef1af6f2 100644
--- a/src/plugins/navigation/public/side_navigation/index.tsx
+++ b/src/plugins/navigation/public/side_navigation/index.tsx
@@ -7,15 +7,35 @@
* License v3.0 only", or the "Server Side Public License, v 1".
*/
+import { css } from '@emotion/react';
+import { euiThemeVars } from '@kbn/ui-theme';
import React, { Suspense, type FC } from 'react';
-import { EuiLoadingSpinner } from '@elastic/eui';
+import { EuiSkeletonRectangle } from '@elastic/eui';
+import { i18n } from '@kbn/i18n';
import type { Props as NavigationProps } from './side_navigation';
const SideNavComponentLazy = React.lazy(() => import('./side_navigation'));
export const SideNavComponent: FC = (props) => (
- }>
+
+ }
+ >
);
diff --git a/src/plugins/navigation/tsconfig.json b/src/plugins/navigation/tsconfig.json
index 1ee0462330954..00b5186670cf1 100644
--- a/src/plugins/navigation/tsconfig.json
+++ b/src/plugins/navigation/tsconfig.json
@@ -27,6 +27,7 @@
"@kbn/config-schema",
"@kbn/i18n",
"@kbn/std",
+ "@kbn/ui-theme",
],
"exclude": [
"target/**/*",
diff --git a/x-pack/plugins/serverless/public/navigation/index.tsx b/x-pack/plugins/serverless/public/navigation/index.tsx
index b22b8d51e6166..2ff6e27c664f7 100644
--- a/x-pack/plugins/serverless/public/navigation/index.tsx
+++ b/x-pack/plugins/serverless/public/navigation/index.tsx
@@ -5,14 +5,31 @@
* 2.0.
*/
+import { css } from '@emotion/react';
+import { euiThemeVars } from '@kbn/ui-theme';
import React, { Suspense, type FC } from 'react';
-import { EuiLoadingSpinner } from '@elastic/eui';
+import { EuiSkeletonRectangle } from '@elastic/eui';
+import { i18n } from '@kbn/i18n';
import type { Props as NavigationProps } from './navigation';
const SideNavComponentLazy = React.lazy(() => import('./navigation'));
export const SideNavComponent: FC = (props) => (
- }>
+
+ }
+ >
);
diff --git a/x-pack/plugins/serverless/tsconfig.json b/x-pack/plugins/serverless/tsconfig.json
index ce60d39bef0f0..35cc5e554ceb3 100644
--- a/x-pack/plugins/serverless/tsconfig.json
+++ b/x-pack/plugins/serverless/tsconfig.json
@@ -28,5 +28,6 @@
"@kbn/management-cards-navigation",
"@kbn/react-kibana-mount",
"@kbn/react-kibana-context-render",
+ "@kbn/ui-theme",
]
}
From 77b9d24fa55438f8224b1a217d32e5496927b22a Mon Sep 17 00:00:00 2001
From: Tre
Date: Tue, 5 Nov 2024 09:49:46 +0000
Subject: [PATCH 051/101] [SKIP ON MKI]
`x-pack/test_serverless/api_integration/test_suites/common/reporting/datastream.ts`
(#198813)
See details: https://github.com/elastic/kibana/issues/198811
---------
Co-authored-by: Robert Oskamp
---
.../api_integration/test_suites/common/reporting/datastream.ts | 2 ++
1 file changed, 2 insertions(+)
diff --git a/x-pack/test_serverless/api_integration/test_suites/common/reporting/datastream.ts b/x-pack/test_serverless/api_integration/test_suites/common/reporting/datastream.ts
index ca021c5d35dbc..a4eb181e6bc2b 100644
--- a/x-pack/test_serverless/api_integration/test_suites/common/reporting/datastream.ts
+++ b/x-pack/test_serverless/api_integration/test_suites/common/reporting/datastream.ts
@@ -33,6 +33,8 @@ export default function ({ getService }: FtrProviderContext) {
};
describe('Data Stream', function () {
+ // see details: https://github.com/elastic/kibana/issues/198811
+ this.tags(['failsOnMKI']);
const generatedReports = new Set();
before(async () => {
roleAuthc = await svlUserManager.createM2mApiKeyWithRoleScope('admin');
From b122722d886b66431108a33d0eac2447a63da179 Mon Sep 17 00:00:00 2001
From: Ievgen Sorokopud
Date: Tue, 5 Nov 2024 11:12:33 +0100
Subject: [PATCH 052/101] [Security GenAI][BUG] Knowledge Base: Show only
indices with `semantic_text` fields (#198707)
## Summary
This is a fix the next issue:
> Index input should only list indices with semantic_text fields, not
all indices.
### Current behaviour
We show all available indices
### Behaviour after the fix
We show only indices with `semantic_text` fields
### Testing notes
Create some indices with `semantic_text` fields. For example, you can do
that via uploading and indexing a PDF file:
1. Navigate to Integrations page
2. Select "Upload a file"
3. Select and upload a PDF file
4. Press Import button
5. Switch to Advanced tab
6. Fill in "Index name"
7. Add additional field > Add semantic text field > Fill in form
* Field: `attachment.content`
* Copy to field: `content`
* Inference endpoint: `elser_model_2`
8. Press Add button
9. Press Import button
### Checklist
Delete any items that are not applicable to this PR.
- [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
---
.../kbn-elastic-assistant-common/constants.ts | 2 +
.../impl/schemas/index.ts | 1 +
.../get_knowledge_base_indices_route.gen.ts | 25 +++
...t_knowledge_base_indices_route.schema.yaml | 42 +++++
.../assistant/api/knowledge_base/api.test.tsx | 32 +++-
.../impl/assistant/api/knowledge_base/api.tsx | 31 ++++
.../use_knowledge_base_indices.test.tsx | 85 +++++++++
.../use_knowledge_base_indices.tsx | 59 +++++++
.../index.test.tsx | 6 +-
.../index.tsx | 1 +
.../index_entry_editor.test.tsx | 13 +-
.../index_entry_editor.tsx | 28 +--
.../translations.ts | 8 +
.../server/__mocks__/request.ts | 7 +
.../elastic_assistant/server/routes/index.ts | 1 +
.../get_knowledge_base_indices.test.ts | 79 +++++++++
.../get_knowledge_base_indices.ts | 73 ++++++++
.../server/routes/register_routes.ts | 2 +
.../semantic_text_fields/data.json | 161 ++++++++++++++++++
.../semantic_text_fields/mappings.json | 30 ++++
.../trial_license_complete_tier/index.ts | 1 +
.../semntic_text_indices.ts | 38 +++++
.../knowledge_base/entries/utils/helpers.ts | 30 ++++
23 files changed, 738 insertions(+), 17 deletions(-)
create mode 100644 x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/get_knowledge_base_indices_route.gen.ts
create mode 100644 x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/get_knowledge_base_indices_route.schema.yaml
create mode 100644 x-pack/packages/kbn-elastic-assistant/impl/assistant/api/knowledge_base/use_knowledge_base_indices.test.tsx
create mode 100644 x-pack/packages/kbn-elastic-assistant/impl/assistant/api/knowledge_base/use_knowledge_base_indices.tsx
create mode 100644 x-pack/plugins/elastic_assistant/server/routes/knowledge_base/get_knowledge_base_indices.test.ts
create mode 100644 x-pack/plugins/elastic_assistant/server/routes/knowledge_base/get_knowledge_base_indices.ts
create mode 100644 x-pack/test/functional/es_archives/security_solution/semantic_text_fields/data.json
create mode 100644 x-pack/test/functional/es_archives/security_solution/semantic_text_fields/mappings.json
create mode 100644 x-pack/test/security_solution_api_integration/test_suites/genai/knowledge_base/entries/trial_license_complete_tier/semntic_text_indices.ts
diff --git a/x-pack/packages/kbn-elastic-assistant-common/constants.ts b/x-pack/packages/kbn-elastic-assistant-common/constants.ts
index d84d9d4cd6825..49db6c295a51a 100755
--- a/x-pack/packages/kbn-elastic-assistant-common/constants.ts
+++ b/x-pack/packages/kbn-elastic-assistant-common/constants.ts
@@ -50,6 +50,8 @@ export const ELASTIC_AI_ASSISTANT_KNOWLEDGE_BASE_ENTRIES_URL_FIND =
`${ELASTIC_AI_ASSISTANT_KNOWLEDGE_BASE_ENTRIES_URL}/_find` as const;
export const ELASTIC_AI_ASSISTANT_KNOWLEDGE_BASE_ENTRIES_URL_BULK_ACTION =
`${ELASTIC_AI_ASSISTANT_KNOWLEDGE_BASE_ENTRIES_URL}/_bulk_action` as const;
+export const ELASTIC_AI_ASSISTANT_KNOWLEDGE_BASE_INDICES_URL =
+ `${ELASTIC_AI_ASSISTANT_INTERNAL_URL}/knowledge_base/_indices` as const;
export const ELASTIC_AI_ASSISTANT_EVALUATE_URL =
`${ELASTIC_AI_ASSISTANT_INTERNAL_URL}/evaluate` as const;
diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/index.ts b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/index.ts
index 6304bfa4786cf..9233791a870c3 100644
--- a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/index.ts
+++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/index.ts
@@ -49,6 +49,7 @@ export * from './actions_connector/post_actions_connector_execute_route.gen';
// Knowledge Base Schemas
export * from './knowledge_base/crud_kb_route.gen';
+export * from './knowledge_base/get_knowledge_base_indices_route.gen';
export * from './knowledge_base/entries/bulk_crud_knowledge_base_entries_route.gen';
export * from './knowledge_base/entries/common_attributes.gen';
export * from './knowledge_base/entries/crud_knowledge_base_entries_route.gen';
diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/get_knowledge_base_indices_route.gen.ts b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/get_knowledge_base_indices_route.gen.ts
new file mode 100644
index 0000000000000..0e1df8bce089f
--- /dev/null
+++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/get_knowledge_base_indices_route.gen.ts
@@ -0,0 +1,25 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+/*
+ * NOTICE: Do not edit this file manually.
+ * This file is automatically generated by the OpenAPI Generator, @kbn/openapi-generator.
+ *
+ * info:
+ * title: Get Knowledge Base Indices API endpoints
+ * version: 1
+ */
+
+import { z } from '@kbn/zod';
+
+export type GetKnowledgeBaseIndicesResponse = z.infer;
+export const GetKnowledgeBaseIndicesResponse = z.object({
+ /**
+ * List of indices with at least one field of a `sematic_text` type.
+ */
+ indices: z.array(z.string()),
+});
diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/get_knowledge_base_indices_route.schema.yaml b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/get_knowledge_base_indices_route.schema.yaml
new file mode 100644
index 0000000000000..f9dba830f9556
--- /dev/null
+++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/get_knowledge_base_indices_route.schema.yaml
@@ -0,0 +1,42 @@
+openapi: 3.0.0
+info:
+ title: Get Knowledge Base Indices API endpoints
+ version: '1'
+paths:
+ /internal/elastic_assistant/knowledge_base/_indices:
+ get:
+ x-codegen-enabled: true
+ x-labels: [ess, serverless]
+ operationId: GetKnowledgeBaseIndices
+ description: Gets Knowledge Base indices that have fields of a `sematic_text` type.
+ summary: Gets Knowledge Base indices that have fields of a `sematic_text` type.
+ tags:
+ - KnowledgeBase API
+ responses:
+ 200:
+ description: Indicates a successful call.
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ indices:
+ type: array
+ description: List of indices with at least one field of a `sematic_text` type.
+ items:
+ type: string
+ required:
+ - indices
+ 400:
+ description: Generic Error
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ statusCode:
+ type: number
+ error:
+ type: string
+ message:
+ type: string
diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/knowledge_base/api.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/knowledge_base/api.test.tsx
index 22ccd2bc0ecdf..5509f43037444 100644
--- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/knowledge_base/api.test.tsx
+++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/knowledge_base/api.test.tsx
@@ -7,7 +7,12 @@
import { HttpSetup } from '@kbn/core-http-browser';
-import { deleteKnowledgeBase, getKnowledgeBaseStatus, postKnowledgeBase } from './api';
+import {
+ deleteKnowledgeBase,
+ getKnowledgeBaseIndices,
+ getKnowledgeBaseStatus,
+ postKnowledgeBase,
+} from './api';
jest.mock('@kbn/core-http-browser');
@@ -95,4 +100,29 @@ describe('API tests', () => {
await expect(deleteKnowledgeBase(knowledgeBaseArgs)).resolves.toThrowError('simulated error');
});
});
+
+ describe('getKnowledgeBaseIndices', () => {
+ it('calls the knowledge base API when correct resource path', async () => {
+ await getKnowledgeBaseIndices({ http: mockHttp });
+
+ expect(mockHttp.fetch).toHaveBeenCalledWith(
+ '/internal/elastic_assistant/knowledge_base/_indices',
+ {
+ method: 'GET',
+ signal: undefined,
+ version: '1',
+ }
+ );
+ });
+ it('returns error when error is an error', async () => {
+ const error = 'simulated error';
+ (mockHttp.fetch as jest.Mock).mockImplementation(() => {
+ throw new Error(error);
+ });
+
+ await expect(getKnowledgeBaseIndices({ http: mockHttp })).resolves.toThrowError(
+ 'simulated error'
+ );
+ });
+ });
});
diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/knowledge_base/api.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/knowledge_base/api.tsx
index 4dd03a1cb2931..4db8c0787a1e1 100644
--- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/knowledge_base/api.tsx
+++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/knowledge_base/api.tsx
@@ -11,7 +11,9 @@ import {
CreateKnowledgeBaseResponse,
DeleteKnowledgeBaseRequestParams,
DeleteKnowledgeBaseResponse,
+ ELASTIC_AI_ASSISTANT_KNOWLEDGE_BASE_INDICES_URL,
ELASTIC_AI_ASSISTANT_KNOWLEDGE_BASE_URL,
+ GetKnowledgeBaseIndicesResponse,
ReadKnowledgeBaseRequestParams,
ReadKnowledgeBaseResponse,
} from '@kbn/elastic-assistant-common';
@@ -108,3 +110,32 @@ export const deleteKnowledgeBase = async ({
return error as IHttpFetchError;
}
};
+
+/**
+ * API call for getting indices that have fields of `semantic_text` type.
+ *
+ * @param {Object} options - The options object.
+ * @param {HttpSetup} options.http - HttpSetup
+ * @param {AbortSignal} [options.signal] - AbortSignal
+ *
+ * @returns {Promise}
+ */
+export const getKnowledgeBaseIndices = async ({
+ http,
+ signal,
+}: {
+ http: HttpSetup;
+ signal?: AbortSignal | undefined;
+}): Promise => {
+ try {
+ const response = await http.fetch(ELASTIC_AI_ASSISTANT_KNOWLEDGE_BASE_INDICES_URL, {
+ method: 'GET',
+ signal,
+ version: API_VERSIONS.internal.v1,
+ });
+
+ return response as GetKnowledgeBaseIndicesResponse;
+ } catch (error) {
+ return error as IHttpFetchError;
+ }
+};
diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/knowledge_base/use_knowledge_base_indices.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/knowledge_base/use_knowledge_base_indices.test.tsx
new file mode 100644
index 0000000000000..4f258aa3c1964
--- /dev/null
+++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/knowledge_base/use_knowledge_base_indices.test.tsx
@@ -0,0 +1,85 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import { act, renderHook } from '@testing-library/react-hooks';
+import {
+ useKnowledgeBaseIndices,
+ UseKnowledgeBaseIndicesParams,
+} from './use_knowledge_base_indices';
+import { getKnowledgeBaseIndices as _getKnowledgeBaseIndices } from './api';
+
+const getKnowledgeBaseIndicesMock = _getKnowledgeBaseIndices as jest.Mock;
+
+jest.mock('./api', () => {
+ const actual = jest.requireActual('./api');
+ return {
+ ...actual,
+ getKnowledgeBaseIndices: jest.fn((...args) => actual.getKnowledgeBaseIndices(...args)),
+ };
+});
+
+jest.mock('@tanstack/react-query', () => ({
+ useQuery: jest.fn().mockImplementation(async (queryKey, fn, opts) => {
+ try {
+ const res = await fn({});
+ return Promise.resolve(res);
+ } catch (e) {
+ opts.onError(e);
+ }
+ }),
+}));
+
+const indicesResponse = ['index-1', 'index-2', 'index-3'];
+
+const http = {
+ fetch: jest.fn().mockResolvedValue(indicesResponse),
+};
+const toasts = {
+ addError: jest.fn(),
+};
+const defaultProps = { http, toasts } as unknown as UseKnowledgeBaseIndicesParams;
+describe('useKnowledgeBaseIndices', () => {
+ beforeEach(() => {
+ jest.clearAllMocks();
+ });
+
+ it('should call api to get knowledge base indices', async () => {
+ await act(async () => {
+ const { waitForNextUpdate } = renderHook(() => useKnowledgeBaseIndices(defaultProps));
+ await waitForNextUpdate();
+
+ expect(defaultProps.http.fetch).toHaveBeenCalledWith(
+ '/internal/elastic_assistant/knowledge_base/_indices',
+ {
+ method: 'GET',
+ signal: undefined,
+ version: '1',
+ }
+ );
+ expect(toasts.addError).not.toHaveBeenCalled();
+ });
+ });
+
+ it('should return indices response', async () => {
+ await act(async () => {
+ const { result, waitForNextUpdate } = renderHook(() => useKnowledgeBaseIndices(defaultProps));
+ await waitForNextUpdate();
+
+ await expect(result.current).resolves.toStrictEqual(indicesResponse);
+ });
+ });
+
+ it('should display error toast when api throws error', async () => {
+ getKnowledgeBaseIndicesMock.mockRejectedValue(new Error('this is an error'));
+ await act(async () => {
+ const { waitForNextUpdate } = renderHook(() => useKnowledgeBaseIndices(defaultProps));
+ await waitForNextUpdate();
+
+ expect(toasts.addError).toHaveBeenCalled();
+ });
+ });
+});
diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/knowledge_base/use_knowledge_base_indices.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/knowledge_base/use_knowledge_base_indices.tsx
new file mode 100644
index 0000000000000..2b245c70754b5
--- /dev/null
+++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/knowledge_base/use_knowledge_base_indices.tsx
@@ -0,0 +1,59 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import type { UseQueryResult } from '@tanstack/react-query';
+import { useQuery } from '@tanstack/react-query';
+import type { HttpSetup, IHttpFetchError, ResponseErrorBody } from '@kbn/core-http-browser';
+import type { IToasts } from '@kbn/core-notifications-browser';
+import { i18n } from '@kbn/i18n';
+import { GetKnowledgeBaseIndicesResponse } from '@kbn/elastic-assistant-common';
+import { getKnowledgeBaseIndices } from './api';
+
+const KNOWLEDGE_BASE_INDICES_QUERY_KEY = ['elastic-assistant', 'knowledge-base-indices'];
+
+export interface UseKnowledgeBaseIndicesParams {
+ http: HttpSetup;
+ toasts?: IToasts;
+}
+
+/**
+ * Hook for getting indices that have fields of `semantic_text` type.
+ *
+ * @param {Object} options - The options object.
+ * @param {HttpSetup} options.http - HttpSetup
+ * @param {IToasts} [options.toasts] - IToasts
+ *
+ * @returns {useQuery} hook for getting indices that have fields of `semantic_text` type
+ */
+export const useKnowledgeBaseIndices = ({
+ http,
+ toasts,
+}: UseKnowledgeBaseIndicesParams): UseQueryResult<
+ GetKnowledgeBaseIndicesResponse,
+ IHttpFetchError
+> => {
+ return useQuery(
+ KNOWLEDGE_BASE_INDICES_QUERY_KEY,
+ async ({ signal }) => {
+ return getKnowledgeBaseIndices({ http, signal });
+ },
+ {
+ onError: (error: IHttpFetchError) => {
+ if (error.name !== 'AbortError') {
+ toasts?.addError(
+ error.body && error.body.message ? new Error(error.body.message) : error,
+ {
+ title: i18n.translate('xpack.elasticAssistant.knowledgeBase.indicesError', {
+ defaultMessage: 'Error fetching Knowledge Base Indices',
+ }),
+ }
+ );
+ }
+ },
+ }
+ );
+};
diff --git a/x-pack/packages/kbn-elastic-assistant/impl/knowledge_base/knowledge_base_settings_management/index.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/knowledge_base/knowledge_base_settings_management/index.test.tsx
index 4f85dae819f0f..cfc8d2d3d52f9 100644
--- a/x-pack/packages/kbn-elastic-assistant/impl/knowledge_base/knowledge_base_settings_management/index.test.tsx
+++ b/x-pack/packages/kbn-elastic-assistant/impl/knowledge_base/knowledge_base_settings_management/index.test.tsx
@@ -24,6 +24,7 @@ import { MOCK_QUICK_PROMPTS } from '../../mock/quick_prompt';
import { useAssistantContext } from '../../..';
import { I18nProvider } from '@kbn/i18n-react';
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
+import { useKnowledgeBaseIndices } from '../../assistant/api/knowledge_base/use_knowledge_base_indices';
const mockContext = {
basePromptContexts: MOCK_QUICK_PROMPTS,
@@ -44,13 +45,13 @@ jest.mock('../../assistant/api/knowledge_base/entries/use_update_knowledge_base_
jest.mock('../../assistant/api/knowledge_base/entries/use_delete_knowledge_base_entries');
jest.mock('../../assistant/settings/use_settings_updater/use_settings_updater');
+jest.mock('../../assistant/api/knowledge_base/use_knowledge_base_indices');
jest.mock('../../assistant/api/knowledge_base/use_knowledge_base_status');
jest.mock('../../assistant/api/knowledge_base/entries/use_knowledge_base_entries');
jest.mock(
'../../assistant/common/components/assistant_settings_management/flyout/use_flyout_modal_visibility'
);
const mockDataViews = {
- getIndices: jest.fn().mockResolvedValue([{ name: 'index-1' }, { name: 'index-2' }]),
getFieldsForWildcard: jest.fn().mockResolvedValue([
{ name: 'field-1', esTypes: ['semantic_text'] },
{ name: 'field-2', esTypes: ['text'] },
@@ -148,6 +149,9 @@ describe('KnowledgeBaseSettingsManagement', () => {
},
isFetched: true,
});
+ (useKnowledgeBaseIndices as jest.Mock).mockReturnValue({
+ data: { indices: ['index-1', 'index-2'] },
+ });
(useKnowledgeBaseEntries as jest.Mock).mockReturnValue({
data: { data: mockData },
isFetching: false,
diff --git a/x-pack/packages/kbn-elastic-assistant/impl/knowledge_base/knowledge_base_settings_management/index.tsx b/x-pack/packages/kbn-elastic-assistant/impl/knowledge_base/knowledge_base_settings_management/index.tsx
index 092cc7e36689e..904ceba7a1f6f 100644
--- a/x-pack/packages/kbn-elastic-assistant/impl/knowledge_base/knowledge_base_settings_management/index.tsx
+++ b/x-pack/packages/kbn-elastic-assistant/impl/knowledge_base/knowledge_base_settings_management/index.tsx
@@ -434,6 +434,7 @@ export const KnowledgeBaseSettingsManagement: React.FC = React.memo(({ d
/>
) : (
{
const mockSetEntry = jest.fn();
const mockDataViews = {
- getIndices: jest.fn().mockResolvedValue([{ name: 'index-1' }, { name: 'index-2' }]),
getFieldsForWildcard: jest.fn().mockResolvedValue([
{ name: 'field-1', esTypes: ['semantic_text'] },
{ name: 'field-2', esTypes: ['text'] },
@@ -24,6 +27,9 @@ describe('IndexEntryEditor', () => {
]),
getExistingIndices: jest.fn().mockResolvedValue(['index-1']),
} as unknown as DataViewsContract;
+ const http = {
+ get: jest.fn(),
+ } as unknown as HttpSetup;
const defaultProps = {
dataViews: mockDataViews,
@@ -37,10 +43,14 @@ describe('IndexEntryEditor', () => {
queryDescription: 'Test Query Description',
users: [],
} as unknown as IndexEntry,
+ http,
};
beforeEach(() => {
jest.clearAllMocks();
+ (useKnowledgeBaseIndices as jest.Mock).mockReturnValue({
+ data: { indices: ['index-1', 'index-2'] },
+ });
});
it('renders the form fields with initial values', async () => {
@@ -102,7 +112,6 @@ describe('IndexEntryEditor', () => {
const { getAllByTestId, getByTestId } = render( );
await waitFor(() => {
- expect(mockDataViews.getIndices).toHaveBeenCalled();
fireEvent.click(getByTestId('index-combobox'));
fireEvent.click(getAllByTestId('comboBoxToggleListButton')[0]);
fireEvent.click(getByTestId('index-2'));
diff --git a/x-pack/packages/kbn-elastic-assistant/impl/knowledge_base/knowledge_base_settings_management/index_entry_editor.tsx b/x-pack/packages/kbn-elastic-assistant/impl/knowledge_base/knowledge_base_settings_management/index_entry_editor.tsx
index dfc3cd0086686..b55fb4b1b8270 100644
--- a/x-pack/packages/kbn-elastic-assistant/impl/knowledge_base/knowledge_base_settings_management/index_entry_editor.tsx
+++ b/x-pack/packages/kbn-elastic-assistant/impl/knowledge_base/knowledge_base_settings_management/index_entry_editor.tsx
@@ -20,10 +20,13 @@ import useAsync from 'react-use/lib/useAsync';
import React, { useCallback, useMemo } from 'react';
import { IndexEntry } from '@kbn/elastic-assistant-common';
import { DataViewsContract } from '@kbn/data-views-plugin/public';
+import { HttpSetup } from '@kbn/core-http-browser';
import * as i18n from './translations';
import { isGlobalEntry } from './helpers';
+import { useKnowledgeBaseIndices } from '../../assistant/api/knowledge_base/use_knowledge_base_indices';
interface Props {
+ http: HttpSetup;
dataViews: DataViewsContract;
entry?: IndexEntry;
originalEntry?: IndexEntry;
@@ -32,7 +35,7 @@ interface Props {
}
export const IndexEntryEditor: React.FC = React.memo(
- ({ dataViews, entry, setEntry, hasManageGlobalKnowledgeBase, originalEntry }) => {
+ ({ http, dataViews, entry, setEntry, hasManageGlobalKnowledgeBase, originalEntry }) => {
const privateUsers = useMemo(() => {
const originalUsers = originalEntry?.users;
if (originalEntry && !isGlobalEntry(originalEntry)) {
@@ -93,18 +96,16 @@ export const IndexEntryEditor: React.FC = React.memo(
entry?.users?.length === 0 ? sharingOptions[1].value : sharingOptions[0].value;
// Index
- const indexOptions = useAsync(async () => {
- const indices = await dataViews.getIndices({
- pattern: '*',
- isRollupIndex: () => false,
- });
-
- return indices.map((index) => ({
- 'data-test-subj': index.name,
- label: index.name,
- value: index.name,
+ const { data: kbIndices } = useKnowledgeBaseIndices({
+ http,
+ });
+ const indexOptions = useMemo(() => {
+ return kbIndices?.indices.map((index) => ({
+ 'data-test-subj': index,
+ label: index,
+ value: index,
}));
- }, [dataViews]);
+ }, [kbIndices?.indices]);
const { value: isMissingIndex } = useAsync(async () => {
if (!entry?.index?.length) return false;
@@ -272,6 +273,7 @@ export const IndexEntryEditor: React.FC = React.memo(
fullWidth
isInvalid={isMissingIndex}
error={isMissingIndex && <>{i18n.MISSING_INDEX_ERROR}>}
+ helpText={i18n.ENTRY_INDEX_NAME_INPUT_DESCRIPTION}
>
= React.memo(
singleSelection={{ asPlainText: true }}
onCreateOption={onCreateIndexOption}
fullWidth
- options={indexOptions.value ?? []}
+ options={indexOptions ?? []}
selectedOptions={
entry?.index
? [
diff --git a/x-pack/packages/kbn-elastic-assistant/impl/knowledge_base/knowledge_base_settings_management/translations.ts b/x-pack/packages/kbn-elastic-assistant/impl/knowledge_base/knowledge_base_settings_management/translations.ts
index 98af0eabea6b5..24784586edcdf 100644
--- a/x-pack/packages/kbn-elastic-assistant/impl/knowledge_base/knowledge_base_settings_management/translations.ts
+++ b/x-pack/packages/kbn-elastic-assistant/impl/knowledge_base/knowledge_base_settings_management/translations.ts
@@ -234,6 +234,14 @@ export const ENTRY_INDEX_NAME_INPUT_LABEL = i18n.translate(
}
);
+export const ENTRY_INDEX_NAME_INPUT_DESCRIPTION = i18n.translate(
+ 'xpack.elasticAssistant.assistant.settings.knowledgeBaseSettingsManagement.entryIndexNameInputDescription',
+ {
+ defaultMessage:
+ 'Indices will only be available to select from this drop down list if they contain a semantic_text field. Please refer to the documentation for more information on configuring an index for use as a custom knowledge source.',
+ }
+);
+
export const ENTRY_FIELD_INPUT_LABEL = i18n.translate(
'xpack.elasticAssistant.assistant.settings.knowledgeBaseSettingsManagement.entryFieldInputLabel',
{
diff --git a/x-pack/plugins/elastic_assistant/server/__mocks__/request.ts b/x-pack/plugins/elastic_assistant/server/__mocks__/request.ts
index 9dc57bab25ef3..f6f3007c8f948 100644
--- a/x-pack/plugins/elastic_assistant/server/__mocks__/request.ts
+++ b/x-pack/plugins/elastic_assistant/server/__mocks__/request.ts
@@ -23,6 +23,7 @@ import {
ELASTIC_AI_ASSISTANT_CONVERSATIONS_URL_BY_ID_MESSAGES,
ELASTIC_AI_ASSISTANT_CONVERSATIONS_URL_FIND,
ELASTIC_AI_ASSISTANT_EVALUATE_URL,
+ ELASTIC_AI_ASSISTANT_KNOWLEDGE_BASE_INDICES_URL,
ELASTIC_AI_ASSISTANT_KNOWLEDGE_BASE_URL,
ELASTIC_AI_ASSISTANT_PROMPTS_URL_BULK_ACTION,
ELASTIC_AI_ASSISTANT_PROMPTS_URL_FIND,
@@ -46,6 +47,12 @@ export const requestMock = {
create: httpServerMock.createKibanaRequest,
};
+export const getGetKnowledgeBaseIndicesRequest = () =>
+ requestMock.create({
+ method: 'get',
+ path: ELASTIC_AI_ASSISTANT_KNOWLEDGE_BASE_INDICES_URL,
+ });
+
export const getGetKnowledgeBaseStatusRequest = (resource?: string) =>
requestMock.create({
method: 'get',
diff --git a/x-pack/plugins/elastic_assistant/server/routes/index.ts b/x-pack/plugins/elastic_assistant/server/routes/index.ts
index a6d7a4298c2b7..928c3211faa9b 100644
--- a/x-pack/plugins/elastic_assistant/server/routes/index.ts
+++ b/x-pack/plugins/elastic_assistant/server/routes/index.ts
@@ -14,6 +14,7 @@ export { getAttackDiscoveryRoute } from './attack_discovery/get/get_attack_disco
// Knowledge Base
export { deleteKnowledgeBaseRoute } from './knowledge_base/delete_knowledge_base';
+export { getKnowledgeBaseIndicesRoute } from './knowledge_base/get_knowledge_base_indices';
export { getKnowledgeBaseStatusRoute } from './knowledge_base/get_knowledge_base_status';
export { postKnowledgeBaseRoute } from './knowledge_base/post_knowledge_base';
diff --git a/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/get_knowledge_base_indices.test.ts b/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/get_knowledge_base_indices.test.ts
new file mode 100644
index 0000000000000..e7eaa75407248
--- /dev/null
+++ b/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/get_knowledge_base_indices.test.ts
@@ -0,0 +1,79 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import { getKnowledgeBaseIndicesRoute } from './get_knowledge_base_indices';
+import { serverMock } from '../../__mocks__/server';
+import { requestContextMock } from '../../__mocks__/request_context';
+import { getGetKnowledgeBaseIndicesRequest } from '../../__mocks__/request';
+
+const mockFieldCaps = {
+ indices: [
+ '.ds-logs-endpoint.alerts-default-2024.10.31-000001',
+ '.ds-metrics-endpoint.metadata-default-2024.10.31-000001',
+ '.internal.alerts-security.alerts-default-000001',
+ 'metrics-endpoint.metadata_current_default',
+ 'semantic-index-1',
+ 'semantic-index-2',
+ ],
+ fields: {
+ content: {
+ unmapped: {
+ type: 'unmapped',
+ metadata_field: false,
+ searchable: false,
+ aggregatable: false,
+ indices: [
+ '.ds-logs-endpoint.alerts-default-2024.10.31-000001',
+ '.ds-metrics-endpoint.metadata-default-2024.10.31-000001',
+ '.internal.alerts-security.alerts-default-000001',
+ 'metrics-endpoint.metadata_current_default',
+ ],
+ },
+ semantic_text: {
+ type: 'semantic_text',
+ metadata_field: false,
+ searchable: true,
+ aggregatable: false,
+ indices: ['semantic-index-1', 'semantic-index-2'],
+ },
+ },
+ },
+};
+
+describe('Get Knowledge Base Status Route', () => {
+ let server: ReturnType;
+
+ let { context } = requestContextMock.createTools();
+
+ beforeEach(() => {
+ server = serverMock.create();
+ ({ context } = requestContextMock.createTools());
+ context.core.elasticsearch.client.asCurrentUser.fieldCaps.mockResponse(mockFieldCaps);
+
+ getKnowledgeBaseIndicesRoute(server.router);
+ });
+
+ describe('Status codes', () => {
+ test('returns 200 and all indices with `semantic_text` type fields', async () => {
+ const response = await server.inject(
+ getGetKnowledgeBaseIndicesRequest(),
+ requestContextMock.convertContext(context)
+ );
+
+ expect(response.status).toEqual(200);
+ expect(response.body).toEqual({
+ indices: ['semantic-index-1', 'semantic-index-2'],
+ });
+ expect(context.core.elasticsearch.client.asCurrentUser.fieldCaps).toBeCalledWith({
+ index: '*',
+ fields: '*',
+ types: ['semantic_text'],
+ include_unmapped: true,
+ });
+ });
+ });
+});
diff --git a/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/get_knowledge_base_indices.ts b/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/get_knowledge_base_indices.ts
new file mode 100644
index 0000000000000..18191291468de
--- /dev/null
+++ b/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/get_knowledge_base_indices.ts
@@ -0,0 +1,73 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import { transformError } from '@kbn/securitysolution-es-utils';
+
+import {
+ ELASTIC_AI_ASSISTANT_INTERNAL_API_VERSION,
+ ELASTIC_AI_ASSISTANT_KNOWLEDGE_BASE_INDICES_URL,
+ GetKnowledgeBaseIndicesResponse,
+} from '@kbn/elastic-assistant-common';
+import { IKibanaResponse } from '@kbn/core/server';
+import { buildResponse } from '../../lib/build_response';
+import { ElasticAssistantPluginRouter } from '../../types';
+
+/**
+ * Get the indices that have fields of `sematic_text` type
+ *
+ * @param router IRouter for registering routes
+ */
+export const getKnowledgeBaseIndicesRoute = (router: ElasticAssistantPluginRouter) => {
+ router.versioned
+ .get({
+ access: 'internal',
+ path: ELASTIC_AI_ASSISTANT_KNOWLEDGE_BASE_INDICES_URL,
+ options: {
+ tags: ['access:elasticAssistant'],
+ },
+ })
+ .addVersion(
+ {
+ version: ELASTIC_AI_ASSISTANT_INTERNAL_API_VERSION,
+ validate: false,
+ },
+ async (context, _, response): Promise> => {
+ const resp = buildResponse(response);
+ const ctx = await context.resolve(['core', 'elasticAssistant', 'licensing']);
+ const logger = ctx.elasticAssistant.logger;
+ const esClient = ctx.core.elasticsearch.client.asCurrentUser;
+
+ try {
+ const body: GetKnowledgeBaseIndicesResponse = {
+ indices: [],
+ };
+
+ const res = await esClient.fieldCaps({
+ index: '*',
+ fields: '*',
+ types: ['semantic_text'],
+ include_unmapped: true,
+ });
+
+ const indices = res.fields.content?.semantic_text?.indices;
+ if (indices) {
+ body.indices = Array.isArray(indices) ? indices : [indices];
+ }
+
+ return response.ok({ body });
+ } catch (err) {
+ logger.error(err);
+ const error = transformError(err);
+
+ return resp.error({
+ body: error.message,
+ statusCode: error.statusCode,
+ });
+ }
+ }
+ );
+};
diff --git a/x-pack/plugins/elastic_assistant/server/routes/register_routes.ts b/x-pack/plugins/elastic_assistant/server/routes/register_routes.ts
index 7898629e15b5c..d722e31cb2338 100644
--- a/x-pack/plugins/elastic_assistant/server/routes/register_routes.ts
+++ b/x-pack/plugins/elastic_assistant/server/routes/register_routes.ts
@@ -18,6 +18,7 @@ import { updateConversationRoute } from './user_conversations/update_route';
import { findUserConversationsRoute } from './user_conversations/find_route';
import { bulkActionConversationsRoute } from './user_conversations/bulk_actions_route';
import { appendConversationMessageRoute } from './user_conversations/append_conversation_messages_route';
+import { getKnowledgeBaseIndicesRoute } from './knowledge_base/get_knowledge_base_indices';
import { getKnowledgeBaseStatusRoute } from './knowledge_base/get_knowledge_base_status';
import { postKnowledgeBaseRoute } from './knowledge_base/post_knowledge_base';
import { getEvaluateRoute } from './evaluate/get_evaluate';
@@ -60,6 +61,7 @@ export const registerRoutes = (
findUserConversationsRoute(router);
// Knowledge Base Setup
+ getKnowledgeBaseIndicesRoute(router);
getKnowledgeBaseStatusRoute(router);
postKnowledgeBaseRoute(router);
diff --git a/x-pack/test/functional/es_archives/security_solution/semantic_text_fields/data.json b/x-pack/test/functional/es_archives/security_solution/semantic_text_fields/data.json
new file mode 100644
index 0000000000000..3cef2aae8ff4f
--- /dev/null
+++ b/x-pack/test/functional/es_archives/security_solution/semantic_text_fields/data.json
@@ -0,0 +1,161 @@
+{
+ "type": "doc",
+ "value": {
+ "id": "1",
+ "index": "semantic_text_fields",
+ "source": {
+ "@timestamp": "2024-11-01T15:52:16.648Z",
+ "content": {
+ "text": "my favorite color is green",
+ "inference": {
+ "inference_id": "elastic-security-ai-assistant-elser2",
+ "model_settings": {
+ "task_type": "sparse_embedding"
+ },
+ "chunks": [
+ {
+ "text": "my favorite color is green",
+ "embeddings": {
+ "green": 2.8714406,
+ "favorite": 2.5192127,
+ "color": 2.499853,
+ "favourite": 1.7829537,
+ "colors": 1.2280636,
+ "my": 1.1292906,
+ "friend": 0.87358737,
+ "rainbow": 0.8518238,
+ "love": 0.8146304,
+ "choice": 0.7517174,
+ "nature": 0.62242556,
+ "beautiful": 0.6110072,
+ "personality": 0.5559894,
+ "dr": 0.5296162,
+ "your": 0.51745296,
+ "art": 0.45324937,
+ "colour": 0.44607934,
+ "theme": 0.4360909,
+ "mood": 0.43253413,
+ "personal": 0.4201024,
+ "style": 0.39435387,
+ "blue": 0.38090202,
+ "nickname": 0.37952134,
+ "design": 0.37043664,
+ "dream": 0.3620103,
+ "desire": 0.35553402,
+ "best": 0.32577398,
+ "favorites": 0.30795538,
+ "humor": 0.30244058,
+ "popular": 0.2957705,
+ "brand": 0.28912684,
+ "neutral": 0.28545624,
+ "passion": 0.28457505,
+ "i": 0.27936152,
+ "preference": 0.24133624,
+ "inspiration": 0.24008423,
+ "purple": 0.23559056,
+ "culture": 0.23260204,
+ "flower": 0.21190192,
+ "bright": 0.20443156,
+ "beauty": 0.20076275,
+ "aura": 0.19355631,
+ "palette": 0.17414959,
+ "wonder": 0.16287619,
+ "photo": 0.16179858,
+ "orange": 0.14167522,
+ "dress": 0.12800644,
+ "camouflage": 0.061010167,
+ "grass": 0.05907971,
+ "tone": 0.028165601,
+ "painting": 0.026917756,
+ "cartoon": 0.019969255,
+ "always": 0.013872984,
+ "yellow": 0.0113299545,
+ "colorful": 0.0036836881
+ }
+ }
+ ]
+ }
+ },
+ "text": "my favorite color is green"
+ }
+ }
+}
+
+{
+ "type": "doc",
+ "value": {
+ "id": "1",
+ "index": "semantic_text_fields",
+ "source": {
+ "@timestamp": "2024-11-01T15:59:34.610Z",
+ "content": {
+ "text": "my favorite food is pasta",
+ "inference": {
+ "inference_id": "elastic-security-ai-assistant-elser2",
+ "model_settings": {
+ "task_type": "sparse_embedding"
+ },
+ "chunks": [
+ {
+ "text": "my favorite food is pasta",
+ "embeddings": {
+ "pasta": 2.8800304,
+ "favorite": 2.604094,
+ "food": 2.3218846,
+ "favourite": 1.9555497,
+ "foods": 1.8483086,
+ "my": 1.2514912,
+ "italian": 1.1385239,
+ "noodles": 0.9831485,
+ "ravi": 0.8951362,
+ "friend": 0.73949015,
+ "popular": 0.7100698,
+ "rich": 0.6932188,
+ "diet": 0.6634609,
+ "love": 0.64316577,
+ "famous": 0.5988269,
+ "eat": 0.5932935,
+ "your": 0.5730934,
+ "flavor": 0.54839855,
+ "i": 0.54047567,
+ "choice": 0.52978134,
+ "taste": 0.5071018,
+ "personal": 0.49576512,
+ "favorites": 0.3890845,
+ "soup": 0.37032336,
+ "rome": 0.31307018,
+ "list": 0.28725958,
+ "rice": 0.28322402,
+ "dinner": 0.26971146,
+ "familiar": 0.22095734,
+ "vegetable": 0.21891576,
+ "bland": 0.20330611,
+ "obsession": 0.19760907,
+ "latin": 0.19196871,
+ "drink": 0.18664016,
+ "culture": 0.18313695,
+ "shop": 0.18128464,
+ "style": 0.16871399,
+ "greek": 0.16838282,
+ "our": 0.1634054,
+ "is": 0.14557752,
+ "category": 0.12824115,
+ "chef": 0.11436942,
+ "italy": 0.095480226,
+ "family": 0.0816377,
+ "classic": 0.064411946,
+ "best": 0.05733679,
+ "always": 0.054197904,
+ "type": 0.0500416,
+ "lover": 0.037193555,
+ "bread": 0.031606384,
+ "fruit": 0.00062303204
+ }
+ }
+ ]
+ }
+ },
+ "text": "my favorite food is pasta"
+ }
+ }
+}
diff --git a/x-pack/test/functional/es_archives/security_solution/semantic_text_fields/mappings.json b/x-pack/test/functional/es_archives/security_solution/semantic_text_fields/mappings.json
new file mode 100644
index 0000000000000..7c5deef42aafb
--- /dev/null
+++ b/x-pack/test/functional/es_archives/security_solution/semantic_text_fields/mappings.json
@@ -0,0 +1,30 @@
+{
+ "type": "index",
+ "value": {
+ "index": "semantic_text_fields",
+ "mappings": {
+ "dynamic": "strict",
+ "properties": {
+ "@timestamp": {
+ "type": "date"
+ },
+ "content": {
+ "type": "semantic_text",
+ "inference_id": "elastic-security-ai-assistant-elser2",
+ "model_settings": {
+ "task_type": "sparse_embedding"
+ }
+ },
+ "text": {
+ "type": "text"
+ }
+ }
+ },
+ "settings": {
+ "index": {
+ "number_of_replicas": "1",
+ "number_of_shards": "1"
+ }
+ }
+ }
+}
diff --git a/x-pack/test/security_solution_api_integration/test_suites/genai/knowledge_base/entries/trial_license_complete_tier/index.ts b/x-pack/test/security_solution_api_integration/test_suites/genai/knowledge_base/entries/trial_license_complete_tier/index.ts
index 21469b8e67606..8aea7b00f9eed 100644
--- a/x-pack/test/security_solution_api_integration/test_suites/genai/knowledge_base/entries/trial_license_complete_tier/index.ts
+++ b/x-pack/test/security_solution_api_integration/test_suites/genai/knowledge_base/entries/trial_license_complete_tier/index.ts
@@ -19,5 +19,6 @@ export default function ({ loadTestFile, getService }: FtrProviderContext) {
});
loadTestFile(require.resolve('./entries'));
+ loadTestFile(require.resolve('./semntic_text_indices'));
});
}
diff --git a/x-pack/test/security_solution_api_integration/test_suites/genai/knowledge_base/entries/trial_license_complete_tier/semntic_text_indices.ts b/x-pack/test/security_solution_api_integration/test_suites/genai/knowledge_base/entries/trial_license_complete_tier/semntic_text_indices.ts
new file mode 100644
index 0000000000000..d983ed79b97ad
--- /dev/null
+++ b/x-pack/test/security_solution_api_integration/test_suites/genai/knowledge_base/entries/trial_license_complete_tier/semntic_text_indices.ts
@@ -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 expect from 'expect';
+import { FtrProviderContext } from '../../../../../ftr_provider_context';
+import { getKnowledgeBaseIndices } from '../utils/helpers';
+
+export default ({ getService }: FtrProviderContext) => {
+ const supertest = getService('supertest');
+ const log = getService('log');
+ const esArchiver = getService('esArchiver');
+
+ describe('@ess Security AI Assistant - Indices with `semantic_text` fields', () => {
+ before(async () => {
+ await esArchiver.load('x-pack/test/functional/es_archives/security_solution/ignore_fields');
+ await esArchiver.load(
+ 'x-pack/test/functional/es_archives/security_solution/semantic_text_fields'
+ );
+ });
+
+ after(async () => {
+ await esArchiver.unload('x-pack/test/functional/es_archives/security_solution/ignore_fields');
+ await esArchiver.unload(
+ 'x-pack/test/functional/es_archives/security_solution/semantic_text_fields'
+ );
+ });
+
+ it('should return all existing indices with `semantic_text` fields', async () => {
+ const indices = await getKnowledgeBaseIndices({ supertest, log });
+
+ expect(indices).toEqual({ indices: ['semantic_text_fields'] });
+ });
+ });
+};
diff --git a/x-pack/test/security_solution_api_integration/test_suites/genai/knowledge_base/entries/utils/helpers.ts b/x-pack/test/security_solution_api_integration/test_suites/genai/knowledge_base/entries/utils/helpers.ts
index cdbb1cca4de24..36b2963f5b538 100644
--- a/x-pack/test/security_solution_api_integration/test_suites/genai/knowledge_base/entries/utils/helpers.ts
+++ b/x-pack/test/security_solution_api_integration/test_suites/genai/knowledge_base/entries/utils/helpers.ts
@@ -8,7 +8,9 @@
import { Client } from '@elastic/elasticsearch';
import {
CreateKnowledgeBaseResponse,
+ ELASTIC_AI_ASSISTANT_KNOWLEDGE_BASE_INDICES_URL,
ELASTIC_AI_ASSISTANT_KNOWLEDGE_BASE_URL,
+ GetKnowledgeBaseIndicesResponse,
} from '@kbn/elastic-assistant-common';
import { ELASTIC_HTTP_VERSION_HEADER } from '@kbn/core-http-common';
@@ -97,3 +99,31 @@ export const clearKnowledgeBase = async (es: Client, space = 'default') => {
refresh: true,
});
};
+
+/**
+ * Get indices with the `semantic_text` type fields
+ * @param supertest The supertest deps
+ * @param log The tooling logger
+ */
+export const getKnowledgeBaseIndices = async ({
+ supertest,
+ log,
+}: {
+ supertest: SuperTest.Agent;
+ log: ToolingLog;
+}): Promise => {
+ const response = await supertest
+ .get(ELASTIC_AI_ASSISTANT_KNOWLEDGE_BASE_INDICES_URL)
+ .set('kbn-xsrf', 'true')
+ .set(ELASTIC_HTTP_VERSION_HEADER, '1')
+ .send();
+ if (response.status !== 200) {
+ throw new Error(
+ `Unexpected non 200 ok when attempting to find entries: ${JSON.stringify(
+ response.status
+ )},${JSON.stringify(response, null, 4)}`
+ );
+ } else {
+ return response.body;
+ }
+};
From bf37a019d857e89d6dad3a6cf450ec323f0783e0 Mon Sep 17 00:00:00 2001
From: Maxim Palenov
Date: Tue, 5 Nov 2024 13:24:37 +0300
Subject: [PATCH 053/101] [Security Solution] Unskip perform bulk action ESS
FTR tests (#197660)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
**Closes: https://github.com/elastic/kibana/issues/196470**
**Closes: https://github.com/elastic/kibana/issues/196462**
## Summary
This PR unskips `perform_bulk_action_ess.ts` functional test.
## Details
`perform_bulk_action_ess.ts` includes a number of functional tests where some of them were flaky. Investigation revealed that creating enabled rules and performing bulk actions may lead to race conditions. Under that conditions rule's SO isn't updated as expected. For example legacy rule actions aren't persisted in rule's SO when it's expected by the test.
This PR includes `perform_bulk_action_ess.ts` refactoring to create disabled rules in the majority of tests. Enabled rules are created only in tests checking behavior upon rules disabling. These tests were checked multiple times and didn't demonstrate flakiness.
Additionally `@kbn/expect` was replaced with `expect` to make asserting more transparent and avoid unclear error messages.
## Flaky test results
[100 runs](https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/7274) 🟢
---
.../perform_bulk_action_ess.ts | 442 ++++++++++++------
...t_rule_with_legacy_investigation_fields.ts | 12 +-
2 files changed, 298 insertions(+), 156 deletions(-)
diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_bulk_actions/trial_license_complete_tier/perform_bulk_action_ess.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_bulk_actions/trial_license_complete_tier/perform_bulk_action_ess.ts
index fcaf94728e854..7ee0ce440caad 100644
--- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_bulk_actions/trial_license_complete_tier/perform_bulk_action_ess.ts
+++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_bulk_actions/trial_license_complete_tier/perform_bulk_action_ess.ts
@@ -5,15 +5,13 @@
* 2.0.
*/
-import { Rule } from '@kbn/alerting-plugin/common';
-import expect from '@kbn/expect';
+import expect from 'expect';
import type { RuleResponse } from '@kbn/security-solution-plugin/common/api/detection_engine';
import { getCreateEsqlRulesSchemaMock } from '@kbn/security-solution-plugin/common/api/detection_engine/model/rule_schema/mocks';
import {
BulkActionEditTypeEnum,
BulkActionTypeEnum,
} from '@kbn/security-solution-plugin/common/api/detection_engine/rule_management';
-import { BaseRuleParams } from '@kbn/security-solution-plugin/server/lib/detection_engine/rule_schema';
import {
createRule,
deleteAllRules,
@@ -30,10 +28,12 @@ import {
getRuleSavedObjectWithLegacyInvestigationFields,
getRuleSavedObjectWithLegacyInvestigationFieldsEmptyArray,
getRuleSOById,
- getSimpleRule,
getWebHookAction,
} from '../../../utils';
+// Rule's interval must be less or equal rule action's interval
+const MINIMUM_RULE_INTERVAL_FOR_LEGACY_ACTION = '1h';
+
export default ({ getService }: FtrProviderContext): void => {
const supertest = getService('supertest');
const securitySolutionApi = getService('securitySolutionApi');
@@ -51,17 +51,14 @@ export default ({ getService }: FtrProviderContext): void => {
const createWebHookConnector = () => createConnector(getWebHookAction());
- // Failing: See https://github.com/elastic/kibana/issues/173804
- // Failing: See https://github.com/elastic/kibana/issues/196470
- // Failing: See https://github.com/elastic/kibana/issues/196462
- describe.skip('@ess perform_bulk_action - ESS specific logic', () => {
+ describe('@ess perform_bulk_action - ESS specific logic', () => {
beforeEach(async () => {
await deleteAllRules(supertest, log);
});
it('should delete rules and any associated legacy actions', async () => {
const ruleId = 'ruleId';
- const [connector, rule1] = await Promise.all([
+ const [connector, rule] = await Promise.all([
supertest
.post(`/api/actions/connector`)
.set('kbn-xsrf', 'foo')
@@ -72,14 +69,22 @@ export default ({ getService }: FtrProviderContext): void => {
webhookUrl: 'http://localhost:1234',
},
}),
- createRule(supertest, log, getSimpleRule(ruleId, false)),
+
+ createRule(
+ supertest,
+ log,
+ getCustomQueryRuleParams({
+ rule_id: ruleId,
+ interval: MINIMUM_RULE_INTERVAL_FOR_LEGACY_ACTION,
+ })
+ ),
]);
- await createLegacyRuleAction(supertest, rule1.id, connector.body.id);
+ await createLegacyRuleAction(supertest, rule.id, connector.body.id);
// check for legacy sidecar action
const sidecarActionsResults = await getLegacyActionSO(es);
- expect(sidecarActionsResults.hits.hits.length).to.eql(1);
- expect(sidecarActionsResults.hits.hits[0]?._source?.references[0].id).to.eql(rule1.id);
+ expect(sidecarActionsResults.hits.hits.length).toBe(1);
+ expect(sidecarActionsResults.hits.hits[0]?._source?.references[0].id).toBe(rule.id);
const { body } = await securitySolutionApi
.performRulesBulkAction({
@@ -88,14 +93,14 @@ export default ({ getService }: FtrProviderContext): void => {
})
.expect(200);
- expect(body.attributes.summary).to.eql({ failed: 0, skipped: 0, succeeded: 1, total: 1 });
+ expect(body.attributes.summary).toEqual({ failed: 0, skipped: 0, succeeded: 1, total: 1 });
// Check that the deleted rule is returned with the response
- expect(body.attributes.results.deleted[0].name).to.eql(rule1.name);
+ expect(body.attributes.results.deleted[0].name).toEqual(rule.name);
// legacy sidecar action should be gone
const sidecarActionsPostResults = await getLegacyActionSO(es);
- expect(sidecarActionsPostResults.hits.hits.length).to.eql(0);
+ expect(sidecarActionsPostResults.hits.hits.length).toBe(0);
// Check that the updates have been persisted
await securitySolutionApi.readRule({ query: { rule_id: ruleId } }).expect(404);
@@ -103,7 +108,7 @@ export default ({ getService }: FtrProviderContext): void => {
it('should enable rules and migrate actions', async () => {
const ruleId = 'ruleId';
- const [connector, rule1] = await Promise.all([
+ const [connector, rule] = await Promise.all([
supertest
.post(`/api/actions/connector`)
.set('kbn-xsrf', 'foo')
@@ -114,14 +119,23 @@ export default ({ getService }: FtrProviderContext): void => {
webhookUrl: 'http://localhost:1234',
},
}),
- createRule(supertest, log, { ...getSimpleRule(ruleId, false), index: ['*'] }),
+ createRule(
+ supertest,
+ log,
+ getCustomQueryRuleParams({
+ rule_id: ruleId,
+ index: ['*'],
+ interval: MINIMUM_RULE_INTERVAL_FOR_LEGACY_ACTION,
+ enabled: false,
+ })
+ ),
]);
- await createLegacyRuleAction(supertest, rule1.id, connector.body.id);
+ await createLegacyRuleAction(supertest, rule.id, connector.body.id);
// check for legacy sidecar action
const sidecarActionsResults = await getLegacyActionSO(es);
- expect(sidecarActionsResults.hits.hits.length).to.eql(1);
- expect(sidecarActionsResults.hits.hits[0]?._source?.references[0].id).to.eql(rule1.id);
+ expect(sidecarActionsResults.hits.hits.length).toBe(1);
+ expect(sidecarActionsResults.hits.hits[0]?._source?.references[0].id).toBe(rule.id);
const { body } = await securitySolutionApi
.performRulesBulkAction({
@@ -130,10 +144,10 @@ export default ({ getService }: FtrProviderContext): void => {
})
.expect(200);
- expect(body.attributes.summary).to.eql({ failed: 0, skipped: 0, succeeded: 1, total: 1 });
+ expect(body.attributes.summary).toEqual({ failed: 0, skipped: 0, succeeded: 1, total: 1 });
// Check that the updated rule is returned with the response
- expect(body.attributes.results.updated[0].enabled).to.eql(true);
+ expect(body.attributes.results.updated[0].enabled).toBeTruthy();
// Check that the updates have been persisted
const { body: ruleBody } = await securitySolutionApi
@@ -142,10 +156,10 @@ export default ({ getService }: FtrProviderContext): void => {
// legacy sidecar action should be gone
const sidecarActionsPostResults = await getLegacyActionSO(es);
- expect(sidecarActionsPostResults.hits.hits.length).to.eql(0);
+ expect(sidecarActionsPostResults.hits.hits.length).toBe(0);
- expect(ruleBody.enabled).to.eql(true);
- expect(ruleBody.actions).to.eql([
+ expect(ruleBody.enabled).toBeTruthy();
+ expect(ruleBody.actions).toEqual([
{
action_type_id: '.slack',
group: 'default',
@@ -153,17 +167,17 @@ export default ({ getService }: FtrProviderContext): void => {
params: {
message: 'Hourly\nRule {{context.rule.name}} generated {{state.signals_count}} alerts',
},
- uuid: ruleBody.actions[0].uuid,
+ uuid: expect.any(String),
frequency: { summary: true, throttle: '1h', notifyWhen: 'onThrottleInterval' },
},
]);
// we want to ensure rule is executing successfully, to prevent any AAD issues related to partial update of rule SO
- await waitForRuleSuccess({ id: rule1.id, supertest, log });
+ await waitForRuleSuccess({ id: rule.id, supertest, log });
});
it('should disable rules and migrate actions', async () => {
const ruleId = 'ruleId';
- const [connector, rule1] = await Promise.all([
+ const [connector, rule] = await Promise.all([
supertest
.post(`/api/actions/connector`)
.set('kbn-xsrf', 'foo')
@@ -174,14 +188,22 @@ export default ({ getService }: FtrProviderContext): void => {
webhookUrl: 'http://localhost:1234',
},
}),
- createRule(supertest, log, getSimpleRule(ruleId, true)),
+ createRule(
+ supertest,
+ log,
+ getCustomQueryRuleParams({
+ rule_id: ruleId,
+ interval: MINIMUM_RULE_INTERVAL_FOR_LEGACY_ACTION,
+ enabled: true,
+ })
+ ),
]);
- await createLegacyRuleAction(supertest, rule1.id, connector.body.id);
+ await createLegacyRuleAction(supertest, rule.id, connector.body.id);
// check for legacy sidecar action
const sidecarActionsResults = await getLegacyActionSO(es);
- expect(sidecarActionsResults.hits.hits.length).to.eql(1);
- expect(sidecarActionsResults.hits.hits[0]?._source?.references[0].id).to.eql(rule1.id);
+ expect(sidecarActionsResults.hits.hits.length).toBe(1);
+ expect(sidecarActionsResults.hits.hits[0]?._source?.references[0].id).toBe(rule.id);
const { body } = await securitySolutionApi
.performRulesBulkAction({
@@ -190,10 +212,10 @@ export default ({ getService }: FtrProviderContext): void => {
})
.expect(200);
- expect(body.attributes.summary).to.eql({ failed: 0, skipped: 0, succeeded: 1, total: 1 });
+ expect(body.attributes.summary).toEqual({ failed: 0, skipped: 0, succeeded: 1, total: 1 });
// Check that the updated rule is returned with the response
- expect(body.attributes.results.updated[0].enabled).to.eql(false);
+ expect(body.attributes.results.updated[0].enabled).toBeFalsy();
// Check that the updates have been persisted
const { body: ruleBody } = await securitySolutionApi
@@ -202,10 +224,10 @@ export default ({ getService }: FtrProviderContext): void => {
// legacy sidecar action should be gone
const sidecarActionsPostResults = await getLegacyActionSO(es);
- expect(sidecarActionsPostResults.hits.hits.length).to.eql(0);
+ expect(sidecarActionsPostResults.hits.hits.length).toBe(0);
- expect(ruleBody.enabled).to.eql(false);
- expect(ruleBody.actions).to.eql([
+ expect(ruleBody.enabled).toBeFalsy();
+ expect(ruleBody.actions).toEqual([
{
action_type_id: '.slack',
group: 'default',
@@ -213,7 +235,7 @@ export default ({ getService }: FtrProviderContext): void => {
params: {
message: 'Hourly\nRule {{context.rule.name}} generated {{state.signals_count}} alerts',
},
- uuid: ruleBody.actions[0].uuid,
+ uuid: expect.any(String),
frequency: { summary: true, throttle: '1h', notifyWhen: 'onThrottleInterval' },
},
]);
@@ -232,14 +254,21 @@ export default ({ getService }: FtrProviderContext): void => {
webhookUrl: 'http://localhost:1234',
},
}),
- createRule(supertest, log, getSimpleRule(ruleId, true)),
+ createRule(
+ supertest,
+ log,
+ getCustomQueryRuleParams({
+ rule_id: ruleId,
+ interval: MINIMUM_RULE_INTERVAL_FOR_LEGACY_ACTION,
+ })
+ ),
]);
await createLegacyRuleAction(supertest, ruleToDuplicate.id, connector.body.id);
// check for legacy sidecar action
const sidecarActionsResults = await getLegacyActionSO(es);
- expect(sidecarActionsResults.hits.hits.length).to.eql(1);
- expect(sidecarActionsResults.hits.hits[0]?._source?.references[0].id).to.eql(
+ expect(sidecarActionsResults.hits.hits.length).toBe(1);
+ expect(sidecarActionsResults.hits.hits[0]?._source?.references[0].id).toBe(
ruleToDuplicate.id
);
@@ -254,22 +283,21 @@ export default ({ getService }: FtrProviderContext): void => {
})
.expect(200);
- expect(body.attributes.summary).to.eql({ failed: 0, skipped: 0, succeeded: 1, total: 1 });
+ expect(body.attributes.summary).toEqual({ failed: 0, skipped: 0, succeeded: 1, total: 1 });
// Check that the duplicated rule is returned with the response
- expect(body.attributes.results.created[0].name).to.eql(`${ruleToDuplicate.name} [Duplicate]`);
+ expect(body.attributes.results.created[0].name).toBe(`${ruleToDuplicate.name} [Duplicate]`);
// Check that the updates have been persisted
const { body: rulesResponse } = await securitySolutionApi
.findRules({ query: {} })
.expect(200);
- expect(rulesResponse.total).to.eql(2);
+ expect(rulesResponse.total).toBe(2);
rulesResponse.data.forEach((rule: RuleResponse) => {
- const uuid = rule.actions[0].uuid;
- expect(rule.actions).to.eql([
- {
+ expect(rule.actions).toEqual([
+ expect.objectContaining({
action_type_id: '.slack',
group: 'default',
id: connector.body.id,
@@ -277,9 +305,8 @@ export default ({ getService }: FtrProviderContext): void => {
message:
'Hourly\nRule {{context.rule.name}} generated {{state.signals_count}} alerts',
},
- ...(uuid ? { uuid } : {}),
frequency: { summary: true, throttle: '1h', notifyWhen: 'onThrottleInterval' },
- },
+ }),
]);
});
});
@@ -299,7 +326,7 @@ export default ({ getService }: FtrProviderContext): void => {
.expect(200);
// Check that the duplicated rule is returned with the correct rule_source
- expect(body.attributes.results.created[0].rule_source).to.eql({
+ expect(body.attributes.results.created[0].rule_source).toEqual({
type: 'internal',
});
});
@@ -325,8 +352,13 @@ export default ({ getService }: FtrProviderContext): void => {
})
.expect(500);
- expect(body.attributes.summary).to.eql({ failed: 1, skipped: 0, succeeded: 0, total: 1 });
- expect(body.attributes.errors[0]).to.eql({
+ expect(body.attributes.summary).toEqual({
+ failed: 1,
+ skipped: 0,
+ succeeded: 0,
+ total: 1,
+ });
+ expect(body.attributes.errors[0]).toEqual({
message:
"Index patterns can't be added. ES|QL rule doesn't have index patterns property",
status_code: 500,
@@ -353,31 +385,41 @@ export default ({ getService }: FtrProviderContext): void => {
webhookUrl: 'http://localhost:1234',
},
}),
- createRule(supertest, log, getSimpleRule(ruleId, true)),
+ createRule(
+ supertest,
+ log,
+ getCustomQueryRuleParams({
+ rule_id: ruleId,
+ interval: MINIMUM_RULE_INTERVAL_FOR_LEGACY_ACTION,
+ })
+ ),
]);
await createLegacyRuleAction(supertest, ruleToDuplicate.id, connector.body.id);
// check for legacy sidecar action
const sidecarActionsResults = await getLegacyActionSO(es);
- expect(sidecarActionsResults.hits.hits.length).to.eql(1);
- expect(sidecarActionsResults.hits.hits[0]?._source?.references[0].id).to.eql(
+ expect(sidecarActionsResults.hits.hits.length).toBe(1);
+ expect(sidecarActionsResults.hits.hits[0]?._source?.references[0].id).toBe(
ruleToDuplicate.id
);
- const { body: setTagsBody } = await securitySolutionApi.performRulesBulkAction({
- body: {
- query: '',
- action: BulkActionTypeEnum.edit,
- [BulkActionTypeEnum.edit]: [
- {
- type: BulkActionEditTypeEnum.set_tags,
- value: ['reset-tag'],
- },
- ],
- },
- query: {},
- });
- expect(setTagsBody.attributes.summary).to.eql({
+ const { body: setTagsBody } = await securitySolutionApi
+ .performRulesBulkAction({
+ body: {
+ query: '',
+ action: BulkActionTypeEnum.edit,
+ [BulkActionTypeEnum.edit]: [
+ {
+ type: BulkActionEditTypeEnum.set_tags,
+ value: ['reset-tag'],
+ },
+ ],
+ },
+ query: {},
+ })
+ .expect(200);
+
+ expect(setTagsBody.attributes.summary).toEqual({
failed: 0,
skipped: 0,
succeeded: 1,
@@ -391,11 +433,10 @@ export default ({ getService }: FtrProviderContext): void => {
// Sidecar should be removed
const sidecarActionsPostResults = await getLegacyActionSO(es);
- expect(sidecarActionsPostResults.hits.hits.length).to.eql(0);
-
- expect(setTagsRule.tags).to.eql(['reset-tag']);
- expect(setTagsRule.actions).to.eql([
+ expect(sidecarActionsPostResults.hits.hits.length).toBe(0);
+ expect(setTagsRule.tags).toEqual(['reset-tag']);
+ expect(setTagsRule.actions).toEqual([
{
action_type_id: '.slack',
group: 'default',
@@ -404,7 +445,7 @@ export default ({ getService }: FtrProviderContext): void => {
message:
'Hourly\nRule {{context.rule.name}} generated {{state.signals_count}} alerts',
},
- uuid: setTagsRule.actions[0].uuid,
+ uuid: expect.any(String),
frequency: { summary: true, throttle: '1h', notifyWhen: 'onThrottleInterval' },
},
]);
@@ -432,7 +473,14 @@ export default ({ getService }: FtrProviderContext): void => {
webhookUrl: 'http://localhost:1234',
},
}),
- createRule(supertest, log, getSimpleRule(ruleId, true)),
+ createRule(
+ supertest,
+ log,
+ getCustomQueryRuleParams({
+ rule_id: ruleId,
+ interval: MINIMUM_RULE_INTERVAL_FOR_LEGACY_ACTION,
+ })
+ ),
]);
// create a new connector
const webHookConnector = await createWebHookConnector();
@@ -441,8 +489,8 @@ export default ({ getService }: FtrProviderContext): void => {
// check for legacy sidecar action
const sidecarActionsResults = await getLegacyActionSO(es);
- expect(sidecarActionsResults.hits.hits.length).to.eql(1);
- expect(sidecarActionsResults.hits.hits[0]?._source?.references[0].id).to.eql(
+ expect(sidecarActionsResults.hits.hits.length).toBe(1);
+ expect(sidecarActionsResults.hits.hits[0]?._source?.references[0].id).toBe(
createdRule.id
);
@@ -475,53 +523,51 @@ export default ({ getService }: FtrProviderContext): void => {
...webHookActionMock,
id: webHookConnector.id,
action_type_id: '.webhook',
- uuid: body.attributes.results.updated[0].actions[0].uuid,
+ uuid: expect.any(String),
frequency: { summary: true, throttle: '1h', notifyWhen: 'onThrottleInterval' },
},
];
// Check that the updated rule is returned with the response
- expect(body.attributes.results.updated[0].actions).to.eql(expectedRuleActions);
+ expect(body.attributes.results.updated[0].actions).toEqual(expectedRuleActions);
// Check that the updates have been persisted
const { body: readRule } = await securitySolutionApi
.readRule({ query: { rule_id: ruleId } })
.expect(200);
- expect(readRule.actions).to.eql(expectedRuleActions);
+ expect(readRule.actions).toEqual(expectedRuleActions);
// Sidecar should be removed
const sidecarActionsPostResults = await getLegacyActionSO(es);
- expect(sidecarActionsPostResults.hits.hits.length).to.eql(0);
+ expect(sidecarActionsPostResults.hits.hits.length).toBe(0);
});
});
});
});
describe('legacy investigation fields', () => {
- let ruleWithLegacyInvestigationField: Rule;
- let ruleWithLegacyInvestigationFieldEmptyArray: Rule;
- let ruleWithIntendedInvestigationField: RuleResponse;
-
- beforeEach(async () => {
- ruleWithLegacyInvestigationField = await createRuleThroughAlertingEndpoint(
- supertest,
- getRuleSavedObjectWithLegacyInvestigationFields()
- );
-
- ruleWithLegacyInvestigationFieldEmptyArray = await createRuleThroughAlertingEndpoint(
- supertest,
- getRuleSavedObjectWithLegacyInvestigationFieldsEmptyArray()
- );
-
- ruleWithIntendedInvestigationField = await createRule(supertest, log, {
- ...getSimpleRule('rule-with-investigation-field'),
- name: 'Test investigation fields object',
- investigation_fields: { field_names: ['host.name'] },
- });
- });
-
it('should export rules with legacy investigation_fields and transform legacy field in response', async () => {
+ const [
+ ruleWithLegacyInvestigationField,
+ ruleWithLegacyInvestigationFieldEmptyArray,
+ ruleWithIntendedInvestigationField,
+ ] = await Promise.all([
+ createRuleThroughAlertingEndpoint(
+ supertest,
+ getRuleSavedObjectWithLegacyInvestigationFields()
+ ),
+ createRuleThroughAlertingEndpoint(
+ supertest,
+ getRuleSavedObjectWithLegacyInvestigationFieldsEmptyArray()
+ ),
+ createRule(supertest, log, {
+ ...getCustomQueryRuleParams({ rule_id: 'rule-with-investigation-field' }),
+ name: 'Test investigation fields object',
+ investigation_fields: { field_names: ['host.name'] },
+ }),
+ ]);
+
const { body } = await securitySolutionApi
.performRulesBulkAction({
body: { query: '', action: BulkActionTypeEnum.export },
@@ -538,21 +584,21 @@ export default ({ getService }: FtrProviderContext): void => {
const exportedRuleWithLegacyInvestigationField = exportedRules.find(
(rule) => rule.id === ruleWithLegacyInvestigationField.id
);
- expect(exportedRuleWithLegacyInvestigationField.investigation_fields).to.eql({
+ expect(exportedRuleWithLegacyInvestigationField.investigation_fields).toEqual({
field_names: ['client.address', 'agent.name'],
});
const exportedRuleWithLegacyInvestigationFieldEmptyArray = exportedRules.find(
(rule) => rule.id === ruleWithLegacyInvestigationFieldEmptyArray.id
);
- expect(exportedRuleWithLegacyInvestigationFieldEmptyArray.investigation_fields).to.eql(
+ expect(exportedRuleWithLegacyInvestigationFieldEmptyArray.investigation_fields).toEqual(
undefined
);
const exportedRuleWithInvestigationField = exportedRules.find(
(rule) => rule.id === ruleWithIntendedInvestigationField.id
);
- expect(exportedRuleWithInvestigationField.investigation_fields).to.eql({
+ expect(exportedRuleWithInvestigationField.investigation_fields).toEqual({
field_names: ['host.name'],
});
@@ -568,10 +614,10 @@ export default ({ getService }: FtrProviderContext): void => {
JSON.parse(rule1).id
);
- expect(isInvestigationFieldMigratedInSo).to.eql(false);
+ expect(isInvestigationFieldMigratedInSo).toBeFalsy();
const exportDetails = JSON.parse(exportDetailsJson);
- expect(exportDetails).to.eql({
+ expect(exportDetails).toEqual({
exported_exception_list_count: 0,
exported_exception_list_item_count: 0,
exported_count: 3,
@@ -591,6 +637,23 @@ export default ({ getService }: FtrProviderContext): void => {
});
it('should delete rules with investigation fields and transform legacy field in response', async () => {
+ const [ruleWithLegacyInvestigationField, ruleWithLegacyInvestigationFieldEmptyArray] =
+ await Promise.all([
+ createRuleThroughAlertingEndpoint(
+ supertest,
+ getRuleSavedObjectWithLegacyInvestigationFields()
+ ),
+ createRuleThroughAlertingEndpoint(
+ supertest,
+ getRuleSavedObjectWithLegacyInvestigationFieldsEmptyArray()
+ ),
+ createRule(supertest, log, {
+ ...getCustomQueryRuleParams({ rule_id: 'rule-with-investigation-field' }),
+ name: 'Test investigation fields object',
+ investigation_fields: { field_names: ['host.name'] },
+ }),
+ ]);
+
const { body } = await securitySolutionApi
.performRulesBulkAction({
body: { query: '', action: BulkActionTypeEnum.delete },
@@ -598,22 +661,22 @@ export default ({ getService }: FtrProviderContext): void => {
})
.expect(200);
- expect(body.attributes.summary).to.eql({ failed: 0, skipped: 0, succeeded: 3, total: 3 });
+ expect(body.attributes.summary).toEqual({ failed: 0, skipped: 0, succeeded: 3, total: 3 });
// Check that the deleted rule is returned with the response
const names = body.attributes.results.deleted.map(
(returnedRule: RuleResponse) => returnedRule.name
);
- expect(names.includes('Test investigation fields')).to.eql(true);
- expect(names.includes('Test investigation fields empty array')).to.eql(true);
- expect(names.includes('Test investigation fields object')).to.eql(true);
+ expect(names.includes('Test investigation fields')).toBeTruthy();
+ expect(names.includes('Test investigation fields empty array')).toBeTruthy();
+ expect(names.includes('Test investigation fields object')).toBeTruthy();
const ruleWithLegacyField = body.attributes.results.deleted.find(
(returnedRule: RuleResponse) =>
returnedRule.rule_id === ruleWithLegacyInvestigationField.params.ruleId
);
- expect(ruleWithLegacyField.investigation_fields).to.eql({
+ expect(ruleWithLegacyField.investigation_fields).toEqual({
field_names: ['client.address', 'agent.name'],
});
@@ -632,6 +695,23 @@ export default ({ getService }: FtrProviderContext): void => {
});
it('should enable rules with legacy investigation fields and transform legacy field in response', async () => {
+ const [ruleWithLegacyInvestigationField, ruleWithLegacyInvestigationFieldEmptyArray] =
+ await Promise.all([
+ createRuleThroughAlertingEndpoint(
+ supertest,
+ getRuleSavedObjectWithLegacyInvestigationFields({ enabled: false })
+ ),
+ createRuleThroughAlertingEndpoint(
+ supertest,
+ getRuleSavedObjectWithLegacyInvestigationFieldsEmptyArray({ enabled: false })
+ ),
+ createRule(supertest, log, {
+ ...getCustomQueryRuleParams({ rule_id: 'rule-with-investigation-field' }),
+ name: 'Test investigation fields object',
+ investigation_fields: { field_names: ['host.name'] },
+ }),
+ ]);
+
const { body } = await securitySolutionApi
.performRulesBulkAction({
body: { query: '', action: BulkActionTypeEnum.enable },
@@ -639,7 +719,7 @@ export default ({ getService }: FtrProviderContext): void => {
})
.expect(200);
- expect(body.attributes.summary).to.eql({ failed: 0, skipped: 0, succeeded: 3, total: 3 });
+ expect(body.attributes.summary).toEqual({ failed: 0, skipped: 0, succeeded: 3, total: 3 });
// Check that the updated rule is returned with the response
// and field transformed on response
@@ -647,13 +727,13 @@ export default ({ getService }: FtrProviderContext): void => {
body.attributes.results.updated.every(
(returnedRule: RuleResponse) => returnedRule.enabled
)
- ).to.eql(true);
+ ).toBeTruthy();
const ruleWithLegacyField = body.attributes.results.updated.find(
(returnedRule: RuleResponse) =>
returnedRule.rule_id === ruleWithLegacyInvestigationField.params.ruleId
);
- expect(ruleWithLegacyField.investigation_fields).to.eql({
+ expect(ruleWithLegacyField.investigation_fields).toEqual({
field_names: ['client.address', 'agent.name'],
});
@@ -661,12 +741,12 @@ export default ({ getService }: FtrProviderContext): void => {
(returnedRule: RuleResponse) =>
returnedRule.rule_id === ruleWithLegacyInvestigationFieldEmptyArray.params.ruleId
);
- expect(ruleWithEmptyArray.investigation_fields).to.eql(undefined);
+ expect(ruleWithEmptyArray.investigation_fields).toBeUndefined();
const ruleWithIntendedType = body.attributes.results.updated.find(
(returnedRule: RuleResponse) => returnedRule.rule_id === 'rule-with-investigation-field'
);
- expect(ruleWithIntendedType.investigation_fields).to.eql({ field_names: ['host.name'] });
+ expect(ruleWithIntendedType.investigation_fields).toEqual({ field_names: ['host.name'] });
/**
* Confirm type on SO so that it's clear in the tests whether it's expected that
* the SO itself is migrated to the inteded object type, or if the transformation is
@@ -682,27 +762,44 @@ export default ({ getService }: FtrProviderContext): void => {
field_names: ['client.address', 'agent.name'],
});
- expect(isInvestigationFieldMigratedInSo).to.eql(false);
- expect(ruleSO?.alert?.enabled).to.eql(true);
+ expect(isInvestigationFieldMigratedInSo).toBeFalsy();
+ expect(ruleSO?.alert?.enabled).toBeTruthy();
const {
hits: {
hits: [{ _source: ruleSO2 }],
},
} = await getRuleSOById(es, ruleWithEmptyArray.id);
- expect(ruleSO2?.alert?.params?.investigationFields).to.eql([]);
- expect(ruleSO?.alert?.enabled).to.eql(true);
+ expect(ruleSO2?.alert?.params?.investigationFields).toEqual([]);
+ expect(ruleSO?.alert?.enabled).toBeTruthy();
const {
hits: {
hits: [{ _source: ruleSO3 }],
},
} = await getRuleSOById(es, ruleWithIntendedType.id);
- expect(ruleSO3?.alert?.params?.investigationFields).to.eql({ field_names: ['host.name'] });
- expect(ruleSO?.alert?.enabled).to.eql(true);
+ expect(ruleSO3?.alert?.params?.investigationFields).toEqual({ field_names: ['host.name'] });
+ expect(ruleSO?.alert?.enabled).toBeTruthy();
});
it('should disable rules with legacy investigation fields and transform legacy field in response', async () => {
+ const [ruleWithLegacyInvestigationField, ruleWithLegacyInvestigationFieldEmptyArray] =
+ await Promise.all([
+ createRuleThroughAlertingEndpoint(
+ supertest,
+ getRuleSavedObjectWithLegacyInvestigationFields({ enabled: true })
+ ),
+ createRuleThroughAlertingEndpoint(
+ supertest,
+ getRuleSavedObjectWithLegacyInvestigationFieldsEmptyArray({ enabled: false })
+ ),
+ createRule(supertest, log, {
+ ...getCustomQueryRuleParams({ rule_id: 'rule-with-investigation-field' }),
+ name: 'Test investigation fields object',
+ investigation_fields: { field_names: ['host.name'] },
+ }),
+ ]);
+
const { body } = await securitySolutionApi
.performRulesBulkAction({
body: { query: '', action: BulkActionTypeEnum.disable },
@@ -710,7 +807,7 @@ export default ({ getService }: FtrProviderContext): void => {
})
.expect(200);
- expect(body.attributes.summary).to.eql({ failed: 0, skipped: 0, succeeded: 3, total: 3 });
+ expect(body.attributes.summary).toEqual({ failed: 0, skipped: 0, succeeded: 3, total: 3 });
// Check that the updated rule is returned with the response
// and field transformed on response
@@ -718,13 +815,13 @@ export default ({ getService }: FtrProviderContext): void => {
body.attributes.results.updated.every(
(returnedRule: RuleResponse) => !returnedRule.enabled
)
- ).to.eql(true);
+ ).toBeTruthy();
const ruleWithLegacyField = body.attributes.results.updated.find(
(returnedRule: RuleResponse) =>
returnedRule.rule_id === ruleWithLegacyInvestigationField.params.ruleId
);
- expect(ruleWithLegacyField.investigation_fields).to.eql({
+ expect(ruleWithLegacyField.investigation_fields).toEqual({
field_names: ['client.address', 'agent.name'],
});
@@ -732,12 +829,12 @@ export default ({ getService }: FtrProviderContext): void => {
(returnedRule: RuleResponse) =>
returnedRule.rule_id === ruleWithLegacyInvestigationFieldEmptyArray.params.ruleId
);
- expect(ruleWithEmptyArray.investigation_fields).to.eql(undefined);
+ expect(ruleWithEmptyArray.investigation_fields).toBeUndefined();
const ruleWithIntendedType = body.attributes.results.updated.find(
(returnedRule: RuleResponse) => returnedRule.rule_id === 'rule-with-investigation-field'
);
- expect(ruleWithIntendedType.investigation_fields).to.eql({ field_names: ['host.name'] });
+ expect(ruleWithIntendedType.investigation_fields).toEqual({ field_names: ['host.name'] });
/**
* Confirm type on SO so that it's clear in the tests whether it's expected that
@@ -753,7 +850,7 @@ export default ({ getService }: FtrProviderContext): void => {
es,
ruleWithLegacyField.id
);
- expect(isInvestigationFieldForRuleWithLegacyFieldMigratedInSo).to.eql(false);
+ expect(isInvestigationFieldForRuleWithLegacyFieldMigratedInSo).toBeFalsy();
const isInvestigationFieldForRuleWithEmptyArraydMigratedInSo =
await checkInvestigationFieldSoValue(
@@ -764,7 +861,7 @@ export default ({ getService }: FtrProviderContext): void => {
es,
ruleWithEmptyArray.id
);
- expect(isInvestigationFieldForRuleWithEmptyArraydMigratedInSo).to.eql(false);
+ expect(isInvestigationFieldForRuleWithEmptyArraydMigratedInSo).toBeFalsy();
const isInvestigationFieldForRuleWithIntendedTypeMigratedInSo =
await checkInvestigationFieldSoValue(
@@ -773,10 +870,30 @@ export default ({ getService }: FtrProviderContext): void => {
es,
ruleWithIntendedType.id
);
- expect(isInvestigationFieldForRuleWithIntendedTypeMigratedInSo).to.eql(true);
+ expect(isInvestigationFieldForRuleWithIntendedTypeMigratedInSo).toBeTruthy();
});
it('should duplicate rules with legacy investigation fields and transform field in response', async () => {
+ const [
+ ruleWithLegacyInvestigationField,
+ ruleWithLegacyInvestigationFieldEmptyArray,
+ ruleWithIntendedInvestigationField,
+ ] = await Promise.all([
+ createRuleThroughAlertingEndpoint(
+ supertest,
+ getRuleSavedObjectWithLegacyInvestigationFields()
+ ),
+ createRuleThroughAlertingEndpoint(
+ supertest,
+ getRuleSavedObjectWithLegacyInvestigationFieldsEmptyArray()
+ ),
+ createRule(supertest, log, {
+ ...getCustomQueryRuleParams({ rule_id: 'rule-with-investigation-field' }),
+ name: 'Test investigation fields object',
+ investigation_fields: { field_names: ['host.name'] },
+ }),
+ ]);
+
const { body } = await securitySolutionApi
.performRulesBulkAction({
body: {
@@ -788,22 +905,22 @@ export default ({ getService }: FtrProviderContext): void => {
})
.expect(200);
- expect(body.attributes.summary).to.eql({ failed: 0, skipped: 0, succeeded: 3, total: 3 });
+ expect(body.attributes.summary).toEqual({ failed: 0, skipped: 0, succeeded: 3, total: 3 });
// Check that the duplicated rule is returned with the response
const names = body.attributes.results.created.map(
(returnedRule: RuleResponse) => returnedRule.name
);
- expect(names.includes('Test investigation fields [Duplicate]')).to.eql(true);
- expect(names.includes('Test investigation fields empty array [Duplicate]')).to.eql(true);
- expect(names.includes('Test investigation fields object [Duplicate]')).to.eql(true);
+ expect(names.includes('Test investigation fields [Duplicate]')).toBeTruthy();
+ expect(names.includes('Test investigation fields empty array [Duplicate]')).toBeTruthy();
+ expect(names.includes('Test investigation fields object [Duplicate]')).toBeTruthy();
// Check that the updates have been persisted
const { body: rulesResponse } = await await securitySolutionApi
.findRules({ query: {} })
.expect(200);
- expect(rulesResponse.total).to.eql(6);
+ expect(rulesResponse.total).toBe(6);
const ruleWithLegacyField = body.attributes.results.created.find(
(returnedRule: RuleResponse) =>
@@ -832,7 +949,7 @@ export default ({ getService }: FtrProviderContext): void => {
es,
ruleWithLegacyField.id
);
- expect(isInvestigationFieldForRuleWithLegacyFieldMigratedInSo).to.eql(false);
+ expect(isInvestigationFieldForRuleWithLegacyFieldMigratedInSo).toBeFalsy();
const isInvestigationFieldForRuleWithEmptyArrayMigratedInSo =
await checkInvestigationFieldSoValue(
@@ -841,7 +958,7 @@ export default ({ getService }: FtrProviderContext): void => {
es,
ruleWithEmptyArray.id
);
- expect(isInvestigationFieldForRuleWithEmptyArrayMigratedInSo).to.eql(false);
+ expect(isInvestigationFieldForRuleWithEmptyArrayMigratedInSo).toBeFalsy();
/*
It's duplicate of a rule with properly formatted "investigation fields".
@@ -855,7 +972,7 @@ export default ({ getService }: FtrProviderContext): void => {
es,
ruleWithIntendedType.id
);
- expect(isInvestigationFieldForRuleWithIntendedTypeInSo).to.eql(true);
+ expect(isInvestigationFieldForRuleWithIntendedTypeInSo).toBeTruthy();
// ORIGINAL RULES - rules selected to be duplicated
/**
@@ -871,7 +988,7 @@ export default ({ getService }: FtrProviderContext): void => {
es,
ruleWithLegacyInvestigationField.id
);
- expect(isInvestigationFieldForOriginalRuleWithLegacyFieldMigratedInSo).to.eql(false);
+ expect(isInvestigationFieldForOriginalRuleWithLegacyFieldMigratedInSo).toBeFalsy();
const isInvestigationFieldForOriginalRuleWithEmptyArrayMigratedInSo =
await checkInvestigationFieldSoValue(
@@ -880,7 +997,7 @@ export default ({ getService }: FtrProviderContext): void => {
es,
ruleWithLegacyInvestigationFieldEmptyArray.id
);
- expect(isInvestigationFieldForOriginalRuleWithEmptyArrayMigratedInSo).to.eql(false);
+ expect(isInvestigationFieldForOriginalRuleWithEmptyArrayMigratedInSo).toBeFalsy();
/*
Since this rule was created with intended "investigation fields" format,
@@ -893,10 +1010,27 @@ export default ({ getService }: FtrProviderContext): void => {
es,
ruleWithIntendedInvestigationField.id
);
- expect(isInvestigationFieldForOriginalRuleWithIntendedTypeInSo).to.eql(true);
+ expect(isInvestigationFieldForOriginalRuleWithIntendedTypeInSo).toBeTruthy();
});
it('should edit rules with legacy investigation fields', async () => {
+ const [ruleWithLegacyInvestigationField, ruleWithLegacyInvestigationFieldEmptyArray] =
+ await Promise.all([
+ createRuleThroughAlertingEndpoint(
+ supertest,
+ getRuleSavedObjectWithLegacyInvestigationFields()
+ ),
+ createRuleThroughAlertingEndpoint(
+ supertest,
+ getRuleSavedObjectWithLegacyInvestigationFieldsEmptyArray()
+ ),
+ createRule(supertest, log, {
+ ...getCustomQueryRuleParams({ rule_id: 'rule-with-investigation-field' }),
+ name: 'Test investigation fields object',
+ investigation_fields: { field_names: ['host.name'] },
+ }),
+ ]);
+
const { body } = await securitySolutionApi.performRulesBulkAction({
body: {
query: '',
@@ -910,7 +1044,7 @@ export default ({ getService }: FtrProviderContext): void => {
},
query: {},
});
- expect(body.attributes.summary).to.eql({
+ expect(body.attributes.summary).toEqual({
failed: 0,
skipped: 0,
succeeded: 3,
@@ -923,23 +1057,23 @@ export default ({ getService }: FtrProviderContext): void => {
(returnedRule: RuleResponse) =>
returnedRule.rule_id === ruleWithLegacyInvestigationField.params.ruleId
);
- expect(ruleWithLegacyField.investigation_fields).to.eql({
+ expect(ruleWithLegacyField.investigation_fields).toEqual({
field_names: ['client.address', 'agent.name'],
});
- expect(ruleWithLegacyField.tags).to.eql(['reset-tag']);
+ expect(ruleWithLegacyField.tags).toEqual(['reset-tag']);
const ruleWithEmptyArray = body.attributes.results.updated.find(
(returnedRule: RuleResponse) =>
returnedRule.rule_id === ruleWithLegacyInvestigationFieldEmptyArray.params.ruleId
);
- expect(ruleWithEmptyArray.investigation_fields).to.eql(undefined);
- expect(ruleWithEmptyArray.tags).to.eql(['reset-tag']);
+ expect(ruleWithEmptyArray.investigation_fields).toBeUndefined();
+ expect(ruleWithEmptyArray.tags).toEqual(['reset-tag']);
const ruleWithIntendedType = body.attributes.results.updated.find(
(returnedRule: RuleResponse) => returnedRule.rule_id === 'rule-with-investigation-field'
);
- expect(ruleWithIntendedType.investigation_fields).to.eql({ field_names: ['host.name'] });
- expect(ruleWithIntendedType.tags).to.eql(['reset-tag']);
+ expect(ruleWithIntendedType.investigation_fields).toEqual({ field_names: ['host.name'] });
+ expect(ruleWithIntendedType.tags).toEqual(['reset-tag']);
/**
* Confirm type on SO so that it's clear in the tests whether it's expected that
@@ -953,7 +1087,7 @@ export default ({ getService }: FtrProviderContext): void => {
es,
ruleWithLegacyInvestigationField.id
);
- expect(isInvestigationFieldForRuleWithLegacyFieldMigratedInSo).to.eql(false);
+ expect(isInvestigationFieldForRuleWithLegacyFieldMigratedInSo).toBeFalsy();
const isInvestigationFieldForRuleWithEmptyArrayFieldMigratedInSo =
await checkInvestigationFieldSoValue(
@@ -962,7 +1096,7 @@ export default ({ getService }: FtrProviderContext): void => {
es,
ruleWithLegacyInvestigationFieldEmptyArray.id
);
- expect(isInvestigationFieldForRuleWithEmptyArrayFieldMigratedInSo).to.eql(false);
+ expect(isInvestigationFieldForRuleWithEmptyArrayFieldMigratedInSo).toBeFalsy();
const isInvestigationFieldForRuleWithIntendedTypeMigratedInSo =
await checkInvestigationFieldSoValue(
@@ -971,7 +1105,7 @@ export default ({ getService }: FtrProviderContext): void => {
es,
ruleWithIntendedType.id
);
- expect(isInvestigationFieldForRuleWithIntendedTypeMigratedInSo).to.eql(true);
+ expect(isInvestigationFieldForRuleWithIntendedTypeMigratedInSo).toBeTruthy();
});
});
});
diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/utils/rules/get_rule_with_legacy_investigation_fields.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/utils/rules/get_rule_with_legacy_investigation_fields.ts
index 55056748a0945..9b315dbd9dbb5 100644
--- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/utils/rules/get_rule_with_legacy_investigation_fields.ts
+++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/utils/rules/get_rule_with_legacy_investigation_fields.ts
@@ -7,7 +7,9 @@
import { InternalRuleCreate } from '@kbn/security-solution-plugin/server/lib/detection_engine/rule_schema';
-export const getRuleSavedObjectWithLegacyInvestigationFields = (): InternalRuleCreate =>
+export const getRuleSavedObjectWithLegacyInvestigationFields = (
+ rewrites?: Partial
+): InternalRuleCreate =>
({
name: 'Test investigation fields',
tags: ['migration'],
@@ -54,6 +56,7 @@ export const getRuleSavedObjectWithLegacyInvestigationFields = (): InternalRuleC
responseActions: undefined,
alertSuppression: undefined,
dataViewId: undefined,
+ ...rewrites?.params,
},
schedule: {
interval: '5m',
@@ -61,11 +64,14 @@ export const getRuleSavedObjectWithLegacyInvestigationFields = (): InternalRuleC
enabled: false,
actions: [],
throttle: null,
+ ...rewrites,
// cast is due to alerting API expecting rule_type_id
// and our internal schema expecting alertTypeId
} as unknown as InternalRuleCreate);
-export const getRuleSavedObjectWithLegacyInvestigationFieldsEmptyArray = (): InternalRuleCreate =>
+export const getRuleSavedObjectWithLegacyInvestigationFieldsEmptyArray = (
+ rewrites?: Partial
+): InternalRuleCreate =>
({
name: 'Test investigation fields empty array',
tags: ['migration'],
@@ -112,6 +118,7 @@ export const getRuleSavedObjectWithLegacyInvestigationFieldsEmptyArray = (): Int
responseActions: undefined,
alertSuppression: undefined,
dataViewId: undefined,
+ ...rewrites?.params,
},
schedule: {
interval: '5m',
@@ -119,6 +126,7 @@ export const getRuleSavedObjectWithLegacyInvestigationFieldsEmptyArray = (): Int
enabled: false,
actions: [],
throttle: null,
+ ...rewrites,
// cast is due to alerting API expecting rule_type_id
// and our internal schema expecting alertTypeId
} as unknown as InternalRuleCreate);
From 8cbe61b1b91b2a4f8e107e81ee13c067eb79e9d8 Mon Sep 17 00:00:00 2001
From: Lisa Cawley
Date: Tue, 5 Nov 2024 03:22:27 -0800
Subject: [PATCH 054/101] [DOCS] Fix links to aggregation-based visualizations
(#198854)
## Summary
This PR fixes the following broken links that occur when we change
"current" to 8.16 in https://github.com/elastic/docs/pull/3104:
```
INFO:build_docs: /tmp/docsbuild/target_repo/html/en/kibana/8.10/release-notes-8.7.0.html contains broken links to:
INFO:build_docs: - en/kibana/current/add-aggregation-based-visualization-panels.html
INFO:build_docs: /tmp/docsbuild/target_repo/html/en/kibana/8.11/release-notes-8.7.0.html contains broken links to:
INFO:build_docs: - en/kibana/current/add-aggregation-based-visualization-panels.html
INFO:build_docs: /tmp/docsbuild/target_repo/html/en/kibana/8.12/release-notes-8.7.0.html contains broken links to:
INFO:build_docs: - en/kibana/current/add-aggregation-based-visualization-panels.html
INFO:build_docs: /tmp/docsbuild/target_repo/html/en/kibana/8.13/release-notes-8.7.0.html contains broken links to:
INFO:build_docs: - en/kibana/current/add-aggregation-based-visualization-panels.html
INFO:build_docs: /tmp/docsbuild/target_repo/html/en/kibana/8.14/release-notes-8.7.0.html contains broken links to:
INFO:build_docs: - en/kibana/current/add-aggregation-based-visualization-panels.html
INFO:build_docs: /tmp/docsbuild/target_repo/html/en/kibana/8.15/release-notes-8.7.0.html contains broken links to:
INFO:build_docs: - en/kibana/current/add-aggregation-based-visualization-panels.html
INFO:build_docs: /tmp/docsbuild/target_repo/html/en/kibana/8.16/breaking-changes-summary.html contains broken links to:
INFO:build_docs: - en/kibana/current/add-aggregation-based-visualization-panels.html
INFO:build_docs: /tmp/docsbuild/target_repo/html/en/kibana/8.16/release-notes-8.7.0.html contains broken links to:
INFO:build_docs: - en/kibana/current/add-aggregation-based-visualization-panels.html
INFO:build_docs: /tmp/docsbuild/target_repo/html/en/kibana/8.7/release-notes-8.7.0.html contains broken links to:
INFO:build_docs: - en/kibana/current/add-aggregation-based-visualization-panels.html
INFO:build_docs: /tmp/docsbuild/target_repo/html/en/kibana/8.8/release-notes-8.7.0.html contains broken links to:
INFO:build_docs: - en/kibana/current/add-aggregation-based-visualization-panels.html
INFO:build_docs: /tmp/docsbuild/target_repo/html/en/kibana/8.9/release-notes-8.7.0.html contains broken links to:
INFO:build_docs: - en/kibana/current/add-aggregation-based-visualization-panels.html
INFO:build_docs: /tmp/docsbuild/target_repo/html/en/kibana/8.x/breaking-changes-summary.html contains broken links to:
INFO:build_docs: - en/kibana/current/add-aggregation-based-visualization-panels.html
INFO:build_docs: /tmp/docsbuild/target_repo/html/en/kibana/8.x/release-notes-8.7.0.html contains broken links to:
INFO:build_docs: - en/kibana/current/add-aggregation-based-visualization-panels.html
INFO:build_docs: /tmp/docsbuild/target_repo/html/en/kibana/current/breaking-changes-summary.html contains broken links to:
INFO:build_docs: - en/kibana/current/add-aggregation-based-visualization-panels.html
INFO:build_docs: /tmp/docsbuild/target_repo/html/en/kibana/current/release-notes-8.7.0.html contains broken links to:
INFO:build_docs: - en/kibana/current/add-aggregation-based-visualization-panels.html
INFO:build_docs: /tmp/docsbuild/target_repo/html/en/kibana/master/breaking-changes-summary.html contains broken links to:
INFO:build_docs: - en/kibana/current/add-aggregation-based-visualization-panels.html
INFO:build_docs: /tmp/docsbuild/target_repo/html/en/kibana/master/release-notes-8.7.0.html contains broken links to:
INFO:build_docs: - en/kibana/current/add-aggregation-based-visualization-panels.html
```
NOTE: The backport PRs for 8.8 and 8.7 will need to be edited to use
version-specific URLs since the content in those branches are re-used in
https://www.elastic.co/guide/en/elastic-stack/8.7/kibana-breaking-changes.html,
for example.
---
docs/CHANGELOG.asciidoc | 2 +-
docs/upgrade-notes.asciidoc | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/docs/CHANGELOG.asciidoc b/docs/CHANGELOG.asciidoc
index 074dc6ffd05f0..b1b4a59160c19 100644
--- a/docs/CHANGELOG.asciidoc
+++ b/docs/CHANGELOG.asciidoc
@@ -3852,7 +3852,7 @@ In 8.1.0 and later, {kib} uses the field caps API, by default, to determine the
`visualization:visualize:legacyPieChartsLibrary` has been removed from *Advanced Settings*. The setting allowed you to create aggregation-based pie chart visualizations using the legacy charts library. For more information, refer to {kibana-pull}146990[#146990].
*Impact* +
-In 7.14.0 and later, the new aggregation-based pie chart visualization is available by default. For more information, check link:https://www.elastic.co/guide/en/kibana/current/add-aggregation-based-visualization-panels.html[Aggregation-based].
+In 7.14.0 and later, the new aggregation-based pie chart visualization is available by default. For more information, check <>.
====
[discrete]
diff --git a/docs/upgrade-notes.asciidoc b/docs/upgrade-notes.asciidoc
index 5bde93df15490..85013c8e4ba64 100644
--- a/docs/upgrade-notes.asciidoc
+++ b/docs/upgrade-notes.asciidoc
@@ -1019,7 +1019,7 @@ In 8.1.0 and later, {kib} uses the field caps API, by default, to determine the
`visualization:visualize:legacyPieChartsLibrary` has been removed from *Advanced Settings*. The setting allowed you to create aggregation-based pie chart visualizations using the legacy charts library. For more information, refer to {kibana-pull}146990[#146990].
*Impact* +
-In 7.14.0 and later, the new aggregation-based pie chart visualization is available by default. For more information, check link:https://www.elastic.co/guide/en/kibana/current/add-aggregation-based-visualization-panels.html[Aggregation-based].
+In 7.14.0 and later, the new aggregation-based pie chart visualization is available by default. For more information, check <>.
====
[discrete]
From fdc9aae9d7637cd8d49109286b480532ae381519 Mon Sep 17 00:00:00 2001
From: Jeramy Soucy
Date: Tue, 5 Nov 2024 12:51:35 +0100
Subject: [PATCH 055/101] Adds cleanup to serverless platform security
authorization test suite (#198827)
## Summary
[#195584](https://github.com/elastic/kibana/pull/195584) inadvertently
removed the cleanup of created roles during testing. This PR restores
the missing call to clean up any created roles.
---
.../test_suites/common/platform_security/authorization.ts | 2 ++
1 file changed, 2 insertions(+)
diff --git a/x-pack/test_serverless/api_integration/test_suites/common/platform_security/authorization.ts b/x-pack/test_serverless/api_integration/test_suites/common/platform_security/authorization.ts
index 187efa4e860a8..a43da7314bed4 100644
--- a/x-pack/test_serverless/api_integration/test_suites/common/platform_security/authorization.ts
+++ b/x-pack/test_serverless/api_integration/test_suites/common/platform_security/authorization.ts
@@ -39,6 +39,7 @@ export default function ({ getService }: FtrProviderContext) {
const log = getService('log');
const svlCommonApi = getService('svlCommonApi');
const roleScopedSupertest = getService('roleScopedSupertest');
+ const platformSecurityUtils = getService('platformSecurityUtils');
const es = getService('es');
let supertestAdminWithCookieCredentials: SupertestWithRoleScopeType;
let supertestAdminWithApiKey: SupertestWithRoleScopeType;
@@ -56,6 +57,7 @@ export default function ({ getService }: FtrProviderContext) {
});
});
after(async function () {
+ await platformSecurityUtils.clearAllRoles();
await supertestAdminWithApiKey.destroy();
});
From 67cdb93f5b800caac80672c942d04afe4d7aa4d8 Mon Sep 17 00:00:00 2001
From: Dmitrii Shevchenko
Date: Tue, 5 Nov 2024 13:11:47 +0100
Subject: [PATCH 056/101] [Fleet] [Security Solution] Install prebuilt rules
package using stream-based approach (#195888)
**Resolves: https://github.com/elastic/kibana/issues/192350**
## Summary
Implemented stream-based installation of the detection rules package.
**Background**: The installation of the detection rules package was
causing OOM (Out of Memory) errors in Serverless environments where the
available memory is limited to 1GB. The root cause of the errors was
that during installation, the package was being read and unzipped
entirely into memory. Given the large package size, this led to OOMs. To
address these memory issues, the following changes were made:
1. Added a branching logic to the `installPackageFromRegistry` and
`installPackageByUpload` methods, where based on the package name is
decided to use streaming or not. Only one `security_detection_engine`
package is currently hardcoded to use streaming.
2. In the state machine then defined a separate set of steps for the
stream-based package installation. It is reduced to cover only Kibana
assets installation at this stage.
3. A new `stepInstallKibanaAssetsWithStreaming` step is added to handle
assets installation. While this method still reads the package archive
into memory (since unzipping from a readable stream is [not possible due
to the design of the .zip
format](https://github.com/thejoshwolfe/yauzl?tab=readme-ov-file#no-streaming-unzip-api)),
the package is unzipped using streams after being read into a buffer.
This allows only a small portion of the archive (100 saved objects at a
time) to be unpacked into memory, reducing memory usage.
4. The new method also includes several optimizations, such as only
removing previously installed assets if they are missing in the new
package and using `savedObjectClient.bulkCreate` instead of the less
efficient `savedObjectClient.import`.
### Test environment
1. Prebuilt detection rules package with ~20k saved objects; 118MB
zipped.
5. Local package registry.
6. Production build of Kibana running locally with a 700MB max old space
limit, pointed to that registry.
Setting up a test environment is not completely straightforward. Here's
a rough outline of the steps:
How to test this PR
1. Create a package containing a large number of prebuilt rules.
1. I used the `package-storage` repository to find one of the previously
released prebuilt rules packages.
2. Multiplied the number of assets in the package to 20k historical
versions.
4. Built the package using `elastic-package build`.
2. Start a local package registry serving the built package using
`elastic-package stack up --services package-registry`.
4. Create a production build of Kibana. To speed up the process,
unnecessary artifacts can be skipped:
```
node scripts/build --skip-cdn-assets --skip-docker-ubi
--skip-docker-ubuntu --skip-docker-wolfi --skip-docker-fips
```
7. Provide the built Kibana with a config pointing to the local
registry. The config is located in
`build/default/kibana-9.0.0-SNAPSHOT-darwin-aarch64/config/kibana.yml`.
You can use the following config:
```
csp.strict: false
xpack.security.encryptionKey: 've4Vohnu oa0Fu9ae Eethee8c oDieg4do
Nohrah1u ao9Hu2oh Aeb4Ieyi Aew1aegi'
xpack.encryptedSavedObjects.encryptionKey: 'Shah7nai Eew6izai Eir7OoW0
Gewi2ief eiSh8woo shoogh7E Quae6hal ce6Oumah'
xpack.fleet.internal.registry.kibanaVersionCheckEnabled: false
xpack.fleet.registryUrl: https://localhost:8080
elasticsearch:
username: 'kibana_system'
password: 'changeme'
hosts: 'http://localhost:9200'
```
8. Override the Node options Kibana starts with to allow it to connect
to the local registry and set the memory limit. For this, you need to
edit the `build/default/kibana-9.0.0-SNAPSHOT-darwin-aarch64/bin/kibana`
file:
```
NODE_OPTIONS="--no-warnings --max-http-header-size=65536
--unhandled-rejections=warn --dns-result-order=ipv4first
--openssl-legacy-provider --max_old_space_size=700 --inspect"
NODE_ENV=production
NODE_EXTRA_CA_CERTS=~/.elastic-package/profiles/default/certs/ca-cert.pem
exec "${NODE}" "${DIR}/src/cli/dist" "${@}"
```
9. Navigate to the build folder:
`build/default/kibana-9.0.0-SNAPSHOT-darwin-aarch64`.
10. Start Kibana using `./bin/kibana`.
11. Kibana is now running in debug mode, with the debugger started on
port 9229. You can connect to it using VS Code's debug config or
Chrome's DevTools.
12. Now you can install prebuilt detection rules by calling the `POST
/internal/detection_engine/prebuilt_rules/_bootstrap` endpoint, which
uses the new streaming installation under the hood.
### Test results locally
**Without the streaming approach**
Guaranteed OOM. Even smaller packages, up to 10k rules, caused sporadic
OOM errors. So for comparison, tested the package installation without
memory limits.
![Screenshot 2024-10-14 at 14 15
26](https://github.com/user-attachments/assets/131cb877-2404-4638-b619-b1370a53659f)
1. Heap memory usage spikes up to 2.5GB
5. External memory consumes up to 450 Mb, which is four times the
archive size
13. RSS (Resident Set Size) exceeds 4.5GB
**With the streaming approach**
No OOM errors observed. The memory consumption chart looks like the
following:
![Screenshot 2024-10-14 at 11 15
21](https://github.com/user-attachments/assets/b47ba8c9-2ba7-42de-b921-c33104d4481e)
1. Heap memory remains stable, around 450MB, without any spikes.
2. External memory jumps to around 250MB at the beginning of the
installation, then drops to around 120MB, which is roughly equal to the
package archive size. I couldn't determine why the external memory
consumption exceeds the package size by 2x when the installation starts.
I checked the code for places where the package might be loaded into
memory twice but found nothing suspicious. This might be worth
investigating further.
3. RSS remains stable, peaking slightly above 1GB. I believe this is the
upper limit for a package that can be handled without errors in a
Serverless environment, where the memory limit is dictated by pod-level
settings rather than Node settings and is set to 1GB. I'll verify this
on a real Serverless instance to confirm.
### Test results on Serverless
![Screenshot 2024-10-31 at 12 31
34](https://github.com/user-attachments/assets/d20d2860-fa96-4e56-be2b-7b3c0b5c7b77)
---
.../plugins/fleet/common/types/models/epm.ts | 15 ++
.../server/routes/epm/file_handler.test.ts | 4 +-
.../fleet/server/routes/epm/file_handler.ts | 4 +-
.../routes/epm/kibana_assets_handler.ts | 2 +
.../services/epm/archive/archive_iterator.ts | 83 +++++++++
.../server/services/epm/archive/extract.ts | 16 +-
.../server/services/epm/archive/index.ts | 100 +++++++----
.../server/services/epm/archive/parse.ts | 5 +-
.../server/services/epm/archive/storage.ts | 2 +-
.../elasticsearch/ingest_pipeline/install.ts | 3 +-
.../elasticsearch/transform/mappings.test.ts | 4 +
.../services/epm/kibana/assets/install.ts | 14 +-
.../kibana/assets/install_with_streaming.ts | 115 +++++++++++++
.../server/services/epm/package_service.ts | 8 +-
.../server/services/epm/packages/assets.ts | 2 +-
.../server/services/epm/packages/get.test.ts | 3 +
.../services/epm/packages/install.test.ts | 18 ++
.../server/services/epm/packages/install.ts | 32 +++-
.../_state_machine_package_install.test.ts | 7 +
.../_state_machine_package_install.ts | 34 +++-
.../step_create_restart_installation.test.ts | 6 +
.../step_delete_previous_pipelines.test.ts | 4 +
.../steps/step_install_ilm_policies.test.ts | 4 +
...p_install_index_template_pipelines.test.ts | 8 +
.../steps/step_install_kibana_assets.test.ts | 159 +++++++++++++++++-
.../steps/step_install_kibana_assets.ts | 63 +++++++
.../steps/step_install_mlmodel.test.ts | 3 +
.../steps/step_install_transforms.test.ts | 3 +
.../step_remove_legacy_templates.test.ts | 3 +
.../steps/step_save_archive_entries.test.ts | 3 +
.../steps/step_save_archive_entries.ts | 23 ++-
.../steps/step_save_system_object.test.ts | 4 +
.../step_update_current_write_indices.test.ts | 3 +
.../update_latest_executed_state.test.ts | 6 +
.../server/services/epm/packages/remove.ts | 1 +
.../server/services/epm/registry/index.ts | 17 +-
.../experimental_datastream_features.ts | 2 +
.../fleet_api_integration/apis/epm/index.js | 1 +
.../apis/epm/install_by_upload.ts | 2 +-
.../apis/epm/install_with_streaming.ts | 65 +++++++
.../security_detection_engine-8.16.0.zip | Bin 0 -> 63220 bytes
41 files changed, 768 insertions(+), 83 deletions(-)
create mode 100644 x-pack/plugins/fleet/server/services/epm/archive/archive_iterator.ts
create mode 100644 x-pack/plugins/fleet/server/services/epm/kibana/assets/install_with_streaming.ts
create mode 100644 x-pack/test/fleet_api_integration/apis/epm/install_with_streaming.ts
create mode 100644 x-pack/test/fleet_api_integration/apis/fixtures/test_packages/security_detection_engine/security_detection_engine-8.16.0.zip
diff --git a/x-pack/plugins/fleet/common/types/models/epm.ts b/x-pack/plugins/fleet/common/types/models/epm.ts
index 3aa65dc3adcd4..827130d802f22 100644
--- a/x-pack/plugins/fleet/common/types/models/epm.ts
+++ b/x-pack/plugins/fleet/common/types/models/epm.ts
@@ -124,10 +124,25 @@ export type InstallablePackage = RegistryPackage | ArchivePackage;
export type AssetsMap = Map;
+export interface ArchiveEntry {
+ path: string;
+ buffer?: Buffer;
+}
+
+export interface ArchiveIterator {
+ traverseEntries: (onEntry: (entry: ArchiveEntry) => Promise) => Promise;
+ getPaths: () => Promise;
+}
+
export interface PackageInstallContext {
packageInfo: InstallablePackage;
+ /**
+ * @deprecated Use `archiveIterator` to access the package archive entries
+ * without loading them all into memory at once.
+ */
assetsMap: AssetsMap;
paths: string[];
+ archiveIterator: ArchiveIterator;
}
export type ArchivePackage = PackageSpecManifest &
diff --git a/x-pack/plugins/fleet/server/routes/epm/file_handler.test.ts b/x-pack/plugins/fleet/server/routes/epm/file_handler.test.ts
index 1eb8387f69751..5690c32c2d7fd 100644
--- a/x-pack/plugins/fleet/server/routes/epm/file_handler.test.ts
+++ b/x-pack/plugins/fleet/server/routes/epm/file_handler.test.ts
@@ -15,7 +15,7 @@ import { getBundledPackageByPkgKey } from '../../services/epm/packages/bundled_p
import { getFile, getInstallation } from '../../services/epm/packages/get';
import type { FleetRequestHandlerContext } from '../..';
import { appContextService } from '../../services';
-import { unpackBufferEntries } from '../../services/epm/archive';
+import { unpackArchiveEntriesIntoMemory } from '../../services/epm/archive';
import { getAsset } from '../../services/epm/archive/storage';
import { getFileHandler } from './file_handler';
@@ -29,7 +29,7 @@ jest.mock('../../services/epm/packages/get');
const mockedGetBundledPackageByPkgKey = jest.mocked(getBundledPackageByPkgKey);
const mockedGetInstallation = jest.mocked(getInstallation);
const mockedGetFile = jest.mocked(getFile);
-const mockedUnpackBufferEntries = jest.mocked(unpackBufferEntries);
+const mockedUnpackBufferEntries = jest.mocked(unpackArchiveEntriesIntoMemory);
const mockedGetAsset = jest.mocked(getAsset);
function mockContext() {
diff --git a/x-pack/plugins/fleet/server/routes/epm/file_handler.ts b/x-pack/plugins/fleet/server/routes/epm/file_handler.ts
index 0f22a31c1aa72..994f52a71c224 100644
--- a/x-pack/plugins/fleet/server/routes/epm/file_handler.ts
+++ b/x-pack/plugins/fleet/server/routes/epm/file_handler.ts
@@ -17,7 +17,7 @@ import { defaultFleetErrorHandler } from '../../errors';
import { getAsset } from '../../services/epm/archive/storage';
import { getBundledPackageByPkgKey } from '../../services/epm/packages/bundled_packages';
import { pkgToPkgKey } from '../../services/epm/registry';
-import { unpackBufferEntries } from '../../services/epm/archive';
+import { unpackArchiveEntriesIntoMemory } from '../../services/epm/archive';
const CACHE_CONTROL_10_MINUTES_HEADER: HttpResponseOptions['headers'] = {
'cache-control': 'max-age=600',
@@ -69,7 +69,7 @@ export const getFileHandler: FleetRequestHandler<
pkgToPkgKey({ name: pkgName, version: pkgVersion })
);
if (bundledPackage) {
- const bufferEntries = await unpackBufferEntries(
+ const bufferEntries = await unpackArchiveEntriesIntoMemory(
await bundledPackage.getBuffer(),
'application/zip'
);
diff --git a/x-pack/plugins/fleet/server/routes/epm/kibana_assets_handler.ts b/x-pack/plugins/fleet/server/routes/epm/kibana_assets_handler.ts
index 8fe83f98669d1..ad0bec6397ee8 100644
--- a/x-pack/plugins/fleet/server/routes/epm/kibana_assets_handler.ts
+++ b/x-pack/plugins/fleet/server/routes/epm/kibana_assets_handler.ts
@@ -22,6 +22,7 @@ import type {
FleetRequestHandler,
InstallKibanaAssetsRequestSchema,
} from '../../types';
+import { createArchiveIteratorFromMap } from '../../services/epm/archive/archive_iterator';
export const installPackageKibanaAssetsHandler: FleetRequestHandler<
TypeOf,
@@ -69,6 +70,7 @@ export const installPackageKibanaAssetsHandler: FleetRequestHandler<
packageInfo,
paths: installedPkgWithAssets.paths,
assetsMap: installedPkgWithAssets.assetsMap,
+ archiveIterator: createArchiveIteratorFromMap(installedPkgWithAssets.assetsMap),
},
});
diff --git a/x-pack/plugins/fleet/server/services/epm/archive/archive_iterator.ts b/x-pack/plugins/fleet/server/services/epm/archive/archive_iterator.ts
new file mode 100644
index 0000000000000..369b32412bd82
--- /dev/null
+++ b/x-pack/plugins/fleet/server/services/epm/archive/archive_iterator.ts
@@ -0,0 +1,83 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import type { AssetsMap, ArchiveIterator, ArchiveEntry } from '../../../../common/types';
+
+import { traverseArchiveEntries } from '.';
+
+/**
+ * Creates an iterator for traversing and extracting paths from an archive
+ * buffer. This iterator is intended to be used for memory efficient traversal
+ * of archive contents without extracting the entire archive into memory.
+ *
+ * @param archiveBuffer - The buffer containing the archive data.
+ * @param contentType - The content type of the archive (e.g.,
+ * 'application/zip').
+ * @returns ArchiveIterator instance.
+ *
+ */
+export const createArchiveIterator = (
+ archiveBuffer: Buffer,
+ contentType: string
+): ArchiveIterator => {
+ const paths: string[] = [];
+
+ const traverseEntries = async (
+ onEntry: (entry: ArchiveEntry) => Promise
+ ): Promise => {
+ await traverseArchiveEntries(archiveBuffer, contentType, async (entry) => {
+ await onEntry(entry);
+ });
+ };
+
+ const getPaths = async (): Promise => {
+ if (paths.length) {
+ return paths;
+ }
+
+ await traverseEntries(async (entry) => {
+ paths.push(entry.path);
+ });
+
+ return paths;
+ };
+
+ return {
+ traverseEntries,
+ getPaths,
+ };
+};
+
+/**
+ * Creates an archive iterator from the assetsMap. This is a stop-gap solution
+ * to provide a uniform interface for traversing assets while assetsMap is still
+ * in use. It works with a map of assets loaded into memory and is not intended
+ * for use with large archives.
+ *
+ * @param assetsMap - A map where the keys are asset paths and the values are
+ * asset buffers.
+ * @returns ArchiveIterator instance.
+ *
+ */
+export const createArchiveIteratorFromMap = (assetsMap: AssetsMap): ArchiveIterator => {
+ const traverseEntries = async (
+ onEntry: (entry: ArchiveEntry) => Promise
+ ): Promise => {
+ for (const [path, buffer] of assetsMap) {
+ await onEntry({ path, buffer });
+ }
+ };
+
+ const getPaths = async (): Promise => {
+ return [...assetsMap.keys()];
+ };
+
+ return {
+ traverseEntries,
+ getPaths,
+ };
+};
diff --git a/x-pack/plugins/fleet/server/services/epm/archive/extract.ts b/x-pack/plugins/fleet/server/services/epm/archive/extract.ts
index 84aa161385cb3..9f5f90959d144 100644
--- a/x-pack/plugins/fleet/server/services/epm/archive/extract.ts
+++ b/x-pack/plugins/fleet/server/services/epm/archive/extract.ts
@@ -11,13 +11,12 @@ import * as tar from 'tar';
import yauzl from 'yauzl';
import { bufferToStream, streamToBuffer } from '../streams';
-
-import type { ArchiveEntry } from '.';
+import type { ArchiveEntry } from '../../../../common/types';
export async function untarBuffer(
buffer: Buffer,
filter = (entry: ArchiveEntry): boolean => true,
- onEntry = (entry: ArchiveEntry): void => {}
+ onEntry = async (entry: ArchiveEntry): Promise => {}
) {
const deflatedStream = bufferToStream(buffer);
// use tar.list vs .extract to avoid writing to disk
@@ -37,7 +36,7 @@ export async function untarBuffer(
export async function unzipBuffer(
buffer: Buffer,
filter = (entry: ArchiveEntry): boolean => true,
- onEntry = (entry: ArchiveEntry): void => {}
+ onEntry = async (entry: ArchiveEntry): Promise => {}
): Promise {
const zipfile = await yauzlFromBuffer(buffer, { lazyEntries: true });
zipfile.readEntry();
@@ -45,9 +44,12 @@ export async function unzipBuffer(
const path = entry.fileName;
if (!filter({ path })) return zipfile.readEntry();
- const entryBuffer = await getZipReadStream(zipfile, entry).then(streamToBuffer);
- onEntry({ buffer: entryBuffer, path });
- zipfile.readEntry();
+ try {
+ const entryBuffer = await getZipReadStream(zipfile, entry).then(streamToBuffer);
+ await onEntry({ buffer: entryBuffer, path });
+ } finally {
+ zipfile.readEntry();
+ }
});
return new Promise((resolve, reject) => zipfile.on('end', resolve).on('error', reject));
}
diff --git a/x-pack/plugins/fleet/server/services/epm/archive/index.ts b/x-pack/plugins/fleet/server/services/epm/archive/index.ts
index 5943f8f838fcb..ed9ff2a5e4b72 100644
--- a/x-pack/plugins/fleet/server/services/epm/archive/index.ts
+++ b/x-pack/plugins/fleet/server/services/epm/archive/index.ts
@@ -5,13 +5,20 @@
* 2.0.
*/
-import type { AssetParts, AssetsMap } from '../../../../common/types';
+import type {
+ ArchiveEntry,
+ ArchiveIterator,
+ AssetParts,
+ AssetsMap,
+} from '../../../../common/types';
import {
PackageInvalidArchiveError,
PackageUnsupportedMediaTypeError,
PackageNotFoundError,
} from '../../../errors';
+import { createArchiveIterator } from './archive_iterator';
+
import { deletePackageInfo } from './cache';
import type { SharedKey } from './cache';
import { getBufferExtractor } from './extract';
@@ -20,66 +27,85 @@ export * from './cache';
export { getBufferExtractor, untarBuffer, unzipBuffer } from './extract';
export { generatePackageInfoFromArchiveBuffer } from './parse';
-export interface ArchiveEntry {
- path: string;
- buffer?: Buffer;
-}
-
export async function unpackBufferToAssetsMap({
- name,
- version,
contentType,
archiveBuffer,
+ useStreaming,
}: {
- name: string;
- version: string;
contentType: string;
archiveBuffer: Buffer;
-}): Promise<{ paths: string[]; assetsMap: AssetsMap }> {
- const assetsMap = new Map();
- const paths: string[] = [];
- const entries = await unpackBufferEntries(archiveBuffer, contentType);
-
- entries.forEach((entry) => {
- const { path, buffer } = entry;
- if (buffer) {
- assetsMap.set(path, buffer);
- paths.push(path);
- }
- });
-
- return { assetsMap, paths };
+ useStreaming: boolean | undefined;
+}): Promise<{ paths: string[]; assetsMap: AssetsMap; archiveIterator: ArchiveIterator }> {
+ const archiveIterator = createArchiveIterator(archiveBuffer, contentType);
+ let paths: string[] = [];
+ let assetsMap: AssetsMap = new Map();
+ if (useStreaming) {
+ paths = await archiveIterator.getPaths();
+ // We keep the assetsMap empty as we don't want to load all the assets in memory
+ assetsMap = new Map();
+ } else {
+ const entries = await unpackArchiveEntriesIntoMemory(archiveBuffer, contentType);
+
+ entries.forEach((entry) => {
+ const { path, buffer } = entry;
+ if (buffer) {
+ assetsMap.set(path, buffer);
+ paths.push(path);
+ }
+ });
+ }
+
+ return { paths, assetsMap, archiveIterator };
}
-export async function unpackBufferEntries(
+/**
+ * This function extracts all archive entries into memory.
+ *
+ * NOTE: This is potentially dangerous for large archives and can cause OOM
+ * errors. Use 'traverseArchiveEntries' instead to iterate over the entries
+ * without storing them all in memory at once.
+ *
+ * @param archiveBuffer
+ * @param contentType
+ * @returns All the entries in the archive buffer
+ */
+export async function unpackArchiveEntriesIntoMemory(
archiveBuffer: Buffer,
contentType: string
): Promise {
+ const entries: ArchiveEntry[] = [];
+ const addToEntries = async (entry: ArchiveEntry) => void entries.push(entry);
+ await traverseArchiveEntries(archiveBuffer, contentType, addToEntries);
+
+ // While unpacking a tar.gz file with unzipBuffer() will result in a thrown
+ // error, unpacking a zip file with untarBuffer() just results in nothing.
+ if (entries.length === 0) {
+ throw new PackageInvalidArchiveError(
+ `Archive seems empty. Assumed content type was ${contentType}, check if this matches the archive type.`
+ );
+ }
+ return entries;
+}
+
+export async function traverseArchiveEntries(
+ archiveBuffer: Buffer,
+ contentType: string,
+ onEntry: (entry: ArchiveEntry) => Promise
+) {
const bufferExtractor = getBufferExtractor({ contentType });
if (!bufferExtractor) {
throw new PackageUnsupportedMediaTypeError(
`Unsupported media type ${contentType}. Please use 'application/gzip' or 'application/zip'`
);
}
- const entries: ArchiveEntry[] = [];
try {
const onlyFiles = ({ path }: ArchiveEntry): boolean => !path.endsWith('/');
- const addToEntries = (entry: ArchiveEntry) => entries.push(entry);
- await bufferExtractor(archiveBuffer, onlyFiles, addToEntries);
+ await bufferExtractor(archiveBuffer, onlyFiles, onEntry);
} catch (error) {
throw new PackageInvalidArchiveError(
`Error during extraction of package: ${error}. Assumed content type was ${contentType}, check if this matches the archive type.`
);
}
-
- // While unpacking a tar.gz file with unzipBuffer() will result in a thrown error in the try-catch above,
- // unpacking a zip file with untarBuffer() just results in nothing.
- if (entries.length === 0) {
- throw new PackageInvalidArchiveError(
- `Archive seems empty. Assumed content type was ${contentType}, check if this matches the archive type.`
- );
- }
- return entries;
}
export const deletePackageCache = ({ name, version }: SharedKey) => {
diff --git a/x-pack/plugins/fleet/server/services/epm/archive/parse.ts b/x-pack/plugins/fleet/server/services/epm/archive/parse.ts
index 530ca804f24eb..8cccfe9982457 100644
--- a/x-pack/plugins/fleet/server/services/epm/archive/parse.ts
+++ b/x-pack/plugins/fleet/server/services/epm/archive/parse.ts
@@ -40,7 +40,7 @@ import {
import { PackageInvalidArchiveError } from '../../../errors';
import { pkgToPkgKey } from '../registry';
-import { unpackBufferEntries } from '.';
+import { traverseArchiveEntries } from '.';
const readFileAsync = promisify(readFile);
export const MANIFEST_NAME = 'manifest.yml';
@@ -160,9 +160,8 @@ export async function generatePackageInfoFromArchiveBuffer(
contentType: string
): Promise<{ paths: string[]; packageInfo: ArchivePackage }> {
const assetsMap: AssetsBufferMap = {};
- const entries = await unpackBufferEntries(archiveBuffer, contentType);
const paths: string[] = [];
- entries.forEach(({ path: bufferPath, buffer }) => {
+ await traverseArchiveEntries(archiveBuffer, contentType, async ({ path: bufferPath, buffer }) => {
paths.push(bufferPath);
if (buffer && filterAssetPathForParseAndVerifyArchive(bufferPath)) {
assetsMap[bufferPath] = buffer;
diff --git a/x-pack/plugins/fleet/server/services/epm/archive/storage.ts b/x-pack/plugins/fleet/server/services/epm/archive/storage.ts
index dd6321445df75..8f6f151383d5a 100644
--- a/x-pack/plugins/fleet/server/services/epm/archive/storage.ts
+++ b/x-pack/plugins/fleet/server/services/epm/archive/storage.ts
@@ -15,6 +15,7 @@ import { SavedObjectsErrorHelpers } from '@kbn/core/server';
import { ASSETS_SAVED_OBJECT_TYPE } from '../../../../common';
import type {
+ ArchiveEntry,
InstallablePackage,
InstallSource,
PackageAssetReference,
@@ -24,7 +25,6 @@ import { PackageInvalidArchiveError, PackageNotFoundError } from '../../../error
import { appContextService } from '../../app_context';
import { setPackageInfo } from '.';
-import type { ArchiveEntry } from '.';
import { filterAssetPathForParseAndVerifyArchive, parseAndVerifyArchive } from './parse';
const ONE_BYTE = 1024 * 1024;
diff --git a/x-pack/plugins/fleet/server/services/epm/elasticsearch/ingest_pipeline/install.ts b/x-pack/plugins/fleet/server/services/epm/elasticsearch/ingest_pipeline/install.ts
index a456734747324..5a4672f67fe53 100644
--- a/x-pack/plugins/fleet/server/services/epm/elasticsearch/ingest_pipeline/install.ts
+++ b/x-pack/plugins/fleet/server/services/epm/elasticsearch/ingest_pipeline/install.ts
@@ -16,14 +16,13 @@ import type {
PackageInfo,
} from '../../../../types';
import { getAssetFromAssetsMap, getPathParts } from '../../archive';
-import type { ArchiveEntry } from '../../archive';
import {
FLEET_FINAL_PIPELINE_CONTENT,
FLEET_FINAL_PIPELINE_ID,
FLEET_FINAL_PIPELINE_VERSION,
} from '../../../../constants';
import { getPipelineNameForDatastream } from '../../../../../common/services';
-import type { PackageInstallContext } from '../../../../../common/types';
+import type { ArchiveEntry, PackageInstallContext } from '../../../../../common/types';
import { appendMetadataToIngestPipeline } from '../meta';
import { retryTransientEsErrors } from '../retry';
diff --git a/x-pack/plugins/fleet/server/services/epm/elasticsearch/transform/mappings.test.ts b/x-pack/plugins/fleet/server/services/epm/elasticsearch/transform/mappings.test.ts
index f34015bf77697..de962850fba8c 100644
--- a/x-pack/plugins/fleet/server/services/epm/elasticsearch/transform/mappings.test.ts
+++ b/x-pack/plugins/fleet/server/services/epm/elasticsearch/transform/mappings.test.ts
@@ -5,6 +5,8 @@
* 2.0.
*/
+import { createArchiveIteratorFromMap } from '../../archive/archive_iterator';
+
import { loadMappingForTransform } from './mappings';
describe('loadMappingForTransform', () => {
@@ -13,6 +15,7 @@ describe('loadMappingForTransform', () => {
{
packageInfo: {} as any,
assetsMap: new Map(),
+ archiveIterator: createArchiveIteratorFromMap(new Map()),
paths: [],
},
'test'
@@ -49,6 +52,7 @@ describe('loadMappingForTransform', () => {
),
],
]),
+ archiveIterator: createArchiveIteratorFromMap(new Map()),
paths: [
'/package/ti_opencti/2.1.0/elasticsearch/transform/latest_ioc/fields/ecs.yml',
'/package/ti_opencti/2.1.0/elasticsearch/transform/latest_ioc/fields/ecs-extra.yml',
diff --git a/x-pack/plugins/fleet/server/services/epm/kibana/assets/install.ts b/x-pack/plugins/fleet/server/services/epm/kibana/assets/install.ts
index 276478099daf8..bf5684f29c205 100644
--- a/x-pack/plugins/fleet/server/services/epm/kibana/assets/install.ts
+++ b/x-pack/plugins/fleet/server/services/epm/kibana/assets/install.ts
@@ -325,16 +325,16 @@ export async function deleteKibanaAssetsAndReferencesForSpace({
await saveKibanaAssetsRefs(savedObjectsClient, pkgName, [], true);
}
+const kibanaAssetTypes = Object.values(KibanaAssetType);
+export const isKibanaAssetType = (path: string) => {
+ const parts = getPathParts(path);
+
+ return parts.service === 'kibana' && (kibanaAssetTypes as string[]).includes(parts.type);
+};
+
export function getKibanaAssets(
packageInstallContext: PackageInstallContext
): Record {
- const kibanaAssetTypes = Object.values(KibanaAssetType);
- const isKibanaAssetType = (path: string) => {
- const parts = getPathParts(path);
-
- return parts.service === 'kibana' && (kibanaAssetTypes as string[]).includes(parts.type);
- };
-
const result = Object.fromEntries(
kibanaAssetTypes.map((type) => [type, []])
) as Record;
diff --git a/x-pack/plugins/fleet/server/services/epm/kibana/assets/install_with_streaming.ts b/x-pack/plugins/fleet/server/services/epm/kibana/assets/install_with_streaming.ts
new file mode 100644
index 0000000000000..fca6cf27a0cd7
--- /dev/null
+++ b/x-pack/plugins/fleet/server/services/epm/kibana/assets/install_with_streaming.ts
@@ -0,0 +1,115 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import type { SavedObject, SavedObjectsClientContract } from '@kbn/core/server';
+
+import type { Installation, PackageInstallContext } from '../../../../../common/types';
+import type { KibanaAssetReference, KibanaAssetType } from '../../../../types';
+import { getPathParts } from '../../archive';
+
+import { saveKibanaAssetsRefs } from '../../packages/install';
+
+import type { ArchiveAsset } from './install';
+import {
+ KibanaSavedObjectTypeMapping,
+ createSavedObjectKibanaAsset,
+ isKibanaAssetType,
+ toAssetReference,
+} from './install';
+import { getSpaceAwareSaveobjectsClients } from './saved_objects';
+
+interface InstallKibanaAssetsWithStreamingArgs {
+ pkgName: string;
+ packageInstallContext: PackageInstallContext;
+ spaceId: string;
+ savedObjectsClient: SavedObjectsClientContract;
+ installedPkg?: SavedObject | undefined;
+}
+
+const MAX_ASSETS_TO_INSTALL_IN_PARALLEL = 100;
+
+export async function installKibanaAssetsWithStreaming({
+ spaceId,
+ packageInstallContext,
+ savedObjectsClient,
+ pkgName,
+ installedPkg,
+}: InstallKibanaAssetsWithStreamingArgs): Promise {
+ const { archiveIterator } = packageInstallContext;
+
+ const { savedObjectClientWithSpace } = getSpaceAwareSaveobjectsClients(spaceId);
+
+ const assetRefs: KibanaAssetReference[] = [];
+ let batch: ArchiveAsset[] = [];
+
+ await archiveIterator.traverseEntries(async ({ path, buffer }) => {
+ if (!buffer || !isKibanaAssetType(path)) {
+ return;
+ }
+ const savedObject = JSON.parse(buffer.toString('utf8')) as ArchiveAsset;
+ const assetType = getPathParts(path).type as KibanaAssetType;
+ const soType = KibanaSavedObjectTypeMapping[assetType];
+ if (savedObject.type !== soType) {
+ return;
+ }
+
+ batch.push(savedObject);
+ assetRefs.push(toAssetReference(savedObject));
+
+ if (batch.length >= MAX_ASSETS_TO_INSTALL_IN_PARALLEL) {
+ await bulkCreateSavedObjects({
+ savedObjectsClient: savedObjectClientWithSpace,
+ kibanaAssets: batch,
+ refresh: false,
+ });
+ batch = [];
+ }
+ });
+
+ // install any remaining assets
+ if (batch.length) {
+ await bulkCreateSavedObjects({
+ savedObjectsClient: savedObjectClientWithSpace,
+ kibanaAssets: batch,
+ // Use wait_for with the last batch to ensure all assets are readable once the install is complete
+ refresh: 'wait_for',
+ });
+ }
+
+ // Update the installation saved object with installed kibana assets
+ await saveKibanaAssetsRefs(savedObjectsClient, pkgName, assetRefs);
+
+ return assetRefs;
+}
+
+async function bulkCreateSavedObjects({
+ savedObjectsClient,
+ kibanaAssets,
+ refresh,
+}: {
+ kibanaAssets: ArchiveAsset[];
+ savedObjectsClient: SavedObjectsClientContract;
+ refresh?: boolean | 'wait_for';
+}) {
+ if (!kibanaAssets.length) {
+ return [];
+ }
+
+ const toBeSavedObjects = kibanaAssets.map((asset) => createSavedObjectKibanaAsset(asset));
+
+ const { saved_objects: createdSavedObjects } = await savedObjectsClient.bulkCreate(
+ toBeSavedObjects,
+ {
+ // We only want to install new saved objects without overwriting existing ones
+ overwrite: false,
+ managed: true,
+ refresh,
+ }
+ );
+
+ return createdSavedObjects;
+}
diff --git a/x-pack/plugins/fleet/server/services/epm/package_service.ts b/x-pack/plugins/fleet/server/services/epm/package_service.ts
index 661475dfadc09..a097db584b460 100644
--- a/x-pack/plugins/fleet/server/services/epm/package_service.ts
+++ b/x-pack/plugins/fleet/server/services/epm/package_service.ts
@@ -39,7 +39,10 @@ import type { InstallResult } from '../../../common';
import { appContextService } from '..';
-import type { CustomPackageDatasetConfiguration, EnsurePackageResult } from './packages/install';
+import {
+ type CustomPackageDatasetConfiguration,
+ type EnsurePackageResult,
+} from './packages/install';
import type { FetchFindLatestPackageOptions } from './registry';
import { getPackageFieldsMetadata } from './registry';
@@ -56,6 +59,7 @@ import {
} from './packages';
import { generatePackageInfoFromArchiveBuffer } from './archive';
import { getEsPackage } from './archive/storage';
+import { createArchiveIteratorFromMap } from './archive/archive_iterator';
export type InstalledAssetType = EsAssetReference;
@@ -381,12 +385,14 @@ class PackageClientImpl implements PackageClient {
}
const { assetsMap } = esPackage;
+ const archiveIterator = createArchiveIteratorFromMap(assetsMap);
const { installedTransforms } = await installTransforms({
packageInstallContext: {
assetsMap,
packageInfo,
paths,
+ archiveIterator,
},
esClient: this.internalEsClient,
savedObjectsClient: this.internalSoClient,
diff --git a/x-pack/plugins/fleet/server/services/epm/packages/assets.ts b/x-pack/plugins/fleet/server/services/epm/packages/assets.ts
index a82b5c0d103b2..3bb84c0d23163 100644
--- a/x-pack/plugins/fleet/server/services/epm/packages/assets.ts
+++ b/x-pack/plugins/fleet/server/services/epm/packages/assets.ts
@@ -5,9 +5,9 @@
* 2.0.
*/
+import type { ArchiveEntry } from '../../../../common/types';
import type { AssetsMap, PackageInfo } from '../../../types';
import { getAssetFromAssetsMap } from '../archive';
-import type { ArchiveEntry } from '../archive';
const maybeFilterByDataset =
(packageInfo: Pick, datasetName: string) =>
diff --git a/x-pack/plugins/fleet/server/services/epm/packages/get.test.ts b/x-pack/plugins/fleet/server/services/epm/packages/get.test.ts
index 2dc295762e33a..5711c8fcccaf4 100644
--- a/x-pack/plugins/fleet/server/services/epm/packages/get.test.ts
+++ b/x-pack/plugins/fleet/server/services/epm/packages/get.test.ts
@@ -27,6 +27,8 @@ import { auditLoggingService } from '../../audit_logging';
import * as Registry from '../registry';
+import { createArchiveIteratorFromMap } from '../archive/archive_iterator';
+
import { getInstalledPackages, getPackageInfo, getPackages, getPackageUsageStats } from './get';
jest.mock('../registry');
@@ -915,6 +917,7 @@ owner: elastic`,
MockRegistry.getPackage.mockResolvedValue({
paths: [],
assetsMap: new Map(),
+ archiveIterator: createArchiveIteratorFromMap(new Map()),
packageInfo: {
name: 'my-package',
version: '1.0.0',
diff --git a/x-pack/plugins/fleet/server/services/epm/packages/install.test.ts b/x-pack/plugins/fleet/server/services/epm/packages/install.test.ts
index 709e0d84d70fc..6b3a31eda649e 100644
--- a/x-pack/plugins/fleet/server/services/epm/packages/install.test.ts
+++ b/x-pack/plugins/fleet/server/services/epm/packages/install.test.ts
@@ -442,6 +442,24 @@ describe('install', () => {
expect(response.status).toEqual('installed');
});
+
+ it('should use streaming installation for the detection rules package', async () => {
+ jest.spyOn(licenseService, 'hasAtLeast').mockReturnValue(true);
+
+ const response = await installPackage({
+ spaceId: DEFAULT_SPACE_ID,
+ installSource: 'registry',
+ pkgkey: 'security_detection_engine',
+ savedObjectsClient: savedObjectsClientMock.create(),
+ esClient: {} as ElasticsearchClient,
+ });
+
+ expect(response.error).toBeUndefined();
+
+ expect(installStateMachine._stateMachineInstallPackage).toHaveBeenCalledWith(
+ expect.objectContaining({ useStreaming: true })
+ );
+ });
});
describe('upload', () => {
diff --git a/x-pack/plugins/fleet/server/services/epm/packages/install.ts b/x-pack/plugins/fleet/server/services/epm/packages/install.ts
index 1ea6f29cad839..ebe5acc35178d 100644
--- a/x-pack/plugins/fleet/server/services/epm/packages/install.ts
+++ b/x-pack/plugins/fleet/server/services/epm/packages/install.ts
@@ -76,6 +76,7 @@ import {
deleteVerificationResult,
unpackBufferToAssetsMap,
} from '../archive';
+import { createArchiveIteratorFromMap } from '../archive/archive_iterator';
import { toAssetReference } from '../kibana/assets/install';
import type { ArchiveAsset } from '../kibana/assets/install';
import type { PackageUpdateEvent } from '../../upgrade_sender';
@@ -107,6 +108,12 @@ import { removeInstallation } from './remove';
export const UPLOAD_RETRY_AFTER_MS = 10000; // 10s
const MAX_ENSURE_INSTALL_TIME = 60 * 1000;
+const PACKAGES_TO_INSTALL_WITH_STREAMING = [
+ // The security_detection_engine package contains a large number of assets and
+ // is not suitable for regular installation as it might cause OOM errors.
+ 'security_detection_engine',
+];
+
export async function isPackageInstalled(options: {
savedObjectsClient: SavedObjectsClientContract;
pkgName: string;
@@ -449,6 +456,7 @@ async function installPackageFromRegistry({
// TODO: change epm API to /packageName/version so we don't need to do this
const { pkgName, pkgVersion: version } = Registry.splitPkgKey(pkgkey);
let pkgVersion = version ?? '';
+ const useStreaming = PACKAGES_TO_INSTALL_WITH_STREAMING.includes(pkgName);
// if an error happens during getInstallType, report that we don't know
let installType: InstallType = 'unknown';
@@ -478,11 +486,12 @@ async function installPackageFromRegistry({
}
// get latest package version and requested version in parallel for performance
- const [latestPackage, { paths, packageInfo, assetsMap, verificationResult }] =
+ const [latestPackage, { paths, packageInfo, assetsMap, archiveIterator, verificationResult }] =
await Promise.all([
latestPkg ? Promise.resolve(latestPkg) : queryLatest(),
Registry.getPackage(pkgName, pkgVersion, {
ignoreUnverified: force && !neverIgnoreVerificationError,
+ useStreaming,
}),
]);
@@ -490,6 +499,7 @@ async function installPackageFromRegistry({
packageInfo,
assetsMap,
paths,
+ archiveIterator,
};
// let the user install if using the force flag or needing to reinstall or install a previous version due to failed update
@@ -542,6 +552,7 @@ async function installPackageFromRegistry({
ignoreMappingUpdateErrors,
skipDataStreamRollover,
retryFromLastState,
+ useStreaming,
});
} catch (e) {
sendEvent({
@@ -580,6 +591,7 @@ async function installPackageWithStateMachine(options: {
ignoreMappingUpdateErrors?: boolean;
skipDataStreamRollover?: boolean;
retryFromLastState?: boolean;
+ useStreaming?: boolean;
}): Promise {
const packageInfo = options.packageInstallContext.packageInfo;
@@ -599,6 +611,7 @@ async function installPackageWithStateMachine(options: {
skipDataStreamRollover,
packageInstallContext,
retryFromLastState,
+ useStreaming,
} = options;
let { telemetryEvent } = options;
const logger = appContextService.getLogger();
@@ -696,6 +709,7 @@ async function installPackageWithStateMachine(options: {
ignoreMappingUpdateErrors,
skipDataStreamRollover,
retryFromLastState,
+ useStreaming,
})
.then(async (assets) => {
logger.debug(`Removing old assets from previous versions of ${pkgName}`);
@@ -785,6 +799,7 @@ async function installPackageByUpload({
}
const { packageInfo } = await generatePackageInfoFromArchiveBuffer(archiveBuffer, contentType);
const pkgName = packageInfo.name;
+ const useStreaming = PACKAGES_TO_INSTALL_WITH_STREAMING.includes(pkgName);
// Allow for overriding the version in the manifest for cases where we install
// stack-aligned bundled packages to support special cases around the
@@ -807,17 +822,17 @@ async function installPackageByUpload({
packageInfo,
});
- const { assetsMap, paths } = await unpackBufferToAssetsMap({
- name: packageInfo.name,
- version: pkgVersion,
+ const { paths, assetsMap, archiveIterator } = await unpackBufferToAssetsMap({
archiveBuffer,
contentType,
+ useStreaming,
});
const packageInstallContext: PackageInstallContext = {
packageInfo: { ...packageInfo, version: pkgVersion },
assetsMap,
paths,
+ archiveIterator,
};
// update the timestamp of latest installation
setLastUploadInstallCache();
@@ -837,6 +852,7 @@ async function installPackageByUpload({
authorizationHeader,
ignoreMappingUpdateErrors,
skipDataStreamRollover,
+ useStreaming,
});
} catch (e) {
return {
@@ -1004,12 +1020,14 @@ export async function installCustomPackage(
acc.set(asset.path, asset.content);
return acc;
}, new Map());
- const paths = [...assetsMap.keys()];
+ const paths = assets.map((asset) => asset.path);
+ const archiveIterator = createArchiveIteratorFromMap(assetsMap);
const packageInstallContext: PackageInstallContext = {
assetsMap,
paths,
packageInfo,
+ archiveIterator,
};
return await installPackageWithStateMachine({
packageInstallContext,
@@ -1341,16 +1359,20 @@ export async function installAssetsForInputPackagePolicy(opts: {
ignoreUnverified: force,
});
+ const archiveIterator = createArchiveIteratorFromMap(pkg.assetsMap);
packageInstallContext = {
assetsMap: pkg.assetsMap,
packageInfo: pkg.packageInfo,
paths: pkg.paths,
+ archiveIterator,
};
} else {
+ const archiveIterator = createArchiveIteratorFromMap(installedPkgWithAssets.assetsMap);
packageInstallContext = {
assetsMap: installedPkgWithAssets.assetsMap,
packageInfo: installedPkgWithAssets.packageInfo,
paths: installedPkgWithAssets.paths,
+ archiveIterator,
};
}
diff --git a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/_state_machine_package_install.test.ts b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/_state_machine_package_install.test.ts
index 174076a9e9b1b..73b78a6cc4aa0 100644
--- a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/_state_machine_package_install.test.ts
+++ b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/_state_machine_package_install.test.ts
@@ -38,6 +38,8 @@ import { updateCurrentWriteIndices } from '../../elasticsearch/template/template
import { installIndexTemplatesAndPipelines } from '../install_index_template_pipeline';
+import { createArchiveIteratorFromMap } from '../../archive/archive_iterator';
+
import { handleState } from './state_machine';
import { _stateMachineInstallPackage } from './_state_machine_package_install';
import { cleanupLatestExecutedState } from './steps';
@@ -110,6 +112,7 @@ describe('_stateMachineInstallPackage', () => {
logger: loggerMock.create(),
packageInstallContext: {
assetsMap: new Map(),
+ archiveIterator: createArchiveIteratorFromMap(new Map()),
paths: [],
packageInfo: {
title: 'title',
@@ -172,6 +175,7 @@ describe('_stateMachineInstallPackage', () => {
logger: loggerMock.create(),
packageInstallContext: {
assetsMap: new Map(),
+ archiveIterator: createArchiveIteratorFromMap(new Map()),
paths: [],
packageInfo: {
title: 'title',
@@ -208,6 +212,7 @@ describe('_stateMachineInstallPackage', () => {
logger: loggerMock.create(),
packageInstallContext: {
assetsMap: new Map(),
+ archiveIterator: createArchiveIteratorFromMap(new Map()),
paths: [],
packageInfo: {
title: 'title',
@@ -257,6 +262,7 @@ describe('_stateMachineInstallPackage', () => {
logger: loggerMock.create(),
packageInstallContext: {
assetsMap: new Map(),
+ archiveIterator: createArchiveIteratorFromMap(new Map()),
paths: [],
packageInfo: {
title: 'title',
@@ -336,6 +342,7 @@ describe('_stateMachineInstallPackage', () => {
owner: { github: 'elastic/fleet' },
} as any,
assetsMap: new Map(),
+ archiveIterator: createArchiveIteratorFromMap(new Map()),
paths: [],
},
installType: 'install',
diff --git a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/_state_machine_package_install.ts b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/_state_machine_package_install.ts
index 1f10d40feba38..c941b6d60d63b 100644
--- a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/_state_machine_package_install.ts
+++ b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/_state_machine_package_install.ts
@@ -48,11 +48,13 @@ import {
updateLatestExecutedState,
cleanupLatestExecutedState,
cleanUpKibanaAssetsStep,
+ cleanUpUnusedKibanaAssetsStep,
cleanupILMPoliciesStep,
cleanUpMlModelStep,
cleanupIndexTemplatePipelinesStep,
cleanupTransformsStep,
cleanupArchiveEntriesStep,
+ stepInstallKibanaAssetsWithStreaming,
} from './steps';
import type { StateMachineDefinition, StateMachineStates } from './state_machine';
import { handleState } from './state_machine';
@@ -73,6 +75,7 @@ export interface InstallContext extends StateContext {
skipDataStreamRollover?: boolean;
retryFromLastState?: boolean;
initialState?: INSTALL_STATES;
+ useStreaming?: boolean;
indexTemplates?: IndexTemplateEntry[];
packageAssetRefs?: PackageAssetReference[];
@@ -83,7 +86,7 @@ export interface InstallContext extends StateContext {
/**
* This data structure defines the sequence of the states and the transitions
*/
-const statesDefinition: StateMachineStates = {
+const regularStatesDefinition: StateMachineStates = {
create_restart_installation: {
nextState: INSTALL_STATES.INSTALL_KIBANA_ASSETS,
onTransition: stepCreateRestartInstallation,
@@ -152,6 +155,31 @@ const statesDefinition: StateMachineStates = {
},
};
+const streamingStatesDefinition: StateMachineStates = {
+ create_restart_installation: {
+ nextState: INSTALL_STATES.INSTALL_KIBANA_ASSETS,
+ onTransition: stepCreateRestartInstallation,
+ onPostTransition: updateLatestExecutedState,
+ },
+ install_kibana_assets: {
+ onTransition: stepInstallKibanaAssetsWithStreaming,
+ nextState: INSTALL_STATES.SAVE_ARCHIVE_ENTRIES,
+ onPostTransition: updateLatestExecutedState,
+ },
+ save_archive_entries_from_assets_map: {
+ onPreTransition: cleanupArchiveEntriesStep,
+ onTransition: stepSaveArchiveEntries,
+ nextState: INSTALL_STATES.UPDATE_SO,
+ onPostTransition: updateLatestExecutedState,
+ },
+ update_so: {
+ onPreTransition: cleanUpUnusedKibanaAssetsStep,
+ onTransition: stepSaveSystemObject,
+ nextState: 'end',
+ onPostTransition: updateLatestExecutedState,
+ },
+};
+
/*
* _stateMachineInstallPackage installs packages using the generic state machine in ./state_machine
* installStates is the data structure providing the state machine definition
@@ -166,6 +194,10 @@ export async function _stateMachineInstallPackage(
const logger = appContextService.getLogger();
let initialState = INSTALL_STATES.CREATE_RESTART_INSTALLATION;
+ const statesDefinition = context.useStreaming
+ ? streamingStatesDefinition
+ : regularStatesDefinition;
+
// if retryFromLastState, restart install from last install state
// if force is passed, the install should be executed from the beginning
if (retryFromLastState && !force && installedPkg?.attributes?.latest_executed_state?.name) {
diff --git a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_create_restart_installation.test.ts b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_create_restart_installation.test.ts
index 2b653728d6574..e5a7fed55fe87 100644
--- a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_create_restart_installation.test.ts
+++ b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_create_restart_installation.test.ts
@@ -31,6 +31,8 @@ import { auditLoggingService } from '../../../../audit_logging';
import { restartInstallation, createInstallation } from '../../install';
import type { Installation } from '../../../../../../common';
+import { createArchiveIteratorFromMap } from '../../../archive/archive_iterator';
+
import { stepCreateRestartInstallation } from './step_create_restart_installation';
jest.mock('../../../../audit_logging');
@@ -84,6 +86,7 @@ describe('stepCreateRestartInstallation', () => {
logger,
packageInstallContext: {
assetsMap: new Map(),
+ archiveIterator: createArchiveIteratorFromMap(new Map()),
paths: [],
packageInfo: {
title: 'title',
@@ -120,6 +123,7 @@ describe('stepCreateRestartInstallation', () => {
logger,
packageInstallContext: {
assetsMap: new Map(),
+ archiveIterator: createArchiveIteratorFromMap(new Map()),
paths: [],
packageInfo: {
title: 'title',
@@ -164,6 +168,7 @@ describe('stepCreateRestartInstallation', () => {
logger,
packageInstallContext: {
assetsMap: new Map(),
+ archiveIterator: createArchiveIteratorFromMap(new Map()),
paths: [],
packageInfo: {
title: 'title',
@@ -208,6 +213,7 @@ describe('stepCreateRestartInstallation', () => {
logger,
packageInstallContext: {
assetsMap: new Map(),
+ archiveIterator: createArchiveIteratorFromMap(new Map()),
paths: [],
packageInfo: {
title: 'title',
diff --git a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_delete_previous_pipelines.test.ts b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_delete_previous_pipelines.test.ts
index 7d8a251433bb5..06201770ee2e2 100644
--- a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_delete_previous_pipelines.test.ts
+++ b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_delete_previous_pipelines.test.ts
@@ -24,6 +24,8 @@ import {
deletePreviousPipelines,
} from '../../../elasticsearch/ingest_pipeline';
+import { createArchiveIteratorFromMap } from '../../../archive/archive_iterator';
+
import { stepDeletePreviousPipelines } from './step_delete_previous_pipelines';
jest.mock('../../../elasticsearch/ingest_pipeline');
@@ -84,6 +86,7 @@ describe('stepDeletePreviousPipelines', () => {
owner: { github: 'elastic/fleet' },
} as any,
assetsMap: new Map(),
+ archiveIterator: createArchiveIteratorFromMap(new Map()),
paths: [],
};
appContextService.start(
@@ -276,6 +279,7 @@ describe('stepDeletePreviousPipelines', () => {
owner: { github: 'elastic/fleet' },
} as any,
assetsMap: new Map(),
+ archiveIterator: createArchiveIteratorFromMap(new Map()),
paths: [],
};
appContextService.start(
diff --git a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_ilm_policies.test.ts b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_ilm_policies.test.ts
index 2cf9b23bb9adb..4c106a0c68f15 100644
--- a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_ilm_policies.test.ts
+++ b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_ilm_policies.test.ts
@@ -24,6 +24,8 @@ import { installIlmForDataStream } from '../../../elasticsearch/datastream_ilm/i
import { ElasticsearchAssetType } from '../../../../../types';
import { deleteILMPolicies, deletePrerequisiteAssets } from '../../remove';
+import { createArchiveIteratorFromMap } from '../../../archive/archive_iterator';
+
import { stepInstallILMPolicies, cleanupILMPoliciesStep } from './step_install_ilm_policies';
jest.mock('../../../archive/storage');
@@ -56,6 +58,7 @@ const packageInstallContext = {
owner: { github: 'elastic/fleet' },
} as any,
assetsMap: new Map(),
+ archiveIterator: createArchiveIteratorFromMap(new Map()),
paths: [],
};
let soClient: jest.Mocked;
@@ -239,6 +242,7 @@ describe('stepInstallILMPolicies', () => {
owner: { github: 'elastic/fleet' },
} as any,
assetsMap: new Map(),
+ archiveIterator: createArchiveIteratorFromMap(new Map()),
paths: [],
},
installType: 'install',
diff --git a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_index_template_pipelines.test.ts b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_index_template_pipelines.test.ts
index d258747edc6ef..1c368cfd998d3 100644
--- a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_index_template_pipelines.test.ts
+++ b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_index_template_pipelines.test.ts
@@ -37,6 +37,8 @@ const mockDeletePrerequisiteAssets = deletePrerequisiteAssets as jest.MockedFunc
typeof deletePrerequisiteAssets
>;
+import { createArchiveIteratorFromMap } from '../../../archive/archive_iterator';
+
import {
stepInstallIndexTemplatePipelines,
cleanupIndexTemplatePipelinesStep,
@@ -122,6 +124,7 @@ describe('stepInstallIndexTemplatePipelines', () => {
owner: { github: 'elastic/fleet' },
} as any,
assetsMap: new Map(),
+ archiveIterator: createArchiveIteratorFromMap(new Map()),
paths: [],
};
appContextService.start(
@@ -281,6 +284,7 @@ describe('stepInstallIndexTemplatePipelines', () => {
],
} as any,
assetsMap: new Map(),
+ archiveIterator: createArchiveIteratorFromMap(new Map()),
paths: [],
};
appContextService.start(
@@ -431,6 +435,7 @@ describe('stepInstallIndexTemplatePipelines', () => {
],
} as any,
assetsMap: new Map(),
+ archiveIterator: createArchiveIteratorFromMap(new Map()),
paths: [],
};
appContextService.start(
@@ -521,6 +526,7 @@ describe('stepInstallIndexTemplatePipelines', () => {
],
} as any,
assetsMap: new Map(),
+ archiveIterator: createArchiveIteratorFromMap(new Map()),
paths: [],
};
appContextService.start(
@@ -574,6 +580,7 @@ describe('stepInstallIndexTemplatePipelines', () => {
owner: { github: 'elastic/fleet' },
} as any,
assetsMap: new Map(),
+ archiveIterator: createArchiveIteratorFromMap(new Map()),
paths: [],
};
appContextService.start(
@@ -647,6 +654,7 @@ describe('cleanupIndexTemplatePipelinesStep', () => {
],
} as any,
assetsMap: new Map(),
+ archiveIterator: createArchiveIteratorFromMap(new Map()),
paths: [],
};
const mockInstalledPackageSo: SavedObject = {
diff --git a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_kibana_assets.test.ts b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_kibana_assets.test.ts
index 52c93c61c16e1..cf9d953868b6a 100644
--- a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_kibana_assets.test.ts
+++ b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_kibana_assets.test.ts
@@ -23,8 +23,25 @@ import { deleteKibanaAssets } from '../../remove';
import { KibanaSavedObjectType, type Installation } from '../../../../../types';
-import { stepInstallKibanaAssets, cleanUpKibanaAssetsStep } from './step_install_kibana_assets';
+import { createArchiveIteratorFromMap } from '../../../archive/archive_iterator';
+import {
+ stepInstallKibanaAssets,
+ cleanUpKibanaAssetsStep,
+ stepInstallKibanaAssetsWithStreaming,
+ cleanUpUnusedKibanaAssetsStep,
+} from './step_install_kibana_assets';
+
+jest.mock('../../../kibana/assets/saved_objects', () => {
+ return {
+ getSpaceAwareSaveobjectsClients: jest.fn().mockReturnValue({
+ savedObjectClientWithSpace: jest.fn(),
+ savedObjectsImporter: jest.fn(),
+ savedObjectTagAssignmentService: jest.fn(),
+ savedObjectTagClient: jest.fn(),
+ }),
+ };
+});
jest.mock('../../../kibana/assets/install');
jest.mock('../../remove', () => {
return {
@@ -58,6 +75,7 @@ const packageInstallContext = {
} as any,
paths: ['some/path/1', 'some/path/2'],
assetsMap: new Map(),
+ archiveIterator: createArchiveIteratorFromMap(new Map()),
};
describe('stepInstallKibanaAssets', () => {
@@ -82,6 +100,7 @@ describe('stepInstallKibanaAssets', () => {
logger: loggerMock.create(),
packageInstallContext: {
assetsMap: new Map(),
+ archiveIterator: createArchiveIteratorFromMap(new Map()),
paths: [],
packageInfo: {
title: 'title',
@@ -102,7 +121,7 @@ describe('stepInstallKibanaAssets', () => {
});
await expect(installationPromise).resolves.not.toThrowError();
- expect(mockedInstallKibanaAssetsAndReferencesMultispace).toBeCalledTimes(1);
+ expect(installKibanaAssetsAndReferencesMultispace).toBeCalledTimes(1);
});
esClient = elasticsearchServiceMock.createClusterClient().asInternalUser;
appContextService.start(createAppContextStartContractMock());
@@ -121,6 +140,7 @@ describe('stepInstallKibanaAssets', () => {
logger: loggerMock.create(),
packageInstallContext: {
assetsMap: new Map(),
+ archiveIterator: createArchiveIteratorFromMap(new Map()),
paths: [],
packageInfo: {
title: 'title',
@@ -144,6 +164,60 @@ describe('stepInstallKibanaAssets', () => {
});
});
+describe('stepInstallKibanaAssetsWithStreaming', () => {
+ beforeEach(async () => {
+ soClient = savedObjectsClientMock.create();
+ esClient = elasticsearchServiceMock.createClusterClient().asInternalUser;
+ appContextService.start(createAppContextStartContractMock());
+ });
+
+ it('should rely on archiveIterator instead of in-memory assetsMap', async () => {
+ const assetsMap = new Map();
+ assetsMap.get = jest.fn();
+ assetsMap.set = jest.fn();
+
+ const archiveIterator = {
+ traverseEntries: jest.fn(),
+ getPaths: jest.fn(),
+ };
+
+ const result = await stepInstallKibanaAssetsWithStreaming({
+ savedObjectsClient: soClient,
+ esClient,
+ logger: loggerMock.create(),
+ packageInstallContext: {
+ assetsMap,
+ archiveIterator,
+ paths: [],
+ packageInfo: {
+ title: 'title',
+ name: 'xyz',
+ version: '4.5.6',
+ description: 'test',
+ type: 'integration',
+ categories: ['cloud', 'custom'],
+ format_version: 'string',
+ release: 'experimental',
+ conditions: { kibana: { version: 'x.y.z' } },
+ owner: { github: 'elastic/fleet' },
+ },
+ },
+ installType: 'install',
+ installSource: 'registry',
+ spaceId: DEFAULT_SPACE_ID,
+ });
+
+ expect(result).toEqual({ installedKibanaAssetsRefs: [] });
+
+ // Verify that assetsMap was not used
+ expect(assetsMap.get).not.toBeCalled();
+ expect(assetsMap.set).not.toBeCalled();
+
+ // Verify that archiveIterator was used
+ expect(archiveIterator.traverseEntries).toBeCalled();
+ });
+});
+
describe('cleanUpKibanaAssetsStep', () => {
const mockInstalledPackageSo: SavedObject = {
id: 'mocked-package',
@@ -302,3 +376,84 @@ describe('cleanUpKibanaAssetsStep', () => {
expect(mockedDeleteKibanaAssets).not.toBeCalled();
});
});
+
+describe('cleanUpUnusedKibanaAssetsStep', () => {
+ const mockInstalledPackageSo: SavedObject = {
+ id: 'mocked-package',
+ attributes: {
+ name: 'test-package',
+ version: '1.0.0',
+ install_status: 'installing',
+ install_version: '1.0.0',
+ install_started_at: new Date().toISOString(),
+ install_source: 'registry',
+ verification_status: 'verified',
+ installed_kibana: [] as any,
+ installed_es: [] as any,
+ es_index_patterns: {},
+ },
+ type: PACKAGES_SAVED_OBJECT_TYPE,
+ references: [],
+ };
+
+ const installationContext = {
+ savedObjectsClient: soClient,
+ savedObjectsImporter: jest.fn(),
+ esClient,
+ logger: loggerMock.create(),
+ packageInstallContext,
+ installType: 'install' as const,
+ installSource: 'registry' as const,
+ spaceId: DEFAULT_SPACE_ID,
+ retryFromLastState: true,
+ initialState: 'install_kibana_assets' as any,
+ };
+
+ beforeEach(async () => {
+ soClient = savedObjectsClientMock.create();
+ esClient = elasticsearchServiceMock.createClusterClient().asInternalUser;
+ appContextService.start(createAppContextStartContractMock());
+ });
+
+ it('should not clean up assets if they all present in the new package', async () => {
+ const installedAssets = [{ type: KibanaSavedObjectType.dashboard, id: 'dashboard-1' }];
+ await cleanUpUnusedKibanaAssetsStep({
+ ...installationContext,
+ installedPkg: {
+ ...mockInstalledPackageSo,
+ attributes: {
+ ...mockInstalledPackageSo.attributes,
+ installed_kibana: installedAssets,
+ },
+ },
+ installedKibanaAssetsRefs: installedAssets,
+ });
+
+ expect(mockedDeleteKibanaAssets).not.toBeCalled();
+ });
+
+ it('should clean up assets that are not present in the new package', async () => {
+ const installedAssets = [
+ { type: KibanaSavedObjectType.dashboard, id: 'dashboard-1' },
+ { type: KibanaSavedObjectType.dashboard, id: 'dashboard-2' },
+ ];
+ const newAssets = [{ type: KibanaSavedObjectType.dashboard, id: 'dashboard-1' }];
+ await cleanUpUnusedKibanaAssetsStep({
+ ...installationContext,
+ installedPkg: {
+ ...mockInstalledPackageSo,
+ attributes: {
+ ...mockInstalledPackageSo.attributes,
+ installed_kibana: installedAssets,
+ },
+ },
+ installedKibanaAssetsRefs: newAssets,
+ });
+
+ expect(mockedDeleteKibanaAssets).toBeCalledWith({
+ installedObjects: [installedAssets[1]],
+ spaceId: 'default',
+ packageInfo: packageInstallContext.packageInfo,
+ });
+ });
+});
diff --git a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_kibana_assets.ts b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_kibana_assets.ts
index b5a1fff91d3b8..aabd23f2eb9cc 100644
--- a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_kibana_assets.ts
+++ b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_kibana_assets.ts
@@ -11,7 +11,9 @@ import { withPackageSpan } from '../../utils';
import type { InstallContext } from '../_state_machine_package_install';
import { deleteKibanaAssets } from '../../remove';
+import type { KibanaAssetReference } from '../../../../../../common/types';
import { INSTALL_STATES } from '../../../../../../common/types';
+import { installKibanaAssetsWithStreaming } from '../../../kibana/assets/install_with_streaming';
export async function stepInstallKibanaAssets(context: InstallContext) {
const { savedObjectsClient, logger, installedPkg, packageInstallContext, spaceId } = context;
@@ -37,6 +39,26 @@ export async function stepInstallKibanaAssets(context: InstallContext) {
return { kibanaAssetPromise };
}
+export async function stepInstallKibanaAssetsWithStreaming(context: InstallContext) {
+ const { savedObjectsClient, installedPkg, packageInstallContext, spaceId } = context;
+ const { packageInfo } = packageInstallContext;
+ const { name: pkgName } = packageInfo;
+
+ const installedKibanaAssetsRefs = await withPackageSpan(
+ 'Install Kibana assets with streaming',
+ () =>
+ installKibanaAssetsWithStreaming({
+ savedObjectsClient,
+ pkgName,
+ packageInstallContext,
+ installedPkg,
+ spaceId,
+ })
+ );
+
+ return { installedKibanaAssetsRefs };
+}
+
export async function cleanUpKibanaAssetsStep(context: InstallContext) {
const {
logger,
@@ -65,3 +87,44 @@ export async function cleanUpKibanaAssetsStep(context: InstallContext) {
});
}
}
+
+/**
+ * Cleans up Kibana assets that are no longer in the package. As opposite to
+ * `cleanUpKibanaAssetsStep`, this one is used after the package assets are
+ * installed.
+ *
+ * This function compares the currently installed Kibana assets with the assets
+ * in the previous package and removes any assets that are no longer present in the
+ * new installation.
+ *
+ */
+export async function cleanUpUnusedKibanaAssetsStep(context: InstallContext) {
+ const { logger, installedPkg, packageInstallContext, spaceId, installedKibanaAssetsRefs } =
+ context;
+ const { packageInfo } = packageInstallContext;
+
+ if (!installedKibanaAssetsRefs) {
+ return;
+ }
+
+ logger.debug('Clean up Kibana assets that are no longer in the package');
+
+ // Get the assets installed by the previous package
+ const previousAssetRefs = installedPkg?.attributes.installed_kibana ?? [];
+
+ // Remove any assets that are not in the new package
+ const nextAssetRefKeys = new Set(
+ installedKibanaAssetsRefs.map((asset: KibanaAssetReference) => `${asset.id}-${asset.type}`)
+ );
+ const assetsToRemove = previousAssetRefs.filter(
+ (existingAsset) => !nextAssetRefKeys.has(`${existingAsset.id}-${existingAsset.type}`)
+ );
+
+ if (assetsToRemove.length === 0) {
+ return;
+ }
+
+ await withPackageSpan('Clean up Kibana assets that are no longer in the package', async () => {
+ await deleteKibanaAssets({ installedObjects: assetsToRemove, spaceId, packageInfo });
+ });
+}
diff --git a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_mlmodel.test.ts b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_mlmodel.test.ts
index 1afb436eb4361..df939f3a458b6 100644
--- a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_mlmodel.test.ts
+++ b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_mlmodel.test.ts
@@ -22,6 +22,8 @@ import { createAppContextStartContractMock } from '../../../../../mocks';
import { installMlModel } from '../../../elasticsearch/ml_model';
import { deleteMLModels, deletePrerequisiteAssets } from '../../remove';
+import { createArchiveIteratorFromMap } from '../../../archive/archive_iterator';
+
import { stepInstallMlModel, cleanUpMlModelStep } from './step_install_mlmodel';
jest.mock('../../../elasticsearch/ml_model');
@@ -53,6 +55,7 @@ const packageInstallContext = {
} as any,
paths: ['some/path/1', 'some/path/2'],
assetsMap: new Map(),
+ archiveIterator: createArchiveIteratorFromMap(new Map()),
};
let soClient: jest.Mocked;
let esClient: jest.Mocked;
diff --git a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_transforms.test.ts b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_transforms.test.ts
index 1ac2383950b05..3bf07d52c6cbf 100644
--- a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_transforms.test.ts
+++ b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_transforms.test.ts
@@ -22,6 +22,8 @@ import { createAppContextStartContractMock } from '../../../../../mocks';
import { installTransforms } from '../../../elasticsearch/transform/install';
import { cleanupTransforms } from '../../remove';
+import { createArchiveIteratorFromMap } from '../../../archive/archive_iterator';
+
import { stepInstallTransforms, cleanupTransformsStep } from './step_install_transforms';
jest.mock('../../../elasticsearch/transform/install');
@@ -52,6 +54,7 @@ const packageInstallContext = {
} as any,
paths: ['some/path/1', 'some/path/2'],
assetsMap: new Map(),
+ archiveIterator: createArchiveIteratorFromMap(new Map()),
};
describe('stepInstallTransforms', () => {
diff --git a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_remove_legacy_templates.test.ts b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_remove_legacy_templates.test.ts
index 39e7159596ba8..7fa00a1c57f57 100644
--- a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_remove_legacy_templates.test.ts
+++ b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_remove_legacy_templates.test.ts
@@ -24,6 +24,8 @@ import { appContextService } from '../../../../app_context';
import { createAppContextStartContractMock } from '../../../../../mocks';
import { removeLegacyTemplates } from '../../../elasticsearch/template/remove_legacy';
+import { createArchiveIteratorFromMap } from '../../../archive/archive_iterator';
+
import { stepRemoveLegacyTemplates } from './step_remove_legacy_templates';
jest.mock('../../../elasticsearch/template/remove_legacy');
@@ -82,6 +84,7 @@ describe('stepRemoveLegacyTemplates', () => {
} as any,
paths: ['some/path/1', 'some/path/2'],
assetsMap: new Map(),
+ archiveIterator: createArchiveIteratorFromMap(new Map()),
};
appContextService.start(
createAppContextStartContractMock({
diff --git a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_save_archive_entries.test.ts b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_save_archive_entries.test.ts
index b03c146640488..255572d57cf49 100644
--- a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_save_archive_entries.test.ts
+++ b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_save_archive_entries.test.ts
@@ -21,6 +21,8 @@ import { appContextService } from '../../../../app_context';
import { createAppContextStartContractMock } from '../../../../../mocks';
import { saveArchiveEntriesFromAssetsMap, removeArchiveEntries } from '../../../archive/storage';
+import { createArchiveIteratorFromMap } from '../../../archive/archive_iterator';
+
import { stepSaveArchiveEntries, cleanupArchiveEntriesStep } from './step_save_archive_entries';
jest.mock('../../../archive/storage', () => {
@@ -60,6 +62,7 @@ const packageInstallContext = {
Buffer.from('{"content": "data"}'),
],
]),
+ archiveIterator: createArchiveIteratorFromMap(new Map()),
};
const getMockInstalledPackageSo = (
installedEs: EsAssetReference[] = []
diff --git a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_save_archive_entries.ts b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_save_archive_entries.ts
index b0d5bb67627a6..7db44bb243f85 100644
--- a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_save_archive_entries.ts
+++ b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_save_archive_entries.ts
@@ -14,17 +14,32 @@ import { withPackageSpan } from '../../utils';
import type { InstallContext } from '../_state_machine_package_install';
import { INSTALL_STATES } from '../../../../../../common/types';
+import { MANIFEST_NAME } from '../../../archive/parse';
export async function stepSaveArchiveEntries(context: InstallContext) {
- const { packageInstallContext, savedObjectsClient, installSource } = context;
+ const { packageInstallContext, savedObjectsClient, installSource, useStreaming } = context;
- const { packageInfo } = packageInstallContext;
+ const { packageInfo, archiveIterator } = packageInstallContext;
+
+ let assetsMap = packageInstallContext?.assetsMap;
+ let paths = packageInstallContext?.paths;
+ // For stream based installations, we don't want to save any assets but
+ // manifest.yaml due to the large number of assets in the package.
+ if (useStreaming) {
+ assetsMap = new Map();
+ await archiveIterator.traverseEntries(async (entry) => {
+ if (entry.path.endsWith(MANIFEST_NAME)) {
+ assetsMap.set(entry.path, entry.buffer);
+ }
+ });
+ paths = Array.from(assetsMap.keys());
+ }
const packageAssetResults = await withPackageSpan('Update archive entries', () =>
saveArchiveEntriesFromAssetsMap({
savedObjectsClient,
- assetsMap: packageInstallContext?.assetsMap,
- paths: packageInstallContext?.paths,
+ assetsMap,
+ paths,
packageInfo,
installSource,
})
diff --git a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_save_system_object.test.ts b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_save_system_object.test.ts
index aecdd0b2552c4..8d80c236aefb0 100644
--- a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_save_system_object.test.ts
+++ b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_save_system_object.test.ts
@@ -21,6 +21,8 @@ import { createAppContextStartContractMock } from '../../../../../mocks';
import { auditLoggingService } from '../../../../audit_logging';
import { packagePolicyService } from '../../../../package_policy';
+import { createArchiveIteratorFromMap } from '../../../archive/archive_iterator';
+
import { stepSaveSystemObject } from './step_save_system_object';
jest.mock('../../../../audit_logging');
@@ -67,6 +69,7 @@ describe('updateLatestExecutedState', () => {
logger,
packageInstallContext: {
assetsMap: new Map(),
+ archiveIterator: createArchiveIteratorFromMap(new Map()),
paths: [],
packageInfo: {
title: 'title',
@@ -133,6 +136,7 @@ describe('updateLatestExecutedState', () => {
logger,
packageInstallContext: {
assetsMap: new Map(),
+ archiveIterator: createArchiveIteratorFromMap(new Map()),
paths: [],
packageInfo: {
title: 'title',
diff --git a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_update_current_write_indices.test.ts b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_update_current_write_indices.test.ts
index c7f3c040b7966..017805d34efef 100644
--- a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_update_current_write_indices.test.ts
+++ b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_update_current_write_indices.test.ts
@@ -22,6 +22,8 @@ import { appContextService } from '../../../../app_context';
import { createAppContextStartContractMock } from '../../../../../mocks';
import { updateCurrentWriteIndices } from '../../../elasticsearch/template/template';
+import { createArchiveIteratorFromMap } from '../../../archive/archive_iterator';
+
import { stepUpdateCurrentWriteIndices } from './step_update_current_write_indices';
jest.mock('../../../elasticsearch/template/template');
@@ -86,6 +88,7 @@ describe('stepUpdateCurrentWriteIndices', () => {
} as any,
paths: ['some/path/1', 'some/path/2'],
assetsMap: new Map(),
+ archiveIterator: createArchiveIteratorFromMap(new Map()),
};
appContextService.start(
createAppContextStartContractMock({
diff --git a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/update_latest_executed_state.test.ts b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/update_latest_executed_state.test.ts
index d963e5fea44c9..aea879aba5479 100644
--- a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/update_latest_executed_state.test.ts
+++ b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/update_latest_executed_state.test.ts
@@ -32,6 +32,8 @@ import { auditLoggingService } from '../../../../audit_logging';
import type { PackagePolicySOAttributes } from '../../../../../types';
+import { createArchiveIteratorFromMap } from '../../../archive/archive_iterator';
+
import { updateLatestExecutedState } from './update_latest_executed_state';
jest.mock('../../../../audit_logging');
@@ -61,6 +63,7 @@ describe('updateLatestExecutedState', () => {
logger,
packageInstallContext: {
assetsMap: new Map(),
+ archiveIterator: createArchiveIteratorFromMap(new Map()),
paths: [],
packageInfo: {
title: 'title',
@@ -116,6 +119,7 @@ describe('updateLatestExecutedState', () => {
logger,
packageInstallContext: {
assetsMap: new Map(),
+ archiveIterator: createArchiveIteratorFromMap(new Map()),
paths: [],
packageInfo: {
title: 'title',
@@ -153,6 +157,7 @@ describe('updateLatestExecutedState', () => {
logger,
packageInstallContext: {
assetsMap: new Map(),
+ archiveIterator: createArchiveIteratorFromMap(new Map()),
paths: [],
packageInfo: {
title: 'title',
@@ -198,6 +203,7 @@ describe('updateLatestExecutedState', () => {
logger,
packageInstallContext: {
assetsMap: new Map(),
+ archiveIterator: createArchiveIteratorFromMap(new Map()),
paths: [],
packageInfo: {
title: 'title',
diff --git a/x-pack/plugins/fleet/server/services/epm/packages/remove.ts b/x-pack/plugins/fleet/server/services/epm/packages/remove.ts
index ac3f5def5d09c..3892eaa951e5f 100644
--- a/x-pack/plugins/fleet/server/services/epm/packages/remove.ts
+++ b/x-pack/plugins/fleet/server/services/epm/packages/remove.ts
@@ -148,6 +148,7 @@ export async function deleteKibanaAssets({
const namespace = SavedObjectsUtils.namespaceStringToId(spaceId);
+ // TODO this should be the installed package info, not the package that is being installed
const minKibana = packageInfo.conditions?.kibana?.version
? minVersion(packageInfo.conditions.kibana.version)
: null;
diff --git a/x-pack/plugins/fleet/server/services/epm/registry/index.ts b/x-pack/plugins/fleet/server/services/epm/registry/index.ts
index bb4d612aa7de3..75b9869d0a7c6 100644
--- a/x-pack/plugins/fleet/server/services/epm/registry/index.ts
+++ b/x-pack/plugins/fleet/server/services/epm/registry/index.ts
@@ -54,6 +54,8 @@ import { resolveDataStreamFields, resolveDataStreamsMap, withPackageSpan } from
import { verifyPackageArchiveSignature } from '../packages/package_verification';
+import type { ArchiveIterator } from '../../../../common/types';
+
import { fetchUrl, getResponse, getResponseStream } from './requests';
import { getRegistryUrl } from './registry_url';
@@ -309,11 +311,12 @@ async function getPackageInfoFromArchiveOrCache(
export async function getPackage(
name: string,
version: string,
- options?: { ignoreUnverified?: boolean }
+ options?: { ignoreUnverified?: boolean; useStreaming?: boolean }
): Promise<{
paths: string[];
packageInfo: ArchivePackage;
assetsMap: AssetsMap;
+ archiveIterator: ArchiveIterator;
verificationResult?: PackageVerificationResult;
}> {
const verifyPackage = appContextService.getExperimentalFeatures().packageVerification;
@@ -340,18 +343,18 @@ export async function getPackage(
setVerificationResult({ name, version }, latestVerificationResult);
}
- const { assetsMap, paths } = await unpackBufferToAssetsMap({
- name,
- version,
+ const contentType = ensureContentType(archivePath);
+ const { paths, assetsMap, archiveIterator } = await unpackBufferToAssetsMap({
archiveBuffer,
- contentType: ensureContentType(archivePath),
+ contentType,
+ useStreaming: options?.useStreaming,
});
if (!packageInfo) {
packageInfo = await getPackageInfoFromArchiveOrCache(name, version, archiveBuffer, archivePath);
}
- return { paths, packageInfo, assetsMap, verificationResult };
+ return { paths, packageInfo, assetsMap, archiveIterator, verificationResult };
}
export async function getPackageFieldsMetadata(
@@ -397,7 +400,7 @@ export async function getPackageFieldsMetadata(
}
}
-function ensureContentType(archivePath: string) {
+export function ensureContentType(archivePath: string) {
const contentType = mime.lookup(archivePath);
if (!contentType) {
diff --git a/x-pack/plugins/fleet/server/services/package_policies/experimental_datastream_features.ts b/x-pack/plugins/fleet/server/services/package_policies/experimental_datastream_features.ts
index edf31991634b9..cd1c26942aa0c 100644
--- a/x-pack/plugins/fleet/server/services/package_policies/experimental_datastream_features.ts
+++ b/x-pack/plugins/fleet/server/services/package_policies/experimental_datastream_features.ts
@@ -30,6 +30,7 @@ import {
applyDocOnlyValueToMapping,
forEachMappings,
} from '../experimental_datastream_features_helper';
+import { createArchiveIteratorFromMap } from '../epm/archive/archive_iterator';
export async function handleExperimentalDatastreamFeatureOptIn({
soClient,
@@ -75,6 +76,7 @@ export async function handleExperimentalDatastreamFeatureOptIn({
return prepareTemplate({
packageInstallContext: {
assetsMap,
+ archiveIterator: createArchiveIteratorFromMap(assetsMap),
packageInfo,
paths,
},
diff --git a/x-pack/test/fleet_api_integration/apis/epm/index.js b/x-pack/test/fleet_api_integration/apis/epm/index.js
index 3caed7da79f65..cae50abdae762 100644
--- a/x-pack/test/fleet_api_integration/apis/epm/index.js
+++ b/x-pack/test/fleet_api_integration/apis/epm/index.js
@@ -31,6 +31,7 @@ export default function loadTests({ loadTestFile, getService }) {
loadTestFile(require.resolve('./install_update'));
loadTestFile(require.resolve('./install_tsds_disable'));
loadTestFile(require.resolve('./install_tag_assets'));
+ loadTestFile(require.resolve('./install_with_streaming'));
loadTestFile(require.resolve('./bulk_upgrade'));
loadTestFile(require.resolve('./bulk_install'));
loadTestFile(require.resolve('./update_assets'));
diff --git a/x-pack/test/fleet_api_integration/apis/epm/install_by_upload.ts b/x-pack/test/fleet_api_integration/apis/epm/install_by_upload.ts
index e6fa2930cf84d..e32328b4e22cc 100644
--- a/x-pack/test/fleet_api_integration/apis/epm/install_by_upload.ts
+++ b/x-pack/test/fleet_api_integration/apis/epm/install_by_upload.ts
@@ -195,7 +195,7 @@ export default function (providerContext: FtrProviderContext) {
.send(buf)
.expect(400);
expect((res.error as HTTPError).text).to.equal(
- '{"statusCode":400,"error":"Bad Request","message":"Archive seems empty. Assumed content type was application/gzip, check if this matches the archive type."}'
+ '{"statusCode":400,"error":"Bad Request","message":"Manifest file manifest.yml not found in paths."}'
);
});
diff --git a/x-pack/test/fleet_api_integration/apis/epm/install_with_streaming.ts b/x-pack/test/fleet_api_integration/apis/epm/install_with_streaming.ts
new file mode 100644
index 0000000000000..152e3dfd4c69d
--- /dev/null
+++ b/x-pack/test/fleet_api_integration/apis/epm/install_with_streaming.ts
@@ -0,0 +1,65 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+import type { Client } from '@elastic/elasticsearch';
+import { INGEST_SAVED_OBJECT_INDEX } from '@kbn/core-saved-objects-server';
+import { Installation } from '@kbn/fleet-plugin/server/types';
+import expect from 'expect';
+import { FtrProviderContext } from '../../../api_integration/ftr_provider_context';
+import { skipIfNoDockerRegistry, isDockerRegistryEnabledOrSkipped } from '../../helpers';
+
+export default function (providerContext: FtrProviderContext) {
+ const { getService } = providerContext;
+ const es: Client = getService('es');
+ const supertest = getService('supertest');
+ const fleetAndAgents = getService('fleetAndAgents');
+
+ const uninstallPackage = async (pkg: string, version: string) => {
+ await supertest.delete(`/api/fleet/epm/packages/${pkg}/${version}`).set('kbn-xsrf', 'xxxx');
+ };
+ const installPackage = (pkg: string, version: string, opts?: { force?: boolean }) => {
+ return supertest
+ .post(`/api/fleet/epm/packages/${pkg}/${version}`)
+ .set('kbn-xsrf', 'xxxx')
+ .send({ force: !!opts?.force });
+ };
+
+ const getInstallationSavedObject = async (pkg: string): Promise => {
+ const res: { _source?: { 'epm-packages': Installation } } = await es.transport.request({
+ method: 'GET',
+ path: `/${INGEST_SAVED_OBJECT_INDEX}/_doc/epm-packages:${pkg}`,
+ });
+
+ return res?._source?.['epm-packages'] as Installation;
+ };
+
+ describe('Installs a package using stream-based approach', () => {
+ skipIfNoDockerRegistry(providerContext);
+
+ before(async () => {
+ await fleetAndAgents.setup();
+ });
+
+ describe('security_detection_engine package', () => {
+ after(async () => {
+ if (!isDockerRegistryEnabledOrSkipped(providerContext)) return;
+ await uninstallPackage('security_detection_engine', '8.16.0');
+ });
+ it('should install security-rule assets from the package', async () => {
+ await installPackage('security_detection_engine', '8.16.0').expect(200);
+ const installationSO = await getInstallationSavedObject('security_detection_engine');
+ expect(installationSO?.installed_kibana).toEqual(
+ expect.arrayContaining([
+ expect.objectContaining({
+ id: expect.any(String),
+ type: 'security-rule',
+ }),
+ ])
+ );
+ });
+ });
+ });
+}
diff --git a/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/security_detection_engine/security_detection_engine-8.16.0.zip b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/security_detection_engine/security_detection_engine-8.16.0.zip
new file mode 100644
index 0000000000000000000000000000000000000000..b57713203546d8eb9b6f5c32f49c72d9bb6388ac
GIT binary patch
literal 63220
zcmeHwOKdAydY&fs#A6zhvEg1AFkqbF^?2^psQ7*g_jZGlc>4;i7bxDj?zG05BCAMN
zt60UUDoR&lOp*qYz%a7PB0yG2fHvTbm+{t{*j_n61_lgoy~!qqVZdGm2=e{sQB|y>
zB(_GkRWl~LbtTs0KmYm9|2~iZnv!4yvwhHla34_eN+C@*T_ikZtjdBQrw
zp*ah5XNa#m*KF?NK^9C*=DVZdO83kycJ0oYKK4wL1uoNVo4F(YL|}STpXrXlhOT2+
zL)zoJ`h0kfsMO#DF7^gWO{T(w!qPy`*>goM7Ee=`GIE*<^iru
z^$RnnU+R`EKu{-Uo;gE*nPGa?r5*qcYWKod-HixhIn30D6E@UAe<1TIm;kiN5!q~O
zY6Wo%A_NfwNGydzVWhH*I2oiToc_JYuWGPJzme0pg*pjpTcCc7}N
z7aPcd%)ARBBN9D{85OZSlUgCn+<^~~G(qtM5GH`+)ZhW49x%%%f{^TjfP?EK9*M4i
z5ls&)$y?h>HW!MQ;4{wf;vpdK(V${T{G61TkogmxE3ghw$KWWkst5n(-~49`k*6Ex
zR3~Nx>XPGfB#pBf9u!QkOR+oA1JKsLP1po*jLX~sw{xn^_*-mf>lTDM8WMppk~JU^-oxJ{SX*qOV_2rZ87+_i`lfAzCL;(a8@XQ2*GX=z>CE*4E+za0
z@f{;2HzkPzn-O5q7p}TJ`9%?e4?rBa(8K7HU|tN4jx6@T&-rs`LtS9MywM~i!h)+;<~pG4M7KwTJ5eVmsUwWYk(3{yT;_hj
zVD(7UIg!v;*MXj%xNK~~mH-Fn`iKf(FDZCxEZE3%r_@ePxBb*xvCgA;Icj{Mg_2NE
zgi)LlI+g>Y1&s}U<3q~10@MT|q^d>pk^X_+nZi@RP)W_epmhUbbS1|L=}~avL#0T<
zj&apvJu5kh@OMBqQmZarFyF%D`97ZGmKZo&4(WUaOSIMp
zCs+>W@{l52B4R!Qb^g+FZT^((vVsEXC+?tEAb%us5+h?PCl$Jr1A;Cp0L~9Gw5awfOlHDdpCcG(dj_C)-&7n7-
zF{f9x#0>o!>@}iGfD2HBI}>aZFYP%(xLUFwa~AKr0$i!MfivABk4M_6=b>Kn85FF=cMzm
z8JtUU03od;^3s76qqH!{9Dm{)C}11y3!_7WKstmV8Tu6d4;t|-a$j@Qf{;7Kgk-b{
zC~+bF1Ur)oNvMXnIlQny0k}Z6IR^Bz!T_6AL6DJAv*ge>JVC!9rXOQCmb2GOTbx$?LEJjNaxZ=!I51
z69{puLGaN>3*P1&Jp@rC&fL@IIFr{IvXKH3s(yhpH6~~zUWc^17$6Ad%(KkE_56u7
zi@8IJuC6!M9qWfeVQ?X$0VRK%MsH
zNV+%TEk`%Oi&NMeb)Rbt0-1}WQ(&8$@(J{DY9g>;?v(?&p)15QF;AIvEc6HwQ}^LD
zbA1nYNfAS`-3)>b26W*ELvg@n;6dTEbED0r%>@^c!GJq@3D=aoN%R8Bg8Go-%KOUl
zp#*nj@8Fh^NJx-qiH4KFM?Ak36rq72_XszgYidb
z0jf_!kSRItjw*HL6
z^IRTU?pZ$fuffuQ*Vp|E8$mcA4Tt5%sM)M(_4cT()fyE;YYo~h&8ReoL!(wNx6Pq|
z6k>K5bGM0&C~@KYmM}+b2QCT}jt|()TB&Xrqq5c*woI*79wIGMZjFHNz|7(j
z1niCoqex}4(+M12;%Gwo)EJQQ2Go&J)7x#}*(g^_fK{q!?a`>EwJPmFtF4=@QhCIo
z_C0uo7}-6TcH4y!WpU`QeOM}hYa8WqX*j5A^-*o0)rM_d8?;AttzI3K^m4P*)Xnm<
zTn^(IB~K!rdpdl^Dy4Fpbq!bdAa);`p6lyd?AX>v>=m*EF3e!=gghtE2))9nQ%(TN
zMf!SMaDCVkv)MX;yyJL0lE|-s3t~$UiX8
zK_`j$8@U}~6y$rRChyjal12VxG5-SQAf+(c&T^Mz8f>oM`KR$BFS0eI4&C9S6vPcrE4=AZYH0Rw@
z4lR+J4*>aPa#V%m$$W%Qwun!8EJBVvDSNn8A_hV4V%Z((9H`hN90cgB{;MuKJ$~7L
z)9H2D{wX`@9e;O!ue- #k#+J
z((9g{vg2NE|M28szl&@8N4p2F_x6uIWIK2dx|JR5gRcR!f6S;s32MKK_g=EYZg2M$
zAa{255BB>XZ{=R@_m2qX%i|vFu#-*?%K7y{r^ilS_fC#ayJ&t7V2}2XUiQ#R_pp1^
zN2qXwYpnZSd|{`rItK^TRIc+H*!KuOwtIZ?ac}>_SAF*C_+YP#i#uIl*4a7eil)%1
z-Gk2l;TGHL9Ckh=?0W1NP~)iMcZ^8%h3IIVR<@lPNgPiXc6%dv99>bk69kQRBE)!W>ssO
zMnkLBnnO(=REFBXY}8tZp)(#zKdRhks8y5#ypMjQ
zK<{DnW2jKX1c1Ws3+l&QLO;T!to7qsKXTRjW$H(Y8h-QFey{qMzqGMIKQ~7Wg;k;k
zG1pB2NZUPB8%`?UK@QtTt
zVO(I)b%9gljLxCrfy*3173`bHP90La0y|XiD}6klk+kDHvVKx
z!&H|)^sE{Az1yrO+x6w_rVJhCGXwq|e}S>!dS-4TQ-CDm&?Ik9UbijhBAS4VMKW^A
zv1mDg3D1+~%8RqPZ5PX>O0AwivR0`7G$2{~sX$UNOgVG7R@b`IA&AYD=EcP$($`JwUY`SIA)WarFPP6RCveOr
zch*x;W;t`ZvtDW>BnUWWlbp3y8r7`n&Ppq(kjjNj`tik9C1o|sg{%a#H^-tX2zWNMzfKiVk>J?){SO8;bk@p
zt&B-cGpWxT8ALImCF>bPF_GD7Wo?e7(X6D*VK%2&fN5g9o0&7*%}QdtfnqjoO*1+3
z+sGg>6N(%tW|Wx8`G9)%h*?e;ZlIV|VkX4Am9@!$M!lKH4+6z(60_b&DWr_8-)qzx
zsSu)(Rbr+TQs#)6ToTtPWR;jn2eY0zH@%+B6adAHa%MfHkTSM%uTiTd!tho`vu%x9
zGRAFY&S|ez6HYr&%qC~nstE(s$RIHj1_&r-l$gozqMkismJ^%_6f;W9a>AOoGM7}Z
zG*UVbpT7sC^
z9-Xnob*Yrdtpmku60=lFEZu2lZHl~6O0H@LidiLQ!tZEgkeG?Y7EsJ8F%#OooFlrIkz!$oOd9ZlzjT
ziHsb_M{**|ZLD!wVW>Hdk2BVOv0PtSW*+7Uy?e+^xr)Ujs}ZvLAj#DG;8?*Kd8^|1
zID=g*mvIK_$~bCNl-$mLazWSjS)Y8eUMIL3qdcx1he
zpJ>5bybH~j*4yx;bV3u>zFH`WDv)9MX6+|NHW7;5gzRdR6%}i~6tq|JK1%RD?sAZb
z&f)3EqQaGH^KXtY{2PAC-Sm
z)lAkpLbU)Yfu#6?i`o6j+gw%8D!lJfw!5gC5TNLSETll{L81C>AH@-5ad*@^pyKZD
z25~Av@fGVw|A`GYHt0tbp`c>(Ur$t?|E*PuP@oEzze@S};>y5!-Ok=&w=gwgB`u))
z2Xj=1qe?wiRt|{6I>-LP7a~A^vWx|Vl#)eH01HFIpL{*$)N4)kj
z>Lh_jKm9LH|Mc&_vavxwH}mMXR$(h^I$niEJFCJ{+x4_YZT7a{Uyehj
zeg47QDT?HZDl9MZ2&nUr>mh2zIpY`k*Zr4TEC0d!x#xHX#psM+@*+<#@+g}}RhHE^
zVw4^C?TdVgl~|*O|MPL6Aa~&y~*eZ)zG!{GkM?4$0YOrxzyKuLk*BPZ4U=E6-5OMTvpW?@}E}rfCuY
zw;1o=M5yOQabGk>MPc3-s?iYjJVkqj=a3!T5>JhpWxUAW1Tl}Q)}DJ|zQ{YM`l-HY
zlCYo>>I2&9CjHHM^hF*u6CKwuWWUM%doBv5qOF08`k5FlZQx>9XbAG`n*SS)SA4Yc
z?>{fny8>ShO5psV=gwz&h7zNW4>dD=k>`I>x#y?t0tN}6Emo6%J&WPOfuOYdgaMty
za(SyD*@#a>oTxgVP
z)mF8}s->+O;Nq7Ak6-^X&&ho{(PyBhAl{Rgoo21prG64lQ9l>aENxY>s;rIq^ERLY
zXp0?G>grd$!FI8SNq)9!AOLn-V)GCK7RZ3Mz+TllzQlk?WKPg%h)a2Ir?XSK3zu@T
zd31EQ+%D8gjZ(Q%*{YQa?FLri*UAi!R*_F?;}pBL_=Y3lDnJI+Ru2T6Wq4G9daazs
z<9Tr`8JGTePICA@skQdM{^dXV)t}$kpr4!7+S653(FJ!WlbUUrC2xEIa7x0?NpmNG
ze{G4Ipx+yKNgp7OW{$LWWza%R(kA|DwFg?=Fx%B(t6ssc^K#)+lm`vf>hE%GkVk1+
z&l=1F6ky$E;u>*b9+liDu7_)%@aO0nee%+*=fkVt+Y0~8$Es4{&3p&C1cjq~UJstC
zdzv;%K%<_xK{abf7W_@B>x}xC8vV%9&Ftwev?40L;yaWE<5kzmQ{fegC(!9sd2>WS
zhA67M6Fx{~l_#b>W1`$H3GQ>j{jzL=ZdbsVxRol5tV
ze|BIEO$P94tK5SdixzL(FdikU&dm3eBdf(Na3DxxrM-4L{Mo
zLe*z&?$dSIr{x@gGIU@|<2;U2ibRp9bGatbmQFs6&P_ewWRR{HJ@-2_y-|wLp!+`x
z^+8-Uh+^Wv3Sw^?=^Y@LF%sh{1%i1weOENi5;Gkq5O$ikkX{O2;Ur-0Am!YxkoB
z4uX+59(Xbhh~F1%(eIStG%k6cKckpVidL%i{+wK72(D`;KK;6zPD=QCXdsAaqS`
z=|KqQp2Pu?OBg~yrQeYXk6)#~zn4+)7d#Cay-~QVrdE_
zg93~k?wLl640)xwg}V^(Z$2_eV#-PKwj7yN6!W=~(6EuvCX+JF=YB*X#}EJD_y0o?
z?3lQ$a10}xz-aB*7oF|w9QIAIsLWOvHc-D+_)gJG7)D1)Eaal%1Sm+fpU~VBC%bPUrPMQj
zFo$PIb=v*yGe=`DZ4-Ux1>^Z05$)ZDKcH)@??yqQghP%uD%*4aQG|jf`vh5yIW@>5
zzPo3%MubsOh(?K=RG2DT9A_Y*#i*wRt|kBrTp52YVrmky
z5k%a*qD(Fv`kBxCi95F;??_I(#r!VGKJZl(mI?&F+@VEjERpt&cl<`ljv>Z{=0hYo
z#B8ZtFfwtcSS&I|GUPQKKT0%Cp!0c*g*HTkR{eV%;C{I
zw;GBYF`|r(Z<2=NP+|xYX1-}6D-KJkNxZR#YeQ3d*DDMcc4W_K;&E@+ok*)4maReAdYxB17V{PWFHx
zArbzGCwpYt{g&j7*jIXwSmdr)4}Y~I&;JQy!dLBC2mdV3#t_=>t#Ba
zWB(_fxq0|yI^rCcdt`dlyydN#o?(=CA*2${|2oKkCT$a%GI%tT}=-53;Ko4XnkaSr2sjb-lcBSI-5pmp~Z(?Wq;ycncgY(
zF4*jJ=vlKsOnUVM$-8`-j7W~TZ+&3dRzO6*v~)q&Sl6(b;Fjg}Vrd;_?ai_4U2kI^
z2#e>%fKOaMD7b!sm}py)g*f5NVVF4tc0OTOz@7)Q;Byoe*O_kvw#}Z>gABhgJ#~rg
zW7?akb;y|r^G}#53$M$SuIg%+NUWWlo&pi{@GSp~^WRw>&&@D5=pA82?pdCoKUJoA^XS<+%XOV7=N1<9?>6iMMQF!1u`$Ee4PTU6?S*q
z!aPwVnRt)y9qSmEI<_DgtTQ((EKZ_5PuPvY*U(@M!kP2^?|=WyQOa!bK70Sn=@>X^
z1M7(BjZ2gDA=xCmKHYmGtP_iM2v_@a&tb3yv8&Q%EOe7S?ebkC(3%{DReMEN#WTl*
z(sk4UT;c0a&hnEBdwOxxPCJ&dwy}bXOTRyu-}~
zM^X+2j6m^{2|UwxSutR}?uX}lZ;pF=tZ1+@@5ZeZHS0+JT>ZQf*L?rhqA1kbG{B_6?r8b8m>fFA=4PQB$q=XiHC@j5FKW=|y@d
z?yfxgK9^D}(M2L0eZo2LJ4hm)#`B?ZC)ev{YaZL=Qfe*P(~!{69F@EGexwz7h?m;r
z0@vY&uJSfi^ei1Xxz8mzs0u27WyKyR{g>OYcvl-;(0OchY24DZ>RCAMN|i~1MC-0r
z0dh~$aMvze0jyAp|Bkk$#IMrdi`!S!-SqQ|&qena#PZ?e=Nq=U+-Wpd+vc+IZ$E4Q
z;lJ3}pr1#JpTC4{F6;PNGWI%tRucX*9Y3ph9ytP}TTHKD8Hn7^@~2u^t83+!SSd=O
zHa)>ZeX%_e$$}`vM`*r%hR=!Tjqy+ld?-rw07+!kwih%*~-(hYs*%Z}-fU^?UB
zzDN;#aCXMur#lkH2O$i)81p0P>)BcN?U0`Y_W{{alf$OVoAeKT2FMqoNuGd+L+1!h
zBZTN#;Ig^&;iafZvlaPf1cE*|3V}jy@#XBy7~psxB&^i;-5Gw
zjz+j6v5<}Q#-bis;_rpI{B@G$HtH--vMeSN(~-++DJW?TZfkz|;DqjV+~M_BJTBu-
zcQuC3I>#gC1=cy9h~u#-wUs?x(N}_uNV5nSECD^C;nY8^buS5(&zWC
z7y8KEjdzpg5f=JHNoeBZC9Y(6BpfYZd$^ONZ#-T&^gnJ=LQ3lHBXP@)3x0P?>+0=<
z{#2;b@35b89|7MjAl8o3l3qH#%fngz`1dv-_gPU^ZznejEa3Id7TeXSvdwL)4HX(8
zX`z=d#PD>VCDyZ~3S`8P!N`Eh|np1bv&o4d~-H%T;zJo)gZ`hr7cjmP!
z=^gs>>V!XDBS{`2efsPF+}SVHLMny*PDJ;i7B^T=4_kecTnG<-MFQmUiR1EW5I;j%3tuGH#An?urpcbv{~H&S=%Q
zpOXkjCllsEx=2dX;pG3f{a^p&A5h|reoj96%0GMW=fGe~stkP-oFzWLyz#dk`b$wP
z)oo3HkJl~|a8>o9@sI!F)Azoyu|YpuA>56P&p&&$3fzPJ-R{w8w-CGyLiSatt0sQ)
z*M6`1mpE^oe!jEN#GjziJ5fJ6?xT@gTZq?iEG)F}kH5Y`3u0}W?T#0uP<4ao`}HN|
zAnE$X293ZE|J4eO&@mV{4@11dAC-qxpU*%0^Ob?8i$&hn1*#S(KGcQZ_-utPBx(mP
zGE%&l7gY~bpU*%0bXC}j6_&|;in|DYa#*NTnD|hi{_)?f(5H0au$$$MN{2<@_x}Cr
z;8o93g~S$V7_Ux1H3-z_^Uwaa8_ol~FBKl`KqvjSdAox78dzWUDz&adFVzy5`djj#S4ef$6ALgH5d
literal 0
HcmV?d00001
From 03cd302aa2bd6c69db62bb1c7e1093d917fbcf19 Mon Sep 17 00:00:00 2001
From: Rudolf Meijering
Date: Tue, 5 Nov 2024 13:12:15 +0100
Subject: [PATCH 057/101] Don't shutdown server until we're done with the
starting phase (#198794)
## Summary
Fixes https://github.com/elastic/kibana/issues/158318
### Checklist
Delete any items that are not applicable to this PR.
- [ ] 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)
- [ ]
[Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html)
was added for features that require explanation or tutorials
- [ ] [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
- [ ] Any UI touched in this PR is usable by keyboard only (learn more
about [keyboard accessibility](https://webaim.org/techniques/keyboard/))
- [ ] Any UI touched in this PR does not create any new axe failures
(run axe in browser:
[FF](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/),
[Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US))
- [ ] If a plugin configuration key changed, check if it needs to be
allowlisted in the cloud and added to the [docker
list](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker)
- [ ] This renders correctly on smaller devices using a responsive
layout. (You can test this [in your
browser](https://www.browserstack.com/guide/responsive-testing-on-local-server))
- [ ] This was checked for [cross-browser
compatibility](https://www.elastic.co/support/matrix#matrix_browsers)
### Risk Matrix
Delete this section if it is not applicable to this PR.
Before closing this PR, invite QA, stakeholders, and other developers to
identify risks that should be tested prior to the change/feature
release.
When forming the risk matrix, consider some of the following examples
and how they may potentially impact the change:
| Risk | Probability | Severity | Mitigation/Notes |
|---------------------------|-------------|----------|-------------------------|
| Multiple Spaces—unexpected behavior in non-default Kibana Space.
| Low | High | Integration tests will verify that all features are still
supported in non-default Kibana Space and when user switches between
spaces. |
| Multiple nodes—Elasticsearch polling might have race conditions
when multiple Kibana nodes are polling for the same tasks. | High | Low
| Tasks are idempotent, so executing them multiple times will not result
in logical error, but will degrade performance. To test for this case we
add plenty of unit tests around this logic and document manual testing
procedure. |
| Code should gracefully handle cases when feature X or plugin Y are
disabled. | Medium | High | Unit tests will verify that any feature flag
or plugin combination still results in our service operational. |
| [See more potential risk
examples](https://github.com/elastic/kibana/blob/main/RISK_MATRIX.mdx) |
### For maintainers
- [ ] This was checked for breaking API changes and was [labeled
appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#_add_your_labels)
- [ ] This will appear in the **Release Notes** and follow the
[guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process)
---
.../group3/incompatible_cluster_routing_allocation.test.ts | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/core/server/integration_tests/saved_objects/migrations/group3/incompatible_cluster_routing_allocation.test.ts b/src/core/server/integration_tests/saved_objects/migrations/group3/incompatible_cluster_routing_allocation.test.ts
index 56488f571ef16..8213c880c0fa4 100644
--- a/src/core/server/integration_tests/saved_objects/migrations/group3/incompatible_cluster_routing_allocation.test.ts
+++ b/src/core/server/integration_tests/saved_objects/migrations/group3/incompatible_cluster_routing_allocation.test.ts
@@ -121,7 +121,7 @@ describe('incompatible_cluster_routing_allocation', () => {
await root.preboot();
await root.setup();
- root.start().catch(() => {
+ const startPromise = root.start().catch(() => {
// Silent catch because the test might be done and call shutdown before starting is completed, causing unwanted thrown errors.
});
@@ -165,6 +165,7 @@ describe('incompatible_cluster_routing_allocation', () => {
{ retryAttempts: 100, retryDelayMs: 500 }
);
+ await startPromise; // Wait for start phase to complete before shutting down
await root.shutdown();
});
});
From f8c01d41d2dc6c4c4d096c485b48dc7decafd873 Mon Sep 17 00:00:00 2001
From: Bena Kansara <69037875+benakansara@users.noreply.github.com>
Date: Tue, 5 Nov 2024 13:57:32 +0100
Subject: [PATCH 058/101] [Observability] [Alerts table] Fix cannot display
alerts error (#198914)
Resolves https://github.com/elastic/kibana/issues/198912
### Testing
- Create ES query rule in Observability
- Open Alert flyout of the ES query alert
- Verify that Alert flyout opens as expected
---
.../alert_overview/helpers/map_rules_params_with_flyout.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/x-pack/plugins/observability_solution/observability/public/components/alert_overview/helpers/map_rules_params_with_flyout.ts b/x-pack/plugins/observability_solution/observability/public/components/alert_overview/helpers/map_rules_params_with_flyout.ts
index b5819631406d7..e9e8714bf85b9 100644
--- a/x-pack/plugins/observability_solution/observability/public/components/alert_overview/helpers/map_rules_params_with_flyout.ts
+++ b/x-pack/plugins/observability_solution/observability/public/components/alert_overview/helpers/map_rules_params_with_flyout.ts
@@ -286,7 +286,7 @@ export const mapRuleParamsWithFlyout = (alert: TopAlert): FlyoutThresholdData[]
const { thresholdComparator, threshold } = ruleParams as EsQueryRuleParams;
const ESQueryFlyoutMap = {
observedValue: [alert.fields[ALERT_EVALUATION_VALUE]],
- threshold: threshold.join(' AND '),
+ threshold: [threshold].flat().join(' AND '),
comparator: thresholdComparator,
pctAboveThreshold: getPctAboveThreshold(
threshold,
From 43daa7ee074367a546476515a9772b3ed12121a1 Mon Sep 17 00:00:00 2001
From: "elastic-renovate-prod[bot]"
<174716857+elastic-renovate-prod[bot]@users.noreply.github.com>
Date: Tue, 5 Nov 2024 07:42:04 -0600
Subject: [PATCH 059/101] Update dependency @redocly/cli to ^1.25.8 (main)
(#197990)
Co-authored-by: elastic-renovate-prod[bot] <174716857+elastic-renovate-prod[bot]@users.noreply.github.com>
---
package.json | 2 +-
yarn.lock | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/package.json b/package.json
index 17e873a89c7be..3c9b1ce349e72 100644
--- a/package.json
+++ b/package.json
@@ -1497,7 +1497,7 @@
"@octokit/rest": "^17.11.2",
"@parcel/watcher": "^2.1.0",
"@playwright/test": "=1.46.0",
- "@redocly/cli": "^1.25.7",
+ "@redocly/cli": "^1.25.8",
"@statoscope/webpack-plugin": "^5.28.2",
"@storybook/addon-a11y": "^6.5.16",
"@storybook/addon-actions": "^6.5.16",
diff --git a/yarn.lock b/yarn.lock
index cbd5dd93a43fd..b45ae5029381d 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -8481,7 +8481,7 @@
require-from-string "^2.0.2"
uri-js-replace "^1.0.1"
-"@redocly/cli@^1.25.7":
+"@redocly/cli@^1.25.8":
version "1.25.8"
resolved "https://registry.yarnpkg.com/@redocly/cli/-/cli-1.25.8.tgz#fecd62d9ee1d564e6f0e1522f2c5648f514ce02b"
integrity sha512-oVFN3rpGFqupx57ZS0mF2B8grnk3i0xjTQrrMm1oftF3GEf7yTg5JzwnWi8KKRWuxin4qI7j+Id5AKgNQNmTKA==
From d312358b4b84838596327c531642d8bdbc6b73b9 Mon Sep 17 00:00:00 2001
From: "elastic-renovate-prod[bot]"
<174716857+elastic-renovate-prod[bot]@users.noreply.github.com>
Date: Tue, 5 Nov 2024 07:55:02 -0600
Subject: [PATCH 060/101] Update dependency elastic-apm-node to ^4.8.1 (main)
(#198847)
Co-authored-by: elastic-renovate-prod[bot] <174716857+elastic-renovate-prod[bot]@users.noreply.github.com>
---
package.json | 2 +-
yarn.lock | 8 ++++----
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/package.json b/package.json
index 3c9b1ce349e72..bcfd46a89ded2 100644
--- a/package.json
+++ b/package.json
@@ -1111,7 +1111,7 @@
"del": "^6.1.0",
"diff": "^5.1.0",
"dotenv": "^16.4.5",
- "elastic-apm-node": "^4.8.0",
+ "elastic-apm-node": "^4.8.1",
"email-addresses": "^5.0.0",
"eventsource-parser": "^1.1.1",
"execa": "^5.1.1",
diff --git a/yarn.lock b/yarn.lock
index b45ae5029381d..91ce62a67d991 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -16693,10 +16693,10 @@ elastic-apm-node@3.46.0:
traverse "^0.6.6"
unicode-byte-truncate "^1.0.0"
-elastic-apm-node@^4.8.0:
- version "4.8.0"
- resolved "https://registry.yarnpkg.com/elastic-apm-node/-/elastic-apm-node-4.8.0.tgz#10d17c3bbd127b8bab9cb264750936a81b4339ad"
- integrity sha512-XEfkWWQlIyv72QTCgScFzXWYM2znm/mA+6I8e2DMmr3lBdwemOTxBZw9jExu4OQ2uMc+Ld8wc5bbikkAYp4nng==
+elastic-apm-node@^4.8.1:
+ version "4.8.1"
+ resolved "https://registry.yarnpkg.com/elastic-apm-node/-/elastic-apm-node-4.8.1.tgz#b0ff8e04d7109c64b98608de73936c8740849f60"
+ integrity sha512-gryl5pJWd9Cp7qK+McHIFm9VlsqKipoXWIsKOGyPGzrddIVKKA8ONnLBwymQ1A2x4uXuk1HnIVwBvyk56vukaw==
dependencies:
"@elastic/ecs-pino-format" "^1.5.0"
"@opentelemetry/api" "^1.4.1"
From 83026f485cac79f93375e34310f633faa141fe9b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Loix?=
Date: Tue, 5 Nov 2024 13:55:44 +0000
Subject: [PATCH 061/101] [Spaces solution tour] Fix functional test (#198928)
---
.../solution_view_flag_enabled/solution_tour.ts | 16 +++++++++++++++-
1 file changed, 15 insertions(+), 1 deletion(-)
diff --git a/x-pack/test/functional/apps/spaces/solution_view_flag_enabled/solution_tour.ts b/x-pack/test/functional/apps/spaces/solution_view_flag_enabled/solution_tour.ts
index 7b058aa36ba92..ac8281f45a56e 100644
--- a/x-pack/test/functional/apps/spaces/solution_view_flag_enabled/solution_tour.ts
+++ b/x-pack/test/functional/apps/spaces/solution_view_flag_enabled/solution_tour.ts
@@ -17,10 +17,20 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
const browser = getService('browser');
const es = getService('es');
const log = getService('log');
+ const retry = getService('retry');
describe('space solution tour', () => {
let version: string | undefined;
+ const getGlobalSettings = async () => {
+ const doc = await es.get(
+ { id: `config-global:${version}`, index: '.kibana' },
+ { headers: { 'kbn-xsrf': 'spaces' }, ignore: [404] }
+ );
+ const value = (doc?._source as any)?.['config-global'] || null;
+ return value;
+ };
+
const removeGlobalSettings = async () => {
version = version ?? (await kibanaServer.version.get());
version = version.replace(/-SNAPSHOT$/, '');
@@ -37,7 +47,10 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
throw error;
});
- await PageObjects.common.sleep(500); // just to be on the safe side
+ await retry.tryForTime(3000, async () => {
+ const value = await getGlobalSettings();
+ return value === null;
+ });
};
before(async () => {
@@ -66,6 +79,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
before(async () => {
_defaultSpace = await spacesService.get('default');
+ await removeGlobalSettings(); // Make sure we start from a clean state
await PageObjects.common.navigateToUrl('management', 'kibana/spaces', {
shouldUseHashForSubUrl: false,
From 3a26b5fd202d2fb2bcf39222a34986bfa9a98ada Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Alejandro=20Fern=C3=A1ndez=20Haro?=
Date: Tue, 5 Nov 2024 15:36:31 +0100
Subject: [PATCH 062/101] Assign SavedObjects Plugin to SharedUX (#198933)
---
.github/CODEOWNERS | 2 +-
src/plugins/saved_objects/kibana.jsonc | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 086c31140dad4..1aa57cc822b23 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -754,7 +754,7 @@ src/plugins/saved_objects_finder @elastic/kibana-data-discovery
test/plugin_functional/plugins/saved_objects_hidden_from_http_apis_type @elastic/kibana-core
test/plugin_functional/plugins/saved_objects_hidden_type @elastic/kibana-core
src/plugins/saved_objects_management @elastic/kibana-core
-src/plugins/saved_objects @elastic/kibana-core
+src/plugins/saved_objects @elastic/appex-sharedux
packages/kbn-saved-objects-settings @elastic/appex-sharedux
src/plugins/saved_objects_tagging_oss @elastic/appex-sharedux
x-pack/plugins/saved_objects_tagging @elastic/appex-sharedux
diff --git a/src/plugins/saved_objects/kibana.jsonc b/src/plugins/saved_objects/kibana.jsonc
index 86aa1ab920725..d73cacdd8068c 100644
--- a/src/plugins/saved_objects/kibana.jsonc
+++ b/src/plugins/saved_objects/kibana.jsonc
@@ -2,7 +2,7 @@
"type": "plugin",
"id": "@kbn/saved-objects-plugin",
"owner": [
- "@elastic/kibana-core"
+ "@elastic/appex-sharedux"
],
"group": "platform",
"visibility": "shared",
@@ -15,4 +15,4 @@
"dataViews"
]
}
-}
\ No newline at end of file
+}
From 56c0806af5a7f20903e92bfe88dc227e93ca2858 Mon Sep 17 00:00:00 2001
From: Sid
Date: Tue, 5 Nov 2024 15:40:53 +0100
Subject: [PATCH 063/101] [ESO] Add flag to allow ESO consumers to opt-out of
highly random UIDs (#198287)
Closes https://github.com/elastic/kibana/issues/194692
## Summary
Allow consumers of ESOs to explicitly opt out of the strict highly
random UID requirements while registering the ESO type
### Description
The `getValidId` method was updated to allow consumers of Encrypted
Saved Objects to explicitly opt-out of the enforced random ID
requirement.
This change is added during ESO registration - consumers can now pass a
new field to opt-out of random UIDs.
Additional changes
- Updated canSpecifyID logic:
- The canSpecifyID condition now also checks if enforceRandomId is
explicitly set to false.
This opt-out approach allows specific ESOs to bypass the random ID
enforcement without affecting the default behavior, keeping it secure by
default.
During the registration phase of the saved object, consumers can now
specify if they'd like to opt-out of the random ID
```
savedObjects.registerType({
name: TYPE_WITH_PREDICTABLE_ID,
//...
});
encryptedSavedObjects.registerType({
type: TYPE_WITH_PREDICTABLE_ID,
//...
enforceRandomId: false,
});
```
### Release notes
Improves Encrypted Saved Objects (ESO) ID validation by adding an
enforceRandomId parameter, allowing consumers to opt out of the default
random ID requirement for specific use cases.
### Checklist
- [x]
[Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html)
was added for features that require explanation or tutorials
- [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
### For maintainers
- [ ] This was checked for breaking API changes and was [labeled
appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#_add_your_labels)
- [ ] This will appear in the **Release Notes** and follow the
[guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process)
---------
Co-authored-by: Elastic Machine
Co-authored-by: Jeramy Soucy
---
.../src/lib/apis/helpers/common.ts | 12 +-
.../repository.encryption_extension.test.ts | 40 ++++++
.../mocks/saved_objects_extensions.mock.ts | 1 +
.../src/saved_objects_extensions.mock.ts | 1 +
.../src/extensions/encryption.ts | 8 ++
.../encrypted_saved_object_type_definition.ts | 3 +
.../encrypted_saved_objects_service.test.ts | 21 +++
.../crypto/encrypted_saved_objects_service.ts | 11 ++
.../saved_objects_encryption_extension.ts | 4 +
.../api_consumer_plugin/server/index.ts | 26 ++++
.../tests/encrypted_saved_objects_api.ts | 126 ++++++++++++++++++
11 files changed, 249 insertions(+), 4 deletions(-)
diff --git a/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/apis/helpers/common.ts b/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/apis/helpers/common.ts
index 27bd0918b0f9b..870f6833b4edc 100644
--- a/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/apis/helpers/common.ts
+++ b/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/apis/helpers/common.ts
@@ -105,10 +105,14 @@ export class CommonHelper {
if (!id) {
return SavedObjectsUtils.generateId();
}
- // only allow a specified ID if we're overwriting an existing ESO with a Version
- // this helps us ensure that the document really was previously created using ESO
- // and not being used to get around the specified ID limitation
- const canSpecifyID = (overwrite && version) || SavedObjectsUtils.isRandomId(id);
+
+ const shouldEnforceRandomId = this.encryptionExtension?.shouldEnforceRandomId(type);
+
+ // Allow specified ID if:
+ // 1. we're overwriting an existing ESO with a Version (this helps us ensure that the document really was previously created using ESO)
+ // 2. enforceRandomId is explicitly set to false
+ const canSpecifyID =
+ !shouldEnforceRandomId || (overwrite && version) || SavedObjectsUtils.isRandomId(id);
if (!canSpecifyID) {
throw SavedObjectsErrorHelpers.createBadRequestError(
'Predefined IDs are not allowed for saved objects with encrypted attributes unless the ID is a UUID.'
diff --git a/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/repository.encryption_extension.test.ts b/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/repository.encryption_extension.test.ts
index f5c8c8518a58a..cf66621565577 100644
--- a/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/repository.encryption_extension.test.ts
+++ b/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/repository.encryption_extension.test.ts
@@ -261,6 +261,7 @@ describe('SavedObjectsRepository Encryption Extension', () => {
it(`fails if non-UUID ID is specified for encrypted type`, async () => {
mockEncryptionExt.isEncryptableType.mockReturnValue(true);
+ mockEncryptionExt.shouldEnforceRandomId.mockReturnValue(true);
mockEncryptionExt.decryptOrStripResponseAttributes.mockResolvedValue({
...encryptedSO,
...decryptedStrippedAttributes,
@@ -291,6 +292,25 @@ describe('SavedObjectsRepository Encryption Extension', () => {
).resolves.not.toThrowError();
});
+ it('allows to opt-out of random ID enforcement', async () => {
+ mockEncryptionExt.isEncryptableType.mockReturnValue(true);
+ mockEncryptionExt.shouldEnforceRandomId.mockReturnValue(false);
+ mockEncryptionExt.decryptOrStripResponseAttributes.mockResolvedValue({
+ ...encryptedSO,
+ ...decryptedStrippedAttributes,
+ });
+
+ const result = await repository.create(encryptedSO.type, encryptedSO.attributes, {
+ id: encryptedSO.id,
+ version: mockVersion,
+ });
+
+ expect(client.create).toHaveBeenCalled();
+ expect(mockEncryptionExt.isEncryptableType).toHaveBeenCalledWith(encryptedSO.type);
+ expect(mockEncryptionExt.shouldEnforceRandomId).toHaveBeenCalledWith(encryptedSO.type);
+ expect(result.id).toBe(encryptedSO.id);
+ });
+
describe('namespace', () => {
const doTest = async (optNamespace: string, expectNamespaceInDescriptor: boolean) => {
const options = { overwrite: true, namespace: optNamespace };
@@ -483,6 +503,7 @@ describe('SavedObjectsRepository Encryption Extension', () => {
it(`fails if non-UUID ID is specified for encrypted type`, async () => {
mockEncryptionExt.isEncryptableType.mockReturnValue(true);
+ mockEncryptionExt.shouldEnforceRandomId.mockReturnValue(true);
const result = await bulkCreateSuccess(client, repository, [
encryptedSO, // Predefined IDs are not allowed for saved objects with encrypted attributes unless the ID is a UUID
]);
@@ -529,6 +550,25 @@ describe('SavedObjectsRepository Encryption Extension', () => {
expect(result.saved_objects.length).toBe(1);
expect(result.saved_objects[0].error).toBeUndefined();
});
+
+ it('allows to opt-out of random ID enforcement', async () => {
+ mockEncryptionExt.isEncryptableType.mockReturnValue(true);
+ mockEncryptionExt.shouldEnforceRandomId.mockReturnValue(false);
+ mockEncryptionExt.decryptOrStripResponseAttributes.mockResolvedValue({
+ ...encryptedSO,
+ ...decryptedStrippedAttributes,
+ });
+
+ const result = await bulkCreateSuccess(client, repository, [
+ { ...encryptedSO, version: mockVersion },
+ ]);
+
+ expect(client.bulk).toHaveBeenCalled();
+ expect(result.saved_objects).not.toBeUndefined();
+ expect(result.saved_objects.length).toBe(1);
+ expect(result.saved_objects[0].error).toBeUndefined();
+ expect(result.saved_objects[0].id).toBe(encryptedSO.id);
+ });
});
describe('#bulkUpdate', () => {
diff --git a/packages/core/saved-objects/core-saved-objects-api-server-internal/src/mocks/saved_objects_extensions.mock.ts b/packages/core/saved-objects/core-saved-objects-api-server-internal/src/mocks/saved_objects_extensions.mock.ts
index 2061bb63240b2..9dc7c0f0133c5 100644
--- a/packages/core/saved-objects/core-saved-objects-api-server-internal/src/mocks/saved_objects_extensions.mock.ts
+++ b/packages/core/saved-objects/core-saved-objects-api-server-internal/src/mocks/saved_objects_extensions.mock.ts
@@ -17,6 +17,7 @@ const createEncryptionExtension = (): jest.Mocked => ({
diff --git a/packages/core/saved-objects/core-saved-objects-api-server-mocks/src/saved_objects_extensions.mock.ts b/packages/core/saved-objects/core-saved-objects-api-server-mocks/src/saved_objects_extensions.mock.ts
index 2a2d121b568be..776ecfe3a7385 100644
--- a/packages/core/saved-objects/core-saved-objects-api-server-mocks/src/saved_objects_extensions.mock.ts
+++ b/packages/core/saved-objects/core-saved-objects-api-server-mocks/src/saved_objects_extensions.mock.ts
@@ -18,6 +18,7 @@ const createEncryptionExtension = (): jest.Mocked => ({
diff --git a/packages/core/saved-objects/core-saved-objects-server/src/extensions/encryption.ts b/packages/core/saved-objects/core-saved-objects-server/src/extensions/encryption.ts
index 3fdb29203fe13..4560ab5672666 100644
--- a/packages/core/saved-objects/core-saved-objects-server/src/extensions/encryption.ts
+++ b/packages/core/saved-objects/core-saved-objects-server/src/extensions/encryption.ts
@@ -39,6 +39,14 @@ export interface ISavedObjectsEncryptionExtension {
*/
isEncryptableType: (type: string) => boolean;
+ /**
+ * Returns false if ESO type explicitly opts out of highly random UID
+ *
+ * @param type the string name of the object type
+ * @returns boolean, true by default unless explicitly set to false
+ */
+ shouldEnforceRandomId: (type: string) => boolean;
+
/**
* Given a saved object, will return a decrypted saved object or will strip
* attributes from the returned object if decryption fails.
diff --git a/x-pack/plugins/encrypted_saved_objects/server/crypto/encrypted_saved_object_type_definition.ts b/x-pack/plugins/encrypted_saved_objects/server/crypto/encrypted_saved_object_type_definition.ts
index d8ce2daa6efbe..bb07842e2bab5 100644
--- a/x-pack/plugins/encrypted_saved_objects/server/crypto/encrypted_saved_object_type_definition.ts
+++ b/x-pack/plugins/encrypted_saved_objects/server/crypto/encrypted_saved_object_type_definition.ts
@@ -16,6 +16,7 @@ export class EncryptedSavedObjectAttributesDefinition {
public readonly attributesToEncrypt: ReadonlySet;
private readonly attributesToIncludeInAAD: ReadonlySet | undefined;
private readonly attributesToStrip: ReadonlySet;
+ public readonly enforceRandomId: boolean;
constructor(typeRegistration: EncryptedSavedObjectTypeRegistration) {
if (typeRegistration.attributesToIncludeInAAD) {
@@ -49,6 +50,8 @@ export class EncryptedSavedObjectAttributesDefinition {
}
}
+ this.enforceRandomId = typeRegistration.enforceRandomId !== false;
+
this.attributesToEncrypt = attributesToEncrypt;
this.attributesToStrip = attributesToStrip;
this.attributesToIncludeInAAD = typeRegistration.attributesToIncludeInAAD;
diff --git a/x-pack/plugins/encrypted_saved_objects/server/crypto/encrypted_saved_objects_service.test.ts b/x-pack/plugins/encrypted_saved_objects/server/crypto/encrypted_saved_objects_service.test.ts
index 1691d3f4c0610..67c972ec5f859 100644
--- a/x-pack/plugins/encrypted_saved_objects/server/crypto/encrypted_saved_objects_service.test.ts
+++ b/x-pack/plugins/encrypted_saved_objects/server/crypto/encrypted_saved_objects_service.test.ts
@@ -2405,3 +2405,24 @@ describe('#decryptAttributesSync', () => {
});
});
});
+
+describe('#shouldEnforceRandomId', () => {
+ it('defaults to true if enforceRandomId is undefined', () => {
+ service.registerType({ type: 'known-type-1', attributesToEncrypt: new Set(['attr']) });
+ expect(service.shouldEnforceRandomId('known-type-1')).toBe(true);
+ });
+ it('should return the value of enforceRandomId if it is defined', () => {
+ service.registerType({
+ type: 'known-type-1',
+ attributesToEncrypt: new Set(['attr']),
+ enforceRandomId: false,
+ });
+ service.registerType({
+ type: 'known-type-2',
+ attributesToEncrypt: new Set(['attr']),
+ enforceRandomId: true,
+ });
+ expect(service.shouldEnforceRandomId('known-type-1')).toBe(false);
+ expect(service.shouldEnforceRandomId('known-type-2')).toBe(true);
+ });
+});
diff --git a/x-pack/plugins/encrypted_saved_objects/server/crypto/encrypted_saved_objects_service.ts b/x-pack/plugins/encrypted_saved_objects/server/crypto/encrypted_saved_objects_service.ts
index 44072a0828d48..d2c7d9975a9ca 100644
--- a/x-pack/plugins/encrypted_saved_objects/server/crypto/encrypted_saved_objects_service.ts
+++ b/x-pack/plugins/encrypted_saved_objects/server/crypto/encrypted_saved_objects_service.ts
@@ -33,6 +33,7 @@ export interface EncryptedSavedObjectTypeRegistration {
readonly type: string;
readonly attributesToEncrypt: ReadonlySet;
readonly attributesToIncludeInAAD?: ReadonlySet;
+ readonly enforceRandomId?: boolean;
}
/**
@@ -152,6 +153,16 @@ export class EncryptedSavedObjectsService {
return this.typeDefinitions.has(type);
}
+ /**
+ * Checks whether the ESO type has explicitly opted out of enforcing random IDs.
+ * @param type Saved object type.
+ * @returns boolean - true unless explicitly opted out by setting enforceRandomId to false
+ */
+ public shouldEnforceRandomId(type: string) {
+ const typeDefinition = this.typeDefinitions.get(type);
+ return typeDefinition?.enforceRandomId !== false;
+ }
+
/**
* Takes saved object attributes for the specified type and, depending on the type definition,
* either decrypts or strips encrypted attributes (e.g. in case AAD or encryption key has changed
diff --git a/x-pack/plugins/encrypted_saved_objects/server/saved_objects/saved_objects_encryption_extension.ts b/x-pack/plugins/encrypted_saved_objects/server/saved_objects/saved_objects_encryption_extension.ts
index 01c35c7403fdf..45e0f6a46c892 100644
--- a/x-pack/plugins/encrypted_saved_objects/server/saved_objects/saved_objects_encryption_extension.ts
+++ b/x-pack/plugins/encrypted_saved_objects/server/saved_objects/saved_objects_encryption_extension.ts
@@ -40,6 +40,10 @@ export class SavedObjectsEncryptionExtension implements ISavedObjectsEncryptionE
return this._service.isRegistered(type);
}
+ shouldEnforceRandomId(type: string) {
+ return this._service.shouldEnforceRandomId(type);
+ }
+
async decryptOrStripResponseAttributes>(
response: R,
originalAttributes?: T
diff --git a/x-pack/test/encrypted_saved_objects_api_integration/plugins/api_consumer_plugin/server/index.ts b/x-pack/test/encrypted_saved_objects_api_integration/plugins/api_consumer_plugin/server/index.ts
index c7946b2e68131..6944123790157 100644
--- a/x-pack/test/encrypted_saved_objects_api_integration/plugins/api_consumer_plugin/server/index.ts
+++ b/x-pack/test/encrypted_saved_objects_api_integration/plugins/api_consumer_plugin/server/index.ts
@@ -32,6 +32,8 @@ const SAVED_OBJECT_WITH_MIGRATION_TYPE = 'saved-object-with-migration';
const SAVED_OBJECT_MV_TYPE = 'saved-object-mv';
+const TYPE_WITH_PREDICTABLE_ID = 'type-with-predictable-ids';
+
interface MigratedTypePre790 {
nonEncryptedAttribute: string;
encryptedAttribute: string;
@@ -83,6 +85,30 @@ export const plugin: PluginInitializer =
});
}
+ core.savedObjects.registerType({
+ name: TYPE_WITH_PREDICTABLE_ID,
+ hidden: false,
+ namespaceType: 'single',
+ mappings: deepFreeze({
+ properties: {
+ publicProperty: { type: 'keyword' },
+ publicPropertyExcludedFromAAD: { type: 'keyword' },
+ publicPropertyStoredEncrypted: { type: 'binary' },
+ privateProperty: { type: 'binary' },
+ },
+ }),
+ });
+
+ deps.encryptedSavedObjects.registerType({
+ type: TYPE_WITH_PREDICTABLE_ID,
+ attributesToEncrypt: new Set([
+ 'privateProperty',
+ { key: 'publicPropertyStoredEncrypted', dangerouslyExposeValue: true },
+ ]),
+ attributesToIncludeInAAD: new Set(['publicProperty']),
+ enforceRandomId: false,
+ });
+
core.savedObjects.registerType({
name: SAVED_OBJECT_WITHOUT_SECRET_TYPE,
hidden: false,
diff --git a/x-pack/test/encrypted_saved_objects_api_integration/tests/encrypted_saved_objects_api.ts b/x-pack/test/encrypted_saved_objects_api_integration/tests/encrypted_saved_objects_api.ts
index 4687a01858260..23aa9017e52ea 100644
--- a/x-pack/test/encrypted_saved_objects_api_integration/tests/encrypted_saved_objects_api.ts
+++ b/x-pack/test/encrypted_saved_objects_api_integration/tests/encrypted_saved_objects_api.ts
@@ -26,6 +26,8 @@ export default function ({ getService }: FtrProviderContext) {
'saved-object-with-secret-and-multiple-spaces';
const SAVED_OBJECT_WITHOUT_SECRET_TYPE = 'saved-object-without-secret';
+ const TYPE_WITH_PREDICTABLE_ID = 'type-with-predictable-ids';
+
function runTests(
encryptedSavedObjectType: string,
getURLAPIBaseURL: () => string,
@@ -900,5 +902,129 @@ export default function ({ getService }: FtrProviderContext) {
}
});
});
+
+ describe('enforceRandomId', () => {
+ describe('false', () => {
+ it('#create allows setting non-random ID', async () => {
+ const id = 'my_predictable_id';
+
+ const savedObjectOriginalAttributes = {
+ publicProperty: randomness.string(),
+ publicPropertyStoredEncrypted: randomness.string(),
+ privateProperty: randomness.string(),
+ publicPropertyExcludedFromAAD: randomness.string(),
+ };
+
+ const { body: response } = await supertest
+ .post(`/api/saved_objects/${TYPE_WITH_PREDICTABLE_ID}/${id}`)
+ .set('kbn-xsrf', 'xxx')
+ .send({ attributes: savedObjectOriginalAttributes })
+ .expect(200);
+
+ expect(response.id).to.be(id);
+ });
+
+ it('#bulkCreate not enforcing random ID allows to specify ID', async () => {
+ const bulkCreateParams = [
+ {
+ type: TYPE_WITH_PREDICTABLE_ID,
+ id: 'my_predictable_id',
+ attributes: {
+ publicProperty: randomness.string(),
+ publicPropertyExcludedFromAAD: randomness.string(),
+ publicPropertyStoredEncrypted: randomness.string(),
+ privateProperty: randomness.string(),
+ },
+ },
+ {
+ type: TYPE_WITH_PREDICTABLE_ID,
+ id: 'my_predictable_id_2',
+ attributes: {
+ publicProperty: randomness.string(),
+ publicPropertyExcludedFromAAD: randomness.string(),
+ publicPropertyStoredEncrypted: randomness.string(),
+ privateProperty: randomness.string(),
+ },
+ },
+ ];
+
+ const {
+ body: { saved_objects: savedObjects },
+ } = await supertest
+ .post('/api/saved_objects/_bulk_create')
+ .set('kbn-xsrf', 'xxx')
+ .send(bulkCreateParams)
+ .expect(200);
+
+ expect(savedObjects).to.have.length(bulkCreateParams.length);
+ expect(savedObjects[0].id).to.be('my_predictable_id');
+ expect(savedObjects[1].id).to.be('my_predictable_id_2');
+ });
+ });
+
+ describe('true or undefined', () => {
+ it('#create setting a predictable id on ESO types that have not opted out throws an error', async () => {
+ const id = 'my_predictable_id';
+
+ const savedObjectOriginalAttributes = {
+ publicProperty: randomness.string(),
+ publicPropertyStoredEncrypted: randomness.string(),
+ privateProperty: randomness.string(),
+ publicPropertyExcludedFromAAD: randomness.string(),
+ };
+
+ const { body: response } = await supertest
+ .post(`/api/saved_objects/saved-object-with-secret/${id}`)
+ .set('kbn-xsrf', 'xxx')
+ .send({ attributes: savedObjectOriginalAttributes })
+ .expect(400);
+
+ expect(response.message).to.contain(
+ 'Predefined IDs are not allowed for saved objects with encrypted attributes unless the ID is a UUID.'
+ );
+ });
+
+ it('#bulkCreate setting random ID on ESO types that have not opted out throws an error', async () => {
+ const bulkCreateParams = [
+ {
+ type: SAVED_OBJECT_WITH_SECRET_TYPE,
+ id: 'my_predictable_id',
+ attributes: {
+ publicProperty: randomness.string(),
+ publicPropertyExcludedFromAAD: randomness.string(),
+ publicPropertyStoredEncrypted: randomness.string(),
+ privateProperty: randomness.string(),
+ },
+ },
+ {
+ type: SAVED_OBJECT_WITH_SECRET_TYPE,
+ id: 'my_predictable_id_2',
+ attributes: {
+ publicProperty: randomness.string(),
+ publicPropertyExcludedFromAAD: randomness.string(),
+ publicPropertyStoredEncrypted: randomness.string(),
+ privateProperty: randomness.string(),
+ },
+ },
+ ];
+
+ const {
+ body: { saved_objects: savedObjects },
+ } = await supertest
+ .post('/api/saved_objects/_bulk_create')
+ .set('kbn-xsrf', 'xxx')
+ .send(bulkCreateParams)
+ .expect(200);
+
+ expect(savedObjects).to.have.length(bulkCreateParams.length);
+
+ savedObjects.forEach((savedObject: any) => {
+ expect(savedObject.error.message).to.contain(
+ 'Predefined IDs are not allowed for saved objects with encrypted attributes unless the ID is a UUID.'
+ );
+ });
+ });
+ });
+ });
});
}
From 6b77e05586524892dc42c34d0b5b2a561cebc0ae Mon Sep 17 00:00:00 2001
From: Walter Rafelsberger
Date: Tue, 5 Nov 2024 15:48:45 +0100
Subject: [PATCH 064/101] [ML] AIOps: Log Rate Analysis embeddable (#197943)
## Summary
Follow up to #192167 (rebase/push gone wrong)
- [x] Let's users create a Log Rate Analysis panel using the "Add Panel"
button when editing dashboards.
- [x] Retains functionality of links in results table to Discover and
Pattern Analysis.
[41b4337](https://github.com/elastic/kibana/pull/192167/commits/41b4337f9ac15103c6b151c94cfb6b7f944aeb89)
- [x] Create `Logs AIOps` section in Add Panel menu.
- [x] Brushes not working with multiple panels fixed in
[75ca4ca](https://github.com/elastic/kibana/pull/192167/commits/75ca4cac37abda94ae7fb9d5132283e1def0b85e).
The reason was the `DualBrush` component used hard coded html ids.
- [x] Panel now updates when data view is changed in options flyout,
fixed in
[2b58567](https://github.com/elastic/kibana/pull/192167/commits/2b5856777151d3ccc5e882c895704008e575aaff).
- [x] When the user selects a data view without time field, we now show
the same warning as used for pattern analysis and the apply button gets
disabled, fixed in
[a01975d](https://github.com/elastic/kibana/pull/192167/commits/a01975dba7b5218ea0f094ebc5cb74cd8670131a).
- [x] Pass on and use global search/filters to embeddable.
[2c24dbd](https://github.com/elastic/kibana/pull/192167/commits/2c24dbd116ef4ae19ff58796b2c5fc4f61a86234)
- [x] Moving labels
[26cd1a5](https://github.com/elastic/kibana/pull/192167/commits/26cd1a53dfbbea34094cd840eb885a78f29d8de6)
- [x] No results after time range update
[632b711](https://github.com/elastic/kibana/pull/192167/commits/632b711ca1de77d113192649f56c5b18ae453f86)
### Checklist
Delete any items that are not applicable to this PR.
- [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] This was checked for breaking API changes and was [labeled
appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process)
---
.../app/pages/page_redux_stream/hooks.ts | 5 +-
x-pack/.i18nrc.json | 1 +
x-pack/packages/ml/aiops_common/constants.ts | 13 +
x-pack/packages/ml/aiops_common/tsconfig.json | 1 +
.../document_count_chart.tsx | 7 +-
.../src/dual_brush/dual_brush.tsx | 15 +-
.../progress_controls/progress_controls.tsx | 49 ++--
.../ml/aiops_log_rate_analysis/constants.ts | 6 +
.../ml/aiops_log_rate_analysis/state/hooks.ts | 5 +-
.../ml/aiops_log_rate_analysis/state/index.ts | 6 +-
...te_analysis_field_candidates_slice.test.ts | 13 +-
...og_rate_analysis_field_candidates_slice.ts | 31 ++-
.../state/log_rate_analysis_slice.ts | 6 +
.../log_rate_analysis_table_row_slice.ts | 72 ------
.../log_rate_analysis_table_slice.test.ts | 130 ++++++++++
.../state/log_rate_analysis_table_slice.ts | 172 +++++++++++++
.../aiops_log_rate_analysis/state/store.tsx | 21 +-
.../state/use_current_selected_group.ts | 4 +-
.../use_current_selected_significant_item.ts | 5 +-
.../field_stats_flyout_provider.tsx | 24 +-
.../field_stats_info_button.tsx | 16 +-
.../ml/field_stats_flyout/tsconfig.json | 3 +-
.../use_field_stats_flyout_context.ts | 25 +-
.../use_field_stats_trigger.tsx | 2 +
.../change_point_detection/fields_config.tsx | 3 +-
.../document_count_content.tsx | 17 +-
.../log_rate_analysis_content.tsx | 18 +-
.../log_rate_analysis_for_embeddable.tsx | 65 +++++
.../log_rate_analysis_options.tsx | 190 ++++++++++++++
.../log_rate_analysis_results.tsx | 237 +++++-------------
.../log_rate_analysis_results_table/index.ts | 1 -
.../log_rate_analysis_results_table.tsx | 10 +-
...log_rate_analysis_results_table_groups.tsx | 4 +-
.../use_columns.tsx | 74 ++----
.../use_view_in_discover_action.tsx | 4 +-
...se_view_in_log_pattern_analysis_action.tsx | 2 +-
.../public/components/time_field_warning.tsx | 32 +++
.../change_point_chart_initializer.tsx | 76 +++++-
.../embeddable_change_point_chart_factory.tsx | 41 +--
.../embeddables/change_point_chart/types.ts | 8 -
.../plugins/aiops/public/embeddables/index.ts | 5 +
.../embeddable_log_rate_analysis_factory.tsx | 211 ++++++++++++++++
.../embeddables/log_rate_analysis/index.ts | 8 +
...ize_log_rate_analysis_analysis_controls.ts | 43 ++++
...g_rate_analysis_embeddable_initializer.tsx | 230 +++++++++++++++++
...resolve_log_rate_analysis_config_input.tsx | 94 +++++++
.../embeddables/log_rate_analysis/types.ts | 39 +++
.../embeddable_pattern_analysis_factory.tsx | 45 +---
...=> pattern_analysis_component_wrapper.tsx} | 0
.../pattern_analysis_initializer.tsx | 32 +--
.../embeddables/pattern_analysis/types.ts | 6 -
.../public/hooks/use_aiops_app_context.ts | 27 +-
.../aiops/public/hooks/use_data_source.tsx | 11 +-
.../change_point_detection.tsx | 56 ++---
.../aiops/public/shared_components/index.tsx | 22 ++
.../log_rate_analysis_embeddable_wrapper.tsx | 179 +++++++++++++
.../shared_components/pattern_analysis.tsx | 54 ++--
x-pack/plugins/aiops/public/types/storage.ts | 5 -
.../ui_actions/create_change_point_chart.tsx | 2 +
.../create_log_rate_analysis_actions.tsx | 91 +++++++
.../create_pattern_analysis_action.tsx | 16 +-
.../plugins/aiops/public/ui_actions/index.ts | 4 +
.../log_rate_analysis_action_context.ts | 24 ++
x-pack/plugins/aiops/tsconfig.json | 3 +-
.../configuration_step_form.tsx | 1 +
.../new_job/pages/new_job/wizard_steps.tsx | 1 +
.../components/wizard/wizard.tsx | 3 +-
.../translations/translations/fr-FR.json | 1 -
.../translations/translations/ja-JP.json | 1 -
.../translations/translations/zh-CN.json | 1 -
x-pack/test/functional/apps/aiops/index.ts | 1 +
.../log_rate_analysis_dashboard_embeddable.ts | 104 ++++++++
.../services/aiops/dashboard_embeddables.ts | 110 ++++++++
.../test/functional/services/aiops/index.ts | 3 +
.../services/aiops/log_rate_analysis_page.ts | 16 ++
75 files changed, 2202 insertions(+), 661 deletions(-)
delete mode 100644 x-pack/packages/ml/aiops_log_rate_analysis/state/log_rate_analysis_table_row_slice.ts
create mode 100644 x-pack/packages/ml/aiops_log_rate_analysis/state/log_rate_analysis_table_slice.test.ts
create mode 100644 x-pack/packages/ml/aiops_log_rate_analysis/state/log_rate_analysis_table_slice.ts
create mode 100644 x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_for_embeddable.tsx
create mode 100644 x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_options.tsx
create mode 100644 x-pack/plugins/aiops/public/components/time_field_warning.tsx
create mode 100644 x-pack/plugins/aiops/public/embeddables/log_rate_analysis/embeddable_log_rate_analysis_factory.tsx
create mode 100644 x-pack/plugins/aiops/public/embeddables/log_rate_analysis/index.ts
create mode 100644 x-pack/plugins/aiops/public/embeddables/log_rate_analysis/initialize_log_rate_analysis_analysis_controls.ts
create mode 100644 x-pack/plugins/aiops/public/embeddables/log_rate_analysis/log_rate_analysis_embeddable_initializer.tsx
create mode 100644 x-pack/plugins/aiops/public/embeddables/log_rate_analysis/resolve_log_rate_analysis_config_input.tsx
create mode 100644 x-pack/plugins/aiops/public/embeddables/log_rate_analysis/types.ts
rename x-pack/plugins/aiops/public/embeddables/pattern_analysis/{pattern_analysys_component_wrapper.tsx => pattern_analysis_component_wrapper.tsx} (100%)
create mode 100644 x-pack/plugins/aiops/public/shared_components/log_rate_analysis_embeddable_wrapper.tsx
create mode 100644 x-pack/plugins/aiops/public/ui_actions/create_log_rate_analysis_actions.tsx
create mode 100644 x-pack/plugins/aiops/public/ui_actions/log_rate_analysis_action_context.ts
create mode 100644 x-pack/test/functional/apps/aiops/log_rate_analysis_dashboard_embeddable.ts
create mode 100644 x-pack/test/functional/services/aiops/dashboard_embeddables.ts
diff --git a/examples/response_stream/public/containers/app/pages/page_redux_stream/hooks.ts b/examples/response_stream/public/containers/app/pages/page_redux_stream/hooks.ts
index f1c8c671611a8..735e70916593f 100644
--- a/examples/response_stream/public/containers/app/pages/page_redux_stream/hooks.ts
+++ b/examples/response_stream/public/containers/app/pages/page_redux_stream/hooks.ts
@@ -8,10 +8,9 @@
*/
import type { TypedUseSelectorHook } from 'react-redux';
-import { useDispatch, useSelector, useStore } from 'react-redux';
-import type { AppDispatch, AppStore, RootState } from './store';
+import { useDispatch, useSelector } from 'react-redux';
+import type { AppDispatch, RootState } from './store';
// Use throughout your app instead of plain `useDispatch` and `useSelector`
export const useAppDispatch: () => AppDispatch = useDispatch;
export const useAppSelector: TypedUseSelectorHook = useSelector;
-export const useAppStore: () => AppStore = useStore;
diff --git a/x-pack/.i18nrc.json b/x-pack/.i18nrc.json
index 7afbc9dc704c4..e1e8478aa0517 100644
--- a/x-pack/.i18nrc.json
+++ b/x-pack/.i18nrc.json
@@ -3,6 +3,7 @@
"paths": {
"xpack.actions": "plugins/actions",
"xpack.aiops": [
+ "packages/ml/aiops_common",
"packages/ml/aiops_components",
"packages/ml/aiops_log_pattern_analysis",
"packages/ml/aiops_log_rate_analysis",
diff --git a/x-pack/packages/ml/aiops_common/constants.ts b/x-pack/packages/ml/aiops_common/constants.ts
index 39a0fdc5842c8..1a75e929c147a 100644
--- a/x-pack/packages/ml/aiops_common/constants.ts
+++ b/x-pack/packages/ml/aiops_common/constants.ts
@@ -5,6 +5,8 @@
* 2.0.
*/
+import { i18n } from '@kbn/i18n';
+
/**
* AIOPS_PLUGIN_ID is used as a unique identifier for the aiops plugin
*/
@@ -28,3 +30,14 @@ export const AIOPS_EMBEDDABLE_ORIGIN = {
DISCOVER: 'discover',
ML_AIOPS_LABS: 'ml_aiops_labs',
} as const;
+
+export const AIOPS_EMBEDDABLE_GROUPING = [
+ {
+ id: 'logs-aiops',
+ getDisplayName: () =>
+ i18n.translate('xpack.aiops.embedabble.groupingDisplayName', {
+ defaultMessage: 'Logs AIOps',
+ }),
+ getIconType: () => 'machineLearningApp',
+ },
+];
diff --git a/x-pack/packages/ml/aiops_common/tsconfig.json b/x-pack/packages/ml/aiops_common/tsconfig.json
index 806b5b07e847e..ffd8c074a421d 100644
--- a/x-pack/packages/ml/aiops_common/tsconfig.json
+++ b/x-pack/packages/ml/aiops_common/tsconfig.json
@@ -15,6 +15,7 @@
],
"kbn_references": [
"@kbn/ml-is-populated-object",
+ "@kbn/i18n",
],
"exclude": [
"target/**/*",
diff --git a/x-pack/packages/ml/aiops_components/src/document_count_chart/document_count_chart.tsx b/x-pack/packages/ml/aiops_components/src/document_count_chart/document_count_chart.tsx
index 39291762b8fca..d9f68fe7ef890 100644
--- a/x-pack/packages/ml/aiops_components/src/document_count_chart/document_count_chart.tsx
+++ b/x-pack/packages/ml/aiops_components/src/document_count_chart/document_count_chart.tsx
@@ -426,7 +426,12 @@ export const DocumentCountChart: FC