ja3
@@ -2626,7 +2568,7 @@ tr:hover .c5:focus::before {
class="euiBadge__text emotion-euiBadge__text"
>
client cert
@@ -2721,7 +2663,7 @@ tr:hover .c5:focus::before {
class="euiBadge__text emotion-euiBadge__text"
>
server cert
diff --git a/x-pack/solutions/security/plugins/security_solution/tsconfig.json b/x-pack/solutions/security/plugins/security_solution/tsconfig.json
index 41a197b81dd71..9fa2d71e925fd 100644
--- a/x-pack/solutions/security/plugins/security_solution/tsconfig.json
+++ b/x-pack/solutions/security/plugins/security_solution/tsconfig.json
@@ -13,7 +13,8 @@
"server/**/*.json",
"scripts/**/*.json",
"public/**/*.json",
- "../../../../../typings/**/*"
+ "../../../../../typings/**/*",
+ "emotion.d.ts"
],
"exclude": ["target/**/*", "**/cypress/**", "public/management/cypress.config.ts"],
"kbn_references": [
From 13dddd96e0904f8010ed2d53c6067664aac94e45 Mon Sep 17 00:00:00 2001
From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
Date: Wed, 12 Feb 2025 19:45:41 +1100
Subject: [PATCH 03/11] [8.18] [Session Index] Attach alias to index when index
name changes (#210176) (#210738)
# Backport
This will backport the following commits from `main` to `8.18`:
- [[Session Index] Attach alias to index when index name changes
(#210176)](https://github.com/elastic/kibana/pull/210176)
### Questions ?
Please refer to the [Backport tool
documentation](https://github.com/sqren/backport)
Co-authored-by: Sid
---
.../session_management/session_index.test.ts | 77 +++++++++----------
.../session_management/session_index.ts | 18 +++--
2 files changed, 48 insertions(+), 47 deletions(-)
diff --git a/x-pack/platform/plugins/shared/security/server/session_management/session_index.test.ts b/x-pack/platform/plugins/shared/security/server/session_management/session_index.test.ts
index eada023870a2a..74bebb961cfbe 100644
--- a/x-pack/platform/plugins/shared/security/server/session_management/session_index.test.ts
+++ b/x-pack/platform/plugins/shared/security/server/session_management/session_index.test.ts
@@ -96,10 +96,6 @@ describe('Session index', () => {
expect(mockElasticsearchClient.indices.deleteTemplate).not.toHaveBeenCalled();
expect(mockElasticsearchClient.indices.putIndexTemplate).not.toHaveBeenCalled();
- expect(mockElasticsearchClient.indices.putAlias).toHaveBeenCalledWith({
- index: indexName,
- name: aliasName,
- });
expect(mockElasticsearchClient.indices.create).not.toHaveBeenCalled();
});
@@ -114,13 +110,10 @@ describe('Session index', () => {
expect(mockElasticsearchClient.indices.exists).toHaveBeenCalledWith({ index: aliasName });
expect(mockElasticsearchClient.indices.exists).toHaveBeenCalledTimes(1);
+ expect(mockElasticsearchClient.indices.putAlias).not.toHaveBeenCalled();
expect(mockElasticsearchClient.indices.deleteTemplate).not.toHaveBeenCalled();
expect(mockElasticsearchClient.indices.putIndexTemplate).not.toHaveBeenCalled();
- expect(mockElasticsearchClient.indices.putAlias).toHaveBeenCalledWith({
- index: indexName,
- name: aliasName,
- });
expect(mockElasticsearchClient.indices.create).not.toHaveBeenCalled();
});
@@ -139,10 +132,6 @@ describe('Session index', () => {
expect(mockElasticsearchClient.indices.deleteTemplate).not.toHaveBeenCalled();
expect(mockElasticsearchClient.indices.putIndexTemplate).not.toHaveBeenCalled();
- expect(mockElasticsearchClient.indices.putAlias).toHaveBeenCalledWith({
- index: indexName,
- name: aliasName,
- });
expect(mockElasticsearchClient.indices.create).not.toHaveBeenCalled();
});
@@ -156,14 +145,46 @@ describe('Session index', () => {
expect(mockElasticsearchClient.indices.exists).toHaveBeenCalledWith({ index: aliasName });
expect(mockElasticsearchClient.indices.exists).toHaveBeenCalledWith({ index: indexName });
expect(mockElasticsearchClient.indices.exists).toHaveBeenCalledTimes(2);
+ expect(mockElasticsearchClient.indices.putAlias).not.toHaveBeenCalled();
expect(mockElasticsearchClient.indices.deleteTemplate).not.toHaveBeenCalled();
expect(mockElasticsearchClient.indices.putIndexTemplate).not.toHaveBeenCalled();
+
+ expect(mockElasticsearchClient.indices.create).toHaveBeenCalled();
+ });
+
+ it('attaches alias if no alias present', async () => {
+ mockElasticsearchClient.indices.existsTemplate.mockResponse(false);
+ mockElasticsearchClient.indices.existsIndexTemplate.mockResponse(true);
+ mockElasticsearchClient.indices.exists.mockImplementation(
+ async ({ index }) => index === indexName
+ );
+ mockElasticsearchClient.indices.existsAlias.mockResponse(false);
+
+ await sessionIndex.initialize();
+
+ expect(mockElasticsearchClient.indices.existsAlias).toHaveBeenCalledWith({ name: aliasName });
+ expect(mockElasticsearchClient.indices.putAlias).toHaveBeenCalledTimes(1);
expect(mockElasticsearchClient.indices.putAlias).toHaveBeenCalledWith({
index: indexName,
name: aliasName,
});
- expect(mockElasticsearchClient.indices.create).toHaveBeenCalled();
+
+ expect(mockElasticsearchClient.indices.create).not.toHaveBeenCalled();
+ });
+
+ it('does not attach alias if alias present', async () => {
+ mockElasticsearchClient.indices.existsTemplate.mockResponse(false);
+ mockElasticsearchClient.indices.existsIndexTemplate.mockResponse(true);
+ mockElasticsearchClient.indices.exists.mockResponse(true);
+ mockElasticsearchClient.indices.existsAlias.mockResponse(true);
+
+ await sessionIndex.initialize();
+
+ expect(mockElasticsearchClient.indices.existsAlias).toHaveBeenCalledWith({ name: aliasName });
+ expect(mockElasticsearchClient.indices.putAlias).not.toHaveBeenCalled();
+
+ expect(mockElasticsearchClient.indices.create).not.toHaveBeenCalled();
});
it('does not delete legacy index template if the legacy template API is not available (410)', async () => {
@@ -182,7 +203,6 @@ describe('Session index', () => {
expect(mockElasticsearchClient.indices.deleteTemplate).not.toHaveBeenCalled();
expect(mockElasticsearchClient.indices.deleteIndexTemplate).not.toHaveBeenCalled();
- expect(mockElasticsearchClient.indices.putAlias).toHaveBeenCalledTimes(1);
expect(mockElasticsearchClient.indices.getMapping).not.toHaveBeenCalled();
expect(mockElasticsearchClient.indices.putMapping).not.toHaveBeenCalled();
expect(mockElasticsearchClient.indices.create).toHaveBeenCalledWith(
@@ -206,7 +226,6 @@ describe('Session index', () => {
expect(mockElasticsearchClient.indices.deleteTemplate).not.toHaveBeenCalled();
expect(mockElasticsearchClient.indices.deleteIndexTemplate).not.toHaveBeenCalled();
- expect(mockElasticsearchClient.indices.putAlias).toHaveBeenCalledTimes(1);
expect(mockElasticsearchClient.indices.getMapping).not.toHaveBeenCalled();
expect(mockElasticsearchClient.indices.putMapping).not.toHaveBeenCalled();
expect(mockElasticsearchClient.indices.create).toHaveBeenCalledWith(
@@ -228,7 +247,6 @@ describe('Session index', () => {
expect(mockElasticsearchClient.indices.create).toHaveBeenCalledWith(
getSessionIndexSettings({ indexName, aliasName })
);
- expect(mockElasticsearchClient.indices.putAlias).toHaveBeenCalledTimes(1);
});
it('deletes legacy & modern index templates if needed and creates index if it does not exist', async () => {
@@ -248,7 +266,6 @@ describe('Session index', () => {
expect(mockElasticsearchClient.indices.create).toHaveBeenCalledWith(
getSessionIndexSettings({ indexName, aliasName })
);
- expect(mockElasticsearchClient.indices.putAlias).toHaveBeenCalledTimes(1);
});
it('deletes modern index template if needed and creates index if it does not exist', async () => {
@@ -263,7 +280,7 @@ describe('Session index', () => {
expect(mockElasticsearchClient.indices.deleteIndexTemplate).toHaveBeenCalledWith({
name: indexTemplateName,
});
- expect(mockElasticsearchClient.indices.putAlias).toHaveBeenCalledTimes(1);
+
expect(mockElasticsearchClient.indices.create).toHaveBeenCalledWith(
getSessionIndexSettings({ indexName, aliasName })
);
@@ -281,11 +298,6 @@ describe('Session index', () => {
expect(mockElasticsearchClient.indices.deleteTemplate).not.toHaveBeenCalled();
expect(mockElasticsearchClient.indices.deleteIndexTemplate).not.toHaveBeenCalled();
expect(mockElasticsearchClient.indices.create).not.toHaveBeenCalled();
-
- expect(mockElasticsearchClient.indices.putAlias).toHaveBeenCalledWith({
- index: indexName,
- name: aliasName,
- });
});
it('updates mappings for existing index without version in the meta', async () => {
@@ -306,11 +318,6 @@ describe('Session index', () => {
expect(mockElasticsearchClient.indices.deleteIndexTemplate).not.toHaveBeenCalled();
expect(mockElasticsearchClient.indices.create).not.toHaveBeenCalled();
- expect(mockElasticsearchClient.indices.putAlias).toHaveBeenCalledWith({
- index: indexName,
- name: aliasName,
- });
-
expect(mockElasticsearchClient.indices.getMapping).toHaveBeenCalledTimes(1);
expect(mockElasticsearchClient.indices.getMapping).toHaveBeenCalledWith({ index: aliasName });
expect(mockElasticsearchClient.indices.putMapping).toHaveBeenCalledTimes(1);
@@ -338,11 +345,6 @@ describe('Session index', () => {
expect(mockElasticsearchClient.indices.deleteIndexTemplate).not.toHaveBeenCalled();
expect(mockElasticsearchClient.indices.create).not.toHaveBeenCalled();
- expect(mockElasticsearchClient.indices.putAlias).toHaveBeenCalledWith({
- index: indexName,
- name: aliasName,
- });
-
expect(mockElasticsearchClient.indices.getMapping).toHaveBeenCalledTimes(1);
expect(mockElasticsearchClient.indices.getMapping).toHaveBeenCalledWith({ index: aliasName });
expect(mockElasticsearchClient.indices.putMapping).toHaveBeenCalledTimes(1);
@@ -370,11 +372,6 @@ describe('Session index', () => {
expect(mockElasticsearchClient.indices.deleteIndexTemplate).not.toHaveBeenCalled();
expect(mockElasticsearchClient.indices.create).not.toHaveBeenCalled();
- expect(mockElasticsearchClient.indices.putAlias).toHaveBeenCalledWith({
- index: indexName,
- name: aliasName,
- });
-
expect(mockElasticsearchClient.indices.getMapping).toHaveBeenCalledTimes(1);
expect(mockElasticsearchClient.indices.getMapping).toHaveBeenCalledWith({ index: aliasName });
expect(mockElasticsearchClient.indices.putMapping).not.toHaveBeenCalled();
@@ -390,7 +387,6 @@ describe('Session index', () => {
assertExistenceChecksPerformed();
expect(mockElasticsearchClient.indices.deleteTemplate).not.toHaveBeenCalled();
expect(mockElasticsearchClient.indices.deleteIndexTemplate).not.toHaveBeenCalled();
- expect(mockElasticsearchClient.indices.putAlias).toHaveBeenCalledTimes(1);
expect(mockElasticsearchClient.indices.getMapping).not.toHaveBeenCalled();
expect(mockElasticsearchClient.indices.putMapping).not.toHaveBeenCalled();
expect(mockElasticsearchClient.indices.create).toHaveBeenCalledWith(
@@ -527,7 +523,6 @@ describe('Session index', () => {
expect(mockElasticsearchClient.indices.exists).toHaveBeenCalledTimes(2);
expect(mockElasticsearchClient.indices.create).toHaveBeenCalledTimes(1);
- expect(mockElasticsearchClient.indices.putAlias).toHaveBeenCalledTimes(1);
expect(mockElasticsearchClient.search).toHaveBeenCalledTimes(1);
expect(mockElasticsearchClient.bulk).toHaveBeenCalledTimes(1);
expect(mockElasticsearchClient.closePointInTime).toHaveBeenCalledTimes(1); // since we attempted to delete sessions, we still refresh the index
@@ -1510,7 +1505,6 @@ describe('Session index', () => {
expect(mockElasticsearchClient.indices.exists).toHaveBeenCalledTimes(2);
expect(mockElasticsearchClient.indices.create).toHaveBeenCalledTimes(1);
- expect(mockElasticsearchClient.indices.putAlias).toHaveBeenCalledTimes(1);
expect(mockElasticsearchClient.create).toHaveBeenCalledTimes(2);
expect(mockElasticsearchClient.create).toHaveBeenNthCalledWith(
@@ -1567,7 +1561,6 @@ describe('Session index', () => {
expect(mockElasticsearchClient.indices.exists).not.toHaveBeenCalled();
expect(mockElasticsearchClient.indices.create).not.toHaveBeenCalled();
- expect(mockElasticsearchClient.indices.putAlias).not.toHaveBeenCalled();
expect(mockElasticsearchClient.create).toHaveBeenCalledTimes(1);
expect(mockElasticsearchClient.create).toHaveBeenCalledWith(
diff --git a/x-pack/platform/plugins/shared/security/server/session_management/session_index.ts b/x-pack/platform/plugins/shared/security/server/session_management/session_index.ts
index 21b6df5479252..33d1603fc602c 100644
--- a/x-pack/platform/plugins/shared/security/server/session_management/session_index.ts
+++ b/x-pack/platform/plugins/shared/security/server/session_management/session_index.ts
@@ -681,17 +681,25 @@ export class SessionIndex {
}
}
- await this.attachAliasToIndex();
-
return;
}
+ const isIndexNameAlias = await this.options.elasticsearchClient.indices.existsAlias({
+ name: this.aliasName,
+ });
+
+ if (!isIndexNameAlias) {
+ this.options.logger.debug(
+ 'Session index already exists with no alias. Attaching alias to the index.'
+ );
+
+ await this.attachAliasToIndex();
+ }
+
this.options.logger.debug(
- 'Session index already exists. Attaching alias to the index and ensuring up-to-date mappings...'
+ 'Session index already exists. Ensuring up-to-date index mappings...'
);
- await this.attachAliasToIndex();
-
let indexMappingsVersion: string | undefined;
try {
const indexMappings = await this.options.elasticsearchClient.indices.getMapping({
From 45f863fa33e407caa054524210ca46e06f8a854c Mon Sep 17 00:00:00 2001
From: Viduni Wickramarachchi
Date: Wed, 12 Feb 2025 04:44:44 -0500
Subject: [PATCH 04/11] [8.18] [Obs AI Assistant] Default to "native" function
calling if the connector config is not exposed (#210455) (#210569)
# Backport
This will backport the following commits from `main` to `8.18`:
- [[Obs AI Assistant] Default to "native" function calling if
the connector config is not exposed
(#210455)](https://github.com/elastic/kibana/pull/210455)
### Questions ?
Please refer to the [Backport tool
documentation](https://github.com/sorenlouv/backport)
---
.../chat_complete/utils/function_calling_support.test.ts | 8 ++++++++
.../chat_complete/utils/function_calling_support.ts | 6 +++---
2 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/utils/function_calling_support.test.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/utils/function_calling_support.test.ts
index a3723309a242c..f9a6a7ac96880 100644
--- a/x-pack/platform/plugins/shared/inference/server/chat_complete/utils/function_calling_support.test.ts
+++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/utils/function_calling_support.test.ts
@@ -60,5 +60,13 @@ describe('isNativeFunctionCallingSupported', () => {
});
expect(isNativeFunctionCallingSupported(connector)).toBe(false);
});
+
+ it('returns true if the config is not exposed', () => {
+ const connector = createConnector({
+ type: InferenceConnectorType.OpenAI,
+ config: {},
+ });
+ expect(isNativeFunctionCallingSupported(connector)).toBe(true);
+ });
});
});
diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/utils/function_calling_support.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/utils/function_calling_support.ts
index 7e70d417a2996..90b71cd1e612e 100644
--- a/x-pack/platform/plugins/shared/inference/server/chat_complete/utils/function_calling_support.ts
+++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/utils/function_calling_support.ts
@@ -11,9 +11,9 @@ import { OpenAiProviderType } from '../adapters/openai/types';
export const isNativeFunctionCallingSupported = (connector: InferenceConnector): boolean => {
switch (connector.type) {
case InferenceConnectorType.OpenAI:
- const apiProvider =
- (connector.config.apiProvider as OpenAiProviderType) ?? OpenAiProviderType.Other;
- return apiProvider !== OpenAiProviderType.Other;
+ const apiProvider = (connector.config.apiProvider as OpenAiProviderType) ?? undefined;
+ // defaulting to `true` when the config is not accessible
+ return apiProvider ? apiProvider !== OpenAiProviderType.Other : true;
case InferenceConnectorType.Inference:
// note: later we might need to check the provider type, for now let's assume support
// will be handled by ES and that all providers will support native FC.
From 278dd73f780921a9d5b5095f9c28b770a5205c46 Mon Sep 17 00:00:00 2001
From: Sergi Romeu
Date: Wed, 12 Feb 2025 12:17:11 +0100
Subject: [PATCH 05/11] [8.18] [APM] Remove `error.id` in
`getErrorGroupMainStatistics` query as it's not used (#210613) (#210762)
# Backport
This will backport the following commits from `main` to `8.18`:
- [[APM] Remove `error.id` in
`getErrorGroupMainStatistics` query as it's not used
(#210613)](https://github.com/elastic/kibana/pull/210613)
### Questions ?
Please refer to the [Backport tool
documentation](https://github.com/sorenlouv/backport)
\n\n### Questions ?\nPlease refer to the
[Backport
tool\ndocumentation](https://github.com/sqren/backport)\n\n\n\nCo-authored-by:
Sergi Romeu
"}},{"branch":"main","label":"v9.1.0","branchLabelMappingKey":"^v9.1.0$","isSourceBranch":true,"state":"MERGED","url":"https://github.com/elastic/kibana/pull/210613","number":210613,"mergeCommit":{"message":"[APM]
Remove `error.id` in `getErrorGroupMainStatistics` query as it's not
used (#210613)\n\n## Summary\n\nCloses #210610\n\nThis PR removes
`error.id` field from being queried at\n`getErrorGroupMainStatistics`,
as it was not being used, as it was\nrequired. If we didn't have this
field, the endpoint call would
crash.","sha":"46cd29e60be24fa3d39b2b364973e0e9b10659b7"}}]}]
BACKPORT-->
---
.../errors/get_error_groups/get_error_group_main_statistics.ts | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/x-pack/solutions/observability/plugins/apm/server/routes/errors/get_error_groups/get_error_group_main_statistics.ts b/x-pack/solutions/observability/plugins/apm/server/routes/errors/get_error_groups/get_error_group_main_statistics.ts
index e61fa75dfa4c1..925da8a33cc9d 100644
--- a/x-pack/solutions/observability/plugins/apm/server/routes/errors/get_error_groups/get_error_group_main_statistics.ts
+++ b/x-pack/solutions/observability/plugins/apm/server/routes/errors/get_error_groups/get_error_group_main_statistics.ts
@@ -17,7 +17,6 @@ import {
ERROR_EXC_TYPE,
ERROR_GROUP_ID,
ERROR_GROUP_NAME,
- ERROR_ID,
ERROR_LOG_MESSAGE,
SERVICE_NAME,
TRACE_ID,
@@ -97,7 +96,7 @@ export async function getErrorGroupMainStatistics({
]
: [];
- const requiredFields = asMutableArray([AT_TIMESTAMP, ERROR_GROUP_ID, ERROR_ID] as const);
+ const requiredFields = asMutableArray([AT_TIMESTAMP, ERROR_GROUP_ID] as const);
const optionalFields = asMutableArray([
TRACE_ID,
From a7ab203d5e91bbbfd1bbacb1a52b1e17e9efcdfb Mon Sep 17 00:00:00 2001
From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
Date: Wed, 12 Feb 2025 23:51:06 +1100
Subject: [PATCH 06/11] [8.18] [SIEM migrations] ES|QL editor: Broken
suggestions menu (#11535) (#210603) (#210750)
# Backport
This will backport the following commits from `main` to `8.18`:
- [[SIEM migrations] ES|QL editor: Broken suggestions menu (#11535)
(#210603)](https://github.com/elastic/kibana/pull/210603)
### Questions ?
Please refer to the [Backport tool
documentation](https://github.com/sqren/backport)
Co-authored-by: Ievgen Sorokopud
---
.../rules/components/rule_details_flyout/index.tsx | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/x-pack/solutions/security/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/index.tsx b/x-pack/solutions/security/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/index.tsx
index 8c75f4b92a767..96d63bd24d054 100644
--- a/x-pack/solutions/security/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/index.tsx
+++ b/x-pack/solutions/security/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/index.tsx
@@ -244,7 +244,14 @@ export const MigrationRuleDetailsFlyout: React.FC
-
+
Date: Thu, 13 Feb 2025 00:12:28 +1100
Subject: [PATCH 07/11] [8.18] [SecuritySolution][Endpoint] Remove hardcoded
agent version check for scan test (#210748) (#210787)
# Backport
This will backport the following commits from `main` to `8.18`:
- [[SecuritySolution][Endpoint] Remove hardcoded agent version check for
scan test (#210748)](https://github.com/elastic/kibana/pull/210748)
### Questions ?
Please refer to the [Backport tool
documentation](https://github.com/sqren/backport)
Co-authored-by: Ash <1849116+ashokaditya@users.noreply.github.com>
---
.../cypress/e2e/response_actions/response_console/scan.cy.ts | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/x-pack/solutions/security/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/scan.cy.ts b/x-pack/solutions/security/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/scan.cy.ts
index c1e566c16ca5b..da8a3e08c6374 100644
--- a/x-pack/solutions/security/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/scan.cy.ts
+++ b/x-pack/solutions/security/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/scan.cy.ts
@@ -59,8 +59,7 @@ describe(
policy = indexedPolicy.integrationPolicies[0];
return enableAllPolicyProtections(policy.id).then(() => {
- // At this point 8.14.2 is GA and this functionality is not available until 8.15.0
- return createEndpointHost(policy.policy_ids[0], '8.15.0').then((host) => {
+ return createEndpointHost(policy.policy_ids[0]).then((host) => {
createdHost = host as CreateAndEnrollEndpointHostResponse;
});
});
From db4261153d46b31bbb9b841b0818070ef14919a7 Mon Sep 17 00:00:00 2001
From: Angela Chuang <6295984+angorayc@users.noreply.github.com>
Date: Wed, 12 Feb 2025 13:12:53 +0000
Subject: [PATCH 08/11] [8.18] [Security Solution][Entity Analytics] EUI
refresh: Remove color functions (#205262) (#210559)
# Backport
This will backport the following commits from `main` to `8.18`:
- [[Security Solution][Entity Analytics] EUI refresh: Remove color
functions (#205262)](https://github.com/elastic/kibana/pull/205262)
### Questions ?
Please refer to the [Backport tool
documentation](https://github.com/sorenlouv/backport)
---
.../shared/components/left_panel/left_panel_content.tsx | 5 +++--
.../shared/components/left_panel/left_panel_header.tsx | 5 +++--
2 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/x-pack/solutions/security/plugins/security_solution/public/flyout/entity_details/shared/components/left_panel/left_panel_content.tsx b/x-pack/solutions/security/plugins/security_solution/public/flyout/entity_details/shared/components/left_panel/left_panel_content.tsx
index 5a66a5b305611..33806a604bc11 100644
--- a/x-pack/solutions/security/plugins/security_solution/public/flyout/entity_details/shared/components/left_panel/left_panel_content.tsx
+++ b/x-pack/solutions/security/plugins/security_solution/public/flyout/entity_details/shared/components/left_panel/left_panel_content.tsx
@@ -5,7 +5,7 @@
* 2.0.
*/
-import { useEuiBackgroundColor } from '@elastic/eui';
+import { useEuiTheme } from '@elastic/eui';
import type { VFC } from 'react';
import React, { useMemo } from 'react';
import { css } from '@emotion/react';
@@ -22,6 +22,7 @@ export interface PanelContentProps {
* Appears after the user clicks on the expand details button in the right section.
*/
export const LeftPanelContent: VFC = ({ selectedTabId, tabs }) => {
+ const { euiTheme } = useEuiTheme();
const selectedTabContent = useMemo(() => {
return tabs.find((tab) => tab.id === selectedTabId)?.content;
}, [selectedTabId, tabs]);
@@ -29,7 +30,7 @@ export const LeftPanelContent: VFC = ({ selectedTabId, tabs }
return (
{selectedTabContent}
diff --git a/x-pack/solutions/security/plugins/security_solution/public/flyout/entity_details/shared/components/left_panel/left_panel_header.tsx b/x-pack/solutions/security/plugins/security_solution/public/flyout/entity_details/shared/components/left_panel/left_panel_header.tsx
index 2d7fc23115eb7..3c4e1b9da65bc 100644
--- a/x-pack/solutions/security/plugins/security_solution/public/flyout/entity_details/shared/components/left_panel/left_panel_header.tsx
+++ b/x-pack/solutions/security/plugins/security_solution/public/flyout/entity_details/shared/components/left_panel/left_panel_header.tsx
@@ -5,7 +5,7 @@
* 2.0.
*/
-import { EuiTab, EuiTabs, useEuiBackgroundColor } from '@elastic/eui';
+import { EuiTab, EuiTabs, useEuiTheme } from '@elastic/eui';
import type { ReactElement, VFC } from 'react';
import React, { memo } from 'react';
import { css } from '@emotion/react';
@@ -57,6 +57,7 @@ export interface PanelHeaderProps {
*/
export const LeftPanelHeader: VFC = memo(
({ selectedTabId, setSelectedTabId, tabs }) => {
+ const { euiTheme } = useEuiTheme();
const onSelectedTabChanged = (id: EntityDetailsLeftPanelTab) => setSelectedTabId(id);
const renderTabs = tabs.map((tab, index) => (
= memo(
return (
Date: Wed, 12 Feb 2025 13:13:45 +0000
Subject: [PATCH 09/11] [8.18] [Security Solution][threat hunting explore] EUI
refresh: Remove color functions (#204921) (#210562)
# Backport
This will backport the following commits from `main` to `8.18`:
- [[Security Solution][threat hunting explore] EUI refresh: Remove color
functions (#204921)](https://github.com/elastic/kibana/pull/204921)
### Questions ?
Please refer to the [Backport tool
documentation](https://github.com/sorenlouv/backport)
---
.../public/flyout/document_details/left/content.tsx | 5 +++--
.../public/flyout/document_details/left/header.tsx | 5 +++--
.../onboarding_body/onboarding_card_panel.styles.ts | 6 +++---
3 files changed, 9 insertions(+), 7 deletions(-)
diff --git a/x-pack/solutions/security/plugins/security_solution/public/flyout/document_details/left/content.tsx b/x-pack/solutions/security/plugins/security_solution/public/flyout/document_details/left/content.tsx
index 53d2efe883397..5da0f5b8f5fc8 100644
--- a/x-pack/solutions/security/plugins/security_solution/public/flyout/document_details/left/content.tsx
+++ b/x-pack/solutions/security/plugins/security_solution/public/flyout/document_details/left/content.tsx
@@ -5,7 +5,7 @@
* 2.0.
*/
-import { useEuiBackgroundColor } from '@elastic/eui';
+import { useEuiTheme } from '@elastic/eui';
import type { FC } from 'react';
import React, { useMemo } from 'react';
import { css } from '@emotion/react';
@@ -29,6 +29,7 @@ export interface PanelContentProps {
* Displays the content of investigation and insights tabs (visualize is hidden for 8.9).
*/
export const PanelContent: FC = ({ selectedTabId, tabs }) => {
+ const { euiTheme } = useEuiTheme();
const selectedTabContent = useMemo(() => {
return tabs.find((tab) => tab.id === selectedTabId)?.content;
}, [selectedTabId, tabs]);
@@ -36,7 +37,7 @@ export const PanelContent: FC = ({ selectedTabId, tabs }) =>
return (
{selectedTabContent}
diff --git a/x-pack/solutions/security/plugins/security_solution/public/flyout/document_details/left/header.tsx b/x-pack/solutions/security/plugins/security_solution/public/flyout/document_details/left/header.tsx
index 2b61a97577e06..1e8f88cb68964 100644
--- a/x-pack/solutions/security/plugins/security_solution/public/flyout/document_details/left/header.tsx
+++ b/x-pack/solutions/security/plugins/security_solution/public/flyout/document_details/left/header.tsx
@@ -5,7 +5,7 @@
* 2.0.
*/
-import { EuiTab, EuiTabs, useEuiBackgroundColor } from '@elastic/eui';
+import { EuiTab, EuiTabs, useEuiTheme } from '@elastic/eui';
import type { FC } from 'react';
import React, { memo } from 'react';
import { css } from '@emotion/react';
@@ -38,6 +38,7 @@ export interface PanelHeaderProps {
*/
export const PanelHeader: FC = memo(
({ selectedTabId, setSelectedTabId, tabs }) => {
+ const { euiTheme } = useEuiTheme();
const { getFieldsData } = useDocumentDetailsContext();
const isEventKindSignal = getField(getFieldsData('event.kind')) === EventKind.signal;
@@ -56,7 +57,7 @@ export const PanelHeader: FC = memo(
return (
{
const { euiTheme, colorMode } = useEuiTheme();
- const successBackgroundColor = useEuiBackgroundColor('success');
+ const successBackgroundColor = euiTheme.colors.backgroundBaseSuccess;
const isDarkMode = colorMode === COLOR_MODES_STANDARD.dark;
const darkModeStyles = useDarkPanelStyles(isDarkMode);
@@ -31,7 +31,7 @@ export const useCardPanelStyles = () => {
}
.onboardingCardHeaderCompleteBadge {
background-color: ${successBackgroundColor};
- color: ${euiTheme.colors.successText};
+ color: ${euiTheme.colors.textSuccess};
}
.onboardingCardContentWrapper {
display: grid;
From a154bc15b40d2f3be7471e36631b2c994948da70 Mon Sep 17 00:00:00 2001
From: Charlotte Alexandra Wilson
Date: Wed, 12 Feb 2025 14:00:24 +0000
Subject: [PATCH 10/11] [8.18] Only show data warning screen on Serverless
(#201920) (#210413)
# Backport
This will backport the following commits from `main` to `8.18`:
- [Only show data warning screen on Serverless
(#201920)](https://github.com/elastic/kibana/pull/201920)
### Questions ?
Please refer to the [Backport tool
documentation](https://github.com/sorenlouv/backport)
---
.../public/contract_components.ts | 1 +
.../components/enablement_modal.test.tsx | 23 +++++++++++++++++--
.../components/enablement_modal.tsx | 3 +++
.../enablement_modal_callout.tsx | 21 +++++++++++++++++
.../enablement_modal_callout/index.tsx | 19 +++++++++++++++
.../enablement_modal_callout/lazy.tsx | 17 ++++++++++++++
.../public/plugin.ts | 2 ++
.../public/upselling/translations.ts | 8 +++++++
8 files changed, 92 insertions(+), 2 deletions(-)
create mode 100644 x-pack/solutions/security/plugins/security_solution_serverless/public/components/enablement_modal_callout/enablement_modal_callout.tsx
create mode 100644 x-pack/solutions/security/plugins/security_solution_serverless/public/components/enablement_modal_callout/index.tsx
create mode 100644 x-pack/solutions/security/plugins/security_solution_serverless/public/components/enablement_modal_callout/lazy.tsx
diff --git a/x-pack/solutions/security/plugins/security_solution/public/contract_components.ts b/x-pack/solutions/security/plugins/security_solution/public/contract_components.ts
index 8f5072f43f033..f7c255bcd34b8 100644
--- a/x-pack/solutions/security/plugins/security_solution/public/contract_components.ts
+++ b/x-pack/solutions/security/plugins/security_solution/public/contract_components.ts
@@ -11,6 +11,7 @@ import type { Observable } from 'rxjs';
export type ContractComponents = Partial<{
GetStarted: React.ComponentType<{ indicesExist?: boolean }>;
DashboardsLandingCallout: React.ComponentType<{}>;
+ EnablementModalCallout: React.ComponentType<{}>;
}>;
export type SetComponents = (components: ContractComponents) => void;
diff --git a/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/entity_store/components/enablement_modal.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/entity_store/components/enablement_modal.test.tsx
index cccccb175ff19..c16eb7e557a4b 100644
--- a/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/entity_store/components/enablement_modal.test.tsx
+++ b/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/entity_store/components/enablement_modal.test.tsx
@@ -6,6 +6,7 @@
*/
import React from 'react';
+import { act } from 'react-dom/test-utils';
import { fireEvent, render, screen } from '@testing-library/react';
import { EntityStoreEnablementModal } from './enablement_modal';
import { TestProviders } from '../../../../common/mock';
@@ -25,6 +26,11 @@ jest.mock('../../../hooks/use_missing_risk_engine_privileges', () => ({
useMissingRiskEnginePrivileges: () => mockUseMissingRiskEnginePrivileges(),
}));
+const mockUseContractComponents = jest.fn(() => ({}));
+jest.mock('../../../../common/hooks/use_contract_component', () => ({
+ useContractComponents: () => mockUseContractComponents(),
+}));
+
const defaultProps = {
visible: true,
toggle: mockToggle,
@@ -77,8 +83,10 @@ const missingRiskEnginePrivileges: RiskEngineMissingPrivilegesResponse = {
},
};
-const renderComponent = (props = defaultProps) => {
- return render(, { wrapper: TestProviders });
+const renderComponent = async (props = defaultProps) => {
+ await act(async () => {
+ return render(, { wrapper: TestProviders });
+ });
};
describe('EntityStoreEnablementModal', () => {
@@ -172,5 +180,16 @@ describe('EntityStoreEnablementModal', () => {
renderComponent();
expect(screen.getByTestId('callout-missing-risk-engine-privileges')).toBeInTheDocument();
});
+
+ it('should render additional charges message when available', async () => {
+ const EnablementModalCalloutMock = () => ;
+ mockUseContractComponents.mockReturnValue({
+ EnablementModalCallout: EnablementModalCalloutMock,
+ });
+
+ await renderComponent();
+
+ expect(screen.queryByTestId('enablement-modal-test')).toBeInTheDocument();
+ });
});
});
diff --git a/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/entity_store/components/enablement_modal.tsx b/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/entity_store/components/enablement_modal.tsx
index 4dc7bdac85b55..d977267137626 100644
--- a/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/entity_store/components/enablement_modal.tsx
+++ b/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/entity_store/components/enablement_modal.tsx
@@ -24,6 +24,7 @@ import {
import { css } from '@emotion/react';
import React, { useState } from 'react';
import { FormattedMessage } from '@kbn/i18n-react';
+import { useContractComponents } from '../../../../common/hooks/use_contract_component';
import {
ENABLEMENT_DESCRIPTION_RISK_ENGINE_ONLY,
ENABLEMENT_DESCRIPTION_ENTITY_STORE_ONLY,
@@ -69,6 +70,7 @@ export const EntityStoreEnablementModal: React.FC
+ {EnablementModalCallout && }
{
+ return (
+
+ {ADDITIONAL_CHARGES_MESSAGE}
+
+ );
+};
+
+// eslint-disable-next-line import/no-default-export
+export default EnablementModalCallout;
diff --git a/x-pack/solutions/security/plugins/security_solution_serverless/public/components/enablement_modal_callout/index.tsx b/x-pack/solutions/security/plugins/security_solution_serverless/public/components/enablement_modal_callout/index.tsx
new file mode 100644
index 0000000000000..0bc65a33d6530
--- /dev/null
+++ b/x-pack/solutions/security/plugins/security_solution_serverless/public/components/enablement_modal_callout/index.tsx
@@ -0,0 +1,19 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+import React from 'react';
+import type { Services } from '../../common/services';
+import { ServicesProvider } from '../../common/services';
+import { EnablementModalCallout } from './lazy';
+
+export const getEnablementModalCallout = (services: Services): React.ComponentType =>
+ function EnablementModalCalloutComponent() {
+ return (
+
+
+
+ );
+ };
diff --git a/x-pack/solutions/security/plugins/security_solution_serverless/public/components/enablement_modal_callout/lazy.tsx b/x-pack/solutions/security/plugins/security_solution_serverless/public/components/enablement_modal_callout/lazy.tsx
new file mode 100644
index 0000000000000..547a15fc535e9
--- /dev/null
+++ b/x-pack/solutions/security/plugins/security_solution_serverless/public/components/enablement_modal_callout/lazy.tsx
@@ -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 React, { lazy, Suspense } from 'react';
+import { EuiLoadingSpinner } from '@elastic/eui';
+
+const EnablementModalCalloutLazy = lazy(() => import('./enablement_modal_callout'));
+
+export const EnablementModalCallout = () => (
+ }>
+
+
+);
diff --git a/x-pack/solutions/security/plugins/security_solution_serverless/public/plugin.ts b/x-pack/solutions/security/plugins/security_solution_serverless/public/plugin.ts
index 4d94a11500d50..30e0f86ccdacf 100644
--- a/x-pack/solutions/security/plugins/security_solution_serverless/public/plugin.ts
+++ b/x-pack/solutions/security/plugins/security_solution_serverless/public/plugin.ts
@@ -23,6 +23,7 @@ import {
type ExperimentalFeatures,
} from '../common/experimental_features';
import { setOnboardingSettings } from './onboarding';
+import { getEnablementModalCallout } from './components/enablement_modal_callout';
export class SecuritySolutionServerlessPlugin
implements
@@ -69,6 +70,7 @@ export class SecuritySolutionServerlessPlugin
securitySolution.setComponents({
DashboardsLandingCallout: getDashboardsLandingCallout(services),
+ EnablementModalCallout: getEnablementModalCallout(services),
});
setOnboardingSettings(services);
diff --git a/x-pack/solutions/security/plugins/security_solution_serverless/public/upselling/translations.ts b/x-pack/solutions/security/plugins/security_solution_serverless/public/upselling/translations.ts
index 971873ca77838..f70a36f90348f 100644
--- a/x-pack/solutions/security/plugins/security_solution_serverless/public/upselling/translations.ts
+++ b/x-pack/solutions/security/plugins/security_solution_serverless/public/upselling/translations.ts
@@ -18,3 +18,11 @@ export const UPGRADE_PRODUCT_MESSAGE = (requiredProduct: string) =>
},
}
);
+
+export const ADDITIONAL_CHARGES_MESSAGE = i18n.translate(
+ 'xpack.securitySolutionServerless.entityStoreEnablementCallout.additionalChargesMessage',
+ {
+ defaultMessage:
+ 'Please be aware that activating these features may incur additional charges depending on your subscription plan. Review your plan details carefully to avoid unexpected costs before proceeding.',
+ }
+);
From c2d3c70ac99c80ed03381ecec7f91cf41910fbc0 Mon Sep 17 00:00:00 2001
From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
Date: Thu, 13 Feb 2025 01:08:34 +1100
Subject: [PATCH 11/11] [8.18] Update dependency semver to ^7.7.1 (main)
(#210557) (#210811)
# Backport
This will backport the following commits from `main` to `8.18`:
- [Update dependency semver to ^7.7.1 (main)
(#210557)](https://github.com/elastic/kibana/pull/210557)
### Questions ?
Please refer to the [Backport tool
documentation](https://github.com/sqren/backport)
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 fd96e0efd9596..d0bee83226aa3 100644
--- a/package.json
+++ b/package.json
@@ -1261,7 +1261,7 @@
"rxjs": "^7.8.1",
"safe-squel": "^5.12.5",
"seedrandom": "^3.0.5",
- "semver": "^7.7.0",
+ "semver": "^7.7.1",
"set-value": "^4.1.0",
"snakecase-keys": "^8.0.0",
"source-map-support": "^0.5.19",
diff --git a/yarn.lock b/yarn.lock
index e52703c339557..ed6139a4ffb7f 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -29279,7 +29279,7 @@ semver@^6.0.0, semver@^6.1.0, semver@^6.1.2, semver@^6.3.0, semver@^6.3.1:
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
-semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.5.0, semver@^7.5.2, semver@^7.5.3, semver@^7.5.4, semver@^7.6.3, semver@^7.7.0:
+semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.5.0, semver@^7.5.2, semver@^7.5.3, semver@^7.5.4, semver@^7.6.3, semver@^7.7.1:
version "7.7.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f"
integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==